ronin-skillforce 0.1.0 → 0.2.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/LICENSE +202 -21
  3. package/NOTICE +19 -0
  4. package/README.md +38 -5
  5. package/bin/cli.js +15 -3
  6. package/bin/commands/archive.js +192 -0
  7. package/bin/commands/capstone-status.js +82 -0
  8. package/bin/commands/create.js +69 -12
  9. package/bin/commands/import.js +5 -5
  10. package/bin/commands/status.js +1 -1
  11. package/bin/commands/studio-autostart.js +414 -0
  12. package/bin/commands/studio-state.js +159 -0
  13. package/bin/commands/studio.js +351 -17
  14. package/bin/commands/trail.js +153 -3
  15. package/bin/commands/web.js +8 -10
  16. package/bin/course-reader.js +6 -15
  17. package/bin/platforms/_shared.js +154 -28
  18. package/bin/platforms/claude.js +23 -42
  19. package/bin/platforms/cursor.js +23 -20
  20. package/bin/platforms/gemini.js +18 -19
  21. package/bin/platforms/opencode.js +47 -28
  22. package/package.json +5 -4
  23. package/plugin.json +1 -1
  24. package/shared/SKILL.md +102 -72
  25. package/shared/agents/coach.md +19 -16
  26. package/shared/agents/navigator.md +27 -34
  27. package/shared/agents/professor.md +16 -34
  28. package/shared/agents/researcher.md +1 -1
  29. package/shared/agents/spotter.md +3 -4
  30. package/shared/commands/professor/archive.md +65 -72
  31. package/shared/commands/professor/capstone-review.md +5 -5
  32. package/shared/commands/professor/capstone.md +3 -3
  33. package/shared/commands/professor/done.md +59 -31
  34. package/shared/commands/professor/hint.md +14 -2
  35. package/shared/commands/professor/navigator.md +27 -1
  36. package/shared/commands/professor/new-topic.md +3 -3
  37. package/shared/commands/professor/next.md +9 -5
  38. package/shared/commands/professor/note.md +6 -6
  39. package/shared/commands/professor/progress.md +1 -1
  40. package/shared/commands/professor/publish.md +5 -5
  41. package/shared/commands/professor/quiz.md +2 -2
  42. package/shared/commands/professor/recall.md +1 -1
  43. package/shared/commands/professor/review.md +14 -0
  44. package/shared/commands/professor/skill-export.md +3 -4
  45. package/shared/commands/professor/spotter.md +21 -4
  46. package/shared/commands/professor/stuck.md +24 -0
  47. package/shared/commands/professor/switch.md +1 -1
  48. package/shared/commands/professor/syllabus.md +1 -1
  49. package/shared/commands/professor/template-export.md +2 -2
  50. package/shared/commands/professor/worktrees.md +3 -7
  51. package/shared/hooks/pre-compact.js +4 -15
  52. package/studio/dist/assets/BetaReportPanel-BJ9HIAnz.js +1 -0
  53. package/studio/dist/assets/{Capstone-Cv9kH6LY.js → Capstone-CoUU-jP7.js} +1 -1
  54. package/studio/dist/assets/{CodeWorkspace-BwCEINWo.js → CodeWorkspace-BNrL4qvR.js} +2 -2
  55. package/studio/dist/assets/{Course-BJ_hafUP.js → Course-BMGTXus_.js} +1 -1
  56. package/studio/dist/assets/{Editor-CV0mNhlz.js → Editor-Cw9j3cnp.js} +1 -1
  57. package/studio/dist/assets/{Home-C1ry89ak.js → Home-D2woITq5.js} +1 -1
  58. package/studio/dist/assets/{Lesson-2e9TD9yL.js → Lesson-CYQhrDCZ.js} +2 -2
  59. package/studio/dist/assets/{NewCourse-BZeOg2xn.js → NewCourse-CMpwVRQb.js} +1 -1
  60. package/studio/dist/assets/{Progress-CRc_xEWC.js → Progress-2rS19Fur.js} +1 -1
  61. package/studio/dist/assets/{Review-6QEbHEfk.js → Review-SlqK-hjp.js} +1 -1
  62. package/studio/dist/assets/{Settings-NFnqVQui.js → Settings-t42u7n9H.js} +1 -1
  63. package/studio/dist/assets/{TutorPanel-DXQ6Z3BY.js → TutorPanel-DQDWIU7f.js} +3 -3
  64. package/studio/dist/assets/{abnfDiagram-WEYOIA3C-qeSjKlGM.js → abnfDiagram-WEYOIA3C-jTUmGBuB.js} +1 -1
  65. package/studio/dist/assets/{anthropic-D7NiQCUH.js → anthropic-iIm2l85r.js} +3 -3
  66. package/studio/dist/assets/{architecture-WOLXFQ4H-COG-m35l.js → architecture-WOLXFQ4H-Ch9Ld_vv.js} +1 -1
  67. package/studio/dist/assets/{architectureDiagram-ZHVYKT53-VO7uKoeD.js → architectureDiagram-ZHVYKT53-Dy-z6wsy.js} +1 -1
  68. package/studio/dist/assets/{blockDiagram-RJAE7QA3-BGJF_qiL.js → blockDiagram-RJAE7QA3-2fHVrc6N.js} +1 -1
  69. package/studio/dist/assets/{bridge-BTh0AeNX.js → bridge-Cr0q4rLp.js} +1 -1
  70. package/studio/dist/assets/{c4Diagram-XDPPPE54-C-S10RgU.js → c4Diagram-XDPPPE54-BuuKlG4V.js} +1 -1
  71. package/studio/dist/assets/{capstone-Amn6Hztq.js → capstone-DhwBeNqk.js} +1 -1
  72. package/studio/dist/assets/{card-store-BrbrtX9w.js → card-store-CVMBc-Pv.js} +1 -1
  73. package/studio/dist/assets/channel-M_JkdHrL.js +1 -0
  74. package/studio/dist/assets/{chunk-2E7WHVMD-fv-iqTyC.js → chunk-2E7WHVMD-lZdQWttk.js} +1 -1
  75. package/studio/dist/assets/{chunk-4EMNKR2T-CY9IZrgv.js → chunk-4EMNKR2T-C6kbMwke.js} +1 -1
  76. package/studio/dist/assets/{chunk-55XCU76K-DyTZz7v_.js → chunk-55XCU76K-rkBzkZog.js} +1 -1
  77. package/studio/dist/assets/{chunk-7S6XSTFO-BNMzTLRW.js → chunk-7S6XSTFO-Skg347QF.js} +1 -1
  78. package/studio/dist/assets/{chunk-AQDTSKZB-CEYANohH.js → chunk-AQDTSKZB-0pSDBJ23.js} +1 -1
  79. package/studio/dist/assets/{chunk-DSNLSHJZ-CDk5EXjH.js → chunk-DSNLSHJZ-BaeQDl2i.js} +1 -1
  80. package/studio/dist/assets/{chunk-HAGFOTED-hNAi1zh_.js → chunk-HAGFOTED-BEm00juw.js} +1 -1
  81. package/studio/dist/assets/{chunk-HNE4Q36P-COJnSYoZ.js → chunk-HNE4Q36P-DyCR-LvS.js} +1 -1
  82. package/studio/dist/assets/{chunk-NQOKRVIF-BU6KVxRr.js → chunk-NQOKRVIF-BNJ9uMmB.js} +1 -1
  83. package/studio/dist/assets/{chunk-UHW7PFBP-DYvxL9JG.js → chunk-UHW7PFBP-DqJczBLs.js} +1 -1
  84. package/studio/dist/assets/{chunk-VQ5W62QI-CuRfk65j.js → chunk-VQ5W62QI-CVWYSP5Q.js} +1 -1
  85. package/studio/dist/assets/{chunk-WQQL4CDK-KaG7x-Mb.js → chunk-WQQL4CDK-DJf0Dx05.js} +1 -1
  86. package/studio/dist/assets/{chunk-YZO67HFG-DbuqIZmk.js → chunk-YZO67HFG-BFUm_JHA.js} +1 -1
  87. package/studio/dist/assets/{chunk-ZAUX2LTX-bk4ivUmc.js → chunk-ZAUX2LTX-C5ETkkSE.js} +1 -1
  88. package/studio/dist/assets/{chunk-ZCHMQSOR-B_LElfwh.js → chunk-ZCHMQSOR-WVX9r9PZ.js} +1 -1
  89. package/studio/dist/assets/{classDiagram-v2-4MYWR3UA-DtCJ6H_X.js → classDiagram-v2-4MYWR3UA-CI77SpuR.js} +1 -1
  90. package/studio/dist/assets/{course-export-DpaOTT3a.js → course-export-C8jSPuda.js} +1 -1
  91. package/studio/dist/assets/{cynefin-EF2NZ3EQ-D9btHJvU.js → cynefin-EF2NZ3EQ-CLffmM25.js} +1 -1
  92. package/studio/dist/assets/{cynefinDiagram-WF24UDRP-CsFJuv27.js → cynefinDiagram-WF24UDRP-BvLwocOb.js} +1 -1
  93. package/studio/dist/assets/{dagre-NK4GIZVX-Cg1Duec7.js → dagre-NK4GIZVX-C2nMAVdh.js} +1 -1
  94. package/studio/dist/assets/{diagram-CBK3MWTC-_KU2m5gd.js → diagram-CBK3MWTC-Bid-pdax.js} +1 -1
  95. package/studio/dist/assets/{diagram-I5XIIV2D-5RaBrwUA.js → diagram-I5XIIV2D-DYJeAvzl.js} +1 -1
  96. package/studio/dist/assets/{diagram-ODIL2UCW-C0VKxoD3.js → diagram-ODIL2UCW-B06X2r_F.js} +1 -1
  97. package/studio/dist/assets/{diagram-PFBEJUXE-BaHcZEP2.js → diagram-PFBEJUXE-CwY--5Rz.js} +1 -1
  98. package/studio/dist/assets/{diagram-RJA3I4VV-cwSAZ90p.js → diagram-RJA3I4VV-4SqhH8zw.js} +1 -1
  99. package/studio/dist/assets/{diagram-TYUNFSNR-BJImxCEN.js → diagram-TYUNFSNR-CrW4AIM9.js} +1 -1
  100. package/studio/dist/assets/{ebnfDiagram-V4P3TTPT-OQQLRXcm.js → ebnfDiagram-V4P3TTPT-xeoCmH-d.js} +1 -1
  101. package/studio/dist/assets/{elk-QONTBCTQ-BJGhQHxQ.js → elk-QONTBCTQ-Dadmz6iS.js} +1 -1
  102. package/studio/dist/assets/{erDiagram-KYQIGQAA-D91EKSep.js → erDiagram-KYQIGQAA-CSuH0bbF.js} +1 -1
  103. package/studio/dist/assets/{eventmodeling-K75KTNOO-DgdTRgnw.js → eventmodeling-K75KTNOO-CciVfx3I.js} +1 -1
  104. package/studio/dist/assets/flowDiagram-IUGLLWBU-DgNR54qK.js +1 -0
  105. package/studio/dist/assets/{ganttDiagram-R7GPNTJY-CSYLPWEI.js → ganttDiagram-R7GPNTJY-C0wtA-2y.js} +1 -1
  106. package/studio/dist/assets/{gitGraph-VSP46ZUC-D6GWaV9y.js → gitGraph-VSP46ZUC-BXoDzaA3.js} +1 -1
  107. package/studio/dist/assets/{gitGraphDiagram-PDYL7XHY-CaV31bvT.js → gitGraphDiagram-PDYL7XHY-vZBlNRPe.js} +1 -1
  108. package/studio/dist/assets/{index-DioXTZVc.js → index-CS8XPYbB.js} +2 -2
  109. package/studio/dist/assets/{info-OHQRW6UA-BN-x8GoN.js → info-OHQRW6UA-bs2Qpf7P.js} +1 -1
  110. package/studio/dist/assets/{infoDiagram-MVDRKAX5-CIose_cy.js → infoDiagram-MVDRKAX5-rPJio6-1.js} +1 -1
  111. package/studio/dist/assets/{ishikawaDiagram-HPEHV2GE-DCihSNBw.js → ishikawaDiagram-HPEHV2GE-CXf9XFff.js} +1 -1
  112. package/studio/dist/assets/{journeyDiagram-BOSHW7O7-Bz3o3RIX.js → journeyDiagram-BOSHW7O7-C3MSH79o.js} +1 -1
  113. package/studio/dist/assets/{kanban-definition-FNSA4HC5-BUyqvlFE.js → kanban-definition-FNSA4HC5-Bdh7SB4n.js} +1 -1
  114. package/studio/dist/assets/{line-B08T8KlK.js → line-CHkoQXJF.js} +1 -1
  115. package/studio/dist/assets/{mermaid-parser.core-BYwreSUy.js → mermaid-parser.core-Do1oxD1S.js} +3 -3
  116. package/studio/dist/assets/{mermaid.core-DTO1oDmq.js → mermaid.core-DgZUD0sU.js} +4 -4
  117. package/studio/dist/assets/{mindmap-definition-6OY57UG3-BGLwKheY.js → mindmap-definition-6OY57UG3-PUaK6oE_.js} +1 -1
  118. package/studio/dist/assets/{node.browser-BISniYn8.js → node.browser-DkpMze_r.js} +1 -1
  119. package/studio/dist/assets/{ollama-De5w84tG.js → ollama-bJNp3jaD.js} +1 -1
  120. package/studio/dist/assets/{openai-compatible-Joy1oK3L.js → openai-compatible-0tmAyMlN.js} +1 -1
  121. package/studio/dist/assets/{packet-JDAUHWVQ-CDIMjHS_.js → packet-JDAUHWVQ-vf2FtqFr.js} +1 -1
  122. package/studio/dist/assets/{pegDiagram-ECIUJNBX-DWXm4mwS.js → pegDiagram-ECIUJNBX-NEVrgPTY.js} +1 -1
  123. package/studio/dist/assets/{pie-XZMESJXO-CY3QQiKZ.js → pie-XZMESJXO-BIWydVNZ.js} +1 -1
  124. package/studio/dist/assets/{pieDiagram-GNMPY74T-M1aCnI7W.js → pieDiagram-GNMPY74T-BI9_u6rT.js} +1 -1
  125. package/studio/dist/assets/{quadrantDiagram-D57K4MC3-BFFtO7U5.js → quadrantDiagram-D57K4MC3-ryNpoBC5.js} +1 -1
  126. package/studio/dist/assets/{radar-ABXABTNO-DT0W4_Xn.js → radar-ABXABTNO-D8TjnvBB.js} +1 -1
  127. package/studio/dist/assets/{railroad-I3PHUGI6-_VCpgZR5.js → railroad-I3PHUGI6-BmEDV5kf.js} +1 -1
  128. package/studio/dist/assets/{railroad-abnf-LNEFI6M7-DkSpQ5YY.js → railroad-abnf-LNEFI6M7-Cs_sArMc.js} +1 -1
  129. package/studio/dist/assets/{railroad-ebnf-DWYD2UWJ-BqWILdGb.js → railroad-ebnf-DWYD2UWJ-DYuCq46d.js} +1 -1
  130. package/studio/dist/assets/{railroad-peg-JR7BVNR7-BB0bQL-Z.js → railroad-peg-JR7BVNR7-BcXSgdMy.js} +1 -1
  131. package/studio/dist/assets/{railroadDiagram-Y72NRBL7-CjLKjIdJ.js → railroadDiagram-Y72NRBL7-DBcc8b2c.js} +1 -1
  132. package/studio/dist/assets/{rehype-katex-C-sKddsH.js → rehype-katex-BfUIq5As.js} +1 -1
  133. package/studio/dist/assets/{remark-math-C-ox67hE.js → remark-math-XvZOjmDO.js} +1 -1
  134. package/studio/dist/assets/{requirementDiagram-EQYSW5RA-CnwzZqR8.js → requirementDiagram-EQYSW5RA-CVcBgM1L.js} +1 -1
  135. package/studio/dist/assets/{sankeyDiagram-SY24JHO5-CPDugTUl.js → sankeyDiagram-SY24JHO5-DjZ81hDs.js} +1 -1
  136. package/studio/dist/assets/{sequenceDiagram-BLEHNHQU-1dLfeU9Y.js → sequenceDiagram-BLEHNHQU-BNwOa2S7.js} +1 -1
  137. package/studio/dist/assets/{stateDiagram-v2-A6IESKWZ-DR7CmEjj.js → stateDiagram-v2-A6IESKWZ-BFWa5lEx.js} +1 -1
  138. package/studio/dist/assets/{swimlanes-B3ENRKFQ-BAWB9omQ.js → swimlanes-B3ENRKFQ-LfM_Jg6Z.js} +1 -1
  139. package/studio/dist/assets/swimlanesDiagram-AYQRV4AK-BDmpoiGp.js +8 -0
  140. package/studio/dist/assets/{timeline-definition-JXYKGLGB-DNkj8z77.js → timeline-definition-JXYKGLGB-BwGzkWgZ.js} +1 -1
  141. package/studio/dist/assets/{treeView-D4JQ5SDB-BA-ouhMb.js → treeView-D4JQ5SDB-MLk3VuRt.js} +1 -1
  142. package/studio/dist/assets/{treemap-SAJKECNS-BrrGxsAb.js → treemap-SAJKECNS-D8iSjp7L.js} +1 -1
  143. package/studio/dist/assets/{usecaseDiagram-WPOLBNNX-BB3D0Dt_.js → usecaseDiagram-WPOLBNNX-BqxpaNlT.js} +1 -1
  144. package/studio/dist/assets/{vennDiagram-Q3Y3IDCW-BrtqtKTE.js → vennDiagram-Q3Y3IDCW-CpeUDMhQ.js} +1 -1
  145. package/studio/dist/assets/{wardley-7MLQ67FV-BKkemDql.js → wardley-7MLQ67FV-tAMbCZAj.js} +1 -1
  146. package/studio/dist/assets/{wardleyDiagram-IVAIDKWA-DFnI3P5z.js → wardleyDiagram-IVAIDKWA-CDJViWzt.js} +1 -1
  147. package/studio/dist/assets/{xychartDiagram-4URNHDU4-Da0DZG_q.js → xychartDiagram-4URNHDU4-CwaQrd3_.js} +1 -1
  148. package/studio/dist/index.html +1 -1
  149. package/templates/claude/plugin.json +1 -1
  150. package/templates/gemini/GEMINI.md +18 -16
  151. package/web/server.js +3 -3
  152. package/studio/dist/assets/BetaReportPanel-8NrDLiPm.js +0 -1
  153. package/studio/dist/assets/channel-SJiUQu_N.js +0 -1
  154. package/studio/dist/assets/flowDiagram-IUGLLWBU-CVnJYMum.js +0 -1
  155. package/studio/dist/assets/swimlanesDiagram-AYQRV4AK-qeuHru16.js +0 -8
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./katex-BgsA2lO1.css","./mermaid.core-DTO1oDmq.js","./index-DioXTZVc.js","./rolldown-runtime-COiEfhsA.js","./react-B8SKf8RM.js","./settings-DhwuyNPU.js","./errors-BZa_CNHL.js","./index-CVenTTOY.css","./chunk-Y2CYZVJY-DsF7k-Jl.js","./src-BWF7jMDv.js","./chunk-DSNLSHJZ-CDk5EXjH.js","./chunk-7S6XSTFO-BNMzTLRW.js","./dist-CumnGVmJ.js","./chunk-YZO67HFG-DbuqIZmk.js","./chunk-AQDTSKZB-CEYANohH.js","./chunk-DUW6YSOI-Dgx8z5s3.js","./chunk-UHW7PFBP-DYvxL9JG.js","./chunk-HAGFOTED-hNAi1zh_.js","./chunk-J5ZVWO5B-oDCd-gWO.js","./rough.esm-Dy-Kn_BL.js","./chunk-ZAUX2LTX-bk4ivUmc.js","./chunk-WQQL4CDK-KaG7x-Mb.js","./line-B08T8KlK.js","./path-fybaL0A-.js","./array-BifhSqXX.js","./chunk-HNE4Q36P-COJnSYoZ.js"])))=>i.map(i=>d[i]);
2
- import{i as e,n as t,t as n}from"./rolldown-runtime-COiEfhsA.js";import{t as r}from"./react-B8SKf8RM.js";import{f as i}from"./settings-DhwuyNPU.js";import{i as a,l as o,n as s,o as c,r as l}from"./errors-BZa_CNHL.js";import{C as u,D as d,Lt as f,O as p,Ot as m,R as h,Rt as g,S as _,T as v,Tt as y,Z as b,_ as x,_t as S,a as C,b as w,f as T,g as E,h as D,ht as O,i as ee,it as te,k as ne,p as re,t as k,v as ie,x as A}from"./index-DioXTZVc.js";import{c as j,l as M,r as N,t as ae}from"./schemas-BOc2YsOP.js";import{A as oe,M as P,O as se,j as ce}from"./capstone-Amn6Hztq.js";import{t as le}from"./useStream-rdsR6A7P.js";var ue=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};ue.prototype.normal={},ue.prototype.property={},ue.prototype.space=void 0;function de(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new ue(n,r,t)}function fe(e){return e.toLowerCase()}var F=class{constructor(e,t){this.attribute=t,this.property=e}};F.prototype.attribute=``,F.prototype.booleanish=!1,F.prototype.boolean=!1,F.prototype.commaOrSpaceSeparated=!1,F.prototype.commaSeparated=!1,F.prototype.defined=!1,F.prototype.mustUseProperty=!1,F.prototype.number=!1,F.prototype.overloadedBoolean=!1,F.prototype.property=``,F.prototype.spaceSeparated=!1,F.prototype.space=void 0;var pe=t({boolean:()=>I,booleanish:()=>L,commaOrSpaceSeparated:()=>V,commaSeparated:()=>B,number:()=>R,overloadedBoolean:()=>he,spaceSeparated:()=>z}),me=0,I=H(),L=H(),he=H(),R=H(),z=H(),B=H(),V=H();function H(){return 2**++me}var ge=Object.keys(pe),_e=class extends F{constructor(e,t,n,r){let i=-1;if(super(e,t),ve(this,`space`,r),typeof n==`number`)for(;++i<ge.length;){let e=ge[i];ve(this,ge[i],(n&pe[e])===pe[e])}}};_e.prototype.defined=!0;function ve(e,t,n){n&&(e[t]=n)}function ye(e){let t={},n={};for(let[r,i]of Object.entries(e.properties)){let a=new _e(r,e.transform(e.attributes||{},r),i,e.space);e.mustUseProperty&&e.mustUseProperty.includes(r)&&(a.mustUseProperty=!0),t[r]=a,n[fe(r)]=r,n[fe(a.attribute)]=r}return new ue(t,n,e.space)}var be=ye({properties:{ariaActiveDescendant:null,ariaAtomic:L,ariaAutoComplete:null,ariaBusy:L,ariaChecked:L,ariaColCount:R,ariaColIndex:R,ariaColSpan:R,ariaControls:z,ariaCurrent:null,ariaDescribedBy:z,ariaDetails:null,ariaDisabled:L,ariaDropEffect:z,ariaErrorMessage:null,ariaExpanded:L,ariaFlowTo:z,ariaGrabbed:L,ariaHasPopup:null,ariaHidden:L,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:z,ariaLevel:R,ariaLive:null,ariaModal:L,ariaMultiLine:L,ariaMultiSelectable:L,ariaOrientation:null,ariaOwns:z,ariaPlaceholder:null,ariaPosInSet:R,ariaPressed:L,ariaReadOnly:L,ariaRelevant:null,ariaRequired:L,ariaRoleDescription:z,ariaRowCount:R,ariaRowIndex:R,ariaRowSpan:R,ariaSelected:L,ariaSetSize:R,ariaSort:null,ariaValueMax:R,ariaValueMin:R,ariaValueNow:R,ariaValueText:null,role:null},transform(e,t){return t===`role`?t:`aria-`+t.slice(4).toLowerCase()}});function xe(e,t){return t in e?e[t]:t}function Se(e,t){return xe(e,t.toLowerCase())}var Ce=ye({attributes:{acceptcharset:`accept-charset`,classname:`class`,htmlfor:`for`,httpequiv:`http-equiv`},mustUseProperty:[`checked`,`multiple`,`muted`,`selected`],properties:{abbr:null,accept:B,acceptCharset:z,accessKey:z,action:null,allow:null,allowFullScreen:I,allowPaymentRequest:I,allowUserMedia:I,alpha:I,alt:null,as:null,async:I,autoCapitalize:null,autoComplete:z,autoFocus:I,autoPlay:I,blocking:z,capture:null,charSet:null,checked:I,cite:null,className:z,closedBy:null,colorSpace:null,cols:R,colSpan:R,command:null,commandFor:null,content:null,contentEditable:L,controls:I,controlsList:z,coords:R|B,crossOrigin:null,data:null,dateTime:null,decoding:null,default:I,defer:I,dir:null,dirName:null,disabled:I,download:he,draggable:L,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:I,formTarget:null,headers:z,height:R,hidden:he,high:R,href:null,hrefLang:null,htmlFor:z,httpEquiv:z,id:null,imageSizes:null,imageSrcSet:null,inert:I,inputMode:null,integrity:null,is:null,isMap:I,itemId:null,itemProp:z,itemRef:z,itemScope:I,itemType:z,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:I,low:R,manifest:null,max:null,maxLength:R,media:null,method:null,min:null,minLength:R,multiple:I,muted:I,name:null,nonce:null,noModule:I,noValidate:I,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:I,optimum:R,pattern:null,ping:z,placeholder:null,playsInline:I,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:I,referrerPolicy:null,rel:z,required:I,reversed:I,rows:R,rowSpan:R,sandbox:z,scope:null,scoped:I,seamless:I,selected:I,shadowRootClonable:I,shadowRootCustomElementRegistry:I,shadowRootDelegatesFocus:I,shadowRootMode:null,shadowRootSerializable:I,shape:null,size:R,sizes:null,slot:null,span:R,spellCheck:L,src:null,srcDoc:null,srcLang:null,srcSet:null,start:R,step:null,style:null,tabIndex:R,target:null,title:null,translate:null,type:null,typeMustMatch:I,useMap:null,value:L,width:R,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:z,axis:null,background:null,bgColor:null,border:R,borderColor:null,bottomMargin:R,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:I,declare:I,event:null,face:null,frame:null,frameBorder:null,hSpace:R,leftMargin:R,link:null,longDesc:null,lowSrc:null,marginHeight:R,marginWidth:R,noResize:I,noHref:I,noShade:I,noWrap:I,object:null,profile:null,prompt:null,rev:null,rightMargin:R,rules:null,scheme:null,scrolling:L,standby:null,summary:null,text:null,topMargin:R,valueType:null,version:null,vAlign:null,vLink:null,vSpace:R,allowTransparency:null,autoCorrect:null,autoSave:null,credentialless:I,disablePictureInPicture:I,disableRemotePlayback:I,exportParts:B,part:z,prefix:null,property:null,results:R,security:null,unselectable:null},space:`html`,transform:Se}),we=ye({attributes:{accentHeight:`accent-height`,alignmentBaseline:`alignment-baseline`,arabicForm:`arabic-form`,baselineShift:`baseline-shift`,capHeight:`cap-height`,className:`class`,clipPath:`clip-path`,clipRule:`clip-rule`,colorInterpolation:`color-interpolation`,colorInterpolationFilters:`color-interpolation-filters`,colorProfile:`color-profile`,colorRendering:`color-rendering`,crossOrigin:`crossorigin`,dataType:`datatype`,dominantBaseline:`dominant-baseline`,enableBackground:`enable-background`,fillOpacity:`fill-opacity`,fillRule:`fill-rule`,floodColor:`flood-color`,floodOpacity:`flood-opacity`,fontFamily:`font-family`,fontSize:`font-size`,fontSizeAdjust:`font-size-adjust`,fontStretch:`font-stretch`,fontStyle:`font-style`,fontVariant:`font-variant`,fontWeight:`font-weight`,glyphName:`glyph-name`,glyphOrientationHorizontal:`glyph-orientation-horizontal`,glyphOrientationVertical:`glyph-orientation-vertical`,hrefLang:`hreflang`,horizAdvX:`horiz-adv-x`,horizOriginX:`horiz-origin-x`,horizOriginY:`horiz-origin-y`,imageRendering:`image-rendering`,letterSpacing:`letter-spacing`,lightingColor:`lighting-color`,markerEnd:`marker-end`,markerMid:`marker-mid`,markerStart:`marker-start`,maskType:`mask-type`,navDown:`nav-down`,navDownLeft:`nav-down-left`,navDownRight:`nav-down-right`,navLeft:`nav-left`,navNext:`nav-next`,navPrev:`nav-prev`,navRight:`nav-right`,navUp:`nav-up`,navUpLeft:`nav-up-left`,navUpRight:`nav-up-right`,onAbort:`onabort`,onActivate:`onactivate`,onAfterPrint:`onafterprint`,onBeforePrint:`onbeforeprint`,onBegin:`onbegin`,onCancel:`oncancel`,onCanPlay:`oncanplay`,onCanPlayThrough:`oncanplaythrough`,onChange:`onchange`,onClick:`onclick`,onClose:`onclose`,onCopy:`oncopy`,onCueChange:`oncuechange`,onCut:`oncut`,onDblClick:`ondblclick`,onDrag:`ondrag`,onDragEnd:`ondragend`,onDragEnter:`ondragenter`,onDragExit:`ondragexit`,onDragLeave:`ondragleave`,onDragOver:`ondragover`,onDragStart:`ondragstart`,onDrop:`ondrop`,onDurationChange:`ondurationchange`,onEmptied:`onemptied`,onEnd:`onend`,onEnded:`onended`,onError:`onerror`,onFocus:`onfocus`,onFocusIn:`onfocusin`,onFocusOut:`onfocusout`,onHashChange:`onhashchange`,onInput:`oninput`,onInvalid:`oninvalid`,onKeyDown:`onkeydown`,onKeyPress:`onkeypress`,onKeyUp:`onkeyup`,onLoad:`onload`,onLoadedData:`onloadeddata`,onLoadedMetadata:`onloadedmetadata`,onLoadStart:`onloadstart`,onMessage:`onmessage`,onMouseDown:`onmousedown`,onMouseEnter:`onmouseenter`,onMouseLeave:`onmouseleave`,onMouseMove:`onmousemove`,onMouseOut:`onmouseout`,onMouseOver:`onmouseover`,onMouseUp:`onmouseup`,onMouseWheel:`onmousewheel`,onOffline:`onoffline`,onOnline:`ononline`,onPageHide:`onpagehide`,onPageShow:`onpageshow`,onPaste:`onpaste`,onPause:`onpause`,onPlay:`onplay`,onPlaying:`onplaying`,onPopState:`onpopstate`,onProgress:`onprogress`,onRateChange:`onratechange`,onRepeat:`onrepeat`,onReset:`onreset`,onResize:`onresize`,onScroll:`onscroll`,onSeeked:`onseeked`,onSeeking:`onseeking`,onSelect:`onselect`,onShow:`onshow`,onStalled:`onstalled`,onStorage:`onstorage`,onSubmit:`onsubmit`,onSuspend:`onsuspend`,onTimeUpdate:`ontimeupdate`,onToggle:`ontoggle`,onUnload:`onunload`,onVolumeChange:`onvolumechange`,onWaiting:`onwaiting`,onZoom:`onzoom`,overlinePosition:`overline-position`,overlineThickness:`overline-thickness`,paintOrder:`paint-order`,panose1:`panose-1`,pointerEvents:`pointer-events`,referrerPolicy:`referrerpolicy`,renderingIntent:`rendering-intent`,shapeRendering:`shape-rendering`,stopColor:`stop-color`,stopOpacity:`stop-opacity`,strikethroughPosition:`strikethrough-position`,strikethroughThickness:`strikethrough-thickness`,strokeDashArray:`stroke-dasharray`,strokeDashOffset:`stroke-dashoffset`,strokeLineCap:`stroke-linecap`,strokeLineJoin:`stroke-linejoin`,strokeMiterLimit:`stroke-miterlimit`,strokeOpacity:`stroke-opacity`,strokeWidth:`stroke-width`,tabIndex:`tabindex`,textAnchor:`text-anchor`,textDecoration:`text-decoration`,textRendering:`text-rendering`,transformOrigin:`transform-origin`,typeOf:`typeof`,underlinePosition:`underline-position`,underlineThickness:`underline-thickness`,unicodeBidi:`unicode-bidi`,unicodeRange:`unicode-range`,unitsPerEm:`units-per-em`,vAlphabetic:`v-alphabetic`,vHanging:`v-hanging`,vIdeographic:`v-ideographic`,vMathematical:`v-mathematical`,vectorEffect:`vector-effect`,vertAdvY:`vert-adv-y`,vertOriginX:`vert-origin-x`,vertOriginY:`vert-origin-y`,wordSpacing:`word-spacing`,writingMode:`writing-mode`,xHeight:`x-height`,playbackOrder:`playbackorder`,timelineBegin:`timelinebegin`},properties:{about:V,accentHeight:R,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:R,amplitude:R,arabicForm:null,ascent:R,attributeName:null,attributeType:null,azimuth:R,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:R,by:null,calcMode:null,capHeight:R,className:z,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:R,diffuseConstant:R,direction:null,display:null,dur:null,divisor:R,dominantBaseline:null,download:I,dx:null,dy:null,edgeMode:null,editable:null,elevation:R,enableBackground:null,end:null,event:null,exponent:R,externalResourcesRequired:null,fill:null,fillOpacity:R,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:B,g2:B,glyphName:B,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:R,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:R,horizOriginX:R,horizOriginY:R,id:null,ideographic:R,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:R,k:R,k1:R,k2:R,k3:R,k4:R,kernelMatrix:V,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:R,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskType:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:R,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:R,overlineThickness:R,paintOrder:null,panose1:null,path:null,pathLength:R,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:z,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:R,pointsAtY:R,pointsAtZ:R,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:V,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:V,rev:V,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:V,requiredFeatures:V,requiredFonts:V,requiredFormats:V,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:R,specularExponent:R,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:R,strikethroughThickness:R,string:null,stroke:null,strokeDashArray:V,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:R,strokeOpacity:R,strokeWidth:null,style:null,surfaceScale:R,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:V,tabIndex:R,tableValues:null,target:null,targetX:R,targetY:R,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:V,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:R,underlineThickness:R,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:R,values:null,vAlphabetic:R,vMathematical:R,vectorEffect:null,vHanging:R,vIdeographic:R,version:null,vertAdvY:R,vertOriginX:R,vertOriginY:R,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:R,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:`svg`,transform:xe}),Te=ye({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:`xlink`,transform(e,t){return`xlink:`+t.slice(5).toLowerCase()}}),Ee=ye({attributes:{xmlnsxlink:`xmlns:xlink`},properties:{xmlnsXLink:null,xmlns:null},space:`xmlns`,transform:Se}),De=ye({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:`xml`,transform(e,t){return`xml:`+t.slice(3).toLowerCase()}}),Oe={classId:`classID`,dataType:`datatype`,itemId:`itemID`,strokeDashArray:`strokeDasharray`,strokeDashOffset:`strokeDashoffset`,strokeLineCap:`strokeLinecap`,strokeLineJoin:`strokeLinejoin`,strokeMiterLimit:`strokeMiterlimit`,typeOf:`typeof`,xLinkActuate:`xlinkActuate`,xLinkArcRole:`xlinkArcrole`,xLinkHref:`xlinkHref`,xLinkRole:`xlinkRole`,xLinkShow:`xlinkShow`,xLinkTitle:`xlinkTitle`,xLinkType:`xlinkType`,xmlnsXLink:`xmlnsXlink`},ke=/[A-Z]/g,Ae=/-[a-z]/g,je=/^data[-\w.:]+$/i;function Me(e,t){let n=fe(t),r=t,i=F;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&n.slice(0,4)===`data`&&je.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(Ae,Pe);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!Ae.test(e)){let n=e.replace(ke,Ne);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=_e}return new i(r,t)}function Ne(e){return`-`+e.toLowerCase()}function Pe(e){return e.charAt(1).toUpperCase()}var Fe=de([be,Ce,Te,Ee,De],`html`),Ie=de([be,we,Te,Ee,De],`svg`);function Le(e){let t=[],n=String(e||``),r=n.indexOf(`,`),i=0,a=!1;for(;!a;){r===-1&&(r=n.length,a=!0);let e=n.slice(i,r).trim();(e||!a)&&t.push(e),i=r+1,r=n.indexOf(`,`,i)}return t}function Re(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}function ze(e){let t=String(e||``).trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function Be(e){return e.join(` `).trim()}var Ve=(function(e){if(e==null)return Ke;if(typeof e==`function`)return Ge(e);if(typeof e==`object`)return Array.isArray(e)?He(e):Ue(e);if(typeof e==`string`)return We(e);throw Error(`Expected function, string, or object as test`)});function He(e){let t=[],n=-1;for(;++n<e.length;)t[n]=Ve(e[n]);return Ge(r);function r(...e){let n=-1;for(;++n<t.length;)if(t[n].apply(this,e))return!0;return!1}}function Ue(e){let t=e;return Ge(n);function n(n){let r=n,i;for(i in e)if(r[i]!==t[i])return!1;return!0}}function We(e){return Ge(t);function t(t){return t&&t.type===e}}function Ge(e){return t;function t(t,n,r){return!!(qe(t)&&e.call(this,t,typeof n==`number`?n:void 0,r||void 0))}}function Ke(){return!0}function qe(e){return typeof e==`object`&&!!e&&`type`in e}function Je(e){return e}var Ye=[],Xe=`skip`;function Ze(e,t,n,r){let i;typeof t==`function`&&typeof n!=`function`?(r=n,n=t):i=t;let a=Ve(i),o=r?-1:1;s(e,void 0,[])();function s(e,i,c){let l=e&&typeof e==`object`?e:{};if(typeof l.type==`string`){let t=typeof l.tagName==`string`?l.tagName:typeof l.name==`string`?l.name:void 0;Object.defineProperty(u,"name",{value:`node (`+Je(e.type+(t?`<`+t+`>`:``))+`)`})}return u;function u(){let l=Ye,u,d,f;if((!t||a(e,i,c[c.length-1]||void 0))&&(l=Qe(n(e,c)),l[0]===!1))return l;if(`children`in e&&e.children){let t=e;if(t.children&&l[0]!==`skip`)for(d=(r?t.children.length:-1)+o,f=c.concat(t);d>-1&&d<t.children.length;){let e=t.children[d];if(u=s(e,d,f)(),u[0]===!1)return u;d=typeof u[1]==`number`?u[1]:d+o}}return l}}}function Qe(e){return Array.isArray(e)?e:typeof e==`number`?[!0,e]:e==null?Ye:[e]}function $e(){}var U=e(r(),1),W=E();function et(e,t){let n=String(e),r=n.indexOf(t),i=r,a=0,o=0;if(typeof t!=`string`)throw TypeError(`Expected substring`);for(;r!==-1;)r===i?++a>o&&(o=a):a=1,i=r+t.length,r=n.indexOf(t,i);return o}var G=ct(/[A-Za-z]/),K=ct(/[\dA-Za-z]/),tt=ct(/[#-'*+\--9=?A-Z^-~]/);function nt(e){return e!==null&&(e<32||e===127)}var rt=ct(/\d/),it=ct(/[\dA-Fa-f]/),at=ct(/[!-/:-@[-`{-~]/);function q(e){return e!==null&&e<-2}function J(e){return e!==null&&(e<0||e===32)}function Y(e){return e===-2||e===-1||e===32}var ot=ct(/\p{P}|\p{S}/u),st=ct(/\s/);function ct(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function X(e,t,n,r){let i=r?r-1:1/0,a=0;return o;function o(r){return Y(r)?(e.enter(n),s(r)):t(r)}function s(r){return Y(r)&&a++<i?(e.consume(r),s):(e.exit(n),t(r))}}function lt(e,t,n,r,i,a){let o=0;return s;function s(t){return a>0&&Y(t)?(e.enter(r),c(t)):l(t)}function c(t){return Y(t)&&o<a?(e.consume(t),o++,c):(e.exit(r),l(t))}function l(e){return o>=i?t(e):n(e)}}var ut=`NEVER provide the complete solution to the lesson exercise or to anything that looks like homework`,dt=`Tutor mode — Socratic coaching inside a lesson.
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./katex-BgsA2lO1.css","./mermaid.core-DgZUD0sU.js","./index-CS8XPYbB.js","./rolldown-runtime-COiEfhsA.js","./react-B8SKf8RM.js","./settings-DhwuyNPU.js","./errors-BZa_CNHL.js","./index-CVenTTOY.css","./chunk-Y2CYZVJY-DsF7k-Jl.js","./src-BWF7jMDv.js","./chunk-DSNLSHJZ-BaeQDl2i.js","./chunk-7S6XSTFO-Skg347QF.js","./dist-CumnGVmJ.js","./chunk-YZO67HFG-BFUm_JHA.js","./chunk-AQDTSKZB-0pSDBJ23.js","./chunk-DUW6YSOI-Dgx8z5s3.js","./chunk-UHW7PFBP-DqJczBLs.js","./chunk-HAGFOTED-BEm00juw.js","./chunk-J5ZVWO5B-oDCd-gWO.js","./rough.esm-Dy-Kn_BL.js","./chunk-ZAUX2LTX-C5ETkkSE.js","./chunk-WQQL4CDK-DJf0Dx05.js","./line-CHkoQXJF.js","./path-fybaL0A-.js","./array-BifhSqXX.js","./chunk-HNE4Q36P-DyCR-LvS.js"])))=>i.map(i=>d[i]);
2
+ import{i as e,n as t,t as n}from"./rolldown-runtime-COiEfhsA.js";import{t as r}from"./react-B8SKf8RM.js";import{f as i}from"./settings-DhwuyNPU.js";import{i as a,l as o,n as s,o as c,r as l}from"./errors-BZa_CNHL.js";import{C as u,D as d,Lt as f,O as p,Ot as m,R as h,Rt as g,S as _,T as v,Tt as y,Z as b,_ as x,_t as S,a as C,b as w,f as T,g as E,h as D,ht as O,i as ee,it as te,k as ne,p as re,t as k,v as ie,x as A}from"./index-CS8XPYbB.js";import{c as j,l as M,r as N,t as ae}from"./schemas-BOc2YsOP.js";import{A as oe,M as P,O as se,j as ce}from"./capstone-DhwBeNqk.js";import{t as le}from"./useStream-rdsR6A7P.js";var ue=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};ue.prototype.normal={},ue.prototype.property={},ue.prototype.space=void 0;function de(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new ue(n,r,t)}function fe(e){return e.toLowerCase()}var F=class{constructor(e,t){this.attribute=t,this.property=e}};F.prototype.attribute=``,F.prototype.booleanish=!1,F.prototype.boolean=!1,F.prototype.commaOrSpaceSeparated=!1,F.prototype.commaSeparated=!1,F.prototype.defined=!1,F.prototype.mustUseProperty=!1,F.prototype.number=!1,F.prototype.overloadedBoolean=!1,F.prototype.property=``,F.prototype.spaceSeparated=!1,F.prototype.space=void 0;var pe=t({boolean:()=>I,booleanish:()=>L,commaOrSpaceSeparated:()=>V,commaSeparated:()=>B,number:()=>R,overloadedBoolean:()=>he,spaceSeparated:()=>z}),me=0,I=H(),L=H(),he=H(),R=H(),z=H(),B=H(),V=H();function H(){return 2**++me}var ge=Object.keys(pe),_e=class extends F{constructor(e,t,n,r){let i=-1;if(super(e,t),ve(this,`space`,r),typeof n==`number`)for(;++i<ge.length;){let e=ge[i];ve(this,ge[i],(n&pe[e])===pe[e])}}};_e.prototype.defined=!0;function ve(e,t,n){n&&(e[t]=n)}function ye(e){let t={},n={};for(let[r,i]of Object.entries(e.properties)){let a=new _e(r,e.transform(e.attributes||{},r),i,e.space);e.mustUseProperty&&e.mustUseProperty.includes(r)&&(a.mustUseProperty=!0),t[r]=a,n[fe(r)]=r,n[fe(a.attribute)]=r}return new ue(t,n,e.space)}var be=ye({properties:{ariaActiveDescendant:null,ariaAtomic:L,ariaAutoComplete:null,ariaBusy:L,ariaChecked:L,ariaColCount:R,ariaColIndex:R,ariaColSpan:R,ariaControls:z,ariaCurrent:null,ariaDescribedBy:z,ariaDetails:null,ariaDisabled:L,ariaDropEffect:z,ariaErrorMessage:null,ariaExpanded:L,ariaFlowTo:z,ariaGrabbed:L,ariaHasPopup:null,ariaHidden:L,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:z,ariaLevel:R,ariaLive:null,ariaModal:L,ariaMultiLine:L,ariaMultiSelectable:L,ariaOrientation:null,ariaOwns:z,ariaPlaceholder:null,ariaPosInSet:R,ariaPressed:L,ariaReadOnly:L,ariaRelevant:null,ariaRequired:L,ariaRoleDescription:z,ariaRowCount:R,ariaRowIndex:R,ariaRowSpan:R,ariaSelected:L,ariaSetSize:R,ariaSort:null,ariaValueMax:R,ariaValueMin:R,ariaValueNow:R,ariaValueText:null,role:null},transform(e,t){return t===`role`?t:`aria-`+t.slice(4).toLowerCase()}});function xe(e,t){return t in e?e[t]:t}function Se(e,t){return xe(e,t.toLowerCase())}var Ce=ye({attributes:{acceptcharset:`accept-charset`,classname:`class`,htmlfor:`for`,httpequiv:`http-equiv`},mustUseProperty:[`checked`,`multiple`,`muted`,`selected`],properties:{abbr:null,accept:B,acceptCharset:z,accessKey:z,action:null,allow:null,allowFullScreen:I,allowPaymentRequest:I,allowUserMedia:I,alpha:I,alt:null,as:null,async:I,autoCapitalize:null,autoComplete:z,autoFocus:I,autoPlay:I,blocking:z,capture:null,charSet:null,checked:I,cite:null,className:z,closedBy:null,colorSpace:null,cols:R,colSpan:R,command:null,commandFor:null,content:null,contentEditable:L,controls:I,controlsList:z,coords:R|B,crossOrigin:null,data:null,dateTime:null,decoding:null,default:I,defer:I,dir:null,dirName:null,disabled:I,download:he,draggable:L,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:I,formTarget:null,headers:z,height:R,hidden:he,high:R,href:null,hrefLang:null,htmlFor:z,httpEquiv:z,id:null,imageSizes:null,imageSrcSet:null,inert:I,inputMode:null,integrity:null,is:null,isMap:I,itemId:null,itemProp:z,itemRef:z,itemScope:I,itemType:z,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:I,low:R,manifest:null,max:null,maxLength:R,media:null,method:null,min:null,minLength:R,multiple:I,muted:I,name:null,nonce:null,noModule:I,noValidate:I,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:I,optimum:R,pattern:null,ping:z,placeholder:null,playsInline:I,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:I,referrerPolicy:null,rel:z,required:I,reversed:I,rows:R,rowSpan:R,sandbox:z,scope:null,scoped:I,seamless:I,selected:I,shadowRootClonable:I,shadowRootCustomElementRegistry:I,shadowRootDelegatesFocus:I,shadowRootMode:null,shadowRootSerializable:I,shape:null,size:R,sizes:null,slot:null,span:R,spellCheck:L,src:null,srcDoc:null,srcLang:null,srcSet:null,start:R,step:null,style:null,tabIndex:R,target:null,title:null,translate:null,type:null,typeMustMatch:I,useMap:null,value:L,width:R,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:z,axis:null,background:null,bgColor:null,border:R,borderColor:null,bottomMargin:R,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:I,declare:I,event:null,face:null,frame:null,frameBorder:null,hSpace:R,leftMargin:R,link:null,longDesc:null,lowSrc:null,marginHeight:R,marginWidth:R,noResize:I,noHref:I,noShade:I,noWrap:I,object:null,profile:null,prompt:null,rev:null,rightMargin:R,rules:null,scheme:null,scrolling:L,standby:null,summary:null,text:null,topMargin:R,valueType:null,version:null,vAlign:null,vLink:null,vSpace:R,allowTransparency:null,autoCorrect:null,autoSave:null,credentialless:I,disablePictureInPicture:I,disableRemotePlayback:I,exportParts:B,part:z,prefix:null,property:null,results:R,security:null,unselectable:null},space:`html`,transform:Se}),we=ye({attributes:{accentHeight:`accent-height`,alignmentBaseline:`alignment-baseline`,arabicForm:`arabic-form`,baselineShift:`baseline-shift`,capHeight:`cap-height`,className:`class`,clipPath:`clip-path`,clipRule:`clip-rule`,colorInterpolation:`color-interpolation`,colorInterpolationFilters:`color-interpolation-filters`,colorProfile:`color-profile`,colorRendering:`color-rendering`,crossOrigin:`crossorigin`,dataType:`datatype`,dominantBaseline:`dominant-baseline`,enableBackground:`enable-background`,fillOpacity:`fill-opacity`,fillRule:`fill-rule`,floodColor:`flood-color`,floodOpacity:`flood-opacity`,fontFamily:`font-family`,fontSize:`font-size`,fontSizeAdjust:`font-size-adjust`,fontStretch:`font-stretch`,fontStyle:`font-style`,fontVariant:`font-variant`,fontWeight:`font-weight`,glyphName:`glyph-name`,glyphOrientationHorizontal:`glyph-orientation-horizontal`,glyphOrientationVertical:`glyph-orientation-vertical`,hrefLang:`hreflang`,horizAdvX:`horiz-adv-x`,horizOriginX:`horiz-origin-x`,horizOriginY:`horiz-origin-y`,imageRendering:`image-rendering`,letterSpacing:`letter-spacing`,lightingColor:`lighting-color`,markerEnd:`marker-end`,markerMid:`marker-mid`,markerStart:`marker-start`,maskType:`mask-type`,navDown:`nav-down`,navDownLeft:`nav-down-left`,navDownRight:`nav-down-right`,navLeft:`nav-left`,navNext:`nav-next`,navPrev:`nav-prev`,navRight:`nav-right`,navUp:`nav-up`,navUpLeft:`nav-up-left`,navUpRight:`nav-up-right`,onAbort:`onabort`,onActivate:`onactivate`,onAfterPrint:`onafterprint`,onBeforePrint:`onbeforeprint`,onBegin:`onbegin`,onCancel:`oncancel`,onCanPlay:`oncanplay`,onCanPlayThrough:`oncanplaythrough`,onChange:`onchange`,onClick:`onclick`,onClose:`onclose`,onCopy:`oncopy`,onCueChange:`oncuechange`,onCut:`oncut`,onDblClick:`ondblclick`,onDrag:`ondrag`,onDragEnd:`ondragend`,onDragEnter:`ondragenter`,onDragExit:`ondragexit`,onDragLeave:`ondragleave`,onDragOver:`ondragover`,onDragStart:`ondragstart`,onDrop:`ondrop`,onDurationChange:`ondurationchange`,onEmptied:`onemptied`,onEnd:`onend`,onEnded:`onended`,onError:`onerror`,onFocus:`onfocus`,onFocusIn:`onfocusin`,onFocusOut:`onfocusout`,onHashChange:`onhashchange`,onInput:`oninput`,onInvalid:`oninvalid`,onKeyDown:`onkeydown`,onKeyPress:`onkeypress`,onKeyUp:`onkeyup`,onLoad:`onload`,onLoadedData:`onloadeddata`,onLoadedMetadata:`onloadedmetadata`,onLoadStart:`onloadstart`,onMessage:`onmessage`,onMouseDown:`onmousedown`,onMouseEnter:`onmouseenter`,onMouseLeave:`onmouseleave`,onMouseMove:`onmousemove`,onMouseOut:`onmouseout`,onMouseOver:`onmouseover`,onMouseUp:`onmouseup`,onMouseWheel:`onmousewheel`,onOffline:`onoffline`,onOnline:`ononline`,onPageHide:`onpagehide`,onPageShow:`onpageshow`,onPaste:`onpaste`,onPause:`onpause`,onPlay:`onplay`,onPlaying:`onplaying`,onPopState:`onpopstate`,onProgress:`onprogress`,onRateChange:`onratechange`,onRepeat:`onrepeat`,onReset:`onreset`,onResize:`onresize`,onScroll:`onscroll`,onSeeked:`onseeked`,onSeeking:`onseeking`,onSelect:`onselect`,onShow:`onshow`,onStalled:`onstalled`,onStorage:`onstorage`,onSubmit:`onsubmit`,onSuspend:`onsuspend`,onTimeUpdate:`ontimeupdate`,onToggle:`ontoggle`,onUnload:`onunload`,onVolumeChange:`onvolumechange`,onWaiting:`onwaiting`,onZoom:`onzoom`,overlinePosition:`overline-position`,overlineThickness:`overline-thickness`,paintOrder:`paint-order`,panose1:`panose-1`,pointerEvents:`pointer-events`,referrerPolicy:`referrerpolicy`,renderingIntent:`rendering-intent`,shapeRendering:`shape-rendering`,stopColor:`stop-color`,stopOpacity:`stop-opacity`,strikethroughPosition:`strikethrough-position`,strikethroughThickness:`strikethrough-thickness`,strokeDashArray:`stroke-dasharray`,strokeDashOffset:`stroke-dashoffset`,strokeLineCap:`stroke-linecap`,strokeLineJoin:`stroke-linejoin`,strokeMiterLimit:`stroke-miterlimit`,strokeOpacity:`stroke-opacity`,strokeWidth:`stroke-width`,tabIndex:`tabindex`,textAnchor:`text-anchor`,textDecoration:`text-decoration`,textRendering:`text-rendering`,transformOrigin:`transform-origin`,typeOf:`typeof`,underlinePosition:`underline-position`,underlineThickness:`underline-thickness`,unicodeBidi:`unicode-bidi`,unicodeRange:`unicode-range`,unitsPerEm:`units-per-em`,vAlphabetic:`v-alphabetic`,vHanging:`v-hanging`,vIdeographic:`v-ideographic`,vMathematical:`v-mathematical`,vectorEffect:`vector-effect`,vertAdvY:`vert-adv-y`,vertOriginX:`vert-origin-x`,vertOriginY:`vert-origin-y`,wordSpacing:`word-spacing`,writingMode:`writing-mode`,xHeight:`x-height`,playbackOrder:`playbackorder`,timelineBegin:`timelinebegin`},properties:{about:V,accentHeight:R,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:R,amplitude:R,arabicForm:null,ascent:R,attributeName:null,attributeType:null,azimuth:R,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:R,by:null,calcMode:null,capHeight:R,className:z,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:R,diffuseConstant:R,direction:null,display:null,dur:null,divisor:R,dominantBaseline:null,download:I,dx:null,dy:null,edgeMode:null,editable:null,elevation:R,enableBackground:null,end:null,event:null,exponent:R,externalResourcesRequired:null,fill:null,fillOpacity:R,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:B,g2:B,glyphName:B,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:R,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:R,horizOriginX:R,horizOriginY:R,id:null,ideographic:R,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:R,k:R,k1:R,k2:R,k3:R,k4:R,kernelMatrix:V,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:R,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskType:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:R,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:R,overlineThickness:R,paintOrder:null,panose1:null,path:null,pathLength:R,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:z,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:R,pointsAtY:R,pointsAtZ:R,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:V,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:V,rev:V,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:V,requiredFeatures:V,requiredFonts:V,requiredFormats:V,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:R,specularExponent:R,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:R,strikethroughThickness:R,string:null,stroke:null,strokeDashArray:V,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:R,strokeOpacity:R,strokeWidth:null,style:null,surfaceScale:R,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:V,tabIndex:R,tableValues:null,target:null,targetX:R,targetY:R,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:V,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:R,underlineThickness:R,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:R,values:null,vAlphabetic:R,vMathematical:R,vectorEffect:null,vHanging:R,vIdeographic:R,version:null,vertAdvY:R,vertOriginX:R,vertOriginY:R,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:R,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:`svg`,transform:xe}),Te=ye({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:`xlink`,transform(e,t){return`xlink:`+t.slice(5).toLowerCase()}}),Ee=ye({attributes:{xmlnsxlink:`xmlns:xlink`},properties:{xmlnsXLink:null,xmlns:null},space:`xmlns`,transform:Se}),De=ye({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:`xml`,transform(e,t){return`xml:`+t.slice(3).toLowerCase()}}),Oe={classId:`classID`,dataType:`datatype`,itemId:`itemID`,strokeDashArray:`strokeDasharray`,strokeDashOffset:`strokeDashoffset`,strokeLineCap:`strokeLinecap`,strokeLineJoin:`strokeLinejoin`,strokeMiterLimit:`strokeMiterlimit`,typeOf:`typeof`,xLinkActuate:`xlinkActuate`,xLinkArcRole:`xlinkArcrole`,xLinkHref:`xlinkHref`,xLinkRole:`xlinkRole`,xLinkShow:`xlinkShow`,xLinkTitle:`xlinkTitle`,xLinkType:`xlinkType`,xmlnsXLink:`xmlnsXlink`},ke=/[A-Z]/g,Ae=/-[a-z]/g,je=/^data[-\w.:]+$/i;function Me(e,t){let n=fe(t),r=t,i=F;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&n.slice(0,4)===`data`&&je.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(Ae,Pe);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!Ae.test(e)){let n=e.replace(ke,Ne);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=_e}return new i(r,t)}function Ne(e){return`-`+e.toLowerCase()}function Pe(e){return e.charAt(1).toUpperCase()}var Fe=de([be,Ce,Te,Ee,De],`html`),Ie=de([be,we,Te,Ee,De],`svg`);function Le(e){let t=[],n=String(e||``),r=n.indexOf(`,`),i=0,a=!1;for(;!a;){r===-1&&(r=n.length,a=!0);let e=n.slice(i,r).trim();(e||!a)&&t.push(e),i=r+1,r=n.indexOf(`,`,i)}return t}function Re(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}function ze(e){let t=String(e||``).trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function Be(e){return e.join(` `).trim()}var Ve=(function(e){if(e==null)return Ke;if(typeof e==`function`)return Ge(e);if(typeof e==`object`)return Array.isArray(e)?He(e):Ue(e);if(typeof e==`string`)return We(e);throw Error(`Expected function, string, or object as test`)});function He(e){let t=[],n=-1;for(;++n<e.length;)t[n]=Ve(e[n]);return Ge(r);function r(...e){let n=-1;for(;++n<t.length;)if(t[n].apply(this,e))return!0;return!1}}function Ue(e){let t=e;return Ge(n);function n(n){let r=n,i;for(i in e)if(r[i]!==t[i])return!1;return!0}}function We(e){return Ge(t);function t(t){return t&&t.type===e}}function Ge(e){return t;function t(t,n,r){return!!(qe(t)&&e.call(this,t,typeof n==`number`?n:void 0,r||void 0))}}function Ke(){return!0}function qe(e){return typeof e==`object`&&!!e&&`type`in e}function Je(e){return e}var Ye=[],Xe=`skip`;function Ze(e,t,n,r){let i;typeof t==`function`&&typeof n!=`function`?(r=n,n=t):i=t;let a=Ve(i),o=r?-1:1;s(e,void 0,[])();function s(e,i,c){let l=e&&typeof e==`object`?e:{};if(typeof l.type==`string`){let t=typeof l.tagName==`string`?l.tagName:typeof l.name==`string`?l.name:void 0;Object.defineProperty(u,"name",{value:`node (`+Je(e.type+(t?`<`+t+`>`:``))+`)`})}return u;function u(){let l=Ye,u,d,f;if((!t||a(e,i,c[c.length-1]||void 0))&&(l=Qe(n(e,c)),l[0]===!1))return l;if(`children`in e&&e.children){let t=e;if(t.children&&l[0]!==`skip`)for(d=(r?t.children.length:-1)+o,f=c.concat(t);d>-1&&d<t.children.length;){let e=t.children[d];if(u=s(e,d,f)(),u[0]===!1)return u;d=typeof u[1]==`number`?u[1]:d+o}}return l}}}function Qe(e){return Array.isArray(e)?e:typeof e==`number`?[!0,e]:e==null?Ye:[e]}function $e(){}var U=e(r(),1),W=E();function et(e,t){let n=String(e),r=n.indexOf(t),i=r,a=0,o=0;if(typeof t!=`string`)throw TypeError(`Expected substring`);for(;r!==-1;)r===i?++a>o&&(o=a):a=1,i=r+t.length,r=n.indexOf(t,i);return o}var G=ct(/[A-Za-z]/),K=ct(/[\dA-Za-z]/),tt=ct(/[#-'*+\--9=?A-Z^-~]/);function nt(e){return e!==null&&(e<32||e===127)}var rt=ct(/\d/),it=ct(/[\dA-Fa-f]/),at=ct(/[!-/:-@[-`{-~]/);function q(e){return e!==null&&e<-2}function J(e){return e!==null&&(e<0||e===32)}function Y(e){return e===-2||e===-1||e===32}var ot=ct(/\p{P}|\p{S}/u),st=ct(/\s/);function ct(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function X(e,t,n,r){let i=r?r-1:1/0,a=0;return o;function o(r){return Y(r)?(e.enter(n),s(r)):t(r)}function s(r){return Y(r)&&a++<i?(e.consume(r),s):(e.exit(n),t(r))}}function lt(e,t,n,r,i,a){let o=0;return s;function s(t){return a>0&&Y(t)?(e.enter(r),c(t)):l(t)}function c(t){return Y(t)&&o<a?(e.consume(t),o++,c):(e.exit(r),l(t))}function l(e){return o>=i?t(e):n(e)}}var ut=`NEVER provide the complete solution to the lesson exercise or to anything that looks like homework`,dt=`Tutor mode — Socratic coaching inside a lesson.
3
3
 
4
4
  Explain concepts freely and clearly, like a patient teacher: define the term, give one concrete example, then check understanding with a question. Teaching the lesson's ideas is always allowed.
5
5
 
@@ -120,4 +120,4 @@ Absolute rules:
120
120
  `))+1))}let o=`#`.repeat(i),s=n.enter(`headingAtx`),c=n.enter(`phrasing`);a.move(o+` `);let l=n.containerPhrasing(e,{before:`# `,after:`
121
121
  `,...a.current()}),u=l.charCodeAt(0);return(u===9||u===32)&&(l=pu(u)+l.slice(1)),l=l?o+` `+l:o,n.options.closeAtx&&(l+=` `+o),c(),s(),l}gu.peek=_u;function gu(e){return e.value||``}function _u(){return`<`}vu.peek=yu;function vu(e,t,n,r){let i=su(n),a=i===`"`?`Quote`:`Apostrophe`,o=n.enter(`image`),s=n.enter(`label`),c=n.createTracker(r),l=c.move(`![`);return l+=c.move(n.safe(e.alt,{before:l,after:`]`,...c.current()})),l+=c.move(`](`),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=n.enter(`destinationLiteral`),l+=c.move(`<`),l+=c.move(n.safe(e.url,{before:l,after:`>`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),l+=c.move(`)`),o(),l}function yu(){return`!`}bu.peek=xu;function bu(e,t,n,r){let i=e.referenceType,a=n.enter(`imageReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`![`),l=n.safe(e.alt,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=u.filter(function(e){return e!==`phrasing`}),o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function xu(){return`!`}Su.peek=Cu;function Su(e,t,n){let r=e.value||``,i="`",a=-1;for(;RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^\n\r ]/.test(r)&&(/^[\n\r ]/.test(r)&&/[\n\r ]$/.test(r)||/^`|`$/.test(r))&&(r=` `+r+` `);++a<n.unsafe.length;){let e=n.unsafe[a],t=n.compilePattern(e);if(!e.atBreak)continue;let i;for(;i=t.exec(r);){let e=i.index;r.charCodeAt(e)===10&&r.charCodeAt(e-1)===13&&e--,r=r.slice(0,e)+` `+r.slice(i.index+1)}}return i+r+i}function Cu(){return"`"}function wu(e,t){let n=bi(e);return!(t.options.resourceLink||!e.url||e.title||!e.children||e.children.length!==1||e.children[0].type!==`text`||n!==e.url&&`mailto:`+n!==e.url||!/^[a-z][+\-.a-z]+:/i.test(e.url)||/[\0- <>\u007F]/.test(e.url))}Tu.peek=Eu;function Tu(e,t,n,r){let i=su(n),a=i===`"`?`Quote`:`Apostrophe`,o=n.createTracker(r);if(wu(e,n)){let t=n.stack;n.stack=t.filter(function(e){return e!==`phrasing`});let r=n.enter(`autolink`),i=o.move(`<`);return i+=o.move(n.containerPhrasing(e,{before:i,after:`>`,...o.current()})),i+=o.move(`>`),r(),n.stack=t,i}let s=n.enter(`link`),c=n.enter(`label`),l=o.move(`[`);return l+=o.move(n.containerPhrasing(e,{before:l,after:`](`,...o.current()})),l+=o.move(`](`),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=n.enter(`destinationLiteral`),l+=o.move(`<`),l+=o.move(n.safe(e.url,{before:l,after:`>`,...o.current()})),l+=o.move(`>`)):(c=n.enter(`destinationRaw`),l+=o.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...o.current()}))),c(),e.title&&(c=n.enter(`title${a}`),l+=o.move(` `+i),l+=o.move(n.safe(e.title,{before:l,after:i,...o.current()})),l+=o.move(i),c()),l+=o.move(`)`),s(),l}function Eu(e,t,n){return wu(e,n)?`<`:`[`}Du.peek=Ou;function Du(e,t,n,r){let i=e.referenceType,a=n.enter(`linkReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`[`),l=n.containerPhrasing(e,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=u.filter(function(e){return e!==`phrasing`}),o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function Ou(){return`[`}function ku(e){let t=e.options.bullet||`*`;if(t!==`*`&&t!==`+`&&t!==`-`)throw Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function Au(e){let t=ku(e),n=e.options.bulletOther;if(!n)return t===`*`?`-`:`*`;if(n!==`*`&&n!==`+`&&n!==`-`)throw Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function ju(e){let t=e.options.bulletOrdered||`.`;if(t!==`.`&&t!==`)`)throw Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function Mu(e){let t=e.options.rule||`*`;if(t!==`*`&&t!==`-`&&t!==`_`)throw Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function Nu(e,t,n,r){let i=n.enter(`list`),a=n.bulletCurrent,o=e.ordered?ju(n):ku(n),s=e.ordered?o===`.`?`)`:`.`:Au(n),c=t&&n.bulletLastUsed?o===n.bulletLastUsed:!1;if(!e.ordered){let t=e.children?e.children[0]:void 0;if((o===`*`||o===`-`)&&t&&(!t.children||!t.children[0])&&n.stack[n.stack.length-1]===`list`&&n.stack[n.stack.length-2]===`listItem`&&n.stack[n.stack.length-3]===`list`&&n.stack[n.stack.length-4]===`listItem`&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(c=!0),Mu(n)===o&&t){let t=-1;for(;++t<e.children.length;){let n=e.children[t];if(n&&n.type===`listItem`&&n.children&&n.children[0]&&n.children[0].type===`thematicBreak`){c=!0;break}}}}c&&(o=s),n.bulletCurrent=o;let l=n.containerFlow(e,r);return n.bulletLastUsed=o,n.bulletCurrent=a,i(),l}function Pu(e){let t=e.options.listItemIndent||`one`;if(t!==`tab`&&t!==`one`&&t!==`mixed`)throw Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}function Fu(e,t,n,r){let i=Pu(n),a=n.bulletCurrent||ku(n);t&&t.type===`list`&&t.ordered&&(a=(typeof t.start==`number`&&t.start>-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+a);let o=a.length+1;(i===`tab`||i===`mixed`&&(t&&t.type===`list`&&t.spread||e.spread))&&(o=Math.ceil(o/4)*4);let s=n.createTracker(r);s.move(a+` `.repeat(o-a.length)),s.shift(o);let c=n.enter(`listItem`),l=n.indentLines(n.containerFlow(e,s.current()),u);return c(),l;function u(e,t,n){return t?(n?``:` `.repeat(o))+e:(n?a:a+` `.repeat(o-a.length))+e}}function Iu(e,t,n,r){let i=n.enter(`paragraph`),a=n.enter(`phrasing`),o=n.containerPhrasing(e,r);return a(),i(),o}function Lu(e,t,n,r){if(!e.children.some(function(e){return Zl(e)}))return n.containerFlow(e,r);let i=n.enter(`phrasing`),a=n.containerPhrasing(e,r);return i(),a}function Ru(e){let t=e.options.strong||`*`;if(t!==`*`&&t!==`_`)throw Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}zu.attention=Bu,zu.peek=Vu;function zu(e,t,n,r){let i=n.enter(`phrasing`),a=n.containerPhrasing({type:`root`,children:[e]},r);return i(),a}function Bu(e,t){return{construct:`strong`,markers:Ru(t)===`*`?[`*`,`_`]:[`_`,`*`],sizes:[2]}}function Vu(e,t,n){return n.options.strong||`*`}function Hu(e,t,n,r){let i=t?t.children:[],a=i.indexOf(e);return n.safe(e.value,{...r,afterNode:i[a+1],beforeNode:i[a-1]})}function Uu(e){let t=e.options.ruleRepetition||3;if(t<3)throw Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function Wu(e,t,n){let r=(Mu(n)+(n.options.ruleSpaces?` `:``)).repeat(Uu(n));return n.options.ruleSpaces?r.slice(0,-1):r}var Gu={blockquote:Ql,break:nu,code:au,definition:cu,emphasis:uu,hardBreak:nu,heading:hu,html:gu,image:vu,imageReference:bu,inlineCode:Su,link:Tu,linkReference:Du,list:Nu,listItem:Fu,paragraph:Iu,root:Lu,strong:zu,text:Hu,thematicBreak:Wu};function Ku(){return{enter:{table:qu,tableData:Zu,tableHeader:Zu,tableRow:Yu},exit:{codeText:Qu,table:Ju,tableData:Xu,tableHeader:Xu,tableRow:Xu}}}function qu(e){let t=e._align;this.enter({type:`table`,align:t.map(function(e){return e===`none`?null:e}),children:[]},e),this.data.inTable=!0}function Ju(e){this.exit(e),this.data.inTable=void 0}function Yu(e){this.enter({type:`tableRow`,children:[]},e)}function Xu(e){this.exit(e)}function Zu(e){this.enter({type:`tableCell`,children:[]},e)}function Qu(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,$u));let n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function $u(e,t){return t===`|`?t:e}function ed(e){let t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,i=t.stringLength,a=n?` `:`|`;return{unsafe:[{character:`\r`,inConstruct:`tableCell`},{character:`
122
122
  `,inConstruct:`tableCell`},{atBreak:!0,character:`|`,after:`[ :-]`},{character:`|`,inConstruct:`tableCell`},{atBreak:!0,character:`:`,after:`-`},{atBreak:!0,character:`-`,after:`[:|-]`}],handlers:{inlineCode:f,table:o,tableCell:c,tableRow:s}};function o(e,t,n,r){return l(u(e,n,r),e.align)}function s(e,t,n,r){let i=l([d(e,n,r)]);return i.slice(0,i.indexOf(`
123
- `))}function c(e,t,n,r){let i=n.enter(`tableCell`),o=n.enter(`phrasing`),s=n.containerPhrasing(e,{...r,before:a,after:a});return o(),i(),s}function l(e,t){return Jl(e,{align:t,alignDelimiters:r,padding:n,stringLength:i})}function u(e,t,n){let r=e.children,i=-1,a=[],o=t.enter(`table`);for(;++i<r.length;)a[i]=d(r[i],t,n);return o(),a}function d(e,t,n){let r=e.children,i=-1,a=[],o=t.enter(`tableRow`);for(;++i<r.length;)a[i]=c(r[i],e,t,n);return o(),a}function f(e,t,n){let r=Gu.inlineCode(e,t,n);return n.stack.includes(`tableCell`)&&(r=r.replace(/\|/g,`\\$&`)),r}}function td(){return{exit:{taskListCheckValueChecked:rd,taskListCheckValueUnchecked:rd,paragraph:id}}}function nd(){return{unsafe:[{atBreak:!0,character:`-`,after:`[:|-]`}],handlers:{listItem:ad}}}function rd(e){let t=this.stack[this.stack.length-2];t.type,t.checked=e.type===`taskListCheckValueChecked`}function id(e){let t=this.stack[this.stack.length-2];if(t&&t.type===`listItem`&&typeof t.checked==`boolean`){let e=this.stack[this.stack.length-1];e.type;let n=e.children[0];if(n&&n.type===`text`){let r=t.children,i=-1,a;for(;++i<r.length;){let e=r[i];if(e.type===`paragraph`){a=e;break}}a===e&&(n.value=n.value.slice(1),n.value.length===0?e.children.shift():e.position&&n.position&&typeof n.position.start.offset==`number`&&(n.position.start.column++,n.position.start.offset++,e.position.start=Object.assign({},n.position.start)))}}this.exit(e)}function ad(e,t,n,r){let i=e.children[0],a=typeof e.checked==`boolean`&&i&&i.type===`paragraph`,o=`[`+(e.checked?`x`:` `)+`] `,s=n.createTracker(r);a&&s.move(o);let c=Gu.listItem(e,t,n,{...r,...s.current()});return a&&(c=c.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,l)),c;function l(e){return e+o}}function od(){return[dl(),Fl(),Bl(),Ku(),td()]}function sd(e){return{extensions:[fl(),Il(e),Vl(),ed(e),nd()]}}var cd={tokenize:Sd,partial:!0},ld={tokenize:Cd,partial:!0},ud={tokenize:wd,partial:!0},dd={tokenize:Td,partial:!0},fd={tokenize:Ed,partial:!0},pd={name:`wwwAutolink`,tokenize:bd,previous:Dd},md={name:`protocolAutolink`,tokenize:xd,previous:Od},hd={name:`emailAutolink`,tokenize:yd,previous:kd},gd={};function _d(){return{text:gd}}for(var vd=48;vd<123;)gd[vd]=hd,vd++,vd===58?vd=65:vd===91&&(vd=97);gd[43]=hd,gd[45]=hd,gd[46]=hd,gd[95]=hd,gd[72]=[hd,md],gd[104]=[hd,md],gd[87]=[hd,pd],gd[119]=[hd,pd];function yd(e,t,n){let r=this,i,a;return o;function o(t){return!Ad(t)||!kd.call(r,r.previous)||jd(r.events)?n(t):(e.enter(`literalAutolink`),e.enter(`literalAutolinkEmail`),s(t))}function s(t){return Ad(t)?(e.consume(t),s):t===64?(e.consume(t),c):n(t)}function c(t){return t===46?e.check(fd,u,l)(t):t===45||t===95||K(t)?(a=!0,e.consume(t),c):u(t)}function l(t){return e.consume(t),i=!0,c}function u(o){return a&&i&&G(r.previous)?(e.exit(`literalAutolinkEmail`),e.exit(`literalAutolink`),t(o)):n(o)}}function bd(e,t,n){let r=this;return i;function i(t){return t!==87&&t!==119||!Dd.call(r,r.previous)||jd(r.events)?n(t):(e.enter(`literalAutolink`),e.enter(`literalAutolinkWww`),e.check(cd,e.attempt(ld,e.attempt(ud,a),n),n)(t))}function a(n){return e.exit(`literalAutolinkWww`),e.exit(`literalAutolink`),t(n)}}function xd(e,t,n){let r=this,i=``,a=!1;return o;function o(t){return(t===72||t===104)&&Od.call(r,r.previous)&&!jd(r.events)?(e.enter(`literalAutolink`),e.enter(`literalAutolinkHttp`),i+=String.fromCodePoint(t),e.consume(t),s):n(t)}function s(t){if(G(t)&&i.length<5)return i+=String.fromCodePoint(t),e.consume(t),s;if(t===58){let n=i.toLowerCase();if(n===`http`||n===`https`)return e.consume(t),c}return n(t)}function c(t){return t===47?(e.consume(t),a?l:(a=!0,c)):n(t)}function l(t){return t===null||nt(t)||J(t)||st(t)||ot(t)?n(t):e.attempt(ld,e.attempt(ud,u),n)(t)}function u(n){return e.exit(`literalAutolinkHttp`),e.exit(`literalAutolink`),t(n)}}function Sd(e,t,n){let r=0;return i;function i(t){return(t===87||t===119)&&r<3?(r++,e.consume(t),i):t===46&&r===3?(e.consume(t),a):n(t)}function a(e){return e===null?n(e):t(e)}}function Cd(e,t,n){let r,i,a;return o;function o(t){return t===46||t===95?e.check(dd,c,s)(t):t===null||J(t)||st(t)||t!==45&&ot(t)?c(t):(a=!0,e.consume(t),o)}function s(t){return t===95?r=!0:(i=r,r=void 0),e.consume(t),o}function c(e){return i||r||!a?n(e):t(e)}}function wd(e,t){let n=0,r=0;return i;function i(o){return o===40?(n++,e.consume(o),i):o===41&&r<n?a(o):o===33||o===34||o===38||o===39||o===41||o===42||o===44||o===46||o===58||o===59||o===60||o===63||o===93||o===95||o===126?e.check(dd,t,a)(o):o===null||J(o)||st(o)?t(o):(e.consume(o),i)}function a(t){return t===41&&r++,e.consume(t),i}}function Td(e,t,n){return r;function r(o){return o===33||o===34||o===39||o===41||o===42||o===44||o===46||o===58||o===59||o===63||o===95||o===126?(e.consume(o),r):o===38?(e.consume(o),a):o===93?(e.consume(o),i):o===60||o===null||J(o)||st(o)?t(o):n(o)}function i(e){return e===null||e===40||e===91||J(e)||st(e)?t(e):r(e)}function a(e){return G(e)?o(e):n(e)}function o(t){return t===59?(e.consume(t),r):G(t)?(e.consume(t),o):n(t)}}function Ed(e,t,n){return r;function r(t){return e.consume(t),i}function i(e){return K(e)?n(e):t(e)}}function Dd(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||J(e)}function Od(e){return!G(e)}function kd(e){return!(e===47||Ad(e))}function Ad(e){return e===43||e===45||e===46||e===95||K(e)}function jd(e){let t=e.length,n=!1;for(;t--;){let r=e[t][1];if((r.type===`labelLink`||r.type===`labelImage`)&&!r._balanced){n=!0;break}if(r._gfmAutolinkLiteralWalkedInto){n=!1;break}}return e.length>0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}var Md={tokenize:Bd,partial:!0};function Nd(){return{document:{91:{name:`gfmFootnoteDefinition`,tokenize:Ld,continuation:{tokenize:Rd},exit:zd}},text:{91:{name:`gfmFootnoteCall`,tokenize:Id},93:{name:`gfmPotentialFootnoteCall`,add:`after`,tokenize:Pd,resolveTo:Fd}}}}function Pd(e,t,n){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let e=r.events[i][1];if(e.type===`labelImage`){o=e;break}if(e.type===`gfmFootnoteCall`||e.type===`labelLink`||e.type===`label`||e.type===`image`||e.type===`link`)break}return s;function s(i){if(!o||!o._balanced)return n(i);let s=Mi(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?n(i):(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(i),e.exit(`gfmFootnoteCallLabelMarker`),t(i))}}function Fd(e,t){let n=e.length;for(;n--;)if(e[n][1].type===`labelImage`&&e[n][0]===`enter`){e[n][1];break}e[n+1][1].type=`data`,e[n+3][1].type=`gfmFootnoteCallLabelMarker`;let r={type:`gfmFootnoteCall`,start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:`gfmFootnoteCallMarker`,start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:`gfmFootnoteCallString`,start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:`chunkString`,contentType:`string`,start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],[`enter`,r,t],e[n+3],e[n+4],[`enter`,i,t],[`exit`,i,t],[`enter`,a,t],[`enter`,o,t],[`exit`,o,t],[`exit`,a,t],e[e.length-2],e[e.length-1],[`exit`,r,t]];return e.splice(n,e.length-n+1,...s),e}function Id(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return s;function s(t){return e.enter(`gfmFootnoteCall`),e.enter(`gfmFootnoteCallLabelMarker`),e.consume(t),e.exit(`gfmFootnoteCallLabelMarker`),c}function c(t){return t===94?(e.enter(`gfmFootnoteCallMarker`),e.consume(t),e.exit(`gfmFootnoteCallMarker`),e.enter(`gfmFootnoteCallString`),e.enter(`chunkString`).contentType=`string`,l):n(t)}function l(s){if(a>999||s===93&&!o||s===null||s===91||J(s))return n(s);if(s===93){e.exit(`chunkString`);let a=e.exit(`gfmFootnoteCallString`);return i.includes(Mi(r.sliceSerialize(a)))?(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(s),e.exit(`gfmFootnoteCallLabelMarker`),e.exit(`gfmFootnoteCall`),t):n(s)}return J(s)||(o=!0),a++,e.consume(s),s===92?u:l}function u(t){return t===91||t===92||t===93?(e.consume(t),a++,l):l(t)}}function Ld(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,s;return c;function c(t){return e.enter(`gfmFootnoteDefinition`)._container=!0,e.enter(`gfmFootnoteDefinitionLabel`),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),l}function l(t){return t===94?(e.enter(`gfmFootnoteDefinitionMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionMarker`),e.enter(`gfmFootnoteDefinitionLabelString`),e.enter(`chunkString`).contentType=`string`,u):n(t)}function u(t){if(o>999||t===93&&!s||t===null||t===91||J(t))return n(t);if(t===93){e.exit(`chunkString`);let n=e.exit(`gfmFootnoteDefinitionLabelString`);return a=Mi(r.sliceSerialize(n)),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),e.exit(`gfmFootnoteDefinitionLabel`),f}return J(t)||(s=!0),o++,e.consume(t),t===92?d:u}function d(t){return t===91||t===92||t===93?(e.consume(t),o++,u):u(t)}function f(t){return t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),i.includes(a)||i.push(a),X(e,p,`gfmFootnoteDefinitionWhitespace`)):n(t)}function p(e){return t(e)}}function Rd(e,t,n){return e.check(Xi,t,e.attempt(Md,t,n))}function zd(e){e.exit(`gfmFootnoteDefinition`)}function Bd(e,t,n){let r=this;return X(e,i,`gfmFootnoteDefinitionIndent`,5);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`gfmFootnoteDefinitionIndent`&&i[2].sliceSerialize(i[1],!0).length===4?t(e):n(e)}}function Vd(e){let t=(e||{}).singleTilde,n={name:`strikethrough`,tokenize:i,resolveAll:r};return t??=!0,{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){let n=-1;for(;++n<e.length;)if(e[n][0]===`enter`&&e[n][1].type===`strikethroughSequenceTemporary`&&e[n][1]._close){let r=n;for(;r--;)if(e[r][0]===`exit`&&e[r][1].type===`strikethroughSequenceTemporary`&&e[r][1]._open&&e[n][1].end.offset-e[n][1].start.offset===e[r][1].end.offset-e[r][1].start.offset){e[n][1].type=`strikethroughSequence`,e[r][1].type=`strikethroughSequence`;let i={type:`strikethrough`,start:Object.assign({},e[r][1].start),end:Object.assign({},e[n][1].end)},a={type:`strikethroughText`,start:Object.assign({},e[r][1].end),end:Object.assign({},e[n][1].start)},o=[[`enter`,i,t],[`enter`,e[r][1],t],[`exit`,e[r][1],t],[`enter`,a,t]],s=t.parser.constructs.insideSpan.null;s&&Ei(o,o.length,0,Ui(s,e.slice(r+1,n),t)),Ei(o,o.length,0,[[`exit`,a,t],[`enter`,e[n][1],t],[`exit`,e[n][1],t],[`exit`,i,t]]),Ei(e,r-1,n-r+3,o),n=r+o.length-2;break}}for(n=-1;++n<e.length;)e[n][1].type===`strikethroughSequenceTemporary`&&(e[n][1].type=`data`);return e}function i(e,n,r){let i=this.previous,a=this.events,o=0;return s;function s(t){return i===126&&a[a.length-1][1].type!==`characterEscape`?r(t):(e.enter(`strikethroughSequenceTemporary`),c(t))}function c(a){let s=Hi(i);if(a===126)return o>1?r(a):(e.consume(a),o++,c);if(o<2&&!t)return r(a);let l=e.exit(`strikethroughSequenceTemporary`),u=Hi(a);return l._open=!u||u===2&&!!s,l._close=!s||s===2&&!!u,n(a)}}}var Hd=class{constructor(){this.map=[],this.index=new Map}add(e,t,n){Ud(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),this.map.length===0)return;let t=this.map.length,n=[];for(;t>0;)--t,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0,this.index.clear()}};function Ud(e,t,n,r){if(n===0&&r.length===0)return;let i=e.index.get(t);if(i){i[1]+=n,i[2].push(...r);return}let a=[t,n,r];e.map.push(a),e.index.set(t,a)}function Wd(e,t){let n=!1,r=[];for(;t<e.length;){let i=e[t];if(n){if(i[0]===`enter`)i[1].type===`tableContent`&&r.push(e[t+1][1].type===`tableDelimiterMarker`?`left`:`none`);else if(i[1].type===`tableContent`){if(e[t-1][1].type===`tableDelimiterMarker`){let e=r.length-1;r[e]=r[e]===`left`?`center`:`right`}}else if(i[1].type===`tableDelimiterRow`)break}else i[0]===`enter`&&i[1].type===`tableDelimiterRow`&&(n=!0);t+=1}return r}function Gd(){return{flow:{null:{name:`table`,tokenize:Kd,resolveAll:qd}}}}function Kd(e,t,n){let r=this,i=0,a=0,o;return s;function s(e){let t=r.events.length-1;for(;t>-1;){let{type:e}=r.events[t][1];if(e===`lineEnding`||e===`linePrefix`)t--;else break}let i=t>-1?r.events[t][1].type:null,a=i===`tableHead`||i===`tableRow`?S:c;return a===S&&r.parser.lazy[r.now().line]?n(e):a(e)}function c(t){return e.enter(`tableHead`),e.enter(`tableRow`),l(t)}function l(e){return e===124||(o=!0,a+=1),u(e)}function u(t){return t===null?n(t):q(t)?a>1?(a=0,r.interrupt=!0,e.exit(`tableRow`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),p):n(t):Y(t)?X(e,u,`whitespace`)(t):(a+=1,o&&(o=!1,i+=1),t===124?(e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),o=!0,u):(e.enter(`data`),d(t)))}function d(t){return t===null||t===124||J(t)?(e.exit(`data`),u(t)):(e.consume(t),t===92?f:d)}function f(t){return t===92||t===124?(e.consume(t),d):d(t)}function p(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter(`tableDelimiterRow`),o=!1,Y(t)?X(e,m,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):m(t))}function m(t){return t===45||t===58?g(t):t===124?(o=!0,e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),h):x(t)}function h(t){return Y(t)?X(e,g,`whitespace`)(t):g(t)}function g(t){return t===58?(a+=1,o=!0,e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),_):t===45?(a+=1,_(t)):t===null||q(t)?b(t):x(t)}function _(t){return t===45?(e.enter(`tableDelimiterFiller`),v(t)):x(t)}function v(t){return t===45?(e.consume(t),v):t===58?(o=!0,e.exit(`tableDelimiterFiller`),e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),y):(e.exit(`tableDelimiterFiller`),y(t))}function y(t){return Y(t)?X(e,b,`whitespace`)(t):b(t)}function b(n){return n===124?m(n):n===null||q(n)?!o||i!==a?x(n):(e.exit(`tableDelimiterRow`),e.exit(`tableHead`),t(n)):x(n)}function x(e){return n(e)}function S(t){return e.enter(`tableRow`),C(t)}function C(n){return n===124?(e.enter(`tableCellDivider`),e.consume(n),e.exit(`tableCellDivider`),C):n===null||q(n)?(e.exit(`tableRow`),t(n)):Y(n)?X(e,C,`whitespace`)(n):(e.enter(`data`),w(n))}function w(t){return t===null||t===124||J(t)?(e.exit(`data`),C(t)):(e.consume(t),t===92?T:w)}function T(t){return t===92||t===124?(e.consume(t),w):w(t)}}function qd(e,t){let n=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],s=!1,c=0,l,u,d,f=new Hd;for(;++n<e.length;){let p=e[n],m=p[1];p[0]===`enter`?m.type===`tableHead`?(s=!1,c!==0&&(Yd(f,t,c,l,u),u=void 0,c=0),l={type:`table`,start:Object.assign({},m.start),end:Object.assign({},m.end)},f.add(n,0,[[`enter`,l,t]])):m.type===`tableRow`||m.type===`tableDelimiterRow`?(r=!0,d=void 0,a=[0,0,0,0],o=[0,n+1,0,0],s&&(s=!1,u={type:`tableBody`,start:Object.assign({},m.start),end:Object.assign({},m.end)},f.add(n,0,[[`enter`,u,t]])),i=m.type===`tableDelimiterRow`?2:u?3:1):i&&(m.type===`data`||m.type===`tableDelimiterMarker`||m.type===`tableDelimiterFiller`)?(r=!1,o[2]===0&&(a[1]!==0&&(o[0]=o[1],d=Jd(f,t,a,i,void 0,d),a=[0,0,0,0]),o[2]=n)):m.type===`tableCellDivider`&&(r?r=!1:(a[1]!==0&&(o[0]=o[1],d=Jd(f,t,a,i,void 0,d)),a=o,o=[a[1],n,0,0])):m.type===`tableHead`?(s=!0,c=n):m.type===`tableRow`||m.type===`tableDelimiterRow`?(c=n,a[1]===0?o[1]!==0&&(d=Jd(f,t,o,i,n,d)):(o[0]=o[1],d=Jd(f,t,a,i,n,d)),i=0):i&&(m.type===`data`||m.type===`tableDelimiterMarker`||m.type===`tableDelimiterFiller`)&&(o[3]=n)}for(c!==0&&Yd(f,t,c,l,u),f.consume(t.events),n=-1;++n<t.events.length;){let e=t.events[n];e[0]===`enter`&&e[1].type===`table`&&(e[1]._align=Wd(t.events,n))}return e}function Jd(e,t,n,r,i,a){let o=r===1?`tableHeader`:r===2?`tableDelimiter`:`tableData`;n[0]!==0&&(a.end=Object.assign({},Xd(t.events,n[0])),e.add(n[0],0,[[`exit`,a,t]]));let s=Xd(t.events,n[1]);if(a={type:o,start:Object.assign({},s),end:Object.assign({},s)},e.add(n[1],0,[[`enter`,a,t]]),n[2]!==0){let i=Xd(t.events,n[2]),a=Xd(t.events,n[3]),o={type:`tableContent`,start:Object.assign({},i),end:Object.assign({},a)};if(e.add(n[2],0,[[`enter`,o,t]]),r!==2){let r=t.events[n[2]],i=t.events[n[3]];if(r[1].end=Object.assign({},i[1].end),r[1].type=`chunkText`,r[1].contentType=`text`,n[3]>n[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[[`exit`,o,t]])}return i!==void 0&&(a.end=Object.assign({},Xd(t.events,i)),e.add(i,0,[[`exit`,a,t]]),a=void 0),a}function Yd(e,t,n,r,i){let a=[],o=Xd(t.events,n);i&&(i.end=Object.assign({},o),a.push([`exit`,i,t])),r.end=Object.assign({},o),a.push([`exit`,r,t]),e.add(n+1,0,a)}function Xd(e,t){let n=e[t],r=n[0]===`enter`?`start`:`end`;return n[1][r]}var Zd={name:`tasklistCheck`,tokenize:$d};function Qd(){return{text:{91:Zd}}}function $d(e,t,n){let r=this;return i;function i(t){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(t):(e.enter(`taskListCheck`),e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),a)}function a(t){return J(t)?(e.enter(`taskListCheckValueUnchecked`),e.consume(t),e.exit(`taskListCheckValueUnchecked`),o):t===88||t===120?(e.enter(`taskListCheckValueChecked`),e.consume(t),e.exit(`taskListCheckValueChecked`),o):n(t)}function o(t){return t===93?(e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),e.exit(`taskListCheck`),s):n(t)}function s(r){return q(r)?t(r):Y(r)?e.check({tokenize:ef},t,n)(r):n(r)}}function ef(e,t,n){return X(e,r,`whitespace`);function r(e){return e===null?n(e):t(e)}}function tf(e){return Oi([_d(),Nd(),Vd(e),Gd(),Qd()])}var nf={};function rf(e){let t=this,n=e||nf,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(tf(n)),a.push(od()),o.push(sd(n))}var af=[rf],of=[];function sf(e=``){return/(^|\s)language-mermaid(\s|$)/.test(e)}var cf=/\\n/g,lf=/([\[({])([^\])}]*<br\/>[^\])}]*)([\])}])/g;function uf(e){return String(e??``).replace(cf,`<br/>`).replace(lf,(e,t,n,r)=>{let i=n.trim();return i.startsWith(`"`)||i.startsWith(`'`)?e:`${t}"${n}"${r}`})}var df=/\$\$[\s\S]*?\$\$|\$[^\s$](?:[^$\n]*[^\s$])?\$|\\\(|\\\[/,ff=/```[\s\S]*?```|`[^`]*`/g;function pf(e){let t=String(e||``).replace(ff,``);return df.test(t)}async function mf(){let[e,t]=await Promise.all([y(()=>import(`./remark-math-C-ox67hE.js`),[],import.meta.url),y(()=>import(`./rehype-katex-C-sKddsH.js`),[],import.meta.url),y(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url)]);return{remarkPlugins:[e.default],rehypePlugins:[t.default]}}var hf=null;function gf(){return hf||=y(async()=>{let{default:e}=await import(`./mermaid.core-DTO1oDmq.js`);return{default:e}},__vite__mapDeps([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]),import.meta.url).then(({default:e})=>{let t=typeof window<`u`&&window.matchMedia?.(`(prefers-color-scheme: dark)`).matches;return e.initialize({startOnLoad:!1,securityLevel:`strict`,theme:t?`dark`:`default`}),e}),hf}var _f=0;function vf(){return _f+=1,`mermaid-${_f}-${Math.random().toString(36).slice(2)}`}function yf({code:e}){let[t,n]=(0,U.useState)(``),[r,i]=(0,U.useState)(!1);return(0,U.useEffect)(()=>{let t=!0;return(async()=>{try{let{svg:r}=await(await gf()).render(vf(),uf(e));t&&n(r)}catch(e){console.warn(`[mermaid]`,e),t&&i(!0)}})(),()=>{t=!1}},[e]),r||!t?(0,W.jsx)(`pre`,{children:(0,W.jsx)(`code`,{className:`language-mermaid`,children:e})}):(0,W.jsx)(`div`,{className:`mermaid-diagram my-4 overflow-x-auto`,dangerouslySetInnerHTML:{__html:t}})}function bf({className:e,children:t,...n}){return sf(e)?(0,W.jsx)(yf,{code:String(t).replace(/\n$/,``)}):(0,W.jsx)(`code`,{className:e,...n,children:t})}function xf({children:e}){let t=Array.isArray(e)?e[0]:e;return t?.props?.className&&sf(t.props.className)?t:(0,W.jsx)(`pre`,{children:e})}function Sf({children:e,className:t=``}){let n=String(e||``),r=(0,U.useMemo)(()=>pf(n),[n]),[i,a]=(0,U.useState)(null);(0,U.useEffect)(()=>{if(!r){a(null);return}let e=!0;return mf().then(t=>e&&a(t)).catch(()=>{}),()=>{e=!1}},[r]);let o=(0,U.useMemo)(()=>[...af,...i?.remarkPlugins||[]],[i]),s=(0,U.useMemo)(()=>[...of,...i?.rehypePlugins||[]],[i]);return(0,W.jsx)(`div`,{className:`prose-lesson ${t}`,children:(0,W.jsx)(Qc,{remarkPlugins:o,rehypePlugins:s,components:{a:({node:e,...t})=>(0,W.jsx)(`a`,{...t,target:`_blank`,rel:`noopener noreferrer`}),code:bf,pre:xf},children:n})})}var Cf=`professor-studio:hint-levels`;function wf(){if(typeof localStorage>`u`)return{};try{let e=localStorage.getItem(Cf),t=e?JSON.parse(e):{};return t&&typeof t==`object`?t:{}}catch{return{}}}function Tf(e){if(typeof localStorage<`u`)try{localStorage.setItem(Cf,JSON.stringify(e))}catch{}}function Ef(e){let t=Math.round(Number(e));return Number.isFinite(t)?Math.min(Math.max(t,0),pt):0}function Df(e){return Math.min(Ef(e)+1,pt)}function Of(e){let t=Ef(e);return t>0?`Hint ${t} of ${pt}`:`Hint`}function kf(e){let t=Ef(e);return t>0?ft[t-1].kind:``}function Af(e){return Ef(wf()[e])}function jf(e,t){let n=Ef(t),r=wf();return r[e]=n,Tf(r),n}function Mf(e){return jf(e,Df(Af(e)))}function Nf(e){return jf(e,0)}function Pf(e){let[t,n]=(0,U.useState)(()=>Af(e)),[r,i]=(0,U.useState)(e);r!==e&&(i(e),n(Af(e)));let a=(0,U.useCallback)(()=>{let t=Mf(e);return n(t),t},[e]),o=(0,U.useCallback)(()=>{n(Nf(e))},[e]);return{level:t,label:Of(t),stage:kf(t),next:Df(t),advance:a,reset:o}}function Ff(e,t){if(!t)return``;let n=`tutor.mode.${t}`,r=e(n);return r===n?``:r}function If({message:e,streaming:t=!1}){let n=f(),r=e.role===`user`,i=Ff(n,e.mode);return(0,W.jsx)(`div`,{className:`flex ${r?`justify-end`:`justify-start`}`,children:(0,W.jsxs)(`div`,{className:`max-w-[85%] rounded-2xl px-3.5 py-2.5 text-sm leading-relaxed ${r?`rounded-br-sm bg-indigo-600 text-white`:`rounded-bl-sm border border-neutral-200 bg-white text-neutral-800 dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-100`}`,children:[!r&&i&&(0,W.jsx)(`div`,{className:`mb-1`,children:(0,W.jsx)(D,{tone:`accent`,children:i})}),r?(0,W.jsx)(`p`,{className:`whitespace-pre-wrap break-words`,children:e.content}):(0,W.jsx)(Sf,{className:`text-sm`,children:e.content}),t&&(0,W.jsxs)(`span`,{className:`mt-1 inline-flex items-center gap-1.5 text-xs text-neutral-500`,children:[(0,W.jsx)(C,{label:n(`tutor.title`)}),(0,W.jsx)(`span`,{children:n(`tutor.thinking`)})]})]})})}function Lf({onAction:e,disabled:t=!1,hintLevel:n=0,pendingMode:r=null}){let i=f();return(0,W.jsx)(`div`,{className:`flex flex-wrap gap-2`,role:`group`,"aria-label":i(`tutor.quickAria`),children:yt.map(a=>{let o=r===a.id,s=a.id===`hint`&&n>0?` · ${Of(n)}`:``,c=a.id===`review`?i(`revision.tutor.reviewAction`):i(`tutor.mode.${a.id}`);return(0,W.jsxs)(T,{size:`sm`,variant:o?`primary`:`secondary`,disabled:t,"aria-pressed":o,onClick:()=>e(a.id),children:[c,s]},a.id)})})}function Rf(e){return _n(e?.content)?.surface??null}function zf({message:e,onRevise:t=null,reviseHint:n=null,title:r=null}){let i=typeof e?.content==`string`?e.content:``,a=_n(i);return a?(0,W.jsx)(Bn,{criteria:a.criteria,title:r,showRevise:!a.passing&&typeof t==`function`,onRevise:t,reviseHint:n}):(0,W.jsx)(`p`,{className:`whitespace-pre-wrap text-sm text-neutral-700 dark:text-neutral-300`,children:i})}function Bf(e){return`That review was not valid: ${e}. Reply with ONLY the corrected review JSON, same shape, no prose, no Markdown fences.`}async function Vf({provider:e,system:t,messages:n=[],signal:r,validate:i}={}){let o=n=>e.streamText({system:t,messages:n,signal:r,effort:`low`,maxTokens:ie.json}),s=e=>{let t=ne(e),n=!i||i(t);if(n!==!0)throw Error(typeof n==`string`?n:`Invalid review JSON`);return t},c=await o(n);try{return s(c)}catch(e){if(l(e))throw e;let t=await o([...n,{role:`assistant`,content:String(c).slice(0,4e3)},{role:`user`,content:Bf(e?.message||`invalid review JSON`)}]);try{return s(t)}catch(e){throw l(e)?e:a(`bad_json`,e?.message||`Model did not return a valid review`)}}}function Hf(e,t){return e(t===`quiz`?`revision.review.surface.quiz`:t===`workspace`?`revision.review.surface.workspace`:`revision.review.title`)}function Uf({message:e,onRevise:t=null}){let n=f();if(!e||e.role!==`assistant`||e.mode!==`review`)return(0,W.jsx)(If,{message:e});let r=Rf(e);if(!r)return(0,W.jsx)(`p`,{className:`text-sm text-neutral-500`,role:`note`,children:n(`revision.review.unreadable`)});let i=r===`tutor`;return(0,W.jsx)(zf,{message:e,title:i?n(`revision.review.criteria`):Hf(n,r),onRevise:i&&typeof t==`function`?()=>t(e.id):null,reviseHint:i?n(`revision.tutor.reviseHint`):null})}function Wf(e){switch(e.provider){case`anthropic`:return!!e.anthropic?.apiKey;case`openai`:return!!e.openai?.apiKey;case`ollama`:case`bridge`:return!0;default:return!1}}function Gf({lesson:e,course:t,capstone:n=!1,capstoneBrief:r=null}){let a=f(),[l]=i(),u=(0,U.useRef)(l);u.current=l;let d=Pf(e.id),m=(0,U.useRef)(d.level);m.current=d.level;let[_,v]=(0,U.useState)([]),y=(0,U.useRef)([]),[C,w]=(0,U.useState)(!1),[E,D]=(0,U.useState)(``),[O,ne]=(0,U.useState)(null),[A,j]=(0,U.useState)(!1),[M,N]=(0,U.useState)(null),[ae,oe]=(0,U.useState)(!1),P=(0,U.useRef)(``),se=(0,U.useRef)(null),ce=(0,U.useRef)(!0),ue=(0,U.useRef)(null),de=(0,U.useRef)(``),fe=(0,U.useRef)(null),F=(0,U.useRef)(()=>{}),pe=(0,U.useRef)(null),{text:me,status:I,error:L,start:he,stop:R}=le(),z=(0,U.useRef)(I);z.current=I;let B=I===`streaming`,V=(0,U.useCallback)(e=>{y.current=e,v(e)},[]);(0,U.useEffect)(()=>{let t=!0,n=()=>te(e.id).then(e=>{t&&V(e)}).finally(()=>{t&&w(!0)});w(!1),n();let r=S(e=>{(e.table===`chat_messages`||e.table===`*`)&&n()});return()=>{t=!1,r()}},[e.id,V]),(0,U.useEffect)(()=>{let t=!0;return b(e.id).then(e=>{t&&(P.current=e?.content_md||``)}).catch(()=>{t&&(P.current=``)}),()=>{t=!1}},[e.id]);let H=(0,U.useCallback)(async()=>{let e=fe.current,t=de.current;return fe.current=null,de.current=``,!e||!t.trim()?null:h(e.lessonId,{role:`assistant`,content:t,mode:e.mode})},[]);F.current=H,(0,U.useEffect)(()=>()=>F.current(),[]);let ge=(0,U.useCallback)(async({content:i,mode:a=null})=>{let o=String(i||``).trim();if(!o||z.current===`streaming`)return;let s=a===`hint`?d.advance():void 0,l=a===`check_answer`?jn(pe):null,f=await h(e.id,{role:`user`,content:o,mode:a,revisionOf:l}),m=[...y.current,f],g=null;if(!n&&a===`check_answer`&&t?.kind===`programming`)try{g=await Cr(e.id)}catch{g=null}let _=t?.language??u.current.language,v=async i=>{de.current=``,fe.current={lessonId:e.id,mode:a},D(``),ne(null),j(!1);try{await he(async({onText:o,signal:c})=>{let l=await x(u.current),{system:d,messages:f}=At({course:t,lesson:e,lessonContent:P.current,history:m,mode:a||void 0,hintLevel:s,language:_,learnerCode:g,capstone:n,capstoneBrief:r,strict:i});return l.streamText({system:d,messages:f,signal:c,maxTokens:ie.chat,onText:e=>{de.current+=e,o(e)}})})}catch{}let o=await H();return o&&V([...y.current.filter(e=>e.id!==o.id),o]),o};oe(!1);let b=await v(!1);!n&&!c(_)&&b&&!p(b.content,_).ok&&(oe(!0),await v(!0))},[h,V,n,r,t,d,e,H,he]),_e=(0,U.useCallback)(async()=>{if(z.current===`streaming`)return;let n=y.current;if(!n.some(e=>e?.role===`user`)){N(Error(a(`revision.tutor.reviewEmpty`)));return}N(null),j(!1);let r;try{r=await h(e.id,{role:`user`,content:a(`revision.tutor.reviewUserText`),mode:`review`})}catch(e){N(e);return}let i=[...n,r],o=Fn(n);try{await he(async({signal:n})=>{try{let a=await x(u.current),{system:s,messages:c}=Rt({course:t,lesson:e,lessonContent:P.current,history:i,rubric:o,language:t?.language??u.current.language}),l=Lt(await Vf({provider:a,system:s,messages:c,signal:n,validate:e=>It(e,{rubric:o})}),{rubric:o}),d=gn({surface:`tutor`,attemptTable:`chat_messages`,attemptId:r.id,criteria:l});return h(e.id,{role:`assistant`,content:JSON.stringify(d),mode:`review`})}catch(e){throw N(new s(`bad_json`,a(`revision.review.failed`),a(`revision.review.failedHint`))),e}})}catch{}},[h,t,e,he,a]),ve=(0,U.useCallback)(()=>{ge({content:E,mode:O})},[E,O,ge]),ye=(0,U.useCallback)(e=>{An(pe,Nn(e)),ne(`check_answer`),ue.current?.focus()},[]),be=(0,U.useCallback)(e=>{if(n)return;if(e===`review`){_e();return}if(e===`check_answer`){ne(`check_answer`),ue.current?.focus();return}let t=yt.find(t=>t.id===e);ge({content:t?.userText||``,mode:e})},[n,_e,ge]),xe=(0,U.useCallback)(async()=>{R(),await H()},[R,H]),Se=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),ve())},Ce=()=>{let e=se.current;e&&(ce.current=e.scrollHeight-e.scrollTop-e.clientHeight<80)};(0,U.useEffect)(()=>{let e=se.current;e&&ce.current&&(e.scrollTop=e.scrollHeight)},[_,me]);let we=!!me&&(I===`streaming`||fe.current!=null),Te=M||(A?null:L),Ee=Wf(l),De=E.trim().length>0&&!B,Oe=(0,U.useMemo)(()=>({id:`__draft`,role:`assistant`,content:me,mode:fe.current?.mode||null}),[me]),ke=(0,U.useMemo)(()=>_.filter(e=>e.role===`assistant`&&e.mode===`review`&&Rf(e)===`tutor`).map((e,t)=>({id:e.id,label:a(`revision.history.attempt`,{n:t+1}),criteria:_n(e.content)?.criteria??[]})),[_,a]);return(0,W.jsxs)(re,{className:`flex flex-col gap-3`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`h2`,{className:`font-semibold`,children:a(n?`tutor.capstoneTitle`:`tutor.title`)}),(0,W.jsx)(`p`,{className:`text-xs text-neutral-500`,children:n?a(`tutor.capstoneDesc`):a(`tutor.desc`,{title:e.title})})]}),B&&(0,W.jsx)(T,{variant:`secondary`,size:`sm`,onClick:xe,children:a(`tutor.stop`)})]}),!Ee&&!B&&(0,W.jsxs)(`p`,{className:`rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-800 dark:bg-amber-500/10 dark:text-amber-200`,children:[a(`tutor.noSource`),` `,(0,W.jsx)(g,{to:`/settings`,className:`font-medium underline`,children:a(`tutor.openSettings`)}),` `,a(`tutor.noSourceAfter`)]}),(0,W.jsxs)(`div`,{ref:se,onScroll:Ce,className:`flex max-h-[26rem] min-h-[10rem] flex-col gap-3 overflow-y-auto rounded-lg bg-neutral-50 p-3 dark:bg-neutral-950/40`,"aria-live":`polite`,children:[!C&&(0,W.jsx)(`p`,{className:`text-sm text-neutral-500`,children:a(`tutor.loadingHistory`)}),C&&_.length===0&&!we&&(0,W.jsx)(k,{title:a(n?`tutor.capstoneEmpty.title`:`tutor.empty.title`),description:a(n?`tutor.capstoneEmpty.description`:`tutor.empty.description`),className:`border-0 bg-transparent`}),_.map(e=>(0,W.jsx)(Uf,{message:e,onRevise:ye},e.id)),we&&(0,W.jsx)(If,{message:Oe,streaming:B})]}),Te&&(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(ee,{error:Te,onDismiss:()=>{j(!0),N(null)}}),M?(0,W.jsx)(T,{variant:`secondary`,size:`sm`,onClick:_e,children:a(`revision.review.retry`)}):null]}),ae&&!B&&(0,W.jsx)(`p`,{className:`rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-800 dark:bg-amber-500/10 dark:text-amber-200`,children:a(`tutor.languageNotice`,{language:o(t?.language??l.language)})}),n?(0,W.jsx)(`p`,{className:`rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-800 dark:bg-amber-500/10 dark:text-amber-200`,children:a(`tutor.capstoneNotice`)}):(0,W.jsx)(Lf,{onAction:be,disabled:B,hintLevel:d.level,pendingMode:O}),!n&&ke.length>0?(0,W.jsx)(Un,{attempts:ke,title:a(`revision.history.title`)}):null,(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(`label`,{htmlFor:`tutor-input-${e.id}`,className:`sr-only`,children:a(`tutor.ariaInput`)}),(0,W.jsx)(`textarea`,{id:`tutor-input-${e.id}`,ref:ue,rows:3,value:E,onChange:e=>D(e.target.value),onKeyDown:Se,placeholder:a(n?`tutor.capstonePlaceholder`:O===`check_answer`?`tutor.checkPlaceholder`:`tutor.placeholder`),className:`w-full resize-y rounded-lg border border-neutral-300 bg-white px-3 py-2 text-sm text-neutral-900 placeholder:text-neutral-400 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100`}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,W.jsx)(`p`,{className:`text-xs text-neutral-500`,children:a(n?`tutor.capstoneFooter`:O===`check_answer`?`tutor.checkHint`:`tutor.guideHint`)}),(0,W.jsx)(`div`,{className:`flex gap-2`,children:B?(0,W.jsx)(T,{variant:`secondary`,size:`sm`,onClick:xe,children:a(`tutor.stop`)}):(0,W.jsx)(T,{size:`sm`,onClick:ve,disabled:!De,children:a(`tutor.send`)})})]})]})]})}export{$t as A,Xe as B,Pn as C,rn as D,fn as E,hn as F,Fe as G,Ve as H,X as I,fe as J,Ie as K,q as L,an as M,Yt as N,tn as O,Jt as P,et as R,On as S,Ut as T,ze as U,Ze as V,Le as W,In as _,vr as a,Mn as b,gr as c,Bn as d,An as f,vn as g,jn as h,br as i,nn as j,en as k,nr as l,gn as m,Sf as n,fr as o,bn as p,Me as q,xr as r,dr as s,Gf as t,Un as u,_n as v,Wt as w,Sn as x,Dn as y,$e as z};
123
+ `))}function c(e,t,n,r){let i=n.enter(`tableCell`),o=n.enter(`phrasing`),s=n.containerPhrasing(e,{...r,before:a,after:a});return o(),i(),s}function l(e,t){return Jl(e,{align:t,alignDelimiters:r,padding:n,stringLength:i})}function u(e,t,n){let r=e.children,i=-1,a=[],o=t.enter(`table`);for(;++i<r.length;)a[i]=d(r[i],t,n);return o(),a}function d(e,t,n){let r=e.children,i=-1,a=[],o=t.enter(`tableRow`);for(;++i<r.length;)a[i]=c(r[i],e,t,n);return o(),a}function f(e,t,n){let r=Gu.inlineCode(e,t,n);return n.stack.includes(`tableCell`)&&(r=r.replace(/\|/g,`\\$&`)),r}}function td(){return{exit:{taskListCheckValueChecked:rd,taskListCheckValueUnchecked:rd,paragraph:id}}}function nd(){return{unsafe:[{atBreak:!0,character:`-`,after:`[:|-]`}],handlers:{listItem:ad}}}function rd(e){let t=this.stack[this.stack.length-2];t.type,t.checked=e.type===`taskListCheckValueChecked`}function id(e){let t=this.stack[this.stack.length-2];if(t&&t.type===`listItem`&&typeof t.checked==`boolean`){let e=this.stack[this.stack.length-1];e.type;let n=e.children[0];if(n&&n.type===`text`){let r=t.children,i=-1,a;for(;++i<r.length;){let e=r[i];if(e.type===`paragraph`){a=e;break}}a===e&&(n.value=n.value.slice(1),n.value.length===0?e.children.shift():e.position&&n.position&&typeof n.position.start.offset==`number`&&(n.position.start.column++,n.position.start.offset++,e.position.start=Object.assign({},n.position.start)))}}this.exit(e)}function ad(e,t,n,r){let i=e.children[0],a=typeof e.checked==`boolean`&&i&&i.type===`paragraph`,o=`[`+(e.checked?`x`:` `)+`] `,s=n.createTracker(r);a&&s.move(o);let c=Gu.listItem(e,t,n,{...r,...s.current()});return a&&(c=c.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,l)),c;function l(e){return e+o}}function od(){return[dl(),Fl(),Bl(),Ku(),td()]}function sd(e){return{extensions:[fl(),Il(e),Vl(),ed(e),nd()]}}var cd={tokenize:Sd,partial:!0},ld={tokenize:Cd,partial:!0},ud={tokenize:wd,partial:!0},dd={tokenize:Td,partial:!0},fd={tokenize:Ed,partial:!0},pd={name:`wwwAutolink`,tokenize:bd,previous:Dd},md={name:`protocolAutolink`,tokenize:xd,previous:Od},hd={name:`emailAutolink`,tokenize:yd,previous:kd},gd={};function _d(){return{text:gd}}for(var vd=48;vd<123;)gd[vd]=hd,vd++,vd===58?vd=65:vd===91&&(vd=97);gd[43]=hd,gd[45]=hd,gd[46]=hd,gd[95]=hd,gd[72]=[hd,md],gd[104]=[hd,md],gd[87]=[hd,pd],gd[119]=[hd,pd];function yd(e,t,n){let r=this,i,a;return o;function o(t){return!Ad(t)||!kd.call(r,r.previous)||jd(r.events)?n(t):(e.enter(`literalAutolink`),e.enter(`literalAutolinkEmail`),s(t))}function s(t){return Ad(t)?(e.consume(t),s):t===64?(e.consume(t),c):n(t)}function c(t){return t===46?e.check(fd,u,l)(t):t===45||t===95||K(t)?(a=!0,e.consume(t),c):u(t)}function l(t){return e.consume(t),i=!0,c}function u(o){return a&&i&&G(r.previous)?(e.exit(`literalAutolinkEmail`),e.exit(`literalAutolink`),t(o)):n(o)}}function bd(e,t,n){let r=this;return i;function i(t){return t!==87&&t!==119||!Dd.call(r,r.previous)||jd(r.events)?n(t):(e.enter(`literalAutolink`),e.enter(`literalAutolinkWww`),e.check(cd,e.attempt(ld,e.attempt(ud,a),n),n)(t))}function a(n){return e.exit(`literalAutolinkWww`),e.exit(`literalAutolink`),t(n)}}function xd(e,t,n){let r=this,i=``,a=!1;return o;function o(t){return(t===72||t===104)&&Od.call(r,r.previous)&&!jd(r.events)?(e.enter(`literalAutolink`),e.enter(`literalAutolinkHttp`),i+=String.fromCodePoint(t),e.consume(t),s):n(t)}function s(t){if(G(t)&&i.length<5)return i+=String.fromCodePoint(t),e.consume(t),s;if(t===58){let n=i.toLowerCase();if(n===`http`||n===`https`)return e.consume(t),c}return n(t)}function c(t){return t===47?(e.consume(t),a?l:(a=!0,c)):n(t)}function l(t){return t===null||nt(t)||J(t)||st(t)||ot(t)?n(t):e.attempt(ld,e.attempt(ud,u),n)(t)}function u(n){return e.exit(`literalAutolinkHttp`),e.exit(`literalAutolink`),t(n)}}function Sd(e,t,n){let r=0;return i;function i(t){return(t===87||t===119)&&r<3?(r++,e.consume(t),i):t===46&&r===3?(e.consume(t),a):n(t)}function a(e){return e===null?n(e):t(e)}}function Cd(e,t,n){let r,i,a;return o;function o(t){return t===46||t===95?e.check(dd,c,s)(t):t===null||J(t)||st(t)||t!==45&&ot(t)?c(t):(a=!0,e.consume(t),o)}function s(t){return t===95?r=!0:(i=r,r=void 0),e.consume(t),o}function c(e){return i||r||!a?n(e):t(e)}}function wd(e,t){let n=0,r=0;return i;function i(o){return o===40?(n++,e.consume(o),i):o===41&&r<n?a(o):o===33||o===34||o===38||o===39||o===41||o===42||o===44||o===46||o===58||o===59||o===60||o===63||o===93||o===95||o===126?e.check(dd,t,a)(o):o===null||J(o)||st(o)?t(o):(e.consume(o),i)}function a(t){return t===41&&r++,e.consume(t),i}}function Td(e,t,n){return r;function r(o){return o===33||o===34||o===39||o===41||o===42||o===44||o===46||o===58||o===59||o===63||o===95||o===126?(e.consume(o),r):o===38?(e.consume(o),a):o===93?(e.consume(o),i):o===60||o===null||J(o)||st(o)?t(o):n(o)}function i(e){return e===null||e===40||e===91||J(e)||st(e)?t(e):r(e)}function a(e){return G(e)?o(e):n(e)}function o(t){return t===59?(e.consume(t),r):G(t)?(e.consume(t),o):n(t)}}function Ed(e,t,n){return r;function r(t){return e.consume(t),i}function i(e){return K(e)?n(e):t(e)}}function Dd(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||J(e)}function Od(e){return!G(e)}function kd(e){return!(e===47||Ad(e))}function Ad(e){return e===43||e===45||e===46||e===95||K(e)}function jd(e){let t=e.length,n=!1;for(;t--;){let r=e[t][1];if((r.type===`labelLink`||r.type===`labelImage`)&&!r._balanced){n=!0;break}if(r._gfmAutolinkLiteralWalkedInto){n=!1;break}}return e.length>0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}var Md={tokenize:Bd,partial:!0};function Nd(){return{document:{91:{name:`gfmFootnoteDefinition`,tokenize:Ld,continuation:{tokenize:Rd},exit:zd}},text:{91:{name:`gfmFootnoteCall`,tokenize:Id},93:{name:`gfmPotentialFootnoteCall`,add:`after`,tokenize:Pd,resolveTo:Fd}}}}function Pd(e,t,n){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let e=r.events[i][1];if(e.type===`labelImage`){o=e;break}if(e.type===`gfmFootnoteCall`||e.type===`labelLink`||e.type===`label`||e.type===`image`||e.type===`link`)break}return s;function s(i){if(!o||!o._balanced)return n(i);let s=Mi(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?n(i):(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(i),e.exit(`gfmFootnoteCallLabelMarker`),t(i))}}function Fd(e,t){let n=e.length;for(;n--;)if(e[n][1].type===`labelImage`&&e[n][0]===`enter`){e[n][1];break}e[n+1][1].type=`data`,e[n+3][1].type=`gfmFootnoteCallLabelMarker`;let r={type:`gfmFootnoteCall`,start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:`gfmFootnoteCallMarker`,start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:`gfmFootnoteCallString`,start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:`chunkString`,contentType:`string`,start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],[`enter`,r,t],e[n+3],e[n+4],[`enter`,i,t],[`exit`,i,t],[`enter`,a,t],[`enter`,o,t],[`exit`,o,t],[`exit`,a,t],e[e.length-2],e[e.length-1],[`exit`,r,t]];return e.splice(n,e.length-n+1,...s),e}function Id(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return s;function s(t){return e.enter(`gfmFootnoteCall`),e.enter(`gfmFootnoteCallLabelMarker`),e.consume(t),e.exit(`gfmFootnoteCallLabelMarker`),c}function c(t){return t===94?(e.enter(`gfmFootnoteCallMarker`),e.consume(t),e.exit(`gfmFootnoteCallMarker`),e.enter(`gfmFootnoteCallString`),e.enter(`chunkString`).contentType=`string`,l):n(t)}function l(s){if(a>999||s===93&&!o||s===null||s===91||J(s))return n(s);if(s===93){e.exit(`chunkString`);let a=e.exit(`gfmFootnoteCallString`);return i.includes(Mi(r.sliceSerialize(a)))?(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(s),e.exit(`gfmFootnoteCallLabelMarker`),e.exit(`gfmFootnoteCall`),t):n(s)}return J(s)||(o=!0),a++,e.consume(s),s===92?u:l}function u(t){return t===91||t===92||t===93?(e.consume(t),a++,l):l(t)}}function Ld(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,s;return c;function c(t){return e.enter(`gfmFootnoteDefinition`)._container=!0,e.enter(`gfmFootnoteDefinitionLabel`),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),l}function l(t){return t===94?(e.enter(`gfmFootnoteDefinitionMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionMarker`),e.enter(`gfmFootnoteDefinitionLabelString`),e.enter(`chunkString`).contentType=`string`,u):n(t)}function u(t){if(o>999||t===93&&!s||t===null||t===91||J(t))return n(t);if(t===93){e.exit(`chunkString`);let n=e.exit(`gfmFootnoteDefinitionLabelString`);return a=Mi(r.sliceSerialize(n)),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),e.exit(`gfmFootnoteDefinitionLabel`),f}return J(t)||(s=!0),o++,e.consume(t),t===92?d:u}function d(t){return t===91||t===92||t===93?(e.consume(t),o++,u):u(t)}function f(t){return t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),i.includes(a)||i.push(a),X(e,p,`gfmFootnoteDefinitionWhitespace`)):n(t)}function p(e){return t(e)}}function Rd(e,t,n){return e.check(Xi,t,e.attempt(Md,t,n))}function zd(e){e.exit(`gfmFootnoteDefinition`)}function Bd(e,t,n){let r=this;return X(e,i,`gfmFootnoteDefinitionIndent`,5);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`gfmFootnoteDefinitionIndent`&&i[2].sliceSerialize(i[1],!0).length===4?t(e):n(e)}}function Vd(e){let t=(e||{}).singleTilde,n={name:`strikethrough`,tokenize:i,resolveAll:r};return t??=!0,{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){let n=-1;for(;++n<e.length;)if(e[n][0]===`enter`&&e[n][1].type===`strikethroughSequenceTemporary`&&e[n][1]._close){let r=n;for(;r--;)if(e[r][0]===`exit`&&e[r][1].type===`strikethroughSequenceTemporary`&&e[r][1]._open&&e[n][1].end.offset-e[n][1].start.offset===e[r][1].end.offset-e[r][1].start.offset){e[n][1].type=`strikethroughSequence`,e[r][1].type=`strikethroughSequence`;let i={type:`strikethrough`,start:Object.assign({},e[r][1].start),end:Object.assign({},e[n][1].end)},a={type:`strikethroughText`,start:Object.assign({},e[r][1].end),end:Object.assign({},e[n][1].start)},o=[[`enter`,i,t],[`enter`,e[r][1],t],[`exit`,e[r][1],t],[`enter`,a,t]],s=t.parser.constructs.insideSpan.null;s&&Ei(o,o.length,0,Ui(s,e.slice(r+1,n),t)),Ei(o,o.length,0,[[`exit`,a,t],[`enter`,e[n][1],t],[`exit`,e[n][1],t],[`exit`,i,t]]),Ei(e,r-1,n-r+3,o),n=r+o.length-2;break}}for(n=-1;++n<e.length;)e[n][1].type===`strikethroughSequenceTemporary`&&(e[n][1].type=`data`);return e}function i(e,n,r){let i=this.previous,a=this.events,o=0;return s;function s(t){return i===126&&a[a.length-1][1].type!==`characterEscape`?r(t):(e.enter(`strikethroughSequenceTemporary`),c(t))}function c(a){let s=Hi(i);if(a===126)return o>1?r(a):(e.consume(a),o++,c);if(o<2&&!t)return r(a);let l=e.exit(`strikethroughSequenceTemporary`),u=Hi(a);return l._open=!u||u===2&&!!s,l._close=!s||s===2&&!!u,n(a)}}}var Hd=class{constructor(){this.map=[],this.index=new Map}add(e,t,n){Ud(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),this.map.length===0)return;let t=this.map.length,n=[];for(;t>0;)--t,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0,this.index.clear()}};function Ud(e,t,n,r){if(n===0&&r.length===0)return;let i=e.index.get(t);if(i){i[1]+=n,i[2].push(...r);return}let a=[t,n,r];e.map.push(a),e.index.set(t,a)}function Wd(e,t){let n=!1,r=[];for(;t<e.length;){let i=e[t];if(n){if(i[0]===`enter`)i[1].type===`tableContent`&&r.push(e[t+1][1].type===`tableDelimiterMarker`?`left`:`none`);else if(i[1].type===`tableContent`){if(e[t-1][1].type===`tableDelimiterMarker`){let e=r.length-1;r[e]=r[e]===`left`?`center`:`right`}}else if(i[1].type===`tableDelimiterRow`)break}else i[0]===`enter`&&i[1].type===`tableDelimiterRow`&&(n=!0);t+=1}return r}function Gd(){return{flow:{null:{name:`table`,tokenize:Kd,resolveAll:qd}}}}function Kd(e,t,n){let r=this,i=0,a=0,o;return s;function s(e){let t=r.events.length-1;for(;t>-1;){let{type:e}=r.events[t][1];if(e===`lineEnding`||e===`linePrefix`)t--;else break}let i=t>-1?r.events[t][1].type:null,a=i===`tableHead`||i===`tableRow`?S:c;return a===S&&r.parser.lazy[r.now().line]?n(e):a(e)}function c(t){return e.enter(`tableHead`),e.enter(`tableRow`),l(t)}function l(e){return e===124||(o=!0,a+=1),u(e)}function u(t){return t===null?n(t):q(t)?a>1?(a=0,r.interrupt=!0,e.exit(`tableRow`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),p):n(t):Y(t)?X(e,u,`whitespace`)(t):(a+=1,o&&(o=!1,i+=1),t===124?(e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),o=!0,u):(e.enter(`data`),d(t)))}function d(t){return t===null||t===124||J(t)?(e.exit(`data`),u(t)):(e.consume(t),t===92?f:d)}function f(t){return t===92||t===124?(e.consume(t),d):d(t)}function p(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter(`tableDelimiterRow`),o=!1,Y(t)?X(e,m,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):m(t))}function m(t){return t===45||t===58?g(t):t===124?(o=!0,e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),h):x(t)}function h(t){return Y(t)?X(e,g,`whitespace`)(t):g(t)}function g(t){return t===58?(a+=1,o=!0,e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),_):t===45?(a+=1,_(t)):t===null||q(t)?b(t):x(t)}function _(t){return t===45?(e.enter(`tableDelimiterFiller`),v(t)):x(t)}function v(t){return t===45?(e.consume(t),v):t===58?(o=!0,e.exit(`tableDelimiterFiller`),e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),y):(e.exit(`tableDelimiterFiller`),y(t))}function y(t){return Y(t)?X(e,b,`whitespace`)(t):b(t)}function b(n){return n===124?m(n):n===null||q(n)?!o||i!==a?x(n):(e.exit(`tableDelimiterRow`),e.exit(`tableHead`),t(n)):x(n)}function x(e){return n(e)}function S(t){return e.enter(`tableRow`),C(t)}function C(n){return n===124?(e.enter(`tableCellDivider`),e.consume(n),e.exit(`tableCellDivider`),C):n===null||q(n)?(e.exit(`tableRow`),t(n)):Y(n)?X(e,C,`whitespace`)(n):(e.enter(`data`),w(n))}function w(t){return t===null||t===124||J(t)?(e.exit(`data`),C(t)):(e.consume(t),t===92?T:w)}function T(t){return t===92||t===124?(e.consume(t),w):w(t)}}function qd(e,t){let n=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],s=!1,c=0,l,u,d,f=new Hd;for(;++n<e.length;){let p=e[n],m=p[1];p[0]===`enter`?m.type===`tableHead`?(s=!1,c!==0&&(Yd(f,t,c,l,u),u=void 0,c=0),l={type:`table`,start:Object.assign({},m.start),end:Object.assign({},m.end)},f.add(n,0,[[`enter`,l,t]])):m.type===`tableRow`||m.type===`tableDelimiterRow`?(r=!0,d=void 0,a=[0,0,0,0],o=[0,n+1,0,0],s&&(s=!1,u={type:`tableBody`,start:Object.assign({},m.start),end:Object.assign({},m.end)},f.add(n,0,[[`enter`,u,t]])),i=m.type===`tableDelimiterRow`?2:u?3:1):i&&(m.type===`data`||m.type===`tableDelimiterMarker`||m.type===`tableDelimiterFiller`)?(r=!1,o[2]===0&&(a[1]!==0&&(o[0]=o[1],d=Jd(f,t,a,i,void 0,d),a=[0,0,0,0]),o[2]=n)):m.type===`tableCellDivider`&&(r?r=!1:(a[1]!==0&&(o[0]=o[1],d=Jd(f,t,a,i,void 0,d)),a=o,o=[a[1],n,0,0])):m.type===`tableHead`?(s=!0,c=n):m.type===`tableRow`||m.type===`tableDelimiterRow`?(c=n,a[1]===0?o[1]!==0&&(d=Jd(f,t,o,i,n,d)):(o[0]=o[1],d=Jd(f,t,a,i,n,d)),i=0):i&&(m.type===`data`||m.type===`tableDelimiterMarker`||m.type===`tableDelimiterFiller`)&&(o[3]=n)}for(c!==0&&Yd(f,t,c,l,u),f.consume(t.events),n=-1;++n<t.events.length;){let e=t.events[n];e[0]===`enter`&&e[1].type===`table`&&(e[1]._align=Wd(t.events,n))}return e}function Jd(e,t,n,r,i,a){let o=r===1?`tableHeader`:r===2?`tableDelimiter`:`tableData`;n[0]!==0&&(a.end=Object.assign({},Xd(t.events,n[0])),e.add(n[0],0,[[`exit`,a,t]]));let s=Xd(t.events,n[1]);if(a={type:o,start:Object.assign({},s),end:Object.assign({},s)},e.add(n[1],0,[[`enter`,a,t]]),n[2]!==0){let i=Xd(t.events,n[2]),a=Xd(t.events,n[3]),o={type:`tableContent`,start:Object.assign({},i),end:Object.assign({},a)};if(e.add(n[2],0,[[`enter`,o,t]]),r!==2){let r=t.events[n[2]],i=t.events[n[3]];if(r[1].end=Object.assign({},i[1].end),r[1].type=`chunkText`,r[1].contentType=`text`,n[3]>n[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[[`exit`,o,t]])}return i!==void 0&&(a.end=Object.assign({},Xd(t.events,i)),e.add(i,0,[[`exit`,a,t]]),a=void 0),a}function Yd(e,t,n,r,i){let a=[],o=Xd(t.events,n);i&&(i.end=Object.assign({},o),a.push([`exit`,i,t])),r.end=Object.assign({},o),a.push([`exit`,r,t]),e.add(n+1,0,a)}function Xd(e,t){let n=e[t],r=n[0]===`enter`?`start`:`end`;return n[1][r]}var Zd={name:`tasklistCheck`,tokenize:$d};function Qd(){return{text:{91:Zd}}}function $d(e,t,n){let r=this;return i;function i(t){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(t):(e.enter(`taskListCheck`),e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),a)}function a(t){return J(t)?(e.enter(`taskListCheckValueUnchecked`),e.consume(t),e.exit(`taskListCheckValueUnchecked`),o):t===88||t===120?(e.enter(`taskListCheckValueChecked`),e.consume(t),e.exit(`taskListCheckValueChecked`),o):n(t)}function o(t){return t===93?(e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),e.exit(`taskListCheck`),s):n(t)}function s(r){return q(r)?t(r):Y(r)?e.check({tokenize:ef},t,n)(r):n(r)}}function ef(e,t,n){return X(e,r,`whitespace`);function r(e){return e===null?n(e):t(e)}}function tf(e){return Oi([_d(),Nd(),Vd(e),Gd(),Qd()])}var nf={};function rf(e){let t=this,n=e||nf,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(tf(n)),a.push(od()),o.push(sd(n))}var af=[rf],of=[];function sf(e=``){return/(^|\s)language-mermaid(\s|$)/.test(e)}var cf=/\\n/g,lf=/([\[({])([^\])}]*<br\/>[^\])}]*)([\])}])/g;function uf(e){return String(e??``).replace(cf,`<br/>`).replace(lf,(e,t,n,r)=>{let i=n.trim();return i.startsWith(`"`)||i.startsWith(`'`)?e:`${t}"${n}"${r}`})}var df=/\$\$[\s\S]*?\$\$|\$[^\s$](?:[^$\n]*[^\s$])?\$|\\\(|\\\[/,ff=/```[\s\S]*?```|`[^`]*`/g;function pf(e){let t=String(e||``).replace(ff,``);return df.test(t)}async function mf(){let[e,t]=await Promise.all([y(()=>import(`./remark-math-XvZOjmDO.js`),[],import.meta.url),y(()=>import(`./rehype-katex-BfUIq5As.js`),[],import.meta.url),y(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url)]);return{remarkPlugins:[e.default],rehypePlugins:[t.default]}}var hf=null;function gf(){return hf||=y(async()=>{let{default:e}=await import(`./mermaid.core-DgZUD0sU.js`);return{default:e}},__vite__mapDeps([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]),import.meta.url).then(({default:e})=>{let t=typeof window<`u`&&window.matchMedia?.(`(prefers-color-scheme: dark)`).matches;return e.initialize({startOnLoad:!1,securityLevel:`strict`,theme:t?`dark`:`default`}),e}),hf}var _f=0;function vf(){return _f+=1,`mermaid-${_f}-${Math.random().toString(36).slice(2)}`}function yf({code:e}){let[t,n]=(0,U.useState)(``),[r,i]=(0,U.useState)(!1);return(0,U.useEffect)(()=>{let t=!0;return(async()=>{try{let{svg:r}=await(await gf()).render(vf(),uf(e));t&&n(r)}catch(e){console.warn(`[mermaid]`,e),t&&i(!0)}})(),()=>{t=!1}},[e]),r||!t?(0,W.jsx)(`pre`,{children:(0,W.jsx)(`code`,{className:`language-mermaid`,children:e})}):(0,W.jsx)(`div`,{className:`mermaid-diagram my-4 overflow-x-auto`,dangerouslySetInnerHTML:{__html:t}})}function bf({className:e,children:t,...n}){return sf(e)?(0,W.jsx)(yf,{code:String(t).replace(/\n$/,``)}):(0,W.jsx)(`code`,{className:e,...n,children:t})}function xf({children:e}){let t=Array.isArray(e)?e[0]:e;return t?.props?.className&&sf(t.props.className)?t:(0,W.jsx)(`pre`,{children:e})}function Sf({children:e,className:t=``}){let n=String(e||``),r=(0,U.useMemo)(()=>pf(n),[n]),[i,a]=(0,U.useState)(null);(0,U.useEffect)(()=>{if(!r){a(null);return}let e=!0;return mf().then(t=>e&&a(t)).catch(()=>{}),()=>{e=!1}},[r]);let o=(0,U.useMemo)(()=>[...af,...i?.remarkPlugins||[]],[i]),s=(0,U.useMemo)(()=>[...of,...i?.rehypePlugins||[]],[i]);return(0,W.jsx)(`div`,{className:`prose-lesson ${t}`,children:(0,W.jsx)(Qc,{remarkPlugins:o,rehypePlugins:s,components:{a:({node:e,...t})=>(0,W.jsx)(`a`,{...t,target:`_blank`,rel:`noopener noreferrer`}),code:bf,pre:xf},children:n})})}var Cf=`professor-studio:hint-levels`;function wf(){if(typeof localStorage>`u`)return{};try{let e=localStorage.getItem(Cf),t=e?JSON.parse(e):{};return t&&typeof t==`object`?t:{}}catch{return{}}}function Tf(e){if(typeof localStorage<`u`)try{localStorage.setItem(Cf,JSON.stringify(e))}catch{}}function Ef(e){let t=Math.round(Number(e));return Number.isFinite(t)?Math.min(Math.max(t,0),pt):0}function Df(e){return Math.min(Ef(e)+1,pt)}function Of(e){let t=Ef(e);return t>0?`Hint ${t} of ${pt}`:`Hint`}function kf(e){let t=Ef(e);return t>0?ft[t-1].kind:``}function Af(e){return Ef(wf()[e])}function jf(e,t){let n=Ef(t),r=wf();return r[e]=n,Tf(r),n}function Mf(e){return jf(e,Df(Af(e)))}function Nf(e){return jf(e,0)}function Pf(e){let[t,n]=(0,U.useState)(()=>Af(e)),[r,i]=(0,U.useState)(e);r!==e&&(i(e),n(Af(e)));let a=(0,U.useCallback)(()=>{let t=Mf(e);return n(t),t},[e]),o=(0,U.useCallback)(()=>{n(Nf(e))},[e]);return{level:t,label:Of(t),stage:kf(t),next:Df(t),advance:a,reset:o}}function Ff(e,t){if(!t)return``;let n=`tutor.mode.${t}`,r=e(n);return r===n?``:r}function If({message:e,streaming:t=!1}){let n=f(),r=e.role===`user`,i=Ff(n,e.mode);return(0,W.jsx)(`div`,{className:`flex ${r?`justify-end`:`justify-start`}`,children:(0,W.jsxs)(`div`,{className:`max-w-[85%] rounded-2xl px-3.5 py-2.5 text-sm leading-relaxed ${r?`rounded-br-sm bg-indigo-600 text-white`:`rounded-bl-sm border border-neutral-200 bg-white text-neutral-800 dark:border-neutral-800 dark:bg-neutral-900 dark:text-neutral-100`}`,children:[!r&&i&&(0,W.jsx)(`div`,{className:`mb-1`,children:(0,W.jsx)(D,{tone:`accent`,children:i})}),r?(0,W.jsx)(`p`,{className:`whitespace-pre-wrap break-words`,children:e.content}):(0,W.jsx)(Sf,{className:`text-sm`,children:e.content}),t&&(0,W.jsxs)(`span`,{className:`mt-1 inline-flex items-center gap-1.5 text-xs text-neutral-500`,children:[(0,W.jsx)(C,{label:n(`tutor.title`)}),(0,W.jsx)(`span`,{children:n(`tutor.thinking`)})]})]})})}function Lf({onAction:e,disabled:t=!1,hintLevel:n=0,pendingMode:r=null}){let i=f();return(0,W.jsx)(`div`,{className:`flex flex-wrap gap-2`,role:`group`,"aria-label":i(`tutor.quickAria`),children:yt.map(a=>{let o=r===a.id,s=a.id===`hint`&&n>0?` · ${Of(n)}`:``,c=a.id===`review`?i(`revision.tutor.reviewAction`):i(`tutor.mode.${a.id}`);return(0,W.jsxs)(T,{size:`sm`,variant:o?`primary`:`secondary`,disabled:t,"aria-pressed":o,onClick:()=>e(a.id),children:[c,s]},a.id)})})}function Rf(e){return _n(e?.content)?.surface??null}function zf({message:e,onRevise:t=null,reviseHint:n=null,title:r=null}){let i=typeof e?.content==`string`?e.content:``,a=_n(i);return a?(0,W.jsx)(Bn,{criteria:a.criteria,title:r,showRevise:!a.passing&&typeof t==`function`,onRevise:t,reviseHint:n}):(0,W.jsx)(`p`,{className:`whitespace-pre-wrap text-sm text-neutral-700 dark:text-neutral-300`,children:i})}function Bf(e){return`That review was not valid: ${e}. Reply with ONLY the corrected review JSON, same shape, no prose, no Markdown fences.`}async function Vf({provider:e,system:t,messages:n=[],signal:r,validate:i}={}){let o=n=>e.streamText({system:t,messages:n,signal:r,effort:`low`,maxTokens:ie.json}),s=e=>{let t=ne(e),n=!i||i(t);if(n!==!0)throw Error(typeof n==`string`?n:`Invalid review JSON`);return t},c=await o(n);try{return s(c)}catch(e){if(l(e))throw e;let t=await o([...n,{role:`assistant`,content:String(c).slice(0,4e3)},{role:`user`,content:Bf(e?.message||`invalid review JSON`)}]);try{return s(t)}catch(e){throw l(e)?e:a(`bad_json`,e?.message||`Model did not return a valid review`)}}}function Hf(e,t){return e(t===`quiz`?`revision.review.surface.quiz`:t===`workspace`?`revision.review.surface.workspace`:`revision.review.title`)}function Uf({message:e,onRevise:t=null}){let n=f();if(!e||e.role!==`assistant`||e.mode!==`review`)return(0,W.jsx)(If,{message:e});let r=Rf(e);if(!r)return(0,W.jsx)(`p`,{className:`text-sm text-neutral-500`,role:`note`,children:n(`revision.review.unreadable`)});let i=r===`tutor`;return(0,W.jsx)(zf,{message:e,title:i?n(`revision.review.criteria`):Hf(n,r),onRevise:i&&typeof t==`function`?()=>t(e.id):null,reviseHint:i?n(`revision.tutor.reviseHint`):null})}function Wf(e){switch(e.provider){case`anthropic`:return!!e.anthropic?.apiKey;case`openai`:return!!e.openai?.apiKey;case`ollama`:case`bridge`:return!0;default:return!1}}function Gf({lesson:e,course:t,capstone:n=!1,capstoneBrief:r=null}){let a=f(),[l]=i(),u=(0,U.useRef)(l);u.current=l;let d=Pf(e.id),m=(0,U.useRef)(d.level);m.current=d.level;let[_,v]=(0,U.useState)([]),y=(0,U.useRef)([]),[C,w]=(0,U.useState)(!1),[E,D]=(0,U.useState)(``),[O,ne]=(0,U.useState)(null),[A,j]=(0,U.useState)(!1),[M,N]=(0,U.useState)(null),[ae,oe]=(0,U.useState)(!1),P=(0,U.useRef)(``),se=(0,U.useRef)(null),ce=(0,U.useRef)(!0),ue=(0,U.useRef)(null),de=(0,U.useRef)(``),fe=(0,U.useRef)(null),F=(0,U.useRef)(()=>{}),pe=(0,U.useRef)(null),{text:me,status:I,error:L,start:he,stop:R}=le(),z=(0,U.useRef)(I);z.current=I;let B=I===`streaming`,V=(0,U.useCallback)(e=>{y.current=e,v(e)},[]);(0,U.useEffect)(()=>{let t=!0,n=()=>te(e.id).then(e=>{t&&V(e)}).finally(()=>{t&&w(!0)});w(!1),n();let r=S(e=>{(e.table===`chat_messages`||e.table===`*`)&&n()});return()=>{t=!1,r()}},[e.id,V]),(0,U.useEffect)(()=>{let t=!0;return b(e.id).then(e=>{t&&(P.current=e?.content_md||``)}).catch(()=>{t&&(P.current=``)}),()=>{t=!1}},[e.id]);let H=(0,U.useCallback)(async()=>{let e=fe.current,t=de.current;return fe.current=null,de.current=``,!e||!t.trim()?null:h(e.lessonId,{role:`assistant`,content:t,mode:e.mode})},[]);F.current=H,(0,U.useEffect)(()=>()=>F.current(),[]);let ge=(0,U.useCallback)(async({content:i,mode:a=null})=>{let o=String(i||``).trim();if(!o||z.current===`streaming`)return;let s=a===`hint`?d.advance():void 0,l=a===`check_answer`?jn(pe):null,f=await h(e.id,{role:`user`,content:o,mode:a,revisionOf:l}),m=[...y.current,f],g=null;if(!n&&a===`check_answer`&&t?.kind===`programming`)try{g=await Cr(e.id)}catch{g=null}let _=t?.language??u.current.language,v=async i=>{de.current=``,fe.current={lessonId:e.id,mode:a},D(``),ne(null),j(!1);try{await he(async({onText:o,signal:c})=>{let l=await x(u.current),{system:d,messages:f}=At({course:t,lesson:e,lessonContent:P.current,history:m,mode:a||void 0,hintLevel:s,language:_,learnerCode:g,capstone:n,capstoneBrief:r,strict:i});return l.streamText({system:d,messages:f,signal:c,maxTokens:ie.chat,onText:e=>{de.current+=e,o(e)}})})}catch{}let o=await H();return o&&V([...y.current.filter(e=>e.id!==o.id),o]),o};oe(!1);let b=await v(!1);!n&&!c(_)&&b&&!p(b.content,_).ok&&(oe(!0),await v(!0))},[h,V,n,r,t,d,e,H,he]),_e=(0,U.useCallback)(async()=>{if(z.current===`streaming`)return;let n=y.current;if(!n.some(e=>e?.role===`user`)){N(Error(a(`revision.tutor.reviewEmpty`)));return}N(null),j(!1);let r;try{r=await h(e.id,{role:`user`,content:a(`revision.tutor.reviewUserText`),mode:`review`})}catch(e){N(e);return}let i=[...n,r],o=Fn(n);try{await he(async({signal:n})=>{try{let a=await x(u.current),{system:s,messages:c}=Rt({course:t,lesson:e,lessonContent:P.current,history:i,rubric:o,language:t?.language??u.current.language}),l=Lt(await Vf({provider:a,system:s,messages:c,signal:n,validate:e=>It(e,{rubric:o})}),{rubric:o}),d=gn({surface:`tutor`,attemptTable:`chat_messages`,attemptId:r.id,criteria:l});return h(e.id,{role:`assistant`,content:JSON.stringify(d),mode:`review`})}catch(e){throw N(new s(`bad_json`,a(`revision.review.failed`),a(`revision.review.failedHint`))),e}})}catch{}},[h,t,e,he,a]),ve=(0,U.useCallback)(()=>{ge({content:E,mode:O})},[E,O,ge]),ye=(0,U.useCallback)(e=>{An(pe,Nn(e)),ne(`check_answer`),ue.current?.focus()},[]),be=(0,U.useCallback)(e=>{if(n)return;if(e===`review`){_e();return}if(e===`check_answer`){ne(`check_answer`),ue.current?.focus();return}let t=yt.find(t=>t.id===e);ge({content:t?.userText||``,mode:e})},[n,_e,ge]),xe=(0,U.useCallback)(async()=>{R(),await H()},[R,H]),Se=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),ve())},Ce=()=>{let e=se.current;e&&(ce.current=e.scrollHeight-e.scrollTop-e.clientHeight<80)};(0,U.useEffect)(()=>{let e=se.current;e&&ce.current&&(e.scrollTop=e.scrollHeight)},[_,me]);let we=!!me&&(I===`streaming`||fe.current!=null),Te=M||(A?null:L),Ee=Wf(l),De=E.trim().length>0&&!B,Oe=(0,U.useMemo)(()=>({id:`__draft`,role:`assistant`,content:me,mode:fe.current?.mode||null}),[me]),ke=(0,U.useMemo)(()=>_.filter(e=>e.role===`assistant`&&e.mode===`review`&&Rf(e)===`tutor`).map((e,t)=>({id:e.id,label:a(`revision.history.attempt`,{n:t+1}),criteria:_n(e.content)?.criteria??[]})),[_,a]);return(0,W.jsxs)(re,{className:`flex flex-col gap-3`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`h2`,{className:`font-semibold`,children:a(n?`tutor.capstoneTitle`:`tutor.title`)}),(0,W.jsx)(`p`,{className:`text-xs text-neutral-500`,children:n?a(`tutor.capstoneDesc`):a(`tutor.desc`,{title:e.title})})]}),B&&(0,W.jsx)(T,{variant:`secondary`,size:`sm`,onClick:xe,children:a(`tutor.stop`)})]}),!Ee&&!B&&(0,W.jsxs)(`p`,{className:`rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-800 dark:bg-amber-500/10 dark:text-amber-200`,children:[a(`tutor.noSource`),` `,(0,W.jsx)(g,{to:`/settings`,className:`font-medium underline`,children:a(`tutor.openSettings`)}),` `,a(`tutor.noSourceAfter`)]}),(0,W.jsxs)(`div`,{ref:se,onScroll:Ce,className:`flex max-h-[26rem] min-h-[10rem] flex-col gap-3 overflow-y-auto rounded-lg bg-neutral-50 p-3 dark:bg-neutral-950/40`,"aria-live":`polite`,children:[!C&&(0,W.jsx)(`p`,{className:`text-sm text-neutral-500`,children:a(`tutor.loadingHistory`)}),C&&_.length===0&&!we&&(0,W.jsx)(k,{title:a(n?`tutor.capstoneEmpty.title`:`tutor.empty.title`),description:a(n?`tutor.capstoneEmpty.description`:`tutor.empty.description`),className:`border-0 bg-transparent`}),_.map(e=>(0,W.jsx)(Uf,{message:e,onRevise:ye},e.id)),we&&(0,W.jsx)(If,{message:Oe,streaming:B})]}),Te&&(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(ee,{error:Te,onDismiss:()=>{j(!0),N(null)}}),M?(0,W.jsx)(T,{variant:`secondary`,size:`sm`,onClick:_e,children:a(`revision.review.retry`)}):null]}),ae&&!B&&(0,W.jsx)(`p`,{className:`rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-800 dark:bg-amber-500/10 dark:text-amber-200`,children:a(`tutor.languageNotice`,{language:o(t?.language??l.language)})}),n?(0,W.jsx)(`p`,{className:`rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-800 dark:bg-amber-500/10 dark:text-amber-200`,children:a(`tutor.capstoneNotice`)}):(0,W.jsx)(Lf,{onAction:be,disabled:B,hintLevel:d.level,pendingMode:O}),!n&&ke.length>0?(0,W.jsx)(Un,{attempts:ke,title:a(`revision.history.title`)}):null,(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(`label`,{htmlFor:`tutor-input-${e.id}`,className:`sr-only`,children:a(`tutor.ariaInput`)}),(0,W.jsx)(`textarea`,{id:`tutor-input-${e.id}`,ref:ue,rows:3,value:E,onChange:e=>D(e.target.value),onKeyDown:Se,placeholder:a(n?`tutor.capstonePlaceholder`:O===`check_answer`?`tutor.checkPlaceholder`:`tutor.placeholder`),className:`w-full resize-y rounded-lg border border-neutral-300 bg-white px-3 py-2 text-sm text-neutral-900 placeholder:text-neutral-400 focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100`}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,W.jsx)(`p`,{className:`text-xs text-neutral-500`,children:a(n?`tutor.capstoneFooter`:O===`check_answer`?`tutor.checkHint`:`tutor.guideHint`)}),(0,W.jsx)(`div`,{className:`flex gap-2`,children:B?(0,W.jsx)(T,{variant:`secondary`,size:`sm`,onClick:xe,children:a(`tutor.stop`)}):(0,W.jsx)(T,{size:`sm`,onClick:ve,disabled:!De,children:a(`tutor.send`)})})]})]})]})}export{$t as A,Xe as B,Pn as C,rn as D,fn as E,hn as F,Fe as G,Ve as H,X as I,fe as J,Ie as K,q as L,an as M,Yt as N,tn as O,Jt as P,et as R,On as S,Ut as T,ze as U,Ze as V,Le as W,In as _,vr as a,Mn as b,gr as c,Bn as d,An as f,vn as g,jn as h,br as i,nn as j,en as k,nr as l,gn as m,Sf as n,fr as o,bn as p,Me as q,xr as r,dr as s,Gf as t,Un as u,_n as v,Wt as w,Sn as x,Dn as y,$e as z};
@@ -1 +1 @@
1
- import{m as e,t}from"./mermaid-parser.core-BYwreSUy.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-BWF7jMDv.js";import"./chunk-DSNLSHJZ-CDk5EXjH.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-fv-iqTyC.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-DTO1oDmq.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
1
+ import{m as e,t}from"./mermaid-parser.core-Do1oxD1S.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-BWF7jMDv.js";import"./chunk-DSNLSHJZ-BaeQDl2i.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-lZdQWttk.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-DgZUD0sU.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};