@forsion/unit 2.13.0 → 2.13.1
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/main.mjs +5 -3
- package/package.json +1 -1
- package/release.json +5 -5
- package/web/assets/{ArtificialView-BSv3Mx5C.js → ArtificialView-XwHMLUFb.js} +1 -1
- package/web/assets/{AutomationBuilder-BuiHtVB-.js → AutomationBuilder-hqs0QhMt.js} +1 -1
- package/web/assets/{CalendarConfigView-BJtG6cqN.js → CalendarConfigView-DKib8Oed.js} +1 -1
- package/web/assets/{CalendarView-C-FX1RED.js → CalendarView-DJ5iOzvu.js} +1 -1
- package/web/assets/{CapabilityMenu-kx1TIJYN.js → CapabilityMenu-SwVlZ06x.js} +1 -1
- package/web/assets/{CheckboxInput-eW7xdiRS.js → CheckboxInput-BC-5a_C9.js} +1 -1
- package/web/assets/{Chrome-B77-lQyh.js → Chrome-HdfyYV3i.js} +1 -1
- package/web/assets/{CodeView-Df3AiSIi.js → CodeView-CFL6yQ-6.js} +3 -3
- package/web/assets/{DashboardGridView-MlO1dpuo.js → DashboardGridView-B9DCWYVb.js} +12 -12
- package/web/assets/{EventCard-CDmeCbI8.js → EventCard-B_ndpqH_.js} +1 -1
- package/web/assets/{ExcalidrawCanvas-D9vkBh_5.js → ExcalidrawCanvas-BQ4KKLJP.js} +1 -1
- package/web/assets/{FloatingToc-tART_jC4.js → FloatingToc-Ce9GamvH.js} +1 -1
- package/web/assets/{HomepageView-Trqmd3RV.js → HomepageView-RCOfcVbE.js} +1 -1
- package/web/assets/{ImageStudioPanels-BfCVTnKC.js → ImageStudioPanels-lkS_y2uM.js} +2 -2
- package/web/assets/{ImageStudioView-KJhx0wJk.js → ImageStudioView-UPv52acl.js} +1 -1
- package/web/assets/{InlineFiles-BHwivGbQ.js → InlineFiles-CQbQumkf.js} +1 -1
- package/web/assets/{MarkdownBlock-D8LgHFYY.js → MarkdownBlock-CkqiwPXa.js} +19 -19
- package/web/assets/{ModelPill-DrW2cG0l.js → ModelPill-CY-rU1RU.js} +2 -2
- package/web/assets/{MuseLibraryView-CW78Uivf.js → MuseLibraryView-CtTHlVnT.js} +2 -2
- package/web/assets/{MuseView-Cb6R_l4i.js → MuseView-CC2A7MBs.js} +2 -2
- package/web/assets/{PageHistoryPanel-BQs9IWTP.js → PageHistoryPanel-KhKT1DLy.js} +2 -2
- package/web/assets/{PdfAnnotator-BFTBkxvO.js → PdfAnnotator-DUyrgY-t.js} +1 -1
- package/web/assets/{ProductView-mB-S0j81.js → ProductView-CgsIYZqD.js} +1 -1
- package/web/assets/{RightPanel-BVZeVO3c.js → RightPanel-BHDgqTFs.js} +3 -3
- package/web/assets/RunLocationPicker-DBnXYV5B.js +38 -0
- package/web/assets/{SidebarRow-D77yrSLf.js → SidebarRow-BAJxbMcx.js} +1 -1
- package/web/assets/{SketchCard-CAAr_cqF.js → SketchCard-BGYz-bXP.js} +1 -1
- package/web/assets/{StudioGuestSurface-DthpuVGg.js → StudioGuestSurface-lt6znmkl.js} +1 -1
- package/web/assets/{TodoListView-C3ZkMIIf.js → TodoListView-DPKhee6i.js} +1 -1
- package/web/assets/{Tooltip-D9Dt9ZTr.js → Tooltip-ZxrDqN4p.js} +1 -1
- package/web/assets/{UnifiedPage-C75y-MKT.js → UnifiedPage-BX6ZQL0h.js} +27 -27
- package/web/assets/{amadeus-manual.en-D5wZKuag.js → amadeus-manual.en-DzRWr4BL.js} +15 -15
- package/web/assets/{amadeus-manual.zh-Br5fidrj.js → amadeus-manual.zh-DW32DkL7.js} +15 -15
- package/web/assets/{appStore-B1ynyt42.js → appStore-DWP8UET9.js} +99 -79
- package/web/assets/appStore-wtOILggO.css +1 -0
- package/web/assets/{arrow-up-right-R10mR2I6.js → arrow-up-right-DrCXuWS7.js} +1 -1
- package/web/assets/{astryxBridge-CU_kQTEl.js → astryxBridge-D-m4_kYt.js} +3 -3
- package/web/assets/{automationListSource-B8EIRmDW.js → automationListSource-C8BNy6RY.js} +1 -1
- package/web/assets/{book-open-DBJ3dDpw.js → book-open-OLNm7OaB.js} +1 -1
- package/web/assets/{calendarNavStore-DGvUlU5N.js → calendarNavStore-Cylfvv3s.js} +1 -1
- package/web/assets/{canvasPrefs-DwL_OAAo.js → canvasPrefs-8taQ42Cz.js} +1 -1
- package/web/assets/{chatBoxSurface-Lq-2qfd3.js → chatBoxSurface-CIlzs45H.js} +1 -1
- package/web/assets/{circle-question-mark-HPZpZQxd.js → circle-question-mark-XbAFplz1.js} +1 -1
- package/web/assets/{circle-x-BZfe7d6S.js → circle-x-fcReAZaE.js} +1 -1
- package/web/assets/{client-DxGbwZLy.js → client-0MPbodA6.js} +1 -1
- package/web/assets/{code-xml-joKQ-qGS.js → code-xml-Cuna8Kh4.js} +1 -1
- package/web/assets/{codeStudioStore-C7rGKlOC.js → codeStudioStore-BBU62GTy.js} +1 -1
- package/web/assets/{codingNavigation-CjeWG4xm.js → codingNavigation-DDlPpPk5.js} +7 -7
- package/web/assets/{create-BjBRKATq.js → create-BGtEfCcg.js} +2 -2
- package/web/assets/{dashboardSurface-Cojgf_-U.js → dashboardSurface-BYM3C7WG.js} +1 -1
- package/web/assets/{deskCapture-DnGWk1iq.js → deskCapture-BiUCmqfc.js} +1 -1
- package/web/assets/{diff2html-Cd1rVi_Z.js → diff2html-BNp2FTbk.js} +1 -1
- package/web/assets/{docx-preview-CK0k1mUD.js → docx-preview-CFznGVOU.js} +1 -1
- package/web/assets/{emoji-Cjm3bKiF.js → emoji-6zl4yfOS.js} +1 -1
- package/web/assets/{floatingTocSurface-Dd1pT5j5.js → floatingTocSurface-DreXPCa6.js} +1 -1
- package/web/assets/{foldActions-Dm-uAt3L.js → foldActions-05QcQziQ.js} +1 -1
- package/web/assets/{folder-CvZyHIgb.js → folder-BpsfOHD4.js} +1 -1
- package/web/assets/{folder-plus-BRScGQ9m.js → folder-plus-BeQHr4AZ.js} +1 -1
- package/web/assets/{gestures-CZQVefU0.js → gestures-DQBCcK4y.js} +1 -1
- package/web/assets/{hand-D3QspKYq.js → hand-Bko7ms15.js} +1 -1
- package/web/assets/{hard-drive-BQsHSala.js → hard-drive-BpuI5ebj.js} +1 -1
- package/web/assets/{i18n.generated-BZRHO2Nc.js → i18n.generated-BuLjnmY8.js} +1 -1
- package/web/assets/{imageStudio-Cy3_437s.js → imageStudio-BLVNKmEG.js} +2 -2
- package/web/assets/{index-BPhwi4-v.js → index-BF10xp_K.js} +1 -1
- package/web/assets/{index-GjLSlygt.js → index-BHm6K743.js} +1 -1
- package/web/assets/{index-Bh_nLVTc.js → index-BM2o7PeV.js} +5 -5
- package/web/assets/{index-BcVGjCAJ.js → index-BgnNNv3e.js} +1 -1
- package/web/assets/{index-CcOag8eb.js → index-C0Gy2NQ6.js} +1 -1
- package/web/assets/{index-0AYHATDX.js → index-C1doZp5H.js} +1 -1
- package/web/assets/{index-9BmmlTjY.js → index-C4L6vjd_.js} +1 -1
- package/web/assets/{index-8ag1K7AZ.js → index-CD3yIkOA.js} +1 -1
- package/web/assets/{index-Dkd-nl1u.js → index-CJeUgjPU.js} +1 -1
- package/web/assets/{index-B5GxvbNm.js → index-CLHoq1w-.js} +1 -1
- package/web/assets/{index-DElrDw66.js → index-CUZI62qU.js} +1 -1
- package/web/assets/{index-BgtO11q8.js → index-Cff42k7q.js} +1 -1
- package/web/assets/{index-Dj-PygjB.js → index-Ck_O3Jdd.js} +1 -1
- package/web/assets/index-CuiYK18N.js +1 -0
- package/web/assets/{index-Bpc3R3DS.js → index-CwcOeZdT.js} +1 -1
- package/web/assets/{index-DJLWTPtq.js → index-D6AycQIz.js} +1 -1
- package/web/assets/{index-C9yo04Ck.js → index-D7gVhvNY.js} +1 -1
- package/web/assets/{index-BnWj6ggb.js → index-D9UZQy42.js} +1 -1
- package/web/assets/{index-D6mpAJ9S.js → index-DuBQ0j2g.js} +1 -1
- package/web/assets/{index-1FhRiJ_X.js → index-OD1gSX3h.js} +1 -1
- package/web/assets/{index-DNE_PBJt.js → index-Uo5tswys.js} +1 -1
- package/web/assets/{index-BgDZGDqt.js → index-o8cj0pRH.js} +1 -1
- package/web/assets/{index-BdZaheMZ.js → index-rHjhbwvm.js} +1 -1
- package/web/assets/{index-4E9nrhwf.js → index-rggq2czF.js} +1 -1
- package/web/assets/{index-D0FLFLfh.js → index-sCXThwqZ.js} +1 -1
- package/web/assets/{invitePage-B4gMvEKi.js → invitePage-b0HGvMj6.js} +1 -1
- package/web/assets/{ipc-CPhL3bPp.js → ipc-CxAyeo8q.js} +1 -1
- package/web/assets/{jszip.min-DAJT9RUA.js → jszip.min-B94KpE21.js} +1 -1
- package/web/assets/{layout-grid-DfUfnvDS.js → layout-grid-BBVuEdWG.js} +1 -1
- package/web/assets/{linkFollow-C6PHGUxk.js → linkFollow-B7ivDZMM.js} +5 -5
- package/web/assets/{list-tree-DaGpnIYu.js → list-tree-4-0QDbLu.js} +1 -1
- package/web/assets/{listFold-Q_8mh5ZG.js → listFold-DLuxXiIj.js} +1 -1
- package/web/assets/{lock-DQ_yL4nF.js → lock-CnbZm4vo.js} +1 -1
- package/web/assets/{log-out-DFwTeh2X.js → log-out-BEynWaHa.js} +1 -1
- package/web/assets/{main-NgUPPqDn.css → main-BiS_5wrB.css} +1 -1
- package/web/assets/main-sIq2N9Z5.js +20 -0
- package/web/assets/{markdownEditorSurface-e_oMhqx-.js → markdownEditorSurface-ZSJ3RHAv.js} +1 -1
- package/web/assets/{mdMarkStore-DjN4bf1T.js → mdMarkStore-DQHDjG7s.js} +2 -2
- package/web/assets/{mdMarks-cmL6vzR-.js → mdMarks-DbIcRa0O.js} +1 -1
- package/web/assets/{message-square-plus-CEHkduIL.js → message-square-plus-CpiKDvle.js} +1 -1
- package/web/assets/{messages-CBtmbpur.js → messages-_jta1lSI.js} +1 -1
- package/web/assets/minus-C9ndHJ9O.js +1 -0
- package/web/assets/{mobileEntry-qR7BAROr.js → mobileEntry-CPmU_c4m.js} +1 -1
- package/web/assets/{nativeDownload-CziEyW_p.js → nativeDownload-BYT082bY.js} +1 -1
- package/web/assets/{pageChrome-DFz_AAzZ.js → pageChrome-D3Niv1JM.js} +1 -1
- package/web/assets/{pageTree-yVO1_fSy.js → pageTree-CgfvpzIj.js} +1 -1
- package/web/assets/{pen-tool-uxsFELYC.js → pen-tool-BXEFnU2i.js} +1 -1
- package/web/assets/{pencil-BSbra1Ra.js → pencil-cqvCkekG.js} +1 -1
- package/web/assets/pluginChat-BbBukMuN.js +2 -0
- package/web/assets/{redo-2-BK5LMNa5.js → redo-2-BO7wCDwy.js} +1 -1
- package/web/assets/{rotate-ccw-HedfU4na.js → rotate-ccw-BvipPIjC.js} +1 -1
- package/web/assets/{sharePage-CpzDpuU1.js → sharePage-XbN50US7.js} +2 -2
- package/web/assets/{shareViewer-BwzH2bIs.js → shareViewer-BaYogetW.js} +1 -1
- package/web/assets/{star-CgYon3z4.js → star-BQWMXnn7.js} +1 -1
- package/web/assets/tableSurface-BXqqidd1.js +1 -0
- package/web/assets/{terminal-krsPf1mc.js → terminal-l9k6RDrH.js} +1 -1
- package/web/assets/{terminalView-4e2_u5_I.js → terminalView-Cpnt5_0P.js} +1 -1
- package/web/assets/{type-GJYLEhY-.js → type-CFoaj2eD.js} +1 -1
- package/web/assets/{undo-2-DCTs4Ro4.js → undo-2-DusxpdLa.js} +1 -1
- package/web/assets/{unitAccount-D3xjX3cu.js → unitAccount-DwutFPPw.js} +1 -1
- package/web/assets/{unitBridge-D5JcIkAP.js → unitBridge-CcgQpkqV.js} +1 -1
- package/web/assets/{unitCloudTransport-B44L3x6M.js → unitCloudTransport-vA7cLDts.js} +1 -1
- package/web/assets/{unitOwnerAccess-CRUHWGpf.js → unitOwnerAccess-LBlJ1YfA.js} +1 -1
- package/web/assets/{unitShim-_VzxvdEG.js → unitShim-B_M9IrbC.js} +3 -3
- package/web/assets/{upload-MVVRQtkj.js → upload-ZrOj6tXA.js} +1 -1
- package/web/assets/{userSpaces-CI4eqEgh.js → userSpaces-uJOnsedR.js} +1 -1
- package/web/assets/viewportLock-D3SNkwS2.js +631 -0
- package/web/assets/{workflow-DzeW9OXR.js → workflow-DPoG4QE2.js} +1 -1
- package/web/assets/{zoom-in-CovPsw4g.js → zoom-in-lbTgzdQP.js} +1 -1
- package/web/index.html +27 -7
- package/web/assets/RunLocationPicker-CyVa0RJa.js +0 -38
- package/web/assets/appStore-BC_CQv-L.css +0 -1
- package/web/assets/index-BaRySZ-M.js +0 -1
- package/web/assets/main-CwqZ_ymb.js +0 -19
- package/web/assets/minus-BUT48dAC.js +0 -1
- package/web/assets/pluginChat-BMFnf_j2.js +0 -2
- package/web/assets/tableSurface-CmDwnKnd.js +0 -1
- package/web/assets/viewportLock-BH26xHQO.js +0 -611
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as w,r as A,u as S,d as f,j as e,D as K}from"./index-
|
|
1
|
+
import{t as w,r as A,u as S,d as f,j as e,D as K}from"./index-BM2o7PeV.js";import{jz as U,jA as V,jB as W,jC as T,jD as _,jE as L,jF as G,jr as F,jG as y,aD as J,f7 as Q,jH as M,jI as X,jJ as Y,jK as $,jL as Z,jM as ee,jN as O,jO as P,fn as ae,jP as te,jQ as ne}from"./appStore-DWP8UET9.js";import{n as ce}from"./nativeDownload-BYT082bY.js";A({"calevtact.deleted":{zh:"已删除「{title}」",en:"Deleted “{title}”"},"calevtact.untitled":{zh:"未命名",en:"Untitled"},"calevtact.undo":{zh:"撤销",en:"Undo"}});function se(s,c,a){const l=U(s,c.rowId);s.isNoteView||ce({text:w("calevtact.deleted",{title:a||w("calevtact.untitled")}),level:"info",action:{label:w("calevtact.undo"),run:()=>V(s,c,l)}})}A({"evcard.editEvent":{zh:"编辑事件:{title}",en:"Edit event: {title}"},"evcard.untitled":{zh:"未命名",en:"Untitled"},"evcard.close":{zh:"关闭",en:"Close"},"evcard.name":{zh:"名称",en:"Name"},"evcard.done":{zh:"完成",en:"Done"},"evcard.openNote":{zh:"打开笔记",en:"Open note"},"evcard.openDb":{zh:"打开多维表",en:"Open database"},"evcard.delete":{zh:"删除",en:"Delete"},"evcard.rowlinkReadonly":{zh:"关联表列请在表格里编辑",en:"Edit related rows in the table"},"evcard.noOptions":{zh:"(无选项,请在表格里添加)",en:"(No options — add them in the table)"}});function le(s){const c=s.zoom||1,a=360,l=380,n=8*c;let d=s.right+n;d+a*c>window.innerWidth&&(d=Math.max(n,s.left-a*c-n));const i=Math.max(n,Math.min(s.top,window.innerHeight-l*c-n));return{left:d/c,top:i/c}}const re={text:O,number:ee,checkbox:Z,date:L,select:$,multiselect:Y,url:X,page:T};function ie({col:s}){const c=M(s.type);if(c?.icon)return e.jsx(e.Fragment,{children:c.icon});const a=re[P(s.type)]??O;return e.jsx(a,{})}function pe({ev:s,at:c,onClose:a}){const{t:l}=S(),{db:n,row:d,colId:i,title:o}=s,h=!!n.readonly&&!n.writeCell,t=!n.readonly,m=!n.readonly,u=n.columns[0],v=m&&!(n.isNoteView&&u?.type==="page"),j=n.columns.filter(r=>r.id!==u?.id&&r.id!==i),B=le(c),x=i?W(s.raw):null,[g,k]=f.useState(!1),H=s.color??"var(--accent, #6c5ce7)",b=f.useRef(null),C=f.useRef(null),E=f.useRef(a);E.current=a;const D=!n.readonly||!!n.openRow;return f.useEffect(()=>{const r=document.activeElement instanceof HTMLElement?document.activeElement:null,q=window.requestAnimationFrame(()=>{(b.current?.querySelector(".amx-cal-card-title:not(.amx-cal-card-title-ro)")??C.current)?.focus()}),I=p=>{if(p.key==="Escape"){p.preventDefault(),E.current();return}if(p.key!=="Tab"||!b.current)return;const N=Array.from(b.current.querySelectorAll('button:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(!N.length)return;const R=N[0],z=N[N.length-1];p.shiftKey&&document.activeElement===R?(p.preventDefault(),z.focus()):!p.shiftKey&&document.activeElement===z&&(p.preventDefault(),R.focus())};return window.addEventListener("keydown",I),()=>{window.cancelAnimationFrame(q),window.removeEventListener("keydown",I),r?.focus()}},[]),e.jsx("div",{className:"amx-cal-cardcatch",onMouseDown:a,children:e.jsx("div",{className:"amx-cal-cardwrap",ref:b,role:"dialog","aria-modal":"true","aria-label":l("evcard.editEvent",{title:o||l("evcard.untitled")}),style:B,onMouseDown:r=>r.stopPropagation(),children:e.jsxs("div",{className:"amx-cal-cardin",children:[e.jsxs("div",{className:"amx-cal-card-top",children:[e.jsxs("span",{className:"amx-cal-card-src",children:[e.jsx("span",{className:"amx-cal-card-dot",style:{background:H}}),n.name]}),e.jsx("button",{className:"amx-cal-card-x",ref:C,onClick:a,"aria-label":l("evcard.close"),children:"×"})]}),e.jsxs("div",{className:"amx-cal-card-head",children:[e.jsx("span",{className:"amx-cal-card-ico amx-cal-card-headico",children:e.jsx(T,{})}),v?e.jsx("input",{className:"amx-cal-card-title","aria-label":l("evcard.name"),value:o,placeholder:l("evcard.untitled"),onChange:r=>_(n,d.rowId,r.target.value)}):e.jsx("div",{className:"amx-cal-card-title amx-cal-card-title-ro",children:o||l("evcard.untitled")})]}),i&&e.jsxs("div",{className:"amx-cal-card-row amx-cal-card-timerow",children:[e.jsx("span",{className:"amx-cal-card-ico",children:e.jsx(L,{})}),e.jsxs("div",{className:"amx-cal-card-timebody",children:[x&&!(g&&!h)&&e.jsxs("button",{type:"button",className:"amx-cal-card-timebtn",disabled:h,onClick:()=>k(!0),children:[e.jsxs("span",{className:"amx-cal-card-timehead",children:[x.head,x.badge&&e.jsx("span",{className:"amx-cal-card-badge",children:x.badge})]}),x.date&&e.jsx("span",{className:"amx-cal-card-timesub",children:x.date})]}),!h&&(g||!x)&&e.jsxs("div",{className:"amx-cal-card-timeedit",children:[e.jsx(G,{value:s.raw,onChange:r=>F(n,d.rowId,i,r),autoFocus:g}),x&&e.jsx("button",{type:"button",className:"amx-cal-card-timedone",onClick:()=>k(!1),children:l("evcard.done")})]})]})]}),j.length>0&&e.jsx("div",{className:"amx-cal-card-props",children:j.map(r=>e.jsxs("div",{className:"amx-cal-card-row amx-cal-card-prop",children:[e.jsxs("span",{className:"amx-cal-card-key",children:[e.jsx("span",{className:"amx-cal-card-ico",children:e.jsx(ie,{col:r})}),e.jsx("span",{className:"amx-cal-card-keyt",children:r.name})]}),e.jsx("div",{className:"amx-cal-card-ctl",children:m?e.jsx(oe,{db:n,row:d,col:r}):e.jsx("span",{className:"amx-cal-card-val",children:y(d.cells[r.id])||"—"})})]},r.id))}),(D||t)&&e.jsxs("div",{className:"amx-cal-card-foot",children:[D&&e.jsxs("button",{className:"amx-cal-card-open",onClick:()=>{n.openRow?n.openRow(d.rowId):Q(n.path),a()},children:[e.jsx(J,{size:13})," ",n.openRow?l("evcard.openNote"):l("evcard.openDb")]}),t&&e.jsx("button",{className:"amx-cal-card-del",onClick:()=>{se(n,d,o),a()},children:l("evcard.delete")})]})]})})})}const de=new Set(["rowlink","lookup","formula","file"]);function oe({db:s,row:c,col:a}){const{t:l}=S(),n=M(a.type),d=P(a.type),i=K(c.cells[a.id],d),o=t=>F(s,c.rowId,a.id,t),h=ae(t=>a.type==="rowlink"&&a.refDb?t.entries[a.refDb]?.data??null:null);if(n){const t=n.Cell;return e.jsx(t,{value:i,column:a,onChange:o})}if(de.has(a.type)){const t=c.cells[a.id];let m=y(t);return a.type==="rowlink"&&h&&(m=te(t).map(u=>{const v=h.rows.find(j=>j.id===u);return v?ne(h,v,a.titleCol):"已失联"}).join(", ")),e.jsx("span",{className:"amx-cal-card-val",title:a.type==="rowlink"?l("evcard.rowlinkReadonly"):void 0,children:m||"—"})}switch(d){case"checkbox":return e.jsx("input",{"aria-label":a.name,className:"amx-cal-card-check",type:"checkbox",checked:i===!0,onChange:t=>o(t.target.checked?!0:void 0)});case"number":return e.jsx("input",{className:"amx-cal-card-input","aria-label":a.name,type:"number",value:i??"",onChange:t=>t.target.value===""?o(void 0):Number.isFinite(Number(t.target.value))&&o(Number(t.target.value))});case"date":return e.jsx("input",{"aria-label":a.name,className:"amx-cal-card-input",type:"date",value:i,onChange:t=>o(t.target.value||void 0)});case"select":return e.jsxs("select",{"aria-label":a.name,className:"amx-cal-card-input amx-cal-card-select",value:i,onChange:t=>o(t.target.value||void 0),children:[e.jsx("option",{value:"",children:"—"}),(a.options??[]).map(t=>e.jsx("option",{value:t,children:t},t))]});case"multiselect":{const t=i??[];return e.jsxs("div",{className:"amx-cal-card-chips",children:[(a.options??[]).map(m=>{const u=t.includes(m);return e.jsx("button",{className:`amx-cal-card-chip${u?" on":""}`,"aria-pressed":u,onClick:()=>{const v=u?t.filter(j=>j!==m):[...t,m];o(v.length?v:void 0)},children:m},m)}),(a.options??[]).length===0&&e.jsx("span",{className:"amx-cal-card-key",children:l("evcard.noOptions")})]})}case"page":return e.jsx("span",{className:"amx-cal-card-val",children:y(c.cells[a.id])||"—"});default:return e.jsx("input",{"aria-label":a.name,className:"amx-cal-card-input",value:i,onChange:t=>o(t.target.value||void 0)})}}export{pe as E,se as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as J,R as ft,co as gt,t as E,j as n,d as u,u as K,cp as xt,cq as bt}from"./index-Bh_nLVTc.js";import{F as Y,rm as yt,a2 as kt,fk as vt,bj as Xe,ko as qe,cN as Ze,dW as St,rn as ye,ro as Te,rp as ke,rq as wt,rr as Et,rs as Ct,ec as Ae,bo as ve,rt as jt,ru as Se}from"./appStore-B1ynyt42.js";import{R as It}from"./client-DxGbwZLy.js";import{P as Nt}from"./pen-tool-uxsFELYC.js";import{P as Ge}from"./pencil-BSbra1Ra.js";import{F as Lt,T as Pt}from"./type-GJYLEhY-.js";import{M as Je}from"./minus-BUT48dAC.js";import{H as Mt}from"./hand-D3QspKYq.js";import{L as Rt}from"./lock-DQ_yL4nF.js";import"./nativeDownload-CziEyW_p.js";import"./ipc-CPhL3bPp.js";const zt=[["path",{d:"m11 10 3 3",key:"fzmg1i"}],["path",{d:"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z",key:"p4q2r7"}],["path",{d:"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031",key:"wy6l02"}]],Ot=Y("brush",zt);const Tt=[["path",{d:"M2.7 10.3a2.41 2.41 0 0 0 0 3.41l7.59 7.59a2.41 2.41 0 0 0 3.41 0l7.59-7.59a2.41 2.41 0 0 0 0-3.41l-7.59-7.59a2.41 2.41 0 0 0-3.41 0Z",key:"1f1r0c"}]],Qe=Y("diamond",Tt);const At=[["path",{d:"M12.67 19a2 2 0 0 0 1.416-.588l6.154-6.172a6 6 0 0 0-8.49-8.49L5.586 9.914A2 2 0 0 0 5 11.328V18a1 1 0 0 0 1 1z",key:"18jl4k"}],["path",{d:"M16 8 2 22",key:"vp34q"}],["path",{d:"M17.5 15H9",key:"1oz8nu"}]],Ft=Y("feather",At);const Dt=[["path",{d:"m9 11-6 6v3h9l3-3",key:"1a3l36"}],["path",{d:"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4",key:"14a9rk"}]],et=Y("highlighter",Dt);const Bt=[["path",{d:"M13 21h8",key:"1jsn5i"}],["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],Wt=Y("pen-line",Bt);const Ht=[["path",{d:"M22 2 2 22",key:"y4kqgn"}]],_t=Y("slash",Ht),Ee="amx.boardUiMode",le=new Set,$t=["full","compact"];let ie=null;const ce=()=>{if(ie)return ie;try{const e=localStorage.getItem(Ee);if(e&&$t.includes(e))return e;if(localStorage.getItem("amx.boardCompact")==="1")return"compact"}catch{}return"compact"},Ut=e=>{ie=e;try{localStorage.setItem(Ee,e)}catch{}for(const t of le)t()},Vt=e=>(le.add(e),()=>le.delete(e));typeof window<"u"&&window.addEventListener("storage",e=>{if(e.key===Ee){ie=null;for(const t of le)t()}});J({"boardengine.assetLoadFailed":{zh:"画板引擎资源加载失败:{url}(自托管副本缺失?重跑 npm run postinstall)",en:"Whiteboard engine assets failed to load: {url} (self-hosted copy missing? Re-run npm run postinstall)"},"boardengine.libMissing":{zh:"画板引擎已加载但没挂上 ExcalidrawLib",en:"Whiteboard engine loaded but did not expose ExcalidrawLib"}});const Fe={getPreferredUIMode:ce,settings:{get desktopUIMode(){return ce()},tabletUIMode:"compact",phoneUIMode:"mobile",disableContextMenu:!1,disableDoubleClickTextEditing:!1,penModeCrosshairVisible:!0,penModeDoubleTapEraser:!0,penModeSingleFingerPanning:!0,syncElementLinkWithText:!1,zoomMax:30,zoomMin:.1,zoomStep:.05,zoomToFitMaxLevel:2},excalidrawConfig:{areaLimit:16777216,widthHeightLimit:32767},getObsidianDevice:()=>{const e=navigator.userAgent,t=/Android/i.test(e),r=/iPad|iPhone|iPod/.test(e)||/Mac/.test(e)&&"ontouchend"in document,a=t||r,s=a&&Math.min(screen.width,screen.height)<600;return{isDesktop:!a,isPhone:s,isTablet:a&&!s,isMobile:a,isMacOS:/Mac/.test(e)&&!r,isWindows:/Win/.test(e),isLinux:/Linux/.test(e)&&!t,isIOS:r,isAndroid:t}},getHighlightColor:()=>{},getMermaid:async()=>null,loadFontFromFile:async()=>null,activeExcalidrawView:null,attachInlineLinkSuggester:()=>({destroy:()=>{}}),runAction:()=>{},getLabel:e=>e},X=globalThis;X.React=ft;X.ReactDOM=Object.assign({},yt,It);X.ReactJSXRuntime=gt;const De=X.app;De?.plugins?.plugins?De.plugins.plugins["obsidian-excalidraw-plugin"]=Fe:X.app={plugins:{plugins:{"obsidian-excalidraw-plugin":Fe}}};const tt=new URL("excalidraw/",document.baseURI).href,Be=(e,t)=>new Promise((r,a)=>{e.onload=()=>r(),e.onerror=()=>a(new Error(E("boardengine.assetLoadFailed",{url:t}))),document.head.appendChild(e)}),ue=document.createElement("link");ue.rel="stylesheet";ue.href=`${tt}excalidraw.css`;const we=document.createElement("script");we.src=`${tt}excalidraw.js`;await Promise.all([Be(ue,ue.href),Be(we,we.src)]);const nt=X.ExcalidrawLib;if(!nt)throw new Error(E("boardengine.libMissing"));const{Excalidraw:Kt,MainMenu:j,serializeAsJSON:Yt,restoreElements:Xt,newElementWith:qt,CaptureUpdateAction:V}=nt,Zt=["default","finetip","fountain","marker","highlighter","thick-thin","thin-thick-thin"];J({"excalipen.default":{zh:"默认",en:"Default"},"excalipen.finetip":{zh:"细尖笔",en:"Fine tip"},"excalipen.fountain":{zh:"钢笔",en:"Fountain pen"},"excalipen.marker":{zh:"马克笔",en:"Marker"},"excalipen.highlighter":{zh:"荧光笔",en:"Highlighter"},"excalipen.thickThin":{zh:"粗到细",en:"Thick to thin"},"excalipen.thinThickThin":{zh:"两头细",en:"Tapered ends"}});const We={get default(){return E("excalipen.default")},get finetip(){return E("excalipen.finetip")},get fountain(){return E("excalipen.fountain")},get marker(){return E("excalipen.marker")},get highlighter(){return E("excalipen.highlighter")},get"thick-thin"(){return E("excalipen.thickThin")},get"thin-thick-thin"(){return E("excalipen.thinThickThin")}},at={default:{type:"default",freedrawOnly:!1,strokeColor:"#000000",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:0,roughness:0,penOptions:{highlighter:!1,constantPressure:!1,hasOutline:!1,outlineWidth:1,options:{thinning:.6,smoothing:.5,streamline:.5,easing:"easeOutSine",start:{cap:!0,taper:0,easing:"linear"},end:{cap:!0,taper:0,easing:"linear"}}}},highlighter:{type:"highlighter",freedrawOnly:!0,strokeColor:"#FFC47C",backgroundColor:"#FFC47C",fillStyle:"solid",strokeWidth:4,roughness:null,penOptions:{highlighter:!0,constantPressure:!0,hasOutline:!1,outlineWidth:1,options:{thinning:0,smoothing:.5,streamline:.5,easing:"linear",start:{taper:0,cap:!1,easing:"linear"},end:{taper:0,cap:!1,easing:"linear"}}}},finetip:{type:"finetip",freedrawOnly:!1,strokeColor:"#3E6F8D",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:.5,roughness:0,penOptions:{highlighter:!1,hasOutline:!1,outlineWidth:1,constantPressure:!0,options:{smoothing:.4,thinning:-.5,streamline:.4,easing:"linear",start:{taper:5,cap:!1,easing:"linear"},end:{taper:5,cap:!1,easing:"linear"}}}},fountain:{type:"fountain",freedrawOnly:!1,strokeColor:"#000000",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:2,roughness:0,penOptions:{highlighter:!1,constantPressure:!1,hasOutline:!1,outlineWidth:1,options:{smoothing:.2,thinning:.6,streamline:.2,easing:"easeInOutSine",start:{taper:150,cap:!0,easing:"linear"},end:{taper:1,cap:!0,easing:"linear"}}}},marker:{type:"marker",freedrawOnly:!0,strokeColor:"#B83E3E",backgroundColor:"#FF7C7C",fillStyle:"dashed",strokeWidth:2,roughness:3,penOptions:{highlighter:!1,constantPressure:!0,hasOutline:!0,outlineWidth:4,options:{thinning:1,smoothing:.5,streamline:.5,easing:"linear",start:{taper:0,cap:!0,easing:"linear"},end:{taper:0,cap:!0,easing:"linear"}}}},"thick-thin":{type:"thick-thin",freedrawOnly:!0,strokeColor:"#CECDCC",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:0,roughness:null,penOptions:{highlighter:!0,constantPressure:!0,hasOutline:!1,outlineWidth:1,options:{thinning:1,smoothing:.5,streamline:.5,easing:"linear",start:{taper:0,cap:!0,easing:"linear"},end:{cap:!0,taper:!0,easing:"linear"}}}},"thin-thick-thin":{type:"thin-thick-thin",freedrawOnly:!0,strokeColor:"#CECDCC",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:0,roughness:null,penOptions:{highlighter:!0,constantPressure:!0,hasOutline:!1,outlineWidth:1,options:{thinning:1,smoothing:.5,streamline:.5,easing:"linear",start:{cap:!0,taper:!0,easing:"linear"},end:{cap:!0,taper:!0,easing:"linear"}}}}},Gt={default:Ge,finetip:Wt,fountain:Ft,marker:Ot,highlighter:et,"thick-thin":Nt,"thin-thick-thin":_t},Jt={.25:"extraThin",.5:"thin",1:"medium",2:"bold",4:"extraBold"},Qt=e=>{const t=Jt[e];return t?{currentItemStrokeWidthKey:t,currentItemStrokeWidth:null}:{currentItemStrokeWidthKey:null,currentItemStrokeWidth:e}},en={topPicks:{elementStroke:["#1e1e1e","#e03131","#2f9e44","#1971c2","#ffd43b"]}};function rt(e,t){const r=t.getAppState();t.updateScene({appState:{currentStrokeOptions:{...e.penOptions,options:{...e.penOptions.options}},colorPalette:e.type==="highlighter"?en:void 0,...e.strokeWidth?Qt(e.strokeWidth):null,currentItemStrokeVariability:e.penOptions?.constantPressure?"constant":"variable",...e.backgroundColor?{currentItemBackgroundColor:e.backgroundColor}:null,...e.strokeColor?{currentItemStrokeColor:e.strokeColor}:null,...e.fillStyle?{currentItemFillStyle:e.fillStyle}:null,...e.roughness!==null?{currentItemRoughness:e.roughness}:null,...r.resetCustomPen?null:{resetCustomPen:{currentItemStrokeWidthKey:r.currentItemStrokeWidthKey??null,currentItemStrokeWidth:r.currentItemStrokeWidth??null,currentItemStrokeVariability:r.currentItemStrokeVariability??null,currentItemBackgroundColor:r.currentItemBackgroundColor??null,currentItemStrokeColor:r.currentItemStrokeColor??null,currentItemFillStyle:r.currentItemFillStyle??null,currentItemRoughness:r.currentItemRoughness??null}}},captureUpdate:V.NEVER})}function Ce(e,t,r){t.updateScene({appState:{...e?{currentItemStrokeWidthKey:e.currentItemStrokeWidthKey??null,currentItemStrokeWidth:e.currentItemStrokeWidth??null,currentItemStrokeVariability:e.currentItemStrokeVariability??null,currentItemBackgroundColor:e.currentItemBackgroundColor??null,currentItemStrokeColor:e.currentItemStrokeColor??null,currentItemFillStyle:e.currentItemFillStyle??null,currentItemRoughness:e.currentItemRoughness??null}:null,resetCustomPen:null,...r?{currentStrokeOptions:null,colorPalette:void 0}:null},captureUpdate:V.NEVER})}const tn=()=>({active:null,pending:!1});function ot(e,t,r){const a=t.current,s=e.getAppState();if(a.active===r&&s.activeTool.type==="freedraw"){a.active=null,a.pending=!1,Ce(s.resetCustomPen,e,!0);return}a.active=r,a.pending=!0,rt(at[r],e),e.setActiveTool({type:"freedraw"})}function nn(e,t){const r=e.getAppState().currentStrokeOptions;r?.options&&e.updateScene({appState:{currentStrokeOptions:{...r,options:{...r.options,thinning:0,start:{...r.options.start,cap:t,taper:0},end:{...r.options.end,cap:t,taper:0}}}},captureUpdate:V.NEVER})}function an(e,t){const r=t.current;r.active&&(r.active=null,r.pending=!1,Ce(e.getAppState().resetCustomPen,e,!0))}function rn(e,t,r,a){const s=a.current;s.pending&&t==="freedraw"&&(s.pending=!1),u.useEffect(()=>{const o=s.active;if(!e||!o||s.pending)return;const l=at[o];l.freedrawOnly&&(t!=="freedraw"&&r?Ce(r,e,!1):t==="freedraw"&&!r&&rt(l,e))},[e,s,t,r])}function on({api:e,ui:t,state:r}){const a=r.current,s=t.tool;return e?n.jsx("div",{className:"amx-penrow buttonList",children:Zt.map(o=>{const l=Gt[o],p=a.active===o&&s==="freedraw";return n.jsx("label",{className:p?"active":"",title:We[o],"data-on":p||void 0,onClick:()=>ot(e,r,o),children:n.jsx(l,{size:16,"aria-label":We[o]})},o)})}):null}const de=["left","mid","right"],R={left:["lock","hand"],mid:["selection","shape","line","freedraw","highlighter","text","eraser"],right:["frame","laser"]},sn=[...R.left,...R.mid,...R.right],me="amx.boardToolbar",Z=new Set;let M=null;const ln=e=>e<9?String(e+1):e===9?"0":null;function st(e){const t=new Set,r={left:[],mid:[],right:[]},a=e??{};for(const s of de)for(const o of Array.isArray(a[s])?a[s]:[])typeof o!="string"||!sn.includes(o)||t.has(o)||(t.add(o),r[s].push(o));for(const s of de)for(const o of R[s])t.has(o)||r[s].push(o);return r}const G=()=>{if(M)return M;try{const e=localStorage.getItem(me);if(e)return M=st(JSON.parse(e))}catch{}return M=R},cn=e=>{M=st(e);try{localStorage.setItem(me,JSON.stringify(M))}catch{}for(const t of Z)t()},un=()=>{M=R;try{localStorage.removeItem(me)}catch{}for(const e of Z)e()},dn=e=>de.every(t=>e[t].length===R[t].length&&e[t].every((r,a)=>r===R[t][a])),lt=e=>(Z.add(e),()=>Z.delete(e));function hn(e,t,r,a){const s={left:[...e.left],mid:[...e.mid],right:[...e.right]};for(const o of de){const l=s[o].indexOf(t);l>=0&&s[o].splice(l,1)}return s[r].splice(Math.max(0,Math.min(a,s[r].length)),0,t),s}typeof window<"u"&&window.addEventListener("storage",e=>{if(e.key===me){M=null;for(const t of Z)t()}});J({"boardtoolbar.shapeRectangle":{zh:"矩形",en:"Rectangle"},"boardtoolbar.shapeDiamond":{zh:"菱形",en:"Diamond"},"boardtoolbar.shapeEllipse":{zh:"椭圆",en:"Ellipse"},"boardtoolbar.lineArrow":{zh:"箭头",en:"Arrow"},"boardtoolbar.lineSegment":{zh:"线段",en:"Line"},"boardtoolbar.toolLock":{zh:"保持工具选中",en:"Keep tool selected"},"boardtoolbar.toolHand":{zh:"抓手",en:"Hand"},"boardtoolbar.toolSelection":{zh:"选择",en:"Selection"},"boardtoolbar.toolShape":{zh:"形状",en:"Shape"},"boardtoolbar.toolLine":{zh:"线",en:"Line"},"boardtoolbar.toolFreedraw":{zh:"画笔",en:"Draw"},"boardtoolbar.toolHighlighter":{zh:"荧光笔",en:"Highlighter"},"boardtoolbar.toolText":{zh:"文字",en:"Text"},"boardtoolbar.toolEraser":{zh:"橡皮",en:"Eraser"},"boardtoolbar.toolFrame":{zh:"画框",en:"Frame"},"boardtoolbar.toolLaser":{zh:"激光笔",en:"Laser pointer"}});const he=["rectangle","diamond","ellipse"],pe=["arrow","line"],pn=()=>({shape:"rectangle",line:"arrow"}),mn={rectangle:Ze,diamond:Qe,ellipse:qe},fn={arrow:Xe,line:Je},He={get rectangle(){return E("boardtoolbar.shapeRectangle")},get diamond(){return E("boardtoolbar.shapeDiamond")},get ellipse(){return E("boardtoolbar.shapeEllipse")}},_e={get arrow(){return E("boardtoolbar.lineArrow")},get line(){return E("boardtoolbar.lineSegment")}},gn={lock:"boardtoolbar.toolLock",hand:"boardtoolbar.toolHand",selection:"boardtoolbar.toolSelection",shape:"boardtoolbar.toolShape",line:"boardtoolbar.toolLine",freedraw:"boardtoolbar.toolFreedraw",highlighter:"boardtoolbar.toolHighlighter",text:"boardtoolbar.toolText",eraser:"boardtoolbar.toolEraser",frame:"boardtoolbar.toolFrame",laser:"boardtoolbar.toolLaser"};function it(e,t,r){const a=t.getAppState();switch(e){case"lock":t.setActiveTool({...a.activeTool,locked:!a.activeTool.locked});return;case"shape":t.setActiveTool({type:r.group.current.shape});return;case"line":t.setActiveTool({type:r.group.current.line});return;case"freedraw":an(t,r.pen),t.setActiveTool({type:"freedraw"});return;case"highlighter":ot(t,r.pen,"highlighter");return;default:t.setActiveTool({type:e})}}function xn(e,t){switch(e){case"lock":return Rt;case"hand":return Mt;case"selection":return St;case"shape":return mn[t.shape];case"line":return fn[t.line];case"freedraw":return Ge;case"highlighter":return et;case"text":return Pt;case"eraser":return vt;case"frame":return Lt;case"laser":return kt}}function bn(e,t,r){const a=t.tool;switch(e){case"lock":return t.locked;case"shape":return he.includes(a);case"line":return pe.includes(a);case"freedraw":return a==="freedraw"&&r.active!=="highlighter";case"highlighter":return a==="freedraw"&&r.active==="highlighter";default:return a===e}}const $e=["left","mid","right"];function yn({api:e,ui:t,refs:r}){const{t:a}=K(),s=u.useSyncExternalStore(lt,G,G),[o,l]=u.useState(null),p=u.useRef(null),x=u.useRef(null),d=o?.layout??s;if(!e)return null;const fe=r.group.current,z=r.pen.current,Q=(f,g)=>{const b=x.current;if(!b)return null;let k=null,W=1/0;for(const y of $e){const P=b.querySelector(`[data-seg="${y}"]`);if(!P)continue;const S=P.getBoundingClientRect();if(f>=S.left&&f<=S.right){k=y;break}const ne=f<S.left?S.left-f:f-S.right;ne<W&&(W=ne,k=y)}if(!k)return null;const N=[...b.querySelectorAll(`[data-seg="${k}"] [data-tool]`)];let C=N.length;for(let y=0;y<N.length;y++){const P=N[y].getBoundingClientRect();if(f<P.left+P.width/2){C=y;break}}const L=N.findIndex(y=>y.dataset.tool===g);return L>=0&&L<C&&C--,{seg:k,index:C}},ee=(f,g)=>{f.button===0&&(p.current={x:f.clientX,y:f.clientY,id:g,moved:!1},f.currentTarget.setPointerCapture(f.pointerId))},te=f=>{const g=p.current;if(!g||!g.moved&&Math.hypot(f.clientX-g.x,f.clientY-g.y)<5)return;g.moved=!0;const b=Q(f.clientX,g.id);b&&l({id:g.id,layout:hn(s,g.id,b.seg,b.index)})},O=u.useRef(0),q=f=>{const g=p.current;p.current=null,f.currentTarget.releasePointerCapture?.(f.pointerId),O.current=g?.moved?Date.now():0,g?.moved&&o&&cn(o.layout),l(null)},B=f=>{if(Date.now()-O.current<400){O.current=0;return}it(f,e,r)};return n.jsx("div",{className:"amx-toolbar",ref:x,"data-dragging":o?"":void 0,children:$e.map((f,g)=>n.jsxs("div",{className:"amx-toolbar-seg","data-seg":f,children:[g>0&&n.jsx("span",{className:"amx-toolbar-sep","aria-hidden":!0}),d[f].map((b,k)=>{const W=xn(b,fe),N=bn(b,t,z),C=f==="mid"?ln(k):null,L=a(gn[b]);return n.jsxs("button",{type:"button","data-tool":b,"data-on":N||void 0,"data-drag":o?.id===b||void 0,className:"amx-tool",title:C?`${L} — ${C}`:L,"aria-label":L,"aria-pressed":N,onPointerDown:y=>ee(y,b),onPointerMove:te,onPointerUp:q,onClick:()=>B(b),onPointerCancel:()=>{p.current=null,O.current=0,l(null)},children:[n.jsx(W,{size:17}),C&&n.jsx("span",{className:"amx-tool-key",children:C})]},b)})]},f))})}J({"panelextras.secPen":{zh:"笔",en:"Pen"},"panelextras.secStroke":{zh:"笔触",en:"Stroke"},"panelextras.capRound":{zh:"圆头",en:"Round cap"},"panelextras.capButt":{zh:"方头",en:"Flat cap"},"panelextras.secShape":{zh:"形状",en:"Shape"},"panelextras.secLine":{zh:"线",en:"Line"}});const kn={rectangle:Ze,diamond:Qe,ellipse:qe},vn={arrow:Xe,line:Je};function oe({title:e,children:t}){return n.jsxs("fieldset",{className:"amx-panelsec",children:[n.jsx("legend",{children:e}),t]})}function Sn({api:e,ui:t,pen:r,group:a}){const{t:s}=K();if(!e)return null;const o=t.tool;if(o==="freedraw"){const l=r.current.active==="highlighter";return n.jsxs(n.Fragment,{children:[n.jsx(oe,{title:s("panelextras.secPen"),children:n.jsx(on,{api:e,ui:t,state:r})}),l&&n.jsx(oe,{title:s("panelextras.secStroke"),children:n.jsx("div",{className:"amx-panelrow buttonList",children:[!1,!0].map(p=>{const x=t.capRound===p,d=s(p?"panelextras.capRound":"panelextras.capButt");return n.jsx("label",{className:x?"active":"",title:d,"data-on":x||void 0,onClick:()=>nn(e,p),children:n.jsx("svg",{width:"18",height:"18",viewBox:"0 0 18 18","aria-label":d,children:n.jsx("line",{x1:"4",y1:"9",x2:"14",y2:"9",stroke:"currentColor",strokeWidth:"7",strokeLinecap:p?"round":"butt"})})},String(p))})})})]})}return he.includes(o)?n.jsx(oe,{title:s("panelextras.secShape"),children:n.jsx("div",{className:"amx-panelrow buttonList",children:he.map(l=>{const p=kn[l],x=o===l;return n.jsx("label",{className:x?"active":"",title:He[l],"data-on":x||void 0,onClick:()=>{a.current.shape=l,e.setActiveTool({type:l})},children:n.jsx(p,{size:16,"aria-label":He[l]})},l)})})}):pe.includes(o)?n.jsx(oe,{title:s("panelextras.secLine"),children:n.jsx("div",{className:"amx-panelrow buttonList",children:pe.map(l=>{const p=vn[l],x=o===l;return n.jsx("label",{className:x?"active":"",title:_e[l],"data-on":x||void 0,onClick:()=>{a.current.line=l,e.setActiveTool({type:l})},children:n.jsx(p,{size:16,"aria-label":_e[l]})},l)})})}):null}const wn=()=>({tool:"selection",locked:!1,snapshot:null,capRound:null}),En=(e,t)=>e.tool===t.tool&&e.locked===t.locked&&e.snapshot===t.snapshot&&e.capRound===t.capRound;J({"excalicanvas.addPage":{zh:"+ 新建页面",en:"+ New page"},"excalicanvas.delBlankPage":{zh:"删掉这张空白页",en:"Delete this blank page"},"excalicanvas.modeFull":{zh:"常规",en:"Standard"},"excalicanvas.modeCompact":{zh:"紧凑",en:"Compact"},"excalicanvas.paper":{zh:"纸张",en:"Paper"},"excalicanvas.paperNone":{zh:"无限",en:"Infinite"},"excalicanvas.portrait":{zh:"纵向",en:"Portrait"},"excalicanvas.landscape":{zh:"横向",en:"Landscape"},"excalicanvas.flow":{zh:"页面排布",en:"Page layout"},"excalicanvas.flowV":{zh:"上下",en:"Top to bottom"},"excalicanvas.flowH":{zh:"左右",en:"Left to right"},"excalicanvas.grid":{zh:"网格",en:"Grid"},"excalicanvas.gridH":{zh:"横线",en:"Horizontal"},"excalicanvas.gridV":{zh:"竖线",en:"Vertical"},"excalicanvas.opacity":{zh:"淡浓",en:"Opacity"},"excalicanvas.uiMode":{zh:"属性面板",en:"Properties panel"},"excalicanvas.allBoards":{zh:"所有白板",en:"All boards"},"excalicanvas.toolbar":{zh:"工具栏",en:"Toolbar"},"excalicanvas.resetOrder":{zh:"恢复默认顺序",en:"Reset to default order"}});const se=4,Cn="linear-gradient(90deg, var(--amx-grid-line) 0 1px, transparent 1px)",jn="linear-gradient(180deg, var(--amx-grid-line) 0 1px, transparent 1px)",Ue=(e,t,r)=>Math.min(Math.max(e,t),r),Ve=(e,t)=>(e%t+t)%t;function Ke(e,t,r){const[a,s]=u.useState(null);return u.useEffect(()=>{if(!e)return;let o=null;const l=()=>{const x=e.querySelector(t);if(!x){o&&(o.remove(),o=null,s(null));return}if(o&&o.parentElement===x)return;o?.remove();const d=document.createElement("div");d.className=r,x.insertBefore(d,x.firstChild),o=d,s(d)};l();const p=new MutationObserver(l);return p.observe(e,{childList:!0,subtree:!0}),()=>{p.disconnect(),o?.remove(),s(null)}},[e,t,r]),a}function In(e){u.useEffect(()=>{const t=new Map,r=o=>{o.classList.contains("amx-board-portal")||o.classList.add("amx-board-portal"),o.style.zoom!==e&&(o.style.zoom=e)},a=o=>{if(!(o instanceof HTMLElement)||!o.classList.contains("excalidraw")||o.closest(".amx-boardhost")||(r(o),t.has(o)))return;const l=new MutationObserver(()=>r(o));l.observe(o,{attributes:!0,attributeFilter:["class","style"]}),t.set(o,l)};for(const o of[...document.body.children])a(o);const s=new MutationObserver(o=>{for(const l of o){for(const p of l.addedNodes)a(p);for(const p of l.removedNodes)p instanceof HTMLElement&&t.has(p)&&(t.get(p)?.disconnect(),t.delete(p))}});return s.observe(document.body,{childList:!0}),()=>{s.disconnect();for(const o of t.values())o.disconnect()}},[e])}function Un({initialData:e,theme:t,langCode:r,settings:a,onSettings:s,onSceneChange:o,registerApplier:l,viewMode:p=!1}){const{t:x}=K(),[d,fe]=u.useState(null),z=u.useRef(null),Q=u.useRef([]),ee=u.useRef(null),te=u.useRef(null),O=u.useRef(null),q=u.useRef(!1),[B,f]=u.useState(null),[g,b]=u.useState(null),k=u.useMemo(()=>ye(a)?Te(a,g):{min:0,max:0},[a,g]),W=u.useMemo(()=>Array.from({length:k.max-k.min+1},(c,i)=>k.min+i),[k]),N=u.useMemo(()=>Te({...a,pageFirst:0,pageLast:0},g),[a,g]),C=u.useSyncExternalStore(Vt,ce,ce),L=u.useRef(tn()),y=u.useRef(pn()),P=u.useMemo(()=>({pen:L,group:y}),[]),[S,ne]=u.useState(wn),[ct,ut]=u.useState(""),[je,Ie]=u.useState(null),Ne=Ke(je,".App-toolbar","amx-toolbar-slot"),Le=Ke(je,".Island > .selected-shape-actions, .Island > .compact-shape-actions, .Island.compact-shape-actions","amx-panel-slot");In(ct),rn(d,S.tool,S.snapshot,L),u.useEffect(()=>{he.includes(S.tool)&&(y.current.shape=S.tool),pe.includes(S.tool)&&(y.current.line=S.tool)},[S.tool]),u.useEffect(()=>{if(!d)return;const c=i=>{if(i.metaKey||i.ctrlKey||i.altKey||!/^[0-9]$/.test(i.key))return;const h=z.current?.querySelector(".excalidraw"),m=i.target;if(!h||!m||!h.contains(m)||m.isContentEditable||m.tagName==="INPUT"||m.tagName==="TEXTAREA")return;const w=G().mid[i.key==="0"?9:Number(i.key)-1];w&&(i.preventDefault(),i.stopImmediatePropagation(),it(w,d,P))};return window.addEventListener("keydown",c,!0),()=>window.removeEventListener("keydown",c,!0)},[d,P]),u.useEffect(()=>{d?.setDesktopUIMode(C)},[d,C]),u.useEffect(()=>{if(!(!d||!l))return l(c=>{const i=d.getSceneElementsIncludingDeleted(),h=xt(i,c.elements??[]);if(bt(h,i))return;d.updateScene({elements:Xt(h,null),captureUpdate:V.NEVER});const m=Object.values(c.files??{});m.length&&d.addFiles(m)})},[d,l]),u.useEffect(()=>{const c=d&&z.current?.querySelector(".excalidraw");if(!c)return;const i=document.createElement("div");return i.style.display="contents",c.insertBefore(i,c.firstChild),f(i),Ie(c),()=>{i.remove(),f(null),Ie(null)}},[d]);const H=u.useCallback(c=>{const i=ee.current,h=Q.current.filter(v=>!!v);if(!i||!h.length)return;const m=c.zoom.value,w=ye(a),T=a.gridV*m,ae=a.gridH*m,re=[],xe=[],be=[],dt=w||T<se?0:Ve(c.scrollX*m,T),ht=w||ae<se?0:Ve(c.scrollY*m,ae);T>=se&&(re.push(Cn),xe.push(`${T}px 100%`),be.push(`${dt}px 0px`)),ae>=se&&(re.push(jn),xe.push(`100% ${ae}px`),be.push(`0px ${ht}px`));for(const v of h)v.style.backgroundImage=re.join(", "),v.style.backgroundSize=xe.join(", "),v.style.backgroundPosition=be.join(", "),v.style.opacity=a.gridOpacity>=100?"":String(a.gridOpacity/100),v.style.display=re.length||w?"":"none";if(!w){Object.assign(h[0].style,{left:"0px",top:"0px",width:"100%",height:"100%"}),i.style.display="none";return}const Me=(v,I,A)=>{if(!v)return;const F=(I.x+c.scrollX)*m,U=(I.y+c.scrollY)*m,D=22,pt=a.flow==="h"?A?F+I.w*m+D:F-D:F+I.w*m/2,mt=a.flow==="h"?U+I.h*m/2:A?U+I.h*m+D:U-D;v.style.left=`${pt}px`,v.style.top=`${mt}px`},Re=[];for(let v=0;v<h.length;v++){const I=ke(a,k.min+v);if(!I)continue;const A=(I.x+c.scrollX)*m,F=(I.y+c.scrollY)*m,U=I.w*m,D=I.h*m;Object.assign(h[v].style,{left:`${A}px`,top:`${F}px`,width:`${U}px`,height:`${D}px`}),Re.push(`M${A.toFixed(1)} ${F.toFixed(1)}H${(A+U).toFixed(1)}V${(F+D).toFixed(1)}H${A.toFixed(1)}Z`)}const ze=ke(a,k.min),Oe=ke(a,k.max);ze&&Me(te.current,ze,!1),Oe&&Me(O.current,Oe,!0),i.style.display="",i.style.clipPath=`path(evenodd,"M0 0H${i.offsetWidth}V${i.offsetHeight}H0Z ${Re.join(" ")}")`},[a,k]),_=u.useCallback(c=>{if(!d||q.current)return c;const i=d.getAppState();if(i.cursorButton==="down")return c;const h=wt(a,{scrollX:c.scrollX,scrollY:c.scrollY,zoom:c.zoom.value,width:i.width,height:i.height},g);if(!h)return c;q.current=!0;try{d.updateScene({appState:{scrollX:h.scrollX,scrollY:h.scrollY,zoom:{value:h.zoom}},captureUpdate:V.NEVER})}finally{q.current=!1}return{scrollX:h.scrollX,scrollY:h.scrollY,zoom:{value:h.zoom}}},[d,a,g]),ge=u.useCallback(c=>{const i=Et(c);b(h=>h&&i&&h.minX===i.minX&&h.minY===i.minY&&h.maxX===i.maxX&&h.maxY===i.maxY?h:i)},[]),Pe=u.useRef(a.flow);u.useEffect(()=>{const c=Pe.current,i=a.flow;if(Pe.current=i,c===i||!d||!a.paper)return;const h=d.getSceneElements();h.length&&d.updateScene({elements:h.map(m=>{const w=Ct(a,c,i,m.x,m.y);return w.x===m.x&&w.y===m.y?m:qt(m,{x:w.x,y:w.y})}),captureUpdate:V.IMMEDIATELY})},[d,a]),u.useEffect(()=>{!d||!B||(ge(d.getSceneElements()),H(_(d.getAppState())))},[d,B,H,_,ge]);const $=u.useCallback(()=>{const c=z.current;if(!c)return;const i=c.parentElement?.currentCSSZoom??1,h=Math.abs(i-1)>1e-6?String(1/i):"";c.style.zoom!==h&&(c.style.zoom=h),ut(m=>m===h?m:h)},[]);return u.useEffect(()=>($(),window.addEventListener(Ae,$),()=>window.removeEventListener(Ae,$)),[$]),u.useEffect(()=>{const c=z.current;if(!c||!d||typeof ResizeObserver>"u")return;const i=new ResizeObserver(()=>{$(),H(_(d.getAppState()))});return i.observe(c),()=>i.disconnect()},[d,H,_,$]),n.jsxs("div",{className:"amx-boardhost",ref:z,children:[n.jsx(Kt,{onExcalidrawAPI:fe,initialData:e,theme:t,langCode:r,viewModeEnabled:p,onScrollChange:(c,i,h)=>H(_({scrollX:c,scrollY:i,zoom:h})),onChange:(c,i,h)=>{ge(c),H(_(i));const m=i.currentStrokeOptions,w={tool:i.activeTool.type,locked:!!i.activeTool.locked,snapshot:i.resetCustomPen??null,capRound:m?!!m.options?.start?.cap:null};ne(T=>En(T,w)?T:w),o(Yt(c,i,h,"local"))},children:n.jsxs(j,{children:[n.jsx(j.DefaultItems.LoadScene,{}),n.jsx(j.DefaultItems.SaveToActiveFile,{}),n.jsx(j.DefaultItems.Export,{}),n.jsx(j.DefaultItems.SaveAsImage,{}),n.jsx(j.DefaultItems.SearchMenu,{}),n.jsx(j.DefaultItems.Help,{}),n.jsx(j.DefaultItems.ClearCanvas,{}),n.jsx(j.Separator,{}),n.jsx(j.DefaultItems.ToggleTheme,{allowSystemTheme:!1}),n.jsx(j.DefaultItems.ChangeCanvasBackground,{}),n.jsx(j.Separator,{}),n.jsx(j.ItemCustom,{children:n.jsx(Pn,{settings:a,onSettings:s,uiMode:C,onUiMode:Ut})})]})}),Ne&&ve.createPortal(n.jsx(yn,{api:d,ui:S,refs:P}),Ne),Le&&ve.createPortal(n.jsx(Sn,{api:d,ui:S,pen:L,group:y}),Le),B&&ve.createPortal(n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"amx-matte",ref:ee,onWheel:Nn}),W.map((c,i)=>n.jsx("div",{className:"amx-grid","data-page":c,ref:h=>{Q.current[i]=h}},c)),!!ye(a)&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"amx-pageadd","data-end":"before","data-flow":a.flow,ref:te,children:[n.jsx("button",{onClick:()=>s({pageFirst:a.pageFirst-1}),children:x("excalicanvas.addPage")}),a.pageFirst<N.min&&n.jsx("button",{className:"amx-pageadd-del",title:x("excalicanvas.delBlankPage"),onClick:()=>s({pageFirst:a.pageFirst+1}),children:"−"})]}),n.jsxs("div",{className:"amx-pageadd","data-end":"after","data-flow":a.flow,ref:O,children:[n.jsx("button",{onClick:()=>s({pageLast:a.pageLast+1}),children:x("excalicanvas.addPage")}),a.pageLast>N.max&&n.jsx("button",{className:"amx-pageadd-del",title:x("excalicanvas.delBlankPage"),onClick:()=>s({pageLast:a.pageLast-1}),children:"−"})]})]})]}),B)]})}function Nn(e){const t=e.currentTarget.closest(".excalidraw")?.querySelector("canvas.excalidraw__canvas.interactive");t&&(e.preventDefault(),t.dispatchEvent(new WheelEvent("wheel",{deltaX:e.deltaX,deltaY:e.deltaY,deltaMode:e.deltaMode,clientX:e.clientX,clientY:e.clientY,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,bubbles:!0,cancelable:!0})))}const Ln=[{id:"full",labelKey:"excalicanvas.modeFull"},{id:"compact",labelKey:"excalicanvas.modeCompact"}];function Pn({settings:e,onSettings:t,uiMode:r,onUiMode:a}){const{t:s}=K(),o=t;return n.jsxs("div",{className:"amx-bs",children:[n.jsx("div",{className:"amx-bs-h",children:s("excalicanvas.paper")}),n.jsxs("div",{className:"amx-bs-row",children:[n.jsx("button",{className:"amx-bs-chip","data-on":!e.paper||void 0,onClick:()=>o({paper:null}),children:s("excalicanvas.paperNone")}),jt.map(l=>n.jsx("button",{className:"amx-bs-chip","data-on":e.paper===l||void 0,onClick:()=>o({paper:l}),children:l},l))]}),e.paper&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"amx-bs-row",children:[n.jsx("button",{className:"amx-bs-chip","data-on":!e.landscape||void 0,onClick:()=>o({landscape:!1}),children:s("excalicanvas.portrait")}),n.jsx("button",{className:"amx-bs-chip","data-on":e.landscape||void 0,onClick:()=>o({landscape:!0}),children:s("excalicanvas.landscape")})]}),n.jsx("div",{className:"amx-bs-h",children:s("excalicanvas.flow")}),n.jsxs("div",{className:"amx-bs-row",children:[n.jsx("button",{className:"amx-bs-chip","data-on":e.flow==="v"||void 0,onClick:()=>o({flow:"v"}),children:s("excalicanvas.flowV")}),n.jsx("button",{className:"amx-bs-chip","data-on":e.flow==="h"||void 0,onClick:()=>o({flow:"h"}),children:s("excalicanvas.flowH")})]})]}),n.jsx("div",{className:"amx-bs-h",children:s("excalicanvas.grid")}),n.jsx(Ye,{label:s("excalicanvas.gridH"),value:e.gridH,onChange:l=>o({gridH:l})}),n.jsx(Ye,{label:s("excalicanvas.gridV"),value:e.gridV,onChange:l=>o({gridV:l})}),n.jsx(Rn,{value:e.gridOpacity,disabled:e.gridH<=0&&e.gridV<=0,onCommit:l=>o({gridOpacity:l})}),n.jsxs("div",{className:"amx-bs-h",children:[s("excalicanvas.uiMode")," ",n.jsx("span",{className:"amx-bs-note",children:s("excalicanvas.allBoards")})]}),n.jsx("div",{className:"amx-bs-row",children:Ln.map(l=>n.jsx("button",{className:"amx-bs-chip","data-on":r===l.id||void 0,onClick:()=>a(l.id),children:s(l.labelKey)},l.id))}),n.jsx(Mn,{})]})}function Mn(){const{t:e}=K(),t=u.useSyncExternalStore(lt,G,G);return dn(t)?null:n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"amx-bs-h",children:[e("excalicanvas.toolbar")," ",n.jsx("span",{className:"amx-bs-note",children:e("excalicanvas.allBoards")})]}),n.jsx("div",{className:"amx-bs-row",children:n.jsx("button",{className:"amx-bs-chip",onClick:()=>un(),children:e("excalicanvas.resetOrder")})})]})}function Rn({value:e,disabled:t,onCommit:r}){const{t:a}=K(),[s,o]=u.useState(e);return u.useEffect(()=>o(e),[e]),n.jsxs("label",{className:"amx-bs-check",children:[n.jsx("span",{className:"amx-bs-lbl",children:a("excalicanvas.opacity")}),n.jsx("input",{className:"amx-bs-range",type:"range",min:10,max:100,step:5,disabled:t,value:s,onChange:l=>{const p=Number(l.target.value);o(p);for(const x of l.currentTarget.closest(".excalidraw")?.querySelectorAll(".amx-grid")??[])x.style.opacity=p>=100?"":String(p/100)},onPointerUp:()=>r(s),onKeyUp:()=>r(s)}),n.jsxs("span",{className:"amx-bs-note",children:[s,"%"]})]})}function Ye({label:e,value:t,onChange:r}){const[a,s]=u.useState(String(t||Se));u.useEffect(()=>{t>0&&s(String(t))},[t]);const o=()=>{const l=Math.round(Number(a)),p=Number.isFinite(l)&&l>0?Ue(l,4,400):Se;s(String(p)),t>0&&p!==t&&r(p)};return n.jsxs("label",{className:"amx-bs-check",children:[n.jsx("input",{type:"checkbox",checked:t>0,onChange:l=>r(l.target.checked?Ue(Math.round(Number(a))||Se,4,400):0)}),n.jsx("span",{className:"amx-bs-lbl",children:e}),n.jsx("input",{className:"amx-bs-num",type:"number",min:4,max:400,disabled:t<=0,value:a,onChange:l=>s(l.target.value),onBlur:o,onKeyDown:l=>{l.key==="Enter"&&o()}}),n.jsx("span",{className:"amx-bs-note",children:"px"})]})}export{Un as default};
|
|
1
|
+
import{r as J,R as ft,co as gt,t as E,j as n,d as u,u as K,cp as xt,cq as bt}from"./index-BM2o7PeV.js";import{F as Y,ro as yt,a2 as kt,fm as vt,bl as Xe,kq as qe,cO as Ze,dX as St,rp as ye,rq as Te,rr as ke,rs as wt,rt as Et,ru as Ct,ed as Ae,bp as ve,rv as jt,rw as Se}from"./appStore-DWP8UET9.js";import{R as It}from"./client-0MPbodA6.js";import{P as Nt}from"./pen-tool-BXEFnU2i.js";import{P as Ge}from"./pencil-cqvCkekG.js";import{F as Lt,T as Pt}from"./type-CFoaj2eD.js";import{M as Je}from"./minus-C9ndHJ9O.js";import{H as Mt}from"./hand-Bko7ms15.js";import{L as Rt}from"./lock-CnbZm4vo.js";import"./nativeDownload-BYT082bY.js";import"./ipc-CxAyeo8q.js";const zt=[["path",{d:"m11 10 3 3",key:"fzmg1i"}],["path",{d:"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z",key:"p4q2r7"}],["path",{d:"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031",key:"wy6l02"}]],Ot=Y("brush",zt);const Tt=[["path",{d:"M2.7 10.3a2.41 2.41 0 0 0 0 3.41l7.59 7.59a2.41 2.41 0 0 0 3.41 0l7.59-7.59a2.41 2.41 0 0 0 0-3.41l-7.59-7.59a2.41 2.41 0 0 0-3.41 0Z",key:"1f1r0c"}]],Qe=Y("diamond",Tt);const At=[["path",{d:"M12.67 19a2 2 0 0 0 1.416-.588l6.154-6.172a6 6 0 0 0-8.49-8.49L5.586 9.914A2 2 0 0 0 5 11.328V18a1 1 0 0 0 1 1z",key:"18jl4k"}],["path",{d:"M16 8 2 22",key:"vp34q"}],["path",{d:"M17.5 15H9",key:"1oz8nu"}]],Ft=Y("feather",At);const Dt=[["path",{d:"m9 11-6 6v3h9l3-3",key:"1a3l36"}],["path",{d:"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4",key:"14a9rk"}]],et=Y("highlighter",Dt);const Bt=[["path",{d:"M13 21h8",key:"1jsn5i"}],["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],Ht=Y("pen-line",Bt);const Wt=[["path",{d:"M22 2 2 22",key:"y4kqgn"}]],_t=Y("slash",Wt),Ee="amx.boardUiMode",le=new Set,$t=["full","compact"];let ie=null;const ce=()=>{if(ie)return ie;try{const e=localStorage.getItem(Ee);if(e&&$t.includes(e))return e;if(localStorage.getItem("amx.boardCompact")==="1")return"compact"}catch{}return"compact"},Ut=e=>{ie=e;try{localStorage.setItem(Ee,e)}catch{}for(const t of le)t()},Vt=e=>(le.add(e),()=>le.delete(e));typeof window<"u"&&window.addEventListener("storage",e=>{if(e.key===Ee){ie=null;for(const t of le)t()}});J({"boardengine.assetLoadFailed":{zh:"画板引擎资源加载失败:{url}(自托管副本缺失?重跑 npm run postinstall)",en:"Whiteboard engine assets failed to load: {url} (self-hosted copy missing? Re-run npm run postinstall)"},"boardengine.libMissing":{zh:"画板引擎已加载但没挂上 ExcalidrawLib",en:"Whiteboard engine loaded but did not expose ExcalidrawLib"}});const Fe={getPreferredUIMode:ce,settings:{get desktopUIMode(){return ce()},tabletUIMode:"compact",phoneUIMode:"mobile",disableContextMenu:!1,disableDoubleClickTextEditing:!1,penModeCrosshairVisible:!0,penModeDoubleTapEraser:!0,penModeSingleFingerPanning:!0,syncElementLinkWithText:!1,zoomMax:30,zoomMin:.1,zoomStep:.05,zoomToFitMaxLevel:2},excalidrawConfig:{areaLimit:16777216,widthHeightLimit:32767},getObsidianDevice:()=>{const e=navigator.userAgent,t=/Android/i.test(e),r=/iPad|iPhone|iPod/.test(e)||/Mac/.test(e)&&"ontouchend"in document,a=t||r,s=a&&Math.min(screen.width,screen.height)<600;return{isDesktop:!a,isPhone:s,isTablet:a&&!s,isMobile:a,isMacOS:/Mac/.test(e)&&!r,isWindows:/Win/.test(e),isLinux:/Linux/.test(e)&&!t,isIOS:r,isAndroid:t}},getHighlightColor:()=>{},getMermaid:async()=>null,loadFontFromFile:async()=>null,activeExcalidrawView:null,attachInlineLinkSuggester:()=>({destroy:()=>{}}),runAction:()=>{},getLabel:e=>e},X=globalThis;X.React=ft;X.ReactDOM=Object.assign({},yt,It);X.ReactJSXRuntime=gt;const De=X.app;De?.plugins?.plugins?De.plugins.plugins["obsidian-excalidraw-plugin"]=Fe:X.app={plugins:{plugins:{"obsidian-excalidraw-plugin":Fe}}};const tt=new URL("excalidraw/",document.baseURI).href,Be=(e,t)=>new Promise((r,a)=>{e.onload=()=>r(),e.onerror=()=>a(new Error(E("boardengine.assetLoadFailed",{url:t}))),document.head.appendChild(e)}),ue=document.createElement("link");ue.rel="stylesheet";ue.href=`${tt}excalidraw.css`;const we=document.createElement("script");we.src=`${tt}excalidraw.js`;await Promise.all([Be(ue,ue.href),Be(we,we.src)]);const nt=X.ExcalidrawLib;if(!nt)throw new Error(E("boardengine.libMissing"));const{Excalidraw:Kt,MainMenu:j,serializeAsJSON:Yt,restoreElements:Xt,newElementWith:qt,CaptureUpdateAction:V}=nt,Zt=["default","finetip","fountain","marker","highlighter","thick-thin","thin-thick-thin"];J({"excalipen.default":{zh:"默认",en:"Default"},"excalipen.finetip":{zh:"细尖笔",en:"Fine tip"},"excalipen.fountain":{zh:"钢笔",en:"Fountain pen"},"excalipen.marker":{zh:"马克笔",en:"Marker"},"excalipen.highlighter":{zh:"荧光笔",en:"Highlighter"},"excalipen.thickThin":{zh:"粗到细",en:"Thick to thin"},"excalipen.thinThickThin":{zh:"两头细",en:"Tapered ends"}});const He={get default(){return E("excalipen.default")},get finetip(){return E("excalipen.finetip")},get fountain(){return E("excalipen.fountain")},get marker(){return E("excalipen.marker")},get highlighter(){return E("excalipen.highlighter")},get"thick-thin"(){return E("excalipen.thickThin")},get"thin-thick-thin"(){return E("excalipen.thinThickThin")}},at={default:{type:"default",freedrawOnly:!1,strokeColor:"#000000",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:0,roughness:0,penOptions:{highlighter:!1,constantPressure:!1,hasOutline:!1,outlineWidth:1,options:{thinning:.6,smoothing:.5,streamline:.5,easing:"easeOutSine",start:{cap:!0,taper:0,easing:"linear"},end:{cap:!0,taper:0,easing:"linear"}}}},highlighter:{type:"highlighter",freedrawOnly:!0,strokeColor:"#FFC47C",backgroundColor:"#FFC47C",fillStyle:"solid",strokeWidth:4,roughness:null,penOptions:{highlighter:!0,constantPressure:!0,hasOutline:!1,outlineWidth:1,options:{thinning:0,smoothing:.5,streamline:.5,easing:"linear",start:{taper:0,cap:!1,easing:"linear"},end:{taper:0,cap:!1,easing:"linear"}}}},finetip:{type:"finetip",freedrawOnly:!1,strokeColor:"#3E6F8D",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:.5,roughness:0,penOptions:{highlighter:!1,hasOutline:!1,outlineWidth:1,constantPressure:!0,options:{smoothing:.4,thinning:-.5,streamline:.4,easing:"linear",start:{taper:5,cap:!1,easing:"linear"},end:{taper:5,cap:!1,easing:"linear"}}}},fountain:{type:"fountain",freedrawOnly:!1,strokeColor:"#000000",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:2,roughness:0,penOptions:{highlighter:!1,constantPressure:!1,hasOutline:!1,outlineWidth:1,options:{smoothing:.2,thinning:.6,streamline:.2,easing:"easeInOutSine",start:{taper:150,cap:!0,easing:"linear"},end:{taper:1,cap:!0,easing:"linear"}}}},marker:{type:"marker",freedrawOnly:!0,strokeColor:"#B83E3E",backgroundColor:"#FF7C7C",fillStyle:"dashed",strokeWidth:2,roughness:3,penOptions:{highlighter:!1,constantPressure:!0,hasOutline:!0,outlineWidth:4,options:{thinning:1,smoothing:.5,streamline:.5,easing:"linear",start:{taper:0,cap:!0,easing:"linear"},end:{taper:0,cap:!0,easing:"linear"}}}},"thick-thin":{type:"thick-thin",freedrawOnly:!0,strokeColor:"#CECDCC",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:0,roughness:null,penOptions:{highlighter:!0,constantPressure:!0,hasOutline:!1,outlineWidth:1,options:{thinning:1,smoothing:.5,streamline:.5,easing:"linear",start:{taper:0,cap:!0,easing:"linear"},end:{cap:!0,taper:!0,easing:"linear"}}}},"thin-thick-thin":{type:"thin-thick-thin",freedrawOnly:!0,strokeColor:"#CECDCC",backgroundColor:"transparent",fillStyle:"hachure",strokeWidth:0,roughness:null,penOptions:{highlighter:!0,constantPressure:!0,hasOutline:!1,outlineWidth:1,options:{thinning:1,smoothing:.5,streamline:.5,easing:"linear",start:{cap:!0,taper:!0,easing:"linear"},end:{cap:!0,taper:!0,easing:"linear"}}}}},Gt={default:Ge,finetip:Ht,fountain:Ft,marker:Ot,highlighter:et,"thick-thin":Nt,"thin-thick-thin":_t},Jt={.25:"extraThin",.5:"thin",1:"medium",2:"bold",4:"extraBold"},Qt=e=>{const t=Jt[e];return t?{currentItemStrokeWidthKey:t,currentItemStrokeWidth:null}:{currentItemStrokeWidthKey:null,currentItemStrokeWidth:e}},en={topPicks:{elementStroke:["#1e1e1e","#e03131","#2f9e44","#1971c2","#ffd43b"]}};function rt(e,t){const r=t.getAppState();t.updateScene({appState:{currentStrokeOptions:{...e.penOptions,options:{...e.penOptions.options}},colorPalette:e.type==="highlighter"?en:void 0,...e.strokeWidth?Qt(e.strokeWidth):null,currentItemStrokeVariability:e.penOptions?.constantPressure?"constant":"variable",...e.backgroundColor?{currentItemBackgroundColor:e.backgroundColor}:null,...e.strokeColor?{currentItemStrokeColor:e.strokeColor}:null,...e.fillStyle?{currentItemFillStyle:e.fillStyle}:null,...e.roughness!==null?{currentItemRoughness:e.roughness}:null,...r.resetCustomPen?null:{resetCustomPen:{currentItemStrokeWidthKey:r.currentItemStrokeWidthKey??null,currentItemStrokeWidth:r.currentItemStrokeWidth??null,currentItemStrokeVariability:r.currentItemStrokeVariability??null,currentItemBackgroundColor:r.currentItemBackgroundColor??null,currentItemStrokeColor:r.currentItemStrokeColor??null,currentItemFillStyle:r.currentItemFillStyle??null,currentItemRoughness:r.currentItemRoughness??null}}},captureUpdate:V.NEVER})}function Ce(e,t,r){t.updateScene({appState:{...e?{currentItemStrokeWidthKey:e.currentItemStrokeWidthKey??null,currentItemStrokeWidth:e.currentItemStrokeWidth??null,currentItemStrokeVariability:e.currentItemStrokeVariability??null,currentItemBackgroundColor:e.currentItemBackgroundColor??null,currentItemStrokeColor:e.currentItemStrokeColor??null,currentItemFillStyle:e.currentItemFillStyle??null,currentItemRoughness:e.currentItemRoughness??null}:null,resetCustomPen:null,...r?{currentStrokeOptions:null,colorPalette:void 0}:null},captureUpdate:V.NEVER})}const tn=()=>({active:null,pending:!1});function ot(e,t,r){const a=t.current,s=e.getAppState();if(a.active===r&&s.activeTool.type==="freedraw"){a.active=null,a.pending=!1,Ce(s.resetCustomPen,e,!0);return}a.active=r,a.pending=!0,rt(at[r],e),e.setActiveTool({type:"freedraw"})}function nn(e,t){const r=e.getAppState().currentStrokeOptions;r?.options&&e.updateScene({appState:{currentStrokeOptions:{...r,options:{...r.options,thinning:0,start:{...r.options.start,cap:t,taper:0},end:{...r.options.end,cap:t,taper:0}}}},captureUpdate:V.NEVER})}function an(e,t){const r=t.current;r.active&&(r.active=null,r.pending=!1,Ce(e.getAppState().resetCustomPen,e,!0))}function rn(e,t,r,a){const s=a.current;s.pending&&t==="freedraw"&&(s.pending=!1),u.useEffect(()=>{const o=s.active;if(!e||!o||s.pending)return;const l=at[o];l.freedrawOnly&&(t!=="freedraw"&&r?Ce(r,e,!1):t==="freedraw"&&!r&&rt(l,e))},[e,s,t,r])}function on({api:e,ui:t,state:r}){const a=r.current,s=t.tool;return e?n.jsx("div",{className:"amx-penrow buttonList",children:Zt.map(o=>{const l=Gt[o],p=a.active===o&&s==="freedraw";return n.jsx("label",{className:p?"active":"",title:He[o],"data-on":p||void 0,onClick:()=>ot(e,r,o),children:n.jsx(l,{size:16,"aria-label":He[o]})},o)})}):null}const de=["left","mid","right"],R={left:["lock","hand"],mid:["selection","shape","line","freedraw","highlighter","text","eraser"],right:["frame","laser"]},sn=[...R.left,...R.mid,...R.right],me="amx.boardToolbar",Z=new Set;let M=null;const ln=e=>e<9?String(e+1):e===9?"0":null;function st(e){const t=new Set,r={left:[],mid:[],right:[]},a=e??{};for(const s of de)for(const o of Array.isArray(a[s])?a[s]:[])typeof o!="string"||!sn.includes(o)||t.has(o)||(t.add(o),r[s].push(o));for(const s of de)for(const o of R[s])t.has(o)||r[s].push(o);return r}const G=()=>{if(M)return M;try{const e=localStorage.getItem(me);if(e)return M=st(JSON.parse(e))}catch{}return M=R},cn=e=>{M=st(e);try{localStorage.setItem(me,JSON.stringify(M))}catch{}for(const t of Z)t()},un=()=>{M=R;try{localStorage.removeItem(me)}catch{}for(const e of Z)e()},dn=e=>de.every(t=>e[t].length===R[t].length&&e[t].every((r,a)=>r===R[t][a])),lt=e=>(Z.add(e),()=>Z.delete(e));function hn(e,t,r,a){const s={left:[...e.left],mid:[...e.mid],right:[...e.right]};for(const o of de){const l=s[o].indexOf(t);l>=0&&s[o].splice(l,1)}return s[r].splice(Math.max(0,Math.min(a,s[r].length)),0,t),s}typeof window<"u"&&window.addEventListener("storage",e=>{if(e.key===me){M=null;for(const t of Z)t()}});J({"boardtoolbar.shapeRectangle":{zh:"矩形",en:"Rectangle"},"boardtoolbar.shapeDiamond":{zh:"菱形",en:"Diamond"},"boardtoolbar.shapeEllipse":{zh:"椭圆",en:"Ellipse"},"boardtoolbar.lineArrow":{zh:"箭头",en:"Arrow"},"boardtoolbar.lineSegment":{zh:"线段",en:"Line"},"boardtoolbar.toolLock":{zh:"保持工具选中",en:"Keep tool selected"},"boardtoolbar.toolHand":{zh:"抓手",en:"Hand"},"boardtoolbar.toolSelection":{zh:"选择",en:"Selection"},"boardtoolbar.toolShape":{zh:"形状",en:"Shape"},"boardtoolbar.toolLine":{zh:"线",en:"Line"},"boardtoolbar.toolFreedraw":{zh:"画笔",en:"Draw"},"boardtoolbar.toolHighlighter":{zh:"荧光笔",en:"Highlighter"},"boardtoolbar.toolText":{zh:"文字",en:"Text"},"boardtoolbar.toolEraser":{zh:"橡皮",en:"Eraser"},"boardtoolbar.toolFrame":{zh:"画框",en:"Frame"},"boardtoolbar.toolLaser":{zh:"激光笔",en:"Laser pointer"}});const he=["rectangle","diamond","ellipse"],pe=["arrow","line"],pn=()=>({shape:"rectangle",line:"arrow"}),mn={rectangle:Ze,diamond:Qe,ellipse:qe},fn={arrow:Xe,line:Je},We={get rectangle(){return E("boardtoolbar.shapeRectangle")},get diamond(){return E("boardtoolbar.shapeDiamond")},get ellipse(){return E("boardtoolbar.shapeEllipse")}},_e={get arrow(){return E("boardtoolbar.lineArrow")},get line(){return E("boardtoolbar.lineSegment")}},gn={lock:"boardtoolbar.toolLock",hand:"boardtoolbar.toolHand",selection:"boardtoolbar.toolSelection",shape:"boardtoolbar.toolShape",line:"boardtoolbar.toolLine",freedraw:"boardtoolbar.toolFreedraw",highlighter:"boardtoolbar.toolHighlighter",text:"boardtoolbar.toolText",eraser:"boardtoolbar.toolEraser",frame:"boardtoolbar.toolFrame",laser:"boardtoolbar.toolLaser"};function it(e,t,r){const a=t.getAppState();switch(e){case"lock":t.setActiveTool({...a.activeTool,locked:!a.activeTool.locked});return;case"shape":t.setActiveTool({type:r.group.current.shape});return;case"line":t.setActiveTool({type:r.group.current.line});return;case"freedraw":an(t,r.pen),t.setActiveTool({type:"freedraw"});return;case"highlighter":ot(t,r.pen,"highlighter");return;default:t.setActiveTool({type:e})}}function xn(e,t){switch(e){case"lock":return Rt;case"hand":return Mt;case"selection":return St;case"shape":return mn[t.shape];case"line":return fn[t.line];case"freedraw":return Ge;case"highlighter":return et;case"text":return Pt;case"eraser":return vt;case"frame":return Lt;case"laser":return kt}}function bn(e,t,r){const a=t.tool;switch(e){case"lock":return t.locked;case"shape":return he.includes(a);case"line":return pe.includes(a);case"freedraw":return a==="freedraw"&&r.active!=="highlighter";case"highlighter":return a==="freedraw"&&r.active==="highlighter";default:return a===e}}const $e=["left","mid","right"];function yn({api:e,ui:t,refs:r}){const{t:a}=K(),s=u.useSyncExternalStore(lt,G,G),[o,l]=u.useState(null),p=u.useRef(null),x=u.useRef(null),d=o?.layout??s;if(!e)return null;const fe=r.group.current,z=r.pen.current,Q=(f,g)=>{const b=x.current;if(!b)return null;let k=null,H=1/0;for(const y of $e){const P=b.querySelector(`[data-seg="${y}"]`);if(!P)continue;const S=P.getBoundingClientRect();if(f>=S.left&&f<=S.right){k=y;break}const ne=f<S.left?S.left-f:f-S.right;ne<H&&(H=ne,k=y)}if(!k)return null;const N=[...b.querySelectorAll(`[data-seg="${k}"] [data-tool]`)];let C=N.length;for(let y=0;y<N.length;y++){const P=N[y].getBoundingClientRect();if(f<P.left+P.width/2){C=y;break}}const L=N.findIndex(y=>y.dataset.tool===g);return L>=0&&L<C&&C--,{seg:k,index:C}},ee=(f,g)=>{f.button===0&&(p.current={x:f.clientX,y:f.clientY,id:g,moved:!1},f.currentTarget.setPointerCapture(f.pointerId))},te=f=>{const g=p.current;if(!g||!g.moved&&Math.hypot(f.clientX-g.x,f.clientY-g.y)<5)return;g.moved=!0;const b=Q(f.clientX,g.id);b&&l({id:g.id,layout:hn(s,g.id,b.seg,b.index)})},O=u.useRef(0),q=f=>{const g=p.current;p.current=null,f.currentTarget.releasePointerCapture?.(f.pointerId),O.current=g?.moved?Date.now():0,g?.moved&&o&&cn(o.layout),l(null)},B=f=>{if(Date.now()-O.current<400){O.current=0;return}it(f,e,r)};return n.jsx("div",{className:"amx-toolbar",ref:x,"data-dragging":o?"":void 0,children:$e.map((f,g)=>n.jsxs("div",{className:"amx-toolbar-seg","data-seg":f,children:[g>0&&n.jsx("span",{className:"amx-toolbar-sep","aria-hidden":!0}),d[f].map((b,k)=>{const H=xn(b,fe),N=bn(b,t,z),C=f==="mid"?ln(k):null,L=a(gn[b]);return n.jsxs("button",{type:"button","data-tool":b,"data-on":N||void 0,"data-drag":o?.id===b||void 0,className:"amx-tool",title:C?`${L} — ${C}`:L,"aria-label":L,"aria-pressed":N,onPointerDown:y=>ee(y,b),onPointerMove:te,onPointerUp:q,onClick:()=>B(b),onPointerCancel:()=>{p.current=null,O.current=0,l(null)},children:[n.jsx(H,{size:17}),C&&n.jsx("span",{className:"amx-tool-key",children:C})]},b)})]},f))})}J({"panelextras.secPen":{zh:"笔",en:"Pen"},"panelextras.secStroke":{zh:"笔触",en:"Stroke"},"panelextras.capRound":{zh:"圆头",en:"Round cap"},"panelextras.capButt":{zh:"方头",en:"Flat cap"},"panelextras.secShape":{zh:"形状",en:"Shape"},"panelextras.secLine":{zh:"线",en:"Line"}});const kn={rectangle:Ze,diamond:Qe,ellipse:qe},vn={arrow:Xe,line:Je};function oe({title:e,children:t}){return n.jsxs("fieldset",{className:"amx-panelsec",children:[n.jsx("legend",{children:e}),t]})}function Sn({api:e,ui:t,pen:r,group:a}){const{t:s}=K();if(!e)return null;const o=t.tool;if(o==="freedraw"){const l=r.current.active==="highlighter";return n.jsxs(n.Fragment,{children:[n.jsx(oe,{title:s("panelextras.secPen"),children:n.jsx(on,{api:e,ui:t,state:r})}),l&&n.jsx(oe,{title:s("panelextras.secStroke"),children:n.jsx("div",{className:"amx-panelrow buttonList",children:[!1,!0].map(p=>{const x=t.capRound===p,d=s(p?"panelextras.capRound":"panelextras.capButt");return n.jsx("label",{className:x?"active":"",title:d,"data-on":x||void 0,onClick:()=>nn(e,p),children:n.jsx("svg",{width:"18",height:"18",viewBox:"0 0 18 18","aria-label":d,children:n.jsx("line",{x1:"4",y1:"9",x2:"14",y2:"9",stroke:"currentColor",strokeWidth:"7",strokeLinecap:p?"round":"butt"})})},String(p))})})})]})}return he.includes(o)?n.jsx(oe,{title:s("panelextras.secShape"),children:n.jsx("div",{className:"amx-panelrow buttonList",children:he.map(l=>{const p=kn[l],x=o===l;return n.jsx("label",{className:x?"active":"",title:We[l],"data-on":x||void 0,onClick:()=>{a.current.shape=l,e.setActiveTool({type:l})},children:n.jsx(p,{size:16,"aria-label":We[l]})},l)})})}):pe.includes(o)?n.jsx(oe,{title:s("panelextras.secLine"),children:n.jsx("div",{className:"amx-panelrow buttonList",children:pe.map(l=>{const p=vn[l],x=o===l;return n.jsx("label",{className:x?"active":"",title:_e[l],"data-on":x||void 0,onClick:()=>{a.current.line=l,e.setActiveTool({type:l})},children:n.jsx(p,{size:16,"aria-label":_e[l]})},l)})})}):null}const wn=()=>({tool:"selection",locked:!1,snapshot:null,capRound:null}),En=(e,t)=>e.tool===t.tool&&e.locked===t.locked&&e.snapshot===t.snapshot&&e.capRound===t.capRound;J({"excalicanvas.addPage":{zh:"+ 新建页面",en:"+ New page"},"excalicanvas.delBlankPage":{zh:"删掉这张空白页",en:"Delete this blank page"},"excalicanvas.modeFull":{zh:"常规",en:"Standard"},"excalicanvas.modeCompact":{zh:"紧凑",en:"Compact"},"excalicanvas.paper":{zh:"纸张",en:"Paper"},"excalicanvas.paperNone":{zh:"无限",en:"Infinite"},"excalicanvas.portrait":{zh:"纵向",en:"Portrait"},"excalicanvas.landscape":{zh:"横向",en:"Landscape"},"excalicanvas.flow":{zh:"页面排布",en:"Page layout"},"excalicanvas.flowV":{zh:"上下",en:"Top to bottom"},"excalicanvas.flowH":{zh:"左右",en:"Left to right"},"excalicanvas.grid":{zh:"网格",en:"Grid"},"excalicanvas.gridH":{zh:"横线",en:"Horizontal"},"excalicanvas.gridV":{zh:"竖线",en:"Vertical"},"excalicanvas.opacity":{zh:"淡浓",en:"Opacity"},"excalicanvas.uiMode":{zh:"属性面板",en:"Properties panel"},"excalicanvas.allBoards":{zh:"所有白板",en:"All boards"},"excalicanvas.toolbar":{zh:"工具栏",en:"Toolbar"},"excalicanvas.resetOrder":{zh:"恢复默认顺序",en:"Reset to default order"}});const se=4,Cn="linear-gradient(90deg, var(--amx-grid-line) 0 1px, transparent 1px)",jn="linear-gradient(180deg, var(--amx-grid-line) 0 1px, transparent 1px)",Ue=(e,t,r)=>Math.min(Math.max(e,t),r),Ve=(e,t)=>(e%t+t)%t;function Ke(e,t,r){const[a,s]=u.useState(null);return u.useEffect(()=>{if(!e)return;let o=null;const l=()=>{const x=e.querySelector(t);if(!x){o&&(o.remove(),o=null,s(null));return}if(o&&o.parentElement===x)return;o?.remove();const d=document.createElement("div");d.className=r,x.insertBefore(d,x.firstChild),o=d,s(d)};l();const p=new MutationObserver(l);return p.observe(e,{childList:!0,subtree:!0}),()=>{p.disconnect(),o?.remove(),s(null)}},[e,t,r]),a}function In(e){u.useEffect(()=>{const t=new Map,r=o=>{o.classList.contains("amx-board-portal")||o.classList.add("amx-board-portal"),o.style.zoom!==e&&(o.style.zoom=e)},a=o=>{if(!(o instanceof HTMLElement)||!o.classList.contains("excalidraw")||o.closest(".amx-boardhost")||(r(o),t.has(o)))return;const l=new MutationObserver(()=>r(o));l.observe(o,{attributes:!0,attributeFilter:["class","style"]}),t.set(o,l)};for(const o of[...document.body.children])a(o);const s=new MutationObserver(o=>{for(const l of o){for(const p of l.addedNodes)a(p);for(const p of l.removedNodes)p instanceof HTMLElement&&t.has(p)&&(t.get(p)?.disconnect(),t.delete(p))}});return s.observe(document.body,{childList:!0}),()=>{s.disconnect();for(const o of t.values())o.disconnect()}},[e])}function Un({initialData:e,theme:t,langCode:r,settings:a,onSettings:s,onSceneChange:o,registerApplier:l,viewMode:p=!1}){const{t:x}=K(),[d,fe]=u.useState(null),z=u.useRef(null),Q=u.useRef([]),ee=u.useRef(null),te=u.useRef(null),O=u.useRef(null),q=u.useRef(!1),[B,f]=u.useState(null),[g,b]=u.useState(null),k=u.useMemo(()=>ye(a)?Te(a,g):{min:0,max:0},[a,g]),H=u.useMemo(()=>Array.from({length:k.max-k.min+1},(c,i)=>k.min+i),[k]),N=u.useMemo(()=>Te({...a,pageFirst:0,pageLast:0},g),[a,g]),C=u.useSyncExternalStore(Vt,ce,ce),L=u.useRef(tn()),y=u.useRef(pn()),P=u.useMemo(()=>({pen:L,group:y}),[]),[S,ne]=u.useState(wn),[ct,ut]=u.useState(""),[je,Ie]=u.useState(null),Ne=Ke(je,".App-toolbar","amx-toolbar-slot"),Le=Ke(je,".Island > .selected-shape-actions, .Island > .compact-shape-actions, .Island.compact-shape-actions","amx-panel-slot");In(ct),rn(d,S.tool,S.snapshot,L),u.useEffect(()=>{he.includes(S.tool)&&(y.current.shape=S.tool),pe.includes(S.tool)&&(y.current.line=S.tool)},[S.tool]),u.useEffect(()=>{if(!d)return;const c=i=>{if(i.metaKey||i.ctrlKey||i.altKey||!/^[0-9]$/.test(i.key))return;const h=z.current?.querySelector(".excalidraw"),m=i.target;if(!h||!m||!h.contains(m)||m.isContentEditable||m.tagName==="INPUT"||m.tagName==="TEXTAREA")return;const w=G().mid[i.key==="0"?9:Number(i.key)-1];w&&(i.preventDefault(),i.stopImmediatePropagation(),it(w,d,P))};return window.addEventListener("keydown",c,!0),()=>window.removeEventListener("keydown",c,!0)},[d,P]),u.useEffect(()=>{d?.setDesktopUIMode(C)},[d,C]),u.useEffect(()=>{if(!(!d||!l))return l(c=>{const i=d.getSceneElementsIncludingDeleted(),h=xt(i,c.elements??[]);if(bt(h,i))return;d.updateScene({elements:Xt(h,null),captureUpdate:V.NEVER});const m=Object.values(c.files??{});m.length&&d.addFiles(m)})},[d,l]),u.useEffect(()=>{const c=d&&z.current?.querySelector(".excalidraw");if(!c)return;const i=document.createElement("div");return i.style.display="contents",c.insertBefore(i,c.firstChild),f(i),Ie(c),()=>{i.remove(),f(null),Ie(null)}},[d]);const W=u.useCallback(c=>{const i=ee.current,h=Q.current.filter(v=>!!v);if(!i||!h.length)return;const m=c.zoom.value,w=ye(a),T=a.gridV*m,ae=a.gridH*m,re=[],xe=[],be=[],dt=w||T<se?0:Ve(c.scrollX*m,T),ht=w||ae<se?0:Ve(c.scrollY*m,ae);T>=se&&(re.push(Cn),xe.push(`${T}px 100%`),be.push(`${dt}px 0px`)),ae>=se&&(re.push(jn),xe.push(`100% ${ae}px`),be.push(`0px ${ht}px`));for(const v of h)v.style.backgroundImage=re.join(", "),v.style.backgroundSize=xe.join(", "),v.style.backgroundPosition=be.join(", "),v.style.opacity=a.gridOpacity>=100?"":String(a.gridOpacity/100),v.style.display=re.length||w?"":"none";if(!w){Object.assign(h[0].style,{left:"0px",top:"0px",width:"100%",height:"100%"}),i.style.display="none";return}const Me=(v,I,A)=>{if(!v)return;const F=(I.x+c.scrollX)*m,U=(I.y+c.scrollY)*m,D=22,pt=a.flow==="h"?A?F+I.w*m+D:F-D:F+I.w*m/2,mt=a.flow==="h"?U+I.h*m/2:A?U+I.h*m+D:U-D;v.style.left=`${pt}px`,v.style.top=`${mt}px`},Re=[];for(let v=0;v<h.length;v++){const I=ke(a,k.min+v);if(!I)continue;const A=(I.x+c.scrollX)*m,F=(I.y+c.scrollY)*m,U=I.w*m,D=I.h*m;Object.assign(h[v].style,{left:`${A}px`,top:`${F}px`,width:`${U}px`,height:`${D}px`}),Re.push(`M${A.toFixed(1)} ${F.toFixed(1)}H${(A+U).toFixed(1)}V${(F+D).toFixed(1)}H${A.toFixed(1)}Z`)}const ze=ke(a,k.min),Oe=ke(a,k.max);ze&&Me(te.current,ze,!1),Oe&&Me(O.current,Oe,!0),i.style.display="",i.style.clipPath=`path(evenodd,"M0 0H${i.offsetWidth}V${i.offsetHeight}H0Z ${Re.join(" ")}")`},[a,k]),_=u.useCallback(c=>{if(!d||q.current)return c;const i=d.getAppState();if(i.cursorButton==="down")return c;const h=wt(a,{scrollX:c.scrollX,scrollY:c.scrollY,zoom:c.zoom.value,width:i.width,height:i.height},g);if(!h)return c;q.current=!0;try{d.updateScene({appState:{scrollX:h.scrollX,scrollY:h.scrollY,zoom:{value:h.zoom}},captureUpdate:V.NEVER})}finally{q.current=!1}return{scrollX:h.scrollX,scrollY:h.scrollY,zoom:{value:h.zoom}}},[d,a,g]),ge=u.useCallback(c=>{const i=Et(c);b(h=>h&&i&&h.minX===i.minX&&h.minY===i.minY&&h.maxX===i.maxX&&h.maxY===i.maxY?h:i)},[]),Pe=u.useRef(a.flow);u.useEffect(()=>{const c=Pe.current,i=a.flow;if(Pe.current=i,c===i||!d||!a.paper)return;const h=d.getSceneElements();h.length&&d.updateScene({elements:h.map(m=>{const w=Ct(a,c,i,m.x,m.y);return w.x===m.x&&w.y===m.y?m:qt(m,{x:w.x,y:w.y})}),captureUpdate:V.IMMEDIATELY})},[d,a]),u.useEffect(()=>{!d||!B||(ge(d.getSceneElements()),W(_(d.getAppState())))},[d,B,W,_,ge]);const $=u.useCallback(()=>{const c=z.current;if(!c)return;const i=c.parentElement?.currentCSSZoom??1,h=Math.abs(i-1)>1e-6?String(1/i):"";c.style.zoom!==h&&(c.style.zoom=h),ut(m=>m===h?m:h)},[]);return u.useEffect(()=>($(),window.addEventListener(Ae,$),()=>window.removeEventListener(Ae,$)),[$]),u.useEffect(()=>{const c=z.current;if(!c||!d||typeof ResizeObserver>"u")return;const i=new ResizeObserver(()=>{$(),W(_(d.getAppState()))});return i.observe(c),()=>i.disconnect()},[d,W,_,$]),n.jsxs("div",{className:"amx-boardhost",ref:z,children:[n.jsx(Kt,{onExcalidrawAPI:fe,initialData:e,theme:t,langCode:r,viewModeEnabled:p,onScrollChange:(c,i,h)=>W(_({scrollX:c,scrollY:i,zoom:h})),onChange:(c,i,h)=>{ge(c),W(_(i));const m=i.currentStrokeOptions,w={tool:i.activeTool.type,locked:!!i.activeTool.locked,snapshot:i.resetCustomPen??null,capRound:m?!!m.options?.start?.cap:null};ne(T=>En(T,w)?T:w),o(Yt(c,i,h,"local"))},children:n.jsxs(j,{children:[n.jsx(j.DefaultItems.LoadScene,{}),n.jsx(j.DefaultItems.SaveToActiveFile,{}),n.jsx(j.DefaultItems.Export,{}),n.jsx(j.DefaultItems.SaveAsImage,{}),n.jsx(j.DefaultItems.SearchMenu,{}),n.jsx(j.DefaultItems.Help,{}),n.jsx(j.DefaultItems.ClearCanvas,{}),n.jsx(j.Separator,{}),n.jsx(j.DefaultItems.ToggleTheme,{allowSystemTheme:!1}),n.jsx(j.DefaultItems.ChangeCanvasBackground,{}),n.jsx(j.Separator,{}),n.jsx(j.ItemCustom,{children:n.jsx(Pn,{settings:a,onSettings:s,uiMode:C,onUiMode:Ut})})]})}),Ne&&ve.createPortal(n.jsx(yn,{api:d,ui:S,refs:P}),Ne),Le&&ve.createPortal(n.jsx(Sn,{api:d,ui:S,pen:L,group:y}),Le),B&&ve.createPortal(n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"amx-matte",ref:ee,onWheel:Nn}),H.map((c,i)=>n.jsx("div",{className:"amx-grid","data-page":c,ref:h=>{Q.current[i]=h}},c)),!!ye(a)&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"amx-pageadd","data-end":"before","data-flow":a.flow,ref:te,children:[n.jsx("button",{onClick:()=>s({pageFirst:a.pageFirst-1}),children:x("excalicanvas.addPage")}),a.pageFirst<N.min&&n.jsx("button",{className:"amx-pageadd-del",title:x("excalicanvas.delBlankPage"),onClick:()=>s({pageFirst:a.pageFirst+1}),children:"−"})]}),n.jsxs("div",{className:"amx-pageadd","data-end":"after","data-flow":a.flow,ref:O,children:[n.jsx("button",{onClick:()=>s({pageLast:a.pageLast+1}),children:x("excalicanvas.addPage")}),a.pageLast>N.max&&n.jsx("button",{className:"amx-pageadd-del",title:x("excalicanvas.delBlankPage"),onClick:()=>s({pageLast:a.pageLast-1}),children:"−"})]})]})]}),B)]})}function Nn(e){const t=e.currentTarget.closest(".excalidraw")?.querySelector("canvas.excalidraw__canvas.interactive");t&&(e.preventDefault(),t.dispatchEvent(new WheelEvent("wheel",{deltaX:e.deltaX,deltaY:e.deltaY,deltaMode:e.deltaMode,clientX:e.clientX,clientY:e.clientY,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,bubbles:!0,cancelable:!0})))}const Ln=[{id:"full",labelKey:"excalicanvas.modeFull"},{id:"compact",labelKey:"excalicanvas.modeCompact"}];function Pn({settings:e,onSettings:t,uiMode:r,onUiMode:a}){const{t:s}=K(),o=t;return n.jsxs("div",{className:"amx-bs",children:[n.jsx("div",{className:"amx-bs-h",children:s("excalicanvas.paper")}),n.jsxs("div",{className:"amx-bs-row",children:[n.jsx("button",{className:"amx-bs-chip","data-on":!e.paper||void 0,onClick:()=>o({paper:null}),children:s("excalicanvas.paperNone")}),jt.map(l=>n.jsx("button",{className:"amx-bs-chip","data-on":e.paper===l||void 0,onClick:()=>o({paper:l}),children:l},l))]}),e.paper&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"amx-bs-row",children:[n.jsx("button",{className:"amx-bs-chip","data-on":!e.landscape||void 0,onClick:()=>o({landscape:!1}),children:s("excalicanvas.portrait")}),n.jsx("button",{className:"amx-bs-chip","data-on":e.landscape||void 0,onClick:()=>o({landscape:!0}),children:s("excalicanvas.landscape")})]}),n.jsx("div",{className:"amx-bs-h",children:s("excalicanvas.flow")}),n.jsxs("div",{className:"amx-bs-row",children:[n.jsx("button",{className:"amx-bs-chip","data-on":e.flow==="v"||void 0,onClick:()=>o({flow:"v"}),children:s("excalicanvas.flowV")}),n.jsx("button",{className:"amx-bs-chip","data-on":e.flow==="h"||void 0,onClick:()=>o({flow:"h"}),children:s("excalicanvas.flowH")})]})]}),n.jsx("div",{className:"amx-bs-h",children:s("excalicanvas.grid")}),n.jsx(Ye,{label:s("excalicanvas.gridH"),value:e.gridH,onChange:l=>o({gridH:l})}),n.jsx(Ye,{label:s("excalicanvas.gridV"),value:e.gridV,onChange:l=>o({gridV:l})}),n.jsx(Rn,{value:e.gridOpacity,disabled:e.gridH<=0&&e.gridV<=0,onCommit:l=>o({gridOpacity:l})}),n.jsxs("div",{className:"amx-bs-h",children:[s("excalicanvas.uiMode")," ",n.jsx("span",{className:"amx-bs-note",children:s("excalicanvas.allBoards")})]}),n.jsx("div",{className:"amx-bs-row",children:Ln.map(l=>n.jsx("button",{className:"amx-bs-chip","data-on":r===l.id||void 0,onClick:()=>a(l.id),children:s(l.labelKey)},l.id))}),n.jsx(Mn,{})]})}function Mn(){const{t:e}=K(),t=u.useSyncExternalStore(lt,G,G);return dn(t)?null:n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"amx-bs-h",children:[e("excalicanvas.toolbar")," ",n.jsx("span",{className:"amx-bs-note",children:e("excalicanvas.allBoards")})]}),n.jsx("div",{className:"amx-bs-row",children:n.jsx("button",{className:"amx-bs-chip",onClick:()=>un(),children:e("excalicanvas.resetOrder")})})]})}function Rn({value:e,disabled:t,onCommit:r}){const{t:a}=K(),[s,o]=u.useState(e);return u.useEffect(()=>o(e),[e]),n.jsxs("label",{className:"amx-bs-check",children:[n.jsx("span",{className:"amx-bs-lbl",children:a("excalicanvas.opacity")}),n.jsx("input",{className:"amx-bs-range",type:"range",min:10,max:100,step:5,disabled:t,value:s,onChange:l=>{const p=Number(l.target.value);o(p);for(const x of l.currentTarget.closest(".excalidraw")?.querySelectorAll(".amx-grid")??[])x.style.opacity=p>=100?"":String(p/100)},onPointerUp:()=>r(s),onKeyUp:()=>r(s)}),n.jsxs("span",{className:"amx-bs-note",children:[s,"%"]})]})}function Ye({label:e,value:t,onChange:r}){const[a,s]=u.useState(String(t||Se));u.useEffect(()=>{t>0&&s(String(t))},[t]);const o=()=>{const l=Math.round(Number(a)),p=Number.isFinite(l)&&l>0?Ue(l,4,400):Se;s(String(p)),t>0&&p!==t&&r(p)};return n.jsxs("label",{className:"amx-bs-check",children:[n.jsx("input",{type:"checkbox",checked:t>0,onChange:l=>r(l.target.checked?Ue(Math.round(Number(a))||Se,4,400):0)}),n.jsx("span",{className:"amx-bs-lbl",children:e}),n.jsx("input",{className:"amx-bs-num",type:"number",min:4,max:400,disabled:t<=0,value:a,onChange:l=>s(l.target.value),onBlur:o,onKeyDown:l=>{l.key==="Enter"&&o()}}),n.jsx("span",{className:"amx-bs-note",children:"px"})]})}export{Un as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as l,j as m}from"./index-
|
|
1
|
+
import{d as l,j as m}from"./index-BM2o7PeV.js";import"./appStore-DWP8UET9.js";const U="h1, h2, h3, [data-lcl-toc-title]";function h(t){return t?typeof t=="function"?t():"current"in t?t.current:t:null}const W=t=>{const u=/^H([1-6])$/.exec(t.tagName)?.[1],c=t.dataset.lclTocLevel??u??"1",d=Number(c),s=(t.dataset.lclTocTitle??t.textContent??"").trim();return s?{text:s,level:Number.isFinite(d)?Math.max(0,Math.min(6,Math.round(d))):1,primary:t.hasAttribute("data-lcl-toc-primary")||t.dataset.lclTocKind==="primary"}:null};function _(t,u){return t.length===u.length&&t.every((c,d)=>{const s=u[d];return c.target===s.target&&c.text===s.text&&c.level===s.level&&c.primary===s.primary&&c.onSelect===s.onSelect})}function P({scrollContainer:t,contentRoot:u,selector:c=U,itemFromElement:d=W,label:s="Table of contents",minItems:$=2,hideBelow:T=520,topOffset:y=24,topInset:p,side:A="left",scanTrigger:R,placement:j="overlay"}){const[v,w]=l.useState([]),[K,E]=l.useState(null),[z,F]=l.useState(!1),[B,M]=l.useState(!1),[C,X]=l.useState(!1),f=l.useRef(null),k=l.useRef(new WeakMap),q=l.useRef(0),S=l.useCallback(()=>{const e=h(t),r=h(u)??e;if(!r){w(a=>a.length?[]:a);return}let n;try{n=r.querySelectorAll(c)}catch(a){console.error(`[lcl] FloatingToc ignored invalid selector "${c}"`,a),w(g=>g.length?[]:g);return}const o=[];n.forEach((a,g)=>{let i=null;try{i=d(a,g)}catch(I){console.error("[lcl] FloatingToc item reader failed",I)}const L=String(i?.text??"").trim();if(!i||!L)return;let b=k.current.get(a);b||(b=`lcl-ftoc-${++q.current}`,k.current.set(a,b));const N=Number(i.level);o.push({...i,key:b,target:a,text:L,level:Number.isFinite(N)?Math.max(0,Math.min(6,Math.round(N))):1})}),w(a=>_(a,o)?a:o)},[u,d,t,c]);l.useEffect(()=>{S();const e=h(t),r=h(u)??e;if(!r||typeof MutationObserver>"u")return;let n=0;const o=new MutationObserver(()=>{cancelAnimationFrame(n),n=requestAnimationFrame(S)});return o.observe(r,{childList:!0,subtree:!0,characterData:!0}),()=>{cancelAnimationFrame(n),o.disconnect()}},[u,S,R,t]),l.useEffect(()=>{const e=h(t);if(!e)return;const r=()=>X(T>0&&e.getBoundingClientRect().width<=T);if(r(),typeof ResizeObserver>"u")return;const n=new ResizeObserver(r);return n.observe(e),()=>n.disconnect()},[T,t]),l.useEffect(()=>{const e=h(t);if(!e||!v.length){E(null);return}let r=0;const n=()=>{r=0;const a=e.getBoundingClientRect().top+y+(p?.(e)??0)+1;let g=v[0];for(const i of v)if(!(!i.target.isConnected||!e.contains(i.target)))if(i.target.getBoundingClientRect().top<=a)g=i;else break;E(g?.key??null)},o=()=>{r||(r=requestAnimationFrame(n))};return n(),e.addEventListener("scroll",o,{passive:!0}),window.addEventListener("resize",o),()=>{cancelAnimationFrame(r),e.removeEventListener("scroll",o),window.removeEventListener("resize",o)}},[v,t,y,p]),l.useEffect(()=>()=>{f.current!=null&&window.clearTimeout(f.current)},[]);const D=l.useCallback(e=>{const r=h(t);if(r){if(e.onSelect)try{e.onSelect()}catch(n){console.error("[lcl] FloatingToc navigation failed",n)}else if(r.contains(e.target)){const n=e.target.getBoundingClientRect().top-r.getBoundingClientRect().top+r.scrollTop;r.scrollTo({top:Math.max(0,n-y-(p?.(r)??0)),behavior:"smooth"})}E(e.key)}},[t,y,p]),H=()=>{f.current!=null&&window.clearTimeout(f.current),f.current=null,F(!0)},O=()=>{f.current!=null&&window.clearTimeout(f.current),f.current=window.setTimeout(()=>F(!1),150)};if(v.length<Math.max(1,$)||C)return null;const x=z||B;return m.jsx("div",{className:`lcl-ftoc-frame is-${j}`,"data-side":A,children:m.jsx("nav",{className:`lcl-ftoc${x?" open":""}`,style:x?void 0:{height:`min(44vh, ${v.length*6+12}px)`},onMouseEnter:H,onMouseLeave:O,onFocusCapture:()=>M(!0),onBlurCapture:e=>{e.currentTarget.contains(e.relatedTarget)||M(!1)},onKeyDown:e=>{e.key==="Escape"&&(F(!1),M(!1),e.target?.blur?.())},"aria-label":s,children:v.map(e=>{const r=K===e.key,n=(e.level===0?18:e.level===1?14:e.level===2?11:8)+(r?6:0);return m.jsxs("button",{type:"button",className:`lcl-ftoc-item${r?" active":""}${e.primary?" primary":""}`,onClick:()=>D(e),title:e.text,"aria-current":r?"location":void 0,style:{paddingInlineStart:x?8+e.level*10:0},children:[m.jsx("span",{className:"lcl-ftoc-bar",style:{transform:x?"translateX(0) scaleX(1)":`translateX(${e.level*3}px) scaleX(${n/4})`}}),m.jsx("span",{className:"lcl-ftoc-text",children:e.text})]},e.key)})})})}export{P as F};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as Sn,d as m,j as n,r as yn}from"./index-Bh_nLVTc.js";import{F as Ye,a5 as xe,m as X,fC as Nn,k3 as Fe,k4 as Mn,k5 as Pn,k6 as En,Y as Dn,fG as de,k7 as pe,k8 as ue,k9 as $e,aE as he,aJ as me,aO as On,ka as Ze,ah as In,ai as An,b as Wn,u as U,aS as Tn,hk as Rn,kb as zn,kc as Ln,kd as _n,hN as Fn,ke as $n,hO as Bn,kf as Un,kg as Hn,kh as Vn,ki as Xe,ak as z,kj as we,a4 as Gn,fJ as Be,al as Ue,dZ as Jn,dT as Kn,aa as ge,p as He,am as Ve,an as qn,kk as Yn,a_ as Zn,ae as Xn}from"./appStore-B1ynyt42.js";import"./client-DxGbwZLy.js";import{o as Qn,p as es,$ as ns,a0 as ss,a1 as ts,C as os}from"./RunLocationPicker-CyVa0RJa.js";import{U as as}from"./upload-MVVRQtkj.js";import{F as rs}from"./folder-plus-BRScGQ9m.js";import{L as is}from"./log-out-DFwTeh2X.js";import{P as ls}from"./pencil-BSbra1Ra.js";import"./nativeDownload-CziEyW_p.js";import"./ipc-CPhL3bPp.js";import"./codeStudioStore-C7rGKlOC.js";import"./RightPanel-BVZeVO3c.js";import"./book-open-DBJ3dDpw.js";import"./folder-CvZyHIgb.js";import"./ModelPill-DrW2cG0l.js";import"./create-BjBRKATq.js";import"./approvalText-Cy2UAUAQ.js";import"./SidebarRow-D77yrSLf.js";import"./message-square-plus-CEHkduIL.js";import"./hand-D3QspKYq.js";import"./pageChrome-DFz_AAzZ.js";import"./emoji-Cjm3bKiF.js";const cs=[["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],ds=Ye("folder-minus",cs);const ps=[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 12h18",key:"1i2n21"}],["rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",key:"h1oib"}]],Ge=Ye("grid-2x2",ps),Qe="forsion.homepage.wallpaper.v1",us=32*1024*1024,en={source:"theme",themePreset:"rings",bingDaily:!0,focusBlur:!0,vignette:!0,bing:null},A=t=>typeof t=="string"?t:"";function Je(t){const s=A(t);try{const i=new URL(s);return i.protocol==="https:"&&(i.hostname==="www.bing.com"||i.hostname.endsWith(".bing.com"))?i.toString():""}catch{return""}}function je(t){if(!t||typeof t!="object")return null;const s=t,i=Je(s.url);if(!i)return null;const d=Je(s.thumbnailUrl)||i,p=A(s.startDate);return{id:A(s.id)||p||i,url:i,thumbnailUrl:d,title:A(s.title),copyright:A(s.copyright),startDate:p}}function hs(t){if(!t||typeof t!="object")return{...en};const s=t,i=s.source==="bing"||s.source==="custom"?s.source:"theme",d=s.themePreset==="topography"||s.themePreset==="weave"||s.themePreset==="hack2gate"?s.themePreset:"rings";return{source:i,themePreset:d,bingDaily:s.bingDaily!==!1,focusBlur:s.focusBlur!==!1,vignette:s.vignette!==!1,bing:je(s.bing)}}function ms(){try{return hs(JSON.parse(localStorage.getItem(Qe)||"null"))}catch{return{...en}}}function gs(t){try{localStorage.setItem(Qe,JSON.stringify(t))}catch{}}function fs(t){return(Array.isArray(t)?t:t&&typeof t=="object"&&Array.isArray(t.images)?t.images:[]).flatMap(i=>{if(!i||typeof i!="object")return[];const d=i,p=A(d.urlbase),a=A(d.url),u=p?`https://www.bing.com${p}_UHD.jpg`:a.startsWith("/")?`https://www.bing.com${a}`:a,x=p?`https://www.bing.com${p}_400x240.jpg`:u,l=je({id:A(d.startdate)||p||u,url:u,thumbnailUrl:x,title:d.title,copyright:d.copyright,startDate:d.startdate});return l?[l]:[]})}async function xs(t){if(window.tangu?.wallpaperListBing){const i=await window.tangu.wallpaperListBing(t==="zh"?"zh-CN":"en-US",8);if(!i.ok)throw new Error(i.error||"Bing wallpaper unavailable");return i.items.map(je).filter(d=>!!d)}const s=await fetch(`/api/wallpaper/daily?mkt=${t==="zh"?"zh-CN":"en-US"}&n=8&idx=0`);if(!s.ok)throw new Error(`HTTP ${s.status}`);return fs(await s.json())}const ws="forsion-homepage",Q="wallpaper",ve="custom";function js(){return new Promise((t,s)=>{const i=indexedDB.open(ws,1);i.onupgradeneeded=()=>{i.result.objectStoreNames.contains(Q)||i.result.createObjectStore(Q)},i.onsuccess=()=>t(i.result),i.onerror=()=>s(i.error||new Error("IndexedDB unavailable"))})}async function be(t,s){const i=await js();try{return await new Promise((d,p)=>{const a=i.transaction(Q,t),u=s(a.objectStore(Q));let x;u.onsuccess=()=>{x=u.result},u.onerror=()=>p(u.error||a.error||new Error("Wallpaper storage failed")),a.oncomplete=()=>d(x),a.onerror=()=>p(a.error||new Error("Wallpaper storage failed")),a.onabort=()=>p(a.error||new Error("Wallpaper storage aborted"))})}finally{i.close()}}async function vs(){const t=await be("readonly",s=>s.get(ve));return t instanceof Blob&&t.type.startsWith("image/")?t:null}async function bs(t){if(!t.type.startsWith("image/"))throw new Error("NOT_IMAGE");if(t.size>us)throw new Error("TOO_LARGE");await be("readwrite",s=>s.put(t,ve))}async function Cs(){await be("readwrite",t=>t.delete(ve))}const ee="home",ks=140,Ss=6,nn="forsion.homepage.pinned-spaces.v1",fe="homepage:pinned-spaces",H="homepage:pinned:",ys=["rb-market","rb-achievements"],Ns=["rings","topography","weave","hack2gate"],Ke=t=>{const s=Hn(t);return s.length?s:Ze(t)};function Ms({onDispatch:t,onStartCall:s,onInputModeChange:i}){const d=Wn(o=>o.vaultRoot),p=xe(o=>o.activeSpaceId),a=U(Tn(o=>({cfg:o.cfg,desktopConfig:o.desktopConfig,desktopMode:o.desktopMode,homeDir:o.homeDir,defaultWsDir:o.defaultWsDir,modelsResp:o.modelsResp,newChatWs:o.newChatWs,newChatCfg:o.newChatCfg,newChatModel:o.newChatModel,sessionMode:o.sessionMode,setSessionMode:o.setSessionMode,engines:o.engines,engineCaps:o.engineCaps,agentDefs:o.agentDefs,defaultAgentSlug:o.defaultAgentSlug,skillsList:o.skillsList,connState:o.connState,voiceOnByAgent:o.voiceOnByAgent,ensureEngineCaps:o.ensureEngineCaps,refreshVoiceMode:o.refreshVoiceMode,setSessionModel:o.setSessionModel,setNewChatCfg:o.setNewChatCfg,setSessionThinking:o.setSessionThinking,setDefaultModel:o.setDefaultModel,setModelContextWindow:o.setModelContextWindow,setVoiceMode:o.setVoiceMode,setExecConfig:o.setExecConfig,openSettings:o.openSettings,setNewChatWs:o.setNewChatWs,addLocalWorkspace:o.addLocalWorkspace,addCloudProject:o.addCloudProject,workspaces:o.workspaces,sessions:o.sessions,archivedSessions:o.archivedSessions,cloudProjects:o.cloudProjects,channelWorkspaces:o.channelWorkspaces,tr:o.tr})));Rn();const u=zn(a),x=m.useMemo(()=>a.workspaces(),[a.workspaces,a.sessions,a.archivedSessions,a.cloudProjects,a.channelWorkspaces,a.defaultWsDir,a.homeDir,a.tr,d]),l=Ln(a.sessionMode,u),w=l==="chat"||u.kind==="cloud"||u.kind==="rootless",g=m.useMemo(()=>_n(Fn($n({execMode:w?"sandbox":"host",...Bn(a.desktopConfig,!w,l),cwd:w?void 0:u.path||void 0,...a.newChatCfg},l),d)),[w,l,a.desktopConfig,a.newChatCfg,u.path,d]),k=Un(a)||"",W=a.modelsResp?.models?a.modelsResp.models.filter(o=>(o.modelType||"llm")==="llm"&&(!w||o.source==="forsion")):null,v=g.agentSlug||a.defaultAgentSlug,E=v?!!a.voiceOnByAgent[v]:!1;return m.useEffect(()=>{a.ensureEngineCaps(g.engineId||void 0)},[g.engineId,a.ensureEngineCaps]),m.useEffect(()=>{v&&a.refreshVoiceMode(v)},[v,a.refreshVoiceMode]),n.jsxs("div",{className:"hp-composer",onClick:o=>o.stopPropagation(),onPointerDownCapture:()=>i(!0),onPointerDown:o=>o.stopPropagation(),onFocusCapture:()=>i(!0),onBlurCapture:o=>{o.relatedTarget instanceof Node&&!o.currentTarget.contains(o.relatedTarget)&&i(!1)},onKeyDownCapture:o=>{o.key==="Escape"&&o.target.matches?.(".t2c-ta")&&(o.target.blur(),i(!1))},children:[n.jsx("div",{className:"newchat-pickers",children:n.jsx(ns,{sessionId:null,cfg:g})}),n.jsxs("div",{className:"hp-projectbar",children:[n.jsx(ss,{}),n.jsx(ts,{workspaces:x,value:u.key,onChange:a.setNewChatWs,onAddProject:window.tangu?.pickDirectory?()=>{a.addLocalWorkspace()}:void 0,onAddCloudProject:o=>{a.addCloudProject(o)}})]}),n.jsx(os,{sessionId:null,liveOwner:p==="home",prepareLiveSession:s,autoFocus:!1,disabled:a.connState!=="ok",running:!1,execConfig:g,models:W,modelsResponse:a.modelsResp,modelId:k,onModelChange:o=>a.setSessionModel(o,null),engines:a.engines,engineId:g.engineId,engineModels:g.engineId?a.engineCaps[g.engineId]?.models??[]:void 0,engineModelId:g.engineModelId,onEngineModelChange:o=>a.setNewChatCfg(j=>({...j,engineModelId:o||void 0})),engineCommands:g.engineId?a.engineCaps[g.engineId]?.commands??[]:void 0,thinkingLevel:g.thinkingLevel,ultra:g.ultra,onThinkingChange:(o,j)=>a.setSessionThinking(o,null,void 0,j),defaultModelIds:{backgroundModelId:a.desktopConfig?.backgroundModelId||"",imageModelId:a.cfg.imageModelId||"",visionModelId:a.cfg.visionModelId||""},onDefaultModelChange:a.setDefaultModel,onContextWindowChange:(o,j)=>{a.setModelContextWindow(o,j)},maxIterations:g.maxIterations,onMaxIterationsChange:o=>a.setNewChatCfg(j=>({...j,maxIterations:o})),verifyCommand:g.verifyCommand,onVerifyCommandChange:o=>a.setNewChatCfg(j=>({...j,verifyCommand:o||void 0})),planMode:g.planMode,onPlanModeChange:o=>a.setNewChatCfg(j=>({...j,planMode:o})),preset:g.preset,onPresetChange:o=>a.setSessionMode(o),voiceMode:E,onVoiceModeChange:v?o=>{a.setVoiceMode(v,o)}:void 0,groupChat:g.groupChat,groupAgents:g.groupAgents,groupTempAgents:g.groupTempAgents,onGroupChange:o=>a.setNewChatCfg(j=>({...j,...o})),skills:a.skillsList,agents:a.agentDefs,currentAgentSlug:v,onOpenSettings:()=>a.openSettings("skills"),onExecConfigChange:o=>a.setExecConfig(o,null),onSend:(o,j,T,S,M)=>t(o,j,T,S,M),onStop:()=>{},autoRefFromMain:!1})]})}function F({tile:t}){return t.kind==="space"?n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"hp-tile-icon",children:t.space.icon&&n.jsx(t.space.icon,{size:21})}),n.jsx("span",{className:"hp-tile-name",children:z(t.space.name)})]}):n.jsxs(n.Fragment,{children:[n.jsxs("span",{className:"hp-tile-icon hp-fpreview",children:[t.members.slice(0,4).map(s=>n.jsx("span",{className:"hp-fmini",children:s.icon&&n.jsx(s.icon,{size:11})},s.id)),t.members.length===0&&n.jsx(Gn,{size:19})]}),n.jsx("span",{className:"hp-tile-name",children:t.folder.name}),n.jsx("span",{className:"hp-folder-count",children:t.members.length})]})}function Ps(){try{const t=JSON.parse(localStorage.getItem(nn)||"[]");return Array.isArray(t)?[...new Set(t.filter(s=>typeof s=="string"&&s!==ee))]:[]}catch{return[]}}function Es({item:t}){const s=t.icon,i=t.tooltip?z(t.tooltip):"";return n.jsxs("button",{type:"button",className:"hp-tile hp-pinned-action","data-fixed-id":t.id,draggable:!1,"aria-label":i||void 0,title:i,onClick:t.onClick,children:[n.jsx("span",{className:"hp-tile-icon",children:s&&n.jsx(s,{size:21})}),n.jsx("span",{className:"hp-tile-name",children:i})]})}function Ds({space:t,onLaunch:s}){const i=`${H}${t.id}`,{attributes:d,listeners:p,setNodeRef:a,transform:u,isDragging:x}=Yn({id:i}),l={kind:"space",id:`space:${t.id}`,space:t};return n.jsx("button",{ref:a,type:"button",className:`hp-tile hp-pinned-space${x?" dragging":""}`,"data-space-id":t.id,style:{transform:we.Transform.toString(u)},"aria-label":z(t.name),title:z(t.name),...d,...p,onClick:()=>{x||s(t.id)},children:n.jsx(F,{tile:l})})}function Os({actions:t,spaces:s,onLaunch:i,labelText:d}){const{isOver:p,setNodeRef:a}=Vn({id:fe});return n.jsxs("div",{ref:a,className:"hp-pinned-zone","data-over":p||void 0,"aria-label":d,children:[t.map(u=>n.jsx(Es,{item:u},u.id)),s.map(u=>n.jsx(Ds,{space:u,onLaunch:i},u.id))]})}function qe({tile:t,over:s,open:i,onOpen:d,onLaunch:p,onMenu:a}){const{attributes:u,listeners:x,setNodeRef:l,transform:w,transition:g,isDragging:k}=Xe({id:t.id}),W=t.kind==="space"?z(t.space.name):t.folder.name,v={transform:we.Transform.toString(w),transition:g?`${g}, color var(--duration-fast) var(--ease-out), background var(--duration-fast) var(--ease-out)`:void 0};return n.jsx("button",{ref:l,type:"button",style:v,className:`hp-tile${t.kind==="folder"?" hp-folder":""}${k?" dragging":""}${i?" on":""}`,"data-id":t.id,"data-over":s||void 0,"aria-label":W,title:W,...u,...x,onClick:E=>{k||(t.kind==="folder"?(E.stopPropagation(),d(E,t.id)):p(t.space.id))},onContextMenu:t.kind==="folder"?E=>a(E,t.id):void 0,children:n.jsx(F,{tile:t})})}function Is({member:t,onLaunch:s,onMenu:i}){const d=`space:${t.id}`,{attributes:p,listeners:a,setNodeRef:u,transform:x,transition:l,isDragging:w}=Xe({id:d});return n.jsxs("button",{ref:u,type:"button",className:`hp-folder-app${w?" dragging":""}`,style:{transform:we.Transform.toString(x),transition:l},"data-id":d,title:z(t.name),...p,...a,onClick:()=>{w||s(t.id)},onContextMenu:g=>i(g,d),children:[n.jsx("span",{className:"hp-folder-app-icon",children:t.icon&&n.jsx(t.icon,{size:24})}),n.jsx("span",{children:z(t.name)})]})}function As(t){const s=()=>{const p=new Date;return{time:Kn(p),date:Jn(p,{locale:t}),hour:p.getHours()}},[i,d]=m.useState(s);return m.useEffect(()=>{const p=()=>d(u=>{const x=s();return x.time===u.time&&x.date===u.date?u:x});p();const a=setInterval(p,1e3);return()=>clearInterval(a)},[t]),i}function Ws(){const[t,s]=m.useState("");return m.useEffect(()=>{let i=!0;const d=()=>{window.tangu?.authStatus?.().then(a=>{i&&s(a?.loggedIn&&(a.nickname||a.username)||"")}).catch(()=>{})};d();const p=window.tangu?.onAuthChanged?.(d);return()=>{i=!1,p?.()}},[]),t}function Ts(){const t=xe(l=>l.spaces),s=X(l=>l.order),d=X(l=>l.folders).filter(l=>l.zone==="top"),p=l=>t.find(w=>`space:${w.id}`===l),a=new Set(d.flatMap(l=>l.items)),u=An([...t.map(l=>`space:${l.id}`),...d.map(l=>l.id)],s).filter(l=>!a.has(l)),x=[];for(const l of u){if(l===`space:${ee}`)continue;const w=d.find(k=>k.id===l);if(w){x.push({kind:"folder",id:l,folder:w,members:w.items.map(p).filter(k=>!!k)});continue}const g=p(l);g&&x.push({kind:"space",id:l,space:g})}return{tiles:x,topIds:u,order:s}}yn({"home.folderMenu.renameTitle":{zh:"重命名收纳夹",en:"Rename folder"},"home.folderMenu.rename":{zh:"重命名",en:"Rename"},"home.folderMenu.dissolve":{zh:"解散收纳夹",en:"Dissolve folder"},"home.folderMenu.moveOut":{zh:"移出收纳夹",en:"Move out"}});function ot(t){const{t:s,locale:i}=Sn(),d=i==="zh",p=As(i),a=Ws(),u=xe(e=>e.spaces),x=X(e=>e.items),{tiles:l,topIds:w,order:g}=Ts(),[k,W]=m.useState(Ps),[v,E]=m.useState(null),[o,j]=m.useState(null),[T,S]=m.useState(!1),[M,N]=m.useState(null),[D,y]=m.useState(null),[sn,Ce]=m.useState(!1),[tn,ke]=m.useState(!1),[V,$]=m.useState(!1),[h,ne]=m.useState(ms),[R,se]=m.useState(null),[B,on]=m.useState([]),[Se,ye]=m.useState(!1),[Ne,G]=m.useState(""),[an,rn]=m.useState(0),Me=m.useRef(null),te=m.useRef(null),L=m.useRef(null),J=m.useRef(null),[Pe]=m.useState(()=>{try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}),oe=Nn(Fe(En,{activationConstraint:{distance:6}}),Fe(Pn,{coordinateGetter:Mn}));m.useEffect(()=>{gs(h)},[h]),m.useEffect(()=>{try{localStorage.setItem(nn,JSON.stringify(k))}catch{}},[k]),m.useEffect(()=>{let e=!0;return vs().then(r=>{if(e){if(!r){ne(c=>c.source==="custom"?{...c,source:"theme"}:c);return}se(URL.createObjectURL(r))}}).catch(()=>{}),()=>{e=!1}},[]),m.useEffect(()=>()=>{R&&URL.revokeObjectURL(R)},[R]),m.useEffect(()=>{if(h.source!=="bing")return;let e=!0;return ye(!0),G(""),xs(i).then(r=>{e&&(on(r),r[0]&&ne(c=>c.source==="bing"&&c.bingDaily&&c.bing?.id!==r[0].id?{...c,bing:r[0]}:c))}).catch(()=>{e&&G(s("home.wallpaper.bingError"))}).finally(()=>{e&&ye(!1)}),()=>{e=!1}},[an,i,s,h.source]),m.useEffect(()=>()=>{L.current&&(window.clearTimeout(L.current),L.current=null);const e=J.current;J.current=null,e?.()},[]);const ae=e=>L.current?!1:Pe?(e(),!0):(Ce(!0),J.current=e,L.current=window.setTimeout(()=>{L.current=null,J.current=null,e(),Ce(!1)},ks),!0),K=e=>{const r=Zn?Xn()?.openSpace:void 0;r?r(e):ae(()=>ge(e))},re=u.some(e=>e.id==="tangu"),Ee=p.hour<5?"home.greet.night":p.hour<11?"home.greet.morning":p.hour<18?"home.greet.afternoon":"home.greet.evening",O=()=>X.getState(),ln=()=>{N(null),S(!1),y(null)},q=h.source==="bing"?h.bing?.url||null:h.source==="custom"?R:null,I=e=>{ne(r=>({...r,...e}))},cn=e=>{if(e==="custom"&&!R){te.current?.click();return}if(e==="bing"){I({source:e,bing:h.bing||B[0]||null});return}I({source:e})},dn=e=>{e&&(G(""),bs(e).then(()=>{se(URL.createObjectURL(e)),I({source:"custom"})}).catch(r=>{G(s(r instanceof Error&&r.message==="TOO_LARGE"?"home.wallpaper.tooLarge":"home.wallpaper.invalid"))}))},pn=()=>{Cs().catch(()=>{}),se(null),I({source:"theme"})},un=(e,r)=>{if(!e||e===r)return;const c=qn(g,w),f=c.indexOf(r);O().setZoneOrder("top",Ue(c,e,f>=0?f:c.length))},hn=(e,r)=>{!e||e===r||e.startsWith("folder:")||(O().moveIntoFolder(r,e),O().setZoneOrder("top",Ve(g,w,e)))},mn=e=>{O().moveOutOfFolder(e),O().setZoneOrder("top",[...Ve(g,w,e),e]),S(!0)},gn=()=>{y(null),Be(d?"新建收纳夹":"New folder",d?"收纳夹":"Folder").then(e=>{const r=e?.trim();r&&(O().addFolder("top",r),S(!0))})},De=()=>{E(null),j(null)},Oe=e=>{N(null),y(null),E(String(e.active.id))},Ie=e=>j(e.over?String(e.over.id):null),Ae=e=>De(),We=e=>{const r=String(e.active.id),c=e.over?String(e.over.id):null;if(De(),r.startsWith(H)){if(c!==fe){const b=r.slice(H.length);W(P=>P.filter(_e=>_e!==b))}return}if(c===fe){const b=l.find(P=>P.id===r);b?.kind==="space"&&b.space.id!==ee&&W(P=>P.includes(b.space.id)?P:[...P,b.space.id]);return}if(!c||r===c)return;const f=l.find(b=>b.id===c);!r.startsWith("folder:")&&f?.kind==="folder"?hn(r,c):un(r,c)},ie=(e,r,c)=>{e.preventDefault(),e.stopPropagation(),N(null),y({x:e.clientX,y:e.clientY,kind:r,id:c})},Te=(e,r)=>{const c=e.currentTarget.getBoundingClientRect(),f=Me.current?.getBoundingClientRect();y(null),S(!1),N(b=>b?.id===r?null:{id:r,dx:f?c.left+c.width/2-(f.left+f.width/2):0,dy:f?c.top+c.height/2-(f.top+f.height/2):0})},C=M?l.find(e=>e.id===M.id):void 0,Y=C?.kind==="folder"?C.members:[],Z=l.slice(0,Ss),Re=Math.max(0,l.length-Z.length),_=v?l.find(e=>e.id===v):void 0,le=v?.startsWith(H)?u.find(e=>e.id===v.slice(H.length)):void 0,fn=k.map(e=>u.find(r=>r.id===e)).filter(e=>!!e),xn=ys.map(e=>x.find(r=>r.id===e)).filter(e=>!!e),wn=Math.max(0,u.length-(u.some(e=>e.id===ee)?1:0)),jn=e=>{if(!C||C.kind!=="folder"||!e.over)return;const r=String(e.active.id),c=String(e.over.id);if(r===c)return;const f=C.folder.items.indexOf(c);O().setFolderItems(C.id,Ue(C.folder.items,r,f<0?C.folder.items.length:f))},vn=(e,r,c,f,b)=>re?new Promise(P=>{ae(()=>{ge("tangu"),He.getState().openView("chat",{followActive:!0,reuseKey:"primary"},"main"),P(U.getState().send(e,r,c,f,b,null))})||P(!1)}):Promise.resolve(!1),bn=()=>re?new Promise(e=>{ae(()=>{ge("tangu"),He.getState().openView("chat",{followActive:!0,reuseKey:"primary"},"main");const c=U.getState().activeId;U.getState().newSession().then(()=>{const f=U.getState().activeId;e(f&&f!==c?f:null)},()=>e(null))})||e(null)}):Promise.resolve(null),ce=()=>{const e=document.activeElement;e instanceof HTMLTextAreaElement&&e.matches(".hp-composer .t2c-ta")&&e.blur(),ke(!1)},ze=()=>{ce(),$(!1),N(null),y(null),S(!0)},Cn=e=>{e.target.closest('button, input, textarea, [contenteditable="true"], .hp-composer, .ctx-menu, .hp-wallpaper-sheet')||(e.preventDefault(),e.stopPropagation(),y(null),M?N(null):T?S(!1):V?$(!1):ze())},Le=e=>e.kind==="member"?[{id:"move-out",label:s("home.folderMenu.moveOut"),icon:n.jsx(is,{size:13}),run:()=>{mn(e.id),y(null),N(null)}}]:[{id:"rename",label:s("home.folderMenu.rename"),icon:n.jsx(ls,{size:13}),run:()=>{const r=e.id,c=l.find(f=>f.id===r);y(null),Be(s("home.folderMenu.renameTitle"),c?.kind==="folder"?c.folder.name:"").then(f=>{const b=f?.trim();b&&O().renameFolder(r,b)})}},{id:"dissolve",label:s("home.folderMenu.dissolve"),icon:n.jsx(ds,{size:13}),run:()=>{O().removeFolder(e.id),y(null)}}],kn=Qn(D,()=>{if(!D)return null;const e=D.kind==="folder"?l.find(r=>r.id===D.id):void 0;return{...e?.kind==="folder"?{title:e.folder.name}:{},sections:[{items:Le(D)}]}},()=>y(null));return n.jsxs("div",{ref:Me,className:`hp-root${Pe?" hp-still":""}${tn?" hp-composer-focused":""}${V?" hp-layer-focused":""}${M||T?" hp-secondary-open":""}`,"data-wallpaper":q||h.themePreset==="hack2gate"?"true":void 0,"data-theme-preset":h.themePreset,"data-focus-blur":h.focusBlur?"true":"false","data-vignette":h.vignette?"true":"false",onPointerDown:e=>{e.target.closest(".hp-composer")||ce()},onContextMenu:Cn,onClick:ln,children:[n.jsx("div",{className:"hp-wallpaper",style:q?{backgroundImage:`url(${JSON.stringify(q)})`}:void 0,"aria-hidden":!0}),n.jsx("div",{className:"hp-wallpaper-art","aria-hidden":!0}),n.jsx("div",{className:"hp-wallpaper-edge","aria-hidden":!0}),n.jsx("div",{className:"hp-wallpaper-tone","aria-hidden":!0}),n.jsx("div",{className:"hp-glow","aria-hidden":!0}),n.jsx("button",{type:"button",className:`hp-wallpaper-button${V?" on":""}`,"aria-label":s("home.wallpaper.open"),title:s("home.wallpaper.open"),onClick:e=>{e.stopPropagation(),ce(),y(null),N(null),S(!1),$(r=>!r)},children:n.jsx(Dn,{size:16})}),n.jsxs("div",{className:`hp-stack${sn?" leaving":""}`,children:[n.jsxs("div",{className:"hp-title",children:[n.jsx("div",{className:"hp-brand",children:"Forsion is All You Need"}),n.jsx("div",{className:"hp-clock",children:p.time}),n.jsx("div",{className:"hp-date",children:p.date}),n.jsx("div",{className:"hp-greet",children:a?s(Ee+".named",{name:a}):s(Ee)})]}),re&&n.jsx(Ms,{onDispatch:vn,onStartCall:bn,onInputModeChange:ke}),n.jsx("section",{className:"hp-spaces","data-total":l.length,children:n.jsxs(de,{sensors:oe,collisionDetection:Ke,onDragStart:Oe,onDragOver:Ie,onDragCancel:Ae,onDragEnd:We,children:[n.jsxs("div",{className:"hp-space-row",children:[n.jsx(Os,{actions:xn,spaces:fn,labelText:s("home.pinnedSpaces"),onLaunch:K}),n.jsx("span",{className:"hp-space-divider","aria-hidden":!0}),n.jsx("div",{className:"hp-space-main",children:Z.length>0?n.jsx(pe,{items:Z.map(e=>e.id),strategy:ue,children:n.jsxs("div",{className:"hp-dock",children:[Z.map(e=>n.jsx(qe,{tile:e,over:o===e.id,open:M?.id===e.id,onOpen:Te,onLaunch:K,onMenu:(r,c)=>ie(r,"folder",c)},e.id)),Re>0&&n.jsxs("button",{type:"button",className:"hp-tile hp-more",onClick:e=>{e.stopPropagation(),ze()},title:s("home.showAll"),children:[n.jsx("span",{className:"hp-tile-icon",children:n.jsx(Ge,{size:20})}),n.jsx("span",{className:"hp-tile-name",children:s("home.showAll")}),n.jsxs("span",{className:"hp-more-count",children:["+",Re]})]})]})}):n.jsx("div",{className:"hp-spaces-empty",children:s("home.noSpaces")})})]}),n.jsxs($e,{dropAnimation:null,children:[_&&!T&&n.jsx("div",{className:`hp-tile hp-drag-overlay${_.kind==="folder"?" hp-folder":""}`,children:n.jsx(F,{tile:_})}),le&&!T&&n.jsx("div",{className:"hp-tile hp-drag-overlay hp-pinned-space",children:n.jsx(F,{tile:{kind:"space",id:`space:${le.id}`,space:le}})})]})]})})]}),n.jsx("input",{ref:te,className:"hp-wallpaper-file",type:"file",accept:"image/*",onChange:e=>{dn(e.currentTarget.files?.[0]),e.currentTarget.value=""}}),q&&h.source==="bing"&&h.bing?.copyright&&n.jsx("div",{className:"hp-wallpaper-credit",title:h.bing.copyright,children:h.bing.copyright}),V&&n.jsx("div",{className:"hp-wallpaper-stage",onClick:()=>$(!1),children:n.jsxs("section",{className:"hp-wallpaper-sheet","aria-label":s("home.wallpaper.title"),onClick:e=>e.stopPropagation(),children:[n.jsxs("header",{className:"hp-wallpaper-head",children:[n.jsxs("div",{children:[n.jsx("strong",{children:s("home.wallpaper.title")}),n.jsx("span",{children:s("home.wallpaper.subtitle")})]}),n.jsx("button",{type:"button",onClick:()=>$(!1),"aria-label":s("common.close"),children:n.jsx(he,{size:16})})]}),n.jsx("div",{className:"hp-wallpaper-sources","aria-label":s("home.wallpaper.source"),children:["theme","bing","custom"].map(e=>n.jsxs("button",{type:"button",className:h.source===e?"on":"","aria-pressed":h.source===e,"data-source":e,onClick:()=>cn(e),children:[h.source===e&&n.jsx(me,{size:12}),s(`home.wallpaper.${e}`)]},e))}),Ne&&n.jsx("div",{className:"hp-wallpaper-error",children:Ne}),h.source==="theme"&&n.jsxs("div",{className:"hp-theme-presets",children:[n.jsx("p",{children:s("home.wallpaper.themeHint")}),n.jsx("div",{children:Ns.map(e=>n.jsxs("button",{type:"button",className:h.themePreset===e?"on":"","data-preset":e,"aria-pressed":h.themePreset===e,onClick:()=>I({source:"theme",themePreset:e}),children:[n.jsx("span",{className:"hp-theme-preview","data-preset":e,"aria-hidden":!0}),n.jsx("span",{children:s(`home.wallpaper.preset.${e}`)}),h.themePreset===e&&n.jsx("i",{children:n.jsx(me,{size:11})})]},e))})]}),h.source==="bing"&&n.jsxs("div",{className:"hp-wallpaper-bing",children:[n.jsxs("div",{className:"hp-wallpaper-row",children:[n.jsxs("button",{type:"button",className:`hp-wallpaper-switch${h.bingDaily?" on":""}`,role:"switch","aria-checked":h.bingDaily,onClick:()=>{const e=!h.bingDaily;I({bingDaily:e,bing:e&&B[0]||h.bing})},children:[n.jsx("span",{"aria-hidden":!0})," ",s("home.wallpaper.daily")]}),n.jsxs("button",{type:"button",className:"hp-wallpaper-refresh",disabled:Se,onClick:()=>rn(e=>e+1),children:[n.jsx(On,{size:13})," ",s("home.wallpaper.refresh")]})]}),Se&&B.length===0&&n.jsx("div",{className:"hp-wallpaper-loading",children:s("home.wallpaper.loading")}),B.length>0&&n.jsx("div",{className:"hp-wallpaper-grid",children:B.map((e,r)=>n.jsxs("button",{type:"button",className:h.bing?.id===e.id?"on":"",title:e.copyright||e.title,"aria-label":e.title||e.copyright||s("home.wallpaper.bing"),onClick:()=>I({source:"bing",bing:e,bingDaily:r===0&&h.bingDaily}),children:[n.jsx("img",{src:e.thumbnailUrl,alt:""}),h.bing?.id===e.id&&n.jsx("span",{children:n.jsx(me,{size:12})})]},e.id))})]}),h.source==="custom"&&n.jsxs("div",{className:"hp-wallpaper-custom",children:[n.jsx("div",{className:"hp-wallpaper-custom-preview",style:R?{backgroundImage:`url(${JSON.stringify(R)})`}:void 0}),n.jsxs("div",{children:[n.jsx("strong",{children:s("home.wallpaper.customReady")}),n.jsx("span",{children:s("home.wallpaper.customHint")})]}),n.jsxs("button",{type:"button",onClick:()=>te.current?.click(),children:[n.jsx(as,{size:13})," ",s("home.wallpaper.replace")]}),n.jsx("button",{type:"button",onClick:pn,children:s("home.wallpaper.remove")})]}),n.jsxs("div",{className:"hp-wallpaper-options",children:[n.jsxs("button",{type:"button",className:h.focusBlur?"on":"",role:"switch","aria-checked":h.focusBlur,onClick:()=>I({focusBlur:!h.focusBlur}),children:[n.jsxs("span",{children:[n.jsx("strong",{children:s("home.wallpaper.focusBlur")}),n.jsx("small",{children:s("home.wallpaper.focusBlurHint")})]}),n.jsx("i",{"aria-hidden":!0})]}),n.jsxs("button",{type:"button",className:h.vignette?"on":"",role:"switch","aria-checked":h.vignette,onClick:()=>I({vignette:!h.vignette}),children:[n.jsxs("span",{children:[n.jsx("strong",{children:s("home.wallpaper.vignette")}),n.jsx("small",{children:s("home.wallpaper.vignetteHint")})]}),n.jsx("i",{"aria-hidden":!0})]})]})]})}),T&&n.jsx("div",{className:"hp-organizer-stage",onClick:()=>S(!1),children:n.jsxs("section",{className:"hp-organizer-panel","aria-label":s("home.organizer.title"),onClick:e=>e.stopPropagation(),children:[n.jsxs("header",{className:"hp-organizer-head",children:[n.jsxs("div",{children:[n.jsx("span",{className:"hp-organizer-mark",children:n.jsx(Ge,{size:16})}),n.jsxs("span",{children:[n.jsx("strong",{children:s("home.organizer.title")}),n.jsx("small",{children:s("home.spaceCount",{n:wn})})]})]}),n.jsx("button",{type:"button",onClick:()=>S(!1),"aria-label":s("common.close"),children:n.jsx(he,{size:16})})]}),n.jsxs(de,{sensors:oe,collisionDetection:Ke,onDragStart:Oe,onDragOver:Ie,onDragCancel:Ae,onDragEnd:We,children:[n.jsx(pe,{items:l.map(e=>e.id),strategy:ue,children:n.jsxs("div",{className:"hp-organizer-grid",children:[l.map(e=>n.jsx(qe,{tile:e,over:o===e.id,open:!1,onOpen:Te,onLaunch:r=>{S(!1),K(r)},onMenu:(r,c)=>ie(r,"folder",c)},e.id)),n.jsxs("button",{type:"button",className:"hp-organizer-new",onClick:gn,children:[n.jsx("span",{children:n.jsx(rs,{size:22})}),n.jsx("small",{children:s("home.newFolder")})]})]})}),n.jsx($e,{dropAnimation:null,children:_&&n.jsx("div",{className:`hp-tile hp-drag-overlay${_.kind==="folder"?" hp-folder":""}`,children:n.jsx(F,{tile:_})})})]}),n.jsx("footer",{children:s("home.organizer.hint")})]})}),M&&C?.kind==="folder"&&n.jsx("div",{className:"hp-folder-stage",onClick:()=>N(null),children:n.jsxs("section",{className:"hp-folder-panel",style:{"--hp-folder-dx":`${M.dx}px`,"--hp-folder-dy":`${M.dy}px`},"aria-label":C.folder.name,onClick:e=>e.stopPropagation(),children:[n.jsxs("header",{className:"hp-folder-head",children:[n.jsxs("div",{className:"hp-folder-identity",children:[n.jsx("span",{className:"hp-folder-hero",children:n.jsx(F,{tile:C})}),n.jsxs("span",{children:[n.jsx("strong",{children:C.folder.name}),n.jsx("small",{children:s("home.folderCount",{n:Y.length})})]})]}),n.jsx("button",{type:"button",onClick:()=>N(null),"aria-label":s("common.close"),children:n.jsx(he,{size:16})})]}),Y.length===0&&n.jsx("div",{className:"hp-folder-empty",children:s("home.folderEmpty")}),Y.length>0&&n.jsx(de,{sensors:oe,collisionDetection:Ze,onDragEnd:jn,children:n.jsx(pe,{items:C.folder.items,strategy:ue,children:n.jsx("div",{className:"hp-folder-grid",children:Y.map(e=>n.jsx(Is,{member:e,onLaunch:r=>{N(null),K(r)},onMenu:(r,c)=>ie(r,"member",c)},e.id))})})}),n.jsx("footer",{children:s("home.folderHint")})]})}),D&&kn&&n.jsx(In,{className:"ctx-menu",x:D.x,y:D.y,onClick:e=>e.stopPropagation(),children:n.jsx(es,{items:Le(D)})})]})}export{ot as HomepageView};
|
|
1
|
+
import{u as Sn,d as m,j as n,r as yn}from"./index-BM2o7PeV.js";import{F as Ye,a5 as xe,m as Z,fE as Nn,k5 as Fe,k6 as Mn,k7 as Pn,k8 as En,Y as Dn,fI as de,k9 as pe,ka as ue,kb as $e,aE as he,aJ as me,aO as On,kc as Xe,ah as In,ai as An,b as Wn,u as U,aS as Tn,hm as Rn,kd as zn,ke as Ln,kf as _n,hP as Fn,kg as $n,hQ as Bn,kh as Un,ki as Hn,kj as Vn,kk as Ze,ao as z,kl as we,a4 as Gn,fL as Be,al as Ue,d_ as Kn,dU as qn,aa as ge,p as He,am as Ve,ak as Jn,km as Yn,a_ as Xn,ae as Zn}from"./appStore-DWP8UET9.js";import"./client-0MPbodA6.js";import{o as Qn,p as es,$ as ns,a0 as ss,a1 as ts,C as os}from"./RunLocationPicker-DBnXYV5B.js";import{U as as}from"./upload-ZrOj6tXA.js";import{F as rs}from"./folder-plus-BeQHr4AZ.js";import{L as is}from"./log-out-BEynWaHa.js";import{P as ls}from"./pencil-cqvCkekG.js";import"./nativeDownload-BYT082bY.js";import"./ipc-CxAyeo8q.js";import"./codeStudioStore-BBU62GTy.js";import"./RightPanel-BHDgqTFs.js";import"./book-open-OLNm7OaB.js";import"./folder-BpsfOHD4.js";import"./ModelPill-CY-rU1RU.js";import"./create-BGtEfCcg.js";import"./approvalText-Cy2UAUAQ.js";import"./SidebarRow-BAJxbMcx.js";import"./message-square-plus-CpiKDvle.js";import"./hand-Bko7ms15.js";import"./pageChrome-D3Niv1JM.js";import"./emoji-6zl4yfOS.js";const cs=[["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],ds=Ye("folder-minus",cs);const ps=[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 12h18",key:"1i2n21"}],["rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",key:"h1oib"}]],Ge=Ye("grid-2x2",ps),Qe="forsion.homepage.wallpaper.v1",us=32*1024*1024,en={source:"theme",themePreset:"rings",bingDaily:!0,focusBlur:!0,vignette:!0,bing:null},A=t=>typeof t=="string"?t:"";function Ke(t){const s=A(t);try{const i=new URL(s);return i.protocol==="https:"&&(i.hostname==="www.bing.com"||i.hostname.endsWith(".bing.com"))?i.toString():""}catch{return""}}function je(t){if(!t||typeof t!="object")return null;const s=t,i=Ke(s.url);if(!i)return null;const d=Ke(s.thumbnailUrl)||i,p=A(s.startDate);return{id:A(s.id)||p||i,url:i,thumbnailUrl:d,title:A(s.title),copyright:A(s.copyright),startDate:p}}function hs(t){if(!t||typeof t!="object")return{...en};const s=t,i=s.source==="bing"||s.source==="custom"?s.source:"theme",d=s.themePreset==="topography"||s.themePreset==="weave"||s.themePreset==="hack2gate"?s.themePreset:"rings";return{source:i,themePreset:d,bingDaily:s.bingDaily!==!1,focusBlur:s.focusBlur!==!1,vignette:s.vignette!==!1,bing:je(s.bing)}}function ms(){try{return hs(JSON.parse(localStorage.getItem(Qe)||"null"))}catch{return{...en}}}function gs(t){try{localStorage.setItem(Qe,JSON.stringify(t))}catch{}}function fs(t){return(Array.isArray(t)?t:t&&typeof t=="object"&&Array.isArray(t.images)?t.images:[]).flatMap(i=>{if(!i||typeof i!="object")return[];const d=i,p=A(d.urlbase),a=A(d.url),u=p?`https://www.bing.com${p}_UHD.jpg`:a.startsWith("/")?`https://www.bing.com${a}`:a,x=p?`https://www.bing.com${p}_400x240.jpg`:u,l=je({id:A(d.startdate)||p||u,url:u,thumbnailUrl:x,title:d.title,copyright:d.copyright,startDate:d.startdate});return l?[l]:[]})}async function xs(t){if(window.tangu?.wallpaperListBing){const i=await window.tangu.wallpaperListBing(t==="zh"?"zh-CN":"en-US",8);if(!i.ok)throw new Error(i.error||"Bing wallpaper unavailable");return i.items.map(je).filter(d=>!!d)}const s=await fetch(`/api/wallpaper/daily?mkt=${t==="zh"?"zh-CN":"en-US"}&n=8&idx=0`);if(!s.ok)throw new Error(`HTTP ${s.status}`);return fs(await s.json())}const ws="forsion-homepage",Q="wallpaper",ve="custom";function js(){return new Promise((t,s)=>{const i=indexedDB.open(ws,1);i.onupgradeneeded=()=>{i.result.objectStoreNames.contains(Q)||i.result.createObjectStore(Q)},i.onsuccess=()=>t(i.result),i.onerror=()=>s(i.error||new Error("IndexedDB unavailable"))})}async function be(t,s){const i=await js();try{return await new Promise((d,p)=>{const a=i.transaction(Q,t),u=s(a.objectStore(Q));let x;u.onsuccess=()=>{x=u.result},u.onerror=()=>p(u.error||a.error||new Error("Wallpaper storage failed")),a.oncomplete=()=>d(x),a.onerror=()=>p(a.error||new Error("Wallpaper storage failed")),a.onabort=()=>p(a.error||new Error("Wallpaper storage aborted"))})}finally{i.close()}}async function vs(){const t=await be("readonly",s=>s.get(ve));return t instanceof Blob&&t.type.startsWith("image/")?t:null}async function bs(t){if(!t.type.startsWith("image/"))throw new Error("NOT_IMAGE");if(t.size>us)throw new Error("TOO_LARGE");await be("readwrite",s=>s.put(t,ve))}async function Cs(){await be("readwrite",t=>t.delete(ve))}const ee="home",ks=140,Ss=6,nn="forsion.homepage.pinned-spaces.v1",fe="homepage:pinned-spaces",H="homepage:pinned:",ys=["rb-market","rb-achievements"],Ns=["rings","topography","weave","hack2gate"],qe=t=>{const s=Hn(t);return s.length?s:Xe(t)};function Ms({onDispatch:t,onStartCall:s,onInputModeChange:i}){const d=Wn(o=>o.vaultRoot),p=xe(o=>o.activeSpaceId),a=U(Tn(o=>({cfg:o.cfg,desktopConfig:o.desktopConfig,desktopMode:o.desktopMode,homeDir:o.homeDir,defaultWsDir:o.defaultWsDir,modelsResp:o.modelsResp,newChatWs:o.newChatWs,newChatCfg:o.newChatCfg,newChatModel:o.newChatModel,sessionMode:o.sessionMode,setSessionMode:o.setSessionMode,engines:o.engines,engineCaps:o.engineCaps,agentDefs:o.agentDefs,defaultAgentSlug:o.defaultAgentSlug,skillsList:o.skillsList,connState:o.connState,voiceOnByAgent:o.voiceOnByAgent,ensureEngineCaps:o.ensureEngineCaps,refreshVoiceMode:o.refreshVoiceMode,setSessionModel:o.setSessionModel,setNewChatCfg:o.setNewChatCfg,setSessionThinking:o.setSessionThinking,setDefaultModel:o.setDefaultModel,setModelContextWindow:o.setModelContextWindow,setVoiceMode:o.setVoiceMode,setExecConfig:o.setExecConfig,openSettings:o.openSettings,setNewChatWs:o.setNewChatWs,addLocalWorkspace:o.addLocalWorkspace,addCloudProject:o.addCloudProject,workspaces:o.workspaces,sessions:o.sessions,archivedSessions:o.archivedSessions,cloudProjects:o.cloudProjects,channelWorkspaces:o.channelWorkspaces,tr:o.tr})));Rn();const u=zn(a),x=m.useMemo(()=>a.workspaces(),[a.workspaces,a.sessions,a.archivedSessions,a.cloudProjects,a.channelWorkspaces,a.defaultWsDir,a.homeDir,a.tr,d]),l=Ln(a.sessionMode,u),w=l==="chat"||u.kind==="cloud"||u.kind==="rootless",g=m.useMemo(()=>_n(Fn($n({execMode:w?"sandbox":"host",...Bn(a.desktopConfig,!w,l),cwd:w?void 0:u.path||void 0,...a.newChatCfg},l),d)),[w,l,a.desktopConfig,a.newChatCfg,u.path,d]),k=Un(a)||"",W=a.modelsResp?.models?a.modelsResp.models.filter(o=>(o.modelType||"llm")==="llm"&&(!w||o.source==="forsion")):null,v=g.agentSlug||a.defaultAgentSlug,E=v?!!a.voiceOnByAgent[v]:!1;return m.useEffect(()=>{a.ensureEngineCaps(g.engineId||void 0)},[g.engineId,a.ensureEngineCaps]),m.useEffect(()=>{v&&a.refreshVoiceMode(v)},[v,a.refreshVoiceMode]),n.jsxs("div",{className:"hp-composer",onClick:o=>o.stopPropagation(),onPointerDownCapture:()=>i(!0),onPointerDown:o=>o.stopPropagation(),onFocusCapture:()=>i(!0),onBlurCapture:o=>{o.relatedTarget instanceof Node&&!o.currentTarget.contains(o.relatedTarget)&&i(!1)},onKeyDownCapture:o=>{o.key==="Escape"&&o.target.matches?.(".t2c-ta")&&(o.target.blur(),i(!1))},children:[n.jsx("div",{className:"newchat-pickers",children:n.jsx(ns,{sessionId:null,cfg:g})}),n.jsxs("div",{className:"hp-projectbar",children:[n.jsx(ss,{}),n.jsx(ts,{workspaces:x,value:u.key,onChange:a.setNewChatWs,onAddProject:window.tangu?.pickDirectory?()=>{a.addLocalWorkspace()}:void 0,onAddCloudProject:o=>{a.addCloudProject(o)}})]}),n.jsx(os,{sessionId:null,liveOwner:p==="home",prepareLiveSession:s,autoFocus:!1,disabled:a.connState!=="ok",running:!1,execConfig:g,models:W,modelsResponse:a.modelsResp,modelId:k,onModelChange:o=>a.setSessionModel(o,null),engines:a.engines,engineId:g.engineId,engineModels:g.engineId?a.engineCaps[g.engineId]?.models??[]:void 0,engineModelId:g.engineModelId,onEngineModelChange:o=>a.setNewChatCfg(j=>({...j,engineModelId:o||void 0})),engineCommands:g.engineId?a.engineCaps[g.engineId]?.commands??[]:void 0,thinkingLevel:g.thinkingLevel,ultra:g.ultra,onThinkingChange:(o,j)=>a.setSessionThinking(o,null,void 0,j),defaultModelIds:{backgroundModelId:a.desktopConfig?.backgroundModelId||"",imageModelId:a.cfg.imageModelId||"",visionModelId:a.cfg.visionModelId||""},onDefaultModelChange:a.setDefaultModel,onContextWindowChange:(o,j)=>{a.setModelContextWindow(o,j)},maxIterations:g.maxIterations,onMaxIterationsChange:o=>a.setNewChatCfg(j=>({...j,maxIterations:o})),verifyCommand:g.verifyCommand,onVerifyCommandChange:o=>a.setNewChatCfg(j=>({...j,verifyCommand:o||void 0})),planMode:g.planMode,onPlanModeChange:o=>a.setNewChatCfg(j=>({...j,planMode:o})),preset:g.preset,onPresetChange:o=>a.setSessionMode(o),voiceMode:E,onVoiceModeChange:v?o=>{a.setVoiceMode(v,o)}:void 0,groupChat:g.groupChat,groupAgents:g.groupAgents,groupTempAgents:g.groupTempAgents,onGroupChange:o=>a.setNewChatCfg(j=>({...j,...o})),skills:a.skillsList,agents:a.agentDefs,currentAgentSlug:v,onOpenSettings:()=>a.openSettings("skills"),onExecConfigChange:o=>a.setExecConfig(o,null),onSend:(o,j,T,S,M)=>t(o,j,T,S,M),onStop:()=>{},autoRefFromMain:!1})]})}function F({tile:t}){return t.kind==="space"?n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"hp-tile-icon",children:t.space.icon&&n.jsx(t.space.icon,{size:21})}),n.jsx("span",{className:"hp-tile-name",children:z(t.space.name)})]}):n.jsxs(n.Fragment,{children:[n.jsxs("span",{className:"hp-tile-icon hp-fpreview",children:[t.members.slice(0,4).map(s=>n.jsx("span",{className:"hp-fmini",children:s.icon&&n.jsx(s.icon,{size:11})},s.id)),t.members.length===0&&n.jsx(Gn,{size:19})]}),n.jsx("span",{className:"hp-tile-name",children:t.folder.name}),n.jsx("span",{className:"hp-folder-count",children:t.members.length})]})}function Ps(){try{const t=JSON.parse(localStorage.getItem(nn)||"[]");return Array.isArray(t)?[...new Set(t.filter(s=>typeof s=="string"&&s!==ee))]:[]}catch{return[]}}function Es({item:t}){const s=t.icon,i=t.tooltip?z(t.tooltip):"";return n.jsxs("button",{type:"button",className:"hp-tile hp-pinned-action","data-fixed-id":t.id,draggable:!1,"aria-label":i||void 0,title:i,onClick:t.onClick,children:[n.jsx("span",{className:"hp-tile-icon",children:s&&n.jsx(s,{size:21})}),n.jsx("span",{className:"hp-tile-name",children:i})]})}function Ds({space:t,onLaunch:s}){const i=`${H}${t.id}`,{attributes:d,listeners:p,setNodeRef:a,transform:u,isDragging:x}=Yn({id:i}),l={kind:"space",id:`space:${t.id}`,space:t};return n.jsx("button",{ref:a,type:"button",className:`hp-tile hp-pinned-space${x?" dragging":""}`,"data-space-id":t.id,style:{transform:we.Transform.toString(u)},"aria-label":z(t.name),title:z(t.name),...d,...p,onClick:()=>{x||s(t.id)},children:n.jsx(F,{tile:l})})}function Os({actions:t,spaces:s,onLaunch:i,labelText:d}){const{isOver:p,setNodeRef:a}=Vn({id:fe});return n.jsxs("div",{ref:a,className:"hp-pinned-zone","data-over":p||void 0,"aria-label":d,children:[t.map(u=>n.jsx(Es,{item:u},u.id)),s.map(u=>n.jsx(Ds,{space:u,onLaunch:i},u.id))]})}function Je({tile:t,over:s,open:i,onOpen:d,onLaunch:p,onMenu:a}){const{attributes:u,listeners:x,setNodeRef:l,transform:w,transition:g,isDragging:k}=Ze({id:t.id}),W=t.kind==="space"?z(t.space.name):t.folder.name,v={transform:we.Transform.toString(w),transition:g?`${g}, color var(--duration-fast) var(--ease-out), background var(--duration-fast) var(--ease-out)`:void 0};return n.jsx("button",{ref:l,type:"button",style:v,className:`hp-tile${t.kind==="folder"?" hp-folder":""}${k?" dragging":""}${i?" on":""}`,"data-id":t.id,"data-over":s||void 0,"aria-label":W,title:W,...u,...x,onClick:E=>{k||(t.kind==="folder"?(E.stopPropagation(),d(E,t.id)):p(t.space.id))},onContextMenu:t.kind==="folder"?E=>a(E,t.id):void 0,children:n.jsx(F,{tile:t})})}function Is({member:t,onLaunch:s,onMenu:i}){const d=`space:${t.id}`,{attributes:p,listeners:a,setNodeRef:u,transform:x,transition:l,isDragging:w}=Ze({id:d});return n.jsxs("button",{ref:u,type:"button",className:`hp-folder-app${w?" dragging":""}`,style:{transform:we.Transform.toString(x),transition:l},"data-id":d,title:z(t.name),...p,...a,onClick:()=>{w||s(t.id)},onContextMenu:g=>i(g,d),children:[n.jsx("span",{className:"hp-folder-app-icon",children:t.icon&&n.jsx(t.icon,{size:24})}),n.jsx("span",{children:z(t.name)})]})}function As(t){const s=()=>{const p=new Date;return{time:qn(p),date:Kn(p,{locale:t}),hour:p.getHours()}},[i,d]=m.useState(s);return m.useEffect(()=>{const p=()=>d(u=>{const x=s();return x.time===u.time&&x.date===u.date?u:x});p();const a=setInterval(p,1e3);return()=>clearInterval(a)},[t]),i}function Ws(){const[t,s]=m.useState("");return m.useEffect(()=>{let i=!0;const d=()=>{window.tangu?.authStatus?.().then(a=>{i&&s(a?.loggedIn&&(a.nickname||a.username)||"")}).catch(()=>{})};d();const p=window.tangu?.onAuthChanged?.(d);return()=>{i=!1,p?.()}},[]),t}function Ts(){const t=xe(l=>l.spaces),s=Z(l=>l.order),d=Z(l=>l.folders).filter(l=>l.zone==="top"),p=l=>t.find(w=>`space:${w.id}`===l),a=new Set(d.flatMap(l=>l.items)),u=An([...t.map(l=>`space:${l.id}`),...d.map(l=>l.id)],s).filter(l=>!a.has(l)),x=[];for(const l of u){if(l===`space:${ee}`)continue;const w=d.find(k=>k.id===l);if(w){x.push({kind:"folder",id:l,folder:w,members:w.items.map(p).filter(k=>!!k)});continue}const g=p(l);g&&x.push({kind:"space",id:l,space:g})}return{tiles:x,topIds:u,order:s}}yn({"home.folderMenu.renameTitle":{zh:"重命名收纳夹",en:"Rename folder"},"home.folderMenu.rename":{zh:"重命名",en:"Rename"},"home.folderMenu.dissolve":{zh:"解散收纳夹",en:"Dissolve folder"},"home.folderMenu.moveOut":{zh:"移出收纳夹",en:"Move out"}});function ot(t){const{t:s,locale:i}=Sn(),d=i==="zh",p=As(i),a=Ws(),u=xe(e=>e.spaces),x=Z(e=>e.items),{tiles:l,topIds:w,order:g}=Ts(),[k,W]=m.useState(Ps),[v,E]=m.useState(null),[o,j]=m.useState(null),[T,S]=m.useState(!1),[M,N]=m.useState(null),[D,y]=m.useState(null),[sn,Ce]=m.useState(!1),[tn,ke]=m.useState(!1),[V,$]=m.useState(!1),[h,ne]=m.useState(ms),[R,se]=m.useState(null),[B,on]=m.useState([]),[Se,ye]=m.useState(!1),[Ne,G]=m.useState(""),[an,rn]=m.useState(0),Me=m.useRef(null),te=m.useRef(null),L=m.useRef(null),K=m.useRef(null),[Pe]=m.useState(()=>{try{return window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}),oe=Nn(Fe(En,{activationConstraint:{distance:6}}),Fe(Pn,{coordinateGetter:Mn}));m.useEffect(()=>{gs(h)},[h]),m.useEffect(()=>{try{localStorage.setItem(nn,JSON.stringify(k))}catch{}},[k]),m.useEffect(()=>{let e=!0;return vs().then(r=>{if(e){if(!r){ne(c=>c.source==="custom"?{...c,source:"theme"}:c);return}se(URL.createObjectURL(r))}}).catch(()=>{}),()=>{e=!1}},[]),m.useEffect(()=>()=>{R&&URL.revokeObjectURL(R)},[R]),m.useEffect(()=>{if(h.source!=="bing")return;let e=!0;return ye(!0),G(""),xs(i).then(r=>{e&&(on(r),r[0]&&ne(c=>c.source==="bing"&&c.bingDaily&&c.bing?.id!==r[0].id?{...c,bing:r[0]}:c))}).catch(()=>{e&&G(s("home.wallpaper.bingError"))}).finally(()=>{e&&ye(!1)}),()=>{e=!1}},[an,i,s,h.source]),m.useEffect(()=>()=>{L.current&&(window.clearTimeout(L.current),L.current=null);const e=K.current;K.current=null,e?.()},[]);const ae=e=>L.current?!1:Pe?(e(),!0):(Ce(!0),K.current=e,L.current=window.setTimeout(()=>{L.current=null,K.current=null,e(),Ce(!1)},ks),!0),q=e=>{const r=Xn?Zn()?.openSpace:void 0;r?r(e):ae(()=>ge(e))},re=u.some(e=>e.id==="tangu"),Ee=p.hour<5?"home.greet.night":p.hour<11?"home.greet.morning":p.hour<18?"home.greet.afternoon":"home.greet.evening",O=()=>Z.getState(),ln=()=>{N(null),S(!1),y(null)},J=h.source==="bing"?h.bing?.url||null:h.source==="custom"?R:null,I=e=>{ne(r=>({...r,...e}))},cn=e=>{if(e==="custom"&&!R){te.current?.click();return}if(e==="bing"){I({source:e,bing:h.bing||B[0]||null});return}I({source:e})},dn=e=>{e&&(G(""),bs(e).then(()=>{se(URL.createObjectURL(e)),I({source:"custom"})}).catch(r=>{G(s(r instanceof Error&&r.message==="TOO_LARGE"?"home.wallpaper.tooLarge":"home.wallpaper.invalid"))}))},pn=()=>{Cs().catch(()=>{}),se(null),I({source:"theme"})},un=(e,r)=>{if(!e||e===r)return;const c=Jn(g,w),f=c.indexOf(r);O().setZoneOrder("top",Ue(c,e,f>=0?f:c.length))},hn=(e,r)=>{!e||e===r||e.startsWith("folder:")||(O().moveIntoFolder(r,e),O().setZoneOrder("top",Ve(g,w,e)))},mn=e=>{O().moveOutOfFolder(e),O().setZoneOrder("top",[...Ve(g,w,e),e]),S(!0)},gn=()=>{y(null),Be(d?"新建收纳夹":"New folder",d?"收纳夹":"Folder").then(e=>{const r=e?.trim();r&&(O().addFolder("top",r),S(!0))})},De=()=>{E(null),j(null)},Oe=e=>{N(null),y(null),E(String(e.active.id))},Ie=e=>j(e.over?String(e.over.id):null),Ae=e=>De(),We=e=>{const r=String(e.active.id),c=e.over?String(e.over.id):null;if(De(),r.startsWith(H)){if(c!==fe){const b=r.slice(H.length);W(P=>P.filter(_e=>_e!==b))}return}if(c===fe){const b=l.find(P=>P.id===r);b?.kind==="space"&&b.space.id!==ee&&W(P=>P.includes(b.space.id)?P:[...P,b.space.id]);return}if(!c||r===c)return;const f=l.find(b=>b.id===c);!r.startsWith("folder:")&&f?.kind==="folder"?hn(r,c):un(r,c)},ie=(e,r,c)=>{e.preventDefault(),e.stopPropagation(),N(null),y({x:e.clientX,y:e.clientY,kind:r,id:c})},Te=(e,r)=>{const c=e.currentTarget.getBoundingClientRect(),f=Me.current?.getBoundingClientRect();y(null),S(!1),N(b=>b?.id===r?null:{id:r,dx:f?c.left+c.width/2-(f.left+f.width/2):0,dy:f?c.top+c.height/2-(f.top+f.height/2):0})},C=M?l.find(e=>e.id===M.id):void 0,Y=C?.kind==="folder"?C.members:[],X=l.slice(0,Ss),Re=Math.max(0,l.length-X.length),_=v?l.find(e=>e.id===v):void 0,le=v?.startsWith(H)?u.find(e=>e.id===v.slice(H.length)):void 0,fn=k.map(e=>u.find(r=>r.id===e)).filter(e=>!!e),xn=ys.map(e=>x.find(r=>r.id===e)).filter(e=>!!e),wn=Math.max(0,u.length-(u.some(e=>e.id===ee)?1:0)),jn=e=>{if(!C||C.kind!=="folder"||!e.over)return;const r=String(e.active.id),c=String(e.over.id);if(r===c)return;const f=C.folder.items.indexOf(c);O().setFolderItems(C.id,Ue(C.folder.items,r,f<0?C.folder.items.length:f))},vn=(e,r,c,f,b)=>re?new Promise(P=>{ae(()=>{ge("tangu"),He.getState().openView("chat",{followActive:!0,reuseKey:"primary"},"main"),P(U.getState().send(e,r,c,f,b,null))})||P(!1)}):Promise.resolve(!1),bn=()=>re?new Promise(e=>{ae(()=>{ge("tangu"),He.getState().openView("chat",{followActive:!0,reuseKey:"primary"},"main");const c=U.getState().activeId;U.getState().newSession().then(()=>{const f=U.getState().activeId;e(f&&f!==c?f:null)},()=>e(null))})||e(null)}):Promise.resolve(null),ce=()=>{const e=document.activeElement;e instanceof HTMLTextAreaElement&&e.matches(".hp-composer .t2c-ta")&&e.blur(),ke(!1)},ze=()=>{ce(),$(!1),N(null),y(null),S(!0)},Cn=e=>{e.target.closest('button, input, textarea, [contenteditable="true"], .hp-composer, .ctx-menu, .hp-wallpaper-sheet')||(e.preventDefault(),e.stopPropagation(),y(null),M?N(null):T?S(!1):V?$(!1):ze())},Le=e=>e.kind==="member"?[{id:"move-out",label:s("home.folderMenu.moveOut"),icon:n.jsx(is,{size:13}),run:()=>{mn(e.id),y(null),N(null)}}]:[{id:"rename",label:s("home.folderMenu.rename"),icon:n.jsx(ls,{size:13}),run:()=>{const r=e.id,c=l.find(f=>f.id===r);y(null),Be(s("home.folderMenu.renameTitle"),c?.kind==="folder"?c.folder.name:"").then(f=>{const b=f?.trim();b&&O().renameFolder(r,b)})}},{id:"dissolve",label:s("home.folderMenu.dissolve"),icon:n.jsx(ds,{size:13}),run:()=>{O().removeFolder(e.id),y(null)}}],kn=Qn(D,()=>{if(!D)return null;const e=D.kind==="folder"?l.find(r=>r.id===D.id):void 0;return{...e?.kind==="folder"?{title:e.folder.name}:{},sections:[{items:Le(D)}]}},()=>y(null));return n.jsxs("div",{ref:Me,className:`hp-root${Pe?" hp-still":""}${tn?" hp-composer-focused":""}${V?" hp-layer-focused":""}${M||T?" hp-secondary-open":""}`,"data-wallpaper":J||h.themePreset==="hack2gate"?"true":void 0,"data-theme-preset":h.themePreset,"data-focus-blur":h.focusBlur?"true":"false","data-vignette":h.vignette?"true":"false",onPointerDown:e=>{e.target.closest(".hp-composer")||ce()},onContextMenu:Cn,onClick:ln,children:[n.jsx("div",{className:"hp-wallpaper",style:J?{backgroundImage:`url(${JSON.stringify(J)})`}:void 0,"aria-hidden":!0}),n.jsx("div",{className:"hp-wallpaper-art","aria-hidden":!0}),n.jsx("div",{className:"hp-wallpaper-edge","aria-hidden":!0}),n.jsx("div",{className:"hp-wallpaper-tone","aria-hidden":!0}),n.jsx("div",{className:"hp-glow","aria-hidden":!0}),n.jsx("button",{type:"button",className:`hp-wallpaper-button${V?" on":""}`,"aria-label":s("home.wallpaper.open"),title:s("home.wallpaper.open"),onClick:e=>{e.stopPropagation(),ce(),y(null),N(null),S(!1),$(r=>!r)},children:n.jsx(Dn,{size:16})}),n.jsxs("div",{className:`hp-stack${sn?" leaving":""}`,children:[n.jsxs("div",{className:"hp-title",children:[n.jsx("div",{className:"hp-brand",children:"Forsion is All You Need"}),n.jsx("div",{className:"hp-clock",children:p.time}),n.jsx("div",{className:"hp-date",children:p.date}),n.jsx("div",{className:"hp-greet",children:a?s(Ee+".named",{name:a}):s(Ee)})]}),re&&n.jsx(Ms,{onDispatch:vn,onStartCall:bn,onInputModeChange:ke}),n.jsx("section",{className:"hp-spaces","data-total":l.length,children:n.jsxs(de,{sensors:oe,collisionDetection:qe,onDragStart:Oe,onDragOver:Ie,onDragCancel:Ae,onDragEnd:We,children:[n.jsxs("div",{className:"hp-space-row",children:[n.jsx(Os,{actions:xn,spaces:fn,labelText:s("home.pinnedSpaces"),onLaunch:q}),n.jsx("span",{className:"hp-space-divider","aria-hidden":!0}),n.jsx("div",{className:"hp-space-main",children:X.length>0?n.jsx(pe,{items:X.map(e=>e.id),strategy:ue,children:n.jsxs("div",{className:"hp-dock",children:[X.map(e=>n.jsx(Je,{tile:e,over:o===e.id,open:M?.id===e.id,onOpen:Te,onLaunch:q,onMenu:(r,c)=>ie(r,"folder",c)},e.id)),Re>0&&n.jsxs("button",{type:"button",className:"hp-tile hp-more",onClick:e=>{e.stopPropagation(),ze()},title:s("home.showAll"),children:[n.jsx("span",{className:"hp-tile-icon",children:n.jsx(Ge,{size:20})}),n.jsx("span",{className:"hp-tile-name",children:s("home.showAll")}),n.jsxs("span",{className:"hp-more-count",children:["+",Re]})]})]})}):n.jsx("div",{className:"hp-spaces-empty",children:s("home.noSpaces")})})]}),n.jsxs($e,{dropAnimation:null,children:[_&&!T&&n.jsx("div",{className:`hp-tile hp-drag-overlay${_.kind==="folder"?" hp-folder":""}`,children:n.jsx(F,{tile:_})}),le&&!T&&n.jsx("div",{className:"hp-tile hp-drag-overlay hp-pinned-space",children:n.jsx(F,{tile:{kind:"space",id:`space:${le.id}`,space:le}})})]})]})})]}),n.jsx("input",{ref:te,className:"hp-wallpaper-file",type:"file",accept:"image/*",onChange:e=>{dn(e.currentTarget.files?.[0]),e.currentTarget.value=""}}),J&&h.source==="bing"&&h.bing?.copyright&&n.jsx("div",{className:"hp-wallpaper-credit",title:h.bing.copyright,children:h.bing.copyright}),V&&n.jsx("div",{className:"hp-wallpaper-stage",onClick:()=>$(!1),children:n.jsxs("section",{className:"hp-wallpaper-sheet","aria-label":s("home.wallpaper.title"),onClick:e=>e.stopPropagation(),children:[n.jsxs("header",{className:"hp-wallpaper-head",children:[n.jsxs("div",{children:[n.jsx("strong",{children:s("home.wallpaper.title")}),n.jsx("span",{children:s("home.wallpaper.subtitle")})]}),n.jsx("button",{type:"button",onClick:()=>$(!1),"aria-label":s("common.close"),children:n.jsx(he,{size:16})})]}),n.jsx("div",{className:"hp-wallpaper-sources","aria-label":s("home.wallpaper.source"),children:["theme","bing","custom"].map(e=>n.jsxs("button",{type:"button",className:h.source===e?"on":"","aria-pressed":h.source===e,"data-source":e,onClick:()=>cn(e),children:[h.source===e&&n.jsx(me,{size:12}),s(`home.wallpaper.${e}`)]},e))}),Ne&&n.jsx("div",{className:"hp-wallpaper-error",children:Ne}),h.source==="theme"&&n.jsxs("div",{className:"hp-theme-presets",children:[n.jsx("p",{children:s("home.wallpaper.themeHint")}),n.jsx("div",{children:Ns.map(e=>n.jsxs("button",{type:"button",className:h.themePreset===e?"on":"","data-preset":e,"aria-pressed":h.themePreset===e,onClick:()=>I({source:"theme",themePreset:e}),children:[n.jsx("span",{className:"hp-theme-preview","data-preset":e,"aria-hidden":!0}),n.jsx("span",{children:s(`home.wallpaper.preset.${e}`)}),h.themePreset===e&&n.jsx("i",{children:n.jsx(me,{size:11})})]},e))})]}),h.source==="bing"&&n.jsxs("div",{className:"hp-wallpaper-bing",children:[n.jsxs("div",{className:"hp-wallpaper-row",children:[n.jsxs("button",{type:"button",className:`hp-wallpaper-switch${h.bingDaily?" on":""}`,role:"switch","aria-checked":h.bingDaily,onClick:()=>{const e=!h.bingDaily;I({bingDaily:e,bing:e&&B[0]||h.bing})},children:[n.jsx("span",{"aria-hidden":!0})," ",s("home.wallpaper.daily")]}),n.jsxs("button",{type:"button",className:"hp-wallpaper-refresh",disabled:Se,onClick:()=>rn(e=>e+1),children:[n.jsx(On,{size:13})," ",s("home.wallpaper.refresh")]})]}),Se&&B.length===0&&n.jsx("div",{className:"hp-wallpaper-loading",children:s("home.wallpaper.loading")}),B.length>0&&n.jsx("div",{className:"hp-wallpaper-grid",children:B.map((e,r)=>n.jsxs("button",{type:"button",className:h.bing?.id===e.id?"on":"",title:e.copyright||e.title,"aria-label":e.title||e.copyright||s("home.wallpaper.bing"),onClick:()=>I({source:"bing",bing:e,bingDaily:r===0&&h.bingDaily}),children:[n.jsx("img",{src:e.thumbnailUrl,alt:""}),h.bing?.id===e.id&&n.jsx("span",{children:n.jsx(me,{size:12})})]},e.id))})]}),h.source==="custom"&&n.jsxs("div",{className:"hp-wallpaper-custom",children:[n.jsx("div",{className:"hp-wallpaper-custom-preview",style:R?{backgroundImage:`url(${JSON.stringify(R)})`}:void 0}),n.jsxs("div",{children:[n.jsx("strong",{children:s("home.wallpaper.customReady")}),n.jsx("span",{children:s("home.wallpaper.customHint")})]}),n.jsxs("button",{type:"button",onClick:()=>te.current?.click(),children:[n.jsx(as,{size:13})," ",s("home.wallpaper.replace")]}),n.jsx("button",{type:"button",onClick:pn,children:s("home.wallpaper.remove")})]}),n.jsxs("div",{className:"hp-wallpaper-options",children:[n.jsxs("button",{type:"button",className:h.focusBlur?"on":"",role:"switch","aria-checked":h.focusBlur,onClick:()=>I({focusBlur:!h.focusBlur}),children:[n.jsxs("span",{children:[n.jsx("strong",{children:s("home.wallpaper.focusBlur")}),n.jsx("small",{children:s("home.wallpaper.focusBlurHint")})]}),n.jsx("i",{"aria-hidden":!0})]}),n.jsxs("button",{type:"button",className:h.vignette?"on":"",role:"switch","aria-checked":h.vignette,onClick:()=>I({vignette:!h.vignette}),children:[n.jsxs("span",{children:[n.jsx("strong",{children:s("home.wallpaper.vignette")}),n.jsx("small",{children:s("home.wallpaper.vignetteHint")})]}),n.jsx("i",{"aria-hidden":!0})]})]})]})}),T&&n.jsx("div",{className:"hp-organizer-stage",onClick:()=>S(!1),children:n.jsxs("section",{className:"hp-organizer-panel","aria-label":s("home.organizer.title"),onClick:e=>e.stopPropagation(),children:[n.jsxs("header",{className:"hp-organizer-head",children:[n.jsxs("div",{children:[n.jsx("span",{className:"hp-organizer-mark",children:n.jsx(Ge,{size:16})}),n.jsxs("span",{children:[n.jsx("strong",{children:s("home.organizer.title")}),n.jsx("small",{children:s("home.spaceCount",{n:wn})})]})]}),n.jsx("button",{type:"button",onClick:()=>S(!1),"aria-label":s("common.close"),children:n.jsx(he,{size:16})})]}),n.jsxs(de,{sensors:oe,collisionDetection:qe,onDragStart:Oe,onDragOver:Ie,onDragCancel:Ae,onDragEnd:We,children:[n.jsx(pe,{items:l.map(e=>e.id),strategy:ue,children:n.jsxs("div",{className:"hp-organizer-grid",children:[l.map(e=>n.jsx(Je,{tile:e,over:o===e.id,open:!1,onOpen:Te,onLaunch:r=>{S(!1),q(r)},onMenu:(r,c)=>ie(r,"folder",c)},e.id)),n.jsxs("button",{type:"button",className:"hp-organizer-new",onClick:gn,children:[n.jsx("span",{children:n.jsx(rs,{size:22})}),n.jsx("small",{children:s("home.newFolder")})]})]})}),n.jsx($e,{dropAnimation:null,children:_&&n.jsx("div",{className:`hp-tile hp-drag-overlay${_.kind==="folder"?" hp-folder":""}`,children:n.jsx(F,{tile:_})})})]}),n.jsx("footer",{children:s("home.organizer.hint")})]})}),M&&C?.kind==="folder"&&n.jsx("div",{className:"hp-folder-stage",onClick:()=>N(null),children:n.jsxs("section",{className:"hp-folder-panel",style:{"--hp-folder-dx":`${M.dx}px`,"--hp-folder-dy":`${M.dy}px`},"aria-label":C.folder.name,onClick:e=>e.stopPropagation(),children:[n.jsxs("header",{className:"hp-folder-head",children:[n.jsxs("div",{className:"hp-folder-identity",children:[n.jsx("span",{className:"hp-folder-hero",children:n.jsx(F,{tile:C})}),n.jsxs("span",{children:[n.jsx("strong",{children:C.folder.name}),n.jsx("small",{children:s("home.folderCount",{n:Y.length})})]})]}),n.jsx("button",{type:"button",onClick:()=>N(null),"aria-label":s("common.close"),children:n.jsx(he,{size:16})})]}),Y.length===0&&n.jsx("div",{className:"hp-folder-empty",children:s("home.folderEmpty")}),Y.length>0&&n.jsx(de,{sensors:oe,collisionDetection:Xe,onDragEnd:jn,children:n.jsx(pe,{items:C.folder.items,strategy:ue,children:n.jsx("div",{className:"hp-folder-grid",children:Y.map(e=>n.jsx(Is,{member:e,onLaunch:r=>{N(null),q(r)},onMenu:(r,c)=>ie(r,"member",c)},e.id))})})}),n.jsx("footer",{children:s("home.folderHint")})]})}),D&&kn&&n.jsx(In,{className:"ctx-menu",x:D.x,y:D.y,onClick:e=>e.stopPropagation(),children:n.jsx(es,{items:Le(D)})})]})}export{ot as HomepageView};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{u as M,d as j,j as e,t as E}from"./index-
|
|
1
|
+
import{u as M,d as j,j as e,t as E}from"./index-BM2o7PeV.js";import{F as L,u as $,K as A,kr as O,cs as K,ko as P,T as q,aM as W,aq as B,hj as Q,bH as J,bI as Z,bJ as ee,bU as ie,aN as te,p as ae}from"./appStore-DWP8UET9.js";import"./client-0MPbodA6.js";import{v as se,E as ne,o as oe,u as S,b as D,i as k,r as T,c as re,m as H,d as le,f as de,t as ce}from"./RightPanel-BHDgqTFs.js";import{C as me,G as ue}from"./codingNavigation-DDlPpPk5.js";import{q as he,t as pe,a as _,v as ge,w as xe,x as U,L as G,y as je,z as Se,e as fe,p as be,I as ve,b as ye,d as we}from"./imageStudio-BLVNKmEG.js";import{L as Ne}from"./lock-CnbZm4vo.js";import{L as Ce}from"./InlineFiles-CQbQumkf.js";import{R as ke}from"./rotate-ccw-BvipPIjC.js";import{L as Ie}from"./layout-grid-BBVuEdWG.js";import"./nativeDownload-BYT082bY.js";import"./ipc-CxAyeo8q.js";import"./book-open-OLNm7OaB.js";import"./folder-plus-BeQHr4AZ.js";import"./folder-BpsfOHD4.js";import"./upload-ZrOj6tXA.js";import"./pencil-cqvCkekG.js";import"./RunLocationPicker-DBnXYV5B.js";import"./codeStudioStore-BBU62GTy.js";import"./ModelPill-CY-rU1RU.js";import"./create-BGtEfCcg.js";import"./approvalText-Cy2UAUAQ.js";import"./SidebarRow-BAJxbMcx.js";import"./message-square-plus-CpiKDvle.js";import"./hand-Bko7ms15.js";import"./pageChrome-D3Niv1JM.js";import"./emoji-6zl4yfOS.js";import"./pdf.worker.min-CGb3BKV9.js";import"./code-xml-Cuna8Kh4.js";import"./zoom-in-lbTgzdQP.js";import"./undo-2-DusxpdLa.js";import"./SketchCard-BGYz-bXP.js";import"./terminal-l9k6RDrH.js";import"./circle-x-fcReAZaE.js";import"./circle-question-mark-XbAFplz1.js";import"./FloatingToc-Ce9GamvH.js";import"./MarkdownBlock-CkqiwPXa.js";import"./index-CuiYK18N.js";import"./linkFollow-B7ivDZMM.js";import"./mdMarks-DbIcRa0O.js";import"./listFold-DLuxXiIj.js";import"./mdMarkStore-DQHDjG7s.js";import"./arrow-up-right-DrCXuWS7.js";const Me=[["path",{d:"M6 2v14a2 2 0 0 0 2 2h14",key:"ron5a4"}],["path",{d:"M18 22V8a2 2 0 0 0-2-2H2",key:"7s9ehn"}]],ze=L("crop",Me);const Ee=[["path",{d:"m3 7 5 5-5 5V7",key:"couhi7"}],["path",{d:"m21 7-5 5 5 5V7",key:"6ouia7"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 14v2",key:"8jcxud"}],["path",{d:"M12 8v2",key:"1woqiv"}],["path",{d:"M12 2v2",key:"tus03m"}]],$e=L("flip-horizontal-2",Ee);const Le=[["path",{d:"m17 3-5 5-5-5h10",key:"1ftt6x"}],["path",{d:"m17 21-5-5-5 5h10",key:"1m0wmu"}],["path",{d:"M4 12H2",key:"rhcxmi"}],["path",{d:"M10 12H8",key:"s88cx1"}],["path",{d:"M16 12h-2",key:"10asgb"}],["path",{d:"M22 12h-2",key:"14jgyd"}]],Pe=L("flip-vertical-2",Le);function Re({image:i,onApply:r,onCancel:n}){const{t:l}=M(),a=he(i.blob),[c,d]=j.useState(i.crop||{x:0,y:0,w:i.width,h:i.height}),s=j.useRef(null),p=j.useRef(null),f=o=>{const m=Math.max(0,Math.min(i.width-1,Math.round(o.x))),b=Math.max(0,Math.min(i.height-1,Math.round(o.y)));return{x:m,y:b,w:Math.max(1,Math.min(i.width-m,Math.round(o.w))),h:Math.max(1,Math.min(i.height-b,Math.round(o.h)))}};return e.jsxs("div",{className:"ims-crop",onKeyDown:o=>{o.key==="Escape"&&(o.stopPropagation(),n())},children:[e.jsx("h4",{children:l("imageStudio.crop")}),e.jsx("p",{children:l("imageStudio.cropHint")}),e.jsxs("div",{ref:p,className:"ims-crop-stage",style:{aspectRatio:i.width/i.height},onPointerDown:o=>{const m=o.currentTarget.getBoundingClientRect(),b=o.target.dataset.edge||"move";s.current={pointer:o.pointerId,x:o.clientX,y:o.clientY,base:c,edge:b,sx:i.width/m.width,sy:i.height/m.height},o.currentTarget.setPointerCapture(o.pointerId),o.preventDefault()},onPointerMove:o=>{const m=s.current;if(!m||m.pointer!==o.pointerId)return;const b=(o.clientX-m.x)*m.sx,g=(o.clientY-m.y)*m.sy,h=m.base;if(m.edge==="move")d(f({...h,x:Math.max(0,Math.min(i.width-h.w,h.x+b)),y:Math.max(0,Math.min(i.height-h.h,h.y+g))}));else{const y=m.edge.includes("w")?Math.max(0,Math.min(h.x+h.w-1,h.x+b)):h.x,t=m.edge.includes("n")?Math.max(0,Math.min(h.y+h.h-1,h.y+g)):h.y,x=m.edge.includes("e")?Math.min(i.width,Math.max(h.x+1,h.x+h.w+b)):h.x+h.w,v=m.edge.includes("s")?Math.min(i.height,Math.max(h.y+1,h.y+h.h+g)):h.y+h.h;d(f({x:y,y:t,w:x-y,h:v-t}))}},onPointerUp:()=>{s.current=null},onPointerCancel:()=>{s.current=null},children:[a&&e.jsx("img",{src:a,alt:i.name,draggable:!1}),e.jsx("div",{className:"ims-crop-box",style:{left:`${c.x/i.width*100}%`,top:`${c.y/i.height*100}%`,width:`${c.w/i.width*100}%`,height:`${c.h/i.height*100}%`},children:["nw","ne","sw","se"].map(o=>e.jsx("span",{"data-edge":o,className:`ims-crop-handle ${o}`},o))})]}),e.jsxs("select",{"aria-label":l("imageStudio.cropRatio"),defaultValue:"",onChange:o=>{const m=Number(o.target.value)||i.width/i.height,b=Math.min(i.width,i.height*m),g=b/m;d(f({x:(i.width-b)/2,y:(i.height-g)/2,w:b,h:g}))},children:[e.jsx("option",{value:"",disabled:!0,children:l("imageStudio.cropRatio")}),e.jsx("option",{value:"0",children:l("imageStudio.original")}),[[1,"1:1"],[.8,"4:5"],[2/3,"2:3"],[16/9,"16:9"],[9/16,"9:16"]].map(([o,m])=>e.jsx("option",{value:o,children:m},m))]}),e.jsx("div",{className:"ims-fields",children:["x","y","w","h"].map(o=>e.jsxs("label",{children:[l(`imageStudio.${o}`),e.jsx("input",{type:"number","aria-label":l(`imageStudio.crop.${o}`),value:c[o],min:o==="x"||o==="y"?0:1,max:o==="x"||o==="w"?i.width:i.height,onChange:m=>d(f({...c,[o]:Number(m.target.value)||0}))})]},o))}),e.jsxs("div",{className:"ims-button-row",children:[e.jsx("button",{onClick:n,children:l("imageStudio.cancel")}),e.jsx("button",{className:"ims-primary",disabled:!se(c,i.width,i.height),onClick:()=>r(c),children:l("imageStudio.applyCrop")})]})]})}const Fe=ne,Ae=["low","medium","high","xhigh","max"];function Te(i,r,n,l){const[a,c]=n.split(":").map(Number),d=1+Math.max(.1,Math.min(1,l)),s=Math.ceil(Math.max(i*d,r*d*a/c)),p=Math.ceil(s*c/a);return{w:s,h:p,x:Math.floor((s-i)/2),y:Math.floor((p-r)/2)}}async function qe(i,r,n,l,a){if(!i.length||i.length>8)throw new Error(E("imageStudio.ai.referenceLimit"));if(r!=="expand")return Promise.all(i.map(s=>pe(s,a)));const c=await _([i[0]],!0,1024),d=await ge(c);try{const s=Te(d.width,d.height,n,l),p=Math.min(1,1536/Math.max(s.w,s.h)),f=document.createElement("canvas");f.width=Math.round(s.w*p),f.height=Math.round(s.h*p);const o=f.getContext("2d");if(!o)throw new Error("Canvas unavailable");o.drawImage(d,s.x*p,s.y*p,d.width*p,d.height*p);const m=await new Promise((g,h)=>f.toBlob(y=>y?g(y):h(new Error("PNG encoding failed")),"image/png")),b=await xe(m);return[{name:"expand-reference.png",mimeType:"image/png",size:m.size,data:b.split(",")[1]}]}finally{d.close()}}function Be(i,r,n,l,a,c=""){return[E(`imageStudio.ai.prompt.${i}`),E(`imageStudio.ai.sourcePrompt.${i==="expand"?"current":a}`),r.trim(),E("imageStudio.ai.outputPrompt",{ratio:n.requested,engineRatio:n.engine,count:l}),c?E("imageStudio.ai.qualityPrompt",{quality:c}):""].filter(Boolean).join(`
|
|
2
2
|
|
|
3
|
-
`)}function qe({board:i,images:r}){const{t:n}=M(),[l,a]=j.useState("edit"),[c,d]=j.useState(""),[s,p]=j.useState("original"),[f,o]=j.useState("current"),[m,b]=j.useState(1),[g,h]=j.useState(.5),[y,t]=j.useState(""),[x,v]=j.useState(!1),[w,R]=j.useState(""),C=$(u=>!!(i.sessionId&&u.runningBySession[i.sessionId])),N=oe(r[0],s),V=async()=>{v(!0),R("");let u=[];try{const I=await G(i.id);if(S.getState().activeId!==i.id)return;if($.getState().runningBySession[I])throw new Error(n("imageStudio.ai.wait"));u=S.getState().beginGeneration(i.id,I,{count:m,aspect:N.aspect,ratio:N.requested,kind:"edit",sourceIds:r.map(Y=>Y.id)});const F=l==="expand"?"current":f,X=await Be(r,l,N.requested,g,F);if(!await $.getState().send(De(l,c,N,m,F,y),X,void 0,void 0,void 0,I))throw new Error(n("imageStudio.ai.sendFailed"));S.getState().activateGeneration(u)}catch(I){u.length&&S.getState().failGeneration(i.id,{ids:u}),R(I instanceof Error?I.message:String(I))}finally{v(!1)}};return e.jsxs("details",{className:"ims-ai",open:!0,children:[e.jsxs("summary",{children:[e.jsx(A,{size:15}),n("imageStudio.ai.title"),e.jsxs("span",{children:[r.length," ",n("imageStudio.ai.references")]})]}),e.jsxs("div",{className:"ims-ai-body",children:[e.jsx("div",{className:"ims-ai-modes",role:"group","aria-label":n("imageStudio.ai.mode"),children:["edit","background","expand"].map(u=>e.jsx("button",{"aria-pressed":l===u,disabled:C||x||u!=="edit"&&r.length!==1,onClick:()=>a(u),children:n(`imageStudio.ai.${u}`)},u))}),e.jsx("p",{className:"ims-caption",children:n(`imageStudio.ai.hint.${l}`)}),e.jsx("textarea",{"aria-label":n("imageStudio.ai.instruction"),placeholder:n("imageStudio.ai.placeholder"),value:c,onChange:u=>d(u.target.value),maxLength:8e3,rows:3,disabled:x||C}),e.jsxs("label",{className:"ims-ai-source",children:[n("imageStudio.ai.source"),e.jsxs("select",{"aria-label":n("imageStudio.ai.source"),value:l==="expand"?"current":f,onChange:u=>o(u.target.value),disabled:x||C||l==="expand",children:[e.jsx("option",{value:"current",children:n("imageStudio.ai.source.current")}),e.jsx("option",{value:"original",children:n("imageStudio.ai.source.original")})]})]}),e.jsxs("div",{className:"ims-fields",children:[e.jsxs("label",{children:[n("imageStudio.ai.ratio"),e.jsxs("select",{"aria-label":n("imageStudio.ai.ratio"),value:s,onChange:u=>p(u.target.value),disabled:x||C,children:[e.jsx("option",{value:"original",children:n("imageStudio.ai.ratio.original",{ratio:N.originalLabel})}),Fe.map(u=>e.jsx("option",{value:u,children:u},u))]})]}),e.jsxs("label",{children:[n("imageStudio.ai.count"),e.jsx("select",{"aria-label":n("imageStudio.ai.count"),value:m,onChange:u=>b(Number(u.target.value)),disabled:x||C,children:[1,2,3,4].map(u=>e.jsx("option",{children:u},u))})]}),e.jsxs("label",{children:[n("imageStudio.ai.quality"),e.jsxs("select",{"aria-label":n("imageStudio.ai.quality"),value:y,onChange:u=>t(u.target.value),disabled:x||C,children:[e.jsx("option",{value:"",children:n("imageStudio.ai.quality.default")}),Ae.map(u=>e.jsx("option",{value:u,children:n(`imageStudio.ai.quality.${u}`)},u))]})]})]}),N.requested!==N.engine&&e.jsx("p",{className:"ims-caption ims-ai-ratio-note",children:n("imageStudio.ai.ratioFit",{ratio:N.requested,engineRatio:N.engine})}),(y==="xhigh"||y==="max")&&e.jsx("p",{className:"ims-caption",children:n("imageStudio.ai.qualityNote")}),l==="expand"&&e.jsxs("label",{children:[n("imageStudio.ai.margin"),e.jsx("input",{"aria-label":n("imageStudio.ai.margin"),type:"range",min:".1",max:"1",step:".1",value:g,onChange:u=>h(Number(u.target.value))}),e.jsxs("output",{children:[Math.round(g*100),"%"]})]}),e.jsxs("button",{className:"ims-primary",disabled:x||C||!r.length||r.length>8||l==="edit"&&!c.trim(),onClick:()=>{V()},children:[e.jsx(A,{size:15}),n(C||x?"imageStudio.ai.running":"imageStudio.ai.submit")]}),e.jsx("p",{className:"ims-caption",children:n("imageStudio.ai.preserve")}),w&&e.jsx("p",{role:"alert",children:w})]})]})}function $i(){const{t:i}=M(),r=S(d=>d.boards),n=S(d=>d.activeId),l=S(d=>d.ready);j.useEffect(()=>{S.getState().hydrate()},[]);const a=j.useMemo(()=>Object.values(r).sort((d,s)=>s.updatedAt-d.updatedAt).slice(0,12),[r]),c=d=>{d(),ae.getState().openView("image-studio",{},"main")};return e.jsxs("nav",{className:"csn ims-nav","aria-label":i("imageStudio.title"),children:[e.jsxs("div",{className:"csn-section",children:[e.jsx("span",{className:"csn-heading",children:i("imageStudio.nav.create")}),e.jsxs("button",{type:"button",className:"csn-item",disabled:!l,onClick:()=>c(()=>S.getState().create(i("imageStudio.untitled"))),children:[e.jsx(D,{size:16}),i("imageStudio.new")]}),e.jsxs("button",{type:"button",className:"csn-item","aria-current":l&&!n?"page":void 0,onClick:()=>c(()=>S.getState().close()),children:[e.jsx(Ie,{size:16}),i("imageStudio.projects")]})]}),a.length>0&&e.jsxs("div",{className:"csn-section",children:[e.jsx("span",{className:"csn-heading",children:i("imageStudio.nav.recent")}),a.map(d=>{const s=re(d,1)[0];return e.jsxs("button",{type:"button",className:"csn-item",title:d.name,"aria-current":d.id===n?"page":void 0,onClick:()=>c(()=>S.getState().open(d.id)),children:[s?e.jsx("span",{className:"ims-nav-thumb",children:e.jsx(ve,{image:s})}):e.jsx(P,{size:16}),e.jsx("span",{className:"ims-nav-name",children:d.name})]},d.id)})]})]})}function Li(i){const{t:r}=M(),n=S(s=>s.activeId?s.boards[s.activeId]:void 0),[l,a]=j.useState(!1),[c,d]=j.useState("");return j.useEffect(()=>{S.getState().hydrate()},[]),j.useEffect(()=>{n?.sessionId&&$.getState().loadSessionHistory(n.sessionId)},[n?.sessionId]),n?.sessionId?e.jsx("div",{className:"ims-chat","data-image-studio-chat":n.id,children:e.jsx(me,{...i,params:{...i.params,followActive:!1,sessionId:n.sessionId,childSurface:!0}},n.sessionId)}):e.jsxs("div",{className:"ims-panel ims-chat-empty",children:[e.jsx(B,{size:26,strokeWidth:1.3}),e.jsx("h3",{children:r("imageStudio.chat")}),e.jsx("p",{children:r(n?"imageStudio.chatHint":"imageStudio.choose")}),n&&e.jsxs("button",{className:"ims-primary",disabled:l,onClick:async()=>{a(!0),d("");try{await G(n.id)}catch(s){d(String(s))}finally{a(!1)}},children:[l?e.jsx(W,{size:15,className:"ims-spin"}):e.jsx(D,{size:15}),r("imageStudio.connect")]}),c&&e.jsx("p",{role:"alert",children:r("imageStudio.error",{error:c})})]})}function Pi(){const{t:i}=M(),r=S(s=>s.activeId?s.boards[s.activeId]:void 0),n=S(s=>s.selection),[l,a]=j.useState(""),c=r?q(r).reverse().filter(s=>s.name.toLocaleLowerCase().includes(l.toLocaleLowerCase())):[],d=(s,p)=>r&&S.getState().update(r.id,f=>H(f,o=>o.id===s?{...o,...p}:o));return e.jsxs("section",{className:"ims-panel ims-layers",children:[e.jsx("h3",{children:i("imageStudio.layers")}),e.jsx("input",{type:"search","aria-label":i("imageStudio.searchLayers"),placeholder:i("imageStudio.searchLayers"),value:l,onChange:s=>a(s.target.value)}),e.jsx("div",{className:"ims-asset-list",children:c.map(s=>e.jsxs("div",{className:`ims-layer-row${n.includes(s.id)?" is-selected":""}`,"data-layer-id":s.id,children:[e.jsxs("button",{className:"ims-asset","aria-pressed":n.includes(s.id),onClick:p=>S.setState({selection:p.shiftKey?n.includes(s.id)?n.filter(f=>f!==s.id):[...n,s.id]:[s.id]}),children:[e.jsx("div",{className:"ims-layer-thumb",children:e.jsx(U,{item:s})}),e.jsxs("span",{children:[e.jsx("strong",{children:s.name}),e.jsx("small",{children:i(`imageStudio.kind.${je(s)}`)})]})]}),e.jsx("button",{"aria-label":i(s.hidden?"imageStudio.show":"imageStudio.hide"),title:i(s.hidden?"imageStudio.show":"imageStudio.hide"),onClick:()=>d(s.id,{hidden:!s.hidden}),children:s.hidden?e.jsx(O,{size:14}):e.jsx(K,{size:14})}),e.jsx("button",{"aria-label":i(s.locked?"imageStudio.unlock":"imageStudio.lock"),title:i(s.locked?"imageStudio.unlock":"imageStudio.lock"),onClick:()=>d(s.id,{locked:!s.locked}),children:s.locked?e.jsx(Ne,{size:14}):e.jsx(Ce,{size:14})})]},s.id))}),!c.length&&e.jsxs("div",{className:"ims-panel-empty",children:[e.jsx(P,{size:26}),e.jsx("p",{children:i(l.trim()?"imageStudio.noLayers":"imageStudio.layersEmpty")})]}),e.jsx("p",{className:"ims-caption",children:i("imageStudio.layersHint")})]})}function z({label:i,value:r,onChange:n,min:l=-1e5,max:a=1e5}){const[c,d]=j.useState(String(Math.round(r*100)/100));j.useEffect(()=>d(String(Math.round(r*100)/100)),[r]);const s=()=>{const p=Number(c);c.trim()&&Number.isFinite(p)?n(Math.max(l,Math.min(a,p))):d(String(r))};return e.jsxs("label",{children:[i,e.jsx("input",{type:"number","aria-label":i,value:c,min:l,max:a,onChange:p=>d(p.target.value),onBlur:s,onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()}})]})}function Ri(){const{t:i}=M(),r=S(t=>t.activeId?t.boards[t.activeId]:void 0),n=S(t=>t.selection),l=r?q(r).filter(t=>n.includes(t.id)):[],a=l[0],c=a&&k(a)&&a.parentId?r?.images.find(t=>t.id===a.parentId):void 0,[d,s]=j.useState(""),[p,f]=j.useState(!1),[o,m]=j.useState(!1);j.useEffect(()=>{m(!1),s("")},[r?.id,a?.id]);const b=async t=>{f(!0),s("");try{await t()}catch(x){s(String(x))}finally{f(!1)}};if(!r||!a)return e.jsxs("div",{className:"ims-panel ims-panel-empty",children:[e.jsx(P,{size:26}),e.jsx("p",{children:i("imageStudio.select")})]});const g=t=>S.getState().update(r.id,x=>H(x,v=>v.id===a.id&&!v.locked?{...v,...t}:v)),h=t=>{k(a)&&g(ce(a,t))},y=(t,x)=>{let v={x:a.x,y:a.y,w:a.w,h:a.h,[t]:x};if(k(a)&&(t==="w"||t==="h")){const w=le(a);v={...v,...t==="w"?{h:x*w.h/w.w}:{w:x*w.w/w.h}}}S.getState().update(r.id,w=>de(w,new Map([[a.id,v]])))};return e.jsxs("section",{className:"ims-panel ims-inspector",children:[e.jsx("h3",{children:i(l.length>1?"imageStudio.selection":"imageStudio.inspector")}),l.every(k)&&e.jsx(qe,{board:r,images:l.filter(k)},`${r.id}:${n.join(",")}`),l.length===1?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"ims-preview",style:{aspectRatio:a.w/a.h},children:e.jsx(U,{item:a})}),e.jsxs("fieldset",{disabled:a.locked,className:"ims-properties",children:[e.jsx("input",{"aria-label":i("imageStudio.layerName"),value:a.name,onChange:t=>g({name:t.target.value})}),e.jsx("div",{className:"ims-fields",children:["x","y","w","h"].map(t=>e.jsx(z,{label:i(`imageStudio.${t}`),value:a[t],min:t==="w"||t==="h"?1:-1e5,onChange:x=>y(t,x)},t))}),k(a)?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"ims-meta",children:[e.jsx("span",{children:i("imageStudio.original")}),e.jsxs("span",{children:[a.width," × ",a.height]})]}),c&&e.jsxs("button",{className:"ims-lineage",onClick:()=>S.setState({selection:[c.id]}),children:[e.jsx(ue,{size:14}),e.jsx("span",{children:i("imageStudio.versionOf")}),e.jsx("strong",{children:c.name})]}),e.jsxs("div",{className:"ims-button-row ims-transform",children:[e.jsx("button",{title:i("imageStudio.crop"),"aria-label":i("imageStudio.crop"),onClick:()=>m(!o),children:e.jsx(ze,{size:16})}),e.jsx("button",{title:i("imageStudio.rotate"),"aria-label":i("imageStudio.rotate"),onClick:()=>h({rotation:((a.rotation||0)+90)%360}),children:e.jsx(Q,{size:16})}),e.jsx("button",{title:i("imageStudio.flipX"),"aria-label":i("imageStudio.flipX"),onClick:()=>h({flipX:!a.flipX}),children:e.jsx($e,{size:16})}),e.jsx("button",{title:i("imageStudio.flipY"),"aria-label":i("imageStudio.flipY"),onClick:()=>h({flipY:!a.flipY}),children:e.jsx(Pe,{size:16})})]}),o&&e.jsx(Re,{image:a,onCancel:()=>m(!1),onApply:t=>{h({crop:t}),m(!1)}},a.id),e.jsx(z,{label:i("imageStudio.angle"),value:a.rotation||0,min:0,max:359,onChange:t=>h({rotation:t})}),e.jsx("button",{onClick:()=>h({crop:void 0,rotation:0,flipX:!1,flipY:!1}),children:i("imageStudio.resetTransform")}),e.jsx("div",{className:"ims-adjustments",children:["brightness","contrast","saturation"].map(t=>e.jsxs("label",{children:[e.jsxs("span",{children:[i(`imageStudio.${t}`),e.jsxs("output",{children:[a[t],"%"]})]}),e.jsx("input",{"aria-label":i(`imageStudio.${t}`),type:"range",min:"0",max:"200",step:"5",value:a[t],onChange:x=>g({[t]:Number(x.target.value)})})]},t))}),e.jsxs("button",{onClick:()=>g({brightness:100,contrast:100,saturation:100}),children:[e.jsx(ke,{size:14}),i("imageStudio.reset")]})]}):e.jsxs(e.Fragment,{children:[a.kind==="frame"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{children:[i("imageStudio.framePreset"),e.jsxs("select",{"aria-label":i("imageStudio.framePreset"),value:"",onChange:t=>{const[x,v]=t.target.value.split("x").map(Number);g({w:x,h:v})},children:[e.jsx("option",{value:"",disabled:!0,children:i("imageStudio.customSize")}),e.jsx("option",{value:"1080x1080",children:"1:1 · 1080 × 1080"}),e.jsx("option",{value:"1080x1350",children:"4:5 · 1080 × 1350"}),e.jsx("option",{value:"1080x1920",children:"9:16 · 1080 × 1920"}),e.jsx("option",{value:"1920x1080",children:"16:9 · 1920 × 1080"})]})]}),e.jsx("p",{children:i("imageStudio.frameHint")})]}),a.kind==="text"&&e.jsxs(e.Fragment,{children:[e.jsx("textarea",{"aria-label":i("imageStudio.textContent"),value:a.text,maxLength:1e4,rows:4,onChange:t=>g({text:t.target.value})}),e.jsxs("div",{className:"ims-fields",children:[e.jsxs("label",{children:[i("imageStudio.font"),e.jsx("select",{"aria-label":i("imageStudio.font"),value:a.fontFamily,onChange:t=>g({fontFamily:t.target.value}),children:["sans-serif","serif","monospace"].map(t=>e.jsx("option",{value:t,children:i(`imageStudio.font.${t}`)},t))})]}),e.jsx(z,{label:i("imageStudio.fontSize"),value:a.fontSize,min:6,max:500,onChange:t=>g({fontSize:t})})]}),e.jsxs("div",{className:"ims-fields",children:[e.jsxs("label",{children:[i("imageStudio.textAlign"),e.jsx("select",{"aria-label":i("imageStudio.textAlign"),value:a.align,onChange:t=>g({align:t.target.value}),children:["left","center","right"].map(t=>e.jsx("option",{value:t,children:i(`imageStudio.align.${t}`)},t))})]}),e.jsxs("label",{className:"ims-checkbox",children:[e.jsx("input",{type:"checkbox",checked:a.bold,onChange:t=>g({bold:t.target.checked})}),i("imageStudio.bold")]})]})]}),e.jsxs("div",{className:"ims-fields",children:[e.jsxs("label",{children:[i("imageStudio.fill"),e.jsx("input",{type:"color","aria-label":i("imageStudio.fill"),value:a.fill==="transparent"?"#ffffff":a.fill,onChange:t=>g({fill:t.target.value})})]}),a.kind!=="text"&&e.jsxs("label",{children:[i("imageStudio.stroke"),e.jsx("input",{type:"color","aria-label":i("imageStudio.stroke"),value:a.stroke,onChange:t=>g({stroke:t.target.value})})]})]}),a.kind!=="text"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"ims-checkbox",children:[e.jsx("input",{type:"checkbox",checked:a.fill==="transparent",onChange:t=>g({fill:t.target.checked?"transparent":"#ffffff"})}),i("imageStudio.noFill")]}),e.jsxs("div",{className:"ims-fields",children:[e.jsx(z,{label:i("imageStudio.strokeWidth"),value:a.strokeWidth,min:0,max:100,onChange:t=>g({strokeWidth:t})}),e.jsx(z,{label:i("imageStudio.radius"),value:a.radius,min:0,max:1e3,onChange:t=>g({radius:t})})]})]})]})]}),a.locked&&e.jsx("p",{children:i("imageStudio.lockedHint")}),k(a)&&a.prompt&&e.jsxs("details",{className:"ims-prompt",children:[e.jsx("summary",{children:i("imageStudio.prompt")}),e.jsx("p",{children:a.prompt})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{children:i("imageStudio.selectedCount",{count:l.length})}),e.jsx("div",{className:"ims-align",children:["left","center","right","top","middle","bottom"].map(t=>e.jsx("button",{onClick:()=>S.getState().update(r.id,x=>Se(x,n,t)),children:i(`imageStudio.align.${t}`)},t))})]}),e.jsxs("div",{className:"ims-button-row",children:[e.jsx("button",{title:i("imageStudio.layerUp"),"aria-label":i("imageStudio.layerUp"),onClick:()=>S.getState().update(r.id,t=>T(t,n,"up")),children:e.jsx(J,{size:15})}),e.jsx("button",{title:i("imageStudio.layerDown"),"aria-label":i("imageStudio.layerDown"),onClick:()=>S.getState().update(r.id,t=>T(t,n,"down")),children:e.jsx(Z,{size:15})}),e.jsx("button",{title:i("imageStudio.remove"),"aria-label":i("imageStudio.remove"),onClick:fe,children:e.jsx(ee,{size:15})})]}),e.jsxs("div",{className:"ims-panel-actions",children:[e.jsxs("button",{disabled:p||l.every(t=>t.hidden),onClick:()=>{b(ye)},children:[e.jsx(B,{size:14}),i("imageStudio.reference")]}),e.jsxs("button",{onClick:()=>be(!0),children:[e.jsx(ie,{size:14}),i("imageStudio.duplicate")]}),l.length===1&&k(a)&&e.jsxs("button",{className:"ims-primary",disabled:p,onClick:()=>{b(async()=>we(await _([a],!0),a.name.replace(/\.[^.]+$/,"")+".png"))},children:[e.jsx(te,{size:14}),i("imageStudio.export")]})]}),d&&e.jsx("p",{role:"alert",children:i("imageStudio.error",{error:d})})]})}export{Pi as ImageStudioAssets,Li as ImageStudioChat,Ri as ImageStudioInspector,$i as ImageStudioNav,z as NumberField};
|
|
3
|
+
`)}function De({board:i,images:r}){const{t:n}=M(),[l,a]=j.useState("edit"),[c,d]=j.useState(""),[s,p]=j.useState("original"),[f,o]=j.useState("current"),[m,b]=j.useState(1),[g,h]=j.useState(.5),[y,t]=j.useState(""),[x,v]=j.useState(!1),[w,R]=j.useState(""),C=$(u=>!!(i.sessionId&&u.runningBySession[i.sessionId])),N=oe(r[0],s),V=async()=>{v(!0),R("");let u=[];try{const I=await U(i.id);if(S.getState().activeId!==i.id)return;if($.getState().runningBySession[I])throw new Error(n("imageStudio.ai.wait"));u=S.getState().beginGeneration(i.id,I,{count:m,aspect:N.aspect,ratio:N.requested,kind:"edit",sourceIds:r.map(Y=>Y.id)});const F=l==="expand"?"current":f,X=await qe(r,l,N.requested,g,F);if(!await $.getState().send(Be(l,c,N,m,F,y),X,void 0,void 0,void 0,I))throw new Error(n("imageStudio.ai.sendFailed"));S.getState().activateGeneration(u)}catch(I){u.length&&S.getState().failGeneration(i.id,{ids:u}),R(I instanceof Error?I.message:String(I))}finally{v(!1)}};return e.jsxs("details",{className:"ims-ai",open:!0,children:[e.jsxs("summary",{children:[e.jsx(A,{size:15}),n("imageStudio.ai.title"),e.jsxs("span",{children:[r.length," ",n("imageStudio.ai.references")]})]}),e.jsxs("div",{className:"ims-ai-body",children:[e.jsx("div",{className:"ims-ai-modes",role:"group","aria-label":n("imageStudio.ai.mode"),children:["edit","background","expand"].map(u=>e.jsx("button",{"aria-pressed":l===u,disabled:C||x||u!=="edit"&&r.length!==1,onClick:()=>a(u),children:n(`imageStudio.ai.${u}`)},u))}),e.jsx("p",{className:"ims-caption",children:n(`imageStudio.ai.hint.${l}`)}),e.jsx("textarea",{"aria-label":n("imageStudio.ai.instruction"),placeholder:n("imageStudio.ai.placeholder"),value:c,onChange:u=>d(u.target.value),maxLength:8e3,rows:3,disabled:x||C}),e.jsxs("label",{className:"ims-ai-source",children:[n("imageStudio.ai.source"),e.jsxs("select",{"aria-label":n("imageStudio.ai.source"),value:l==="expand"?"current":f,onChange:u=>o(u.target.value),disabled:x||C||l==="expand",children:[e.jsx("option",{value:"current",children:n("imageStudio.ai.source.current")}),e.jsx("option",{value:"original",children:n("imageStudio.ai.source.original")})]})]}),e.jsxs("div",{className:"ims-fields",children:[e.jsxs("label",{children:[n("imageStudio.ai.ratio"),e.jsxs("select",{"aria-label":n("imageStudio.ai.ratio"),value:s,onChange:u=>p(u.target.value),disabled:x||C,children:[e.jsx("option",{value:"original",children:n("imageStudio.ai.ratio.original",{ratio:N.originalLabel})}),Fe.map(u=>e.jsx("option",{value:u,children:u},u))]})]}),e.jsxs("label",{children:[n("imageStudio.ai.count"),e.jsx("select",{"aria-label":n("imageStudio.ai.count"),value:m,onChange:u=>b(Number(u.target.value)),disabled:x||C,children:[1,2,3,4].map(u=>e.jsx("option",{children:u},u))})]}),e.jsxs("label",{children:[n("imageStudio.ai.quality"),e.jsxs("select",{"aria-label":n("imageStudio.ai.quality"),value:y,onChange:u=>t(u.target.value),disabled:x||C,children:[e.jsx("option",{value:"",children:n("imageStudio.ai.quality.default")}),Ae.map(u=>e.jsx("option",{value:u,children:n(`imageStudio.ai.quality.${u}`)},u))]})]})]}),N.requested!==N.engine&&e.jsx("p",{className:"ims-caption ims-ai-ratio-note",children:n("imageStudio.ai.ratioFit",{ratio:N.requested,engineRatio:N.engine})}),(y==="xhigh"||y==="max")&&e.jsx("p",{className:"ims-caption",children:n("imageStudio.ai.qualityNote")}),l==="expand"&&e.jsxs("label",{children:[n("imageStudio.ai.margin"),e.jsx("input",{"aria-label":n("imageStudio.ai.margin"),type:"range",min:".1",max:"1",step:".1",value:g,onChange:u=>h(Number(u.target.value))}),e.jsxs("output",{children:[Math.round(g*100),"%"]})]}),e.jsxs("button",{className:"ims-primary",disabled:x||C||!r.length||r.length>8||l==="edit"&&!c.trim(),onClick:()=>{V()},children:[e.jsx(A,{size:15}),n(C||x?"imageStudio.ai.running":"imageStudio.ai.submit")]}),e.jsx("p",{className:"ims-caption",children:n("imageStudio.ai.preserve")}),w&&e.jsx("p",{role:"alert",children:w})]})]})}function $i(){const{t:i}=M(),r=S(d=>d.boards),n=S(d=>d.activeId),l=S(d=>d.ready);j.useEffect(()=>{S.getState().hydrate()},[]);const a=j.useMemo(()=>Object.values(r).sort((d,s)=>s.updatedAt-d.updatedAt).slice(0,12),[r]),c=d=>{d(),ae.getState().openView("image-studio",{},"main")};return e.jsxs("nav",{className:"csn ims-nav","aria-label":i("imageStudio.title"),children:[e.jsxs("div",{className:"csn-section",children:[e.jsx("span",{className:"csn-heading",children:i("imageStudio.nav.create")}),e.jsxs("button",{type:"button",className:"csn-item",disabled:!l,onClick:()=>c(()=>S.getState().create(i("imageStudio.untitled"))),children:[e.jsx(B,{size:16}),i("imageStudio.new")]}),e.jsxs("button",{type:"button",className:"csn-item","aria-current":l&&!n?"page":void 0,onClick:()=>c(()=>S.getState().close()),children:[e.jsx(Ie,{size:16}),i("imageStudio.projects")]})]}),a.length>0&&e.jsxs("div",{className:"csn-section",children:[e.jsx("span",{className:"csn-heading",children:i("imageStudio.nav.recent")}),a.map(d=>{const s=re(d,1)[0];return e.jsxs("button",{type:"button",className:"csn-item",title:d.name,"aria-current":d.id===n?"page":void 0,onClick:()=>c(()=>S.getState().open(d.id)),children:[s?e.jsx("span",{className:"ims-nav-thumb",children:e.jsx(ve,{image:s})}):e.jsx(P,{size:16}),e.jsx("span",{className:"ims-nav-name",children:d.name})]},d.id)})]})]})}function Li(i){const{t:r}=M(),n=S(s=>s.activeId?s.boards[s.activeId]:void 0),[l,a]=j.useState(!1),[c,d]=j.useState("");return j.useEffect(()=>{S.getState().hydrate()},[]),j.useEffect(()=>{n?.sessionId&&$.getState().loadSessionHistory(n.sessionId)},[n?.sessionId]),n?.sessionId?e.jsx("div",{className:"ims-chat","data-image-studio-chat":n.id,children:e.jsx(me,{...i,params:{...i.params,followActive:!1,sessionId:n.sessionId,childSurface:!0}},n.sessionId)}):e.jsxs("div",{className:"ims-panel ims-chat-empty",children:[e.jsx(q,{size:26,strokeWidth:1.3}),e.jsx("h3",{children:r("imageStudio.chat")}),e.jsx("p",{children:r(n?"imageStudio.chatHint":"imageStudio.choose")}),n&&e.jsxs("button",{className:"ims-primary",disabled:l,onClick:async()=>{a(!0),d("");try{await U(n.id)}catch(s){d(String(s))}finally{a(!1)}},children:[l?e.jsx(W,{size:15,className:"ims-spin"}):e.jsx(B,{size:15}),r("imageStudio.connect")]}),c&&e.jsx("p",{role:"alert",children:r("imageStudio.error",{error:c})})]})}function Pi(){const{t:i}=M(),r=S(s=>s.activeId?s.boards[s.activeId]:void 0),n=S(s=>s.selection),[l,a]=j.useState(""),c=r?D(r).reverse().filter(s=>s.name.toLocaleLowerCase().includes(l.toLocaleLowerCase())):[],d=(s,p)=>r&&S.getState().update(r.id,f=>H(f,o=>o.id===s?{...o,...p}:o));return e.jsxs("section",{className:"ims-panel ims-layers",children:[e.jsx("h3",{children:i("imageStudio.layers")}),e.jsx("input",{type:"search","aria-label":i("imageStudio.searchLayers"),placeholder:i("imageStudio.searchLayers"),value:l,onChange:s=>a(s.target.value)}),e.jsx("div",{className:"ims-asset-list",children:c.map(s=>e.jsxs("div",{className:`ims-layer-row${n.includes(s.id)?" is-selected":""}`,"data-layer-id":s.id,children:[e.jsxs("button",{className:"ims-asset","aria-pressed":n.includes(s.id),onClick:p=>S.setState({selection:p.shiftKey?n.includes(s.id)?n.filter(f=>f!==s.id):[...n,s.id]:[s.id]}),children:[e.jsx("div",{className:"ims-layer-thumb",children:e.jsx(G,{item:s})}),e.jsxs("span",{children:[e.jsx("strong",{children:s.name}),e.jsx("small",{children:i(`imageStudio.kind.${je(s)}`)})]})]}),e.jsx("button",{"aria-label":i(s.hidden?"imageStudio.show":"imageStudio.hide"),title:i(s.hidden?"imageStudio.show":"imageStudio.hide"),onClick:()=>d(s.id,{hidden:!s.hidden}),children:s.hidden?e.jsx(O,{size:14}):e.jsx(K,{size:14})}),e.jsx("button",{"aria-label":i(s.locked?"imageStudio.unlock":"imageStudio.lock"),title:i(s.locked?"imageStudio.unlock":"imageStudio.lock"),onClick:()=>d(s.id,{locked:!s.locked}),children:s.locked?e.jsx(Ne,{size:14}):e.jsx(Ce,{size:14})})]},s.id))}),!c.length&&e.jsxs("div",{className:"ims-panel-empty",children:[e.jsx(P,{size:26}),e.jsx("p",{children:i(l.trim()?"imageStudio.noLayers":"imageStudio.layersEmpty")})]}),e.jsx("p",{className:"ims-caption",children:i("imageStudio.layersHint")})]})}function z({label:i,value:r,onChange:n,min:l=-1e5,max:a=1e5}){const[c,d]=j.useState(String(Math.round(r*100)/100));j.useEffect(()=>d(String(Math.round(r*100)/100)),[r]);const s=()=>{const p=Number(c);c.trim()&&Number.isFinite(p)?n(Math.max(l,Math.min(a,p))):d(String(r))};return e.jsxs("label",{children:[i,e.jsx("input",{type:"number","aria-label":i,value:c,min:l,max:a,onChange:p=>d(p.target.value),onBlur:s,onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()}})]})}function Ri(){const{t:i}=M(),r=S(t=>t.activeId?t.boards[t.activeId]:void 0),n=S(t=>t.selection),l=r?D(r).filter(t=>n.includes(t.id)):[],a=l[0],c=a&&k(a)&&a.parentId?r?.images.find(t=>t.id===a.parentId):void 0,[d,s]=j.useState(""),[p,f]=j.useState(!1),[o,m]=j.useState(!1);j.useEffect(()=>{m(!1),s("")},[r?.id,a?.id]);const b=async t=>{f(!0),s("");try{await t()}catch(x){s(String(x))}finally{f(!1)}};if(!r||!a)return e.jsxs("div",{className:"ims-panel ims-panel-empty",children:[e.jsx(P,{size:26}),e.jsx("p",{children:i("imageStudio.select")})]});const g=t=>S.getState().update(r.id,x=>H(x,v=>v.id===a.id&&!v.locked?{...v,...t}:v)),h=t=>{k(a)&&g(ce(a,t))},y=(t,x)=>{let v={x:a.x,y:a.y,w:a.w,h:a.h,[t]:x};if(k(a)&&(t==="w"||t==="h")){const w=le(a);v={...v,...t==="w"?{h:x*w.h/w.w}:{w:x*w.w/w.h}}}S.getState().update(r.id,w=>de(w,new Map([[a.id,v]])))};return e.jsxs("section",{className:"ims-panel ims-inspector",children:[e.jsx("h3",{children:i(l.length>1?"imageStudio.selection":"imageStudio.inspector")}),l.every(k)&&e.jsx(De,{board:r,images:l.filter(k)},`${r.id}:${n.join(",")}`),l.length===1?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"ims-preview",style:{aspectRatio:a.w/a.h},children:e.jsx(G,{item:a})}),e.jsxs("fieldset",{disabled:a.locked,className:"ims-properties",children:[e.jsx("input",{"aria-label":i("imageStudio.layerName"),value:a.name,onChange:t=>g({name:t.target.value})}),e.jsx("div",{className:"ims-fields",children:["x","y","w","h"].map(t=>e.jsx(z,{label:i(`imageStudio.${t}`),value:a[t],min:t==="w"||t==="h"?1:-1e5,onChange:x=>y(t,x)},t))}),k(a)?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"ims-meta",children:[e.jsx("span",{children:i("imageStudio.original")}),e.jsxs("span",{children:[a.width," × ",a.height]})]}),c&&e.jsxs("button",{className:"ims-lineage",onClick:()=>S.setState({selection:[c.id]}),children:[e.jsx(ue,{size:14}),e.jsx("span",{children:i("imageStudio.versionOf")}),e.jsx("strong",{children:c.name})]}),e.jsxs("div",{className:"ims-button-row ims-transform",children:[e.jsx("button",{title:i("imageStudio.crop"),"aria-label":i("imageStudio.crop"),onClick:()=>m(!o),children:e.jsx(ze,{size:16})}),e.jsx("button",{title:i("imageStudio.rotate"),"aria-label":i("imageStudio.rotate"),onClick:()=>h({rotation:((a.rotation||0)+90)%360}),children:e.jsx(Q,{size:16})}),e.jsx("button",{title:i("imageStudio.flipX"),"aria-label":i("imageStudio.flipX"),onClick:()=>h({flipX:!a.flipX}),children:e.jsx($e,{size:16})}),e.jsx("button",{title:i("imageStudio.flipY"),"aria-label":i("imageStudio.flipY"),onClick:()=>h({flipY:!a.flipY}),children:e.jsx(Pe,{size:16})})]}),o&&e.jsx(Re,{image:a,onCancel:()=>m(!1),onApply:t=>{h({crop:t}),m(!1)}},a.id),e.jsx(z,{label:i("imageStudio.angle"),value:a.rotation||0,min:0,max:359,onChange:t=>h({rotation:t})}),e.jsx("button",{onClick:()=>h({crop:void 0,rotation:0,flipX:!1,flipY:!1}),children:i("imageStudio.resetTransform")}),e.jsx("div",{className:"ims-adjustments",children:["brightness","contrast","saturation"].map(t=>e.jsxs("label",{children:[e.jsxs("span",{children:[i(`imageStudio.${t}`),e.jsxs("output",{children:[a[t],"%"]})]}),e.jsx("input",{"aria-label":i(`imageStudio.${t}`),type:"range",min:"0",max:"200",step:"5",value:a[t],onChange:x=>g({[t]:Number(x.target.value)})})]},t))}),e.jsxs("button",{onClick:()=>g({brightness:100,contrast:100,saturation:100}),children:[e.jsx(ke,{size:14}),i("imageStudio.reset")]})]}):e.jsxs(e.Fragment,{children:[a.kind==="frame"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{children:[i("imageStudio.framePreset"),e.jsxs("select",{"aria-label":i("imageStudio.framePreset"),value:"",onChange:t=>{const[x,v]=t.target.value.split("x").map(Number);g({w:x,h:v})},children:[e.jsx("option",{value:"",disabled:!0,children:i("imageStudio.customSize")}),e.jsx("option",{value:"1080x1080",children:"1:1 · 1080 × 1080"}),e.jsx("option",{value:"1080x1350",children:"4:5 · 1080 × 1350"}),e.jsx("option",{value:"1080x1920",children:"9:16 · 1080 × 1920"}),e.jsx("option",{value:"1920x1080",children:"16:9 · 1920 × 1080"})]})]}),e.jsx("p",{children:i("imageStudio.frameHint")})]}),a.kind==="text"&&e.jsxs(e.Fragment,{children:[e.jsx("textarea",{"aria-label":i("imageStudio.textContent"),value:a.text,maxLength:1e4,rows:4,onChange:t=>g({text:t.target.value})}),e.jsxs("div",{className:"ims-fields",children:[e.jsxs("label",{children:[i("imageStudio.font"),e.jsx("select",{"aria-label":i("imageStudio.font"),value:a.fontFamily,onChange:t=>g({fontFamily:t.target.value}),children:["sans-serif","serif","monospace"].map(t=>e.jsx("option",{value:t,children:i(`imageStudio.font.${t}`)},t))})]}),e.jsx(z,{label:i("imageStudio.fontSize"),value:a.fontSize,min:6,max:500,onChange:t=>g({fontSize:t})})]}),e.jsxs("div",{className:"ims-fields",children:[e.jsxs("label",{children:[i("imageStudio.textAlign"),e.jsx("select",{"aria-label":i("imageStudio.textAlign"),value:a.align,onChange:t=>g({align:t.target.value}),children:["left","center","right"].map(t=>e.jsx("option",{value:t,children:i(`imageStudio.align.${t}`)},t))})]}),e.jsxs("label",{className:"ims-checkbox",children:[e.jsx("input",{type:"checkbox",checked:a.bold,onChange:t=>g({bold:t.target.checked})}),i("imageStudio.bold")]})]})]}),e.jsxs("div",{className:"ims-fields",children:[e.jsxs("label",{children:[i("imageStudio.fill"),e.jsx("input",{type:"color","aria-label":i("imageStudio.fill"),value:a.fill==="transparent"?"#ffffff":a.fill,onChange:t=>g({fill:t.target.value})})]}),a.kind!=="text"&&e.jsxs("label",{children:[i("imageStudio.stroke"),e.jsx("input",{type:"color","aria-label":i("imageStudio.stroke"),value:a.stroke,onChange:t=>g({stroke:t.target.value})})]})]}),a.kind!=="text"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"ims-checkbox",children:[e.jsx("input",{type:"checkbox",checked:a.fill==="transparent",onChange:t=>g({fill:t.target.checked?"transparent":"#ffffff"})}),i("imageStudio.noFill")]}),e.jsxs("div",{className:"ims-fields",children:[e.jsx(z,{label:i("imageStudio.strokeWidth"),value:a.strokeWidth,min:0,max:100,onChange:t=>g({strokeWidth:t})}),e.jsx(z,{label:i("imageStudio.radius"),value:a.radius,min:0,max:1e3,onChange:t=>g({radius:t})})]})]})]})]}),a.locked&&e.jsx("p",{children:i("imageStudio.lockedHint")}),k(a)&&a.prompt&&e.jsxs("details",{className:"ims-prompt",children:[e.jsx("summary",{children:i("imageStudio.prompt")}),e.jsx("p",{children:a.prompt})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{children:i("imageStudio.selectedCount",{count:l.length})}),e.jsx("div",{className:"ims-align",children:["left","center","right","top","middle","bottom"].map(t=>e.jsx("button",{onClick:()=>S.getState().update(r.id,x=>Se(x,n,t)),children:i(`imageStudio.align.${t}`)},t))})]}),e.jsxs("div",{className:"ims-button-row",children:[e.jsx("button",{title:i("imageStudio.layerUp"),"aria-label":i("imageStudio.layerUp"),onClick:()=>S.getState().update(r.id,t=>T(t,n,"up")),children:e.jsx(J,{size:15})}),e.jsx("button",{title:i("imageStudio.layerDown"),"aria-label":i("imageStudio.layerDown"),onClick:()=>S.getState().update(r.id,t=>T(t,n,"down")),children:e.jsx(Z,{size:15})}),e.jsx("button",{title:i("imageStudio.remove"),"aria-label":i("imageStudio.remove"),onClick:fe,children:e.jsx(ee,{size:15})})]}),e.jsxs("div",{className:"ims-panel-actions",children:[e.jsxs("button",{disabled:p||l.every(t=>t.hidden),onClick:()=>{b(ye)},children:[e.jsx(q,{size:14}),i("imageStudio.reference")]}),e.jsxs("button",{onClick:()=>be(!0),children:[e.jsx(ie,{size:14}),i("imageStudio.duplicate")]}),l.length===1&&k(a)&&e.jsxs("button",{className:"ims-primary",disabled:p,onClick:()=>{b(async()=>we(await _([a],!0),a.name.replace(/\.[^.]+$/,"")+".png"))},children:[e.jsx(te,{size:14}),i("imageStudio.export")]})]}),d&&e.jsx("p",{role:"alert",children:i("imageStudio.error",{error:d})})]})}export{Pi as ImageStudioAssets,Li as ImageStudioChat,Ri as ImageStudioInspector,$i as ImageStudioNav,z as NumberField};
|