aitu-app 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/assets/{CanvasAudioPlayer-CZVC9SHi.js → CanvasAudioPlayer-C_USx5uz.js} +1 -1
- package/assets/{ComicCreator-C7g-hysw.js → ComicCreator-qGQaXp7h.js} +2 -2
- package/assets/DeferredAIInputBar-CPykEFYX.css +1 -0
- package/assets/DeferredAIInputBar-LmZGQCLT.js +107 -0
- package/assets/{DrawnixDeferredFeatures-B2-HoTXj.js → DrawnixDeferredFeatures-Hy_-quZ1.js} +1 -1
- package/assets/{KnowledgeBaseContent-BeADhfA-.js → KnowledgeBaseContent-DSKNA70H.js} +8 -8
- package/assets/{MVCreator-CA2NyGKz.js → MVCreator-C3iClDLU.js} +12 -10
- package/assets/{ModelBenchmarkWorkbench-gOIZuctB.js → ModelBenchmarkWorkbench-BxwdcZ0q.js} +2 -2
- package/assets/{MusicAnalyzer-mzL-zDQJ.js → MusicAnalyzer-f_T6_YPJ.js} +2 -2
- package/assets/{ParametersDropdown-CBNxsp7u.js → ParametersDropdown-CTSN3ClD.js} +1 -1
- package/assets/{PromptHistoryTool-DNVmfpaU.js → PromptHistoryTool-DV-8RSdz.js} +2 -2
- package/assets/{ResizableDivider-C9gImQ7_.js → ResizableDivider-CUQBmPpx.js} +1 -1
- package/assets/TaskQueuePanel-CtjY1W4t.js +1 -0
- package/assets/{VideoAnalyzer-DOhiHjdh.js → VideoAnalyzer-BBVBSONO.js} +3 -3
- package/assets/{VideoAnalyzer-P9t7IwO6.js → VideoAnalyzer-BmAjGvN8.js} +1 -1
- package/assets/{ai-chat-CYiA-Evp.js → ai-chat-BO5vbKZW.js} +5 -5
- package/assets/{ai-generation-preferences-service-BMzL3ZwF.js → ai-generation-preferences-service-ZmPTR-wz.js} +1 -1
- package/assets/{batch-image-generation-Dv9sbP2v.js → batch-image-generation-BLBSv-t6.js} +6 -6
- package/assets/{diagram-engines-C-yGOIVo.js → diagram-engines-CSzW_-6N.js} +2 -2
- package/assets/{editor-engines-B_8hZKat.js → editor-engines-C573k8UM.js} +1 -1
- package/assets/{index-CuaA2bii.js → index-BT-rxxI3.js} +2 -2
- package/assets/{index-DzFw1iiN.js → index-Dw_8lcIi.js} +1 -1
- package/assets/{index-Dbf95aKy.js → index-IHNaVKGH.js} +1 -1
- package/assets/{index-DLKpn37B.js → index-N8asYyaz.js} +1 -1
- package/assets/{index-ykkRAoXJ.js → index-jxwTv7c1.js} +1 -1
- package/assets/{index.es-t_StdQ50.js → index.es-BLXvmueB.js} +1 -1
- package/assets/{jspdf.es.min-Bb5vk9Xd.js → jspdf.es.min-DxWvbkh4.js} +2 -2
- package/assets/{markdown-to-drawnix-DEQJGbGl.js → markdown-to-drawnix-BVFYnimo.js} +2 -2
- package/assets/{mermaid-to-drawnix-CYoVku-v.js → mermaid-to-drawnix-nGs2aeZ7.js} +2 -2
- package/assets/{model-benchmark-launcher-vAbuQ2bD.js → model-benchmark-launcher-DAWoSySc.js} +1 -1
- package/assets/{photo-wall-splitter-DcIZHaQr.js → photo-wall-splitter-CCUURzGk.js} +1 -1
- package/assets/{prompt-utils-D8o9xMD5.js → prompt-utils-MF_LILNU.js} +1 -1
- package/assets/{settings-dialog-CrPi8M4R.js → settings-dialog-Ac7R-_CG.js} +1 -1
- package/assets/{skill-dsl-parser-Bfrt9BEW.js → skill-dsl-parser-Do9iAYbB.js} +1 -1
- package/assets/{startup-app-BRF2LNMY.js → startup-app-eD_rQhSh.js} +531 -527
- package/assets/{task-sync-CywHcqN6.js → task-sync-BJVOunRa.js} +1 -1
- package/assets/{tool-windows-Bqfr0PWo.js → tool-windows-CmgL3thd.js} +17 -17
- package/assets/ttd-dialog-B12v0SVY.js +6 -0
- package/assets/{ttd-dialog-submit-shortcut-t5drrFnN.js → ttd-dialog-submit-shortcut-C2lJygXA.js} +1 -1
- package/assets/useCharacters-BAKE4TeJ.js +2 -0
- package/assets/{useMediaViewer-DZkKIvyf.js → useMediaViewer-BGw5RkSR.js} +1 -1
- package/assets/{useWorkflowSubmission-DEh5niqN.js → useWorkflowSubmission-iAPmKke9.js} +6 -6
- package/assets/{video-recovery-service-DOwO0Zzy.js → video-recovery-service-CW7bErP2.js} +1 -1
- package/assets/{workflow-generation-utils-1Imo8bgT.js → workflow-generation-utils-DhIVnOHO.js} +2 -2
- package/assets/{workflow-submission-service-sC9Y29-G.js → workflow-submission-service-Ce0cpj8E.js} +1 -1
- package/changelog.json +18 -13
- package/idle-prefetch-manifest.json +296 -296
- package/manifest.json +3 -3
- package/package.json +1 -1
- package/precache-manifest.json +6 -6
- package/sw.js +1 -1
- package/version.json +6 -3
- package/assets/DeferredAIInputBar-C0cG7P87.js +0 -107
- package/assets/DeferredAIInputBar-D_e6qG1y.css +0 -1
- package/assets/TaskQueuePanel-Y5iC1gTp.js +0 -1
- package/assets/ttd-dialog-C_7xm6Ln.js +0 -6
- package/assets/useCharacters-B0SpoLh6.js +0 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Opentu CDN Assets v0.9.
|
|
1
|
+
# Opentu CDN Assets v0.9.2
|
|
2
2
|
|
|
3
3
|
> 静态资源包,不含 HTML 文件
|
|
4
4
|
|
|
5
|
-
- unpkg: https://unpkg.com/aitu-app@0.9.
|
|
6
|
-
- jsdelivr: https://cdn.jsdelivr.net/npm/aitu-app@0.9.
|
|
5
|
+
- unpkg: https://unpkg.com/aitu-app@0.9.2/
|
|
6
|
+
- jsdelivr: https://cdn.jsdelivr.net/npm/aitu-app@0.9.2/
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./startup-app-CKHrOmQ0.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{_ as ke}from"./startup-runtime-DTmhLESk.js";import{r as n,j as t,aI as he,E as N,jX as Ae,gq as Se,ec as Te,ed as Ee,dp as Le,du as ue,dt as J,e_ as U,eQ as Ce,p as de,cu as Ne,c7 as Me,ef as Re,eU as De,f0 as oe,f1 as pe,aC as ie,eV as _e,A as $e,aK as ze,f2 as Oe,eT as Ue,o as Fe,f3 as qe,f4 as fe,f5 as Ye,e$ as le,jY as Ve,jZ as Be,j_ as He,X as Qe,f7 as We,f8 as Xe,f9 as Ke,fa as Ge,fb as Je}from"./startup-app-BRF2LNMY.js";import{u as Ze,a as et,b as ye,d as Z,e as tt}from"./tool-windows-Bqfr0PWo.js";import"./ai-chat-CYiA-Evp.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(N,{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}=Ee(),{contextMenu:g,openAt:M,close:S}=Le(),[d,x]=n.useState(!1),[k,L]=n.useState(""),[F,T]=n.useState(null),{noteMetas:$,loadReadingSource:W,buildReadingQueue:X}=Ze(),[q,Y]=n.useState(s==="reading"?ue:J),V=q===ue,R=s==="playlist"&&c?c:J,E=e.filter(a=>!U(a)),ee=et(E),K=a=>{const o=it(a);if(o)return o;if(!(a!=null&&a.audioUrl))return null;const r=h.find(j=>j.type===Re.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?Ce({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(ye,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:q,allCount:E.length,allTracksCount:$.length,playlists:I,playlistItems:_,onSelect:Y,onCreate:()=>{L(""),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(ye,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:q,allCount:E.length,allTracksCount:$.length,playlists:I,playlistItems:_,onSelect:Y,onCreate:()=>{L(""),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=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=E.find((r,j)=>`${r.audioUrl}-${j}`===a.id);o&&b(o)},onContextMenu:(a,o)=>{const r=E.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=E.find((j,H)=>`${j.audioUrl}-${H}`===a.id),r=K(o);r&&u(r)},onTogglePlayback:a=>{const o=E.find((r,j)=>`${r.audioUrl}-${j}`===a.id);o&&b(o)},showFavoriteButton:!0,showPlaybackIndicator:!0}),t.jsx(tt,{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),L(""),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),L(""),T(null)},onCancel:()=>{x(!1),T(null)},confirmBtn:"确定",cancelBtn:"取消",children:t.jsx(Me,{value:k,onChange:a=>L(String(a)),placeholder:"请输入播放列表名称"})})]})},we={sequential:t.jsx(Je,{size:14}),"list-loop":t.jsx(Ge,{size:14}),"single-loop":t.jsx(Ke,{size:14}),shuffle:t.jsx(Xe,{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=De(),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,L=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,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"?"朗读轨道":"画布音频"),E=Y?`${R} ${e.activeQueueIndex+1} / ${e.queue.length}`:R,ee=V?`${V} · ${L} / ${F}`:`${L} / ${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),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(Q=>Q&&Q.left===G.left&&Q.width===G.width&&Q.bottom===G.bottom?Q:G)},C=()=>{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(()=>C()):null;return O&&ae instanceof HTMLElement&&O.observe(ae),O&&ne instanceof HTMLElement&&ne!==ae&&O.observe(ne),C(),window.addEventListener("resize",C),window.addEventListener("orientationchange",C),()=>{window.cancelAnimationFrame(l),window.removeEventListener("resize",C),window.removeEventListener("orientationchange",C),O==null||O.disconnect()}},[B]),n.useEffect(()=>{if(!s)return;const l=A=>{var C;(C=i.current)!=null&&C.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($e,{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:E}),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(N,{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(Oe,{size:14})})}),t.jsx(N,{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(Ue,{size:14}):t.jsx(Fe,{size:14})})}),t.jsx(N,{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(qe,{size:14})})})]}),t.jsxs("div",{className:"canvas-audio-player__progress",children:[t.jsx("span",{className:"canvas-audio-player__time",children:L}),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(N,{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(N,{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(N,{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-BRF2LNMY.js").then(A=>A.nV);return{openMusicPlayerTool:l}},__vite__mapDeps([0]),import.meta.url).then(({openMusicPlayerTool:l})=>{l()})},"aria-label":"打开播放器工具",children:t.jsx(Ve,{size:14})})}),t.jsx(N,{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(Be,{size:14}):t.jsx(He,{size:14})})}),t.jsx(N,{content:"关闭播放器",children:t.jsx("button",{type:"button",className:"canvas-audio-player__close",onClick:e.stopPlayback,children:t.jsx(Qe,{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};
|
|
2
|
+
import{_ as je}from"./startup-runtime-DTmhLESk.js";import{r as n,j as t,aI as he,E as N,k1 as Ae,gq as Se,ec as Te,ed as Ee,dp as Le,du as ue,dt as J,e_ as U,eQ as Ce,p as de,cu as Ne,c7 as Me,ef as Re,eU as De,f0 as oe,f1 as pe,aC as ie,eV as _e,A as $e,aK as ze,f2 as Oe,eT as Ue,o as Fe,f3 as qe,f4 as fe,f5 as Ye,e$ as le,k2 as Ve,k3 as Be,k4 as He,X as Qe,f7 as We,f8 as Xe,f9 as Ke,fa as Ge,fb as Je}from"./startup-app-eD_rQhSh.js";import{u as Ze,a as et,A as ye,b as Z,d as tt}from"./tool-windows-CmgL3thd.js";import"./ai-chat-BO5vbKZW.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),k=n.useRef(null),_=n.useCallback(y=>{if(!s||y.button!==0)return;const m=k.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=k.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=k.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:k,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),[k,_]=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=k},[k]),n.useEffect(()=>{b.current=P},[P]),n.useEffect(()=>()=>u(),[]),n.useEffect(()=>{if(!w)return;const d=x=>{var j;(j=s.current)!=null&&j.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 j;const x=d.relatedTarget;x&&((j=s.current)!=null&&j.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(N,{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:k,playlistItems:_,favoriteAssetIds:P,createPlaylist:y,addAssetToPlaylist:m,removeAssetFromPlaylist:p,toggleFavorite:u}=Ee(),{contextMenu:g,openAt:M,close:S}=Le(),[d,x]=n.useState(!1),[j,L]=n.useState(""),[F,T]=n.useState(null),{noteMetas:$,loadReadingSource:W,buildReadingQueue:X}=Ze(),[q,Y]=n.useState(s==="reading"?ue:J),V=q===ue,R=s==="playlist"&&c?c:J,E=e.filter(a=>!U(a)),ee=et(E),K=a=>{const o=it(a);if(o)return o;if(!(a!=null&&a.audioUrl))return null;const r=h.find(I=>I.type===Re.AUDIO&&I.url===a.audioUrl);return(r==null?void 0:r.id)||null},B=n.useMemo(()=>new Set(R!==J?(_[R]||[]).map(a=>a.assetId?Ce({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(ye,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:q,allCount:E.length,allTracksCount:$.length,playlists:k,playlistItems:_,onSelect:Y,onCreate:()=>{L(""),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(ye,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:q,allCount:E.length,allTracksCount:$.length,playlists:k,playlistItems:_,onSelect:Y,onCreate:()=>{L(""),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=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=E.find((r,I)=>`${r.audioUrl}-${I}`===a.id);o&&b(o)},onContextMenu:(a,o)=>{const r=E.find((H,te)=>`${H.audioUrl}-${te}`===a.id),I=K(r);I&&(o.preventDefault(),o.stopPropagation(),M(o.clientX,o.clientY,{kind:"asset",assetId:I}))},onToggleFavorite:a=>{const o=E.find((I,H)=>`${I.audioUrl}-${H}`===a.id),r=K(o);r&&u(r)},onTogglePlayback:a=>{const o=E.find((r,I)=>`${r.audioUrl}-${I}`===a.id);o&&b(o)},showFavoriteButton:!0,showPlaybackIndicator:!0}),t.jsx(tt,{contextMenu:g?{x:g.x,y:g.y,item:g.payload}:null,playlists:k,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),L(""),x(!0))}}),t.jsx(Ne,{visible:d,header:"新建播放列表",onClose:()=>x(!1),onConfirm:async()=>{const a=await y(j);F&&await m(F,a.id),x(!1),L(""),T(null)},onCancel:()=>{x(!1),T(null)},confirmBtn:"确定",cancelBtn:"取消",children:t.jsx(Me,{value:j,onChange:a=>L(String(a)),placeholder:"请输入播放列表名称"})})]})},we={sequential:t.jsx(Je,{size:14}),"list-loop":t.jsx(Ge,{size:14}),"single-loop":t.jsx(Ke,{size:14}),shuffle:t.jsx(Xe,{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=De(),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,k]=n.useState(()=>typeof window<"u"?window.innerWidth:1024);n.useEffect(()=>{const l=()=>k(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,j=Number.isFinite(e.duration)?e.duration:0,L=be(x),F=be(j),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,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"?"朗读轨道":"画布音频"),E=Y?`${R} ${e.activeQueueIndex+1} / ${e.queue.length}`:R,ee=V?`${V} · ${L} / ${F}`:`${L} / ${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]),I=_e(e.effectivePlaybackRate),H=`${e.mediaType==="reading"?"语音速度":"播放速度"} ${I}`,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})},[]),Ie=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(Q=>Q&&Q.left===G.left&&Q.width===G.width&&Q.bottom===G.bottom?Q:G)},C=()=>{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(()=>C()):null;return O&&ae instanceof HTMLElement&&O.observe(ae),O&&ne instanceof HTMLElement&&ne!==ae&&O.observe(ne),C(),window.addEventListener("resize",C),window.addEventListener("orientationchange",C),()=>{window.cancelAnimationFrame(l),window.removeEventListener("resize",C),window.removeEventListener("orientationchange",C),O==null||O.disconnect()}},[B]),n.useEffect(()=>{if(!s)return;const l=A=>{var C;(C=i.current)!=null&&C.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 ke=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`}:{},...ke};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($e,{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:E}),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(N,{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(Oe,{size:14})})}),t.jsx(N,{content:e.playing?"暂停":"播放",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--primary",onClick:()=>void Ie(),children:e.playing?t.jsx(Ue,{size:14}):t.jsx(Fe,{size:14})})}),t.jsx(N,{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(qe,{size:14})})})]}),t.jsxs("div",{className:"canvas-audio-player__progress",children:[t.jsx("span",{className:"canvas-audio-player__time",children:L}),t.jsx("input",{type:"range",min:0,max:j||0,step:.1,value:Math.min(x,j||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(N,{content:H,children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__speed-toggle","aria-label":`切换播放速度,当前${I}`,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(N,{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(N,{content:"打开播放器工具",children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__player-switch canvas-audio-player__switch-toggle",onClick:()=>{je(async()=>{const{openMusicPlayerTool:l}=await import("./startup-app-eD_rQhSh.js").then(A=>A.o1);return{openMusicPlayerTool:l}},__vite__mapDeps([0]),import.meta.url).then(({openMusicPlayerTool:l})=>{l()})},"aria-label":"打开播放器工具",children:t.jsx(Ve,{size:14})})}),t.jsx(N,{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(Be,{size:14}):t.jsx(He,{size:14})})}),t.jsx(N,{content:"关闭播放器",children:t.jsx("button",{type:"button",className:"canvas-audio-player__close",onClick:e.stopPlayback,children:t.jsx(Qe,{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,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./startup-app-CKHrOmQ0.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{fW as Ia,bB as Ea,
|
|
2
|
+
import{fW as Ia,bB as Ea,nu as Fa,nv as Oa,nw as za,nt as $a,bg as xt,mQ as pt,dB as te,mT as Re,mV as Ra,mY as Da,mL as La,mM as Ua,r as c,aw as rn,c3 as Ba,fL as Ga,iV as lt,am as we,ff as Sn,aB as on,e0 as ut,M as O,a1 as ht,a9 as Va,j1 as Ja,j2 as Ka,nG as Ya,bz as dt,ef as cn,hc as Ha,hd as qa,j as i,mN as Wa,ah as ln,al as Xa,nH as Za,iP as un,E as $,X as Qa,aA as dn,nI as mn,o as gn,gt as es,l as ts,mc as ns,md as as,dq as pn,R as hn,de as ss,dk as is,nJ as rs,D as os,eK as cs,nK as ls}from"./startup-app-eD_rQhSh.js";import{P as us}from"./ParametersDropdown-CTSN3ClD.js";import{X as ds,i as fn,M as ms,m as ft,K as _n,r as yn}from"./ai-chat-BO5vbKZW.js";import{u as gs}from"./VideoAnalyzer-BmAjGvN8.js";import{u as ps}from"./useMediaViewer-BGw5RkSR.js";import{M as hs}from"./tool-windows-CmgL3thd.js";/* empty css *//* empty css */import{R as fs}from"./ResizableDivider-CUQBmPpx.js";import{_ as Ge}from"./startup-runtime-DTmhLESk.js";/* empty css */const De=6,_s=1,ys=60,oe="16x9",bs=Ia;function Se(e){const a=typeof e=="number"?e:typeof e=="string"?Number.parseInt(e,10):Number.NaN;return Number.isFinite(a)?Math.min(ys,Math.max(_s,Math.floor(a))):De}function xs(e){const a=Se(e.pageCount),t=String(e.userPrompt||"").trim(),r=String(e.stylePrompt||"").trim(),l=String(e.scenarioContext||"").trim(),u=String(e.pdfAttachmentName||"").trim(),g=e.inputMode||"text",h=["语言要求:","- 自动识别用户创作需求的主要语言,并使用同一种语言输出 title、commonPrompt、pages[].title、pages[].script、pages[].prompt 和 notes。","- 如果用户用中文提出需求,除 JSON 字段名、结构化对象键、品牌名、专有名词和必要技术标识外,所有可读内容都必须使用中文,不要把图片提示词改写成英文。","- pages[].prompt 是生成页唯一主要编辑入口,必须自包含:同时写清本页主题、画面主体、构图、必要文案/信息点、风格和色彩,不要依赖 pages[].script 才能理解画面。","- pages[].prompt 不要以「整套连环画统一设定」等全局设定开头;公共视觉基准放在 commonPrompt,每页 prompt 只写本页对应的场景引导和画面要求。","- 后续页面要延续创作场景和前文视觉/叙事语气,但必须给出本页独立的画面主体、构图、信息重点和情绪/文案引导。"].join(`
|
|
3
3
|
`),p=u?[`参考 PDF:本次请求附带 PDF「${u}」。`,"- 请优先阅读 PDF 内容,提取其中的事实信息、品牌/产品定位、结构层级、关键词、视觉线索和可转化为页面的重点。","- 用户创作需求用于限定目标和取舍;PDF 是主要素材来源。若两者冲突,以用户创作需求为准。","- 不要只复述 PDF 原文,要把 PDF 信息重组为适合当前创作场景的多页图文方案。"].join(`
|
|
4
4
|
`):"",v=g==="json"?["提示词类型:结构化 JSON 提示词。","- pages[].prompt 必须生成给图片模型使用的结构化 JSON,可直接返回对象,也可返回 JSON 字符串。","- 结构化 JSON 的字段名可保持英文,但所有字符串取值必须遵守语言要求。","- commonPrompt 可使用结构化对象描述全局视觉一致性,重点包含系列统一风格、色板、字体、角色/品牌一致性。","- 不要把用户输入当成 JSON schema 原样补全;请结合用户需求和 PDF 内容重新策划。",ds("zh")].join(`
|
|
5
5
|
`):["提示词类型:文本提示词。","- commonPrompt 和 pages[].prompt 使用自然语言图片提示词,表达完整画面、风格和一致性要求。","- pages[].prompt 必须是可直接送给图片模型的完整单页提示词。"].join(`
|
|
@@ -39,5 +39,5 @@ ${t}`:"",`【画面要求】画幅 ${h},整页连环画成品图,文字如
|
|
|
39
39
|
`)}
|
|
40
40
|
`}function kn(e){const a=Y(e);if(!Ct(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 Ve="comic-creator:records",Ts=50;function Je(e){return{...e,starred:!!e.starred,pages:Array.isArray(e.pages)?e.pages.map(kn):[]}}async function wt(){return $a(Ve,{normalizeRecord:Je})}async function As(e){return Oa(Ve,e,Ts,{normalizeRecord:Je})}async function he(e,a){return Fa(Ve,e,Es(a),{normalizeRecord:Je})}async function Is(e){return za(Ve,e,{normalizeRecord:Je})}function Es(e){return e.pages?{...e,pages:e.pages.map(kn)}:e}function Pt(e){return Da(e,"comicCreatorAction",["outline","page-image"])}function Mn(e){return Pt(e)!==null}function Tn(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 Fs(e){return Mn(e)&&(e.status===te.COMPLETED||e.status===te.FAILED||e.status===te.CANCELLED)}async function Os(e){if(e.type!==xt.CHAT||Pt(e)!=="outline")return null;const a=pt(e,"comicCreatorRecordId");if(!a)return null;const r=(await wt()).find(l=>l.id===a);if(!r||r.pendingOutlineTaskId!==e.id)return null;if(e.status===te.FAILED||e.status===te.CANCELLED)return Re(r,{pendingOutlineTaskId:null,outlineError:e.status===te.CANCELLED?"提示词规划已取消":Tn(e),updatedAt:Date.now()},he);if(e.status!==te.COMPLETED)return null;try{const l=ws(Ra(e),e.params.comicCreatorPageCount||r.pageCount),u=Ps(l);return Re(r,{title:l.title,commonPrompt:l.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()},he)}catch(l){return Re(r,{pendingOutlineTaskId:null,outlineError:l instanceof Error?l.message:"提示词规划返回格式错误,请重试",updatedAt:Date.now()},he)}}async function zs(e){if(e.type!==xt.IMAGE||Pt(e)!=="page-image")return null;const a=pt(e,"comicCreatorRecordId"),t=pt(e,"comicCreatorPageId");if(!a||!t)return null;const l=(await wt()).find(p=>p.id===a);if(!l)return null;const u=l.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 h=l.pages.map(p=>{var v;if(p.id!==t)return p;if(e.status===te.COMPLETED&&((v=e.result)!=null&&v.url)){const y=jn({taskId:e.id,url:e.result.url,urls:e.result.urls,format:e.result.format,generatedAt:e.completedAt||Date.now()});return{...yt(p,y),status:"succeeded",error:void 0}}return e.status===te.FAILED?{...p,status:"failed",error:Tn(e)}:e.status===te.CANCELLED?{...p,status:"cancelled",error:"图片生成已取消"}:p});return h===l.pages?null:Re(l,{pages:h,updatedAt:Date.now()},he)}const ve="travel-brochure",$s=[{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 Rs(e){return[`请为「${e.label}」创作一组连贯的多页图文。`,"主题:请替换为你的具体主题、产品、地点或事件。",`目标读者:${e.audience}。`,`视觉风格:${e.style}。`,`页面重点依次覆盖:${e.pageFocus.join("、")}。`,"要求每页都给出清晰标题、画面剧情/文案、图片提示词,整套角色、色彩和版式保持一致。"].join(`
|
|
41
41
|
`)}function Ds(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 Pe=$s.map(e=>({...e,textPrompt:Rs(e),jsonPrompt:Ds(e)}));function Ne(e){return Pe.find(a=>a.id===e)||Pe.find(a=>a.id===ve)||Pe[0]}function ze(e,a){const t=Ne(e);return a==="json"?t.jsonPrompt:t.textPrompt}function bn(e){const a=String(e||"").trim();return a?Pe.some(t=>t.textPrompt.trim()===a||t.jsonPrompt.trim()===a):!0}function Ls(e){const a=Ne(e),t=a.pageFocus.map((r,l)=>`第 ${l+1} 页:${r}`).join(";");return[`创作场景:${a.category} / ${a.label}`,`场景说明:${a.description}`,`目标读者:${a.audience}`,`场景风格:${a.style}`,`页面引导:${t}。如页数不同,请按该场景节奏扩展或合并。`,"生成要求:后续页面要延续创作场景和前文视觉/叙事语气,但每页必须有独立的场景引导、画面主体、构图和信息重点,避免只套用统一设定。"].join(`
|
|
42
|
-
`)}async function Nt(){return Ge(()=>import("./startup-app-
|
|
42
|
+
`)}async function Nt(){return Ge(()=>import("./startup-app-eD_rQhSh.js").then(e=>e.nO),__vite__mapDeps([0]),import.meta.url)}async function Us(){return Ge(()=>import("./office-data-ByisqnCq.js").then(e=>e.j),[],import.meta.url)}async function Bs(){return Ge(()=>import("./office-data-ByisqnCq.js").then(e=>e.p),[],import.meta.url)}async function Gs(){return Ge(()=>import("./jspdf.es.min-DxWvbkh4.js").then(e=>e.j),[],import.meta.url)}function Be(e,a="comic"){return String(e||"").trim().replace(/[\\/:*?"<>|]+/g,"-").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,80)||a}function Vs(e){return Be(e.title||"comic","comic")}function An(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,l=r?`-${r}`:"",u=Be(e.title||"","").replace(/^[||]\s*/,"").trim(),g=u?` ${u}`:"",h=Be(e.extension||"png","png");return`images/page-${t}${g}${l}.${h}`}function Js(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)||""),l=r.match(/^data:image\/([a-z0-9.+-]+)[;,]/i);if(l)return l[1].toLowerCase().replace("jpeg","jpg").replace("svg+xml","svg");try{const h=r.startsWith("/")||!r.includes("://")?r:new URL(r).pathname,p=(g=(u=h.split("/").pop())==null?void 0:u.split(".").pop())==null?void 0:g.toLowerCase();if(p&&p!==h&&/^[a-z0-9]{1,5}$/.test(p))return p}catch{}return"png"}function In(e,a){return a.find(t=>En(e,t))}function En(e,a){return!!a.pageId&&a.pageId===e.id||!!a.pageNumber&&a.pageNumber===e.pageNumber}function Ke(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 Ks(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 l=Number(t[1]),u=Number(t[2]);return l>0&&u>0?l/u:void 0}const r=Number(a);return Number.isFinite(r)&&r>0?r:void 0}function Fn(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:Ks(e==null?void 0:e.aspectRatio)}function On(e){var a;return Fn((a=e[0])==null?void 0:a.source)||16/9}function zn(e,a){const t=Math.max(0,e.width),r=Math.max(0,e.height),l=a.width>0&&a.height>0?a.width/a.height:1,u=t>0&&r>0?t/r:l;if(l>u){const p=t,v=p/l;return{x:0,y:(r-v)/2,width:p,height:v}}const g=r,h=g*l;return{x:(t-h)/2,y:0,width:h,height:g}}function Ys(e,a){return e.pages.map(t=>({page:t,source:In(t,a)}))}function Hs(e,a){return e.pages.flatMap(t=>a.filter(r=>En(t,r)).map(r=>({page:t,source:r})))}function $n(e,a){return Ys(e,a).map(t=>{if(!t.source)throw new Error(`第 ${t.page.pageNumber} 页缺少图片,无法导出`);return{page:t.page,source:t.source}})}function qs(e,a={}){const t=(a.now||new Date).toISOString(),r=Ke(e,a.imageSources),l=e.pages.map(u=>{const g=In(u,r),h=Js(g),p=g?An({pageNumber:u.pageNumber,title:u.title,extension:h}):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:l}}function St(e,a){const t=qs(e,a);return{baseName:a!=null&&a.filename?Be(a.filename):Vs(e),manifest:t,manifestJson:`${JSON.stringify(t,null,2)}
|
|
43
43
|
`,markdown:Ms(e)}}async function jt(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 Ws(e,a={}){const[{default:t},r]=await Promise.all([Us(),Nt()]),l=St(e,a),u=new t;u.file("manifest.json",l.manifestJson),u.file("script.md",l.markdown);const g=Ke(e,a.imageSources),h=new Map(l.manifest.pages.map(y=>[y.id,y])),p=Hs(e,g).map(y=>({page:h.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 jt(k,r),L=!k.variantNumber&&y.imageFilename?y.imageFilename:An({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,`${l.baseName}.zip`)}async function Rn(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 Xs(e){const a=On(e),t=10;return{width:t,height:t/a}}function Zs(e){const a=On(e),t=297;return a>=1?{width:t,height:t/a}:{width:t*a,height:t}}function Dn(e,a){return{width:Fn(e)||a,height:1}}function Qs(e){const a=String(e||"").toLowerCase();return a.includes("jpeg")||a.includes("jpg")?"JPEG":a.includes("webp")?"WEBP":"PNG"}async function ei(e,a={}){var y,k;const[{default:t},r]=await Promise.all([Bs(),Nt()]),l=St(e,a),u=Ke(e,a.imageSources),g=$n(e,u),h=Xs(g),p=new t;(y=p.defineLayout)==null||y.call(p,{name:"COMIC_IMAGE_ONLY",width:h.width,height:h.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 jt(B,r),ce=await Rn(L),V=p.addSlide(),se=zn(h,Dn(B,h.width/h.height));(k=V.addImage)==null||k.call(V,{data:ce,x:se.x,y:se.y,w:se.width,h:se.height})}const v=await p.write({outputType:"blob"});r.downloadFromBlob(v,`${l.baseName}.pptx`)}async function ti(e,a={}){var y;const[{default:t},r]=await Promise.all([Gs(),Nt()]),l=St(e,a),u=Ke(e,a.imageSources),g=$n(e,u),h=Zs(g),p=h.width>=h.height?"landscape":"portrait",v=new t({unit:"mm",format:[h.width,h.height],orientation:p});for(let k=0;k<g.length;k+=1){const{source:B}=g[k];k>0&&v.addPage([h.width,h.height],p);const L=await jt(B,r),ce=await Rn(L),V=zn(h,Dn(B,h.width/h.height));(y=v.addImage)==null||y.call(v,ce,Qs(L.type||B.mimeType),V.x,V.y,V.width,V.height)}r.downloadFromBlob(v.output("blob"),`${l.baseName}.pdf`)}const xn="comic-creator:text-model",Cn="comic-creator:image-model",bt="comic-creator:story-prompt",Ln="comic-creator:story-prompt-mode",Un="comic-creator:scenario-id",ni=20*1024*1024,vt="multi_image_generation",kt="comic_creator_tool",ai="multi_image_generation_action",si="multi_image_generation_page_view",ii="multi_image_generation_unique_view",wn="comic-creator:analytics:daily-unique-view",Bn=[1,2,3,4];function ri(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 oi(e){try{return localStorage.getItem(wn)===e?!1:(localStorage.setItem(wn,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 S(e){const a=(e==null?void 0:e.pages.length)||0,t=vn(e),r=_t(e),l=(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:l,completion_rate:a>0?t/a:0}}function w(e,a){we.track(ai,{category:"ai_generation",area:vt,surface:kt,tool_id:Sn,tool_name:"多图生成",action:e,...a||{},timestamp:Date.now()})}function P(e,a){const t=a||{};we.trackUIInteraction({area:vt,action:"click",control:e,source:kt,metadata:t}),w("click",{control:e,event_type:"click",...t})}const ci=[{id:"plan",label:"提示词"},{id:"generate",label:"生成"}];function li(){try{return sessionStorage.getItem(bt)||""}catch{return""}}function ui(e){try{e.trim()?sessionStorage.setItem(bt,e):sessionStorage.removeItem(bt)}catch{}}function di(){try{return sessionStorage.getItem(Ln)==="json"?"json":"text"}catch{return"text"}}function mi(e){try{sessionStorage.setItem(Ln,e)}catch{}}function gi(){try{return sessionStorage.getItem(Un)||ve}catch{return ve}}function pi(e){try{sessionStorage.setItem(Un,e)}catch{}}function hi(e){const a=`${e.id} ${e.label} ${e.shortLabel||""} ${e.sourceProfileName||""}`.toLowerCase();return e.vendor===ln.GEMINI||e.vendor===ln.GOOGLE||a.includes("gemini")}function Pn(e){return e.sourceProfileId?Xa(e.sourceProfileId,e.id):null}function $e(e,a,t){const r=ft(a,t);return e.some(l=>(l.selectionKey||l.id)===r)}function fi(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 _i(e){return e.reduce((a,t)=>{var r,l,u;if(t.id==="size"){const g=(r=t.options)==null?void 0:r.some(h=>h.value===oe);return a[t.id]=g?oe:t.defaultValue||((u=(l=t.options)==null?void 0:l[0])==null?void 0:u.value)||oe,a}return t.defaultValue&&(a[t.id]=t.defaultValue),a},{})}function mt(e,a){var u;const r={..._i(a)},l=e||{};for(const g of a){const h=l[g.id];h&&(g.valueType==="enum"&&((u=g.options)!=null&&u.length)&&!g.options.some(p=>p.value===h)||(r[g.id]=h))}return r.size||(r.size=oe),r}function gt(e){return e.map((a,t)=>({...a,pageNumber:t+1}))}function yi(e){return{id:ht(),pageNumber:e,title:`第 ${e} 页`,script:"",prompt:"",status:"draft"}}function bi(e){const a=je(e.title,e.pageNumber);return a===`第 ${e.pageNumber} 页`?"":a}function Nn(e,a){const t=Cs(e,a),r=["comic-outline-preview__content",t.isJson?"comic-outline-preview__content--json":""].filter(Boolean).join(" ");return i.jsx("pre",{className:r,children:t.text})}function xi(e){var t;const a=Gn((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 Ci(e){var t;const a=Gn((t=e.imageParams)==null?void 0:t.size);return e.pages.flatMap(r=>{const l=Y(r);if(l.length===0)return[];const u=r.imageUrl?l.findIndex(p=>p.url===r.imageUrl):-1,g=l[u>=0?u:l.length-1];let h=1;return[g,...l.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=h,h+=1),y})})}function wi(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(l=>typeof l=="string"&&l.length>0);return Array.from(new Set(r))}function Pi(e){return Bn.includes(e)?e:1}function Gn(e){const a=String(e||"").trim().replace(/[xX]/g,":");return/^\d+(?:\.\d+)?:\d+(?:\.\d+)?$/.test(a)?a:void 0}function Ni(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=>Y(a).length>0)?"已完成":e.pages.length>0?"已规划":"草稿"}function Si(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 $i=()=>{const{records:e,setRecords:a,currentRecord:t,showStarred:r,setShowStarred:l,starredCount:u,selectRecord:g,updateCurrentRecord:h,restart:p,applySyncedRecord:v}=La({loadRecords:wt,logPrefix:"[ComicCreator]"}),{page:y,setPage:k,navigateToStep:B,goToDefaultPage:L,openHistory:ce,openStarred:V,toggleStarred:se}=Ua({initialPage:"plan",defaultPage:"plan",historyPage:"history",setShowStarred:l}),{openViewer:Mt,viewerProps:Vn}=ps({showNavbar:!0,showToolbar:!0,showTitle:!0}),b=c.useRef(null),le=c.useRef(new Set),ne=c.useRef(null),Ye=c.useRef(!1),ke=c.useRef(!1),Tt=c.useRef(Promise.resolve()),Me=c.useRef(null),At=c.useRef(null),He=c.useRef(null),It=c.useRef(!1),Et=c.useRef(null),qe=fn("text"),Jn=fn("image"),U=c.useMemo(()=>qe.filter(hi),[qe]),Ft=c.useMemo(()=>rn(xn,Ba),[]),We=c.useMemo(()=>rn(Cn,Ga),[]),Kn=c.useMemo(()=>(t==null?void 0:t.sourcePromptMode)||di(),[]),Ot=c.useMemo(()=>Ne((t==null?void 0:t.scenarioId)||gi()).id,[]),[ae,Te]=c.useState(()=>(t==null?void 0:t.sourcePrompt)||li()||ze(Ot,"text")),[fe,zt]=c.useState([]),[R,Xe]=c.useState(()=>Kn),[T,Ze]=c.useState(Ot),[Ae,Ie]=c.useState(String(De)),[A,$t]=c.useState(Ft.modelId),[D,Rt]=c.useState(Ft.modelRef),[x,Dt]=c.useState(null),[j,Lt]=c.useState(We.modelId),[ie,Ut]=c.useState(We.modelRef),Ee=c.useMemo(()=>lt(j),[j]),[H,Qe]=c.useState(()=>mt(void 0,lt(We.modelId))),[et,Bt]=c.useState([]),[I,Gt]=c.useState("serial"),[E,Yn]=c.useState(1),[G,ue]=c.useState(new Set),[q,Vt]=c.useState(!1),[M,de]=c.useState({running:!1,stopping:!1,current:0,total:0,message:""}),[me,Jt]=c.useState(null),[ge,tt]=c.useState(null),[_e,Hn]=c.useState(""),[W,qn]=c.useState("all"),nt=c.useMemo(()=>Ne(T),[T]),at=x?U:qe,ye=c.useMemo(()=>{const n=et.map(s=>s.url.trim()).filter(Boolean);return Array.from(new Set(n))},[et]),Wn=c.useMemo(()=>{const n=new Map;for(const s of Pe){const o=n.get(s.category)||[];o.push(s),n.set(s.category,o)}return Array.from(n.entries())},[]),Xn=!bn(ae);c.useEffect(()=>{b.current=t},[t]),c.useEffect(()=>{if(It.current)return;It.current=!0;const n=ri(),s={category:"ai_generation",area:vt,surface:kt,tool_id:Sn,tool_name:"多图生成",metric:"pv",active_page:y,records_count:e.length,starred_count:u,view_date:n,...S(t),timestamp:Date.now()};we.track(si,s),we.isAnalyticsEnabled()&&oi(n)&&we.track(ii,{...s,metric:"uv",unique_period:"daily"})},[t,y,e.length,u]),c.useEffect(()=>{Et.current!==y&&(Et.current=y,w("step_view",{active_page:y,records_count:e.length,starred_count:u,...S(t)}))},[t,y,e.length,u]),c.useEffect(()=>{!t||t.pendingOutlineTaskId||t.pages.length===0||He.current!==t.id||(He.current=null,requestAnimationFrame(()=>{var n;(n=At.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]),c.useEffect(()=>{Qe(n=>mt(n,Ee))},[Ee]),c.useEffect(()=>{t&&(Te(t.sourcePrompt||""),Xe(t.sourcePromptMode||"text"),Ze(Ne(t.scenarioId).id),Ie(String(t.pageCount||De)),Gt(t.generationMode||"serial"),t.textModel&&($t(t.textModel),Rt(t.textModelRef||null)),t.imageModel&&(Lt(t.imageModel),Ut(t.imageModelRef||null)),t.imageParams&&Qe(n=>mt({...n,...t.imageParams},lt(t.imageModel||j))))},[t==null?void 0:t.id]),c.useEffect(()=>{Bt([])},[t==null?void 0:t.id]),c.useEffect(()=>{t||(ui(ae),mi(R),pi(T))},[t,R,T,ae]),c.useEffect(()=>{const n=(t==null?void 0:t.pages.map(s=>s.id))||[];ue(s=>{if(n.length===0)return new Set;const o=new Set([...s].filter(d=>n.includes(d)));return o.size===0&&n.forEach(d=>o.add(d)),o})},[t==null?void 0:t.pages]);const Zn=c.useCallback(async n=>Mn(n)?await Os(n)||zs(n):null,[]);gs({syncTask:Zn,applySyncedRecord:v,shouldHandleTask:Fs,logPrefix:"[ComicCreator]"});const be=c.useCallback((n,s)=>{$t(n),Rt(s||null),on(xn,n,s)},[]),Qn=c.useCallback((n,s)=>{w("image_model_changed",{event_type:"select",image_model:n,previous_image_model:j}),Lt(n),Ut(s||null),on(Cn,n,s)},[j]),ea=c.useCallback((n,s)=>{w("image_param_changed",{event_type:"change",image_model:j,param_id:n,param_value:s}),Qe(o=>({...o,[n]:s}))},[j]);c.useEffect(()=>{if(!x||U.length===0||$e(U,A,D))return;const n=U[0];be(n.id,Pn(n))},[U,x,be,A,D]);const st=c.useCallback((n=T)=>{Te(ze(n,"text"))},[T]),ta=c.useCallback(n=>{const s=bn(ae);w("scenario_changed",{event_type:"change",scenario_id:n,previous_scenario_id:T,auto_apply_template:s,has_record:!!b.current}),Ze(n),s&&st(n)},[st,T,ae]),Kt=c.useCallback(n=>{w("prompt_mode_changed",{event_type:"click",prompt_input_mode:n,previous_prompt_input_mode:R,has_record:!!b.current}),Xe(n)},[R]),it=c.useCallback(()=>{var s;const n=!((s=b.current)!=null&&s.pendingOutlineTaskId);P("remove_pdf_attachment",{has_pdf_attachment:!!x,pdf_size_bucket:re(x==null?void 0:x.size),should_delete_cache:n}),Dt(o=>(n&&(o!=null&&o.cacheUrl)&&ut.deleteCache(o.cacheUrl).catch(()=>{}),null)),Me.current&&(Me.current.value="")},[x]),na=c.useCallback(async n=>{var d;const s=(d=n.target.files)==null?void 0:d[0];if(n.target.value="",!s)return;if(!(s.type==="application/pdf"||s.name.toLowerCase().endsWith(".pdf"))){w("pdf_upload",{status:"failed",reason:"invalid_type",file_size_bucket:re(s.size)}),O.warning("请上传 PDF 文件");return}if(s.size>ni){w("pdf_upload",{status:"failed",reason:"too_large",file_size_bucket:re(s.size)}),O.warning("PDF 不能超过 20MB");return}if(U.length===0){w("pdf_upload",{status:"failed",reason:"no_gemini_text_model",file_size_bucket:re(s.size)}),O.warning("PDF 入参需要 Gemini 文本模型,请先配置 Gemini 模型");return}try{const m=`comic-pdf-${ht()}.pdf`;if(await ut.cacheToCacheStorageOnly(m,s),Dt(f=>(f!=null&&f.cacheUrl&&ut.deleteCache(f.cacheUrl).catch(()=>{}),{cacheUrl:m,name:s.name,size:s.size,mimeType:s.type||"application/pdf"})),w("pdf_upload",{status:"success",file_size_bucket:re(s.size),switched_text_model:!$e(U,A,D)}),!$e(U,A,D)){const f=U[0];be(f.id,Pn(f))}O.success("PDF 已添加,将随提示词一起提交给 Gemini")}catch(m){w("pdf_upload",{status:"failed",reason:"cache_failed",file_size_bucket:re(s.size)}),O.error(m instanceof Error?m.message:"PDF 上传失败")}},[U,be,A,D]),N=c.useCallback(async(n,s=b.current)=>{if(!s)return null;const o={...n,updatedAt:Date.now()},d={...s,...o};b.current=d,h(d),a(f=>f.map(_=>_.id===d.id?d:_));const m=Tt.current.then(async()=>{const f=await he(s.id,o),_=f.find(C=>C.id===s.id)||d;return b.current=_,a(f),h(_),_});return Tt.current=m.then(()=>{},()=>{}),m},[a,h]),Yt=c.useCallback(async n=>{const s=n.sourcePrompt.trim(),o=n.pageCount,d=Date.now();if(b.current)return await N({sourcePrompt:s,sourcePromptMode:n.sourcePromptMode,scenarioId:n.scenarioId,pageCount:o,textModel:A,textModelRef:D})||b.current;const m={id:ht(),starred:!1,title:s.slice(0,28)||"未命名连环画",sourcePrompt:s,commonPrompt:"",pageCount:o,pages:[],textModel:A,textModelRef:D,imageModel:j,imageModelRef:ie,imageParams:H,generationMode:I,sourcePromptMode:n.sourcePromptMode,scenarioId:n.scenarioId,pendingOutlineTaskId:null,createdAt:d,updatedAt:d},f=await As(m),_=f.find(C=>C.id===m.id)||m;return a(f),h(_),b.current=_,_},[I,j,ie,H,N,a,A,D,h]),aa=c.useCallback(async()=>{if(!(Ye.current||q)){if(!ae.trim()){O.warning("请输入创作需求");return}if(x&&!$e(U,A,D)){O.warning("PDF 入参仅支持 Gemini 文本模型");return}Ye.current=!0,Vt(!0);try{const n=ae.trim(),s=Se(Ae);if(await Va.waitForInitialization(),!Ja("text",D||A)&&!await Ka()){w("generate_outline",{status:"cancelled",reason:"missing_api_key",scenario_id:T,prompt_input_mode:R,text_model:A,has_pdf_attachment:!!x}),O.warning("需要 API Key 才能生成提示词");return}P("generate_outline",{status:"start",scenario_id:T,prompt_input_mode:R,page_count:s,text_model:A,has_pdf_attachment:!!x,pdf_size_bucket:re(x==null?void 0:x.size),...Ya(n)});const o=await Yt({sourcePrompt:n,pageCount:s,sourcePromptMode:R,scenarioId:T}),d=xs({userPrompt:n,pageCount:s,inputMode:R,scenarioContext:Ls(T),pdfAttachmentName:x==null?void 0:x.name});He.current=o.id;const m=dt.createTask({prompt:d,knowledgeContextRefs:fe,model:A,modelRef:D,comicCreatorAction:"outline",comicCreatorRecordId:o.id,comicCreatorScenarioId:T,comicCreatorPageCount:s,...x?{pdfCacheUrl:x.cacheUrl,pdfMimeType:x.mimeType,pdfName:x.name}:{}},xt.CHAT);await N({sourcePrompt:n,sourcePromptMode:R,scenarioId:T,pageCount:s,textModel:A,textModelRef:D,pendingOutlineTaskId:m.id,outlineError:void 0},o),w("generate_outline",{status:"success",scenario_id:T,prompt_input_mode:R,page_count:s,text_model:A,has_pdf_attachment:!!x}),O.success("提示词规划任务已提交")}catch(n){w("generate_outline",{status:"failed",scenario_id:T,prompt_input_mode:R,text_model:A,has_pdf_attachment:!!x,error_type:n instanceof Error?n.name:"unknown"}),O.error(n instanceof Error?n.message:"提交失败")}finally{Ye.current=!1,Vt(!1)}}},[Yt,Ae,N,R,x,T,ae,q,A,U,D]),Ht=c.useCallback((n,s)=>{const o=b.current;if(!o)return;const d=o.pages.map(m=>m.id===n?{...m,...s}:m);N({pages:d})},[N]),qt=c.useCallback(n=>{N({commonPrompt:n})},[N]),sa=c.useCallback(n=>{const s=b.current;if(!s)return;const o=s.pages.findIndex(f=>f.id===n),d=o>=0?o+1:s.pages.length,m=[...s.pages];m.splice(d,0,yi(d+1)),P("add_page",{insert_index:d,page_count_before:s.pages.length,page_count_after:m.length,...S(s)}),N({pages:gt(m),pageCount:m.length})},[N]),ia=c.useCallback(n=>{const s=b.current;if(!s||s.pages.length<=1)return;const o=gt(s.pages.filter(d=>d.id!==n));P("delete_page",{page_count_before:s.pages.length,page_count_after:o.length,...S(s)}),ue(d=>{const m=new Set(d);return m.delete(n),m}),N({pages:o,pageCount:o.length})},[N]),Wt=c.useCallback((n,s)=>{const o=b.current;if(!o)return;const d=o.pages.findIndex(C=>C.id===n),m=d+s;if(d<0||m<0||m>=o.pages.length)return;const f=[...o.pages],[_]=f.splice(d,1);f.splice(m,0,_),P("move_page",{direction:s<0?"up":"down",from_index:d,to_index:m,page_count:o.pages.length}),N({pages:gt(f)})},[N]),ra=c.useCallback(n=>{var o;const s=!G.has(n);P("toggle_page_selection",{selected:s,selected_page_count:s?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]),oa=c.useCallback(()=>{var s;const n=((s=b.current)==null?void 0:s.pages.map(o=>o.id))||[];P("select_all_pages",{selected_page_count:n.length,page_count:n.length}),ue(new Set(n))},[]),ca=c.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]),la=c.useCallback(n=>{n!==I&&(w("generation_mode_changed",{event_type:"click",generation_mode:n,previous_generation_mode:I,...S(b.current)}),Gt(n))},[I]),ua=c.useCallback(n=>{const s=Pi(Number(n));w("image_count_per_page_changed",{event_type:"change",image_count_per_page:s,...S(b.current)}),Yn(s)},[]),da=c.useCallback(n=>{const s=b.current;if(!s)return;const o=s.pages.slice().sort((f,_)=>f.pageNumber-_.pageNumber).flatMap(f=>{const _=Y(f);return _.map((C,F)=>({pageItem:f,variant:C,variantIndex:F,variantCount:_.length}))}),d=s.pages.find(f=>f.id===n),m=o.findIndex(f=>f.pageItem.id===n&&(!(d!=null&&d.imageUrl)||f.variant.url===d.imageUrl));o.length===0||m<0||(P("preview_page_image",{image_count:o.length,initial_index:m,...S(s)}),Mt(o.map(({pageItem:f,variantIndex:_,variantCount:C,variant:F})=>({url:F.url,type:"image",title:`第 ${f.pageNumber} 页:${je(f.title,f.pageNumber)}${C>1?`(图 ${_+1})`:""}`,alt:f.title||`第 ${f.pageNumber} 页`,prompt:f.prompt})),m))},[Mt]),ma=c.useCallback((n,s)=>{const o=b.current;if(!o)return;const d=o.pages.map(m=>m.id===n?ks(m,s):m);P("select_page_image_variant",{page_id:n,...S(o)}),N({pages:d})},[N]),ga=c.useCallback(n=>{const s=b.current,o=s==null?void 0:s.pages.find(d=>d.id===n);P("open_page_media_library",{page_id:n,page_number:o==null?void 0:o.pageNumber,...S(s)}),tt(n)},[]),pa=c.useCallback(async n=>{const s=b.current;if(!s||!ge)return;if(n.type!==cn.IMAGE||!n.url){O.warning("请选择图片素材");return}const o=s.pages.find(m=>m.id===ge);if(!o)return;const d=s.pages.map(m=>m.id===ge?{...yt(m,[{url:n.url,mimeType:n.mimeType,generatedAt:n.createdAt||Date.now(),taskId:n.taskId}]),status:"succeeded",error:void 0}:m);await N({pages:d}),P("select_page_media_library_asset",{page_id:ge,page_number:o.pageNumber,asset_id:n.id,asset_source:n.source,...S({...s,pages:d})}),O.success("已从素材库补回当前页图片"),tt(null)},[ge,N]),xe=c.useCallback(async(n,s)=>{const o=b.current;if(!o)return null;const d=o.pages.map(m=>m.id===n?{...m,...s}:m);return N({pages:d})},[N]),Xt=c.useCallback(async(n,s,o)=>{const d=b.current;if(!d)return null;const m=d.pages.map(f=>f.id===n?{...yt(f,s),...o}:f);return N({pages:m})},[N]),rt=c.useCallback(async(n,s)=>{var en,tn,nn,an;const o=b.current;if(!o||(en=ne.current)!=null&&en.signal.aborted)return null;await xe(n.id,{status:"running",error:void 0});const d=H.size||oe,m=Ns({commonPrompt:o.commonPrompt,pagePrompt:n.prompt,script:n.script,title:n.title,pageNumber:n.pageNumber,pageCount:o.pages.length,size:d}),f=s?Array.from(new Set([...ye,s])):ye;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:f.length,has_previous_page_reference:!!s});const _=await Ha({prompt:m,knowledgeContextRefs:fe,size:d,count:E,model:j,modelRef:ie,params:H,referenceImages:f.length>0?f:void 0,autoInsertToCanvas:!1,comicCreatorAction:"page-image",comicCreatorRecordId:o.id,comicCreatorPageId:n.id}),C=wi(_),F=C[0];if(!_.success||!F)return await xe(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(Q=>le.current.add(Q)),await xe(n.id,{taskId:F,taskIds:C,status:"running"});const z=await Promise.all(C.map(async Q=>{var ee;const Oe=await qa(Q,{signal:(ee=ne.current)==null?void 0:ee.signal,interval:1200});return le.current.delete(Q),{taskId:Q,waitResult:Oe}})),J=(tn=ne.current)==null?void 0:tn.signal.aborted,X=z.flatMap(({taskId:Q,waitResult:Oe})=>{var sn;if(!Oe.success)return[];const ee=Oe.task||dt.getTask(Q);return(sn=ee==null?void 0:ee.result)!=null&&sn.url?jn({taskId:Q,url:ee.result.url,urls:ee.result.urls,format:ee.result.format,generatedAt:ee.completedAt||Date.now()}):[]}),Z=(nn=z.find(({waitResult:Q})=>!Q.success))==null?void 0:nn.waitResult.error;return X.length===0?(await xe(n.id,{status:J?"cancelled":"failed",error:Z||(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 Xt(n.id,X,{status:"succeeded",error:Z?"部分图片生成失败":void 0}),w("page_image_generation",{status:"success",page_number:n.pageNumber,image_count_per_page:E,generated_image_count:X.length,image_model:j,image_size:d}),((an=X[X.length-1])==null?void 0:an.url)||null)},[Xt,E,j,ie,H,fe,ye,xe]),Zt=c.useCallback(async n=>{const s=b.current;if(!s)return null;const o=new Set(n.map(m=>m.id)),d=s.pages.map(m=>o.has(m.id)?{...m,status:"queued",error:void 0,taskId:null,taskIds:null}:m);return N({pages:d,imageModel:j,imageModelRef:ie,imageParams:H,generationMode:I})},[I,j,ie,H,N]),Qt=c.useCallback(async n=>{var f;const s=b.current;if(!s||ke.current||M.running)return;ke.current=!0;const o=js({pages:s.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,...S(s)}),O.warning("请选择要生成的页面"),ke.current=!1;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:H.size||oe,reference_image_count:ye.length,...S(s)}),ne.current=new AbortController,le.current=new Set,de({running:!0,stopping:!1,current:0,total:d.length,message:`准备生成(每页 ${E} 张)`});try{if(!await Zt(d))return;if(I==="serial"){const C=d;for(let F=0;F<C.length&&!ne.current.signal.aborted;F+=1){const z=C[F],J=(f=b.current)==null?void 0:f.pages.find(Z=>Z.pageNumber===z.pageNumber-1),X=J==null?void 0:J.imageUrl;de(Z=>({...Z,current:F+1,message:`生成第 ${z.pageNumber} 页(${E} 张)`})),await rt(z,X)}}else{let C=0,F=0;const z=Array.from({length:Ss(I,d.length)}).map(async()=>{var J;for(;C<d.length;){if((J=ne.current)!=null&&J.signal.aborted)return;const X=d[C];C+=1,de(Z=>({...Z,message:`生成第 ${X.pageNumber} 页(${E} 张)`})),await rt(X),F+=1,de(Z=>({...Z,current:F}))}});await Promise.all(z)}if(ne.current.signal.aborted){const C=b.current;if(C){const F=new Set(d.map(z=>z.id));await N({pages:C.pages.map(z=>F.has(z.id)&&(z.status==="queued"||z.status==="running")?{...z,status:"cancelled",error:"图片生成已取消"}:z)})}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,...S(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,...S(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",...S(b.current)}),O.error(_ instanceof Error?_.message:"生成失败")}finally{le.current.clear(),ne.current=null,ke.current=!1,de({running:!1,stopping:!1,current:0,total:0,message:""})}},[rt,I,M.running,E,j,H.size,Zt,N,ye.length,G]),ha=c.useCallback(()=>{var n;P("stop_generation",{active_task_count:le.current.size,generation_mode:I,...S(b.current)}),(n=ne.current)==null||n.abort(),le.current.forEach(s=>{dt.cancelTask(s)}),de(s=>({...s,stopping:!0,message:"正在停止"}))},[I]),ot=c.useCallback(async n=>{const s=b.current;if(!s)return;const o=n==="zip"?Ci(s):xi(s);if(o.length===0){w("export",{status:"failed",reason:"no_generated_images",export_kind:n,...S(s)}),O.warning("请先生成至少一页图片");return}const d=Date.now();P("export",{status:"start",export_kind:n,export_image_count:o.length,...S(s)}),Jt(n);try{const m={imageSources:o};n==="zip"&&await Ws(s,m),n==="pptx"&&await ei(s,m),n==="pdf"&&await ti(s,m),w("export",{status:"success",export_kind:n,export_image_count:o.length,duration_ms:Date.now()-d,...S(s)}),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",...S(s)}),O.error(m instanceof Error?m.message:"导出失败")}finally{Jt(null)}},[]),fa=c.useCallback(()=>{P("restart_project",{...S(b.current)}),p(),it(),Ze(ve),Xe("text"),Te(ze(ve,"text")),Ie(String(De)),ue(new Set),L()},[it,L,p]),_a=c.useCallback(n=>{P("select_history_record",{...S(n)}),g(n),k(n.pages.length>0?"generate":"plan")},[g,k]),ya=c.useCallback(async n=>{P("toggle_star_record",{starred:!n.starred,...S(n)});const s=await he(n.id,{starred:!n.starred,updatedAt:Date.now()});a(s);const o=s.find(d=>d.id===n.id);o&&(t==null?void 0:t.id)===n.id&&h(o)},[t==null?void 0:t.id,a,h]),ba=c.useCallback(async n=>{const s=e.find(d=>d.id===n);P("delete_history_record",{...S(s)});const o=await Is(n);a(o),(t==null?void 0:t.id)===n&&(p(),L())},[t==null?void 0:t.id,L,e,p,a]),ct=!!(t!=null&&t.pages&&t.pages.length>0),xa=vn(t),Ce=_t(t),Ca=c.useMemo(()=>ci.map(n=>({...n,disabled:n.id==="generate"&&!ct})),[ct]),wa=c.useCallback(n=>{P("navigate_step",{from_page:y,to_page:n,...S(t)}),B(n)},[t,B,y]),Pa=c.useCallback(()=>{P("back_from_history",{show_starred:r,records_count:e.length}),L()},[L,e.length,r]),Na=c.useCallback(()=>{P("open_history",{records_count:e.length,starred_count:u}),ce()},[ce,e.length,u]),Sa=c.useCallback(()=>{P("open_starred_history",{records_count:e.length,starred_count:u}),V()},[V,e.length,u]),ja=c.useCallback(()=>{P("toggle_starred_filter",{show_starred:!r,records_count:e.length,starred_count:u}),se()},[e.length,r,u,se]),Fe=c.useMemo(()=>{const n=_e.trim().toLowerCase();return e.filter(s=>r?s.starred:!0).filter(s=>n?s.title.toLowerCase().includes(n)||s.sourcePrompt.toLowerCase().includes(n):!0).filter(s=>W==="all"?!0:W==="done"?s.pages.length>0&&s.pages.every(o=>Y(o).length>0):W==="failed"?s.pages.some(o=>o.status==="failed")||!!s.outlineError:W==="planned"?s.pages.length>0&&!s.pages.every(o=>Y(o).length>0):!0).sort((s,o)=>o.createdAt-s.createdAt)},[_e,W,e,r]),va=c.useCallback(()=>{const n=_e.trim();n&&w("history_search",{event_type:"input",query_length:n.length,result_count:Fe.length,history_status:W,show_starred:r})},[Fe.length,_e,W,r]),ka=c.useCallback(n=>{w("history_status_filter_changed",{event_type:"change",history_status:n,previous_history_status:W,show_starred:r}),qn(n)},[W,r]),Ma=()=>i.jsxs("div",{className:"va-page comic-page",children:[i.jsxs("div",{className:"ma-card comic-plan-card",children:[i.jsxs("div",{className:"ma-card-header",children:[i.jsx("span",{children:"创作需求"}),i.jsxs("div",{className:"comic-header-actions",children:[Xn&&i.jsx("button",{className:"comic-link-btn",onClick:()=>{P("apply_scenario_template",{scenario_id:T,prompt_input_mode:R,has_record:!!t}),st()},children:"套用模板"}),t&&i.jsx("button",{className:"comic-link-btn",onClick:fa,children:"新建"})]})]}),i.jsxs("div",{className:"comic-config-grid",children:[i.jsxs("label",{className:"comic-field comic-field--scenario",children:[i.jsx("span",{children:"创作场景"}),i.jsx("select",{className:"ma-select",value:T,onChange:n=>ta(n.target.value),disabled:q||!!(t!=null&&t.pendingOutlineTaskId),children:Wn.map(([n,s])=>i.jsx("optgroup",{label:n,children:s.map(o=>i.jsx("option",{value:o.id,children:o.label},o.id))},n))})]}),i.jsxs("label",{className:"comic-field",children:[i.jsx("span",{children:"页数"}),i.jsx("input",{className:"ma-input",type:"number",min:1,max:60,value:Ae,onChange:n=>Ie(n.target.value),onBlur:()=>Ie(String(Se(Ae)))})]})]}),i.jsxs("div",{className:"comic-scenario-note",children:[i.jsxs("strong",{children:[nt.category," / ",nt.label]}),i.jsx("span",{children:nt.description})]}),i.jsxs("div",{className:"comic-pdf-row",children:[i.jsx("input",{ref:Me,type:"file",accept:"application/pdf,.pdf",hidden:!0,onChange:na}),i.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=Me.current)==null||n.click()},disabled:q||!!(t!=null&&t.pendingOutlineTaskId),children:[i.jsx(Za,{size:14}),x?"更换 PDF":"上传 PDF"]}),x?i.jsxs("div",{className:"comic-pdf-file",children:[i.jsx(un,{size:14}),i.jsx($,{content:x.name,showArrow:!1,children:i.jsxs("span",{children:[x.name," · ",fi(x.size)]})}),i.jsx("button",{type:"button",className:"comic-icon-btn",onClick:it,"aria-label":"移除 PDF",disabled:q||!!(t!=null&&t.pendingOutlineTaskId),children:i.jsx(Qa,{size:14})})]}):i.jsx("span",{className:"comic-pdf-hint",children:"可选,上传后文本模型仅可选择 Gemini"})]}),i.jsx("textarea",{className:"ma-textarea comic-story-input",value:ae,onChange:n=>Te(n.target.value),placeholder:ze(T,"text"),spellCheck:!0}),i.jsx(_n,{value:fe,onChange:zt,disabled:q||!!(t!=null&&t.pendingOutlineTaskId),language:"zh"}),(t==null?void 0:t.outlineError)&&i.jsx("div",{className:"ma-error",children:t.outlineError}),(t==null?void 0:t.pendingOutlineTaskId)&&i.jsx("div",{className:"ma-progress comic-plan-progress",children:"提示词规划中..."}),i.jsxs("div",{className:"comic-plan-control-row",children:[i.jsxs("div",{className:"comic-mode-control",children:[i.jsx("span",{children:"生成的提示词类型"}),i.jsxs("div",{className:"comic-segmented comic-segmented--mode",children:[i.jsx("button",{className:R==="text"?"active":"",type:"button",onClick:()=>Kt("text"),disabled:q||!!(t!=null&&t.pendingOutlineTaskId),children:"文本提示词"}),i.jsx("button",{className:R==="json"?"active":"",type:"button",onClick:()=>Kt("json"),disabled:q||!!(t!=null&&t.pendingOutlineTaskId),children:"结构化 JSON"})]})]}),i.jsx("label",{className:"comic-field comic-field--model comic-field--inline-model",children:i.jsx(dn,{variant:"form",selectedModel:A,selectedSelectionKey:ft(A,D),onSelect:be,models:at,placement:"down",placeholder:x?"选择 Gemini 模型":"选择文本模型",disabled:q||!!(t!=null&&t.pendingOutlineTaskId)||at.length===0})})]}),i.jsx("div",{className:"va-page-actions comic-plan-actions",children:i.jsxs("button",{className:"va-btn-primary",disabled:q||!!(t!=null&&t.pendingOutlineTaskId)||!!x&&at.length===0,onClick:aa,children:[i.jsx(mn,{size:14}),"生成提示词"]})})]}),ct&&t&&i.jsxs("div",{className:"ma-card",ref:At,children:[i.jsxs("div",{className:"ma-card-header",children:[i.jsx("span",{children:t.title}),i.jsxs("span",{className:"ma-muted",children:["已规划 ",t.pages.length,"/",t.pageCount||t.pages.length," 页"]})]}),i.jsxs("div",{className:"comic-outline-preview",children:[i.jsxs("div",{className:"comic-outline-preview__item comic-outline-preview__item--common",children:[i.jsx("strong",{children:"公共提示词"}),Nn(t.commonPrompt)]}),t.pages.map(n=>i.jsxs("div",{className:"comic-outline-preview__item",children:[i.jsxs("strong",{children:["第 ",n.pageNumber," 页:",je(n.title,n.pageNumber)]}),Nn(n.prompt||n.script,"待补全")]},n.id))]}),i.jsx("div",{className:"va-page-actions comic-plan-actions comic-outline-actions",children:i.jsxs("button",{className:"va-btn-primary",onClick:()=>{P("go_to_generate_step",{...S(t)}),k("generate")},children:[i.jsx(gn,{size:14}),"去生成"]})})]})]}),Ta=()=>{if(!t)return i.jsx("div",{className:"va-page va-empty",children:"暂无连环画记录"});const n=t.pages.length>0&&t.pages.every(s=>G.has(s.id));return i.jsxs("div",{className:"va-page comic-page",children:[i.jsx("div",{className:"ma-card comic-reference-card",children:i.jsx(fs,{images:et,onImagesChange:Bt,multiple:!0,label:"参考图片(可选)",disabled:M.running})}),i.jsxs("div",{className:"ma-card",children:[i.jsxs("div",{className:"ma-card-header",children:[i.jsx("span",{children:"公共提示词"}),i.jsxs("div",{className:"comic-header-actions",children:[i.jsx(yn,{className:"ma-icon-btn comic-prompt-optimize-btn",originalPrompt:t.commonPrompt,language:"zh",scenarioId:"tool.image",historyType:"image",defaultMode:"polish",disabled:M.running,tooltipPlacement:"top",onApply:qt}),i.jsxs("span",{className:"ma-muted",children:[xa,"/",t.pages.length," 页已生成 ·"," ",Ce," 张图"]})]})]}),i.jsx("textarea",{className:"ma-textarea comic-common-prompt",value:t.commonPrompt,onChange:s=>qt(s.target.value)})]}),M.running&&i.jsxs("div",{className:"ma-progress",children:[M.message," ",M.current,"/",M.total]}),i.jsxs("div",{className:"comic-batch-bar comic-batch-bar--generation",children:[i.jsx(_n,{value:fe,onChange:zt,disabled:M.running,language:"zh",className:"comic-knowledge-context-selector"}),i.jsx($,{content:"选择或取消选择全部页面",showArrow:!1,children:i.jsxs("label",{className:"comic-check comic-selection-check",children:[i.jsx("input",{type:"checkbox",checked:n,onChange:()=>n?ca():oa()}),i.jsxs("span",{children:["已选 ",G.size," 页"]})]})}),i.jsx($,{content:"选择图片模型",showArrow:!1,children:i.jsx("div",{className:"comic-generation-model",children:i.jsx(dn,{selectedModel:j,selectedSelectionKey:ft(j,ie),onSelect:Qn,models:Jn,placement:"down",header:"选择图片模型 (↑↓ Tab)"})})}),Ee.length>0&&i.jsx($,{content:"图片生成参数",showArrow:!1,children:i.jsx("div",{className:"comic-generation-params",children:i.jsx(us,{selectedParams:H,onParamChange:ea,compatibleParams:Ee,modelId:j,placement:"down"})})}),i.jsx($,{content:I==="parallel"?"已启用并行:同时生成多页,速度更快":"当前串行:逐页生成,更稳更省并发",showArrow:!1,children:i.jsxs("label",{className:`comic-generation-mode-check${M.running?" is-disabled":""}`,children:[i.jsx("input",{type:"checkbox",checked:I==="parallel",onChange:s=>la(s.target.checked?"parallel":"serial"),disabled:M.running,"aria-label":"并行生成"}),i.jsx("span",{children:"并行"})]})}),i.jsx($,{content:"每页并发生成图片数量",showArrow:!1,children:i.jsxs("label",{className:"comic-generation-count",children:[i.jsx("span",{children:"每页"}),i.jsx("select",{className:"comic-generation-count-select",value:E,onChange:s=>ua(s.target.value),disabled:M.running,"aria-label":"每页生成图片数量",children:Bn.map(s=>i.jsxs("option",{value:s,children:[s," 张"]},s))})]})}),M.running?i.jsx($,{content:"停止生成",showArrow:!1,children:i.jsxs("button",{onClick:ha,disabled:M.stopping,"aria-label":"停止生成",children:[i.jsx(es,{size:14}),"停止"]})}):i.jsx($,{content:"生成已选页面",showArrow:!1,children:i.jsxs("button",{className:"comic-primary-btn",onClick:()=>void Qt(),"aria-label":"生成",children:[i.jsx(gn,{size:14}),"生成"]})})]}),i.jsx("div",{className:"comic-page-list",children:t.pages.map((s,o)=>{const d=bi(s),m=Y(s),f=m.find(_=>_.url===s.imageUrl)||m[m.length-1];return i.jsxs("div",{className:"comic-page-card",children:[i.jsxs("div",{className:"comic-page-card__head",children:[i.jsxs("div",{className:"comic-page-title-row",children:[i.jsxs("label",{className:"comic-check",children:[i.jsx("input",{type:"checkbox",checked:G.has(s.id),onChange:()=>ra(s.id)}),i.jsxs("span",{children:["第 ",s.pageNumber," 页"]})]}),d&&i.jsx($,{content:d,showArrow:!1,children:i.jsx("span",{className:"comic-page-title-label",children:d})}),i.jsx(yn,{className:"comic-icon-btn comic-prompt-optimize-btn",iconSize:14,originalPrompt:s.prompt,language:"zh",scenarioId:"tool.image",historyType:"image",allowStructuredMode:!0,defaultMode:"structured",disabled:M.running,tooltipPlacement:"top",onApply:_=>Ht(s.id,{prompt:_})}),i.jsx($,{content:`在第 ${s.pageNumber} 页后新增页`,showArrow:!1,children:i.jsx("button",{className:"comic-icon-btn comic-page-add-btn",onClick:()=>sa(s.id),disabled:M.running,"aria-label":`在第 ${s.pageNumber} 页后新增页`,children:i.jsx(ts,{size:14})})})]}),i.jsx("span",{className:`comic-status comic-status--${s.status||"draft"}`,children:s.status||"draft"}),o>0&&i.jsx($,{content:"上移",showArrow:!1,children:i.jsx("button",{className:"ma-icon-btn",onClick:()=>Wt(s.id,-1),disabled:M.running,"aria-label":"上移页面",children:i.jsx(ns,{size:14})})}),o<t.pages.length-1&&i.jsx($,{content:"下移",showArrow:!1,children:i.jsx("button",{className:"ma-icon-btn",onClick:()=>Wt(s.id,1),disabled:M.running,"aria-label":"下移页面",children:i.jsx(as,{size:14})})}),i.jsx($,{content:"删除",showArrow:!1,children:i.jsx("button",{className:"ma-icon-btn",onClick:()=>ia(s.id),disabled:t.pages.length<=1||M.running,"aria-label":"删除页面",children:i.jsx(pn,{size:14})})})]}),i.jsxs("div",{className:"comic-page-card__body",children:[i.jsxs("div",{className:"comic-page-preview-pane",children:[i.jsxs("div",{className:"comic-page-preview",children:[f?i.jsx("button",{type:"button",className:"comic-page-preview-image-btn",onClick:()=>da(s.id),"aria-label":`预览第 ${s.pageNumber} 页`,children:i.jsx(hn,{src:f.url,alt:s.title,showSkeleton:!1,eager:!0})}):i.jsx("div",{className:"comic-page-placeholder",children:i.jsx(ss,{size:22})}),i.jsx($,{content:"重新生成当前页",showArrow:!1,children:i.jsxs("button",{className:"comic-page-preview-action",onClick:()=>void Qt(s.id),disabled:M.running,"aria-label":"重新生成当前页",children:[i.jsx(mn,{size:14}),i.jsx("span",{children:"重生"})]})})]}),i.jsxs("div",{className:"comic-page-assets-row",children:[m.length>0?i.jsx("div",{className:"comic-page-variant-strip","aria-label":`第 ${s.pageNumber} 页历史图片`,children:m.map((_,C)=>{const F=_.url===s.imageUrl;return i.jsx($,{content:F?`当前图片 ${C+1}`:`设为第 ${C+1} 张图片`,showArrow:!1,children:i.jsxs("button",{type:"button",className:`comic-page-variant-thumb${F?" comic-page-variant-thumb--active":""}`,onClick:()=>ma(s.id,_.id),disabled:M.running,"aria-label":`选择第 ${s.pageNumber} 页第 ${C+1} 张图片`,children:[i.jsx(hn,{src:_.url,alt:`${s.title} ${C+1}`,showSkeleton:!1,eager:!0}),i.jsx("span",{children:C+1})]})},_.id)})}):i.jsx("div",{className:"comic-page-variant-strip comic-page-variant-strip--empty","aria-hidden":"true"}),i.jsx("div",{className:"comic-page-library-fallback",children:i.jsx($,{content:"从素材库补回图片",showArrow:!1,children:i.jsx("button",{type:"button",className:"comic-page-library-btn",onClick:()=>ga(s.id),"aria-label":`从素材库补回第 ${s.pageNumber} 页图片`,children:i.jsx(is,{size:18})})})})]})]}),i.jsxs("div",{className:"comic-page-editor",children:[i.jsx("textarea",{className:"ma-textarea comic-page-unified-prompt",value:s.prompt,onChange:_=>Ht(s.id,{prompt:_.target.value}),placeholder:"本页完整图片提示词:写清主题、画面主体、构图、必要文案、风格和色彩"}),s.error&&i.jsx("div",{className:"ma-error",children:s.error})]})]})]},s.id)})}),i.jsxs("div",{className:"ma-card comic-export-inline",children:[i.jsxs("div",{className:"ma-card-header",children:[i.jsx("span",{children:"导出"}),i.jsxs("span",{className:"ma-muted",children:["已生成 ",Ce," 张,至少 1 张即可导出"]})]}),i.jsxs("div",{className:"comic-export-grid",children:[i.jsxs("button",{className:"comic-export-card",disabled:!!me||Ce===0,onClick:()=>void ot("zip"),children:[i.jsx(rs,{size:24}),i.jsx("span",{children:me==="zip"?"导出中...":"ZIP"})]}),i.jsxs("button",{className:"comic-export-card",disabled:!!me||Ce===0,onClick:()=>void ot("pptx"),children:[i.jsx(os,{size:24}),i.jsx("span",{children:me==="pptx"?"导出中...":"PPTX"})]}),i.jsxs("button",{className:"comic-export-card",disabled:!!me||Ce===0,onClick:()=>void ot("pdf"),children:[i.jsx(un,{size:24}),i.jsx("span",{children:me==="pdf"?"导出中...":"PDF"})]})]})]}),i.jsx(hs,{isOpen:!!ge,onClose:()=>tt(null),mode:cs.SELECT,filterType:cn.IMAGE,onSelect:pa,selectButtonText:"补回此页"})]})},Aa=()=>i.jsxs("div",{className:"va-page comic-page",children:[i.jsxs("div",{className:"comic-history-filters",children:[i.jsx("input",{className:"ma-input",value:_e,onChange:n=>Hn(n.target.value),onBlur:va,placeholder:"搜索标题或提示词"}),i.jsxs("select",{className:"ma-select",value:W,onChange:n=>ka(n.target.value),children:[i.jsx("option",{value:"all",children:"全部"}),i.jsx("option",{value:"planned",children:"已规划"}),i.jsx("option",{value:"done",children:"已完成"}),i.jsx("option",{value:"failed",children:"有失败"})]})]}),Fe.length===0?i.jsx("div",{className:"va-empty comic-history-empty",children:"暂无记录"}):i.jsx("div",{className:"comic-history-list",children:Fe.map(n=>i.jsxs("div",{className:"comic-history-item",children:[i.jsxs("button",{className:"comic-history-main",onClick:()=>_a(n),children:[i.jsx("strong",{children:n.title||"未命名连环画"}),i.jsxs("span",{children:["创建时间 ",Si(n.createdAt)]}),i.jsxs("span",{children:[Ni(n)," · ",n.pageCount," 页 ·"," ",_t(n)," 张图"]}),i.jsx("p",{children:n.sourcePrompt})]}),i.jsxs("div",{className:"comic-history-actions",children:[i.jsx("button",{className:`comic-history-action comic-history-star ${n.starred?"is-starred":""}`,"aria-label":n.starred?"取消收藏":"收藏",title:n.starred?"取消收藏":"收藏",onClick:()=>void ya(n),children:i.jsx(ls,{size:15,strokeWidth:2.1,fill:n.starred?"currentColor":"none","aria-hidden":"true"})}),i.jsx("button",{className:"comic-history-action comic-history-delete","aria-label":"删除历史",title:"删除历史",onClick:()=>void ba(n.id),children:i.jsx(pn,{size:14})})]})]},n.id))})]});return i.jsxs("div",{className:"video-analyzer music-analyzer comic-creator",children:[i.jsx(Wa,{isHistoryPage:y==="history",showStarred:r,recordsCount:e.length,starredCount:u,currentStep:y,steps:Ca,onStepNavigate:wa,onBackFromHistory:Pa,onOpenHistory:Na,onOpenStarred:Sa,onToggleStarred:ja}),y==="plan"&&Ma(),y==="generate"&&Ta(),y==="history"&&Aa(),i.jsx(ms,{...Vn})]})};export{$i 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__input-area--long-text{max-height:clamp(320px,65vh,680px)}.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__prompt-expand-btn{position:absolute;top:4px;right:4px;z-index:3;width:26px;height:26px;display:flex;align-items:center;justify-content:center;border:none;border-radius:6px;background:transparent;color:#9ca3af;cursor:pointer;transition:background .15s ease,color .15s ease}.ai-input-bar__prompt-expand-btn svg{stroke-width:2}.ai-input-bar__prompt-expand-btn:hover:not(:disabled),.ai-input-bar__prompt-expand-btn--active{background:#f59e0b1f;color:#f59e0b}.ai-input-bar__prompt-expand-btn:disabled{cursor:not-allowed;opacity:.5}.ai-input-bar__highlight-layer{position:absolute;top:0;left:0;right:0;bottom:0;padding:6px 32px 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 32px 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__input--long-text{min-height:192px;max-height:clamp(320px,65vh,680px)}.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__knowledge-selector{flex:0 0 auto}.ai-input-bar__knowledge-selector .knowledge-note-context-selector__trigger{width:32px;min-width:32px;height:32px;min-height:32px;border-radius:8px}.ai-input-bar__knowledge-selector .knowledge-note-context-selector__dropdown{top:auto;bottom:calc(100% + 8px);left:0;width:min(360px,100vw - 32px);max-width:calc(100vw - 32px)}.ai-input-bar__knowledge-selector .knowledge-note-context-selector__hover-summary{left:0}.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__knowledge-selector .knowledge-note-context-selector__trigger{color:var(--color-gray-50, #999)}:root[data-theme=dark] .ai-input-bar__knowledge-selector .knowledge-note-context-selector__trigger:hover,:root[data-theme=dark] .ai-input-bar__knowledge-selector .knowledge-note-context-selector__trigger:focus-visible{color:#f59e0b;background:#f59e0b26}:root[data-theme=dark] .ai-input-bar__knowledge-selector.knowledge-note-context-selector--selected .knowledge-note-context-selector__trigger{color:#f59e0b;background:#f59e0b2e}: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,.ai-input-bar__knowledge-selector .knowledge-note-context-selector__trigger{width:36px;height:36px;min-width:36px}.ai-input-bar__highlight-layer{font-size:14px;padding:4px 36px 4px 8px}.ai-input-bar__input{font-size:14px;padding:2px 36px 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__input--long-text{min-height:176px;max-height:clamp(320px,65vh,680px)}.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,.ai-input-bar__knowledge-selector .knowledge-note-context-selector__trigger{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__input--long-text{min-height:164px;max-height:clamp(320px,65vh,680px)}.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}
|