openlearn-next 0.3.18 → 0.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{AdminDirectoryView-BtdFA-PR.js → AdminDirectoryView-CGo33RNh.js} +1 -1
- package/dist/assets/{BatchPickerModal-BQ_vsb5h.js → BatchPickerModal-MnNnNwFT.js} +1 -1
- package/dist/assets/{ClassesView-D_m_99Wk.js → ClassesView-CpblTKWg.js} +1 -1
- package/dist/assets/{CloudDriveModal-BHWCchwE.js → CloudDriveModal-BMjXCoju.js} +1 -1
- package/dist/assets/{ComputerLabView-n5hzKtEx.js → ComputerLabView-DGha_J8B.js} +1 -1
- package/dist/assets/CourseManagement-BqlboC1S.js +1 -0
- package/dist/assets/{CourseWizardModal-1F_Ksxgf.js → CourseWizardModal-DO1n4T2T.js} +1 -1
- package/dist/assets/{CoursewareHubPanel-B0JwbcQz.js → CoursewareHubPanel-CEK_QEc5.js} +1 -1
- package/dist/assets/{Dashboard-CgJNFUha.js → Dashboard-CfgOPb6z.js} +1 -1
- package/dist/assets/{ExportWeightModal-B2wHglNt.js → ExportWeightModal-d9A2R6Ur.js} +1 -1
- package/dist/assets/{HelpTour-C3G0EsYT.js → HelpTour-Dlc1vvy3.js} +1 -1
- package/dist/assets/{HelpView-Bgxlwpn_.js → HelpView-bHc3tQPD.js} +1 -1
- package/dist/assets/{ImportLessonsModal-xjfRYYa0.js → ImportLessonsModal-C25NubUA.js} +1 -1
- package/dist/assets/{ImportModal-ChLAX_xg.js → ImportModal-B2acbUT8.js} +1 -1
- package/dist/assets/{InteractiveCoursewareViewer-pi7sr3lt.js → InteractiveCoursewareViewer-BcXVoPUb.js} +1 -1
- package/dist/assets/{InteractiveWhiteboard-CsKeinZt.js → InteractiveWhiteboard-BxvOZE3l.js} +1 -1
- package/dist/assets/{LazyCourseware-Bw86DSzq.js → LazyCourseware-D3_YrYGR.js} +1 -1
- package/dist/assets/{LazyWhiteboard-XI8iSIjM.js → LazyWhiteboard-CFPDpdYV.js} +1 -1
- package/dist/assets/{LessonEditorView-3TnocL3v.js → LessonEditorView-CYHcC9EA.js} +1 -1
- package/dist/assets/{LiveClassroomView-CQGaFkzD.js → LiveClassroomView-BSPW9gVe.js} +1 -1
- package/dist/assets/{NotificationDetailModal-CI4IfD2v.js → NotificationDetailModal-D4w-m1D-.js} +1 -1
- package/dist/assets/{PluginView-LokCtvB8.js → PluginView-DogON4Dd.js} +1 -1
- package/dist/assets/{ProcessLogsModal-uJqQQFyw.js → ProcessLogsModal-MtK-Pe4R.js} +1 -1
- package/dist/assets/{QuizGeneratorModal-Bul00fIH.js → QuizGeneratorModal-bCASRfsi.js} +1 -1
- package/dist/assets/{StudentAssignmentView-CaOXzBkt.js → StudentAssignmentView-B0b4spYC.js} +1 -1
- package/dist/assets/{StudentLessonView-6l-A6scB.js → StudentLessonView-SLcpNqtY.js} +1 -1
- package/dist/assets/{StudentPreviewModal-CnWC2qso.js → StudentPreviewModal-nO5C3nq5.js} +1 -1
- package/dist/assets/{StudentView-BtGPu4nl.js → StudentView-BtleJCxa.js} +1 -1
- package/dist/assets/{SystemResourceLibraryModal-CiRD12Rw.js → SystemResourceLibraryModal-D00BK5Xh.js} +1 -1
- package/dist/assets/{TeacherView-_iKPvpXI.js → TeacherView-BP04D9dn.js} +1 -1
- package/dist/assets/{TimetableView-B0yL3omc.js → TimetableView-Do_LWpV2.js} +4 -4
- package/dist/assets/{index-AdOtUso0.js → index-hTc1h9s2.js} +4 -4
- package/dist/assets/{vendor-icons-BHXru9a4.js → vendor-icons-B2DRJfZU.js} +1 -1
- package/dist/index.html +1 -1
- package/dist/server.cjs +369 -231
- package/package.json +17 -17
- package/dist/assets/CourseManagement-DamuhaYN.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openlearn-next",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.19",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A plugin-driven Educational OS / LMS platform with AI agent teaching assistant",
|
|
6
6
|
"keywords": [
|
|
@@ -43,8 +43,22 @@
|
|
|
43
43
|
"node": ">=20.0.0",
|
|
44
44
|
"pnpm": ">=9.0.0"
|
|
45
45
|
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"dev": "npx tsx --no-cache server.ts",
|
|
48
|
+
"build": "vite build && node scripts/build-plugins.mjs && esbuild server.ts --bundle --platform=node --format=cjs --packages=external --sourcemap --outfile=dist/server.cjs",
|
|
49
|
+
"start": "node dist/server.cjs",
|
|
50
|
+
"preview": "vite preview",
|
|
51
|
+
"clean": "rm -rf dist server.js",
|
|
52
|
+
"lint": "tsc --noEmit",
|
|
53
|
+
"lint:eslint": "eslint . --ext .ts,.tsx --ignore-pattern dist --ignore-pattern node_modules",
|
|
54
|
+
"format": "prettier --write .",
|
|
55
|
+
"test": "vitest run",
|
|
56
|
+
"db:backup": "npx tsx scripts/backup-db.ts",
|
|
57
|
+
"db:reset": "rm -f packages/core/db/educational_os.db* && echo \"✓ Database deleted. Run pnpm dev to regenerate.\""
|
|
58
|
+
},
|
|
46
59
|
"dependencies": {
|
|
47
60
|
"@google/genai": "^2.4.0",
|
|
61
|
+
"@openlearn/plugin-sdk": "^3.6.1",
|
|
48
62
|
"@types/reveal.js": "^5.2.2",
|
|
49
63
|
"bcryptjs": "^3.0.3",
|
|
50
64
|
"better-sqlite3": "^12.11.1",
|
|
@@ -77,8 +91,7 @@
|
|
|
77
91
|
"xlsx": "^0.18.5",
|
|
78
92
|
"xss": "^1.0.15",
|
|
79
93
|
"zod": "^4.4.3",
|
|
80
|
-
"zustand": "^5.0.14"
|
|
81
|
-
"@openlearn/plugin-sdk": "3.7.0"
|
|
94
|
+
"zustand": "^5.0.14"
|
|
82
95
|
},
|
|
83
96
|
"devDependencies": {
|
|
84
97
|
"@eslint/js": "^10.0.1",
|
|
@@ -108,18 +121,5 @@
|
|
|
108
121
|
"tsx": "^4.21.0",
|
|
109
122
|
"typescript": "~5.8.2",
|
|
110
123
|
"vitest": "^4.1.9"
|
|
111
|
-
},
|
|
112
|
-
"scripts": {
|
|
113
|
-
"dev": "npx tsx --no-cache server.ts",
|
|
114
|
-
"build": "vite build && node scripts/build-plugins.mjs && esbuild server.ts --bundle --platform=node --format=cjs --packages=external --sourcemap --outfile=dist/server.cjs",
|
|
115
|
-
"start": "node dist/server.cjs",
|
|
116
|
-
"preview": "vite preview",
|
|
117
|
-
"clean": "rm -rf dist server.js",
|
|
118
|
-
"lint": "tsc --noEmit",
|
|
119
|
-
"lint:eslint": "eslint . --ext .ts,.tsx --ignore-pattern dist --ignore-pattern node_modules",
|
|
120
|
-
"format": "prettier --write .",
|
|
121
|
-
"test": "vitest run",
|
|
122
|
-
"db:backup": "npx tsx scripts/backup-db.ts",
|
|
123
|
-
"db:reset": "rm -f packages/core/db/educational_os.db* && echo \"✓ Database deleted. Run pnpm dev to regenerate.\""
|
|
124
124
|
}
|
|
125
|
-
}
|
|
125
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as l,j as e}from"./vendor-react-B0t7H3hh.js";import{a as q,M as G}from"./index-AdOtUso0.js";import{B as p,d as H,n as k,at as S,X as J,aN as K,U as _,aO as Y,E as Q,j as ee,T as D,_ as te,z as A}from"./vendor-icons-BHXru9a4.js";import"./vendor-utils-m0Urvtws.js";import"./vendor-pdf-Bw0ZQZtM.js";import"./vendor-motion-DjY2czvL.js";import"./vendor-pptx-C5-U7ieS.js";import"./vendor-charts-U9fLlNC_.js";function ce({lang:t,session:M,lessons:d,lessonsSearchQuery:x,setLessonsSearchQuery:m,lessonsSortOrder:$,setLessonsSortOrder:E,filteredLessons:h,onOpenImportLessons:L,onOpenCourseWizard:y,onViewCourse:f,onDeleteCourse:T,onCopyCourse:O,filterEnrollment:j,setFilterEnrollment:F,filterHasContent:N,setFilterHasContent:I,filterThisMonth:v,setFilterThisMonth:R,copyingLessonId:U}){const B=q(s=>s.session),r=M||B,V=r?.username==="admin"||r?.userId==="usr_admin"||r?.role==="administrator"||r?.subRole==="administrator",[g,P]=l.useState(!1),[i,u]=l.useState(null),[a,o]=l.useState(null),[w,z]=l.useState(!1),[W,C]=l.useState(!1),Z=async s=>{u(s),o(null),C(!0);try{const c=await fetch(`/api/lessons/${s.id}/stats`);if(c.ok){const n=await c.json();o(n)}}catch{o({whiteboardCount:0,scheduleCount:0,enrollmentCount:0,assignmentCount:0})}finally{C(!1)}},X=async()=>{if(i){z(!0);try{await T(i.id),u(null),o(null)}finally{z(!1)}}};return e.jsxs("div",{className:"flex-1 flex flex-col gap-6 h-full overflow-y-auto",children:[e.jsxs("div",{className:"flex-1 bg-white border border-gray-200 rounded-xl shadow-sm flex flex-col min-h-0",children:[e.jsxs("div",{className:"p-4 border-b border-gray-100 flex items-center justify-between shrink-0",children:[e.jsxs("h3",{className:"font-medium text-gray-700 flex items-center gap-2",children:[e.jsx(p,{size:16,className:"text-gray-400"}),t==="zh"?"课程与教学环节管理 (SQLite)":"Courses & Lessons Management"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{id:"import-lessons-csv-btn",onClick:L,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs bg-indigo-50 hover:bg-indigo-100 text-indigo-700 border border-indigo-200 font-semibold rounded-lg shadow-3xs transition-all hover:shadow-xs hover:-translate-y-0.5 cursor-pointer",children:[e.jsx(H,{size:14}),t==="zh"?"批量导入课程 (CSV)":"Import Lessons (CSV)"]}),e.jsxs("button",{id:"add-course-wizard-btn",onClick:y,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs bg-indigo-600 hover:bg-indigo-700 text-white font-semibold rounded-lg shadow-sm transition-all hover:shadow-md hover:-translate-y-0.5 cursor-pointer",children:[e.jsx(k,{size:14}),t==="zh"?"手动添加课程 (向导)":"Add Course Wizard"]})]})]}),d.length>0&&e.jsxs("div",{className:"px-5 py-3.5 border-b border-gray-100 bg-gray-50/50 flex flex-col sm:flex-row items-center justify-between gap-3 shrink-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3 w-full sm:w-auto",children:[e.jsxs("div",{className:"relative w-full sm:w-64",children:[e.jsx("span",{className:"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none text-gray-400",children:e.jsx(S,{size:14})}),e.jsx("input",{type:"text",placeholder:"Search courses by title...",value:x,onChange:s=>m(s.target.value),className:"w-full pl-9 pr-8 py-1.5 text-xs bg-white border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 text-gray-800 shadow-sm"}),x&&e.jsx("button",{onClick:()=>m(""),className:"absolute inset-y-0 right-0 flex items-center pr-2.5 text-gray-400 hover:text-gray-600",children:e.jsx(J,{size:12,className:"bg-gray-100 hover:bg-gray-200 rounded-full p-0.5"})})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"text-xs font-bold text-gray-400 uppercase tracking-wider",children:t==="zh"?"排序方式:":"Sort by:"}),e.jsxs("select",{value:$,onChange:s=>E(s.target.value),className:"bg-white border border-gray-200 text-xs text-gray-755 font-bold px-2.5 py-1.5 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 shadow-sm",id:"courses-sort-select",children:[e.jsx("option",{value:"recent",children:t==="zh"?"最新创建":"Most Recent"}),e.jsx("option",{value:"alphabetical",children:t==="zh"?"按名称 (A-Z)":"Alphabetical (A-Z)"}),e.jsx("option",{value:"enrollment",children:t==="zh"?"学生选课人次":"Student Enrollment Count"})]})]})]}),e.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs("button",{onClick:()=>P(!g),className:`px-2 py-1 text-xs font-bold rounded-md border transition-all cursor-pointer ${g?"bg-indigo-600 text-white border-indigo-600 shadow-2xs":"bg-white text-gray-600 border-gray-200 hover:border-gray-300"}`,title:t==="zh"?"只看我创建的课程":"Only show courses created by me",children:[e.jsx(K,{size:11,className:"inline mr-0.5 -mt-0.5"}),t==="zh"?"我的备课":"My Courses"]}),e.jsxs("button",{onClick:()=>F(!j),className:`px-2 py-1 text-xs font-bold rounded-md border transition-all cursor-pointer ${j?"bg-emerald-50 text-emerald-700 border-emerald-200":"bg-white text-gray-500 border-gray-200 hover:border-gray-300"}`,children:[e.jsx(_,{size:11,className:"inline mr-0.5 -mt-0.5"}),t==="zh"?"有人选":"Enrolled"]}),e.jsxs("button",{onClick:()=>I(!N),className:`px-2 py-1 text-xs font-bold rounded-md border transition-all cursor-pointer ${N?"bg-indigo-50 text-indigo-700 border-indigo-200":"bg-white text-gray-500 border-gray-200 hover:border-gray-300"}`,children:[e.jsx(p,{size:11,className:"inline mr-0.5 -mt-0.5"}),t==="zh"?"有内容":"Has Content"]}),e.jsx("button",{onClick:()=>R(!v),className:`px-2 py-1 text-xs font-bold rounded-md border transition-all cursor-pointer ${v?"bg-amber-50 text-amber-700 border-amber-200":"bg-white text-gray-500 border-gray-200 hover:border-gray-300"}`,children:t==="zh"?"本月":"This Month"})]}),e.jsxs("div",{className:"text-xs font-semibold text-gray-500",children:["Found ",e.jsx("span",{className:"text-indigo-650 font-bold",children:h.length})," of"," ",e.jsx("span",{className:"text-gray-700 font-bold",children:d.length})," course",d.length===1?"":"s"]})]})]}),e.jsx("div",{className:"flex-1 overflow-y-auto p-4",children:d.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-gray-400 min-h-[300px]",children:[e.jsx(p,{size:48,className:"mb-4 opacity-30 text-indigo-500"}),e.jsx("h3",{className:"text-lg font-bold text-gray-800",children:t==="zh"?"暂无可用课程":"No Courses Available"}),e.jsx("p",{className:"mt-2 text-sm text-gray-500 text-center max-w-xs",children:t==="zh"?"系统中暂未部署任何课程。请通过下方按钮启动添加向导指南。":"There are no courses active in the system yet. Build your first curriculum!"}),e.jsxs("button",{id:"empty-add-course-btn",onClick:y,className:"mt-5 flex items-center gap-2 px-5 py-2.5 bg-indigo-600 hover:bg-indigo-700 text-white font-bold rounded-xl shadow-md transition-all cursor-pointer",children:[e.jsx(k,{size:16}),t==="zh"?"使用向导指南来创建新课程":"Create Course via Wizard"]})]}):h.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center h-full py-12 text-gray-450 text-center",children:[e.jsx(S,{size:44,className:"mb-3 opacity-30 text-gray-450"}),e.jsxs("h4",{className:"font-semibold text-gray-700 text-sm",children:['No Courses Match "',x,'"']}),e.jsx("p",{className:"text-xs text-gray-500 mt-1 max-w-xs",children:"Double-check the spelling or try searching for another curriculum keyword."}),e.jsx("button",{onClick:()=>m(""),className:"mt-3 text-xs bg-indigo-50 hover:bg-indigo-100 text-indigo-700 border border-indigo-200 font-semibold px-3 py-1.5 rounded-lg transition-colors",children:"Clear Search Filter"})]}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4",children:h.filter(s=>g?!s.creator_id||s.creator_id===r?.userId||s.creator_id===r?.username:!0).map(s=>{const c=U===s.id,n=!s.creator_id||s.creator_id===r?.userId||s.creator_id===r?.username,b=V||n;return e.jsxs("div",{className:`border border-gray-200 hover:border-indigo-300 rounded-xl p-4 flex flex-col bg-gray-50/50 hover:shadow-md transition-all ${c?"opacity-60 pointer-events-none":""}`,children:[e.jsxs("div",{className:"flex items-center justify-between mb-2 gap-2",children:[e.jsx("div",{className:"font-semibold text-gray-800 text-lg truncate cursor-pointer hover:text-indigo-600 transition-colors",title:s.title,onClick:()=>f(s.id),children:s.title}),e.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.creator_name?e.jsxs("span",{className:`text-xs font-medium px-1.5 py-0.5 rounded border flex items-center gap-0.5 ${n?"bg-indigo-50 text-indigo-700 border-indigo-200 font-semibold":"bg-slate-100 text-slate-600 border-slate-200"}`,title:t==="zh"?`创建教师: ${s.creator_name}`:`Created by: ${s.creator_name}`,children:[n?"👑 ":"👤 ",s.creator_name]}):null,e.jsxs("span",{className:"inline-flex items-center gap-1 bg-indigo-50 text-indigo-700 px-1.5 py-0.5 border border-indigo-100 rounded text-xs font-bold",children:[e.jsx(_,{size:10,className:"text-indigo-500"}),s.enrollment_count||0]})]})]}),e.jsx("div",{className:"text-sm text-gray-500 line-clamp-3 mb-4 flex-1",children:e.jsx(G,{children:s.content})}),e.jsxs("div",{className:"flex justify-between items-center mt-auto",children:[e.jsxs("div",{className:"text-xs text-gray-400",children:["ID: ",s.id.substring(0,8),"..."]}),e.jsxs("div",{className:"flex items-center gap-0.5",children:[e.jsx("button",{onClick:()=>f(s.id),className:"p-1.5 text-gray-400 hover:text-indigo-600 hover:bg-indigo-50 rounded transition-colors cursor-pointer",title:b?t==="zh"?"查看与编辑":"View & Edit":t==="zh"?"查看只读 (他人课程)":"View Read-Only",children:b?e.jsx(Y,{size:15}):e.jsx(Q,{size:15})}),e.jsx("button",{onClick:()=>O(s.id),className:"p-1.5 text-gray-400 hover:text-emerald-600 hover:bg-emerald-50 rounded transition-colors cursor-pointer",title:t==="zh"?"克隆为我的备课":"Clone Course",children:e.jsx(ee,{size:14})}),b?e.jsx("button",{onClick:()=>Z(s),className:"p-1.5 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded transition-colors cursor-pointer",title:t==="zh"?"删除课程":"Delete Course",children:e.jsx(D,{size:14})}):e.jsx("span",{className:"p-1.5 text-gray-300 cursor-not-allowed",title:t==="zh"?"仅创建教师或管理员可删除":"Only creator or admin can delete",children:e.jsx(D,{size:14})})]})]})]},s.id)})})})]}),i&&e.jsx("div",{className:"fixed inset-0 bg-black/40 backdrop-blur-[2px] flex items-center justify-center z-[9999] p-4",children:e.jsxs("div",{className:"bg-white rounded-xl shadow-2xl max-w-md w-full border border-gray-100 overflow-hidden",children:[e.jsxs("div",{className:"px-5 py-4 border-b border-gray-100 bg-red-50 flex items-center gap-2",children:[e.jsx(te,{size:18,className:"text-red-600"}),e.jsx("h3",{className:"font-bold text-red-800 text-sm",children:t==="zh"?"确认删除课程":"Confirm Course Deletion"})]}),e.jsxs("div",{className:"p-5 space-y-3",children:[e.jsx("p",{className:"text-sm text-gray-700",children:t==="zh"?e.jsxs(e.Fragment,{children:["确定要删除课程 ",e.jsx("span",{className:"font-bold text-red-600",children:i.title})," 吗?"]}):e.jsxs(e.Fragment,{children:["Are you sure you want to delete ",e.jsx("span",{className:"font-bold text-red-600",children:i.title}),"?"]})}),e.jsx("p",{className:"text-xs text-red-600 font-medium",children:t==="zh"?"此操作不可撤销,将删除课程的所有关联数据。":"This action is irreversible and will delete all associated data."}),W?e.jsxs("div",{className:"flex items-center gap-2 text-xs text-gray-500 py-2",children:[e.jsx(A,{size:14,className:"animate-spin"}),t==="zh"?"正在统计关联数据...":"Counting related data..."]}):a?e.jsxs("div",{className:"bg-gray-50 rounded-lg p-3 space-y-1.5 text-xs",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:t==="zh"?"白板元素":"Whiteboard Elements"}),e.jsx("span",{className:"font-bold text-gray-800",children:a.whiteboardCount})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:t==="zh"?"排课记录":"Schedules"}),e.jsx("span",{className:"font-bold text-gray-800",children:a.scheduleCount})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:t==="zh"?"选课学生":"Enrollments"}),e.jsx("span",{className:"font-bold text-gray-800",children:a.enrollmentCount})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-gray-600",children:t==="zh"?"作业任务":"Assignments"}),e.jsx("span",{className:"font-bold text-gray-800",children:a.assignmentCount})]})]}):null]}),e.jsxs("div",{className:"px-5 py-3 border-t border-gray-100 bg-gray-50 flex justify-end gap-2",children:[e.jsx("button",{onClick:()=>{u(null),o(null)},className:"px-4 py-2 text-xs font-medium text-gray-600 hover:bg-gray-100 border border-gray-200 rounded-lg transition-colors cursor-pointer",children:t==="zh"?"取消":"Cancel"}),e.jsxs("button",{onClick:X,disabled:w,className:"px-4 py-2 text-xs font-bold text-white bg-red-600 hover:bg-red-700 rounded-lg transition-colors cursor-pointer disabled:opacity-50 flex items-center gap-1.5",children:[w&&e.jsx(A,{size:12,className:"animate-spin"}),t==="zh"?"确认删除":"Confirm Delete"]})]})]})})]})}export{ce as CourseManagement};
|