aitu-app 0.6.91 → 0.6.93
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/.DS_Store +0 -0
- package/README.md +3 -3
- package/assets/{CanvasAudioPlayer-DzDra0HN.js → CanvasAudioPlayer-DaNPbJyT.js} +2 -2
- package/assets/CanvasAudioPlayer-QLXKZ5KP.css +1 -0
- package/assets/ComicCreator-DDZpl9mw.css +1 -0
- package/assets/ComicCreator-DkeHdMnR.js +43 -0
- package/assets/DeferredAIInputBar-DNsuuP9k.css +1 -0
- package/assets/DeferredAIInputBar-lWK2fRaw.js +107 -0
- package/assets/{DrawnixDeferredFeatures-BwVmIbe4.js → DrawnixDeferredFeatures-CbWSXV6C.js} +2 -2
- package/assets/KnowledgeBaseContent-BUr9he8d.js +53 -0
- package/assets/MVCreator-BOzN-tXU.js +152 -0
- package/assets/{ModelBenchmarkWorkbench-DjsZL9Wo.js → ModelBenchmarkWorkbench-jUHEm6aS.js} +2 -2
- package/assets/MusicAnalyzer-BuGqo-5v.js +6 -0
- package/assets/ParametersDropdown-b2oWAycj.css +1 -0
- package/assets/ParametersDropdown-yEFuMwP3.js +1 -0
- package/assets/{PromptHistoryTool-DSVwca-7.js → PromptHistoryTool-Bkam4jDq.js} +2 -2
- package/assets/{ResizableDivider-Cy2r-_ky.js → ResizableDivider-4YaXoujg.js} +1 -1
- package/assets/{TaskQueuePanel-C7blC9FD.js → TaskQueuePanel-B4n4yFrN.js} +1 -1
- package/assets/VideoAnalyzer-BQM5Hxrh.css +1 -0
- package/assets/VideoAnalyzer-DD1ikZBf.js +1 -0
- package/assets/VideoAnalyzer-Dw6JxzL_.js +2 -0
- package/assets/__vite-browser-external-UePf-KSV.js +1 -0
- package/assets/ai-chat-BoXAp-XO.css +1 -0
- package/assets/ai-chat-CbA4VxVi.js +648 -0
- package/assets/ai-generation-preferences-service-DvXSxpFD.js +1 -0
- package/assets/batch-image-generation-C9zuT56U.js +8 -0
- package/assets/{batch-image-generation-BePygpHd.css → batch-image-generation-DkFv7TJU.css} +1 -1
- package/assets/diagram-engines-arQ_psja.js +2088 -0
- package/assets/{editor-engines-CsNp1Tsp.js → editor-engines-BXUe6h7p.js} +112 -113
- package/assets/html2canvas.esm-QH1iLAAe.js +22 -0
- package/assets/{index-C5uY0VPH.js → index-7v8cNwYN.js} +2 -2
- package/assets/index-Bhsy9ZA3.css +1 -0
- package/assets/{index-CPkheNKW.js → index-CfHqQVdk.js} +1 -1
- package/assets/{index-DAGGO7zD.js → index-D6y0DVFb.js} +1 -1
- package/assets/{index-DJH9ctOa.js → index-DbzFDVbD.js} +2 -2
- package/assets/{index-DVkRIiXo.js → index-vRkGyT2X.js} +7 -7
- package/assets/index.es-C8HW6iHn.js +18 -0
- package/assets/jspdf.es.min-ClNUHu_u.js +170 -0
- package/assets/markdown-to-drawnix-BCRkjrJ-.js +90 -0
- package/assets/{mermaid-to-drawnix-CUk088MC.js → mermaid-to-drawnix-jTl2aB2R.js} +3 -3
- package/assets/mj-params-M-7csAp7.js +1 -0
- package/assets/{model-benchmark-launcher-25CEVgrz.js → model-benchmark-launcher-Jt3muucM.js} +1 -1
- package/assets/{office-data-BSE1ZWDm.js → office-data-BGeIlv11.js} +45 -45
- package/assets/{photo-wall-splitter-B96AqXPi.js → photo-wall-splitter-DmDAK7uj.js} +1 -1
- package/assets/prompt-utils-CXPwwhv5.js +1 -0
- package/assets/{retry-image-CeCsd316.js → retry-image-nmgTk8q5.js} +2 -2
- package/assets/{settings-dialog-BSkxlqBP.js → settings-dialog-D20-RzdV.js} +1 -1
- package/assets/{skill-dsl-parser-BkCrd-h_.js → skill-dsl-parser-BzXNppVj.js} +1 -1
- package/assets/startup-app-BmKsISci.js +2460 -0
- package/assets/{startup-app-DjpSr-ej.css → startup-app-BruT4WBY.css} +1 -1
- package/assets/task-sync-OlH4BhNN.js +1 -0
- package/assets/tool-windows-BJIgtPhd.js +94 -0
- package/assets/tool-windows-Bufp-SaC.css +1 -0
- package/assets/ttd-dialog-BC8TvOF6.js +6 -0
- package/assets/ttd-dialog-DaiCKXiC.css +1 -0
- package/assets/{ttd-dialog-submit-shortcut-BFem49_k.js → ttd-dialog-submit-shortcut-CtoAZbit.js} +1 -1
- package/assets/useCharacters-DYaygzmK.js +2 -0
- package/assets/useMediaViewer-g_sRo1wu.js +1 -0
- package/assets/useWorkflowSubmission-DtY6AO0Y.js +44 -0
- package/assets/{video-recovery-service-C6wpynRv.js → video-recovery-service-B1myHeGL.js} +1 -1
- package/assets/{workflow-generation-utils-Cj47DI_a.js → workflow-generation-utils-BzmNYqLw.js} +3 -3
- package/assets/workflow-submission-service-D54XS7uS.js +4 -0
- package/changelog.json +41 -2481
- package/idle-prefetch-manifest.json +384 -312
- package/manifest.json +3 -3
- package/package.json +1 -1
- package/precache-manifest.json +8 -8
- package/sw.js +1 -1
- package/version.json +3 -4
- package/assets/CanvasAudioPlayer-mm7y75Ol.css +0 -1
- package/assets/DeferredAIInputBar-Czi1cJe6.js +0 -107
- package/assets/DeferredAIInputBar-szBPHiNW.css +0 -1
- package/assets/DrawnixDeferredFeatures-BBiW9_Pn.css +0 -1
- package/assets/KnowledgeBaseContent-DNkZfix0.js +0 -53
- package/assets/MVCreator-By0y_046.js +0 -152
- package/assets/MusicAnalyzer-Bzl9Jmqg.js +0 -1
- package/assets/MusicAnalyzer-D1Gd6V1v.js +0 -6
- package/assets/VideoAnalyzer-BNHBu5xL.css +0 -1
- package/assets/VideoAnalyzer-uXqn3KbI.js +0 -2
- package/assets/__vite-browser-external-BIHI7g3E.js +0 -1
- package/assets/ai-chat-CQtdTiRy.css +0 -1
- package/assets/ai-chat-mtUeWwl9.js +0 -646
- package/assets/ai-generation-preferences-service-CeFIqZqn.css +0 -1
- package/assets/ai-generation-preferences-service-tezrjfTA.js +0 -1
- package/assets/batch-image-generation-DYhbU97Q.js +0 -7
- package/assets/diagram-engines-BZUbd6SR.js +0 -2087
- package/assets/index-DcEUU-_0.css +0 -1
- package/assets/markdown-to-drawnix-wAC3Hxjq.js +0 -90
- package/assets/startup-app-DDsW0z3F.js +0 -2386
- package/assets/tool-windows-V-y5T3c1.js +0 -95
- package/assets/tool-windows-iru1YTHd.css +0 -1
- package/assets/ttd-dialog-DZBNihVL.css +0 -1
- package/assets/ttd-dialog-pZVdBFFI.js +0 -6
- package/assets/useCharacters-W93HihiS.js +0 -2
- package/assets/useWorkflowSubmission-C-5tDJh_.js +0 -44
- package/assets/workflow-submission-service-B-sqeOr7.js +0 -4
package/.DS_Store
CHANGED
|
Binary file
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Opentu CDN Assets v0.6.
|
|
1
|
+
# Opentu CDN Assets v0.6.93
|
|
2
2
|
|
|
3
3
|
> 静态资源包,不含 HTML 文件
|
|
4
4
|
|
|
5
|
-
- unpkg: https://unpkg.com/aitu-app@0.6.
|
|
6
|
-
- jsdelivr: https://cdn.jsdelivr.net/npm/aitu-app@0.6.
|
|
5
|
+
- unpkg: https://unpkg.com/aitu-app@0.6.93/
|
|
6
|
+
- jsdelivr: https://cdn.jsdelivr.net/npm/aitu-app@0.6.93/
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./startup-app-
|
|
2
|
-
import{_ as ke}from"./startup-runtime-DTmhLESk.js";import{r as n,j as t,d2 as he,y as C,j4 as Ae,fN as Se,dK as Te,dL as Le,d6 as ue,d4 as J,ev as U,el as Ee,m as de,c8 as Ne,bU as Ce,dN as Me,ep as Re,ex as oe,ey as pe,Y as ie,eq as _e,A as De,av as ze,ez as $e,eo as Oe,l as Ue,eA as Fe,eB as fe,eC as qe,ew as le,j5 as Ye,j6 as Ve,j7 as Be,X as He,eE as We,eF as Qe,eG as Xe,eH as Ke,eI as Ge}from"./startup-app-DDsW0z3F.js";import{u as Je,a as Ze,b as ye,d as Z,e as et}from"./tool-windows-V-y5T3c1.js";import{b as tt}from"./ai-chat-mtUeWwl9.js";const me=5;function ve(e,i,s){const c=Math.max(0,window.innerWidth-i),f=Math.max(0,window.innerHeight-s);return{x:Math.max(0,Math.min(e.x,c)),y:Math.max(0,Math.min(e.y,f))}}function at(e){try{const i=localStorage.getItem(e);if(!i)return null;const s=JSON.parse(i);if(typeof s.x=="number"&&typeof s.y=="number")return s}catch{}return null}function nt(e,i){try{localStorage.setItem(e,JSON.stringify(i))}catch{}}function st(e){const{storageKey:i,enabled:s=!0}=e,[c,f]=n.useState(()=>s?at(i):null),[v,b]=n.useState(!1),w=n.useRef(!1),h=n.useRef(null),I=n.useRef(null),_=n.useCallback(y=>{if(!s||y.button!==0)return;const m=I.current;if(!m)return;const p=m.getBoundingClientRect();h.current={startPointerX:y.clientX,startPointerY:y.clientY,startElX:p.left,startElY:p.top,activated:!1,frameId:0}},[s]);n.useEffect(()=>{if(!s)return;const y=p=>{const u=h.current;if(!u)return;const g=p.clientX-u.startPointerX,M=p.clientY-u.startPointerY;if(!u.activated){if(Math.abs(g)<me&&Math.abs(M)<me)return;u.activated=!0,b(!0)}cancelAnimationFrame(u.frameId),u.frameId=requestAnimationFrame(()=>{const S=I.current;if(!S)return;const d=ve({x:u.startElX+g,y:u.startElY+M},S.offsetWidth,S.offsetHeight);f(d)})},m=()=>{const p=h.current;if(!p)return;cancelAnimationFrame(p.frameId);const u=p.activated;h.current=null,b(!1),u&&(w.current=!0,requestAnimationFrame(()=>{w.current=!1}),f(g=>(g&&nt(i,g),g)))};return window.addEventListener("pointermove",y),window.addEventListener("pointerup",m),()=>{window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",m)}},[s,i]),n.useEffect(()=>{if(!s||!c)return;const y=()=>{const m=I.current;m&&f(p=>p&&ve(p,m.offsetWidth,m.offsetHeight))};return window.addEventListener("resize",y),()=>window.removeEventListener("resize",y)},[s,!!c]);const P=n.useCallback(()=>{f(null);try{localStorage.removeItem(i)}catch{}},[i]);return{position:c,isDragging:v,wasDraggedRef:w,elementRef:I,handlePointerDown:_,resetPosition:P}}const ot=({volume:e,onVolumeChange:i})=>{const s=n.useRef(null),c=n.useRef(null),f=n.useRef(!1),v=n.useRef(!1),b=n.useRef(!1),[w,h]=n.useState(!1),[I,_]=n.useState(!1),[P,y]=n.useState(!1),m=Math.round(e*100),p={"--canvas-audio-progress":`${e*100}%`},u=()=>{c.current!==null&&(window.clearTimeout(c.current),c.current=null)},g=()=>{u(),h(!0)},M=()=>{u(),h(d=>!d)},S=()=>{u(),!(v.current||b.current)&&(c.current=window.setTimeout(()=>{h(!1)},180))};return n.useEffect(()=>{v.current=I},[I]),n.useEffect(()=>{b.current=P},[P]),n.useEffect(()=>()=>u(),[]),n.useEffect(()=>{if(!w)return;const d=x=>{var k;(k=s.current)!=null&&k.contains(x.target)||(u(),h(!1),y(!1),_(!1),f.current=!1)};return document.addEventListener("pointerdown",d,!0),()=>document.removeEventListener("pointerdown",d,!0)},[w]),n.useEffect(()=>{if(!P)return;const d=()=>{b.current=!1,y(!1),v.current||(u(),c.current=window.setTimeout(()=>{h(!1)},180))};return window.addEventListener("pointerup",d),()=>window.removeEventListener("pointerup",d)},[P]),t.jsx("div",{ref:s,className:he("canvas-audio-player__volume",{"canvas-audio-player__volume--expanded":w}),onPointerDown:d=>d.stopPropagation(),onMouseEnter:()=>{v.current=!0,_(!0),u()},onMouseLeave:()=>{v.current=!1,_(!1),S()},onBlur:d=>{var k;const x=d.relatedTarget;x&&((k=s.current)!=null&&k.contains(x))||S()},children:t.jsxs("div",{className:"canvas-audio-player__volume-shell",children:[t.jsx("div",{className:"canvas-audio-player__volume-slider-wrap",children:t.jsx("input",{type:"range",min:0,max:1,step:.01,value:e,onFocus:g,onPointerDown:d=>{d.stopPropagation(),b.current=!0,y(!0),g()},onChange:d=>i(Number(d.target.value)),className:"canvas-audio-player__slider canvas-audio-player__slider--volume",style:p,"aria-label":"Playback volume","aria-valuetext":`${m}%`})}),t.jsxs("span",{className:"canvas-audio-player__volume-value",children:[m,"%"]}),t.jsx(C,{content:"音量",children:t.jsx("button",{type:"button",className:"canvas-audio-player__volume-toggle",onPointerDown:d=>{d.stopPropagation(),f.current=!0},onClick:()=>{f.current=!1,M()},onFocus:()=>{f.current||g()},onBlur:()=>{f.current=!1},"aria-label":"Volume controls","aria-expanded":w,children:e<=.01?t.jsx(Ae,{size:16}):t.jsx(Se,{size:16})})})]})})},ge="asset:";function it(e){var i;return(i=e==null?void 0:e.elementId)!=null&&i.startsWith(ge)?e.elementId.slice(ge.length):null}function xe(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const i=Math.floor(e),s=Math.floor(i/60),c=i%60;return`${s}:${String(c).padStart(2,"0")}`}function lt(e){var s;const i=((s=e.segments[e.segments.length-1])==null?void 0:s.endMs)||0;return xe(i/1e3)}const rt=({queue:e,activeQueueIndex:i,queueSource:s,activePlaylistId:c,playing:f=!1,activeReadingSourceId:v,onSelect:b,onPlayAllTracksItem:w})=>{const{assets:h}=Te(),{playlists:I,playlistItems:_,favoriteAssetIds:P,createPlaylist:y,addAssetToPlaylist:m,removeAssetFromPlaylist:p,toggleFavorite:u}=Le(),{contextMenu:g,openAt:M,close:S}=tt(),[d,x]=n.useState(!1),[k,E]=n.useState(""),[F,T]=n.useState(null),{noteMetas:z,loadReadingSource:Q,buildReadingQueue:X}=Je(),[q,Y]=n.useState(s==="reading"?ue:J),V=q===ue,R=s==="playlist"&&c?c:J,L=e.filter(a=>!U(a)),ee=Ze(L),K=a=>{const o=it(a);if(o)return o;if(!(a!=null&&a.audioUrl))return null;const r=h.find(j=>j.type===Me.AUDIO&&j.url===a.audioUrl);return(r==null?void 0:r.id)||null},B=n.useMemo(()=>new Set(R!==J?(_[R]||[]).map(a=>a.assetId?Ee({kind:"asset",assetId:a.assetId}):null).filter(a=>!!a):[]),[_,R]),D=n.useCallback(async a=>{if(w){w(a);return}const o=await Q(a);o&&(await X(a),b(o))},[w,Q,X,b]),$=n.useMemo(()=>z.map(a=>({id:a.id,title:a.title||"未命名笔记",subtitle:new Date(a.updatedAt).toLocaleDateString("zh-CN"),canFavorite:!1,isActive:(v==null?void 0:v.includes(a.id))===!0,isPlaying:f&&(v==null?void 0:v.includes(a.id))===!0})),[z,v,f]);return s==="reading"?t.jsxs("div",{className:"canvas-audio-player__playlist",children:[t.jsx(ye,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:q,allCount:L.length,allTracksCount:z.length,playlists:I,playlistItems:_,onSelect:Y,onCreate:()=>{E(""),x(!0)}}),V?$.length===0?t.jsxs("div",{className:"canvas-audio-player__playlist-empty",children:[t.jsx(de,{size:16}),t.jsx("span",{children:"知识库还没有笔记"})]}):t.jsx(Z,{className:"canvas-audio-player__playlist-list",items:$,onSelect:a=>void D(a.id),onTogglePlayback:a=>void D(a.id),showPlaybackIndicator:!0}):t.jsx(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:e.map((a,o)=>{const r=a;return{id:r.readingSourceId,title:r.title||"朗读轨道",subtitle:lt(r),previewImageUrl:r.previewImageUrl,isActive:o===i,isPlaying:o===i,canFavorite:!1}}),onSelect:a=>{const o=e.find(r=>U(r)&&r.readingSourceId===a.id);o&&b(o)},onTogglePlayback:a=>{const o=e.find(r=>U(r)&&r.readingSourceId===a.id);o&&b(o)},showPlaybackIndicator:!0})]}):t.jsxs("div",{className:"canvas-audio-player__playlist",children:[t.jsx(ye,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:q,allCount:L.length,allTracksCount:z.length,playlists:I,playlistItems:_,onSelect:Y,onCreate:()=>{E(""),x(!0)}}),V?$.length===0?t.jsxs("div",{className:"canvas-audio-player__playlist-empty",children:[t.jsx(de,{size:16}),t.jsx("span",{children:"知识库还没有笔记"})]}):t.jsx(Z,{className:"canvas-audio-player__playlist-list",items:$,onSelect:a=>void D(a.id),onTogglePlayback:a=>void D(a.id),showPlaybackIndicator:!0}):t.jsx(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:L.map((a,o)=>{const r=K(a);return{id:`${a.audioUrl}-${o}`,title:a.title||"未命名音频",subtitle:xe(ee.get(a.audioUrl)??a.duration),previewImageUrl:a.previewImageUrl,isActive:o===i,isPlaying:o===i,isFavorite:r?P.has(r):!1,canFavorite:!!r}}),onSelect:a=>{const o=L.find((r,j)=>`${r.audioUrl}-${j}`===a.id);o&&b(o)},onContextMenu:(a,o)=>{const r=L.find((H,te)=>`${H.audioUrl}-${te}`===a.id),j=K(r);j&&(o.preventDefault(),o.stopPropagation(),M(o.clientX,o.clientY,{kind:"asset",assetId:j}))},onToggleFavorite:a=>{const o=L.find((j,H)=>`${j.audioUrl}-${H}`===a.id),r=K(o);r&&u(r)},onTogglePlayback:a=>{const o=L.find((r,j)=>`${r.audioUrl}-${j}`===a.id);o&&b(o)},showFavoriteButton:!0,showPlaybackIndicator:!0}),t.jsx(et,{contextMenu:g?{x:g.x,y:g.y,item:g.payload}:null,playlists:I,playlistItems:_,favoriteAssetIds:P,selectedPlaylistId:R===J?null:R,currentPlaylistItemKeys:B,onClose:S,onToggleFavorite:a=>void u(a),onAddToPlaylist:(a,o)=>{a.kind==="asset"&&m(a.assetId,o)},onRemoveFromPlaylist:(a,o)=>{a.kind==="asset"&&p(a.assetId,o)},onCreatePlaylistAndAdd:a=>{a.kind==="asset"&&(T(a.assetId),E(""),x(!0))}}),t.jsx(Ne,{visible:d,header:"新建播放列表",onClose:()=>x(!1),onConfirm:async()=>{const a=await y(k);F&&await m(F,a.id),x(!1),E(""),T(null)},onCancel:()=>{x(!1),T(null)},confirmBtn:"确定",cancelBtn:"取消",children:t.jsx(Ce,{value:k,onChange:a=>E(String(a)),placeholder:"请输入播放列表名称"})})]})},we={sequential:t.jsx(Ge,{size:14}),"list-loop":t.jsx(Ke,{size:14}),"single-loop":t.jsx(Xe,{size:14}),shuffle:t.jsx(Qe,{size:14})},ct=Object.keys(le).map(e=>({value:e,content:le[e],prefixIcon:we[e]}));function ut(e,i){return We(i).map(s=>{const c=_e(s),f=Math.abs(s-e)<.001;return{value:s,content:f?`✓ ${c}`:c}})}function be(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const i=Math.floor(e),s=Math.floor(i/60),c=i%60;return`${s}:${String(c).padStart(2,"0")}`}const vt=()=>{const e=Re(),i=n.useRef(null),[s,c]=n.useState(!1),[f,v]=n.useState(()=>{const l=oe.getToolState(pe);return(l==null?void 0:l.status)==="open"}),[b,w]=n.useState(()=>{try{return localStorage.getItem(ie.AUDIO_PLAYER_LAYOUT)==="vertical"?"vertical":"horizontal"}catch{return"horizontal"}}),[h,I]=n.useState(()=>typeof window<"u"?window.innerWidth:1024);n.useEffect(()=>{const l=()=>I(window.innerWidth);return window.addEventListener("resize",l),window.addEventListener("orientationchange",l),()=>{window.removeEventListener("resize",l),window.removeEventListener("orientationchange",l)}},[]);const _=h<=768?"vertical":b,[P,y]=n.useState(null),m=h<=768,{position:p,isDragging:u,wasDraggedRef:g,elementRef:M,handlePointerDown:S}=st({storageKey:ie.AUDIO_PLAYER_POSITION,enabled:!m}),d=n.useMemo(()=>!e.duration||e.duration<=0?0:Math.max(0,Math.min(100,e.currentTime/e.duration*100)),[e.currentTime,e.duration]),x=Number.isFinite(e.currentTime)?e.currentTime:0,k=Number.isFinite(e.duration)?e.duration:0,E=be(x),F=be(k),T=e.activeQueueIndex>=0?e.queue[e.activeQueueIndex]:null,z=e.activeTitle||(U(T)?T.title:void 0),Q=e.activePreviewImageUrl||(U(T)?T.previewImageUrl:void 0),X=e.activeQueueIndex>0,q=e.activeQueueIndex>=0&&e.activeQueueIndex<e.queue.length-1,Y=e.queue.length>1&&e.activeQueueIndex>=0,V=Y?`${e.activeQueueIndex+1}/${e.queue.length}`:null,R=e.queueSource==="playlist"?e.activePlaylistName||"播放列表":e.activePlaylistName||(e.queueSource==="reading"?"朗读轨道":"画布音频"),L=Y?`${R} ${e.activeQueueIndex+1} / ${e.queue.length}`:R,ee=V?`${V} · ${E} / ${F}`:`${E} / ${F}`,B=e.queueSource==="reading"&&(!!e.activeReadingSourceId||T!==null&&U(T))||!!e.activeAudioUrl,D=e.mediaType==="audio",$=e.mediaType==="reading"?"reading":"audio",a=le[e.playbackMode],o=we[e.playbackMode],r=n.useMemo(()=>ut(e.effectivePlaybackRate,$),[e.effectivePlaybackRate,$]),j=_e(e.effectivePlaybackRate),H=`${e.mediaType==="reading"?"语音速度":"播放速度"} ${j}`,te={"--canvas-audio-progress":`${d}%`},Pe=n.useCallback(()=>{w(l=>{const A=l==="horizontal"?"vertical":"horizontal";try{localStorage.setItem(ie.AUDIO_PLAYER_LAYOUT,A)}catch{}return A})},[]),je=n.useCallback(async()=>{try{e.playing?e.pausePlayback():await e.resumePlayback()}catch{}},[e]);if(n.useEffect(()=>{if(!B){c(!1),y(null);return}let l=0;const A=()=>{const ce=document.querySelector(".ai-input-bar__container");if(!(ce instanceof HTMLElement)){y(null);return}const se=ce.getBoundingClientRect(),G={left:Math.round(se.left),width:Math.round(se.width),bottom:Math.max(0,Math.round(window.innerHeight-se.top))};y(W=>W&&W.left===G.left&&W.width===G.width&&W.bottom===G.bottom?W:G)},N=()=>{window.cancelAnimationFrame(l),l=window.requestAnimationFrame(A)},ae=document.querySelector(".ai-input-bar__container"),ne=document.querySelector(".ai-input-bar"),O=typeof ResizeObserver<"u"?new ResizeObserver(()=>N()):null;return O&&ae instanceof HTMLElement&&O.observe(ae),O&&ne instanceof HTMLElement&&ne!==ae&&O.observe(ne),N(),window.addEventListener("resize",N),window.addEventListener("orientationchange",N),()=>{window.cancelAnimationFrame(l),window.removeEventListener("resize",N),window.removeEventListener("orientationchange",N),O==null||O.disconnect()}},[B]),n.useEffect(()=>{if(!s)return;const l=A=>{var N;(N=i.current)!=null&&N.contains(A.target)||c(!1)};return document.addEventListener("pointerdown",l,!0),()=>document.removeEventListener("pointerdown",l,!0)},[s]),n.useEffect(()=>{M.current=i.current}),n.useEffect(()=>{const l=oe.observeToolStates().subscribe(()=>{const A=oe.getToolState(pe);v((A==null?void 0:A.status)==="open")});return()=>l.unsubscribe()},[]),!B||f)return null;const Ie=p&&!m?{left:p.x,top:p.y}:{},re={...P?{"--canvas-audio-mobile-left":`${P.left}px`,"--canvas-audio-mobile-width":`${P.width}px`,"--canvas-audio-mobile-offset":`${P.bottom}px`}:{},...Ie};return t.jsxs("div",{ref:i,className:he("canvas-audio-player",{"canvas-audio-player--playlist-open":s,"canvas-audio-player--positioned":!!p,"canvas-audio-player--dragging":u,"canvas-audio-player--vertical":_==="vertical"}),style:Object.keys(re).length>0?re:void 0,children:[t.jsxs("button",{type:"button",className:"canvas-audio-player__queue-trigger",onPointerDown:S,onClick:()=>{g.current||c(l=>!l)},"aria-expanded":s,"aria-label":"切换播放列表",children:[t.jsx("div",{className:"canvas-audio-player__cover",children:t.jsx(De,{src:Q,alt:z||"Audio cover",fallbackClassName:"canvas-audio-player__cover-fallback",iconSize:16})}),t.jsxs("div",{className:"canvas-audio-player__meta",children:[t.jsx("div",{className:"canvas-audio-player__title",children:z||"未命名音频"}),t.jsxs("div",{className:"canvas-audio-player__subtitle",children:[t.jsx("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--desktop",children:L}),t.jsx("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--mobile",children:ee})]})]}),t.jsx("span",{className:"canvas-audio-player__queue-indicator","aria-hidden":"true",children:t.jsx(ze,{size:14})})]}),t.jsxs("div",{className:"canvas-audio-player__controls",children:[t.jsx(C,{content:"上一首",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--previous",onClick:()=>void e.playPrevious(),disabled:!X,children:t.jsx($e,{size:14})})}),t.jsx(C,{content:e.playing?"暂停":"播放",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--primary",onClick:()=>void je(),children:e.playing?t.jsx(Oe,{size:14}):t.jsx(Ue,{size:14})})}),t.jsx(C,{content:"下一首",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--next",onClick:()=>void e.playNext(),disabled:!q,children:t.jsx(Fe,{size:14})})})]}),t.jsxs("div",{className:"canvas-audio-player__progress",children:[t.jsx("span",{className:"canvas-audio-player__time",children:E}),t.jsx("input",{type:"range",min:0,max:k||0,step:.1,value:Math.min(x,k||x),onChange:l=>{D&&e.seekTo(Number(l.target.value))},className:"canvas-audio-player__slider canvas-audio-player__slider--progress",style:te,"aria-label":D?"Audio progress":"Reading progress",disabled:!D}),t.jsx("span",{className:"canvas-audio-player__time",children:F})]}),t.jsx(ot,{volume:e.volume,onVolumeChange:e.setVolume}),t.jsx(fe,{options:r,trigger:"click",placement:"bottom",minColumnWidth:112,onClick:l=>e.setPlaybackRate(Number(l.value)),children:t.jsx(C,{content:H,children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__speed-toggle","aria-label":`切换播放速度,当前${j}`,children:t.jsx(qe,{size:14})})})}),t.jsx(fe,{options:ct,trigger:"click",placement:"bottom",minColumnWidth:132,onClick:l=>e.setPlaybackMode(l.value),children:t.jsx(C,{content:a,children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__mode-toggle","aria-label":`切换播放模式,当前${a}`,children:o})})}),t.jsx(C,{content:"打开播放器工具",children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__player-switch canvas-audio-player__switch-toggle",onClick:()=>{ke(async()=>{const{openMusicPlayerTool:l}=await import("./startup-app-DDsW0z3F.js").then(A=>A.mo);return{openMusicPlayerTool:l}},__vite__mapDeps([0]),import.meta.url).then(({openMusicPlayerTool:l})=>{l()})},"aria-label":"打开播放器工具",children:t.jsx(Ye,{size:14})})}),t.jsx(C,{content:_==="horizontal"?"切换为垂直布局":"切换为水平布局",children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__layout-toggle",onClick:Pe,style:{display:h<=768?"none":""},children:_==="horizontal"?t.jsx(Ve,{size:14}):t.jsx(Be,{size:14})})}),t.jsx(C,{content:"关闭播放器",children:t.jsx("button",{type:"button",className:"canvas-audio-player__close",onClick:e.stopPlayback,children:t.jsx(He,{size:14})})}),s?t.jsx(rt,{queue:e.queue,activeQueueIndex:e.activeQueueIndex,queueSource:e.queueSource,activePlaylistId:e.activePlaylistId,playing:e.playing,activeReadingSourceId:e.activeReadingSourceId,onSelect:l=>{U(l)?e.toggleReadingPlayback(l):e.togglePlayback(l),c(!1)}}):null]})};export{vt as CanvasAudioPlayer};
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./startup-app-BruT4WBY.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as ke}from"./startup-runtime-DTmhLESk.js";import{r as n,j as t,da as he,B as C,jf as Ae,fY as Se,dS as Te,dT as Le,de as ue,dc as J,eE as U,eu as Ee,o as de,cg as Ne,c0 as Ce,dV as Me,ey as Re,eG as oe,eH as pe,$ as ie,ez as _e,A as De,ax as $e,eI as ze,ex as Oe,m as Ue,eJ as Fe,eK as fe,eL as Ye,eF as le,jg as qe,jh as Ve,ji as Be,X as He,eN as Qe,eO as We,eP as Xe,eQ as Ke,eR as Ge}from"./startup-app-BmKsISci.js";import{u as Je,a as Ze,b as me,d as Z,e as et}from"./tool-windows-BJIgtPhd.js";import{b as tt}from"./ai-chat-CbA4VxVi.js";const ye=5;function ve(e,i,s){const c=Math.max(0,window.innerWidth-i),f=Math.max(0,window.innerHeight-s);return{x:Math.max(0,Math.min(e.x,c)),y:Math.max(0,Math.min(e.y,f))}}function at(e){try{const i=localStorage.getItem(e);if(!i)return null;const s=JSON.parse(i);if(typeof s.x=="number"&&typeof s.y=="number")return s}catch{}return null}function nt(e,i){try{localStorage.setItem(e,JSON.stringify(i))}catch{}}function st(e){const{storageKey:i,enabled:s=!0}=e,[c,f]=n.useState(()=>s?at(i):null),[v,b]=n.useState(!1),w=n.useRef(!1),h=n.useRef(null),I=n.useRef(null),_=n.useCallback(m=>{if(!s||m.button!==0)return;const y=I.current;if(!y)return;const p=y.getBoundingClientRect();h.current={startPointerX:m.clientX,startPointerY:m.clientY,startElX:p.left,startElY:p.top,activated:!1,frameId:0}},[s]);n.useEffect(()=>{if(!s)return;const m=p=>{const u=h.current;if(!u)return;const g=p.clientX-u.startPointerX,M=p.clientY-u.startPointerY;if(!u.activated){if(Math.abs(g)<ye&&Math.abs(M)<ye)return;u.activated=!0,b(!0)}cancelAnimationFrame(u.frameId),u.frameId=requestAnimationFrame(()=>{const S=I.current;if(!S)return;const d=ve({x:u.startElX+g,y:u.startElY+M},S.offsetWidth,S.offsetHeight);f(d)})},y=()=>{const p=h.current;if(!p)return;cancelAnimationFrame(p.frameId);const u=p.activated;h.current=null,b(!1),u&&(w.current=!0,requestAnimationFrame(()=>{w.current=!1}),f(g=>(g&&nt(i,g),g)))};return window.addEventListener("pointermove",m),window.addEventListener("pointerup",y),()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",y)}},[s,i]),n.useEffect(()=>{if(!s||!c)return;const m=()=>{const y=I.current;y&&f(p=>p&&ve(p,y.offsetWidth,y.offsetHeight))};return window.addEventListener("resize",m),()=>window.removeEventListener("resize",m)},[s,!!c]);const P=n.useCallback(()=>{f(null);try{localStorage.removeItem(i)}catch{}},[i]);return{position:c,isDragging:v,wasDraggedRef:w,elementRef:I,handlePointerDown:_,resetPosition:P}}const ot=({volume:e,onVolumeChange:i})=>{const s=n.useRef(null),c=n.useRef(null),f=n.useRef(!1),v=n.useRef(!1),b=n.useRef(!1),[w,h]=n.useState(!1),[I,_]=n.useState(!1),[P,m]=n.useState(!1),y=Math.round(e*100),p={"--canvas-audio-progress":`${e*100}%`},u=()=>{c.current!==null&&(window.clearTimeout(c.current),c.current=null)},g=()=>{u(),h(!0)},M=()=>{u(),h(d=>!d)},S=()=>{u(),!(v.current||b.current)&&(c.current=window.setTimeout(()=>{h(!1)},180))};return n.useEffect(()=>{v.current=I},[I]),n.useEffect(()=>{b.current=P},[P]),n.useEffect(()=>()=>u(),[]),n.useEffect(()=>{if(!w)return;const d=x=>{var k;(k=s.current)!=null&&k.contains(x.target)||(u(),h(!1),m(!1),_(!1),f.current=!1)};return document.addEventListener("pointerdown",d,!0),()=>document.removeEventListener("pointerdown",d,!0)},[w]),n.useEffect(()=>{if(!P)return;const d=()=>{b.current=!1,m(!1),v.current||(u(),c.current=window.setTimeout(()=>{h(!1)},180))};return window.addEventListener("pointerup",d),()=>window.removeEventListener("pointerup",d)},[P]),t.jsx("div",{ref:s,className:he("canvas-audio-player__volume",{"canvas-audio-player__volume--expanded":w}),onPointerDown:d=>d.stopPropagation(),onMouseEnter:()=>{v.current=!0,_(!0),u()},onMouseLeave:()=>{v.current=!1,_(!1),S()},onBlur:d=>{var k;const x=d.relatedTarget;x&&((k=s.current)!=null&&k.contains(x))||S()},children:t.jsxs("div",{className:"canvas-audio-player__volume-shell",children:[t.jsx("div",{className:"canvas-audio-player__volume-slider-wrap",children:t.jsx("input",{type:"range",min:0,max:1,step:.01,value:e,onFocus:g,onPointerDown:d=>{d.stopPropagation(),b.current=!0,m(!0),g()},onChange:d=>i(Number(d.target.value)),className:"canvas-audio-player__slider canvas-audio-player__slider--volume",style:p,"aria-label":"Playback volume","aria-valuetext":`${y}%`})}),t.jsxs("span",{className:"canvas-audio-player__volume-value",children:[y,"%"]}),t.jsx(C,{content:"音量",children:t.jsx("button",{type:"button",className:"canvas-audio-player__volume-toggle",onPointerDown:d=>{d.stopPropagation(),f.current=!0},onClick:()=>{f.current=!1,M()},onFocus:()=>{f.current||g()},onBlur:()=>{f.current=!1},"aria-label":"Volume controls","aria-expanded":w,children:e<=.01?t.jsx(Ae,{size:16}):t.jsx(Se,{size:16})})})]})})},ge="asset:";function it(e){var i;return(i=e==null?void 0:e.elementId)!=null&&i.startsWith(ge)?e.elementId.slice(ge.length):null}function xe(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const i=Math.floor(e),s=Math.floor(i/60),c=i%60;return`${s}:${String(c).padStart(2,"0")}`}function lt(e){var s;const i=((s=e.segments[e.segments.length-1])==null?void 0:s.endMs)||0;return xe(i/1e3)}const rt=({queue:e,activeQueueIndex:i,queueSource:s,activePlaylistId:c,playing:f=!1,activeReadingSourceId:v,onSelect:b,onPlayAllTracksItem:w})=>{const{assets:h}=Te(),{playlists:I,playlistItems:_,favoriteAssetIds:P,createPlaylist:m,addAssetToPlaylist:y,removeAssetFromPlaylist:p,toggleFavorite:u}=Le(),{contextMenu:g,openAt:M,close:S}=tt(),[d,x]=n.useState(!1),[k,E]=n.useState(""),[F,T]=n.useState(null),{noteMetas:$,loadReadingSource:W,buildReadingQueue:X}=Je(),[Y,q]=n.useState(s==="reading"?ue:J),V=Y===ue,R=s==="playlist"&&c?c:J,L=e.filter(a=>!U(a)),ee=Ze(L),K=a=>{const o=it(a);if(o)return o;if(!(a!=null&&a.audioUrl))return null;const r=h.find(j=>j.type===Me.AUDIO&&j.url===a.audioUrl);return(r==null?void 0:r.id)||null},B=n.useMemo(()=>new Set(R!==J?(_[R]||[]).map(a=>a.assetId?Ee({kind:"asset",assetId:a.assetId}):null).filter(a=>!!a):[]),[_,R]),D=n.useCallback(async a=>{if(w){w(a);return}const o=await W(a);o&&(await X(a),b(o))},[w,W,X,b]),z=n.useMemo(()=>$.map(a=>({id:a.id,title:a.title||"未命名笔记",subtitle:new Date(a.updatedAt).toLocaleDateString("zh-CN"),canFavorite:!1,isActive:(v==null?void 0:v.includes(a.id))===!0,isPlaying:f&&(v==null?void 0:v.includes(a.id))===!0})),[$,v,f]);return s==="reading"?t.jsxs("div",{className:"canvas-audio-player__playlist",children:[t.jsx(me,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:Y,allCount:L.length,allTracksCount:$.length,playlists:I,playlistItems:_,onSelect:q,onCreate:()=>{E(""),x(!0)}}),V?z.length===0?t.jsxs("div",{className:"canvas-audio-player__playlist-empty",children:[t.jsx(de,{size:16}),t.jsx("span",{children:"知识库还没有笔记"})]}):t.jsx(Z,{className:"canvas-audio-player__playlist-list",items:z,onSelect:a=>void D(a.id),onTogglePlayback:a=>void D(a.id),showPlaybackIndicator:!0}):t.jsx(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:e.map((a,o)=>{const r=a;return{id:r.readingSourceId,title:r.title||"朗读轨道",subtitle:lt(r),previewImageUrl:r.previewImageUrl,isActive:o===i,isPlaying:o===i,canFavorite:!1}}),onSelect:a=>{const o=e.find(r=>U(r)&&r.readingSourceId===a.id);o&&b(o)},onTogglePlayback:a=>{const o=e.find(r=>U(r)&&r.readingSourceId===a.id);o&&b(o)},showPlaybackIndicator:!0})]}):t.jsxs("div",{className:"canvas-audio-player__playlist",children:[t.jsx(me,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:Y,allCount:L.length,allTracksCount:$.length,playlists:I,playlistItems:_,onSelect:q,onCreate:()=>{E(""),x(!0)}}),V?z.length===0?t.jsxs("div",{className:"canvas-audio-player__playlist-empty",children:[t.jsx(de,{size:16}),t.jsx("span",{children:"知识库还没有笔记"})]}):t.jsx(Z,{className:"canvas-audio-player__playlist-list",items:z,onSelect:a=>void D(a.id),onTogglePlayback:a=>void D(a.id),showPlaybackIndicator:!0}):t.jsx(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:L.map((a,o)=>{const r=K(a);return{id:`${a.audioUrl}-${o}`,title:a.title||"未命名音频",subtitle:xe(ee.get(a.audioUrl)??a.duration),previewImageUrl:a.previewImageUrl,isActive:o===i,isPlaying:o===i,isFavorite:r?P.has(r):!1,canFavorite:!!r}}),onSelect:a=>{const o=L.find((r,j)=>`${r.audioUrl}-${j}`===a.id);o&&b(o)},onContextMenu:(a,o)=>{const r=L.find((H,te)=>`${H.audioUrl}-${te}`===a.id),j=K(r);j&&(o.preventDefault(),o.stopPropagation(),M(o.clientX,o.clientY,{kind:"asset",assetId:j}))},onToggleFavorite:a=>{const o=L.find((j,H)=>`${j.audioUrl}-${H}`===a.id),r=K(o);r&&u(r)},onTogglePlayback:a=>{const o=L.find((r,j)=>`${r.audioUrl}-${j}`===a.id);o&&b(o)},showFavoriteButton:!0,showPlaybackIndicator:!0}),t.jsx(et,{contextMenu:g?{x:g.x,y:g.y,item:g.payload}:null,playlists:I,playlistItems:_,favoriteAssetIds:P,selectedPlaylistId:R===J?null:R,currentPlaylistItemKeys:B,onClose:S,onToggleFavorite:a=>void u(a),onAddToPlaylist:(a,o)=>{a.kind==="asset"&&y(a.assetId,o)},onRemoveFromPlaylist:(a,o)=>{a.kind==="asset"&&p(a.assetId,o)},onCreatePlaylistAndAdd:a=>{a.kind==="asset"&&(T(a.assetId),E(""),x(!0))}}),t.jsx(Ne,{visible:d,header:"新建播放列表",onClose:()=>x(!1),onConfirm:async()=>{const a=await m(k);F&&await y(F,a.id),x(!1),E(""),T(null)},onCancel:()=>{x(!1),T(null)},confirmBtn:"确定",cancelBtn:"取消",children:t.jsx(Ce,{value:k,onChange:a=>E(String(a)),placeholder:"请输入播放列表名称"})})]})},we={sequential:t.jsx(Ge,{size:14}),"list-loop":t.jsx(Ke,{size:14}),"single-loop":t.jsx(Xe,{size:14}),shuffle:t.jsx(We,{size:14})},ct=Object.keys(le).map(e=>({value:e,content:le[e],prefixIcon:we[e]}));function ut(e,i){return Qe(i).map(s=>{const c=_e(s),f=Math.abs(s-e)<.001;return{value:s,content:f?`✓ ${c}`:c}})}function be(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const i=Math.floor(e),s=Math.floor(i/60),c=i%60;return`${s}:${String(c).padStart(2,"0")}`}const vt=()=>{const e=Re(),i=n.useRef(null),[s,c]=n.useState(!1),[f,v]=n.useState(()=>{const l=oe.getToolState(pe);return(l==null?void 0:l.status)==="open"}),[b,w]=n.useState(()=>{try{return localStorage.getItem(ie.AUDIO_PLAYER_LAYOUT)==="vertical"?"vertical":"horizontal"}catch{return"horizontal"}}),[h,I]=n.useState(()=>typeof window<"u"?window.innerWidth:1024);n.useEffect(()=>{const l=()=>I(window.innerWidth);return window.addEventListener("resize",l),window.addEventListener("orientationchange",l),()=>{window.removeEventListener("resize",l),window.removeEventListener("orientationchange",l)}},[]);const _=h<=768?"vertical":b,[P,m]=n.useState(null),y=h<=768,{position:p,isDragging:u,wasDraggedRef:g,elementRef:M,handlePointerDown:S}=st({storageKey:ie.AUDIO_PLAYER_POSITION,enabled:!y}),d=n.useMemo(()=>!e.duration||e.duration<=0?0:Math.max(0,Math.min(100,e.currentTime/e.duration*100)),[e.currentTime,e.duration]),x=Number.isFinite(e.currentTime)?e.currentTime:0,k=Number.isFinite(e.duration)?e.duration:0,E=be(x),F=be(k),T=e.activeQueueIndex>=0?e.queue[e.activeQueueIndex]:null,$=e.activeTitle||(U(T)?T.title:void 0),W=e.activePreviewImageUrl||(U(T)?T.previewImageUrl:void 0),X=e.activeQueueIndex>0,Y=e.activeQueueIndex>=0&&e.activeQueueIndex<e.queue.length-1,q=e.queue.length>1&&e.activeQueueIndex>=0,V=q?`${e.activeQueueIndex+1}/${e.queue.length}`:null,R=e.queueSource==="playlist"?e.activePlaylistName||"播放列表":e.activePlaylistName||(e.queueSource==="reading"?"朗读轨道":"画布音频"),L=q?`${R} ${e.activeQueueIndex+1} / ${e.queue.length}`:R,ee=V?`${V} · ${E} / ${F}`:`${E} / ${F}`,B=e.queueSource==="reading"&&(!!e.activeReadingSourceId||T!==null&&U(T))||!!e.activeAudioUrl,D=e.mediaType==="audio",z=e.mediaType==="reading"?"reading":"audio",a=le[e.playbackMode],o=we[e.playbackMode],r=n.useMemo(()=>ut(e.effectivePlaybackRate,z),[e.effectivePlaybackRate,z]),j=_e(e.effectivePlaybackRate),H=`${e.mediaType==="reading"?"语音速度":"播放速度"} ${j}`,te={"--canvas-audio-progress":`${d}%`},Pe=n.useCallback(()=>{w(l=>{const A=l==="horizontal"?"vertical":"horizontal";try{localStorage.setItem(ie.AUDIO_PLAYER_LAYOUT,A)}catch{}return A})},[]),je=n.useCallback(async()=>{try{e.playing?e.pausePlayback():await e.resumePlayback()}catch{}},[e]);if(n.useEffect(()=>{if(!B){c(!1),m(null);return}let l=0;const A=()=>{const ce=document.querySelector(".ai-input-bar__container");if(!(ce instanceof HTMLElement)){m(null);return}const se=ce.getBoundingClientRect(),G={left:Math.round(se.left),width:Math.round(se.width),bottom:Math.max(0,Math.round(window.innerHeight-se.top))};m(Q=>Q&&Q.left===G.left&&Q.width===G.width&&Q.bottom===G.bottom?Q:G)},N=()=>{window.cancelAnimationFrame(l),l=window.requestAnimationFrame(A)},ae=document.querySelector(".ai-input-bar__container"),ne=document.querySelector(".ai-input-bar"),O=typeof ResizeObserver<"u"?new ResizeObserver(()=>N()):null;return O&&ae instanceof HTMLElement&&O.observe(ae),O&&ne instanceof HTMLElement&&ne!==ae&&O.observe(ne),N(),window.addEventListener("resize",N),window.addEventListener("orientationchange",N),()=>{window.cancelAnimationFrame(l),window.removeEventListener("resize",N),window.removeEventListener("orientationchange",N),O==null||O.disconnect()}},[B]),n.useEffect(()=>{if(!s)return;const l=A=>{var N;(N=i.current)!=null&&N.contains(A.target)||c(!1)};return document.addEventListener("pointerdown",l,!0),()=>document.removeEventListener("pointerdown",l,!0)},[s]),n.useEffect(()=>{M.current=i.current}),n.useEffect(()=>{const l=oe.observeToolStates().subscribe(()=>{const A=oe.getToolState(pe);v((A==null?void 0:A.status)==="open")});return()=>l.unsubscribe()},[]),!B||f)return null;const Ie=p&&!y?{left:p.x,top:p.y}:{},re={...P?{"--canvas-audio-mobile-left":`${P.left}px`,"--canvas-audio-mobile-width":`${P.width}px`,"--canvas-audio-mobile-offset":`${P.bottom}px`}:{},...Ie};return t.jsxs("div",{ref:i,className:he("canvas-audio-player",{"canvas-audio-player--playlist-open":s,"canvas-audio-player--positioned":!!p,"canvas-audio-player--dragging":u,"canvas-audio-player--vertical":_==="vertical"}),style:Object.keys(re).length>0?re:void 0,children:[t.jsxs("button",{type:"button",className:"canvas-audio-player__queue-trigger",onPointerDown:S,onClick:()=>{g.current||c(l=>!l)},"aria-expanded":s,"aria-label":"切换播放列表",children:[t.jsx("div",{className:"canvas-audio-player__cover",children:t.jsx(De,{src:W,alt:$||"Audio cover",fallbackClassName:"canvas-audio-player__cover-fallback",iconSize:16})}),t.jsxs("div",{className:"canvas-audio-player__meta",children:[t.jsx("div",{className:"canvas-audio-player__title",children:$||"未命名音频"}),t.jsxs("div",{className:"canvas-audio-player__subtitle",children:[t.jsx("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--desktop",children:L}),t.jsx("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--mobile",children:ee})]})]}),t.jsx("span",{className:"canvas-audio-player__queue-indicator","aria-hidden":"true",children:t.jsx($e,{size:14})})]}),t.jsxs("div",{className:"canvas-audio-player__controls",children:[t.jsx(C,{content:"上一首",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--previous",onClick:()=>void e.playPrevious(),disabled:!X,children:t.jsx(ze,{size:14})})}),t.jsx(C,{content:e.playing?"暂停":"播放",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--primary",onClick:()=>void je(),children:e.playing?t.jsx(Oe,{size:14}):t.jsx(Ue,{size:14})})}),t.jsx(C,{content:"下一首",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--next",onClick:()=>void e.playNext(),disabled:!Y,children:t.jsx(Fe,{size:14})})})]}),t.jsxs("div",{className:"canvas-audio-player__progress",children:[t.jsx("span",{className:"canvas-audio-player__time",children:E}),t.jsx("input",{type:"range",min:0,max:k||0,step:.1,value:Math.min(x,k||x),onChange:l=>{D&&e.seekTo(Number(l.target.value))},className:"canvas-audio-player__slider canvas-audio-player__slider--progress",style:te,"aria-label":D?"Audio progress":"Reading progress",disabled:!D}),t.jsx("span",{className:"canvas-audio-player__time",children:F})]}),t.jsx(ot,{volume:e.volume,onVolumeChange:e.setVolume}),t.jsx(fe,{options:r,trigger:"click",placement:"bottom",minColumnWidth:112,onClick:l=>e.setPlaybackRate(Number(l.value)),children:t.jsx(C,{content:H,children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__speed-toggle","aria-label":`切换播放速度,当前${j}`,children:t.jsx(Ye,{size:14})})})}),t.jsx(fe,{options:ct,trigger:"click",placement:"bottom",minColumnWidth:132,onClick:l=>e.setPlaybackMode(l.value),children:t.jsx(C,{content:a,children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__mode-toggle","aria-label":`切换播放模式,当前${a}`,children:o})})}),t.jsx(C,{content:"打开播放器工具",children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__player-switch canvas-audio-player__switch-toggle",onClick:()=>{ke(async()=>{const{openMusicPlayerTool:l}=await import("./startup-app-BmKsISci.js").then(A=>A.mL);return{openMusicPlayerTool:l}},__vite__mapDeps([0]),import.meta.url).then(({openMusicPlayerTool:l})=>{l()})},"aria-label":"打开播放器工具",children:t.jsx(qe,{size:14})})}),t.jsx(C,{content:_==="horizontal"?"切换为垂直布局":"切换为水平布局",children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__layout-toggle",onClick:Pe,style:{display:h<=768?"none":""},children:_==="horizontal"?t.jsx(Ve,{size:14}):t.jsx(Be,{size:14})})}),t.jsx(C,{content:"关闭播放器",children:t.jsx("button",{type:"button",className:"canvas-audio-player__close",onClick:e.stopPlayback,children:t.jsx(He,{size:14})})}),s?t.jsx(rt,{queue:e.queue,activeQueueIndex:e.activeQueueIndex,queueSource:e.queueSource,activePlaylistId:e.activePlaylistId,playing:e.playing,activeReadingSourceId:e.activeReadingSourceId,onSelect:l=>{U(l)?e.toggleReadingPlayback(l):e.togglePlayback(l),c(!1)}}):null]})};export{vt as CanvasAudioPlayer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.canvas-audio-player{--canvas-audio-slider-track-height: 5px;--canvas-audio-slider-thumb-size: 11px;--canvas-audio-volume-pill-width: 196px;--canvas-audio-mobile-left: 12px;--canvas-audio-mobile-width: calc(100vw - 24px) ;--canvas-audio-mobile-offset: calc(env(safe-area-inset-bottom, 0px) + 72px) ;position:absolute;top:10px;left:50%;transform:translate(-50%);z-index:2050;width:min(760px,100vw - 180px);box-sizing:border-box;display:grid;grid-template-columns:32px minmax(120px,180px) auto minmax(220px,1fr) auto auto auto auto auto auto;grid-template-areas:"cover meta controls progress volume speed mode switch toggle close";align-items:center;gap:10px;padding:6px 12px;border-radius:999px;background:#ffffffe6;border:1px solid rgba(148,163,184,.16);box-shadow:0 12px 48px #0f172a14;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);isolation:isolate;overflow:visible}@media(max-width:1024px){.canvas-audio-player{width:min(720px,100vw - 120px);grid-template-columns:32px minmax(120px,1fr) auto minmax(180px,1fr) auto auto auto auto auto auto;grid-template-areas:"cover meta controls progress volume speed mode switch toggle close"}}@media(max-width:768px){.canvas-audio-player{position:fixed;top:auto;left:var(--canvas-audio-mobile-left);right:auto;bottom:calc(var(--canvas-audio-mobile-offset) - 4px);transform:none;width:var(--canvas-audio-mobile-width);max-width:none;grid-template-columns:32px minmax(0,1fr) auto auto auto auto;grid-template-areas:"cover meta controls speed mode close" "cover progress progress progress progress progress";row-gap:3px;-moz-column-gap:8px;column-gap:8px;padding:7px 10px 5px;border-radius:16px 16px 8px 8px;background:var(--island-bg-color, #fff);border-color:#fff0;box-shadow:0 2px 12px #00000014}}@media(max-width:640px){.canvas-audio-player{--canvas-audio-mobile-left: calc(env(safe-area-inset-left, 0px) + 8px) ;--canvas-audio-mobile-width: calc(100vw - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px) - 16px) ;--canvas-audio-mobile-offset: calc(env(safe-area-inset-bottom, 0px) + 60px) ;padding:6px 9px 4px;border-radius:15px 15px 7px 7px}}@media(max-width:480px){.canvas-audio-player{--canvas-audio-volume-pill-width: min(164px, calc(100vw - 96px) );--canvas-audio-mobile-left: calc(env(safe-area-inset-left, 0px) + 6px) ;--canvas-audio-mobile-width: calc(100vw - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px) - 12px) ;--canvas-audio-mobile-offset: calc(env(safe-area-inset-bottom, 0px) + 54px) ;padding:5px 8px 4px;row-gap:2px;border-radius:14px 14px 6px 6px}}.canvas-audio-player__cover{grid-area:cover;width:32px;height:32px;border-radius:10px;overflow:hidden;background:linear-gradient(160deg,#1d4ed8eb,#0f172ae6);box-shadow:0 8px 18px #0f172a24}.canvas-audio-player__cover img,.canvas-audio-player__cover .canvas-audio-player__cover-fallback{width:100%;height:100%;display:flex;align-items:center;justify-content:center;-o-object-fit:cover;object-fit:cover;color:#ffffffe6}.canvas-audio-player__queue-trigger{grid-column:1/3;min-width:0;padding:0;border:none;background:transparent;display:grid;grid-template-columns:32px minmax(0,1fr) auto;grid-template-areas:"cover meta indicator";align-items:center;gap:8px;color:inherit;cursor:pointer;text-align:left}.canvas-audio-player__queue-trigger:hover .canvas-audio-player__queue-indicator,.canvas-audio-player__queue-trigger:focus-visible .canvas-audio-player__queue-indicator{color:#2563eb}.canvas-audio-player__queue-trigger:focus-visible{outline:none}.canvas-audio-player__meta{grid-area:meta;min-width:0}.canvas-audio-player__queue-indicator{grid-area:indicator;width:20px;height:20px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;color:#64748bdb;transition:transform .18s ease,color .18s ease,background-color .18s ease}.canvas-audio-player--playlist-open .canvas-audio-player__queue-indicator{transform:rotate(180deg);color:#2563eb;background:#2563eb14}.canvas-audio-player__title{min-width:0;font-size:12px;font-weight:700;color:#0f172a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.canvas-audio-player__subtitle{margin-top:2px;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#64748bc7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.canvas-audio-player__subtitle-text{display:block}.canvas-audio-player__subtitle-text--mobile{display:none}.canvas-audio-player__controls{grid-area:controls;display:inline-flex;align-items:center;gap:6px}.canvas-audio-player__action,.canvas-audio-player__close,.canvas-audio-player__toggle{width:28px;height:28px;border:none;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:transparent;color:#0f172a;cursor:pointer;transition:transform .16s ease,background-color .16s ease,opacity .16s ease}.canvas-audio-player__action:hover:not(:disabled),.canvas-audio-player__close:hover:not(:disabled),.canvas-audio-player__toggle:hover:not(:disabled){transform:translateY(-1px);background:#0f172a0d}.canvas-audio-player__action:disabled,.canvas-audio-player__close:disabled,.canvas-audio-player__toggle:disabled{cursor:default;opacity:.35}.canvas-audio-player__action--primary{width:32px;height:32px;background:#2563eb;color:#fff;box-shadow:0 10px 20px #2563eb33}.canvas-audio-player__action--primary:hover:not(:disabled){background:#1d4ed8}.canvas-audio-player__progress{grid-area:progress;min-width:0;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px}.canvas-audio-player__time{font-size:10px;font-weight:600;font-variant-numeric:tabular-nums;color:#475569db}.canvas-audio-player__slider{--canvas-audio-progress: 0%;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;margin:0;background:transparent;cursor:pointer}.canvas-audio-player__slider:focus{outline:none}.canvas-audio-player__slider::-webkit-slider-runnable-track{height:var(--canvas-audio-slider-track-height);border-radius:999px;background:linear-gradient(90deg,#2563eb 0%,#2563eb var(--canvas-audio-progress),rgba(226,232,240,.95) var(--canvas-audio-progress),rgba(226,232,240,.95) 100%)}.canvas-audio-player__slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:var(--canvas-audio-slider-thumb-size);height:var(--canvas-audio-slider-thumb-size);margin-top:calc((var(--canvas-audio-slider-track-height) - var(--canvas-audio-slider-thumb-size)) / 2);border-radius:999px;border:2px solid #2563eb;background:#fff;box-shadow:0 2px 8px #0f172a1f;-webkit-transition:transform .16s ease,box-shadow .16s ease;transition:transform .16s ease,box-shadow .16s ease}.canvas-audio-player__slider::-moz-range-track{height:var(--canvas-audio-slider-track-height);border-radius:999px;background:#e2e8f0f2}.canvas-audio-player__slider::-moz-range-progress{height:var(--canvas-audio-slider-track-height);border-radius:999px;background:#2563eb}.canvas-audio-player__slider::-moz-range-thumb{width:var(--canvas-audio-slider-thumb-size);height:var(--canvas-audio-slider-thumb-size);border-radius:999px;border:2px solid #2563eb;background:#fff;box-shadow:0 2px 8px #0f172a1f;-moz-transition:transform .16s ease,box-shadow .16s ease;transition:transform .16s ease,box-shadow .16s ease}.canvas-audio-player__slider:hover::-webkit-slider-thumb{transform:scale(1.08);box-shadow:0 4px 12px #0f172a29}.canvas-audio-player__slider:hover::-moz-range-thumb{transform:scale(1.08);box-shadow:0 4px 12px #0f172a29}.canvas-audio-player__slider--progress::-webkit-slider-runnable-track{height:var(--canvas-audio-slider-track-height)}.canvas-audio-player__slider--progress::-moz-range-track,.canvas-audio-player__slider--progress::-moz-range-progress{height:var(--canvas-audio-slider-track-height)}.canvas-audio-player__volume{grid-area:volume;position:relative;display:inline-flex;align-items:center;justify-content:flex-end;width:28px;height:36px;overflow:visible}.canvas-audio-player__volume-shell{position:absolute;top:50%;right:0;width:28px;min-width:28px;height:28px;padding:0;display:grid;grid-template-columns:0fr 0fr 28px;align-items:center;gap:0;overflow:hidden;border-radius:999px;background:#fff0;box-shadow:0 0 #0f172a00;z-index:1;transform:translateY(-50%);transition:width .26s cubic-bezier(.22,1,.36,1),min-width .26s cubic-bezier(.22,1,.36,1),height .26s cubic-bezier(.22,1,.36,1),padding .26s cubic-bezier(.22,1,.36,1),grid-template-columns .26s cubic-bezier(.22,1,.36,1),box-shadow .18s ease,background-color .18s ease}.canvas-audio-player__volume--expanded .canvas-audio-player__volume-shell{width:var(--canvas-audio-volume-pill-width);min-width:var(--canvas-audio-volume-pill-width);height:36px;padding:4px;grid-template-columns:minmax(0,1fr) auto 28px;box-shadow:0 14px 26px #0f172a17,0 1px #ffffffc7 inset;background:#fffffff7}.canvas-audio-player__volume-slider-wrap{min-width:0;overflow:hidden;opacity:0;transform:translate(10px);pointer-events:none;transition:opacity .16s ease,transform .24s cubic-bezier(.22,1,.36,1),padding .24s cubic-bezier(.22,1,.36,1)}.canvas-audio-player__volume--expanded .canvas-audio-player__volume-slider-wrap{padding:0 6px 0 12px;opacity:1;transform:translate(0);pointer-events:auto}.canvas-audio-player__volume-value{width:0;min-width:0;padding-right:0;overflow:hidden;font-size:10px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:.02em;text-align:right;color:#475569db;opacity:0;transform:translate(8px);pointer-events:none;transition:opacity .16s ease,transform .24s cubic-bezier(.22,1,.36,1)}.canvas-audio-player__volume--expanded .canvas-audio-player__volume-value{width:40px;min-width:40px;padding-right:2px;opacity:1;transform:translate(0)}.canvas-audio-player__volume-toggle{position:relative;z-index:2;width:28px;height:28px;border:none;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:transparent;color:#475569c2;cursor:pointer;transition:color .18s ease,transform .18s ease}.canvas-audio-player__volume-toggle:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:#2563eb0f;opacity:0;transform:scale(.92);transition:opacity .18s ease,transform .18s ease,background-color .18s ease}.canvas-audio-player__volume-toggle svg{position:relative;z-index:1}.canvas-audio-player__volume-toggle:hover,.canvas-audio-player__volume-toggle:focus-visible{color:#2563eb;outline:none}.canvas-audio-player__volume-toggle:hover:before,.canvas-audio-player__volume-toggle:focus-visible:before{opacity:1;transform:scale(1)}.canvas-audio-player__volume--expanded .canvas-audio-player__volume-toggle{color:#2563eb}.canvas-audio-player__volume--expanded .canvas-audio-player__volume-toggle:before{opacity:1;transform:scale(1);background:linear-gradient(180deg,#eff6ffe6,#ffffffb8)}.canvas-audio-player__slider--volume{display:block;width:100%;--canvas-audio-slider-track-height: 6px;--canvas-audio-slider-thumb-size: 12px}.canvas-audio-player__slider--volume::-webkit-slider-thumb{border:2px solid rgba(255,255,255,.96);background:linear-gradient(180deg,#fff,#f8fbff);box-shadow:0 0 0 1px #2563eb24,0 4px 10px #0f172a24}.canvas-audio-player__slider--volume::-moz-range-thumb{border:2px solid rgba(255,255,255,.96);background:linear-gradient(180deg,#fff,#f8fbff);box-shadow:0 0 0 1px #2563eb24,0 4px 10px #0f172a24}.canvas-audio-player__close{grid-area:close;justify-self:end;color:#475569d1}.canvas-audio-player__toggle{justify-self:end;color:#475569d1}.canvas-audio-player__switch-toggle{grid-area:switch}.canvas-audio-player__mode-toggle{grid-area:mode}.canvas-audio-player__speed-toggle{grid-area:speed}.canvas-audio-player__layout-toggle{grid-area:toggle}.canvas-audio-player--positioned{left:auto;transform:none}.canvas-audio-player--dragging{cursor:grabbing;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:none}.canvas-audio-player__queue-trigger{cursor:grab}.canvas-audio-player--dragging .canvas-audio-player__queue-trigger{cursor:grabbing}.canvas-audio-player--vertical{width:236px;grid-template-columns:32px 1fr auto auto auto auto auto;grid-template-areas:"cover meta speed mode switch toggle close" "controls controls controls controls controls controls controls" "progress progress progress progress progress progress progress";border-radius:16px;gap:4px 8px;padding:8px 10px}.canvas-audio-player--vertical .canvas-audio-player__volume,.canvas-audio-player--vertical .canvas-audio-player__time{display:none}.canvas-audio-player--vertical .canvas-audio-player__progress{grid-template-columns:minmax(0,1fr);gap:0}.canvas-audio-player--vertical .canvas-audio-player__controls{justify-content:center;justify-self:center}.canvas-audio-player--vertical .canvas-audio-player__queue-indicator{display:none}.canvas-audio-player--vertical .canvas-audio-player__toggle{display:inline-flex}.canvas-audio-player--vertical .canvas-audio-player__queue-trigger{grid-column:1/3;grid-template-columns:32px minmax(0,1fr);grid-template-areas:"cover meta"}.canvas-audio-player--vertical .canvas-audio-player__slider--progress{--canvas-audio-slider-track-height: 4px;--canvas-audio-slider-thumb-size: 10px}.canvas-audio-player--vertical .canvas-audio-player__playlist{left:0;width:100%}@media(max-width:768px){.canvas-audio-player--vertical{left:50%;transform:translate(-50%);width:236px}}.canvas-audio-player__playlist{position:absolute;top:calc(100% + 10px);left:0;right:0;width:auto;max-width:100%;max-height:min(360px,100vh - 160px);padding:8px;display:grid;gap:6px;overflow-y:auto;overflow-x:hidden;box-sizing:border-box;border-radius:20px;background:#fffffff7;border:1px solid rgba(148,163,184,.16);box-shadow:0 18px 48px #0f172a24;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);scrollbar-width:none;-ms-overflow-style:none}.canvas-audio-player__playlist::-webkit-scrollbar{display:none}.canvas-audio-player__playlist-tabs{flex-shrink:0;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}.canvas-audio-player__playlist-tabs::-webkit-scrollbar{display:none}.canvas-audio-player__playlist-tabs .audio-playlist-tabs__chip,.canvas-audio-player__playlist-tabs .audio-playlist-tabs__create{padding:3px 8px;font-size:11px}.canvas-audio-player__playlist-list{min-width:0}.canvas-audio-player__playlist-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:80px;color:#64748b;font-size:12px}@media(max-width:768px){.canvas-audio-player__queue-trigger{grid-template-columns:32px minmax(0,1fr) auto;gap:8px}.canvas-audio-player__cover{width:32px;height:32px;border-radius:10px}.canvas-audio-player__meta{align-self:center;padding-top:0}.canvas-audio-player__title{font-size:12px}.canvas-audio-player__subtitle{margin-top:1px}.canvas-audio-player__subtitle-text--desktop{display:none}.canvas-audio-player__subtitle-text--mobile{display:block;font-size:9px;line-height:1.2;letter-spacing:.01em;text-transform:none}.canvas-audio-player__controls{justify-self:end;align-self:center;gap:2px;padding-top:0}.canvas-audio-player__volume{display:none}.canvas-audio-player__playlist{left:0;top:calc(100% + 8px);width:100%;max-height:min(300px,100vh - 180px);border-radius:16px}.canvas-audio-player__action,.canvas-audio-player__close{width:30px;height:30px}.canvas-audio-player__action--primary{width:34px;height:34px;box-shadow:0 6px 14px #2563eb2e}.canvas-audio-player__close{align-self:center;margin-top:0;color:#475569ad}.canvas-audio-player__progress{grid-template-columns:minmax(0,1fr);gap:0;margin-top:-1px;padding:0 2px 1px 0}.canvas-audio-player__time{display:none}.canvas-audio-player__slider--progress{--canvas-audio-slider-track-height: 3px;--canvas-audio-slider-thumb-size: 10px}.canvas-audio-player__toggle{display:none}}@media(max-width:480px){.canvas-audio-player__cover{width:32px;height:32px}.canvas-audio-player__controls{gap:1px}.canvas-audio-player__action,.canvas-audio-player__close{width:28px;height:28px}.canvas-audio-player__action--primary{width:32px;height:32px}.canvas-audio-player__title{font-size:12px}.canvas-audio-player__subtitle-text--mobile{font-size:9px}.canvas-audio-player__slider--progress{--canvas-audio-slider-track-height: 2.5px;--canvas-audio-slider-thumb-size: 9px}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.comic-creator .comic-page{gap:12px}.comic-creator .comic-story-input{min-height:190px;line-height:1.58}.comic-creator .comic-plan-card{gap:14px}.comic-creator .comic-common-prompt{min-height:120px}.comic-creator .comic-reference-card{align-items:flex-start}.comic-creator .comic-reference-card .reference-image-upload{width:min(100%,280px);max-width:280px}.comic-creator .comic-small-textarea{min-height:72px}.comic-creator .comic-prompt-textarea{min-height:96px}.comic-creator .comic-config-grid,.comic-creator .comic-toolbar{display:grid;grid-template-columns:minmax(220px,1fr) minmax(96px,160px);gap:10px;align-items:end}.comic-creator .comic-toolbar{grid-template-columns:minmax(220px,1fr) auto auto;align-items:center;padding:10px;border-radius:8px;background:#fafafa;border:1px solid rgba(0,0,0,.05)}.comic-creator .comic-field{display:flex;flex-direction:column;gap:6px;min-width:0}.comic-creator .comic-field>span{font-size:12px;font-weight:600;color:#666}.comic-creator .comic-field--model,.comic-creator .comic-field--scenario{min-width:220px}.comic-creator .comic-header-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.comic-creator .comic-link-btn,.comic-creator .comic-primary-btn,.comic-creator .comic-batch-bar button,.comic-creator .comic-plan-actions button,.comic-creator .comic-pdf-upload-btn,.comic-creator .comic-icon-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px}.comic-creator .comic-link-btn svg,.comic-creator .comic-primary-btn svg,.comic-creator .comic-batch-bar button svg,.comic-creator .comic-plan-actions button svg,.comic-creator .comic-pdf-upload-btn svg,.comic-creator .comic-icon-btn svg{flex:0 0 auto}.comic-creator .comic-link-btn{border:none;background:transparent;color:#c97d0a;cursor:pointer;font-size:12px}.comic-creator .comic-scenario-note{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:34px;padding:8px 10px;border-radius:8px;background:#f39c120f;color:#8a5a12;font-size:12px;line-height:1.45}.comic-creator .comic-scenario-note strong{flex:0 0 auto;color:#c97d0a}.comic-creator .comic-scenario-note span{min-width:0;text-align:right}.comic-creator .comic-pdf-row{display:flex;align-items:center;gap:8px;min-height:34px}.comic-creator .comic-pdf-upload-btn{flex:0 0 auto;min-height:32px;padding:7px 10px;border:1px solid rgba(201,125,10,.22);border-radius:8px;background:#f39c1214;color:#9a6108;font-size:12px;font-weight:600;white-space:nowrap;cursor:pointer}.comic-creator .comic-pdf-upload-btn:disabled{cursor:not-allowed;opacity:.55}.comic-creator .comic-pdf-file{display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:100%;padding:6px 8px;border-radius:8px;background:#f7f7f7;color:#555;font-size:12px}.comic-creator .comic-pdf-file span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.comic-creator .comic-pdf-hint{color:#999;font-size:12px}.comic-creator .comic-icon-btn{width:22px;height:22px;padding:0;border:none;border-radius:6px;background:transparent;color:#888;cursor:pointer}.comic-creator .comic-icon-btn:hover{background:#0000000f;color:#c97d0a}.comic-creator .comic-prompt-optimize-btn{flex:0 0 auto}.comic-creator .comic-prompt-optimize-btn:disabled{cursor:not-allowed;opacity:.55}.comic-creator .comic-primary-btn{border:none;border-radius:8px;padding:8px 12px;background:#f39c12;color:#fff;cursor:pointer;font-weight:600}.comic-creator .comic-outline-preview{display:grid;gap:12px;max-height:min(58vh,720px);min-height:0;overflow:auto;padding-right:4px}.comic-creator .comic-outline-preview strong{display:block;margin-bottom:6px;color:#333;font-size:14px;line-height:1.45}.comic-creator .comic-outline-preview__item{min-width:0;padding:10px 12px;border:1px solid rgba(0,0,0,.06);border-radius:8px;background:#fff}.comic-creator .comic-outline-preview__item--common{background:#f39c120d;border-color:#f39c1229}.comic-creator .comic-outline-preview__content{margin:0;max-width:100%;overflow:auto;color:#666;font-family:inherit;font-size:13px;line-height:1.62;white-space:pre-wrap;overflow-wrap:anywhere}.comic-creator .comic-outline-preview__content--json{padding:10px;border-radius:7px;background:#f8f8f8;color:#3f3f3f;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;line-height:1.55;white-space:pre}.comic-creator .comic-segmented{display:inline-flex;padding:3px;border-radius:8px;background:#f0f0f0}.comic-creator .comic-segmented button{min-width:52px;border:none;border-radius:6px;padding:6px 10px;background:transparent;color:#666;cursor:pointer}.comic-creator .comic-segmented button.active{background:#fff;color:#c97d0a;font-weight:600;box-shadow:0 1px 3px #00000014}.comic-creator .comic-segmented button:disabled{cursor:not-allowed;opacity:.55}.comic-creator .comic-segmented--mode{background:#f5f1eb}.comic-creator .comic-segmented--mode button{min-width:108px;padding:7px 12px;font-size:12px}.comic-creator .comic-plan-control-row{display:grid;grid-template-columns:minmax(300px,auto) minmax(240px,1fr);align-items:center;gap:12px;min-height:38px;padding:8px 10px;border-radius:8px;background:#fff;border:1px solid rgba(0,0,0,.06)}.comic-creator .comic-mode-control{display:flex;align-items:center;gap:10px;min-width:0}.comic-creator .comic-mode-control>span{flex:0 0 auto;font-size:12px;font-weight:600;color:#555}.comic-creator .comic-field--inline-model{width:min(100%,520px);justify-self:end}.comic-creator .comic-plan-progress{margin:0;padding:9px 12px}.comic-creator .comic-plan-actions{padding-top:0;gap:12px}.comic-creator .comic-plan-actions button{min-height:42px;font-size:12px;font-weight:600;white-space:nowrap}.comic-creator .comic-batch-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px;border-radius:8px;background:#fafafa;border:1px solid rgba(0,0,0,.05)}.comic-creator .comic-batch-bar button{border:none;border-radius:8px;padding:8px 12px;background:#f4f4f4;color:#555;cursor:pointer}.comic-creator .comic-batch-bar button:hover{background:#f39c121a}.comic-creator .comic-batch-bar--generation{display:flex;flex-wrap:nowrap;align-items:center;gap:10px;margin-top:2px}.comic-creator .comic-batch-bar--generation .comic-selection-check{min-height:36px;margin-right:auto}.comic-creator .comic-batch-bar--generation button{min-height:36px;white-space:nowrap;flex:0 0 auto}.comic-creator .comic-batch-bar--generation>.comic-primary-btn{min-width:112px;background:#f39c12;color:#fff;font-weight:600}.comic-creator .comic-batch-bar--generation>.comic-primary-btn:hover{background:#e58d05}.comic-creator .comic-generation-model{display:inline-flex;flex:0 0 auto;min-width:0}.comic-creator .comic-generation-model .model-dropdown__trigger--minimal{min-height:36px;padding:6px 10px;border-radius:8px;background:#f4f4f4}.comic-creator .comic-generation-model .model-dropdown__trigger--minimal:hover{background:#f39c121a}.comic-creator .comic-generation-params{display:inline-flex;flex:0 1 auto;min-width:0;max-width:180px}.comic-creator .comic-generation-mode-check{min-height:36px;display:inline-flex;flex:0 0 auto;align-items:center;gap:6px;padding:0 10px;border-radius:8px;background:#f4f4f4;color:#555;font-size:12px;font-weight:600;white-space:nowrap;cursor:pointer}.comic-creator .comic-generation-mode-check input{width:14px;height:14px;margin:0;accent-color:#f39c12;cursor:pointer}.comic-creator .comic-generation-mode-check input:disabled{cursor:not-allowed}.comic-creator .comic-generation-mode-check:hover{background:#f39c121a}.comic-creator .comic-generation-mode-check.is-disabled{cursor:not-allowed;opacity:.55}.comic-creator .comic-generation-count{min-height:36px;display:inline-flex;flex:0 0 auto;align-items:center;gap:6px;padding:0 8px;border-radius:8px;background:#f4f4f4;color:#666;font-size:12px;white-space:nowrap}.comic-creator .comic-generation-count:hover{background:#f39c121a}.comic-creator .comic-generation-count-select{min-width:58px;border:none;background:transparent;color:#333;font:inherit;font-weight:600;outline:none;cursor:pointer}.comic-creator .comic-generation-count-select:disabled{cursor:not-allowed;opacity:.55}.comic-creator .comic-check{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#666;white-space:nowrap}.comic-creator .comic-check input{margin:0}.comic-creator .comic-page-list,.comic-creator .comic-history-list{display:flex;flex-direction:column;gap:10px}.comic-creator .comic-page-card{border-radius:8px;background:#fff;border:1px solid rgba(0,0,0,.07);overflow:hidden}.comic-creator .comic-page-card__head{display:flex;align-items:center;gap:6px;padding:8px 10px;background:#fafafa;border-bottom:1px solid rgba(0,0,0,.05)}.comic-creator .comic-page-title-row{display:inline-flex;align-items:center;gap:6px;min-width:0;margin-right:auto}.comic-creator .comic-page-title-row .comic-check{flex:0 0 auto;font-weight:600;color:#333}.comic-creator .comic-page-title-label{min-width:0;overflow:hidden;color:#555;font-size:12px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.comic-creator .comic-page-add-btn{flex:0 0 auto}.comic-creator .comic-page-card__body{display:grid;grid-template-columns:minmax(140px,32%) 1fr;gap:10px;padding:10px}.comic-creator .comic-page-preview-pane{display:flex;min-width:0;flex-direction:column;gap:8px}.comic-creator .comic-page-preview{position:relative;min-height:120px;aspect-ratio:16/9;border-radius:8px;overflow:hidden;background:#f4f4f4}.comic-creator .comic-page-preview img{width:100%;height:100%;display:block;-o-object-fit:contain;object-fit:contain;background:#111}.comic-creator .comic-page-preview-image-btn{width:100%;height:100%;display:block;padding:0;border:none;background:transparent;cursor:zoom-in}.comic-creator .comic-page-preview-image-btn:focus-visible{outline:2px solid rgba(243,156,18,.75);outline-offset:-2px}.comic-creator .comic-page-preview-action{position:absolute;right:8px;bottom:8px;z-index:1;display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;padding:6px 10px;border:none;border-radius:8px;background:#ffffffeb;color:#c97d0a;cursor:pointer;font-size:12px;font-weight:600;box-shadow:0 4px 14px #00000024}.comic-creator .comic-page-preview-action svg{flex:0 0 auto}.comic-creator .comic-page-preview-action:hover:not(:disabled){background:#fff7ec;color:#b56f05}.comic-creator .comic-page-preview-action:disabled{cursor:not-allowed;opacity:.55}.comic-creator .comic-page-variant-strip{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px}.comic-creator .comic-page-library-fallback{display:flex;justify-content:flex-end;min-height:36px}.comic-creator .comic-page-library-btn{width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid rgba(243,156,18,.22);border-radius:8px;background:#fff;color:#c97d0a;cursor:pointer;box-shadow:0 2px 8px #0000000f}.comic-creator .comic-page-library-btn svg{flex:0 0 auto}.comic-creator .comic-page-library-btn:hover{border-color:#f39c1275;background:#fff7ec;color:#b56f05}.comic-creator .comic-page-library-btn:focus-visible{outline:2px solid rgba(243,156,18,.65);outline-offset:2px}.comic-creator .comic-page-variant-thumb{position:relative;width:54px;height:34px;flex:0 0 auto;overflow:hidden;padding:0;border:2px solid transparent;border-radius:6px;background:#eee;cursor:pointer}.comic-creator .comic-page-variant-thumb img{width:100%;height:100%;display:block;-o-object-fit:cover;object-fit:cover}.comic-creator .comic-page-variant-thumb span{position:absolute;right:3px;bottom:2px;min-width:14px;padding:1px 4px;border-radius:999px;background:#0009;color:#fff;font-size:10px;line-height:1.2}.comic-creator .comic-page-variant-thumb:hover:not(:disabled){border-color:#f39c1273}.comic-creator .comic-page-variant-thumb:disabled{cursor:not-allowed;opacity:.6}.comic-creator .comic-page-variant-thumb--active{border-color:#f39c12}.comic-creator .comic-page-placeholder{width:100%;height:100%;min-height:100px;display:flex;align-items:center;justify-content:center;color:#aaa;background:repeating-linear-gradient(45deg,#f6f6f6,#f6f6f6 8px,#efefef 8px,#efefef 16px)}.comic-creator .comic-page-editor{display:flex;min-width:0;flex-direction:column;gap:8px}.comic-creator .comic-page-unified-prompt{min-height:182px;line-height:1.55}.comic-creator .comic-status{padding:3px 7px;border-radius:999px;font-size:11px;color:#777;background:#eee}.comic-creator .comic-status--running,.comic-creator .comic-status--queued{color:#c97d0a;background:#f39c121f}.comic-creator .comic-status--succeeded{color:#16825d;background:#16825d1f}.comic-creator .comic-status--failed,.comic-creator .comic-status--cancelled{color:#c0392b;background:#e74c3c1a}.comic-creator .comic-export-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.comic-creator .comic-export-card{min-height:92px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;border:1px solid rgba(0,0,0,.06);border-radius:8px;background:#fff;color:#555;cursor:pointer}.comic-creator .comic-export-card:hover:not(:disabled){border-color:#f39c1259;color:#c97d0a}.comic-creator .comic-export-card:disabled{cursor:not-allowed;opacity:.55}.comic-creator .comic-history-filters{display:grid;grid-template-columns:1fr 120px;gap:8px}.comic-creator .comic-history-empty{min-height:180px}.comic-creator .comic-history-item{display:grid;grid-template-columns:1fr auto;gap:8px;padding:10px;border-radius:8px;background:#fafafa;border:1px solid rgba(0,0,0,.05)}.comic-creator .comic-history-main{min-width:0;border:none;background:transparent;text-align:left;cursor:pointer}.comic-creator .comic-history-main strong,.comic-creator .comic-history-main span,.comic-creator .comic-history-main p{display:block}.comic-creator .comic-history-main strong{color:#333;margin-bottom:4px}.comic-creator .comic-history-main span{color:#999;font-size:12px;margin-bottom:4px}.comic-creator .comic-history-main p{margin:0;color:#666;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.comic-creator .comic-history-actions{display:flex;gap:4px}.comic-creator .comic-history-actions button{width:28px;height:28px;border:none;border-radius:6px;background:#fff;color:#888;cursor:pointer}.comic-creator .comic-history-actions button:hover{color:#c97d0a}@media(max-width:640px){.comic-creator .comic-config-grid,.comic-creator .comic-toolbar,.comic-creator .comic-page-card__body,.comic-creator .comic-plan-control-row,.comic-creator .comic-history-filters{grid-template-columns:1fr}.comic-creator .comic-plan-control-row,.comic-creator .comic-mode-control,.comic-creator .comic-batch-bar--generation,.comic-creator .comic-pdf-row,.comic-creator .comic-scenario-note{align-items:stretch;flex-direction:column}.comic-creator .comic-batch-bar--generation{flex-wrap:wrap}.comic-creator .comic-batch-bar--generation .comic-generation-model,.comic-creator .comic-batch-bar--generation .comic-generation-params,.comic-creator .comic-batch-bar--generation .comic-generation-count,.comic-creator .comic-batch-bar--generation .comic-generation-mode-check,.comic-creator .comic-batch-bar--generation .comic-segmented,.comic-creator .comic-batch-bar--generation button{width:100%}.comic-creator .comic-batch-bar--generation .comic-selection-check{margin-right:0}.comic-creator .comic-batch-bar--generation .comic-generation-params{max-width:none}.comic-creator .comic-scenario-note span{text-align:left}.comic-creator .comic-export-grid{grid-template-columns:1fr}.comic-creator .comic-field--inline-model{width:100%;justify-self:stretch}}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./startup-app-BruT4WBY.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{mh as ja,mg as va,mi as ka,mf as Ma,bi as _t,lG as dt,dk as ee,lJ as $e,lL as Ta,lO as Aa,lC as Ia,lD as Ea,r as l,aM as tn,b_ as Fa,fo as Oa,il as rt,a9 as Ce,eV as bn,aQ as nn,dH as ot,M as O,a0 as mt,aA as $a,is as za,it as Da,mp as Ra,bz as ct,dV as an,gJ as La,gK as Ua,j as s,lE as Ba,a7 as sn,ad as Ga,mq as Va,ih as rn,B as z,X as Ja,mr as on,m as cn,f$ as Ha,k as Ka,le as Ya,lf as qa,d8 as ln,c$ as Wa,d4 as Xa,ms as Za,D as Qa,eo as ei}from"./startup-app-BmKsISci.js";import{au as ti,y as un,af as ni,H as gt,M as dn,T as mn}from"./ai-chat-CbA4VxVi.js";import{P as ai}from"./ParametersDropdown-yEFuMwP3.js";import{u as ii}from"./VideoAnalyzer-DD1ikZBf.js";import{u as si}from"./useMediaViewer-g_sRo1wu.js";import{M as ri}from"./tool-windows-BJIgtPhd.js";/* empty css *//* empty css */import{R as oi}from"./ResizableDivider-4YaXoujg.js";import{_ as Ue}from"./startup-runtime-DTmhLESk.js";/* empty css */const ze=6,ci=1,li=60,oe="16x9",ui=5;function Se(e){const a=typeof e=="number"?e:typeof e=="string"?Number.parseInt(e,10):Number.NaN;return Number.isFinite(a)?Math.min(li,Math.max(ci,Math.floor(a))):ze}function di(e){const a=Se(e.pageCount),t=String(e.userPrompt||"").trim(),r=String(e.stylePrompt||"").trim(),c=String(e.scenarioContext||"").trim(),u=String(e.pdfAttachmentName||"").trim(),g=e.inputMode||"text",f=["语言要求:","- 自动识别用户创作需求的主要语言,并使用同一种语言输出 title、commonPrompt、pages[].title、pages[].script、pages[].prompt 和 notes。","- 如果用户用中文提出需求,除 JSON 字段名、结构化对象键、品牌名、专有名词和必要技术标识外,所有可读内容都必须使用中文,不要把图片提示词改写成英文。","- pages[].prompt 是生成页唯一主要编辑入口,必须自包含:同时写清本页主题、画面主体、构图、必要文案/信息点、风格和色彩,不要依赖 pages[].script 才能理解画面。","- pages[].prompt 不要以「整套连环画统一设定」等全局设定开头;公共视觉基准放在 commonPrompt,每页 prompt 只写本页对应的场景引导和画面要求。","- 后续页面要延续创作场景和前文视觉/叙事语气,但必须给出本页独立的画面主体、构图、信息重点和情绪/文案引导。"].join(`
|
|
3
|
+
`),p=u?[`参考 PDF:本次请求附带 PDF「${u}」。`,"- 请优先阅读 PDF 内容,提取其中的事实信息、品牌/产品定位、结构层级、关键词、视觉线索和可转化为页面的重点。","- 用户创作需求用于限定目标和取舍;PDF 是主要素材来源。若两者冲突,以用户创作需求为准。","- 不要只复述 PDF 原文,要把 PDF 信息重组为适合当前创作场景的多页图文方案。"].join(`
|
|
4
|
+
`):"",v=g==="json"?["提示词类型:结构化 JSON 提示词。","- pages[].prompt 必须生成给图片模型使用的结构化 JSON,可直接返回对象,也可返回 JSON 字符串。","- 结构化 JSON 的字段名可保持英文,但所有字符串取值必须遵守语言要求。","- commonPrompt 可使用结构化对象描述全局视觉一致性,重点包含系列统一风格、色板、字体、角色/品牌一致性。","- 不要把用户输入当成 JSON schema 原样补全;请结合用户需求和 PDF 内容重新策划。",ti("zh")].join(`
|
|
5
|
+
`):["提示词类型:文本提示词。","- commonPrompt 和 pages[].prompt 使用自然语言图片提示词,表达完整画面、风格和一致性要求。","- pages[].prompt 必须是可直接送给图片模型的完整单页提示词。"].join(`
|
|
6
|
+
`);return`你是多页图文内容策划和图像提示词工程师。请根据用户创作需求、创作场景和参考资料,规划 ${a} 页可生成图片的图文方案,并只返回合法 JSON。
|
|
7
|
+
|
|
8
|
+
用户创作需求:
|
|
9
|
+
${t||"围绕一个完整主题创作多页连环图文。"}
|
|
10
|
+
|
|
11
|
+
${p?`${p}
|
|
12
|
+
`:""}
|
|
13
|
+
|
|
14
|
+
${c?`${c}
|
|
15
|
+
`:""}
|
|
16
|
+
${r?`风格补充:
|
|
17
|
+
${r}
|
|
18
|
+
`:""}
|
|
19
|
+
${f}
|
|
20
|
+
|
|
21
|
+
JSON 字段要求:
|
|
22
|
+
- title: 作品标题
|
|
23
|
+
- commonPrompt: 所有页面共用的角色、画风、时代、色彩、构图一致性提示词
|
|
24
|
+
- pages: 长度为 ${a} 的数组,每项包含 title、script、prompt,可选 notes
|
|
25
|
+
|
|
26
|
+
${v}
|
|
27
|
+
|
|
28
|
+
输出要求:
|
|
29
|
+
1. 只返回 JSON,不要 markdown。
|
|
30
|
+
2. pages 必须严格为 ${a} 页。
|
|
31
|
+
3. script 写本页文案、页面说明或画面内容,prompt 写给图像模型的单页画面提示词。
|
|
32
|
+
4. commonPrompt 不要重复塞进每页 prompt,但每页 prompt 要能独立表达画面。`}function mi(e){const a=String(e||"").trim();if(!a)throw new Error("响应为空,未找到有效 JSON");const t=a.match(/```(?:json)?\s*([\s\S]*?)```/i),r=(t==null?void 0:t[1])||a,c=r.indexOf("{"),u=r.lastIndexOf("}");if(c<0||u<=c)throw new Error("响应中未找到有效 JSON");return r.slice(c,u+1)}function pe(e){return typeof e=="string"?e.trim():""}function De(e){if(typeof e=="string")return e.trim();if(e&&typeof e=="object")try{return JSON.stringify(e,null,2)}catch{return""}return""}function gi(e,a="未生成"){const t=De(e);if(!t)return{text:a,isJson:!1};if(!/^[{[]/.test(t))return{text:t,isJson:!1};try{const r=JSON.parse(t);return!r||typeof r!="object"?{text:t,isJson:!1}:{text:JSON.stringify(r,null,2),isJson:!0}}catch{return{text:t,isJson:!1}}}function Ne(e,a){let t=pe(e);const r=/^第\s*\d+\s*页\s*[::、,,.\-\s]*/;for(;r.test(t);)t=t.replace(r,"").trim();return t||`第 ${a} 页(待补全)`}function pi(e,a){const t=JSON.parse(mi(e)),r=Se(a),u=(Array.isArray(t.pages)?t.pages:[]).slice(0,r).map((g,f)=>({title:Ne(g==null?void 0:g.title,f+1),script:pe(g==null?void 0:g.script),prompt:De(g==null?void 0:g.prompt),notes:pe(g==null?void 0:g.notes)}));for(;u.length<r;){const g=u.length+1;u.push({title:`第 ${g} 页(待补全)`,script:"",prompt:"",notes:""})}return{title:pe(t.title)||"未命名连环画",commonPrompt:De(t.commonPrompt),pages:u}}function fi(e){return e.pages.map((a,t)=>{const r=t+1;return{id:`page-${String(r).padStart(2,"0")}`,pageNumber:r,title:Ne(a.title,r),script:pe(a.script),prompt:De(a.prompt),notes:pe(a.notes)||void 0,status:"draft"}})}function hi(e){const a=H(e.commonPrompt||""),t=H(e.pagePrompt||""),r=H(e.script||""),c=H(e.title||""),u=Math.max(1,Math.floor(e.pageNumber||1)),g=Se(e.pageCount||u),f=H(e.size||oe);return[a?`【创作场景基准】
|
|
33
|
+
${a}`:"",`【当前页场景】第 ${u}/${g} 页${c?`:${c}`:""}`,r?`【本页内容引导】
|
|
34
|
+
${r}`:"",t?`【本页图像提示词】
|
|
35
|
+
${t}`:"",`【画面要求】画幅 ${f},整页连环画成品图,文字如需出现必须自然融入画面,不要出现提示词字段名、JSON 或说明文字。`].filter(Boolean).join(`
|
|
36
|
+
|
|
37
|
+
`)}function _i(e,a){return a<=0?0:e==="serial"?1:Math.min(ui,a)}function yi(e){const a=e.selectedPageIds||new Set;return e.pages.filter(t=>e.singlePageId?t.id===e.singlePageId:a.has(t.id)).slice().sort((t,r)=>t.pageNumber-r.pageNumber)}function yt(e){return typeof e=="string"&&e.startsWith("data:")}function Re(e,a){const t=String(e.url||"").trim();return!t||yt(t)?null:{id:e.id||e.taskId||`${t}-${e.generatedAt||""}-${a}`,url:t,mimeType:e.mimeType,generatedAt:e.generatedAt,taskId:e.taskId}}function bi(e){const a=String(e||"").trim();if(a)return a.includes("/")?a:`image/${a}`}function xn(e){const a=Array.isArray(e.urls)&&e.urls.length>0?e.urls:e.url?[e.url]:[],t=bi(e.format);return a.map((r,c)=>Re({id:e.taskId?c===0?e.taskId:`${e.taskId}-${c+1}`:void 0,url:r,mimeType:t,generatedAt:e.generatedAt,taskId:e.taskId},c)).filter(r=>!!r)}function K(e){const t=(Array.isArray(e.imageVariants)?e.imageVariants:[]).map((c,u)=>Re(c,u)).filter(c=>!!c);if(e.imageUrl&&!yt(e.imageUrl)){const c=Re({id:`${e.id}-current-${e.imageGeneratedAt||t.length}`,url:e.imageUrl,mimeType:e.imageMimeType,generatedAt:e.imageGeneratedAt},t.length);c&&t.push(c)}const r=new Set;return t.filter(c=>r.has(c.url)?!1:(r.add(c.url),!0))}function Cn(e){return(e==null?void 0:e.pages.filter(a=>K(a).length>0).length)||0}function pt(e){return(e==null?void 0:e.pages.reduce((a,t)=>a+K(t).length,0))||0}function ft(e,a){const t=K(e),r=new Set(t.map(g=>g.url)),c=[...t];a.forEach((g,f)=>{const p=Re(g,t.length+f);!p||r.has(p.url)||(r.add(p.url),c.push(p))});const u=c[c.length-1];return{...e,imageVariants:c.length>0?c:void 0,imageUrl:(u==null?void 0:u.url)||e.imageUrl,imageMimeType:(u==null?void 0:u.mimeType)||e.imageMimeType,imageGeneratedAt:(u==null?void 0:u.generatedAt)||e.imageGeneratedAt}}function xi(e,a){const t=K(e),r=t.find(c=>c.id===a);return r?{...e,imageVariants:t,imageUrl:r.url,imageMimeType:r.mimeType,imageGeneratedAt:r.generatedAt}:e}function H(e){return e.replace(/\r\n/g,`
|
|
38
|
+
`).trim()}function Ci(e){const a=[`# ${H(e.title)||"未命名连环画"}`],t=H(e.commonPrompt||"");t&&a.push("","## 通用提示词","",t),a.push("","## 分页脚本");for(const r of e.pages){a.push("",`### 第 ${r.pageNumber} 页:${H(r.title)||"未命名"}`,"","#### 脚本","",H(r.script)||"(空)","","#### 图像提示词","",H(r.prompt)||"(空)");const c=H(r.notes||"");c&&a.push("","#### 备注","",c)}return`${a.join(`
|
|
39
|
+
`)}
|
|
40
|
+
`}function wn(e){const a=K(e);if(!yt(e.imageUrl))return{...e,imageVariants:a.length>0?a:void 0};const{imageUrl:t,...r}=e;return{...r,imageVariants:a.length>0?a:void 0}}const Be="comic-creator:records",wi=50;function Ge(e){return{...e,starred:!!e.starred,pages:Array.isArray(e.pages)?e.pages.map(wn):[]}}async function bt(){return Ma(Be,{normalizeRecord:Ge})}async function Pi(e){return va(Be,e,wi,{normalizeRecord:Ge})}async function fe(e,a){return ja(Be,e,Ni(a),{normalizeRecord:Ge})}async function Si(e){return ka(Be,e,{normalizeRecord:Ge})}function Ni(e){return e.pages?{...e,pages:e.pages.map(wn)}:e}function xt(e){return Aa(e,"comicCreatorAction",["outline","page-image"])}function Pn(e){return xt(e)!==null}function Sn(e){var a,t,r;return((a=e.error)==null?void 0:a.message)||((r=(t=e.error)==null?void 0:t.details)==null?void 0:r.originalError)||"任务失败"}function ji(e){return Pn(e)&&(e.status===ee.COMPLETED||e.status===ee.FAILED||e.status===ee.CANCELLED)}async function vi(e){if(e.type!==_t.CHAT||xt(e)!=="outline")return null;const a=dt(e,"comicCreatorRecordId");if(!a)return null;const r=(await bt()).find(c=>c.id===a);if(!r||r.pendingOutlineTaskId!==e.id)return null;if(e.status===ee.FAILED||e.status===ee.CANCELLED)return $e(r,{pendingOutlineTaskId:null,outlineError:e.status===ee.CANCELLED?"提示词规划已取消":Sn(e),updatedAt:Date.now()},fe);if(e.status!==ee.COMPLETED)return null;try{const c=pi(Ta(e),e.params.comicCreatorPageCount||r.pageCount),u=fi(c);return $e(r,{title:c.title,commonPrompt:c.commonPrompt,pageCount:u.length,pages:u,textModel:String(e.params.model||r.textModel||""),textModelRef:e.params.modelRef||r.textModelRef||null,pendingOutlineTaskId:null,outlineError:void 0,updatedAt:Date.now()},fe)}catch(c){return $e(r,{pendingOutlineTaskId:null,outlineError:c instanceof Error?c.message:"提示词规划返回格式错误,请重试",updatedAt:Date.now()},fe)}}async function ki(e){if(e.type!==_t.IMAGE||xt(e)!=="page-image")return null;const a=dt(e,"comicCreatorRecordId"),t=dt(e,"comicCreatorPageId");if(!a||!t)return null;const c=(await bt()).find(p=>p.id===a);if(!c)return null;const u=c.pages.find(p=>p.id===t),g=new Set([u==null?void 0:u.taskId,...(u==null?void 0:u.taskIds)||[]].filter(p=>!!p));if(!u||!g.has(e.id))return null;const f=c.pages.map(p=>{var v;if(p.id!==t)return p;if(e.status===ee.COMPLETED&&((v=e.result)!=null&&v.url)){const y=xn({taskId:e.id,url:e.result.url,urls:e.result.urls,format:e.result.format,generatedAt:e.completedAt||Date.now()});return{...ft(p,y),status:"succeeded",error:void 0}}return e.status===ee.FAILED?{...p,status:"failed",error:Sn(e)}:e.status===ee.CANCELLED?{...p,status:"cancelled",error:"图片生成已取消"}:p});return f===c.pages?null:$e(c,{pages:f,updatedAt:Date.now()},fe)}const je="travel-brochure",Mi=[{id:"brochure",label:"宣传册",category:"商业宣传",description:"把产品、服务或目的地包装成多页宣传册。",audience:"潜在客户与合作伙伴",style:"高端品牌画册,版式清爽,视觉统一",pageFocus:["封面卖点","核心价值","场景展示","信任背书","行动号召"]},{id:"product-manual",label:"产品手册",category:"商业宣传",description:"拆解产品功能、优势和使用场景。",audience:"产品用户与销售团队",style:"科技产品说明图,干净专业,信息清晰",pageFocus:["产品概览","功能亮点","使用流程","对比优势","购买理由"]},{id:"investment-deck",label:"招商册",category:"商业宣传",description:"突出项目机会、商业模式和合作收益。",audience:"投资人、加盟商与渠道伙伴",style:"商务招商视觉,稳重可信,数据感强",pageFocus:["机会背景","项目优势","盈利模式","资源支持","合作邀请"]},{id:"brand-album",label:"品牌画册",category:"商业宣传",description:"展示品牌理念、调性和代表作品。",audience:"品牌客户与媒体访客",style:"品牌视觉大片,精致统一,具有识别度",pageFocus:["品牌理念","视觉资产","代表案例","用户感受","品牌愿景"]},{id:"company-profile",label:"企业介绍",category:"商业宣传",description:"讲清企业能力、团队和案例。",audience:"客户、候选人和合作方",style:"现代企业介绍,可信、简洁、有秩序",pageFocus:["企业定位","团队能力","产品服务","客户案例","未来方向"]},{id:"event-guide",label:"活动指南",category:"商业宣传",description:"为活动生成流程、亮点和现场指引。",audience:"活动参与者",style:"活力活动手册,明快、易读、导览感强",pageFocus:["活动入口","时间安排","重点环节","现场服务","结束回顾"]},{id:"course-intro",label:"课程介绍",category:"商业宣传",description:"介绍课程目标、内容和学习收获。",audience:"学习者和家长",style:"教育课程宣传,亲和、清晰、可信赖",pageFocus:["学习痛点","课程体系","课堂体验","成果展示","报名引导"]},{id:"expo-guide",label:"展会导览",category:"商业宣传",description:"生成展位、动线和重点展品导览。",audience:"展会观众和参展商",style:"展会导览图文,空间感强,信息密度适中",pageFocus:["入口导览","展区分布","重点展品","互动体验","离场信息"]},{id:"real-estate-space",label:"楼盘/空间介绍",category:"商业宣传",description:"展示楼盘、商业空间或文旅空间。",audience:"购房者、租户与参观者",style:"空间设计画册,明亮通透,质感高级",pageFocus:["区位入口","空间规划","生活场景","配套资源","预约参观"]},{id:"travel-brochure",label:"城市文旅宣传",category:"商业宣传",description:"把城市、路线或旅行产品做成多页文旅宣传图。",audience:"旅行者与高定游客户",style:"高定旅行连环画,明亮精致,地域文化突出",pageFocus:["目的地印象","路线亮点","美食体验","人文故事","旅行收束"]},{id:"storybook",label:"绘本",category:"儿童与教育",description:"生成适合儿童阅读的温暖绘本。",audience:"儿童与亲子共读家庭",style:"温暖绘本插画,角色可爱,色彩柔和",pageFocus:["角色登场","小冲突","探索过程","情感转折","温暖结尾"]},{id:"science-reader",label:"科普读物",category:"儿童与教育",description:"把知识点变成易懂的图文科普。",audience:"青少年和大众读者",style:"科普插画,准确清楚,富有好奇心",pageFocus:["问题引入","概念解释","过程拆解","生活例子","知识总结"]},{id:"knowledge-comic",label:"知识漫画",category:"儿童与教育",description:"用漫画方式讲一个知识主题。",audience:"学生和自学者",style:"轻松知识漫画,分镜清楚,重点突出",pageFocus:["提出问题","误区对比","核心知识","练习应用","复盘总结"]},{id:"history-story",label:"历史故事",category:"儿童与教育",description:"把历史事件或时代片段讲成连环画。",audience:"历史学习者",style:"历史插画,时代细节准确,叙事庄重",pageFocus:["时代背景","关键人物","事件推进","影响结果","历史启示"]},{id:"biography",label:"人物传记",category:"儿童与教育",description:"展现人物成长、选择和成就。",audience:"学生与人物故事读者",style:"传记插画,真实可信,情感克制",pageFocus:["童年背景","关键选择","重要挑战","代表成就","精神遗产"]},{id:"classroom-slides",label:"课堂课件",category:"儿童与教育",description:"生成适合课堂讲解的图文页。",audience:"教师和学生",style:"课堂视觉辅助,简洁明快,重点明确",pageFocus:["课程导入","知识讲解","案例演示","互动练习","课堂总结"]},{id:"parent-child-reading",label:"亲子阅读",category:"儿童与教育",description:"强调亲子陪伴和互动提问。",audience:"亲子家庭",style:"亲子阅读绘本,柔和、安全、互动感强",pageFocus:["亲子场景","共同发现","提问互动","情绪表达","陪伴结尾"]},{id:"language-learning",label:"语言学习",category:"儿童与教育",description:"用场景图帮助词汇、句型或对话学习。",audience:"语言学习者",style:"语言学习卡通图,场景明确,表达自然",pageFocus:["词汇场景","句型示范","角色对话","纠错提示","复习应用"]},{id:"experiment-steps",label:"实验步骤",category:"儿童与教育",description:"把实验过程拆成安全清晰的步骤图。",audience:"学生和实验课教师",style:"实验流程插图,步骤清楚,安全提示醒目",pageFocus:["材料准备","步骤一","观察变化","结果解释","安全收尾"]},{id:"campus-publication",label:"校园刊物",category:"儿童与教育",description:"做成校园报道、社团或班级刊物。",audience:"师生与家长",style:"校园刊物插画,青春、明亮、有记录感",pageFocus:["校园主题","人物活动","成果展示","同学声音","集体记忆"]},{id:"newspaper-serial",label:"报刊连载",category:"媒体出版",description:"生成连续报道或连载图文。",audience:"报刊读者",style:"报刊插画,黑白灰层次清楚,叙事紧凑",pageFocus:["导语","事件现场","人物观点","背景补充","结尾悬念"]},{id:"magazine-feature",label:"杂志专题",category:"媒体出版",description:"适合专题报道和视觉专题页。",audience:"杂志读者",style:"杂志专题视觉,构图讲究,图文高级",pageFocus:["专题封面","核心观点","人物/地点","细节特写","专题结论"]},{id:"travel-magazine",label:"旅行杂志",category:"媒体出版",description:"以杂志方式呈现目的地体验。",audience:"旅行爱好者",style:"旅行杂志插画,电影感、地域感、生活方式感",pageFocus:["目的地开场","路线体验","当地人物","美食风物","旅行建议"]},{id:"food-column",label:"美食栏目",category:"媒体出版",description:"围绕菜品、餐厅或城市美食展开。",audience:"美食读者",style:"美食栏目插画,食物诱人,氛围鲜活",pageFocus:["招牌食物","制作/来源","用餐场景","人物评价","推荐清单"]},{id:"interview-profile",label:"人物专访",category:"媒体出版",description:"用多页画面表现人物观点和故事。",audience:"媒体读者",style:"人物专访视觉,真实、克制、有镜头感",pageFocus:["人物出场","工作场景","关键观点","生活侧面","金句收尾"]},{id:"news-explainer",label:"新闻图解",category:"媒体出版",description:"把复杂新闻拆成可视化解释。",audience:"新闻读者",style:"新闻信息图插画,客观、清晰、结构化",pageFocus:["发生了什么","为何重要","相关各方","影响范围","后续关注"]},{id:"longform-report",label:"深度报道",category:"媒体出版",description:"呈现调查过程、人物和现场。",audience:"深度内容读者",style:"纪实插画,真实、细节丰富、叙事沉稳",pageFocus:["问题入口","现场证据","人物经历","结构原因","追问结尾"]},{id:"cover-story",label:"封面故事",category:"媒体出版",description:"适合杂志封面级主题故事。",audience:"杂志与内容平台用户",style:"封面故事视觉,强主视觉,高级排版感",pageFocus:["封面画面","主题展开","关键人物","反差细节","余韵收束"]},{id:"editorial-comic",label:"图文社评",category:"媒体出版",description:"用图文表达观点、立场和推理。",audience:"观点内容读者",style:"社评漫画,象征明确,表达克制有力",pageFocus:["观点提出","现象呈现","原因分析","反方提醒","观点落点"]},{id:"community-brief",label:"社区简报",category:"媒体出版",description:"记录社区公告、活动和公共服务。",audience:"社区居民",style:"社区简报插画,亲切、清楚、生活化",pageFocus:["公告主题","服务信息","居民参与","注意事项","联系方式"]},{id:"xhs-post",label:"小红书图文",category:"社交与营销",description:"生成适合小红书发布的多页图文。",audience:"小红书用户",style:"小红书图文,清新、强封面、信息密度适中",pageFocus:["封面钩子","痛点/亮点","步骤/清单","避坑建议","互动结尾"]},{id:"moments-long-image",label:"朋友圈长图",category:"社交与营销",description:"适合朋友圈传播的多页图文。",audience:"微信好友与私域客户",style:"朋友圈长图,温暖真实,轻营销",pageFocus:["情境开场","真实体验","重点信息","价值总结","轻行动"]},{id:"wechat-article-images",label:"公众号配图",category:"社交与营销",description:"为公众号文章生成段落配图。",audience:"公众号读者",style:"公众号配图,稳重耐看,主题统一",pageFocus:["文章开场","核心论点","案例场景","方法总结","结尾金句"]},{id:"short-video-storyboard",label:"短视频分镜",category:"社交与营销",description:"把短视频脚本拆为画面分镜。",audience:"短视频创作者",style:"短视频 storyboard,镜头明确,节奏强",pageFocus:["开头钩子","冲突/反差","展示过程","高潮画面","结尾转化"]},{id:"ad-storyboard",label:"广告 storyboard",category:"社交与营销",description:"用于广告片、TVC 或投放素材前期。",audience:"广告创意团队",style:"广告分镜图,商业质感,镜头语言清晰",pageFocus:["产品出现","用户痛点","解决方案","品牌记忆点","购买行动"]},{id:"festival-posters",label:"节日海报组图",category:"社交与营销",description:"生成节日主题连续海报或祝福组图。",audience:"品牌粉丝和社群用户",style:"节日海报插画,喜庆但不俗套,系列感强",pageFocus:["节日开场","传统元素","产品/品牌融入","祝福场景","收尾海报"]},{id:"event-recap",label:"活动回顾",category:"社交与营销",description:"把活动过程整理成复盘组图。",audience:"参与者、客户和内部团队",style:"活动回顾图文,现场感强,重点清楚",pageFocus:["活动开场","精彩瞬间","嘉宾/用户","成果数据","感谢收尾"]},{id:"case-breakdown",label:"案例拆解",category:"社交与营销",description:"拆解一个案例的方法、过程和结果。",audience:"行业读者和潜在客户",style:"案例拆解图文,专业、结构化、可复用",pageFocus:["案例背景","挑战问题","解决动作","结果展示","可复用经验"]},{id:"recommendation-note",label:"种草笔记",category:"社交与营销",description:"生成产品或目的地种草图文。",audience:"消费决策用户",style:"种草笔记插画,真实体验,细节丰富",pageFocus:["吸引点","使用/体验","细节优点","适合人群","购买/到访建议"]},{id:"checklist-guide",label:"清单攻略",category:"社交与营销",description:"把攻略、步骤或清单做成多页图。",audience:"收藏型内容用户",style:"攻略清单图文,清爽、实用、便于截图保存",pageFocus:["总览清单","准备事项","步骤拆解","避坑提醒","最终总结"]},{id:"classic-comic",label:"连环画",category:"叙事与娱乐",description:"传统多页连环画叙事。",audience:"漫画与故事读者",style:"经典连环画,分镜连贯,叙事清楚",pageFocus:["开端","人物关系","冲突升级","转折","结局"]},{id:"four-panel-comic",label:"四格漫画",category:"叙事与娱乐",description:"四格或短篇幽默漫画结构。",audience:"轻阅读用户",style:"四格漫画,表情夸张,节奏干净",pageFocus:["设定","误会","反转","笑点"]},{id:"multi-page-manga",label:"多页漫画",category:"叙事与娱乐",description:"更丰富的多页剧情漫画。",audience:"漫画读者",style:"现代漫画,镜头丰富,人物一致",pageFocus:["世界设定","角色行动","情绪推进","高潮","悬念"]},{id:"fantasy-adventure",label:"奇幻冒险",category:"叙事与娱乐",description:"奇幻世界、旅程和战斗冒险。",audience:"奇幻故事读者",style:"奇幻冒险插画,宏大、神秘、角色鲜明",pageFocus:["召唤/启程","陌生世界","同伴/敌人","危机战斗","发现秘密"]},{id:"mystery-story",label:"悬疑故事",category:"叙事与娱乐",description:"用多页画面铺设线索和反转。",audience:"悬疑读者",style:"悬疑漫画,光影强烈,线索可见但克制",pageFocus:["异常开场","线索出现","误导","逼近真相","反转"]},{id:"romance-story",label:"恋爱故事",category:"叙事与娱乐",description:"讲述关系、心动和情绪变化。",audience:"情感故事读者",style:"恋爱漫画,细腻、温柔、有生活感",pageFocus:["初遇","靠近","误会/试探","坦白","温柔结尾"]},{id:"urban-daily",label:"都市日常",category:"叙事与娱乐",description:"城市生活、职场和日常小故事。",audience:"都市生活读者",style:"都市日常漫画,真实、轻松、细节生活化",pageFocus:["日常场景","小问题","人物互动","情绪释放","生活感收尾"]},{id:"game-plot",label:"游戏剧情",category:"叙事与娱乐",description:"为游戏任务、剧情或关卡生成分镜。",audience:"游戏策划和玩家",style:"游戏剧情概念图,动作明确,世界观统一",pageFocus:["任务触发","地图探索","NPC 交互","挑战战斗","奖励/伏笔"]},{id:"character-set",label:"角色设定集",category:"叙事与娱乐",description:"多页展示角色外貌、性格和关系。",audience:"创作者和设定读者",style:"角色设定集,设计感强,人物统一",pageFocus:["角色正面","服装道具","性格动作","关系图","代表场景"]},{id:"worldbuilding",label:"世界观设定",category:"叙事与娱乐",description:"展示一个世界的地点、规则和势力。",audience:"创作者和设定爱好者",style:"世界观设定图,宏大、细节丰富、系统感强",pageFocus:["世界概览","地理空间","规则机制","势力人物","故事入口"]},{id:"how-to-guide",label:"操作指南",category:"实用说明",description:"把操作流程做成逐页说明。",audience:"普通用户",style:"操作指南图,步骤清晰,图标化辅助",pageFocus:["准备条件","步骤一","关键操作","常见问题","完成确认"]},{id:"sop-flow",label:"SOP 流程",category:"实用说明",description:"把标准作业流程可视化。",audience:"团队成员和管理者",style:"SOP 流程图文,严谨、清楚、可执行",pageFocus:["流程入口","职责分工","关键步骤","检查标准","异常处理"]},{id:"safety-training",label:"安全培训",category:"实用说明",description:"呈现安全风险、规范和应急动作。",audience:"员工、学生和公众",style:"安全培训插画,警示明确,动作规范",pageFocus:["风险识别","错误示范","正确操作","应急处理","复盘提醒"]},{id:"medical-science",label:"医疗科普",category:"实用说明",description:"把健康知识用非诊断方式讲清楚。",audience:"大众健康读者",style:"医疗科普插画,温和、准确、避免恐吓",pageFocus:["症状/问题","原理解释","日常建议","何时就医","提醒总结"]},{id:"legal-science",label:"法律科普",category:"实用说明",description:"解释法律概念、流程或权益。",audience:"普通公众",style:"法律科普图文,客观、清楚、案例化",pageFocus:["问题场景","法律概念","案例对照","处理步骤","风险提醒"]},{id:"policy-explainer",label:"政策解读",category:"实用说明",description:"把政策条款拆成易懂页面。",audience:"政策相关群体",style:"政策解读图文,正式、清晰、信息分层",pageFocus:["政策对象","核心变化","办理流程","影响说明","注意事项"]},{id:"user-manual",label:"用户手册",category:"实用说明",description:"为产品或服务生成用户手册。",audience:"产品用户",style:"用户手册插图,简洁、准确、低干扰",pageFocus:["功能入口","基础使用","高级功能","问题排查","支持渠道"]},{id:"emergency-plan",label:"应急预案",category:"实用说明",description:"展示突发事件下的行动流程。",audience:"组织成员和公众",style:"应急预案图文,醒目、冷静、步骤明确",pageFocus:["风险发生","第一反应","撤离/处置","联络协作","恢复复盘"]},{id:"recipe-tutorial",label:"菜谱教程",category:"实用说明",description:"把菜谱拆成逐步视觉教程。",audience:"家庭烹饪用户",style:"菜谱教程插画,食材清楚,步骤诱人",pageFocus:["食材准备","处理食材","烹饪过程","装盘细节","口味提示"]},{id:"fitness-plan",label:"健身计划",category:"实用说明",description:"展示训练动作、节奏和注意事项。",audience:"健身用户",style:"健身训练图,动作标准,健康积极",pageFocus:["热身","动作一","动作二","拉伸","计划建议"]}];function Ti(e){return[`请为「${e.label}」创作一组连贯的多页图文。`,"主题:请替换为你的具体主题、产品、地点或事件。",`目标读者:${e.audience}。`,`视觉风格:${e.style}。`,`页面重点依次覆盖:${e.pageFocus.join("、")}。`,"要求每页都给出清晰标题、画面剧情/文案、图片提示词,整套角色、色彩和版式保持一致。"].join(`
|
|
41
|
+
`)}function Ai(e){return JSON.stringify({title:`${e.label}标题`,theme:"请替换为你的具体主题、产品、地点或事件",scenario:e.label,audience:e.audience,style:e.style,characters:[{name:"主角或核心对象",description:"请描述人物、产品、品牌或地点的统一视觉特征"}],pages:e.pageFocus.map((a,t)=>({title:`${t+1}. ${a}`,script:`围绕“${a}”展开本页文案或画面剧情`,prompt:`表现“${a}”的关键画面,保持 ${e.style}`})),visualRules:["整套画风、角色、色彩和版式统一","每页画面重点明确,适合单独成图","如需文字,文字应自然融入画面,避免出现字段名"]},null,2)}const we=Mi.map(e=>({...e,textPrompt:Ti(e),jsonPrompt:Ai(e)}));function Pe(e){return we.find(a=>a.id===e)||we.find(a=>a.id===je)||we[0]}function Fe(e,a){const t=Pe(e);return a==="json"?t.jsonPrompt:t.textPrompt}function gn(e){const a=String(e||"").trim();return a?we.some(t=>t.textPrompt.trim()===a||t.jsonPrompt.trim()===a):!0}function Ii(e){const a=Pe(e),t=a.pageFocus.map((r,c)=>`第 ${c+1} 页:${r}`).join(";");return[`创作场景:${a.category} / ${a.label}`,`场景说明:${a.description}`,`目标读者:${a.audience}`,`场景风格:${a.style}`,`页面引导:${t}。如页数不同,请按该场景节奏扩展或合并。`,"生成要求:后续页面要延续创作场景和前文视觉/叙事语气,但每页必须有独立的场景引导、画面主体、构图和信息重点,避免只套用统一设定。"].join(`
|
|
42
|
+
`)}async function Ct(){return Ue(()=>import("./startup-app-BmKsISci.js").then(e=>e.mw),__vite__mapDeps([0]),import.meta.url)}async function Ei(){return Ue(()=>import("./office-data-BGeIlv11.js").then(e=>e.j),[],import.meta.url)}async function Fi(){return Ue(()=>import("./office-data-BGeIlv11.js").then(e=>e.p),[],import.meta.url)}async function Oi(){return Ue(()=>import("./jspdf.es.min-ClNUHu_u.js").then(e=>e.j),[],import.meta.url)}function Le(e,a="comic"){return String(e||"").trim().replace(/[\\/:*?"<>|]+/g,"-").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,80)||a}function $i(e){return Le(e.title||"comic","comic")}function Nn(e){const a=Math.max(1,Math.floor(e.pageNumber||1)),t=String(a).padStart(2,"0"),r=Number.isFinite(e.variantNumber)?Math.max(1,Math.floor(e.variantNumber||1)):void 0,c=r?`-${r}`:"",u=Le(e.title||"","").replace(/^[||]\s*/,"").trim(),g=u?` ${u}`:"",f=Le(e.extension||"png","png");return`images/page-${t}${g}${c}.${f}`}function zi(e){var u,g;const t=String((e==null?void 0:e.mimeType)||"").toLowerCase().match(/^image\/([a-z0-9.+-]+)$/);if(t)return t[1].replace("jpeg","jpg").replace("svg+xml","svg");const r=String((e==null?void 0:e.url)||""),c=r.match(/^data:image\/([a-z0-9.+-]+)[;,]/i);if(c)return c[1].toLowerCase().replace("jpeg","jpg").replace("svg+xml","svg");try{const f=r.startsWith("/")||!r.includes("://")?r:new URL(r).pathname,p=(g=(u=f.split("/").pop())==null?void 0:u.split(".").pop())==null?void 0:g.toLowerCase();if(p&&p!==f&&/^[a-z0-9]{1,5}$/.test(p))return p}catch{}return"png"}function jn(e,a){return a.find(t=>vn(e,t))}function vn(e,a){return!!a.pageId&&a.pageId===e.id||!!a.pageNumber&&a.pageNumber===e.pageNumber}function Ve(e,a){return a!=null&&a.length?a:e.pages.filter(t=>!!t.imageUrl).map(t=>{var r;return{pageId:t.id,pageNumber:t.pageNumber,url:t.imageUrl,mimeType:t.imageMimeType,...(r=e.imageParams)!=null&&r.size?{aspectRatio:e.imageParams.size}:{}}})}function Di(e){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e;if(typeof e!="string")return;const a=e.trim(),t=a.match(/^(\d+(?:\.\d+)?)\s*[:/xX]\s*(\d+(?:\.\d+)?)$/);if(t){const c=Number(t[1]),u=Number(t[2]);return c>0&&u>0?c/u:void 0}const r=Number(a);return Number.isFinite(r)&&r>0?r:void 0}function kn(e){const a=Number(e==null?void 0:e.width),t=Number(e==null?void 0:e.height);return Number.isFinite(a)&&Number.isFinite(t)&&a>0&&t>0?a/t:Di(e==null?void 0:e.aspectRatio)}function Mn(e){var a;return kn((a=e[0])==null?void 0:a.source)||16/9}function Tn(e,a){const t=Math.max(0,e.width),r=Math.max(0,e.height),c=a.width>0&&a.height>0?a.width/a.height:1,u=t>0&&r>0?t/r:c;if(c>u){const p=t,v=p/c;return{x:0,y:(r-v)/2,width:p,height:v}}const g=r,f=g*c;return{x:(t-f)/2,y:0,width:f,height:g}}function Ri(e,a){return e.pages.map(t=>({page:t,source:jn(t,a)}))}function Li(e,a){return e.pages.flatMap(t=>a.filter(r=>vn(t,r)).map(r=>({page:t,source:r})))}function An(e,a){return Ri(e,a).map(t=>{if(!t.source)throw new Error(`第 ${t.page.pageNumber} 页缺少图片,无法导出`);return{page:t.page,source:t.source}})}function Ui(e,a={}){const t=(a.now||new Date).toISOString(),r=Ve(e,a.imageSources),c=e.pages.map(u=>{const g=jn(u,r),f=zi(g),p=g?Nn({pageNumber:u.pageNumber,title:u.title,extension:f}):void 0;return{id:u.id,pageNumber:u.pageNumber,title:u.title,script:u.script,prompt:u.prompt,notes:u.notes,imageFilename:p,imageMimeType:(g==null?void 0:g.mimeType)||u.imageMimeType}});return{title:e.title,pageCount:e.pageCount,commonPrompt:e.commonPrompt,exportedAt:t,pages:c}}function wt(e,a){const t=Ui(e,a);return{baseName:a!=null&&a.filename?Le(a.filename):$i(e),manifest:t,manifestJson:`${JSON.stringify(t,null,2)}
|
|
43
|
+
`,markdown:Ci(e)}}async function Pt(e,a){const t=a.normalizeImageDataUrl(e.url),r=await fetch(t,{referrerPolicy:"no-referrer"});if(!r.ok)throw new Error(`图片下载失败:${r.status}`);return r.blob()}async function Bi(e,a={}){const[{default:t},r]=await Promise.all([Ei(),Ct()]),c=wt(e,a),u=new t;u.file("manifest.json",c.manifestJson),u.file("script.md",c.markdown);const g=Ve(e,a.imageSources),f=new Map(c.manifest.pages.map(y=>[y.id,y])),p=Li(e,g).map(y=>({page:f.get(y.page.id),source:y.source})).filter(y=>{var k;return!!(y.source&&((k=y.page)!=null&&k.imageFilename))});await r.processBatchWithConcurrency(p,async({page:y,source:k})=>{const B=await Pt(k,r),L=!k.variantNumber&&y.imageFilename?y.imageFilename:Nn({pageNumber:y.pageNumber,title:y.title,variantNumber:k.variantNumber,extension:r.getFileExtension(k.url,B.type||k.mimeType)});u.file(L,B)},Math.max(1,Math.min(3,a.imageConcurrency||1)));const v=await u.generateAsync({type:"blob"});r.downloadFromBlob(v,`${c.baseName}.zip`)}async function In(e){return new Promise((a,t)=>{const r=new FileReader;r.onerror=()=>t(r.error||new Error("图片读取失败")),r.onload=()=>a(String(r.result||"")),r.readAsDataURL(e)})}function Gi(e){const a=Mn(e),t=10;return{width:t,height:t/a}}function Vi(e){const a=Mn(e),t=297;return a>=1?{width:t,height:t/a}:{width:t*a,height:t}}function En(e,a){return{width:kn(e)||a,height:1}}function Ji(e){const a=String(e||"").toLowerCase();return a.includes("jpeg")||a.includes("jpg")?"JPEG":a.includes("webp")?"WEBP":"PNG"}async function Hi(e,a={}){var y,k;const[{default:t},r]=await Promise.all([Fi(),Ct()]),c=wt(e,a),u=Ve(e,a.imageSources),g=An(e,u),f=Gi(g),p=new t;(y=p.defineLayout)==null||y.call(p,{name:"COMIC_IMAGE_ONLY",width:f.width,height:f.height}),p.layout="COMIC_IMAGE_ONLY",p.author="Aitu",p.subject="Comic export",p.title=e.title;for(const{source:B}of g){const L=await Pt(B,r),ce=await In(L),V=p.addSlide(),ie=Tn(f,En(B,f.width/f.height));(k=V.addImage)==null||k.call(V,{data:ce,x:ie.x,y:ie.y,w:ie.width,h:ie.height})}const v=await p.write({outputType:"blob"});r.downloadFromBlob(v,`${c.baseName}.pptx`)}async function Ki(e,a={}){var y;const[{default:t},r]=await Promise.all([Oi(),Ct()]),c=wt(e,a),u=Ve(e,a.imageSources),g=An(e,u),f=Vi(g),p=f.width>=f.height?"landscape":"portrait",v=new t({unit:"mm",format:[f.width,f.height],orientation:p});for(let k=0;k<g.length;k+=1){const{source:B}=g[k];k>0&&v.addPage([f.width,f.height],p);const L=await Pt(B,r),ce=await In(L),V=Tn(f,En(B,f.width/f.height));(y=v.addImage)==null||y.call(v,ce,Ji(L.type||B.mimeType),V.x,V.y,V.width,V.height)}r.downloadFromBlob(v.output("blob"),`${c.baseName}.pdf`)}const pn="comic-creator:text-model",fn="comic-creator:image-model",ht="comic-creator:story-prompt",Fn="comic-creator:story-prompt-mode",On="comic-creator:scenario-id",Yi=20*1024*1024,St="multi_image_generation",Nt="comic_creator_tool",qi="multi_image_generation_action",Wi="multi_image_generation_page_view",Xi="multi_image_generation_unique_view",hn="comic-creator:analytics:daily-unique-view",$n=[1,2,3,4];function Zi(e=new Date){const a=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${a}-${t}-${r}`}function Qi(e){try{return localStorage.getItem(hn)===e?!1:(localStorage.setItem(hn,e),!0)}catch{return!1}}function re(e){return!Number.isFinite(e||0)||!e?"0":e<1024*1024?"<1MB":e<5*1024*1024?"1-5MB":e<10*1024*1024?"5-10MB":"10MB+"}function N(e){const a=(e==null?void 0:e.pages.length)||0,t=Cn(e),r=pt(e),c=(e==null?void 0:e.pages.filter(u=>u.status==="failed").length)||0;return{has_record:!!e,page_count:a,generated_count:r,generated_page_count:t,failed_count:c,completion_rate:a>0?t/a:0}}function w(e,a){Ce.track(qi,{category:"ai_generation",area:St,surface:Nt,tool_id:bn,tool_name:"多图生成",action:e,...a||{},timestamp:Date.now()})}function P(e,a){const t=a||{};Ce.trackUIInteraction({area:St,action:"click",control:e,source:Nt,metadata:t}),w("click",{control:e,event_type:"click",...t})}const es=[{id:"plan",label:"提示词"},{id:"generate",label:"生成"}];function ts(){try{return sessionStorage.getItem(ht)||""}catch{return""}}function ns(e){try{e.trim()?sessionStorage.setItem(ht,e):sessionStorage.removeItem(ht)}catch{}}function as(){try{return sessionStorage.getItem(Fn)==="json"?"json":"text"}catch{return"text"}}function is(e){try{sessionStorage.setItem(Fn,e)}catch{}}function ss(){try{return sessionStorage.getItem(On)||je}catch{return je}}function rs(e){try{sessionStorage.setItem(On,e)}catch{}}function os(e){const a=`${e.id} ${e.label} ${e.shortLabel||""} ${e.sourceProfileName||""}`.toLowerCase();return e.vendor===sn.GEMINI||e.vendor===sn.GOOGLE||a.includes("gemini")}function _n(e){return e.sourceProfileId?Ga(e.sourceProfileId,e.id):null}function Oe(e,a,t){const r=gt(a,t);return e.some(c=>(c.selectionKey||c.id)===r)}function cs(e){return!Number.isFinite(e)||e<=0?"0 KB":e<1024*1024?`${Math.max(1,Math.round(e/1024))} KB`:`${(e/1024/1024).toFixed(1)} MB`}function ls(e){return e.reduce((a,t)=>{var r,c,u;if(t.id==="size"){const g=(r=t.options)==null?void 0:r.some(f=>f.value===oe);return a[t.id]=g?oe:t.defaultValue||((u=(c=t.options)==null?void 0:c[0])==null?void 0:u.value)||oe,a}return t.defaultValue&&(a[t.id]=t.defaultValue),a},{})}function lt(e,a){var u;const r={...ls(a)},c=e||{};for(const g of a){const f=c[g.id];f&&(g.valueType==="enum"&&((u=g.options)!=null&&u.length)&&!g.options.some(p=>p.value===f)||(r[g.id]=f))}return r.size||(r.size=oe),r}function ut(e){return e.map((a,t)=>({...a,pageNumber:t+1}))}function us(e){return{id:mt(),pageNumber:e,title:`第 ${e} 页`,script:"",prompt:"",status:"draft"}}function ds(e){const a=Ne(e.title,e.pageNumber);return a===`第 ${e.pageNumber} 页`?"":a}function yn(e,a){const t=gi(e,a),r=["comic-outline-preview__content",t.isJson?"comic-outline-preview__content--json":""].filter(Boolean).join(" ");return s.jsx("pre",{className:r,children:t.text})}function ms(e){var t;const a=zn((t=e.imageParams)==null?void 0:t.size);return e.pages.filter(r=>!!r.imageUrl).map(r=>({pageId:r.id,pageNumber:r.pageNumber,url:r.imageUrl,mimeType:r.imageMimeType,aspectRatio:a}))}function gs(e){var t;const a=zn((t=e.imageParams)==null?void 0:t.size);return e.pages.flatMap(r=>{const c=K(r);if(c.length===0)return[];const u=r.imageUrl?c.findIndex(p=>p.url===r.imageUrl):-1,g=c[u>=0?u:c.length-1];let f=1;return[g,...c.filter(p=>p.url!==g.url)].map(p=>{const v=p.url===g.url,y={pageId:r.id,pageNumber:r.pageNumber,url:p.url,mimeType:p.mimeType||r.imageMimeType,aspectRatio:a};return v||(y.variantNumber=f,f+=1),y})})}function ps(e){const a=e.data,t=e.task,r=[...Array.isArray(a==null?void 0:a.taskIds)?a.taskIds:[],a==null?void 0:a.taskId,e.taskId,t==null?void 0:t.id].filter(c=>typeof c=="string"&&c.length>0);return Array.from(new Set(r))}function fs(e){return $n.includes(e)?e:1}function zn(e){const a=String(e||"").trim().replace(/[xX]/g,":");return/^\d+(?:\.\d+)?:\d+(?:\.\d+)?$/.test(a)?a:void 0}function hs(e){return e.pendingOutlineTaskId?"规划中":e.pages.some(a=>a.status==="running"||a.status==="queued")?"生成中":e.pages.some(a=>a.status==="failed")?"有失败":e.pages.length>0&&e.pages.every(a=>K(a).length>0)?"已完成":e.pages.length>0?"已规划":"草稿"}function _s(e){return!Number.isFinite(e)||e<=0?"时间未知":new Date(e).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}const Ms=()=>{const{records:e,setRecords:a,currentRecord:t,showStarred:r,setShowStarred:c,starredCount:u,selectRecord:g,updateCurrentRecord:f,restart:p,applySyncedRecord:v}=Ia({loadRecords:bt,logPrefix:"[ComicCreator]"}),{page:y,setPage:k,navigateToStep:B,goToDefaultPage:L,openHistory:ce,openStarred:V,toggleStarred:ie}=Ea({initialPage:"plan",defaultPage:"plan",historyPage:"history",setShowStarred:c}),{openViewer:jt,viewerProps:Dn}=si({showNavbar:!0,showToolbar:!0,showTitle:!0}),b=l.useRef(null),le=l.useRef(new Set),te=l.useRef(null),vt=l.useRef(Promise.resolve()),ve=l.useRef(null),kt=l.useRef(null),Je=l.useRef(null),Mt=l.useRef(!1),Tt=l.useRef(null),He=un("text"),Rn=un("image"),U=l.useMemo(()=>He.filter(os),[He]),At=l.useMemo(()=>tn(pn,Fa),[]),Ke=l.useMemo(()=>tn(fn,Oa),[]),Ln=l.useMemo(()=>(t==null?void 0:t.sourcePromptMode)||as(),[]),It=l.useMemo(()=>Pe((t==null?void 0:t.scenarioId)||ss()).id,[]),[ne,ke]=l.useState(()=>(t==null?void 0:t.sourcePrompt)||ts()||Fe(It,"text")),[D,Ye]=l.useState(()=>Ln),[M,qe]=l.useState(It),[Me,Te]=l.useState(String(ze)),[A,Et]=l.useState(At.modelId),[R,Ft]=l.useState(At.modelRef),[x,Ot]=l.useState(null),[j,$t]=l.useState(Ke.modelId),[se,zt]=l.useState(Ke.modelRef),Ae=l.useMemo(()=>rt(j),[j]),[Y,We]=l.useState(()=>lt(void 0,rt(Ke.modelId))),[Xe,Dt]=l.useState([]),[I,Rt]=l.useState("serial"),[E,Un]=l.useState(1),[G,ue]=l.useState(new Set),[ae,Lt]=l.useState(!1),[T,de]=l.useState({running:!1,stopping:!1,current:0,total:0,message:""}),[me,Ut]=l.useState(null),[ge,Ze]=l.useState(null),[he,Bn]=l.useState(""),[q,Gn]=l.useState("all"),Qe=l.useMemo(()=>Pe(M),[M]),et=x?U:He,_e=l.useMemo(()=>{const n=Xe.map(i=>i.url.trim()).filter(Boolean);return Array.from(new Set(n))},[Xe]),Vn=l.useMemo(()=>{const n=new Map;for(const i of we){const o=n.get(i.category)||[];o.push(i),n.set(i.category,o)}return Array.from(n.entries())},[]),Jn=!gn(ne);l.useEffect(()=>{b.current=t},[t]),l.useEffect(()=>{if(Mt.current)return;Mt.current=!0;const n=Zi(),i={category:"ai_generation",area:St,surface:Nt,tool_id:bn,tool_name:"多图生成",metric:"pv",active_page:y,records_count:e.length,starred_count:u,view_date:n,...N(t),timestamp:Date.now()};Ce.track(Wi,i),Ce.isAnalyticsEnabled()&&Qi(n)&&Ce.track(Xi,{...i,metric:"uv",unique_period:"daily"})},[t,y,e.length,u]),l.useEffect(()=>{Tt.current!==y&&(Tt.current=y,w("step_view",{active_page:y,records_count:e.length,starred_count:u,...N(t)}))},[t,y,e.length,u]),l.useEffect(()=>{!t||t.pendingOutlineTaskId||t.pages.length===0||Je.current!==t.id||(Je.current=null,requestAnimationFrame(()=>{var n;(n=kt.current)==null||n.scrollIntoView({behavior:"smooth",block:"start"})}))},[t==null?void 0:t.id,t==null?void 0:t.pages.length,t==null?void 0:t.pendingOutlineTaskId]),l.useEffect(()=>{We(n=>lt(n,Ae))},[Ae]),l.useEffect(()=>{t&&(ke(t.sourcePrompt||""),Ye(t.sourcePromptMode||"text"),qe(Pe(t.scenarioId).id),Te(String(t.pageCount||ze)),Rt(t.generationMode||"serial"),t.textModel&&(Et(t.textModel),Ft(t.textModelRef||null)),t.imageModel&&($t(t.imageModel),zt(t.imageModelRef||null)),t.imageParams&&We(n=>lt({...n,...t.imageParams},rt(t.imageModel||j))))},[t==null?void 0:t.id]),l.useEffect(()=>{Dt([])},[t==null?void 0:t.id]),l.useEffect(()=>{t||(ns(ne),is(D),rs(M))},[t,D,M,ne]),l.useEffect(()=>{const n=(t==null?void 0:t.pages.map(i=>i.id))||[];ue(i=>{if(n.length===0)return new Set;const o=new Set([...i].filter(d=>n.includes(d)));return o.size===0&&n.forEach(d=>o.add(d)),o})},[t==null?void 0:t.pages]);const Hn=l.useCallback(async n=>Pn(n)?await vi(n)||ki(n):null,[]);ii({syncTask:Hn,applySyncedRecord:v,shouldHandleTask:ji,logPrefix:"[ComicCreator]"});const ye=l.useCallback((n,i)=>{Et(n),Ft(i||null),nn(pn,n,i)},[]),Kn=l.useCallback((n,i)=>{w("image_model_changed",{event_type:"select",image_model:n,previous_image_model:j}),$t(n),zt(i||null),nn(fn,n,i)},[j]),Yn=l.useCallback((n,i)=>{w("image_param_changed",{event_type:"change",image_model:j,param_id:n,param_value:i}),We(o=>({...o,[n]:i}))},[j]);l.useEffect(()=>{if(!x||U.length===0||Oe(U,A,R))return;const n=U[0];ye(n.id,_n(n))},[U,x,ye,A,R]);const tt=l.useCallback((n=M)=>{ke(Fe(n,"text"))},[M]),qn=l.useCallback(n=>{const i=gn(ne);w("scenario_changed",{event_type:"change",scenario_id:n,previous_scenario_id:M,auto_apply_template:i,has_record:!!b.current}),qe(n),i&&tt(n)},[tt,M,ne]),Bt=l.useCallback(n=>{w("prompt_mode_changed",{event_type:"click",prompt_input_mode:n,previous_prompt_input_mode:D,has_record:!!b.current}),Ye(n)},[D]),nt=l.useCallback(()=>{var i;const n=!((i=b.current)!=null&&i.pendingOutlineTaskId);P("remove_pdf_attachment",{has_pdf_attachment:!!x,pdf_size_bucket:re(x==null?void 0:x.size),should_delete_cache:n}),Ot(o=>(n&&(o!=null&&o.cacheUrl)&&ot.deleteCache(o.cacheUrl).catch(()=>{}),null)),ve.current&&(ve.current.value="")},[x]),Wn=l.useCallback(async n=>{var d;const i=(d=n.target.files)==null?void 0:d[0];if(n.target.value="",!i)return;if(!(i.type==="application/pdf"||i.name.toLowerCase().endsWith(".pdf"))){w("pdf_upload",{status:"failed",reason:"invalid_type",file_size_bucket:re(i.size)}),O.warning("请上传 PDF 文件");return}if(i.size>Yi){w("pdf_upload",{status:"failed",reason:"too_large",file_size_bucket:re(i.size)}),O.warning("PDF 不能超过 20MB");return}if(U.length===0){w("pdf_upload",{status:"failed",reason:"no_gemini_text_model",file_size_bucket:re(i.size)}),O.warning("PDF 入参需要 Gemini 文本模型,请先配置 Gemini 模型");return}try{const m=`comic-pdf-${mt()}.pdf`;if(await ot.cacheToCacheStorageOnly(m,i),Ot(h=>(h!=null&&h.cacheUrl&&ot.deleteCache(h.cacheUrl).catch(()=>{}),{cacheUrl:m,name:i.name,size:i.size,mimeType:i.type||"application/pdf"})),w("pdf_upload",{status:"success",file_size_bucket:re(i.size),switched_text_model:!Oe(U,A,R)}),!Oe(U,A,R)){const h=U[0];ye(h.id,_n(h))}O.success("PDF 已添加,将随提示词一起提交给 Gemini")}catch(m){w("pdf_upload",{status:"failed",reason:"cache_failed",file_size_bucket:re(i.size)}),O.error(m instanceof Error?m.message:"PDF 上传失败")}},[U,ye,A,R]),S=l.useCallback(async(n,i=b.current)=>{if(!i)return null;const o={...n,updatedAt:Date.now()},d={...i,...o};b.current=d,f(d),a(h=>h.map(_=>_.id===d.id?d:_));const m=vt.current.then(async()=>{const h=await fe(i.id,o),_=h.find(C=>C.id===i.id)||d;return b.current=_,a(h),f(_),_});return vt.current=m.then(()=>{},()=>{}),m},[a,f]),Gt=l.useCallback(async n=>{const i=n.sourcePrompt.trim(),o=n.pageCount,d=Date.now();if(b.current)return await S({sourcePrompt:i,sourcePromptMode:n.sourcePromptMode,scenarioId:n.scenarioId,pageCount:o,textModel:A,textModelRef:R})||b.current;const m={id:mt(),starred:!1,title:i.slice(0,28)||"未命名连环画",sourcePrompt:i,commonPrompt:"",pageCount:o,pages:[],textModel:A,textModelRef:R,imageModel:j,imageModelRef:se,imageParams:Y,generationMode:I,sourcePromptMode:n.sourcePromptMode,scenarioId:n.scenarioId,pendingOutlineTaskId:null,createdAt:d,updatedAt:d},h=await Pi(m),_=h.find(C=>C.id===m.id)||m;return a(h),f(_),b.current=_,_},[I,j,se,Y,S,a,A,R,f]),Xn=l.useCallback(async()=>{if(!ae){if(!ne.trim()){O.warning("请输入创作需求");return}if(x&&!Oe(U,A,R)){O.warning("PDF 入参仅支持 Gemini 文本模型");return}Lt(!0);try{const n=ne.trim(),i=Se(Me);if(await $a.waitForInitialization(),!za("text",R||A)&&!await Da()){w("generate_outline",{status:"cancelled",reason:"missing_api_key",scenario_id:M,prompt_input_mode:D,text_model:A,has_pdf_attachment:!!x}),O.warning("需要 API Key 才能生成提示词");return}P("generate_outline",{status:"start",scenario_id:M,prompt_input_mode:D,page_count:i,text_model:A,has_pdf_attachment:!!x,pdf_size_bucket:re(x==null?void 0:x.size),...Ra(n)});const o=await Gt({sourcePrompt:n,pageCount:i,sourcePromptMode:D,scenarioId:M}),d=di({userPrompt:n,pageCount:i,inputMode:D,scenarioContext:Ii(M),pdfAttachmentName:x==null?void 0:x.name});Je.current=o.id;const m=ct.createTask({prompt:d,model:A,modelRef:R,comicCreatorAction:"outline",comicCreatorRecordId:o.id,comicCreatorScenarioId:M,comicCreatorPageCount:i,...x?{pdfCacheUrl:x.cacheUrl,pdfMimeType:x.mimeType,pdfName:x.name}:{}},_t.CHAT);await S({sourcePrompt:n,sourcePromptMode:D,scenarioId:M,pageCount:i,textModel:A,textModelRef:R,pendingOutlineTaskId:m.id,outlineError:void 0},o),w("generate_outline",{status:"success",scenario_id:M,prompt_input_mode:D,page_count:i,text_model:A,has_pdf_attachment:!!x}),O.success("提示词规划任务已提交")}catch(n){w("generate_outline",{status:"failed",scenario_id:M,prompt_input_mode:D,text_model:A,has_pdf_attachment:!!x,error_type:n instanceof Error?n.name:"unknown"}),O.error(n instanceof Error?n.message:"提交失败")}finally{Lt(!1)}}},[Gt,Me,S,D,x,M,ne,ae,A,U,R]),Vt=l.useCallback((n,i)=>{const o=b.current;if(!o)return;const d=o.pages.map(m=>m.id===n?{...m,...i}:m);S({pages:d})},[S]),Jt=l.useCallback(n=>{S({commonPrompt:n})},[S]),Zn=l.useCallback(n=>{const i=b.current;if(!i)return;const o=i.pages.findIndex(h=>h.id===n),d=o>=0?o+1:i.pages.length,m=[...i.pages];m.splice(d,0,us(d+1)),P("add_page",{insert_index:d,page_count_before:i.pages.length,page_count_after:m.length,...N(i)}),S({pages:ut(m),pageCount:m.length})},[S]),Qn=l.useCallback(n=>{const i=b.current;if(!i||i.pages.length<=1)return;const o=ut(i.pages.filter(d=>d.id!==n));P("delete_page",{page_count_before:i.pages.length,page_count_after:o.length,...N(i)}),ue(d=>{const m=new Set(d);return m.delete(n),m}),S({pages:o,pageCount:o.length})},[S]),Ht=l.useCallback((n,i)=>{const o=b.current;if(!o)return;const d=o.pages.findIndex(C=>C.id===n),m=d+i;if(d<0||m<0||m>=o.pages.length)return;const h=[...o.pages],[_]=h.splice(d,1);h.splice(m,0,_),P("move_page",{direction:i<0?"up":"down",from_index:d,to_index:m,page_count:o.pages.length}),S({pages:ut(h)})},[S]),ea=l.useCallback(n=>{var o;const i=!G.has(n);P("toggle_page_selection",{selected:i,selected_page_count:i?G.size+1:Math.max(0,G.size-1),page_count:((o=b.current)==null?void 0:o.pages.length)||0}),ue(d=>{const m=new Set(d);return m.has(n)?m.delete(n):m.add(n),m})},[G]),ta=l.useCallback(()=>{var i;const n=((i=b.current)==null?void 0:i.pages.map(o=>o.id))||[];P("select_all_pages",{selected_page_count:n.length,page_count:n.length}),ue(new Set(n))},[]),na=l.useCallback(()=>{var n;P("clear_page_selection",{selected_page_count:G.size,page_count:((n=b.current)==null?void 0:n.pages.length)||0}),ue(new Set)},[G.size]),aa=l.useCallback(n=>{n!==I&&(w("generation_mode_changed",{event_type:"click",generation_mode:n,previous_generation_mode:I,...N(b.current)}),Rt(n))},[I]),ia=l.useCallback(n=>{const i=fs(Number(n));w("image_count_per_page_changed",{event_type:"change",image_count_per_page:i,...N(b.current)}),Un(i)},[]),sa=l.useCallback(n=>{const i=b.current;if(!i)return;const o=i.pages.slice().sort((h,_)=>h.pageNumber-_.pageNumber).flatMap(h=>{const _=K(h);return _.map((C,F)=>({pageItem:h,variant:C,variantIndex:F,variantCount:_.length}))}),d=i.pages.find(h=>h.id===n),m=o.findIndex(h=>h.pageItem.id===n&&(!(d!=null&&d.imageUrl)||h.variant.url===d.imageUrl));o.length===0||m<0||(P("preview_page_image",{image_count:o.length,initial_index:m,...N(i)}),jt(o.map(({pageItem:h,variantIndex:_,variantCount:C,variant:F})=>({url:F.url,type:"image",title:`第 ${h.pageNumber} 页:${Ne(h.title,h.pageNumber)}${C>1?`(图 ${_+1})`:""}`,alt:h.title||`第 ${h.pageNumber} 页`,prompt:h.prompt})),m))},[jt]),ra=l.useCallback((n,i)=>{const o=b.current;if(!o)return;const d=o.pages.map(m=>m.id===n?xi(m,i):m);P("select_page_image_variant",{page_id:n,...N(o)}),S({pages:d})},[S]),oa=l.useCallback(n=>{const i=b.current,o=i==null?void 0:i.pages.find(d=>d.id===n);P("open_page_media_library",{page_id:n,page_number:o==null?void 0:o.pageNumber,...N(i)}),Ze(n)},[]),ca=l.useCallback(async n=>{const i=b.current;if(!i||!ge)return;if(n.type!==an.IMAGE||!n.url){O.warning("请选择图片素材");return}const o=i.pages.find(m=>m.id===ge);if(!o)return;const d=i.pages.map(m=>m.id===ge?{...ft(m,[{url:n.url,mimeType:n.mimeType,generatedAt:n.createdAt||Date.now(),taskId:n.taskId}]),status:"succeeded",error:void 0}:m);await S({pages:d}),P("select_page_media_library_asset",{page_id:ge,page_number:o.pageNumber,asset_id:n.id,asset_source:n.source,...N({...i,pages:d})}),O.success("已从素材库补回当前页图片"),Ze(null)},[ge,S]),be=l.useCallback(async(n,i)=>{const o=b.current;if(!o)return null;const d=o.pages.map(m=>m.id===n?{...m,...i}:m);return S({pages:d})},[S]),Kt=l.useCallback(async(n,i,o)=>{const d=b.current;if(!d)return null;const m=d.pages.map(h=>h.id===n?{...ft(h,i),...o}:h);return S({pages:m})},[S]),at=l.useCallback(async(n,i)=>{var Wt,Xt,Zt,Qt;const o=b.current;if(!o||(Wt=te.current)!=null&&Wt.signal.aborted)return null;await be(n.id,{status:"running",error:void 0});const d=Y.size||oe,m=hi({commonPrompt:o.commonPrompt,pagePrompt:n.prompt,script:n.script,title:n.title,pageNumber:n.pageNumber,pageCount:o.pages.length,size:d}),h=i?Array.from(new Set([..._e,i])):_e;w("page_image_generation",{status:"start",page_number:n.pageNumber,page_count:o.pages.length,image_count_per_page:E,image_model:j,image_size:d,reference_image_count:h.length,has_previous_page_reference:!!i});const _=await La({prompt:m,size:d,count:E,model:j,modelRef:se,params:Y,referenceImages:h.length>0?h:void 0,autoInsertToCanvas:!1,comicCreatorAction:"page-image",comicCreatorRecordId:o.id,comicCreatorPageId:n.id}),C=ps(_),F=C[0];if(!_.success||!F)return await be(n.id,{status:"failed",error:_.error||"图片任务创建失败"}),w("page_image_generation",{status:"failed",reason:"task_create_failed",page_number:n.pageNumber,image_count_per_page:E,image_model:j,image_size:d}),null;C.forEach(Z=>le.current.add(Z)),await be(n.id,{taskId:F,taskIds:C,status:"running"});const $=await Promise.all(C.map(async Z=>{var Q;const Ee=await Ua(Z,{signal:(Q=te.current)==null?void 0:Q.signal,interval:1200});return le.current.delete(Z),{taskId:Z,waitResult:Ee}})),J=(Xt=te.current)==null?void 0:Xt.signal.aborted,W=$.flatMap(({taskId:Z,waitResult:Ee})=>{var en;if(!Ee.success)return[];const Q=Ee.task||ct.getTask(Z);return(en=Q==null?void 0:Q.result)!=null&&en.url?xn({taskId:Z,url:Q.result.url,urls:Q.result.urls,format:Q.result.format,generatedAt:Q.completedAt||Date.now()}):[]}),X=(Zt=$.find(({waitResult:Z})=>!Z.success))==null?void 0:Zt.waitResult.error;return W.length===0?(await be(n.id,{status:J?"cancelled":"failed",error:X||(J?"图片生成已取消":"图片任务完成但缺少图片 URL")}),w("page_image_generation",{status:J?"cancelled":"failed",reason:J?"user_cancelled":"task_failed",page_number:n.pageNumber,image_count_per_page:E,image_model:j,image_size:d}),null):(await Kt(n.id,W,{status:"succeeded",error:X?"部分图片生成失败":void 0}),w("page_image_generation",{status:"success",page_number:n.pageNumber,image_count_per_page:E,generated_image_count:W.length,image_model:j,image_size:d}),((Qt=W[W.length-1])==null?void 0:Qt.url)||null)},[Kt,E,j,se,Y,_e,be]),Yt=l.useCallback(async n=>{const i=b.current;if(!i)return null;const o=new Set(n.map(m=>m.id)),d=i.pages.map(m=>o.has(m.id)?{...m,status:"queued",error:void 0,taskId:null,taskIds:null}:m);return S({pages:d,imageModel:j,imageModelRef:se,imageParams:Y,generationMode:I})},[I,j,se,Y,S]),qt=l.useCallback(async n=>{var h;const i=b.current;if(!i||T.running)return;const o=yi({pages:i.pages,selectedPageIds:G,singlePageId:n}),d=o;if(o.length===0){w("generate_images",{status:"failed",reason:"no_selection",generation_mode:I,single_page:!!n,selected_page_count:G.size,...N(i)}),O.warning("请选择要生成的页面");return}const m=Date.now();P(n?"regenerate_page_image":"generate_selected_pages",{status:"start",generation_mode:I,single_page:!!n,selected_page_count:o.length,task_page_count:d.length,image_count_per_page:E,total_image_task_count:d.length*E,image_model:j,image_size:Y.size||oe,reference_image_count:_e.length,...N(i)}),te.current=new AbortController,le.current=new Set,de({running:!0,stopping:!1,current:0,total:d.length,message:`准备生成(每页 ${E} 张)`});try{if(!await Yt(d))return;if(I==="serial"){const C=d;for(let F=0;F<C.length&&!te.current.signal.aborted;F+=1){const $=C[F],J=(h=b.current)==null?void 0:h.pages.find(X=>X.pageNumber===$.pageNumber-1),W=J==null?void 0:J.imageUrl;de(X=>({...X,current:F+1,message:`生成第 ${$.pageNumber} 页(${E} 张)`})),await at($,W)}}else{let C=0,F=0;const $=Array.from({length:_i(I,d.length)}).map(async()=>{var J;for(;C<d.length;){if((J=te.current)!=null&&J.signal.aborted)return;const W=d[C];C+=1,de(X=>({...X,message:`生成第 ${W.pageNumber} 页(${E} 张)`})),await at(W),F+=1,de(X=>({...X,current:F}))}});await Promise.all($)}if(te.current.signal.aborted){const C=b.current;if(C){const F=new Set(d.map($=>$.id));await S({pages:C.pages.map($=>F.has($.id)&&($.status==="queued"||$.status==="running")?{...$,status:"cancelled",error:"图片生成已取消"}:$)})}w("generate_images",{status:"cancelled",duration_ms:Date.now()-m,generation_mode:I,single_page:!!n,task_page_count:d.length,image_count_per_page:E,total_image_task_count:d.length*E,...N(b.current)}),O.info("已停止生成")}else w("generate_images",{status:"success",duration_ms:Date.now()-m,generation_mode:I,single_page:!!n,task_page_count:d.length,image_count_per_page:E,total_image_task_count:d.length*E,...N(b.current)}),O.success("图片生成完成")}catch(_){w("generate_images",{status:"failed",duration_ms:Date.now()-m,generation_mode:I,single_page:!!n,task_page_count:d.length,image_count_per_page:E,total_image_task_count:d.length*E,error_type:_ instanceof Error?_.name:"unknown",...N(b.current)}),O.error(_ instanceof Error?_.message:"生成失败")}finally{le.current.clear(),te.current=null,de({running:!1,stopping:!1,current:0,total:0,message:""})}},[at,I,T.running,E,j,Y.size,Yt,S,_e.length,G]),la=l.useCallback(()=>{var n;P("stop_generation",{active_task_count:le.current.size,generation_mode:I,...N(b.current)}),(n=te.current)==null||n.abort(),le.current.forEach(i=>{ct.cancelTask(i)}),de(i=>({...i,stopping:!0,message:"正在停止"}))},[I]),it=l.useCallback(async n=>{const i=b.current;if(!i)return;const o=n==="zip"?gs(i):ms(i);if(o.length===0){w("export",{status:"failed",reason:"no_generated_images",export_kind:n,...N(i)}),O.warning("请先生成至少一页图片");return}const d=Date.now();P("export",{status:"start",export_kind:n,export_image_count:o.length,...N(i)}),Ut(n);try{const m={imageSources:o};n==="zip"&&await Bi(i,m),n==="pptx"&&await Hi(i,m),n==="pdf"&&await Ki(i,m),w("export",{status:"success",export_kind:n,export_image_count:o.length,duration_ms:Date.now()-d,...N(i)}),O.success("导出完成")}catch(m){w("export",{status:"failed",export_kind:n,export_image_count:o.length,duration_ms:Date.now()-d,error_type:m instanceof Error?m.name:"unknown",...N(i)}),O.error(m instanceof Error?m.message:"导出失败")}finally{Ut(null)}},[]),ua=l.useCallback(()=>{P("restart_project",{...N(b.current)}),p(),nt(),qe(je),Ye("text"),ke(Fe(je,"text")),Te(String(ze)),ue(new Set),L()},[nt,L,p]),da=l.useCallback(n=>{P("select_history_record",{...N(n)}),g(n),k(n.pages.length>0?"generate":"plan")},[g,k]),ma=l.useCallback(async n=>{P("toggle_star_record",{starred:!n.starred,...N(n)});const i=await fe(n.id,{starred:!n.starred,updatedAt:Date.now()});a(i);const o=i.find(d=>d.id===n.id);o&&(t==null?void 0:t.id)===n.id&&f(o)},[t==null?void 0:t.id,a,f]),ga=l.useCallback(async n=>{const i=e.find(d=>d.id===n);P("delete_history_record",{...N(i)});const o=await Si(n);a(o),(t==null?void 0:t.id)===n&&(p(),L())},[t==null?void 0:t.id,L,e,p,a]),st=!!(t!=null&&t.pages&&t.pages.length>0),pa=Cn(t),xe=pt(t),fa=l.useMemo(()=>es.map(n=>({...n,disabled:n.id==="generate"&&!st})),[st]),ha=l.useCallback(n=>{P("navigate_step",{from_page:y,to_page:n,...N(t)}),B(n)},[t,B,y]),_a=l.useCallback(()=>{P("back_from_history",{show_starred:r,records_count:e.length}),L()},[L,e.length,r]),ya=l.useCallback(()=>{P("open_history",{records_count:e.length,starred_count:u}),ce()},[ce,e.length,u]),ba=l.useCallback(()=>{P("open_starred_history",{records_count:e.length,starred_count:u}),V()},[V,e.length,u]),xa=l.useCallback(()=>{P("toggle_starred_filter",{show_starred:!r,records_count:e.length,starred_count:u}),ie()},[e.length,r,u,ie]),Ie=l.useMemo(()=>{const n=he.trim().toLowerCase();return e.filter(i=>r?i.starred:!0).filter(i=>n?i.title.toLowerCase().includes(n)||i.sourcePrompt.toLowerCase().includes(n):!0).filter(i=>q==="all"?!0:q==="done"?i.pages.length>0&&i.pages.every(o=>K(o).length>0):q==="failed"?i.pages.some(o=>o.status==="failed")||!!i.outlineError:q==="planned"?i.pages.length>0&&!i.pages.every(o=>K(o).length>0):!0).sort((i,o)=>o.createdAt-i.createdAt)},[he,q,e,r]),Ca=l.useCallback(()=>{const n=he.trim();n&&w("history_search",{event_type:"input",query_length:n.length,result_count:Ie.length,history_status:q,show_starred:r})},[Ie.length,he,q,r]),wa=l.useCallback(n=>{w("history_status_filter_changed",{event_type:"change",history_status:n,previous_history_status:q,show_starred:r}),Gn(n)},[q,r]),Pa=()=>s.jsxs("div",{className:"va-page comic-page",children:[s.jsxs("div",{className:"ma-card comic-plan-card",children:[s.jsxs("div",{className:"ma-card-header",children:[s.jsx("span",{children:"创作需求"}),s.jsxs("div",{className:"comic-header-actions",children:[Jn&&s.jsx("button",{className:"comic-link-btn",onClick:()=>{P("apply_scenario_template",{scenario_id:M,prompt_input_mode:D,has_record:!!t}),tt()},children:"套用模板"}),t&&s.jsx("button",{className:"comic-link-btn",onClick:ua,children:"新建"})]})]}),s.jsxs("div",{className:"comic-config-grid",children:[s.jsxs("label",{className:"comic-field comic-field--scenario",children:[s.jsx("span",{children:"创作场景"}),s.jsx("select",{className:"ma-select",value:M,onChange:n=>qn(n.target.value),disabled:ae||!!(t!=null&&t.pendingOutlineTaskId),children:Vn.map(([n,i])=>s.jsx("optgroup",{label:n,children:i.map(o=>s.jsx("option",{value:o.id,children:o.label},o.id))},n))})]}),s.jsxs("label",{className:"comic-field",children:[s.jsx("span",{children:"页数"}),s.jsx("input",{className:"ma-input",type:"number",min:1,max:60,value:Me,onChange:n=>Te(n.target.value),onBlur:()=>Te(String(Se(Me)))})]})]}),s.jsxs("div",{className:"comic-scenario-note",children:[s.jsxs("strong",{children:[Qe.category," / ",Qe.label]}),s.jsx("span",{children:Qe.description})]}),s.jsxs("div",{className:"comic-pdf-row",children:[s.jsx("input",{ref:ve,type:"file",accept:"application/pdf,.pdf",hidden:!0,onChange:Wn}),s.jsxs("button",{type:"button",className:"comic-pdf-upload-btn",onClick:()=>{var n;P("upload_pdf",{has_pdf_attachment:!!x,gemini_text_model_count:U.length}),(n=ve.current)==null||n.click()},disabled:ae||!!(t!=null&&t.pendingOutlineTaskId),children:[s.jsx(Va,{size:14}),x?"更换 PDF":"上传 PDF"]}),x?s.jsxs("div",{className:"comic-pdf-file",children:[s.jsx(rn,{size:14}),s.jsx(z,{content:x.name,showArrow:!1,children:s.jsxs("span",{children:[x.name," · ",cs(x.size)]})}),s.jsx("button",{type:"button",className:"comic-icon-btn",onClick:nt,"aria-label":"移除 PDF",disabled:ae||!!(t!=null&&t.pendingOutlineTaskId),children:s.jsx(Ja,{size:14})})]}):s.jsx("span",{className:"comic-pdf-hint",children:"可选,上传后文本模型仅可选择 Gemini"})]}),s.jsx("textarea",{className:"ma-textarea comic-story-input",value:ne,onChange:n=>ke(n.target.value),placeholder:Fe(M,"text"),spellCheck:!0}),(t==null?void 0:t.outlineError)&&s.jsx("div",{className:"ma-error",children:t.outlineError}),(t==null?void 0:t.pendingOutlineTaskId)&&s.jsx("div",{className:"ma-progress comic-plan-progress",children:"提示词规划中..."}),s.jsxs("div",{className:"comic-plan-control-row",children:[s.jsxs("div",{className:"comic-mode-control",children:[s.jsx("span",{children:"生成的提示词类型"}),s.jsxs("div",{className:"comic-segmented comic-segmented--mode",children:[s.jsx("button",{className:D==="text"?"active":"",type:"button",onClick:()=>Bt("text"),disabled:ae||!!(t!=null&&t.pendingOutlineTaskId),children:"文本提示词"}),s.jsx("button",{className:D==="json"?"active":"",type:"button",onClick:()=>Bt("json"),disabled:ae||!!(t!=null&&t.pendingOutlineTaskId),children:"结构化 JSON"})]})]}),s.jsx("label",{className:"comic-field comic-field--model comic-field--inline-model",children:s.jsx(dn,{variant:"form",selectedModel:A,selectedSelectionKey:gt(A,R),onSelect:ye,models:et,placement:"down",placeholder:x?"选择 Gemini 模型":"选择文本模型",disabled:ae||!!(t!=null&&t.pendingOutlineTaskId)||et.length===0})})]}),s.jsx("div",{className:"va-page-actions comic-plan-actions",children:s.jsxs("button",{className:"va-btn-primary",disabled:ae||!!(t!=null&&t.pendingOutlineTaskId)||!!x&&et.length===0,onClick:Xn,children:[s.jsx(on,{size:14}),"生成提示词"]})})]}),st&&t&&s.jsxs("div",{className:"ma-card",ref:kt,children:[s.jsxs("div",{className:"ma-card-header",children:[s.jsx("span",{children:t.title}),s.jsxs("span",{className:"ma-muted",children:["已规划 ",t.pages.length,"/",t.pageCount||t.pages.length," 页"]})]}),s.jsxs("div",{className:"comic-outline-preview",children:[s.jsxs("div",{className:"comic-outline-preview__item comic-outline-preview__item--common",children:[s.jsx("strong",{children:"公共提示词"}),yn(t.commonPrompt)]}),t.pages.map(n=>s.jsxs("div",{className:"comic-outline-preview__item",children:[s.jsxs("strong",{children:["第 ",n.pageNumber," 页:",Ne(n.title,n.pageNumber)]}),yn(n.prompt||n.script,"待补全")]},n.id))]}),s.jsx("div",{className:"va-page-actions comic-plan-actions comic-outline-actions",children:s.jsxs("button",{className:"va-btn-primary",onClick:()=>{P("go_to_generate_step",{...N(t)}),k("generate")},children:[s.jsx(cn,{size:14}),"去生成"]})})]})]}),Sa=()=>{if(!t)return s.jsx("div",{className:"va-page va-empty",children:"暂无连环画记录"});const n=t.pages.length>0&&t.pages.every(i=>G.has(i.id));return s.jsxs("div",{className:"va-page comic-page",children:[s.jsx("div",{className:"ma-card comic-reference-card",children:s.jsx(oi,{images:Xe,onImagesChange:Dt,multiple:!0,label:"参考图片(可选)",disabled:T.running})}),s.jsxs("div",{className:"ma-card",children:[s.jsxs("div",{className:"ma-card-header",children:[s.jsx("span",{children:"公共提示词"}),s.jsxs("div",{className:"comic-header-actions",children:[s.jsx(mn,{className:"ma-icon-btn comic-prompt-optimize-btn",originalPrompt:t.commonPrompt,language:"zh",scenarioId:"tool.image",historyType:"image",defaultMode:"polish",disabled:T.running,tooltipPlacement:"top",onApply:Jt}),s.jsxs("span",{className:"ma-muted",children:[pa,"/",t.pages.length," 页已生成 ·"," ",xe," 张图"]})]})]}),s.jsx("textarea",{className:"ma-textarea comic-common-prompt",value:t.commonPrompt,onChange:i=>Jt(i.target.value)})]}),T.running&&s.jsxs("div",{className:"ma-progress",children:[T.message," ",T.current,"/",T.total]}),s.jsxs("div",{className:"comic-batch-bar comic-batch-bar--generation",children:[s.jsx(z,{content:"选择或取消选择全部页面",showArrow:!1,children:s.jsxs("label",{className:"comic-check comic-selection-check",children:[s.jsx("input",{type:"checkbox",checked:n,onChange:()=>n?na():ta()}),s.jsxs("span",{children:["已选 ",G.size," 页"]})]})}),s.jsx(z,{content:"选择图片模型",showArrow:!1,children:s.jsx("div",{className:"comic-generation-model",children:s.jsx(dn,{selectedModel:j,selectedSelectionKey:gt(j,se),onSelect:Kn,models:Rn,placement:"down",header:"选择图片模型 (↑↓ Tab)"})})}),Ae.length>0&&s.jsx(z,{content:"图片生成参数",showArrow:!1,children:s.jsx("div",{className:"comic-generation-params",children:s.jsx(ai,{selectedParams:Y,onParamChange:Yn,compatibleParams:Ae,modelId:j,placement:"down"})})}),s.jsx(z,{content:I==="parallel"?"已启用并行:同时生成多页,速度更快":"当前串行:逐页生成,更稳更省并发",showArrow:!1,children:s.jsxs("label",{className:`comic-generation-mode-check${T.running?" is-disabled":""}`,children:[s.jsx("input",{type:"checkbox",checked:I==="parallel",onChange:i=>aa(i.target.checked?"parallel":"serial"),disabled:T.running,"aria-label":"并行生成"}),s.jsx("span",{children:"并行"})]})}),s.jsx(z,{content:"每页并发生成图片数量",showArrow:!1,children:s.jsxs("label",{className:"comic-generation-count",children:[s.jsx("span",{children:"每页"}),s.jsx("select",{className:"comic-generation-count-select",value:E,onChange:i=>ia(i.target.value),disabled:T.running,"aria-label":"每页生成图片数量",children:$n.map(i=>s.jsxs("option",{value:i,children:[i," 张"]},i))})]})}),T.running?s.jsx(z,{content:"停止生成",showArrow:!1,children:s.jsxs("button",{onClick:la,disabled:T.stopping,"aria-label":"停止生成",children:[s.jsx(Ha,{size:14}),"停止"]})}):s.jsx(z,{content:"生成已选页面",showArrow:!1,children:s.jsxs("button",{className:"comic-primary-btn",onClick:()=>void qt(),"aria-label":"生成",children:[s.jsx(cn,{size:14}),"生成"]})})]}),s.jsx("div",{className:"comic-page-list",children:t.pages.map((i,o)=>{const d=ds(i),m=K(i),h=m.find(_=>_.url===i.imageUrl)||m[m.length-1];return s.jsxs("div",{className:"comic-page-card",children:[s.jsxs("div",{className:"comic-page-card__head",children:[s.jsxs("div",{className:"comic-page-title-row",children:[s.jsxs("label",{className:"comic-check",children:[s.jsx("input",{type:"checkbox",checked:G.has(i.id),onChange:()=>ea(i.id)}),s.jsxs("span",{children:["第 ",i.pageNumber," 页"]})]}),d&&s.jsx(z,{content:d,showArrow:!1,children:s.jsx("span",{className:"comic-page-title-label",children:d})}),s.jsx(mn,{className:"comic-icon-btn comic-prompt-optimize-btn",iconSize:14,originalPrompt:i.prompt,language:"zh",scenarioId:"tool.image",historyType:"image",allowStructuredMode:!0,defaultMode:"structured",disabled:T.running,tooltipPlacement:"top",onApply:_=>Vt(i.id,{prompt:_})}),s.jsx(z,{content:`在第 ${i.pageNumber} 页后新增页`,showArrow:!1,children:s.jsx("button",{className:"comic-icon-btn comic-page-add-btn",onClick:()=>Zn(i.id),disabled:T.running,"aria-label":`在第 ${i.pageNumber} 页后新增页`,children:s.jsx(Ka,{size:14})})})]}),s.jsx("span",{className:`comic-status comic-status--${i.status||"draft"}`,children:i.status||"draft"}),o>0&&s.jsx(z,{content:"上移",showArrow:!1,children:s.jsx("button",{className:"ma-icon-btn",onClick:()=>Ht(i.id,-1),disabled:T.running,"aria-label":"上移页面",children:s.jsx(Ya,{size:14})})}),o<t.pages.length-1&&s.jsx(z,{content:"下移",showArrow:!1,children:s.jsx("button",{className:"ma-icon-btn",onClick:()=>Ht(i.id,1),disabled:T.running,"aria-label":"下移页面",children:s.jsx(qa,{size:14})})}),s.jsx(z,{content:"删除",showArrow:!1,children:s.jsx("button",{className:"ma-icon-btn",onClick:()=>Qn(i.id),disabled:t.pages.length<=1||T.running,"aria-label":"删除页面",children:s.jsx(ln,{size:14})})})]}),s.jsxs("div",{className:"comic-page-card__body",children:[s.jsxs("div",{className:"comic-page-preview-pane",children:[s.jsxs("div",{className:"comic-page-preview",children:[h?s.jsx("button",{type:"button",className:"comic-page-preview-image-btn",onClick:()=>sa(i.id),"aria-label":`预览第 ${i.pageNumber} 页`,children:s.jsx("img",{src:h.url,alt:i.title,referrerPolicy:"no-referrer"})}):s.jsx("div",{className:"comic-page-placeholder",children:s.jsx(Wa,{size:22})}),s.jsx(z,{content:"重新生成当前页",showArrow:!1,children:s.jsxs("button",{className:"comic-page-preview-action",onClick:()=>void qt(i.id),disabled:T.running,"aria-label":"重新生成当前页",children:[s.jsx(on,{size:14}),s.jsx("span",{children:"重生"})]})})]}),m.length>0&&s.jsx("div",{className:"comic-page-variant-strip","aria-label":`第 ${i.pageNumber} 页历史图片`,children:m.map((_,C)=>{const F=_.url===i.imageUrl;return s.jsx(z,{content:F?`当前图片 ${C+1}`:`设为第 ${C+1} 张图片`,showArrow:!1,children:s.jsxs("button",{type:"button",className:`comic-page-variant-thumb${F?" comic-page-variant-thumb--active":""}`,onClick:()=>ra(i.id,_.id),disabled:T.running,"aria-label":`选择第 ${i.pageNumber} 页第 ${C+1} 张图片`,children:[s.jsx("img",{src:_.url,alt:`${i.title} ${C+1}`,referrerPolicy:"no-referrer"}),s.jsx("span",{children:C+1})]})},_.id)})}),s.jsx("div",{className:"comic-page-library-fallback",children:s.jsx(z,{content:"从素材库补回图片",showArrow:!1,children:s.jsx("button",{type:"button",className:"comic-page-library-btn",onClick:()=>oa(i.id),"aria-label":`从素材库补回第 ${i.pageNumber} 页图片`,children:s.jsx(Xa,{size:18})})})})]}),s.jsxs("div",{className:"comic-page-editor",children:[s.jsx("textarea",{className:"ma-textarea comic-page-unified-prompt",value:i.prompt,onChange:_=>Vt(i.id,{prompt:_.target.value}),placeholder:"本页完整图片提示词:写清主题、画面主体、构图、必要文案、风格和色彩"}),i.error&&s.jsx("div",{className:"ma-error",children:i.error})]})]})]},i.id)})}),s.jsxs("div",{className:"ma-card comic-export-inline",children:[s.jsxs("div",{className:"ma-card-header",children:[s.jsx("span",{children:"导出"}),s.jsxs("span",{className:"ma-muted",children:["已生成 ",xe," 张,至少 1 张即可导出"]})]}),s.jsxs("div",{className:"comic-export-grid",children:[s.jsxs("button",{className:"comic-export-card",disabled:!!me||xe===0,onClick:()=>void it("zip"),children:[s.jsx(Za,{size:24}),s.jsx("span",{children:me==="zip"?"导出中...":"ZIP"})]}),s.jsxs("button",{className:"comic-export-card",disabled:!!me||xe===0,onClick:()=>void it("pptx"),children:[s.jsx(Qa,{size:24}),s.jsx("span",{children:me==="pptx"?"导出中...":"PPTX"})]}),s.jsxs("button",{className:"comic-export-card",disabled:!!me||xe===0,onClick:()=>void it("pdf"),children:[s.jsx(rn,{size:24}),s.jsx("span",{children:me==="pdf"?"导出中...":"PDF"})]})]})]}),s.jsx(ri,{isOpen:!!ge,onClose:()=>Ze(null),mode:ei.SELECT,filterType:an.IMAGE,onSelect:ca,selectButtonText:"补回此页"})]})},Na=()=>s.jsxs("div",{className:"va-page comic-page",children:[s.jsxs("div",{className:"comic-history-filters",children:[s.jsx("input",{className:"ma-input",value:he,onChange:n=>Bn(n.target.value),onBlur:Ca,placeholder:"搜索标题或提示词"}),s.jsxs("select",{className:"ma-select",value:q,onChange:n=>wa(n.target.value),children:[s.jsx("option",{value:"all",children:"全部"}),s.jsx("option",{value:"planned",children:"已规划"}),s.jsx("option",{value:"done",children:"已完成"}),s.jsx("option",{value:"failed",children:"有失败"})]})]}),Ie.length===0?s.jsx("div",{className:"va-empty comic-history-empty",children:"暂无记录"}):s.jsx("div",{className:"comic-history-list",children:Ie.map(n=>s.jsxs("div",{className:"comic-history-item",children:[s.jsxs("button",{className:"comic-history-main",onClick:()=>da(n),children:[s.jsx("strong",{children:n.title||"未命名连环画"}),s.jsxs("span",{children:["创建时间 ",_s(n.createdAt)]}),s.jsxs("span",{children:[hs(n)," · ",n.pageCount," 页 ·"," ",pt(n)," 张图"]}),s.jsx("p",{children:n.sourcePrompt})]}),s.jsxs("div",{className:"comic-history-actions",children:[s.jsx("button",{onClick:()=>void ma(n),children:n.starred?"★":"☆"}),s.jsx("button",{onClick:()=>void ga(n.id),children:s.jsx(ln,{size:14})})]})]},n.id))})]});return s.jsxs("div",{className:"video-analyzer music-analyzer comic-creator",children:[s.jsx(Ba,{isHistoryPage:y==="history",showStarred:r,recordsCount:e.length,starredCount:u,currentStep:y,steps:fa,onStepNavigate:ha,onBackFromHistory:_a,onOpenHistory:ya,onOpenStarred:ba,onToggleStarred:xa}),y==="plan"&&Pa(),y==="generate"&&Sa(),y==="history"&&Na(),s.jsx(ni,{...Dn})]})};export{Ms as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";.prompt-history-popover{position:relative;align-self:flex-start;z-index:10;display:flex;align-items:center;flex-shrink:0}.prompt-history-popover__actions{display:flex;flex-direction:column;align-items:center;gap:4px}.prompt-history-popover__trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;color:var(--td-text-color-secondary, #666);cursor:pointer;transition:all .2s ease}.prompt-history-popover__trigger:hover{background:var(--td-bg-color-container-hover, rgba(0, 0, 0, .04));color:var(--td-text-color-primary, #333)}.prompt-history-popover__action-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;color:var(--td-text-color-secondary, #666);cursor:pointer;transition:all .2s ease}.prompt-history-popover__action-btn:hover:not(:disabled){background:var(--td-bg-color-container-hover, rgba(0, 0, 0, .04));color:var(--td-text-color-primary, #333)}.prompt-history-popover__action-btn:disabled{opacity:.55;cursor:not-allowed}.prompt-history-popover__panel-wrapper{position:absolute;bottom:calc(100% + 8px);right:0;z-index:1000}.inspiration-board{padding:12px;background:var(--island-bg-color, #fff);border:none;border-radius:24px 24px 0 0;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:none;animation:slideUp .3s ease-out;pointer-events:auto;width:100%;box-sizing:border-box}.inspiration-board--guide .inspiration-board__header{align-items:flex-start}.inspiration-board--guide .inspiration-board__hide-btn{margin-left:auto;margin-right:0}.inspiration-board__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;gap:8px}.inspiration-board__title{margin:0;font-size:14px;font-weight:600;color:var(--td-text-color-primary);flex:1}.inspiration-board__guide-title-group{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.inspiration-board__back-btn{display:flex;align-items:center;gap:4px;padding:4px 8px;border:none;border-radius:6px;cursor:pointer;font-size:12px;font-weight:500;background:var(--td-bg-color-container-hover);color:var(--td-text-color-secondary);transition:all .2s ease;flex-shrink:0}.inspiration-board__back-btn:hover{color:var(--td-text-color-primary);background:var(--td-bg-color-container-active)}.inspiration-board__back-btn:active{transform:scale(.97)}.inspiration-board__back-btn svg{flex-shrink:0}.inspiration-board__hide-btn{display:flex;align-items:center;gap:4px;padding:4px 10px;border:none;border-radius:6px;cursor:pointer;font-size:12px;font-weight:500;background:transparent;color:var(--td-text-color-placeholder);transition:all .2s ease;margin-right:8px}.inspiration-board__hide-btn:hover{background:var(--td-bg-color-container-hover);color:var(--td-text-color-secondary)}.inspiration-board__hide-btn:active{transform:scale(.97)}.inspiration-board__hide-btn svg{flex-shrink:0}.inspiration-board__prompt-btn{display:flex;align-items:center;gap:4px;padding:4px 10px;border:none;border-radius:6px;cursor:pointer;font-size:12px;font-weight:500;transition:all .2s ease;margin-right:8px}.inspiration-board__prompt-btn:active{transform:scale(.97)}.inspiration-board__prompt-btn svg{flex-shrink:0}.inspiration-board__pagination{display:flex;align-items:center;gap:4px}.inspiration-board__page-indicator{font-size:11px;color:var(--td-text-color-placeholder);font-variant-numeric:tabular-nums}.inspiration-board__nav-buttons{display:flex;gap:2px}.inspiration-board__nav-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:#fff;border:1px solid var(--td-component-border);border-radius:6px;cursor:pointer;color:var(--td-text-color-secondary);transition:all .2s ease}.inspiration-board__nav-btn:hover{background:var(--td-bg-color-container-hover);color:var(--td-text-color-primary);border-color:var(--td-brand-color-light)}.inspiration-board__nav-btn:active{transform:scale(.95)}.inspiration-board__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.inspiration-board__guide{display:grid;gap:10px;width:100%;animation:fadeIn .3s ease-out;justify-items:stretch}.inspiration-board__guide-main{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,.78fr);gap:18px;align-items:center;width:100%;min-width:0}.inspiration-board__guide-summary{display:grid;grid-template-columns:84px minmax(0,1fr);gap:12px;align-items:center;width:100%;box-sizing:border-box;min-width:0}.inspiration-board__guide-image{width:84px;height:84px;-o-object-fit:cover;object-fit:cover;border-radius:10px;border:1px solid var(--td-component-border);background:var(--td-bg-color-container);flex-shrink:0}.inspiration-board__guide-content{display:flex;flex-direction:column;justify-content:center;min-width:0}.inspiration-board__guide-badge{width:-moz-fit-content;width:fit-content;margin-bottom:6px;padding:2px 8px;font-size:10px;font-weight:600;border-radius:4px}.inspiration-board__guide-name{margin:0 0 4px;font-size:14px;line-height:1.35;font-weight:600;color:var(--td-text-color-primary)}.inspiration-board__guide-description{margin:0;font-size:12px;line-height:1.5;color:var(--td-text-color-secondary)}.inspiration-board__guide-action{display:grid;gap:8px;min-width:0}.inspiration-board__guide-cue{position:relative;min-height:92px;overflow:hidden;border-radius:12px;background:linear-gradient(135deg,#f59e0b1a,#fff0),repeating-linear-gradient(135deg,rgba(245,158,11,.08) 0,rgba(245,158,11,.08) 1px,transparent 1px,transparent 12px)}.inspiration-board__guide-pointer{position:absolute;left:28px;top:18px;z-index:3;color:#b45309;pointer-events:none;filter:drop-shadow(0 4px 8px rgba(245,158,11,.18));transform-origin:70% 70%;animation:pointerTap 1.8s ease-in-out infinite}.inspiration-board__guide-send-preview{position:absolute;right:32px;bottom:24px;display:flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:0;border-radius:50%;background:#f59e0be0;color:#fff;cursor:pointer;z-index:2;box-shadow:inset 0 0 0 2px #ffffff94,0 8px 18px #f59e0b33}.inspiration-board__guide-send-preview:hover{background:#f59e0bf2}.inspiration-board__guide-tip{display:flex;align-items:center;gap:8px;width:100%;box-sizing:border-box;padding:8px 10px;border-radius:10px;background:#f59e0b1a;color:#b45309;font-size:12px;line-height:1.45;font-weight:500}.inspiration-board__guide-tip svg{flex-shrink:0}.inspiration-card{position:relative;display:flex;flex-direction:column;background:#fff;border:1px solid var(--td-component-border);border-radius:12px;overflow:hidden;cursor:pointer;transition:all .2s ease}.inspiration-card:hover{border-color:var(--td-brand-color-light);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.inspiration-card:hover .inspiration-card__image{transform:scale(1.05)}.inspiration-card:hover .inspiration-card__hover-overlay{opacity:1}.inspiration-card:hover .inspiration-card__arrow{transform:translateY(0)}.inspiration-card:hover .inspiration-card__title{color:var(--td-brand-color)}.inspiration-card--placeholder{visibility:hidden}.inspiration-card__image-wrapper{position:relative;aspect-ratio:1/1;overflow:hidden;background:var(--td-bg-color-container)}.inspiration-card__image{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .5s ease}.inspiration-card__badge{position:absolute;top:8px;left:8px;padding:2px 8px;font-size:10px;font-weight:600;border-radius:4px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background-color:#fffffff2}.inspiration-card__hover-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#0000001a;opacity:0;transition:opacity .2s ease}.inspiration-card__arrow{display:flex;align-items:center;justify-content:center;width:28px;height:28px;background:#fffffff2;border-radius:50%;box-shadow:0 2px 8px #00000026;color:var(--td-text-color-primary);transform:translateY(8px);transition:transform .2s ease}.inspiration-card__content{padding:8px}.inspiration-card__title{margin:0 0 4px;font-size:13px;font-weight:600;color:var(--td-text-color-primary);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color .2s ease}.inspiration-card__description{margin:0;font-size:11px;color:var(--td-text-color-secondary);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;height:32px}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes pointerTap{0%,18%,to{left:28px;top:18px;transform:rotate(-10deg) scale(1)}58%,70%{left:calc(100% - 62px);top:30px;transform:rotate(-10deg) scale(1)}78%{left:calc(100% - 62px);top:30px;transform:rotate(-10deg) scale(.82)}88%{left:calc(100% - 62px);top:30px;transform:rotate(-10deg) scale(1)}}@media(max-width:640px){.inspiration-board__guide-main{grid-template-columns:1fr;gap:10px}.inspiration-board__guide-summary{gap:10px}.inspiration-board__guide-image{width:68px;height:68px}.inspiration-board__guide-summary{grid-template-columns:68px minmax(0,1fr)}.inspiration-board__guide-cue{min-height:70px}.inspiration-board__hide-btn,.inspiration-board__prompt-btn,.inspiration-board__back-btn{padding-left:8px;padding-right:8px}}.ai-input-bar{position:fixed;bottom:12px;left:50%;transform:translate(-50%);z-index:100;width:100%;max-width:720px;padding:0 16px;box-sizing:border-box;pointer-events:none;display:flex;flex-direction:column;align-items:center;gap:8px}.ai-input-bar--with-inspiration{gap:0}.ai-input-bar--with-inspiration:before{content:"";position:absolute;top:0;left:16px;right:16px;bottom:0;background:var(--island-bg-color, #fff);border-radius:24px;box-shadow:0 2px 16px #0000001a;z-index:-1;pointer-events:none}.ai-input-bar__content-preview,.ai-input-bar__images-preview{pointer-events:auto;display:flex;flex-wrap:wrap;gap:8px;padding:0 0 0 12px;background:transparent;border-radius:0;box-shadow:none;width:100%;flex-shrink:0;box-sizing:border-box}.ai-input-bar__processing{display:flex;align-items:center;justify-content:center;padding:8px 16px;color:#9ca3af;font-size:13px}.ai-input-bar__content-item,.ai-input-bar__image-item{position:relative;width:36px;height:36px;border-radius:4px;overflow:hidden;background:#f3f4f6;flex-shrink:0;cursor:pointer;transition:transform .15s ease;display:flex;align-items:center;justify-content:center}.ai-input-bar__content-item:hover,.ai-input-bar__image-item:hover{transform:scale(1.05)}.ai-input-bar__content-item img,.ai-input-bar__image-item img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;background:#f3f4f6}.ai-input-bar__content-item--graphics{border:1px solid #f59e0b}.ai-input-bar__content-item--video{border:2px solid #3b82f6}.ai-input-bar__content-item--text{width:auto;height:auto;min-width:64px;max-width:180px;padding:8px 12px;background:#eff6ff;border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:flex-start}.ai-input-bar__hover-preview{position:fixed;z-index:99999;pointer-events:none;border-radius:8px;box-shadow:0 8px 32px #00000040;overflow:hidden;background:var(--island-bg-color, #fff);padding:4px;animation:fadeIn .15s ease}.ai-input-bar__hover-preview img{max-width:300px;max-height:300px;width:auto;height:auto;-o-object-fit:contain;object-fit:contain;display:block}.ai-input-bar__hover-preview--text{padding:12px;max-width:400px;max-height:300px;overflow-y:auto}.ai-input-bar__hover-preview--video{padding:4px;max-width:400px;max-height:300px}.ai-input-bar__hover-video{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#000;border-radius:4px;overflow:hidden}.ai-input-bar__hover-video video{max-width:400px;max-height:300px;width:100%;height:auto;display:block}.ai-input-bar__hover-text{display:flex;flex-direction:column;gap:8px}.ai-input-bar__hover-text-header{display:flex;align-items:center;gap:6px;padding-bottom:8px;border-bottom:1px solid #f3f4f6;color:#3b82f6;font-size:14px;font-weight:500}.ai-input-bar__hover-text-content{font-size:13px;line-height:1.6;color:#1f2937;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto}.ai-input-bar__video-overlay{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:#0000004d;pointer-events:none}.ai-input-bar__video-overlay svg{color:#fff;filter:drop-shadow(0 1px 2px rgba(0,0,0,.3))}.ai-input-bar__video-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.ai-input-bar__text-preview{display:flex;align-items:center;gap:6px;width:100%}.ai-input-bar__text-icon{color:#3b82f6;flex-shrink:0}.ai-input-bar__text-content{font-size:12px;color:#1f2937;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-input-bar__content-remove,.ai-input-bar__image-remove{position:absolute;top:2px;right:2px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:#0009;border:none;border-radius:50%;color:#fff;cursor:pointer;opacity:0;transition:opacity .15s ease}.ai-input-bar__content-item:hover .ai-input-bar__content-remove,.ai-input-bar__content-item:hover .ai-input-bar__image-remove,.ai-input-bar__image-item:hover .ai-input-bar__content-remove,.ai-input-bar__image-item:hover .ai-input-bar__image-remove{opacity:1}.ai-input-bar__content-remove:hover,.ai-input-bar__image-remove:hover{background:#000c}.ai-input-bar__content-label{position:absolute;bottom:0;left:0;right:0;background:#f59e0be6;color:#fff;font-size:10px;text-align:center}.ai-input-bar__content-label--video{background:#3b82f6e6}.ai-input-bar__container{position:relative;pointer-events:auto;display:flex;flex-direction:column-reverse;width:100%;background:var(--island-bg-color, #fff);border-radius:24px;padding:6px 10px;box-shadow:0 2px 12px #00000014;transition:all .2s ease}.ai-input-bar__container--expanded{border-radius:16px;padding:12px}.ai-input-bar--with-inspiration .ai-input-bar__container{border-radius:0 0 24px 24px;box-shadow:none}.ai-input-bar--with-inspiration .ai-input-bar__container--expanded{border-radius:0 0 16px 16px}.ai-input-bar__bottom-bar{display:flex;align-items:center;gap:4px;width:100%;flex-shrink:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.ai-input-bar__bottom-bar::-webkit-scrollbar{display:none}.ai-input-bar__bottom-spacer{flex:1;min-width:8px}.ai-input-bar__input-area{position:relative;display:flex;flex-direction:column;gap:6px;margin-bottom:4px;width:100%;transition:max-height .2s ease}.ai-input-bar__input-area--expanded{max-height:200px;gap:8px;margin-bottom:8px}.ai-input-bar__tools{display:flex;align-items:center;gap:4px;flex-shrink:0}.ai-input-bar__prompt-row{display:flex;align-items:flex-start;gap:4px;width:100%;min-width:0}.ai-input-bar__type-toggle{display:flex;align-items:center;gap:2px}.ai-input-bar__type-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #f3f4f6;background:transparent;border-radius:8px;color:#6b7280;cursor:pointer;transition:all .15s ease}.ai-input-bar__type-btn:hover{color:#1f2937;background:#f3f4f6}.ai-input-bar__type-btn.active{background:#f59e0b;border-color:#f59e0b;color:#fff}.ai-input-bar__type-btn.active:hover{background:#d97706;border-color:#d97706}.ai-input-bar__model-selector{position:relative}.ai-input-bar__model-btn{display:flex;align-items:center;gap:4px;padding:8px 12px;border:none;background:transparent;font-size:14px;font-weight:500;color:#1f2937;cursor:pointer;transition:all .15s ease;white-space:nowrap}.ai-input-bar__model-btn:hover{color:#f59e0b}.ai-input-bar__model-btn svg{transition:transform .2s ease;color:#9ca3af}.ai-input-bar__model-btn svg.rotated{transform:rotate(180deg)}.ai-input-bar__model-menu{position:absolute;bottom:calc(100% + 8px);left:0;min-width:220px;background:var(--island-bg-color, #fff);border:1px solid #f3f4f6;border-radius:12px;box-shadow:0 4px 20px #0000001f;padding:6px;z-index:10;animation:menuSlideUp .15s ease}.ai-input-bar__model-option{display:flex;flex-direction:column;align-items:flex-start;width:100%;padding:10px 12px;border:none;background:transparent;border-radius:8px;cursor:pointer;text-align:left;transition:background .15s ease}.ai-input-bar__model-option:hover{background:#f3f4f6}.ai-input-bar__model-option.active{background:#f59e0b1a}.ai-input-bar__model-option.active .model-name{color:#f59e0b}.ai-input-bar__model-option .model-name{font-size:14px;font-weight:500;color:#1f2937}.ai-input-bar__model-option .model-desc{font-size:12px;color:#9ca3af;margin-top:2px}.ai-input-bar__upload-btn,.ai-input-bar__library-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #f3f4f6;background:transparent;border-radius:8px;color:#6b7280;cursor:pointer;transition:all .15s ease}.ai-input-bar__upload-btn:hover,.ai-input-bar__library-btn:hover{color:#1f2937;background:#f3f4f6;border-color:#9ca3af}.ai-input-bar__rich-input{position:relative;flex:1;min-width:0;width:100%}.ai-input-bar__highlight-layer{position:absolute;top:0;left:0;right:0;bottom:0;padding:6px 20px 6px 12px;font-size:15px;line-height:1.5;letter-spacing:normal;word-spacing:normal;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;pointer-events:none;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;overflow:hidden;z-index:1;box-sizing:border-box;border:1px solid transparent;margin:0}.ai-input-bar__highlight-text{color:transparent}.ai-input-bar__highlight-tag{color:transparent;border-radius:3px;box-decoration-break:clone;-webkit-box-decoration-break:clone;padding:0 2px;margin:0 -2px}.ai-input-bar__highlight-tag--image{background:#e5393526}.ai-input-bar__highlight-tag--video{background:#ff980026}.ai-input-bar__highlight-tag--param{background:#9c27b026}.ai-input-bar__highlight-tag--count{background:#2196f326}.ai-input-bar__input{width:100%;border:none;background:transparent;font-size:15px;line-height:1.5;letter-spacing:normal;word-spacing:normal;text-rendering:auto;-webkit-font-smoothing:auto;color:#1f2937;resize:none;outline:none;min-height:28.5px;max-height:147px;overflow-y:hidden;padding:3px 20px 3px 12px;margin:0;font-family:PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;transition:height .2s ease,min-height .2s ease,max-height .2s ease,padding .2s ease;position:relative;z-index:2;box-sizing:border-box;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word}.ai-input-bar__input::-webkit-scrollbar{width:8px}.ai-input-bar__input::-webkit-scrollbar-track{background:transparent}.ai-input-bar__input::-webkit-scrollbar-thumb{background:#0003;border-radius:4px}.ai-input-bar__input::-webkit-scrollbar-thumb:hover{background:#00000059}.ai-input-bar__input::-moz-placeholder{color:#9ca3af}.ai-input-bar__input::placeholder{color:#9ca3af}.ai-input-bar__input:focus{outline:none;border:none!important;box-shadow:none}.ai-input-bar__input:hover{outline:none;border:none!important;box-shadow:none}.ai-input-bar__input:disabled{opacity:.6}.ai-input-bar__input--focused{padding-top:6px;padding-bottom:6px;min-height:102px;max-height:147px}.ai-input-bar__upload-btn,.ai-input-bar__library-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;border-radius:8px;color:#6b7280;cursor:pointer;transition:all .2s ease;flex-shrink:0}.ai-input-bar__upload-btn:hover,.ai-input-bar__library-btn:hover{background:#f3f4f6;color:#f59e0b}.ai-input-bar__upload-btn:active,.ai-input-bar__library-btn:active{transform:scale(.95)}.ai-input-bar .generation-type-dropdown{position:relative;display:inline-flex;flex-shrink:0}.ai-input-bar .generation-type-dropdown__trigger{display:flex;align-items:center;gap:2px;padding:4px 8px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:all .15s ease;color:#1f2937;font-size:13px;font-weight:500;white-space:nowrap}.ai-input-bar .generation-type-dropdown__trigger:hover:not(:disabled){background:#f59e0b1a}.ai-input-bar .generation-type-dropdown__trigger--open{background:#f59e0b26}.ai-input-bar .generation-type-dropdown__icon-prefix{color:#f59e0b;display:flex;align-items:center;font-weight:600;margin-right:1px}.ai-input-bar .generation-type-dropdown__label{color:#6b7280}.ai-input-bar .generation-type-dropdown__chevron{color:#9ca3af;transition:transform .2s ease;margin-left:1px}.ai-input-bar .generation-type-dropdown__chevron--open{transform:rotate(180deg)}.ai-input-bar .generation-type-dropdown__menu{position:absolute;bottom:calc(100% + 8px);left:0;background:var(--island-bg-color, #fff);border:1px solid #f3f4f6;border-radius:8px;box-shadow:0 4px 16px #0000001f;padding:4px;z-index:100;min-width:100px}.ai-input-bar .generation-type-dropdown__item{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:6px;cursor:pointer;transition:background .1s ease;font-size:13px;white-space:nowrap;color:#1f2937}.ai-input-bar .generation-type-dropdown__item:hover{background:#f3f4f6}.ai-input-bar .generation-type-dropdown__item--selected{background:#f59e0b14;color:#f59e0b;font-weight:500}.ai-input-bar .generation-type-dropdown__item-icon{display:flex;align-items:center;color:#9ca3af}.generation-type-dropdown__item--selected .ai-input-bar .generation-type-dropdown__item-icon{color:#f59e0b}.ai-input-bar .generation-type-dropdown__item-check{margin-left:auto;color:#f59e0b}.ai-input-bar .skill-dropdown{position:relative;display:inline-flex;flex-shrink:0}.ai-input-bar .skill-dropdown__trigger{display:flex;align-items:center;gap:2px;padding:4px 8px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:all .15s ease;color:#1f2937;font-size:13px;font-weight:500;white-space:nowrap}.ai-input-bar .skill-dropdown__trigger:hover:not(:disabled){background:#f59e0b1a}.ai-input-bar .skill-dropdown__trigger--open{background:#f59e0b26}.ai-input-bar .skill-dropdown__icon-prefix{color:#f59e0b;display:flex;align-items:center;font-weight:600;margin-right:1px}.ai-input-bar .skill-dropdown__label{color:#6b7280}.ai-input-bar .skill-dropdown__chevron{color:#9ca3af;transition:transform .2s ease;margin-left:1px}.ai-input-bar .skill-dropdown__chevron--open{transform:rotate(180deg)}.ai-input-bar .count-dropdown{position:relative;display:inline-flex;flex-shrink:0}.ai-input-bar .count-dropdown__trigger{display:flex;align-items:center;gap:1px;padding:4px 8px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:all .15s ease;color:#1f2937;font-size:13px;font-weight:500;white-space:nowrap}.ai-input-bar .count-dropdown__trigger:hover:not(:disabled){background:#f59e0b1a}.ai-input-bar .count-dropdown__trigger--open{background:#f59e0b26}.ai-input-bar .count-dropdown__plus-icon{color:#f59e0b;flex-shrink:0}.ai-input-bar .count-dropdown__label{color:#6b7280}.ai-input-bar .count-dropdown__chevron{color:#9ca3af;transition:transform .2s ease;margin-left:1px}.ai-input-bar .count-dropdown__chevron--open{transform:rotate(180deg)}.ai-input-bar .count-dropdown__menu{position:absolute;bottom:calc(100% + 8px);left:0;background:var(--island-bg-color, #fff);border:1px solid #f3f4f6;border-radius:8px;box-shadow:0 4px 16px #0000001f;padding:4px;z-index:100;min-width:80px}.ai-input-bar .count-dropdown__item{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:6px;cursor:pointer;transition:background .1s ease;font-size:13px;color:#1f2937}.ai-input-bar .count-dropdown__item:hover{background:#f3f4f6}.ai-input-bar .count-dropdown__item--selected{background:#f59e0b14;color:#f59e0b;font-weight:500}.ai-input-bar .count-dropdown__item-check{color:#f59e0b}.ai-input-bar__send-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;background:#f3f4f6;border-radius:50%;color:#9ca3af;cursor:not-allowed;transition:all .2s ease;flex-shrink:0}.ai-input-bar__send-btn.active{background:#f59e0b;color:#fff;cursor:pointer;box-shadow:0 2px 8px #f59e0b66}.ai-input-bar__send-btn.active:hover{background:#d97706;transform:scale(1.05)}.ai-input-bar__send-btn.loading{background:#f59e0b99;cursor:wait;animation:pulse 1.5s infinite}.ai-input-bar__send-btn--guide{box-shadow:inset 0 0 0 3px #ffffff8c,0 2px 8px #f59e0b66;animation:sendGuidePulse 1.4s ease-in-out infinite}.ai-input-bar__send-btn--guide.active:hover{transform:none}.ai-input-bar__send-btn:disabled{pointer-events:none}@keyframes menuSlideUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes sendGuidePulse{0%,to{box-shadow:inset 0 0 0 3px #ffffff8c,0 2px 8px #f59e0b66}50%{box-shadow:inset 0 0 0 3px #ffffffd1,0 6px 16px #f59e0b73}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.7}}:root[data-theme=dark] .ai-input-bar__content-preview,:root[data-theme=dark] .ai-input-bar__images-preview{background:var(--color-surface-high, #2a2a2a)}:root[data-theme=dark] .ai-input-bar__content-item,:root[data-theme=dark] .ai-input-bar__image-item{background:var(--color-surface-mid, #333)}:root[data-theme=dark] .ai-input-bar__content-item--text{background:#3b82f626;border-color:#3b82f64d}:root[data-theme=dark] .ai-input-bar__text-content{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .ai-input-bar__hover-preview{background:var(--color-surface-high, #2a2a2a);box-shadow:0 8px 32px #00000080}:root[data-theme=dark] .ai-input-bar__hover-text-header{border-bottom-color:var(--color-border, #444);color:#60a5fa}:root[data-theme=dark] .ai-input-bar__hover-text-content{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .ai-input-bar__processing{color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar__container{background:var(--color-surface-high, #2a2a2a);border-color:var(--color-border, #444);box-shadow:0 2px 12px #0003}:root[data-theme=dark] .ai-input-bar__type-btn{border-color:var(--color-border, #444);color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar__type-btn:hover{color:var(--color-gray-20, #ccc);background:var(--color-surface-mid, #333)}:root[data-theme=dark] .ai-input-bar__type-btn.active{background:#f59e0b;border-color:#f59e0b;color:#fff}:root[data-theme=dark] .ai-input-bar__model-btn{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .ai-input-bar__model-btn:hover{color:#f59e0b}:root[data-theme=dark] .ai-input-bar__model-btn svg{color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar__model-menu{background:var(--color-surface-high, #2a2a2a);border-color:var(--color-border, #444)}:root[data-theme=dark] .ai-input-bar__model-option:hover{background:var(--color-surface-mid, #333)}:root[data-theme=dark] .ai-input-bar__model-option.active{background:#f59e0b26}:root[data-theme=dark] .ai-input-bar__model-option .model-name{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .ai-input-bar__model-option .model-desc{color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar__upload-btn,:root[data-theme=dark] .ai-input-bar__library-btn{border-color:var(--color-border, #444);color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar__upload-btn:hover,:root[data-theme=dark] .ai-input-bar__library-btn:hover{color:var(--color-gray-20, #ccc);background:var(--color-surface-mid, #333)}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__trigger,:root[data-theme=dark] .ai-input-bar .count-dropdown__trigger,:root[data-theme=dark] .ai-input-bar .skill-dropdown__trigger{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__trigger:hover,:root[data-theme=dark] .ai-input-bar .count-dropdown__trigger:hover,:root[data-theme=dark] .ai-input-bar .skill-dropdown__trigger:hover{background:#f59e0b26}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__trigger--open,:root[data-theme=dark] .ai-input-bar .count-dropdown__trigger--open,:root[data-theme=dark] .ai-input-bar .skill-dropdown__trigger--open{background:#f59e0b33}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__icon-prefix,:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__plus-icon,:root[data-theme=dark] .ai-input-bar .count-dropdown__icon-prefix,:root[data-theme=dark] .ai-input-bar .count-dropdown__plus-icon,:root[data-theme=dark] .ai-input-bar .skill-dropdown__icon-prefix,:root[data-theme=dark] .ai-input-bar .skill-dropdown__plus-icon{color:#f59e0b}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__label,:root[data-theme=dark] .ai-input-bar .count-dropdown__label,:root[data-theme=dark] .ai-input-bar .skill-dropdown__label{color:var(--color-gray-30, #bbb)}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__chevron,:root[data-theme=dark] .ai-input-bar .count-dropdown__chevron,:root[data-theme=dark] .ai-input-bar .skill-dropdown__chevron{color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__menu,:root[data-theme=dark] .ai-input-bar .count-dropdown__menu,:root[data-theme=dark] .ai-input-bar .skill-dropdown__menu{background:var(--color-surface-high, #2a2a2a);border-color:var(--color-border, #444);box-shadow:0 4px 20px #0006}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__item,:root[data-theme=dark] .ai-input-bar .count-dropdown__item,:root[data-theme=dark] .ai-input-bar .skill-dropdown__item{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__item:hover,:root[data-theme=dark] .ai-input-bar .count-dropdown__item:hover,:root[data-theme=dark] .ai-input-bar .skill-dropdown__item:hover{background:var(--color-surface-mid, #333)}:root[data-theme=dark] .ai-input-bar .generation-type-dropdown__item--selected,:root[data-theme=dark] .ai-input-bar .count-dropdown__item--selected,:root[data-theme=dark] .ai-input-bar .skill-dropdown__item--selected{background:#f59e0b26;color:#f59e0b}:root[data-theme=dark] .ai-input-bar__highlight-tag--image{background:#e5393533}:root[data-theme=dark] .ai-input-bar__highlight-tag--video{background:#ff980033}:root[data-theme=dark] .ai-input-bar__highlight-tag--param{background:#9c27b033}:root[data-theme=dark] .ai-input-bar__highlight-tag--count{background:#2196f333}:root[data-theme=dark] .ai-input-bar__input{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .ai-input-bar__input::-webkit-scrollbar-thumb{background:#fff3}:root[data-theme=dark] .ai-input-bar__input::-webkit-scrollbar-thumb:hover{background:#ffffff4d}:root[data-theme=dark] .ai-input-bar__input::-moz-placeholder{color:var(--color-gray-60, #666)}:root[data-theme=dark] .ai-input-bar__input::placeholder{color:var(--color-gray-60, #666)}:root[data-theme=dark] .ai-input-bar__send-btn{background:var(--color-surface-mid, #333);color:var(--color-gray-60, #666)}:root[data-theme=dark] .ai-input-bar__send-btn.active{background:#f59e0b;color:#fff}.prompt-suggestion-panel{position:absolute;bottom:calc(100% + 8px);left:0;right:0;background:var(--island-bg-color, #fff);border-radius:16px;box-shadow:0 4px 24px #0000001f;overflow:hidden;animation:panelSlideUp .2s ease;max-height:320px;display:flex;flex-direction:column;pointer-events:auto}.prompt-suggestion-panel--empty{max-height:auto}.prompt-suggestion-panel__content{overflow-y:auto;padding:8px}.prompt-suggestion-panel__content::-webkit-scrollbar{width:6px}.prompt-suggestion-panel__content::-webkit-scrollbar-track{background:transparent}.prompt-suggestion-panel__content::-webkit-scrollbar-thumb{background:#00000026;border-radius:3px}.prompt-suggestion-panel__content::-webkit-scrollbar-thumb:hover{background:#00000040}.prompt-suggestion-panel__empty{padding:24px 16px;text-align:center;color:#9ca3af;font-size:14px}.prompt-suggestion-panel__section:not(:last-child){margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid #f3f4f6}.prompt-suggestion-panel__section-header{display:flex;align-items:center;gap:6px;padding:4px 8px 8px;font-size:12px;font-weight:500;color:#9ca3af;text-transform:uppercase;letter-spacing:.5px}.prompt-suggestion-panel__section-header svg{opacity:.7}.prompt-suggestion-panel__list{display:flex;flex-direction:column;gap:2px}.prompt-suggestion-panel__item{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-radius:10px;cursor:pointer;transition:all .15s ease;background:transparent}.prompt-suggestion-panel__item:hover,.prompt-suggestion-panel__item--highlighted{background:#f3f4f6}.prompt-suggestion-panel__item--history:hover .prompt-suggestion-panel__item-delete,.prompt-suggestion-panel__item--history.prompt-suggestion-panel__item--highlighted .prompt-suggestion-panel__item-delete{opacity:1}.prompt-suggestion-panel__item-text{flex:1;font-size:14px;line-height:1.4;color:#1f2937;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:8px}.prompt-suggestion-panel__item-delete{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:transparent;border-radius:4px;color:#9ca3af;cursor:pointer;opacity:0;transition:all .15s ease;flex-shrink:0}.prompt-suggestion-panel__item-delete:hover{background:#ef44441a;color:#ef4444}@keyframes panelSlideUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}:root[data-theme=dark] .prompt-suggestion-panel{background:var(--color-surface-high, #2a2a2a);box-shadow:0 4px 24px #0000004d}:root[data-theme=dark] .prompt-suggestion-panel__content::-webkit-scrollbar-thumb{background:#ffffff26}:root[data-theme=dark] .prompt-suggestion-panel__content::-webkit-scrollbar-thumb:hover{background:#ffffff40}:root[data-theme=dark] .prompt-suggestion-panel__empty{color:var(--color-gray-50, #999)}:root[data-theme=dark] .prompt-suggestion-panel__section:not(:last-child){border-bottom-color:var(--color-border, #444)}:root[data-theme=dark] .prompt-suggestion-panel__section-header{color:var(--color-gray-50, #999)}:root[data-theme=dark] .prompt-suggestion-panel__item:hover{background:var(--color-surface-mid, #333)}:root[data-theme=dark] .prompt-suggestion-panel__item-text{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .prompt-suggestion-panel__item-delete{color:var(--color-gray-50, #999)}:root[data-theme=dark] .prompt-suggestion-panel__item-delete:hover{background:#ef444426;color:#f87171}@media(max-width:1024px){.ai-input-bar{max-width:600px}}@media(max-width:768px){.ai-input-bar{bottom:calc(env(safe-area-inset-bottom,0px) + 12px);padding:0 12px;max-width:calc(100% - 80px);left:calc(50% + 30px)}.ai-input-bar__container{padding:6px 8px;border-radius:20px}.ai-input-bar__content-preview,.ai-input-bar__images-preview{gap:6px}.ai-input-bar__bottom-bar{gap:2px}.ai-input-bar__hover-preview{display:none}}@media(max-width:640px){.ai-input-bar{bottom:calc(env(safe-area-inset-bottom,0px) + 8px);padding:0 8px;padding-left:calc(env(safe-area-inset-left,0px) + 8px);padding-right:calc(env(safe-area-inset-right,0px) + 8px);left:50%;transform:translate(-50%);max-width:calc(100% - 16px);width:100%}.ai-input-bar__content-preview,.ai-input-bar__images-preview{gap:4px;padding-left:8px}.ai-input-bar__content-item,.ai-input-bar__image-item{width:32px;height:32px}.ai-input-bar__content-item--text{height:auto;min-width:48px;max-width:120px;padding:6px 8px}.ai-input-bar__container{padding:4px 6px;border-radius:16px;gap:4px}.ai-input-bar__bottom-bar{gap:2px}.ai-input-bar__bottom-spacer{min-width:4px}.ai-input-bar__type-btn{width:36px;height:36px;min-width:36px}.ai-input-bar__model-btn{padding:6px 8px;font-size:13px}.ai-input-bar__upload-btn,.ai-input-bar__library-btn{width:36px;height:36px;min-width:36px}.ai-input-bar__highlight-layer{font-size:14px;padding:4px 8px}.ai-input-bar__input{font-size:14px;padding:2px 8px;min-height:25px}.ai-input-bar__input--focused{padding-top:4px;padding-bottom:4px;min-height:92px;max-height:134px}.ai-input-bar__send-btn{width:36px;height:36px;min-width:36px}.ai-input-bar .generation-type-dropdown__trigger,.ai-input-bar .count-dropdown__trigger,.ai-input-bar .skill-dropdown__trigger{padding:4px 6px;font-size:12px}.ai-input-bar .generation-type-dropdown__menu,.ai-input-bar .count-dropdown__menu,.ai-input-bar .skill-dropdown__menu{max-width:calc(100vw - 32px)}.prompt-suggestion-panel{max-height:240px;border-radius:12px}.prompt-suggestion-panel__item{padding:8px 10px}.prompt-suggestion-panel__item-text{font-size:13px}}@media(max-width:480px){.ai-input-bar{bottom:calc(env(safe-area-inset-bottom,0px) + 6px);padding:0 6px;padding-left:calc(env(safe-area-inset-left,0px) + 6px);padding-right:calc(env(safe-area-inset-right,0px) + 6px)}.ai-input-bar__container{padding:4px}.ai-input-bar__type-btn,.ai-input-bar__upload-btn,.ai-input-bar__library-btn,.ai-input-bar__send-btn{width:34px;height:34px;min-width:34px}.ai-input-bar__model-btn{padding:4px 6px;font-size:12px}.ai-input-bar__input{font-size:13px;min-height:23.5px}.ai-input-bar__input--focused{min-height:86px;max-height:125px}.ai-input-bar .generation-type-dropdown__label,.ai-input-bar .count-dropdown__label,.ai-input-bar .skill-dropdown__label{display:none}}.ai-input-bar__at-suggestion{position:absolute;bottom:calc(100% + 8px);left:0;min-width:280px;max-width:400px;max-height:320px;background:var(--island-bg-color, #fff);border:1px solid #e5e7eb;border-radius:12px;box-shadow:0 4px 20px #00000026;overflow:hidden;z-index:1000;animation:atSuggestionFadeIn .15s ease}.ai-input-bar__at-suggestion-header{padding:10px 12px;font-size:12px;font-weight:500;color:#6b7280;border-bottom:1px solid #f3f4f6;background:#fafafa}.ai-input-bar__at-suggestion-list{max-height:260px;overflow-y:auto;padding:4px;position:relative}.ai-input-bar__at-suggestion-list::-webkit-scrollbar{width:4px}.ai-input-bar__at-suggestion-list::-webkit-scrollbar-track{background:transparent}.ai-input-bar__at-suggestion-list::-webkit-scrollbar-thumb{background:#e5e7eb;border-radius:2px}.ai-input-bar__at-suggestion-item{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;border-radius:8px;cursor:pointer;transition:background .1s ease}.ai-input-bar__at-suggestion-item:hover,.ai-input-bar__at-suggestion-item--highlighted{background:#f3f4f6}.ai-input-bar__at-suggestion-item--selected{background:#f59e0b14}.ai-input-bar__at-suggestion-item--selected:hover,.ai-input-bar__at-suggestion-item--selected.ai-input-bar__at-suggestion-item--highlighted{background:#f59e0b1f}.ai-input-bar__at-suggestion-item--selected .ai-input-bar__at-suggestion-item-label{color:#d97706;font-weight:500}.ai-input-bar__at-suggestion-item--selected .ai-input-bar__at-suggestion-item-code{color:#f59e0b}.ai-input-bar__at-suggestion-item-content{flex:1;min-width:0}.ai-input-bar__at-suggestion-item-name{display:flex;align-items:center;gap:8px}.ai-input-bar__at-suggestion-item-code{font-size:12px;font-family:SF Mono,Monaco,Menlo,monospace;color:#9ca3af;flex-shrink:0}.ai-input-bar__at-suggestion-item-label{font-size:13px;color:#1f2937;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-input-bar__at-suggestion-item-vip{font-size:10px;font-weight:600;color:#e91e63;background:#e91e631a;border:1px solid rgba(233,30,99,.2);padding:0 4px;border-radius:3px;flex-shrink:0}.ai-input-bar__at-suggestion-item-desc{font-size:11px;color:#9ca3af;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-input-bar__at-suggestion-item-check{flex-shrink:0;color:#f59e0b;margin-left:8px}@keyframes atSuggestionFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}:root[data-theme=dark] .ai-input-bar__at-suggestion{background:var(--color-surface-high, #2a2a2a);border-color:var(--color-border, #444)}:root[data-theme=dark] .ai-input-bar__at-suggestion-header{background:var(--color-surface-mid, #333);border-bottom-color:var(--color-border, #444);color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar__at-suggestion-list::-webkit-scrollbar-thumb{background:var(--color-border, #444)}:root[data-theme=dark] .ai-input-bar__at-suggestion-item:hover,:root[data-theme=dark] .ai-input-bar__at-suggestion-item--highlighted{background:var(--color-surface-mid, #333)}:root[data-theme=dark] .ai-input-bar__at-suggestion-item--selected{background:#f59e0b1f}:root[data-theme=dark] .ai-input-bar__at-suggestion-item--selected:hover,:root[data-theme=dark] .ai-input-bar__at-suggestion-item--selected.ai-input-bar__at-suggestion-item--highlighted{background:#f59e0b2e}:root[data-theme=dark] .ai-input-bar__at-suggestion-item-code{color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar__at-suggestion-item-label{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .ai-input-bar__at-suggestion-item-desc{color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar__at-suggestion-item-vip{background:#e91e6326;border-color:#e91e634d}.generation-type-dropdown__menu{background:var(--island-bg-color, #fff);border:1px solid #f3f4f6;border-radius:8px;box-shadow:0 4px 16px #0000001f;padding:0;min-width:100px;overflow:hidden}.generation-type-dropdown__header{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:12px;font-weight:500;color:#6b7280;border-bottom:1px solid #f3f4f6;background:#fafafa}.generation-type-dropdown__list{padding:4px}.generation-type-dropdown__item{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:6px;cursor:pointer;transition:background .1s ease;font-size:13px;white-space:nowrap;color:#1f2937}.generation-type-dropdown__item:hover,.generation-type-dropdown__item--highlighted{background:#f3f4f6}.generation-type-dropdown__item--selected{background:#f59e0b14;color:#f59e0b;font-weight:500}.generation-type-dropdown__item--selected:hover,.generation-type-dropdown__item--selected.generation-type-dropdown__item--highlighted{background:#f59e0b1f}.generation-type-dropdown__item-icon{display:flex;align-items:center;color:#9ca3af}.generation-type-dropdown__item--selected .generation-type-dropdown__item-icon{color:#f59e0b}.generation-type-dropdown__item-label{flex:1}.generation-type-dropdown__item-check{margin-left:auto;color:#f59e0b}.skill-dropdown__menu{background:var(--island-bg-color, #fff);border:1px solid #f3f4f6;border-radius:8px;box-shadow:0 4px 16px #0000001f;padding:0;min-width:120px;overflow:hidden}.skill-dropdown__header{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:12px;font-weight:500;color:#6b7280;border-bottom:1px solid #f3f4f6;background:#fafafa}.skill-dropdown__list{padding:4px}.skill-dropdown__item{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:6px;cursor:pointer;transition:background .1s ease;font-size:13px;white-space:nowrap;color:#1f2937}.skill-dropdown__item:hover,.skill-dropdown__item--highlighted{background:#f3f4f6}.skill-dropdown__item--selected{background:#f59e0b14;color:#f59e0b;font-weight:500}.skill-dropdown__item--selected:hover,.skill-dropdown__item--selected.skill-dropdown__item--highlighted{background:#f59e0b1f}.skill-dropdown__item-label{flex:1}.skill-dropdown__item-badge{font-size:10px;padding:1px 5px;border-radius:3px;background:#f59e0b1a;color:#f59e0b;font-weight:500;margin-left:auto;margin-right:4px}.skill-dropdown__item-badge--external{background:#3b82f61a;color:#3b82f6}.skill-dropdown__search{padding:4px 8px;border-bottom:1px solid #f3f4f6}.skill-dropdown__search-input{width:100%;padding:6px 8px;font-size:12px;border:1px solid #f3f4f6;border-radius:4px;outline:none;background:var(--island-bg-color, #fff);color:inherit}.skill-dropdown__search-input:focus{border-color:#f59e0b}.skill-dropdown__search-input::-moz-placeholder{color:#999}.skill-dropdown__search-input::placeholder{color:#999}.skill-dropdown__item-check{color:#f59e0b;flex-shrink:0}.skill-dropdown__divider{height:1px;background:#f3f4f6;margin:4px 0}.skill-dropdown__add-btn{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:13px;color:#f59e0b;transition:background .1s ease}.skill-dropdown__add-btn:hover{background:#f59e0b14}.count-dropdown__menu{background:var(--island-bg-color, #fff);border:1px solid #f3f4f6;border-radius:8px;box-shadow:0 4px 16px #0000001f;padding:0;min-width:80px;overflow:hidden}.count-dropdown__header{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:12px;font-weight:500;color:#6b7280;border-bottom:1px solid #f3f4f6;background:#fafafa}.count-dropdown__list{padding:4px}.count-dropdown__item{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:6px;cursor:pointer;transition:background .1s ease;font-size:13px;white-space:nowrap;color:#1f2937}.count-dropdown__item:hover,.count-dropdown__item--highlighted{background:#f3f4f6}.count-dropdown__item--selected{background:#f59e0b14;color:#f59e0b;font-weight:500}.count-dropdown__item--selected:hover,.count-dropdown__item--selected.count-dropdown__item--highlighted{background:#f59e0b1f}.count-dropdown__item-check{margin-left:8px;color:#f59e0b}:root[data-theme=dark] .generation-type-dropdown__menu,:root[data-theme=dark] .count-dropdown__menu,:root[data-theme=dark] .skill-dropdown__menu{background:var(--color-surface-high, #2a2a2a);border-color:var(--color-border, #444);box-shadow:0 4px 20px #0006}:root[data-theme=dark] .generation-type-dropdown__header,:root[data-theme=dark] .count-dropdown__header,:root[data-theme=dark] .skill-dropdown__header{background:var(--color-surface-mid, #333);border-bottom-color:var(--color-border, #444);color:var(--color-gray-50, #999)}:root[data-theme=dark] .generation-type-dropdown__item,:root[data-theme=dark] .count-dropdown__item,:root[data-theme=dark] .skill-dropdown__item{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .generation-type-dropdown__item:hover,:root[data-theme=dark] .generation-type-dropdown__item--highlighted,:root[data-theme=dark] .count-dropdown__item:hover,:root[data-theme=dark] .count-dropdown__item--highlighted,:root[data-theme=dark] .skill-dropdown__item:hover,:root[data-theme=dark] .skill-dropdown__item--highlighted{background:var(--color-surface-mid, #333)}:root[data-theme=dark] .generation-type-dropdown__item--selected,:root[data-theme=dark] .count-dropdown__item--selected,:root[data-theme=dark] .skill-dropdown__item--selected{background:#f59e0b26;color:#f59e0b}:root[data-theme=dark] .generation-type-dropdown__item--selected:hover,:root[data-theme=dark] .generation-type-dropdown__item--selected.generation-type-dropdown__item--highlighted,:root[data-theme=dark] .generation-type-dropdown__item--selected.count-dropdown__item--highlighted,:root[data-theme=dark] .generation-type-dropdown__item--selected.skill-dropdown__item--highlighted,:root[data-theme=dark] .count-dropdown__item--selected:hover,:root[data-theme=dark] .count-dropdown__item--selected.generation-type-dropdown__item--highlighted,:root[data-theme=dark] .count-dropdown__item--selected.count-dropdown__item--highlighted,:root[data-theme=dark] .count-dropdown__item--selected.skill-dropdown__item--highlighted,:root[data-theme=dark] .skill-dropdown__item--selected:hover,:root[data-theme=dark] .skill-dropdown__item--selected.generation-type-dropdown__item--highlighted,:root[data-theme=dark] .skill-dropdown__item--selected.count-dropdown__item--highlighted,:root[data-theme=dark] .skill-dropdown__item--selected.skill-dropdown__item--highlighted{background:#f59e0b33}:root[data-theme=dark] .skill-dropdown__header{background:var(--color-surface-mid, #333);border-bottom-color:var(--color-border, #444);color:var(--color-gray-50, #999)}:root[data-theme=dark] .skill-dropdown__divider{background:var(--color-border, #444)}:root[data-theme=dark] .skill-dropdown__add-btn{color:#f59e0b}:root[data-theme=dark] .skill-dropdown__add-btn:hover{background:#f59e0b26}:root[data-theme=dark] .skill-dropdown__item-badge{background:#f59e0b33}
|