@tom2012/cc-web 1.5.44 → 1.5.46

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 (35) hide show
  1. package/README.md +1 -1
  2. package/backend/dist/chat-process-manager.d.ts.map +1 -1
  3. package/backend/dist/chat-process-manager.js +10 -1
  4. package/backend/dist/chat-process-manager.js.map +1 -1
  5. package/backend/dist/config.d.ts +1 -2
  6. package/backend/dist/config.d.ts.map +1 -1
  7. package/backend/dist/config.js +0 -1
  8. package/backend/dist/config.js.map +1 -1
  9. package/backend/dist/index.d.ts.map +1 -1
  10. package/backend/dist/index.js +6 -90
  11. package/backend/dist/index.js.map +1 -1
  12. package/backend/dist/routes/projects.d.ts.map +1 -1
  13. package/backend/dist/routes/projects.js +0 -46
  14. package/backend/dist/routes/projects.js.map +1 -1
  15. package/backend/dist/routes/update.d.ts.map +1 -1
  16. package/backend/dist/routes/update.js +13 -27
  17. package/backend/dist/routes/update.js.map +1 -1
  18. package/backend/dist/types.d.ts +0 -2
  19. package/backend/dist/types.d.ts.map +1 -1
  20. package/frontend/dist/assets/ChatView-ySMn_koj.js +16 -0
  21. package/frontend/dist/assets/{GraphPreview-B1a0da7R.js → GraphPreview-v0jtW6Tw.js} +1 -1
  22. package/frontend/dist/assets/{OfficePreview-CjkLd1i7.js → OfficePreview-CLvGGnxx.js} +3 -3
  23. package/frontend/dist/assets/{ProjectPage-hof1YKWe.js → ProjectPage-CVpKNxtH.js} +54 -54
  24. package/frontend/dist/assets/{SettingsPage-CnUWUu-3.js → SettingsPage-D3tByBni.js} +3 -3
  25. package/frontend/dist/assets/{SkillHubPage-CMnjoU1a.js → SkillHubPage-CO6XM9yn.js} +2 -2
  26. package/frontend/dist/assets/{chevron-down-Dkv3pYkA.js → chevron-down-CnJC8KC6.js} +1 -1
  27. package/frontend/dist/assets/{index-ENoYwr63.js → index-D_ve2Fc7.js} +48 -53
  28. package/frontend/dist/assets/{index-0WSh5alt.js → index-fYM9LFrV.js} +1 -1
  29. package/frontend/dist/assets/{index-BWy75gf0.css → index-y_u3eOve.css} +1 -1
  30. package/frontend/dist/assets/{jszip.min-jEdfP_HB.js → jszip.min-DUCrEUV5.js} +1 -1
  31. package/frontend/dist/assets/{select-C3IR_c32.js → select-CD8mZ3xY.js} +1 -1
  32. package/frontend/dist/assets/{user-DFI3Dlfq.js → user-DW_9KN7x.js} +1 -1
  33. package/frontend/dist/index.html +2 -2
  34. package/package.json +1 -1
  35. package/frontend/dist/assets/ChatView-D6ueT069.js +0 -11
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const express_1 = require("express");
4
4
  const config_1 = require("../config");
5
5
  const terminal_manager_1 = require("../terminal-manager");
6
- const chat_process_manager_1 = require("../chat-process-manager");
7
6
  const router = (0, express_1.Router)();
8
7
  const MEMORY_SAVE_COMMAND = '请更新与本项目相关的全部记忆、工作计划、已完成工作、未完成工作和后台任务\n';
9
8
  // Idle = no PTY output for this many ms
@@ -16,11 +15,7 @@ const MAX_WAIT_MS = 120000; // 2 minutes max per project
16
15
  */
17
16
  router.get('/check-running', (_req, res) => {
18
17
  const projects = (0, config_1.getProjects)();
19
- const running = projects.filter((p) => {
20
- if (p.status !== 'running')
21
- return false;
22
- return terminal_manager_1.terminalManager.hasTerminal(p.id) || chat_process_manager_1.chatProcessManager.hasTerminal(p.id);
23
- });
18
+ const running = projects.filter((p) => p.status === 'running' && terminal_manager_1.terminalManager.hasTerminal(p.id));
24
19
  res.json({
25
20
  runningCount: running.length,
26
21
  projects: running.map((p) => ({ id: p.id, name: p.name, status: p.status })),
@@ -31,12 +26,11 @@ router.get('/check-running', (_req, res) => {
31
26
  * For each running project:
32
27
  * 1. Send memory-save command to Claude
33
28
  * 2. Wait until Claude goes idle (no PTY output for IDLE_THRESHOLD_MS)
34
- * 3. Stop the terminal
35
29
  * Returns per-project status.
36
30
  */
37
31
  router.post('/prepare', async (_req, res) => {
38
32
  const projects = (0, config_1.getProjects)();
39
- const running = projects.filter((p) => p.status === 'running' && (terminal_manager_1.terminalManager.hasTerminal(p.id) || chat_process_manager_1.chatProcessManager.hasTerminal(p.id)));
33
+ const running = projects.filter((p) => p.status === 'running' && terminal_manager_1.terminalManager.hasTerminal(p.id));
40
34
  if (running.length === 0) {
41
35
  res.json({ success: true, results: [], message: 'No running projects' });
42
36
  return;
@@ -49,29 +43,21 @@ router.post('/prepare', async (_req, res) => {
49
43
  status: 'command_sent',
50
44
  };
51
45
  try {
52
- if (project.mode === 'chat') {
53
- // Chat mode has no PTY — stop directly (no memory-save command needed)
54
- chat_process_manager_1.chatProcessManager.stop(project.id);
46
+ // 1. Send the memory-save command
47
+ terminal_manager_1.terminalManager.writeRaw(project.id, MEMORY_SAVE_COMMAND);
48
+ status.status = 'waiting_idle';
49
+ // 2. Wait for Claude to finish processing (go idle)
50
+ const idle = await waitForIdle(project.id, IDLE_THRESHOLD_MS, MAX_WAIT_MS);
51
+ if (!idle) {
55
52
  status.status = 'ready';
56
- status.message = 'Chat modestopped directly';
53
+ status.message = 'Timed out waiting for idle will resume after update';
57
54
  }
58
55
  else {
59
- // 1. Send the memory-save command
60
- terminal_manager_1.terminalManager.writeRaw(project.id, MEMORY_SAVE_COMMAND);
61
- status.status = 'waiting_idle';
62
- // 2. Wait for Claude to finish processing (go idle)
63
- const idle = await waitForIdle(project.id, IDLE_THRESHOLD_MS, MAX_WAIT_MS);
64
- if (!idle) {
65
- status.status = 'ready';
66
- status.message = 'Timed out waiting for idle — will resume after update';
67
- }
68
- else {
69
- status.status = 'ready';
70
- status.message = 'Memory saved — will resume after update';
71
- }
72
- // Do NOT stop terminals — they keep 'running' status so resumeAll()
73
- // can restart them with --continue after the server restarts.
56
+ status.status = 'ready';
57
+ status.message = 'Memory saved — will resume after update';
74
58
  }
59
+ // Do NOT stop terminals — they keep 'running' status so resumeAll()
60
+ // can restart them with --continue after the server restarts.
75
61
  }
76
62
  catch (err) {
77
63
  status.status = 'error';
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/routes/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/routes/update.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  export type CliTool = 'claude' | 'opencode' | 'codex' | 'qwen';
2
- export type ProjectMode = 'terminal' | 'chat';
3
2
  export interface ProjectShare {
4
3
  username: string;
5
4
  permission: 'view' | 'edit';
@@ -15,7 +14,6 @@ export interface Project {
15
14
  archived?: boolean;
16
15
  owner?: string;
17
16
  shares?: ProjectShare[];
18
- mode?: ProjectMode;
19
17
  }
20
18
  export interface Config {
21
19
  username: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,SAAS,GAAG,WAAW,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAGD,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,SAAS,GAAG,WAAW,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;CACzB;AAGD,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,16 @@
1
+ import{c as p,r as o,j as e,o as d,e as x,C as g,A as j}from"./index-D_ve2Fc7.js";import{M as k,r as b,B as w}from"./ProjectPage-CVpKNxtH.js";import"./select-CD8mZ3xY.js";import"./chevron-down-CnJC8KC6.js";import"./user-DW_9KN7x.js";/**
2
+ * @license lucide-react v0.309.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const v=p("FileOutput",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4",key:"702lig"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M2 15h10",key:"jfw4w8"}],["path",{d:"m5 12-3 3 3 3",key:"oke12k"}]]);/**
7
+ * @license lucide-react v0.309.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const N=p("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]]);/**
12
+ * @license lucide-react v0.309.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const M=p("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);function u({icon:s,label:n,content:r}){const[a,i]=o.useState(!1);return e.jsxs("div",{className:"border border-border rounded mt-1.5",children:[e.jsxs("button",{className:"flex items-center gap-1.5 w-full px-2.5 py-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors",onClick:()=>i(l=>!l),children:[e.jsx(g,{className:x("h-3 w-3 transition-transform",a&&"rotate-90")}),e.jsx(s,{className:"h-3 w-3"}),e.jsx("span",{className:"truncate",children:n})]}),e.jsx(j,{children:a&&e.jsx(d.pre,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.2,ease:"easeInOut"},className:"px-3 pb-2 text-xs text-muted-foreground whitespace-pre-wrap break-words max-h-40 overflow-auto",children:r})})]})}function C({blocks:s}){return e.jsx(e.Fragment,{children:s.map((n,r)=>n.type==="text"?e.jsx("div",{className:"prose dark:prose-invert prose-sm max-w-none",children:e.jsx(k,{remarkPlugins:[b],children:n.content})},r):n.type==="thinking"?e.jsx(u,{icon:w,label:"Thinking...",content:n.content},r):n.type==="tool_use"?e.jsx(u,{icon:M,label:n.content.split("(")[0],content:n.content},r):n.type==="tool_result"?e.jsx(u,{icon:v,label:"Result",content:n.content},r):null)})}function E({messages:s,onSend:n,readOnly:r}){const[a,i]=o.useState(""),l=o.useRef(null),c=o.useRef(null);o.useEffect(()=>{var t;(t=l.current)==null||t.scrollIntoView({behavior:"smooth"})},[s.length]);const h=()=>{const t=a.trim();t&&(n(t+"\r"),i(""),c.current&&(c.current.style.height="auto"))},m=t=>{t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),h())},f=t=>{t.style.height="auto",t.style.height=Math.min(t.scrollHeight,120)+"px"};return e.jsxs("div",{className:"flex flex-col h-full bg-background",children:[e.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-3 min-h-0",children:[s.length===0&&e.jsx("p",{className:"text-sm text-muted-foreground text-center py-8",children:"等待对话..."}),s.map((t,y)=>e.jsx(d.div,{initial:{opacity:0,y:10,x:t.role==="user"?12:-12},animate:{opacity:1,y:0,x:0},transition:{duration:.25,ease:"easeOut"},className:x("flex",t.role==="user"?"justify-end":"justify-start"),children:e.jsxs("div",{className:x("max-w-[85%] rounded-lg px-3 py-2 text-sm",t.role==="user"?"bg-blue-100 text-blue-900 dark:bg-blue-600 dark:text-white":"bg-muted"),children:[e.jsx(C,{blocks:t.blocks}),e.jsx("div",{className:"text-[10px] opacity-50 mt-1",children:new Date(t.timestamp).toLocaleTimeString()})]})},y)),e.jsx("div",{ref:l})]}),!r&&e.jsxs("div",{className:"border-t border-border p-3 flex gap-2 items-end flex-shrink-0",children:[e.jsx("textarea",{ref:c,value:a,onChange:t=>{i(t.target.value),f(t.target)},onKeyDown:m,placeholder:"输入消息...",rows:1,className:"flex-1 resize-none bg-muted rounded-md px-3 py-2 text-sm outline-none focus:ring-1 focus:ring-ring",style:{maxHeight:"120px"}}),e.jsx(d.button,{onClick:h,disabled:!a.trim(),whileTap:{scale:.93},className:"p-2 rounded-md bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors flex-shrink-0",children:e.jsx(N,{className:"h-4 w-4"})})]})]})}export{E as ChatView};
@@ -1,4 +1,4 @@
1
- import{c as je,r as C,d as De,j as y,K as q,l as he}from"./index-ENoYwr63.js";import{L as Ye,Z as Pe,a as Be}from"./ProjectPage-hof1YKWe.js";import"./select-C3IR_c32.js";import"./chevron-down-Dkv3pYkA.js";import"./user-DFI3Dlfq.js";/**
1
+ import{c as je,r as C,d as De,j as y,K as q,l as he}from"./index-D_ve2Fc7.js";import{L as Ye,Z as Pe,a as Be}from"./ProjectPage-CVpKNxtH.js";import"./select-CD8mZ3xY.js";import"./chevron-down-CnJC8KC6.js";import"./user-DW_9KN7x.js";/**
2
2
  * @license lucide-react v0.309.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-0WSh5alt.js","assets/index-ENoYwr63.js","assets/index-BWy75gf0.css","assets/jszip.min-jEdfP_HB.js"])))=>i.map(i=>d[i]);
2
- import{j as e,r as c,_ as m,b as y,h as S}from"./index-ENoYwr63.js";async function h(a){let l=S(a);const s=y();s&&(l+=`${l.includes("?")?"&":"?"}token=${encodeURIComponent(s)}`);const d=await fetch(l);if(!d.ok)throw new Error(`Failed to fetch file: ${d.status}`);return d.arrayBuffer()}function j({filePath:a,zoom:l}){const[s,d]=c.useState(""),[x,n]=c.useState(null),[u,i]=c.useState(!0);return c.useEffect(()=>{let t=!1;return i(!0),n(null),(async()=>{try{const r=await m(()=>import("./index-0WSh5alt.js").then(f=>f.i),__vite__mapDeps([0,1,2,3])),o=await h(a),p=await r.convertToHtml({arrayBuffer:o});t||d(p.value)}catch(r){t||n(r instanceof Error?r.message:"Failed to render docx")}finally{t||i(!1)}})(),()=>{t=!0}},[a]),u?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 Word 文档中..."}):x?e.jsx("p",{className:"text-sm text-destructive p-4",children:x}):e.jsx("div",{className:"p-6 prose dark:prose-invert max-w-none",style:{fontSize:`${12*l/100}px`},dangerouslySetInnerHTML:{__html:s}})}function _({filePath:a,zoom:l}){var o;const[s,d]=c.useState([]),[x,n]=c.useState(0),[u,i]=c.useState(null),[t,r]=c.useState(!0);return c.useEffect(()=>{let p=!1;return r(!0),i(null),(async()=>{try{const f=await m(()=>import("./xlsx-D_0l8YDs.js"),[]),v=await h(a),g=f.read(v,{type:"array"}),b=g.SheetNames.map(w=>({name:w,html:f.utils.sheet_to_html(g.Sheets[w],{editable:!1})}));p||(d(b),n(0))}catch(f){p||i(f instanceof Error?f.message:"Failed to render xlsx")}finally{p||r(!1)}})(),()=>{p=!0}},[a]),t?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 Excel 文件中..."}):u?e.jsx("p",{className:"text-sm text-destructive p-4",children:u}):s.length===0?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"空文件"}):e.jsxs("div",{className:"flex flex-col h-full",children:[s.length>1&&e.jsx("div",{className:"flex gap-0.5 px-3 py-1.5 border-b border-border bg-muted/30 flex-shrink-0 overflow-x-auto",children:s.map((p,f)=>e.jsx("button",{onClick:()=>n(f),className:`px-3 py-1 text-xs rounded-t transition-colors whitespace-nowrap ${f===x?"bg-background text-foreground border border-b-0 border-border":"text-muted-foreground hover:text-foreground"}`,children:p.name},f))}),e.jsx("div",{className:"flex-1 overflow-auto p-2 xlsx-preview",style:{fontSize:`${12*l/100}px`},dangerouslySetInnerHTML:{__html:((o=s[x])==null?void 0:o.html)??""}}),e.jsx("style",{children:`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-fYM9LFrV.js","assets/index-D_ve2Fc7.js","assets/index-y_u3eOve.css","assets/jszip.min-DUCrEUV5.js"])))=>i.map(i=>d[i]);
2
+ import{j as e,r as c,_ as m,b as y,h as S}from"./index-D_ve2Fc7.js";async function h(a){let l=S(a);const s=y();s&&(l+=`${l.includes("?")?"&":"?"}token=${encodeURIComponent(s)}`);const d=await fetch(l);if(!d.ok)throw new Error(`Failed to fetch file: ${d.status}`);return d.arrayBuffer()}function j({filePath:a,zoom:l}){const[s,d]=c.useState(""),[x,n]=c.useState(null),[u,i]=c.useState(!0);return c.useEffect(()=>{let t=!1;return i(!0),n(null),(async()=>{try{const r=await m(()=>import("./index-fYM9LFrV.js").then(f=>f.i),__vite__mapDeps([0,1,2,3])),o=await h(a),p=await r.convertToHtml({arrayBuffer:o});t||d(p.value)}catch(r){t||n(r instanceof Error?r.message:"Failed to render docx")}finally{t||i(!1)}})(),()=>{t=!0}},[a]),u?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 Word 文档中..."}):x?e.jsx("p",{className:"text-sm text-destructive p-4",children:x}):e.jsx("div",{className:"p-6 prose dark:prose-invert max-w-none",style:{fontSize:`${12*l/100}px`},dangerouslySetInnerHTML:{__html:s}})}function _({filePath:a,zoom:l}){var o;const[s,d]=c.useState([]),[x,n]=c.useState(0),[u,i]=c.useState(null),[t,r]=c.useState(!0);return c.useEffect(()=>{let p=!1;return r(!0),i(null),(async()=>{try{const f=await m(()=>import("./xlsx-D_0l8YDs.js"),[]),v=await h(a),g=f.read(v,{type:"array"}),b=g.SheetNames.map(w=>({name:w,html:f.utils.sheet_to_html(g.Sheets[w],{editable:!1})}));p||(d(b),n(0))}catch(f){p||i(f instanceof Error?f.message:"Failed to render xlsx")}finally{p||r(!1)}})(),()=>{p=!0}},[a]),t?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 Excel 文件中..."}):u?e.jsx("p",{className:"text-sm text-destructive p-4",children:u}):s.length===0?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"空文件"}):e.jsxs("div",{className:"flex flex-col h-full",children:[s.length>1&&e.jsx("div",{className:"flex gap-0.5 px-3 py-1.5 border-b border-border bg-muted/30 flex-shrink-0 overflow-x-auto",children:s.map((p,f)=>e.jsx("button",{onClick:()=>n(f),className:`px-3 py-1 text-xs rounded-t transition-colors whitespace-nowrap ${f===x?"bg-background text-foreground border border-b-0 border-border":"text-muted-foreground hover:text-foreground"}`,children:p.name},f))}),e.jsx("div",{className:"flex-1 overflow-auto p-2 xlsx-preview",style:{fontSize:`${12*l/100}px`},dangerouslySetInnerHTML:{__html:((o=s[x])==null?void 0:o.html)??""}}),e.jsx("style",{children:`
3
3
  .xlsx-preview table { border-collapse: collapse; width: auto; min-width: 100%; }
4
4
  .xlsx-preview td, .xlsx-preview th {
5
5
  border: 1px solid hsl(var(--border));
@@ -10,4 +10,4 @@ import{j as e,r as c,_ as m,b as y,h as S}from"./index-ENoYwr63.js";async functi
10
10
  }
11
11
  .xlsx-preview th { background: hsl(var(--muted)); font-weight: 600; }
12
12
  .xlsx-preview tr:hover td { background: hsl(var(--accent) / 0.3); }
13
- `})]})}async function E(a){const{default:l}=await m(async()=>{const{default:n}=await import("./jszip.min-jEdfP_HB.js").then(u=>u.j);return{default:n}},__vite__mapDeps([3,1,2])),s=await l.loadAsync(a),d=[],x=Object.keys(s.files).filter(n=>/^ppt\/slides\/slide\d+\.xml$/i.test(n)).sort((n,u)=>{var r,o;const i=parseInt(((r=n.match(/slide(\d+)/))==null?void 0:r[1])??"0"),t=parseInt(((o=u.match(/slide(\d+)/))==null?void 0:o[1])??"0");return i-t});for(let n=0;n<x.length;n++){const u=await s.file(x[n]).async("text"),i=[],t=/<a:t[^>]*>([\s\S]*?)<\/a:t>/g;let r;for(;(r=t.exec(u))!==null;){const o=r[1].replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').trim();o&&i.push(o)}d.push({index:n+1,texts:i})}return d}function N({filePath:a,zoom:l}){const[s,d]=c.useState([]),[x,n]=c.useState(null),[u,i]=c.useState(!0);return c.useEffect(()=>{let t=!1;return i(!0),n(null),(async()=>{try{const r=await h(a),o=await E(r);t||d(o)}catch(r){t||n(r instanceof Error?r.message:"Failed to render pptx")}finally{t||i(!1)}})(),()=>{t=!0}},[a]),u?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 PPT 文件中..."}):x?e.jsx("p",{className:"text-sm text-destructive p-4",children:x}):s.length===0?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"空文件"}):e.jsx("div",{className:"p-4 space-y-4",style:{fontSize:`${12*l/100}px`},children:s.map(t=>e.jsxs("div",{className:"border border-border rounded-lg p-5 bg-muted/20",children:[e.jsxs("div",{className:"text-xs text-muted-foreground mb-2 font-medium",children:["Slide ",t.index]}),t.texts.length>0?e.jsx("div",{className:"space-y-1.5",children:t.texts.map((r,o)=>e.jsx("p",{className:"text-foreground leading-relaxed",style:{fontSize:"inherit"},children:r},o))}):e.jsx("p",{className:"text-muted-foreground text-sm italic",children:"(无文本内容)"})]},t.index))})}const I=new Set(["docx","xlsx","xls","pptx"]);function L({filePath:a,ext:l,zoom:s}){return l==="docx"?e.jsx(j,{filePath:a,zoom:s}):l==="xlsx"||l==="xls"?e.jsx(_,{filePath:a,zoom:s}):l==="pptx"?e.jsx(N,{filePath:a,zoom:s}):null}export{I as OFFICE_EXTS,L as OfficePreview};
13
+ `})]})}async function E(a){const{default:l}=await m(async()=>{const{default:n}=await import("./jszip.min-DUCrEUV5.js").then(u=>u.j);return{default:n}},__vite__mapDeps([3,1,2])),s=await l.loadAsync(a),d=[],x=Object.keys(s.files).filter(n=>/^ppt\/slides\/slide\d+\.xml$/i.test(n)).sort((n,u)=>{var r,o;const i=parseInt(((r=n.match(/slide(\d+)/))==null?void 0:r[1])??"0"),t=parseInt(((o=u.match(/slide(\d+)/))==null?void 0:o[1])??"0");return i-t});for(let n=0;n<x.length;n++){const u=await s.file(x[n]).async("text"),i=[],t=/<a:t[^>]*>([\s\S]*?)<\/a:t>/g;let r;for(;(r=t.exec(u))!==null;){const o=r[1].replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').trim();o&&i.push(o)}d.push({index:n+1,texts:i})}return d}function N({filePath:a,zoom:l}){const[s,d]=c.useState([]),[x,n]=c.useState(null),[u,i]=c.useState(!0);return c.useEffect(()=>{let t=!1;return i(!0),n(null),(async()=>{try{const r=await h(a),o=await E(r);t||d(o)}catch(r){t||n(r instanceof Error?r.message:"Failed to render pptx")}finally{t||i(!1)}})(),()=>{t=!0}},[a]),u?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 PPT 文件中..."}):x?e.jsx("p",{className:"text-sm text-destructive p-4",children:x}):s.length===0?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"空文件"}):e.jsx("div",{className:"p-4 space-y-4",style:{fontSize:`${12*l/100}px`},children:s.map(t=>e.jsxs("div",{className:"border border-border rounded-lg p-5 bg-muted/20",children:[e.jsxs("div",{className:"text-xs text-muted-foreground mb-2 font-medium",children:["Slide ",t.index]}),t.texts.length>0?e.jsx("div",{className:"space-y-1.5",children:t.texts.map((r,o)=>e.jsx("p",{className:"text-foreground leading-relaxed",style:{fontSize:"inherit"},children:r},o))}):e.jsx("p",{className:"text-muted-foreground text-sm italic",children:"(无文本内容)"})]},t.index))})}const I=new Set(["docx","xlsx","xls","pptx"]);function L({filePath:a,ext:l,zoom:s}){return l==="docx"?e.jsx(j,{filePath:a,zoom:s}):l==="xlsx"||l==="xls"?e.jsx(_,{filePath:a,zoom:s}):l==="pptx"?e.jsx(N,{filePath:a,zoom:s}):null}export{I as OFFICE_EXTS,L as OfficePreview};