openlearn-next 0.7.6 → 0.7.8

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 (75) hide show
  1. package/README.md +66 -150
  2. package/dist/assets/{AcademicYearFilter-DUUGpDKt.js → AcademicYearFilter-Dm3no4Nb.js} +1 -1
  3. package/dist/assets/ActivityWorkspaceWidget-BXS1IamH.js +1 -0
  4. package/dist/assets/{AdminDirectoryView-DL9zZi-_.js → AdminDirectoryView-479SfYyD.js} +2 -2
  5. package/dist/assets/{AssessmentCenter-B2JzXBGe.js → AssessmentCenter-CJ-pchOQ.js} +1 -1
  6. package/dist/assets/{AssignmentFilePreview-Bk751Blz.js → AssignmentFilePreview-wjnrKjsp.js} +1 -1
  7. package/dist/assets/{BatchPickerModal-9ekXDUUj.js → BatchPickerModal-JvoD-1pF.js} +1 -1
  8. package/dist/assets/{ClassesView-PCt8I3MU.js → ClassesView-CB8q2kW0.js} +12 -12
  9. package/dist/assets/ClassroomCountdownWidget-BqzBpAvi.js +2 -0
  10. package/dist/assets/{CloudDriveModal-Mp59sr-C.js → CloudDriveModal-DHxOnL4m.js} +1 -1
  11. package/dist/assets/ComputerLabView-BEDe7WiU.js +1 -0
  12. package/dist/assets/CourseManagement-BjxQC6sq.js +1 -0
  13. package/dist/assets/{CourseWizardModal-B7-e8otR.js → CourseWizardModal-D3UPFtT_.js} +2 -2
  14. package/dist/assets/{CoursewareHubPanel-DLjH-UzF.js → CoursewareHubPanel-CqJqcZGs.js} +1 -1
  15. package/dist/assets/{Dashboard-D3LXLQNC.js → Dashboard-C3BaEHIG.js} +2 -2
  16. package/dist/assets/{ExportWeightModal-vd7XgaJ0.js → ExportWeightModal-iF0pVevG.js} +1 -1
  17. package/dist/assets/{HelpTour-BLuiS8rr.js → HelpTour-6ChRqWnB.js} +1 -1
  18. package/dist/assets/{HelpView-C4BHoNqR.js → HelpView-D3iYhzBz.js} +2 -2
  19. package/dist/assets/ImportLessonsModal-BOwj7ezj.js +1 -0
  20. package/dist/assets/{ImportModal-H5s5MyZY.js → ImportModal-DAHGdI9h.js} +1 -1
  21. package/dist/assets/{InteractiveCoursewareViewer-D9GzG28E.js → InteractiveCoursewareViewer-DX9xnk6j.js} +1 -1
  22. package/dist/assets/InteractiveWhiteboard-41mi9keH.js +65 -0
  23. package/dist/assets/LazyCourseware-DKyUHXaE.js +2 -0
  24. package/dist/assets/LazyWhiteboard-fXS2P44c.js +2 -0
  25. package/dist/assets/LessonEditorView-Dx-hOKtt.js +1 -0
  26. package/dist/assets/LiveClassroomView-m0hKdcVK.js +61 -0
  27. package/dist/assets/NotificationDetailModal-C2tg_IoJ.js +1 -0
  28. package/dist/assets/PluginView-BPRUpCjV.js +77 -0
  29. package/dist/assets/{ProcessLogsModal-_BwkmJVw.js → ProcessLogsModal-CULHzXp7.js} +1 -1
  30. package/dist/assets/{QuizGeneratorModal-DiItok6z.js → QuizGeneratorModal-CYxngpW9.js} +1 -1
  31. package/dist/assets/StudentAssignmentEvalPanel-Dfe4IOs5.js +1 -0
  32. package/dist/assets/{StudentAssignmentView-UK_7_MF3.js → StudentAssignmentView-IfRo3yJk.js} +1 -1
  33. package/dist/assets/StudentLessonView-Dw2uxBhq.js +1 -0
  34. package/dist/assets/StudentView-DVYUSrVU.js +2 -0
  35. package/dist/assets/{SystemResourceLibraryModal-dEdNKbk2.js → SystemResourceLibraryModal-BhbpfIBt.js} +1 -1
  36. package/dist/assets/TeacherView-CZjIejet.js +2 -0
  37. package/dist/assets/{TimetableView-AkReskNG.js → TimetableView-CupOIfEy.js} +1 -1
  38. package/dist/assets/{UTIF-4E-wdh3X.js → UTIF-BtQhea94.js} +1 -1
  39. package/dist/assets/index-BDFyco9S.css +1 -0
  40. package/dist/assets/index-BiHQqzdm.js +131 -0
  41. package/dist/assets/{index.es-WXdI0L-F.js → index.es-CijVATXs.js} +1 -1
  42. package/dist/assets/{pluginParsers-k90WUDrU.js → pluginParsers-C9W6GBVx.js} +1 -1
  43. package/dist/assets/{student-workspace-BDw1i4Vl.js → student-workspace-CsbA8Cs4.js} +1 -1
  44. package/dist/assets/{vendor-charts-SrpBsvM3.js → vendor-charts-skggaP9D.js} +1 -1
  45. package/dist/assets/{vendor-icons-hc6MjYFv.js → vendor-icons-DaYNfRAc.js} +2 -2
  46. package/dist/assets/{vendor-konva-Dne0Z-WC.js → vendor-konva-BOuJWFuE.js} +1 -1
  47. package/dist/assets/{vendor-pdf-By0fofA0.js → vendor-pdf-DVWGghIL.js} +3 -3
  48. package/dist/assets/{vendor-pptx-EjNUtdws.js → vendor-pptx-BqU7v5zS.js} +5 -5
  49. package/dist/assets/{vendor-react-Kv_JATwr.js → vendor-react-DHoBZpn2.js} +2 -2
  50. package/dist/assets/{vendor-utils-aM7aYvPP.js → vendor-utils-BxOuk3id.js} +1 -1
  51. package/dist/env-validation.cjs +7 -1
  52. package/dist/index.html +6 -6
  53. package/dist/server.cjs +343 -37
  54. package/migrations/044_students_gender.sql +8 -0
  55. package/migrations/README.md +1 -0
  56. package/migrations/schema-golden.json +3 -2
  57. package/package.json +2 -2
  58. package/dist/assets/ActivityWorkspaceWidget-0DUqiqFK.js +0 -1
  59. package/dist/assets/ClassroomCountdownWidget-HxelcHUp.js +0 -2
  60. package/dist/assets/ComputerLabView-FStILvFC.js +0 -1
  61. package/dist/assets/CourseManagement-BQw2idgZ.js +0 -1
  62. package/dist/assets/ImportLessonsModal-Y6uIIemO.js +0 -1
  63. package/dist/assets/InteractiveWhiteboard-DswIV-ES.js +0 -65
  64. package/dist/assets/LazyCourseware-BEoTTg5h.js +0 -2
  65. package/dist/assets/LazyWhiteboard-CMBBxnFX.js +0 -2
  66. package/dist/assets/LessonEditorView-BgJtG8Ks.js +0 -1
  67. package/dist/assets/LiveClassroomView-Czwt5WW-.js +0 -61
  68. package/dist/assets/NotificationDetailModal-D42vEs3S.js +0 -1
  69. package/dist/assets/PluginView-BcOWIjLu.js +0 -77
  70. package/dist/assets/StudentAssignmentEvalPanel-DHoZc3g0.js +0 -1
  71. package/dist/assets/StudentLessonView-C11Qkdi_.js +0 -1
  72. package/dist/assets/StudentView-j0hx3IOi.js +0 -2
  73. package/dist/assets/TeacherView-COZw2tFl.js +0 -2
  74. package/dist/assets/index-DN3E-Fmw.js +0 -131
  75. package/dist/assets/index-DPky2leG.css +0 -1
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Dashboard-D3LXLQNC.js","assets/vendor-react-Kv_JATwr.js","assets/vendor-utils-aM7aYvPP.js","assets/index-DN3E-Fmw.js","assets/vendor-icons-hc6MjYFv.js","assets/vendor-motion-BFAPOs-b.js","assets/ClassroomCountdownWidget-HxelcHUp.js","assets/index-DPky2leG.css","assets/LessonEditorView-BgJtG8Ks.js","assets/LazyWhiteboard-CMBBxnFX.js","assets/timeline-duration-BgdJCSrW.js","assets/LiveClassroomView-Czwt5WW-.js","assets/teaching-modes-client-BeVaDdJ-.js","assets/PluginView-BcOWIjLu.js","assets/pluginParsers-k90WUDrU.js","assets/vendor-pptx-DIWdXF1L.css","assets/CourseManagement-BQw2idgZ.js","assets/ClassesView-PCt8I3MU.js","assets/AcademicYearFilter-DUUGpDKt.js","assets/TimetableView-AkReskNG.js","assets/AdminDirectoryView-DL9zZi-_.js","assets/ComputerLabView-FStILvFC.js","assets/HelpView-C4BHoNqR.js","assets/AssessmentCenter-B2JzXBGe.js"])))=>i.map(i=>d[i]);
2
- import{_ as x}from"./vendor-pdf-By0fofA0.js";import{r as d,j as e,R as y}from"./vendor-react-Kv_JATwr.js";import{c as E,d as j,e as v,r as C,f as N,E as V,t as I,o as k,P as A,D as L}from"./index-DN3E-Fmw.js";import{aV as D,aT as $,$ as O,a6 as R,E as S,P as M,c as G}from"./vendor-icons-hc6MjYFv.js";import"./vendor-utils-aM7aYvPP.js";import"./vendor-motion-BFAPOs-b.js";import"./vendor-charts-SrpBsvM3.js";function H(t){return t==="en"?"en":"zh"}const w="openlearn_nav_collapsed_groups",B=t=>{if(t.status==="cancelled"||t.status==="holiday")return!1;if(!t.time_slot)return!0;try{const a=t.time_slot.split("-");if(a.length<2)return!0;const s=a[1].trim(),[r,m]=s.split(":").map(Number),o=new Date,i=o.getHours(),p=o.getMinutes();return!(i>r||i===r&&p>=m)}catch{return!0}};function F(t={}){const a=E(),s=t.mainNavCollapsed??a?.mainNavCollapsed??!1,r=t.setMainNavCollapsed??a?.setMainNavCollapsed??(()=>{}),m=t.teacherTab??a?.teacherTab??"dashboard",o=t.setTeacherTab??a?.setTeacherTab??(()=>{}),i=t.lang??a?.lang??"zh",p=t.session!==void 0?t.session:a?.session??null,u=t.todaySchedules??a?.todaySchedules??[],l=j(n=>n.extensionPoints).get("teacher.tab")||[];v(n=>n.siteInfo);const[g,_]=d.useState(()=>{try{const n=localStorage.getItem(w);return n?JSON.parse(n):{}}catch{return{}}}),b=n=>{_(h=>{const c={...h,[n]:!h[n]};try{localStorage.setItem(w,JSON.stringify(c))}catch{}return c})},z=d.useMemo(()=>C(p?.subRole==="administrator"?"administrator":"teacher",i==="en"?"en":"zh"),[p?.subRole,i]),P=n=>z.filter(h=>h.group===n);return e.jsxs("div",{id:"navigation_sidebar",className:`${s?"w-16":"w-44 md:w-44"} shrink-0 bg-surface border-r border-theme text-main flex flex-col transition-all duration-300`,children:[e.jsxs("div",{className:`p-2 flex border-b border-theme-subtle ${s?"justify-center":"justify-between items-center px-3"} min-h-[48px] shrink-0`,children:[!s&&e.jsx("span",{className:"inline text-xs font-black tracking-widest text-muted uppercase select-none",children:i==="zh"?"系统导航":"NAVIGATION"}),e.jsx("button",{onClick:()=>r(!s),className:"p-1.5 rounded-lg hover:bg-surface-secondary text-muted hover:text-primary-theme transition-colors cursor-pointer flex items-center justify-center shrink-0",title:s?i==="zh"?"展开导航":"Expand Sidebar":i==="zh"?"折叠导航":"Collapse Sidebar",children:s?e.jsx(D,{size:18}):e.jsx($,{size:18})})]}),e.jsx("div",{className:`p-2 ${s?"md:p-2":"md:p-2.5"} flex flex-col gap-2 overflow-y-auto flex-1`,children:["teaching","system","extensions","support"].map(n=>{if(n==="extensions")return l.length===0?null:e.jsxs(y.Fragment,{children:[e.jsx(T,{label:N("extensions",i==="en"?"en":"zh"),groupKey:"extensions",mainNavCollapsed:s,isCollapsed:!!g.extensions,onToggle:()=>b("extensions"),lang:i}),(!g.extensions||s)&&e.jsx("div",{className:"flex flex-col gap-1",children:e.jsx(V,{slot:"teacher.tab",slotProps:{renderType:"button",mainNavCollapsed:s,teacherTab:m,setTeacherTab:o,lang:i}})})]},n);const h=P(n);return h.length===0?null:e.jsxs(y.Fragment,{children:[e.jsx(T,{label:N(n,i==="en"?"en":"zh"),groupKey:n,mainNavCollapsed:s,isCollapsed:!!g[n],onToggle:()=>b(n),lang:i}),(!g[n]||s)&&e.jsx("div",{className:"flex flex-col gap-1",children:h.map(c=>e.jsx(J,{icon:c.icon,label:c.label,tab:c.tab,highlight:c.highlight,isAdmin:c.administratorOnly,teacherTab:m,setTeacherTab:o,mainNavCollapsed:s,lang:i},c.id))})]},n)})}),(()=>{const n=u.filter(B),h=n.length;return s||u.length===0?null:e.jsxs("div",{className:"mt-auto p-2.5 m-2 bg-indigo-50/55 dark:bg-indigo-950/20 rounded-xl border border-indigo-100 dark:border-indigo-900/30 block select-none shadow-3xs",id:"today_schedule_sidebar_panel",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs font-bold text-indigo-700 mb-1",children:[e.jsx(O,{size:12,className:"text-indigo-600 animate-pulse shrink-0"}),e.jsx("span",{className:"truncate",children:i==="zh"?"本堂余课":"Classes Remaining"})]}),e.jsx("div",{className:"text-xs text-gray-500 mb-1.5 truncate",children:i==="zh"?`今天还有 ${h} 节课`:`${h} more classes left`}),n.length>0&&e.jsx("div",{className:"max-h-[130px] overflow-y-auto space-y-1 pr-0.5",children:n.map(c=>e.jsxs("div",{className:"text-xs p-1.5 bg-white rounded border border-indigo-100/60 shadow-3xs hover:border-indigo-200 transition-colors",children:[e.jsx("div",{className:"font-bold text-gray-750 truncate",title:c.lesson_title,children:c.lesson_title}),e.jsxs("div",{className:"text-xs text-gray-450 truncate flex justify-between items-center mt-0.5 gap-1",children:[e.jsx("span",{className:"font-medium text-slate-500 truncate max-w-[55px]",children:c.class_name}),e.jsx("span",{className:"font-mono text-indigo-700 font-semibold shrink-0",children:c.time_slot})]})]},c.id))})]})})()]})}function T({label:t,groupKey:a,mainNavCollapsed:s,isCollapsed:r,onToggle:m,lang:o}){return s?e.jsx("div",{className:"h-px bg-border-theme-subtle my-1 w-full opacity-60"}):e.jsxs("button",{type:"button",onClick:m,"aria-expanded":!r,"data-testid":`nav_group_${a}`,className:"w-full flex items-center justify-between px-2.5 py-1.5 rounded-lg bg-surface-secondary/40 hover:bg-surface-secondary/80 border-0 text-xs font-semibold text-muted hover:text-main cursor-pointer transition-all duration-150 select-none group mt-1.5",title:`${t} (${r?o==="zh"?"点击展开":"Click to expand":o==="zh"?"点击折叠":"Click to collapse"})`,children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsx("span",{className:"w-1 h-3 rounded-full bg-primary-theme/75 group-hover:bg-primary-theme transition-colors shrink-0"}),e.jsx("span",{className:"truncate tracking-wide text-xs",children:t})]}),e.jsx(R,{size:13,className:`text-muted/60 group-hover:text-main transition-transform duration-200 shrink-0 ${r?"-rotate-90":"rotate-0"}`})]})}function J({icon:t,label:a,tab:s,teacherTab:r,setTeacherTab:m,mainNavCollapsed:o,highlight:i,isAdmin:p,lang:u}){const f=r===s,l=H(u),g=I[l],_=l==="zh"?`在新标签页打开"${a}"`:`Open "${a}" in a new tab`;return e.jsxs("div",{className:`group relative flex items-center rounded-xl transition-all duration-150 ${f?"bg-primary-theme-light text-primary-theme font-bold border border-primary-theme/25 shadow-3xs":"border border-transparent text-muted hover:bg-surface-secondary hover:text-main"} ${o?"justify-center":""}`,title:a,children:[e.jsxs("button",{type:"button",onClick:()=>m(s),id:`nav_btn_${s}`,"aria-label":a,"aria-current":f?"page":void 0,className:`flex items-center gap-2.5 py-2 flex-1 min-w-0 text-sm font-medium focus:outline-none focus-visible:ring-1 focus-visible:ring-primary-theme/50 rounded-lg ${f?"font-bold":""} ${o?"justify-center px-2":"pl-2.5 pr-8"}`,children:[e.jsx(t,{size:18,className:`shrink-0 transition-colors ${f||i?"text-primary-theme":p?"text-indigo-600 dark:text-indigo-400":""}`}),e.jsx("span",{className:o?"hidden":"block truncate",children:a})]}),!o&&e.jsx("button",{type:"button",onClick:b=>{b.stopPropagation(),k(s)},id:`nav_btn_${s}_newtab`,"aria-label":_,title:g.openInNewTab,"data-testid":`nav_newtab_${s}`,className:"absolute right-1.5 p-1 rounded-md opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-black/10 dark:hover:bg-white/15 focus:outline-none focus-visible:ring-1 focus-visible:ring-primary-theme/50 transition-opacity text-current",children:e.jsx(S,{size:12,className:"shrink-0"})})]})}function U({component:t,lessonId:a,classId:s}){const r=t;return e.jsx(r,{renderType:"panel",lessonId:a,classId:s})}function W({activeNavPlugin:t}){const a=j(l=>l.extensionPoints),s=j(l=>l.pluginErrors),r=v(l=>l.lang),m=v(l=>l.selectedLesson),o=v(l=>l.liveClassSelectedClassId),i=a.get("teacher.tab")||[],p=t||(i.length>0?i[0].pluginId:null),u=i.find(l=>l.pluginId===p),f=u?s.get(u.pluginId):void 0;return e.jsx("div",{className:"flex-1 flex flex-col min-h-0",children:e.jsx("div",{className:"flex-1 overflow-auto",children:f?e.jsx(A,{pluginId:u.pluginId,message:f,lang:r==="en"?"en":"zh"}):u?.component?e.jsx(U,{component:u.component,lessonId:m,classId:o}):u&&typeof u.render=="function"?e.jsx(L,{ext:u,slot:"teacher.tab",slotProps:{renderType:"panel",lessonId:m,classId:o}}):e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsxs("div",{className:"text-center",children:[e.jsx(M,{size:48,className:"mx-auto text-gray-300 mb-3"}),e.jsx("p",{className:"text-sm text-subtle font-medium",children:r==="zh"?"此插件未提供页面组件":"This plugin has no page component"}),e.jsx("p",{className:"text-xs text-muted mt-1",children:r==="zh"?"插件已注册导航条目,但未提供对应的界面渲染逻辑。":"The plugin registered a navigation entry but did not provide a render component."})]})})})})}const Y=d.lazy(()=>x(()=>import("./Dashboard-D3LXLQNC.js"),__vite__mapDeps([0,1,2,3,4,5,6,7])).then(t=>({default:t.Dashboard}))),q=d.lazy(()=>x(()=>import("./LessonEditorView-BgJtG8Ks.js"),__vite__mapDeps([8,1,2,3,4,5,9,10,7])).then(t=>({default:t.LessonEditorView}))),Q=d.lazy(()=>x(()=>import("./LiveClassroomView-Czwt5WW-.js"),__vite__mapDeps([11,1,2,3,4,5,9,6,10,12,7])).then(t=>({default:t.LiveClassroomView}))),X=d.lazy(()=>x(()=>import("./PluginView-BcOWIjLu.js"),__vite__mapDeps([13,1,2,4,3,5,14,15,7])).then(t=>({default:t.PluginView}))),Z=d.lazy(()=>x(()=>import("./CourseManagement-BQw2idgZ.js"),__vite__mapDeps([16,1,2,3,4,5,7])).then(t=>({default:t.CourseManagement}))),K=d.lazy(()=>x(()=>import("./ClassesView-PCt8I3MU.js"),__vite__mapDeps([17,1,2,3,4,5,14,18,7])).then(t=>({default:t.ClassesView}))),ee=d.lazy(()=>x(()=>import("./TimetableView-AkReskNG.js"),__vite__mapDeps([19,1,2,3,4,5,18,12,7])).then(t=>({default:t.TimetableView}))),te=d.lazy(()=>x(()=>import("./AdminDirectoryView-DL9zZi-_.js"),__vite__mapDeps([20,1,2,4,3,5,7])).then(t=>({default:t.AdminDirectoryView}))),se=d.lazy(()=>x(()=>import("./ComputerLabView-FStILvFC.js"),__vite__mapDeps([21,1,2,3,4,5,7])).then(t=>({default:t.ComputerLabView}))),ne=d.lazy(()=>x(()=>import("./HelpView-C4BHoNqR.js"),__vite__mapDeps([22,1,2,3,4,5,7])).then(t=>({default:t.HelpView}))),ae=d.lazy(()=>x(()=>import("./AssessmentCenter-B2JzXBGe.js"),__vite__mapDeps([23,1,2,3,4,5,7])).then(t=>({default:t.AssessmentCenter})));function me(t={}){const a=E(),s=t.teacherTab??a?.teacherTab??"dashboard";return e.jsxs("div",{className:"flex-1 overflow-hidden flex bg-gray-50",children:[e.jsx(F,{}),e.jsxs("div",{className:"flex-1 p-6 overflow-hidden flex gap-6 relative",children:[["dashboard","lesson_editor","live_class","plugins","courses","classes","timetable","admin_directory","help","computer_labs","assessments"].includes(s)?null:e.jsx(W,{activeNavPlugin:s.includes("/")?s.split("/")[0]:null}),e.jsx(d.Suspense,{fallback:e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center min-h-[400px] text-slate-400 gap-3",children:[e.jsx(G,{className:"w-8 h-8 animate-spin text-indigo-500"}),e.jsx("span",{className:"text-sm font-medium",children:"加载视图中..."})]}),children:s==="dashboard"?e.jsx(Y,{}):s==="lesson_editor"?e.jsx(q,{}):s==="live_class"?e.jsx("div",{className:"flex-grow flex-1 flex flex-col min-h-0 min-w-0",children:e.jsx(Q,{})}):s==="plugins"?e.jsx(X,{}):s==="courses"?e.jsx(Z,{}):s==="classes"?e.jsx(K,{}):s==="timetable"?e.jsx(ee,{}):s==="admin_directory"?e.jsx(te,{}):s==="computer_labs"?e.jsx(se,{}):s==="assessments"?e.jsx(ae,{}):s==="help"?e.jsx(ne,{}):null})]})]})}export{me as TeacherView};