openlearn-next 0.1.10 → 0.1.13
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/README.md +3 -3
- package/cli.mjs +1 -1
- package/dist/assets/{courseware-BD1ksVla.js → courseware-B9C3Q4mU.js} +1 -1
- package/dist/assets/index-BT8PF5ws.js +798 -0
- package/dist/assets/index-BWpypHJ7.css +1 -0
- package/dist/assets/{index.es-C4q5HQQu.js → index.es-BjVtMI7h.js} +1 -1
- package/dist/assets/purify.es-V6uLfjnH.js +3 -0
- package/dist/assets/{vendor-konva-DA6-nIw3.js → vendor-konva-BRP-lFzZ.js} +18 -18
- package/dist/assets/{vendor-pptx-mq6Wpied.js → vendor-pptx-w8e1eCEK.js} +1 -1
- package/dist/assets/{whiteboard-CcOx2g2x.js → whiteboard-D2HYZTvl.js} +23 -23
- package/dist/index.html +2 -2
- package/package.json +2 -2
- package/dist/assets/index-BCFaLj6T.css +0 -1
- package/dist/assets/index-BejAcbMi.js +0 -840
- package/dist/assets/purify.es-Csrj9YNg.js +0 -3
- package/dist/plugins/ext-ai-quiz-pro.zip +0 -0
- package/dist/plugins/ext-hello-world.zip +0 -0
- package/dist/plugins/ext-memo.zip +0 -0
- package/dist/plugins/ext-mindmap-assistant.zip +0 -0
- package/dist/plugins/ext-quiz-generator.zip +0 -0
- package/dist/plugins/ext-raffle-vote.zip +0 -0
- package/dist/plugins/ext-roll-call.zip +0 -0
- package/dist/server.cjs +0 -14361
package/README.md
CHANGED
|
@@ -40,8 +40,8 @@ OPENLEARN_DB_PATH=./my.db npx openlearn-next # 自定义数据库路径(默
|
|
|
40
40
|
# 安装依赖
|
|
41
41
|
npm install
|
|
42
42
|
|
|
43
|
-
#
|
|
44
|
-
echo "GEMINI_API_KEY=你的密钥" > .env
|
|
43
|
+
# 配置环境变量(可选:AI 功能通过管理后台「AI 提供商」配置,或设置 GEMINI_API_KEY 作为回退)
|
|
44
|
+
# echo "GEMINI_API_KEY=你的密钥" > .env
|
|
45
45
|
|
|
46
46
|
# 启动开发服务
|
|
47
47
|
./dev.sh
|
|
@@ -173,7 +173,7 @@ ext-exam.zip
|
|
|
173
173
|
|
|
174
174
|
| 变量 | 必需 | 说明 |
|
|
175
175
|
|------|:--:|------|
|
|
176
|
-
| `GEMINI_API_KEY` |
|
|
176
|
+
| `GEMINI_API_KEY` | — | 可选。AI 服务回退密钥;推荐在管理面板「AI 提供商管理」配置第三方 AI(OpenAI 兼容) |
|
|
177
177
|
| `PORT` | — | 服务端口,默认 9000 |
|
|
178
178
|
| `OPENLEARN_DB_PATH` | — | SQLite 数据库路径(npx 默认 ~/openlearn-next/data.db,本地开发默认项目目录) |
|
|
179
179
|
| `ENCRYPTION_KEY` | ✅ | 64 位 hex,AI Provider API Key 加密密钥(`deploy.sh` 自动生成) |
|
package/cli.mjs
CHANGED
|
@@ -23,7 +23,7 @@ Options:
|
|
|
23
23
|
|
|
24
24
|
Environment:
|
|
25
25
|
OPENLEARN_DB_PATH SQLite database path (default: ~/openlearn-next/data.db)
|
|
26
|
-
GEMINI_API_KEY
|
|
26
|
+
GEMINI_API_KEY Optional. Fallback AI key; AI features are configured via AI Providers in the admin dashboard
|
|
27
27
|
`);
|
|
28
28
|
process.exit(0);
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as m}from"./vendor-konva-
|
|
1
|
+
import{r as m}from"./vendor-konva-BRP-lFzZ.js";import{j as e,G as h,M as v,a as w,X as y}from"./whiteboard-D2HYZTvl.js";const j=(function(){const l=typeof document<"u"&&document.createElement("link").relList;return l&&l.supports&&l.supports("modulepreload")?"modulepreload":"preload"})(),E=function(n){return"/"+n},p={},N=function(l,c,f){let i=Promise.resolve();if(c&&c.length>0){let t=function(r){return Promise.all(r.map(a=>Promise.resolve(a).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),x=s?.nonce||s?.getAttribute("nonce");i=t(c.map(r=>{if(r=E(r),r in p)return;p[r]=!0;const a=r.endsWith(".css"),u=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${r}"]${u}`))return;const o=document.createElement("link");if(o.rel=a?"stylesheet":j,a||(o.as="script"),o.crossOrigin="",o.href=r,x&&o.setAttribute("nonce",x),document.head.appendChild(o),a)return new Promise((g,b)=>{o.addEventListener("load",g),o.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${r}`)))})}))}function d(t){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=t,window.dispatchEvent(s),!s.defaultPrevented)throw t}return i.then(t=>{for(const s of t||[])s.status==="rejected"&&d(s.reason);return l().catch(d)})},_=m.lazy(()=>N(()=>Promise.resolve().then(()=>F),void 0).then(n=>({default:n.InteractiveCoursewareViewer}))),P=Object.freeze(Object.defineProperty({__proto__:null,CoursewareViewer:_},Symbol.toStringTag,{value:"Module"}));function S({coursewareId:n,onClose:l}){const[c,f]=m.useState(!1),i=m.useRef(null);m.useEffect(()=>{const t=()=>{f(!!document.fullscreenElement&&document.fullscreenElement===i.current)};return document.addEventListener("fullscreenchange",t),()=>{document.removeEventListener("fullscreenchange",t)}},[]);const d=()=>{const t=i.current;t&&(document.fullscreenElement?document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen())};return n?e.jsxs("div",{ref:i,className:"flex flex-col h-full bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden relative",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-2 bg-gray-100 border-b border-gray-200 shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-2 select-none",children:[e.jsx(h,{size:16,className:"text-indigo-500"}),e.jsx("span",{className:"font-semibold text-sm text-gray-700",children:"Interactive Courseware"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:d,className:"p-1 hover:bg-gray-200 rounded-lg text-gray-500 transition-colors cursor-pointer",title:c?"退出全屏":"全屏播放",children:c?e.jsx(v,{size:16}):e.jsx(w,{size:16})}),l&&e.jsx("button",{onClick:l,className:"p-1 hover:bg-gray-200 rounded-lg text-gray-500 transition-colors cursor-pointer",children:e.jsx(y,{size:16})})]})]}),e.jsx("div",{className:"flex-1 relative bg-white",children:e.jsx("iframe",{src:`/api/courseware/${n}`,sandbox:"allow-scripts allow-downloads allow-forms",allowFullScreen:!0,className:"w-full h-full border-none",title:"Interactive Courseware"})})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-gray-400 bg-gray-50 rounded-xl border border-dashed border-gray-300",children:[e.jsx(h,{size:48,className:"mb-4 text-gray-300 opacity-50"}),e.jsx("h3",{className:"text-lg font-medium text-gray-700",children:"No Courseware Selected"}),e.jsx("p",{className:"mt-2 text-sm text-center",children:"Please select a courseware from the list to view it interactively."})]})}const F=Object.freeze(Object.defineProperty({__proto__:null,InteractiveCoursewareViewer:S},Symbol.toStringTag,{value:"Module"}));export{N as _,P as i};
|