@forsion/unit 2.13.5 → 2.13.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/main.mjs +20 -4
- package/package.json +1 -1
- package/release.json +6 -5
- package/web/assets/{ArtificialView-BD1yHz1N.js → ArtificialView-DHqb9CTL.js} +1 -1
- package/web/assets/{AutomationBuilder-B09c-5Bi.js → AutomationBuilder-CzBKmOiw.js} +1 -1
- package/web/assets/{CalendarConfigView-Bd-ZDGPO.js → CalendarConfigView-Blw47NCs.js} +1 -1
- package/web/assets/CalendarSide-CFSzme3H.js +1 -0
- package/web/assets/CalendarView-B8sQfgZt.js +3 -0
- package/web/assets/{CapabilityMenu-DyHTEYLr.js → CapabilityMenu-Dzn6RbB1.js} +1 -1
- package/web/assets/{Chrome-C7F6fdDp.js → Chrome-owLewFu4.js} +1 -1
- package/web/assets/{CodeView-BGOnrGhB.js → CodeView-E18NDilX.js} +3 -3
- package/web/assets/{CtxMenuButtons-BYjrbUKS.js → CtxMenuButtons-CAiwQkOK.js} +1 -1
- package/web/assets/DashboardGridView-CBbYKcCo.js +25 -0
- package/web/assets/EventCard-D9uQe7g4.js +1 -0
- package/web/assets/{ExcalidrawCanvas-lwJCN6uB.js → ExcalidrawCanvas-BSOERegJ.js} +1 -1
- package/web/assets/{FloatingToc-DO7SH8Ku.js → FloatingToc-iK08Qpjc.js} +1 -1
- package/web/assets/GitCloneDialog-DfY0kqhP.js +1 -0
- package/web/assets/{HomepageView-CHJEhf9c.js → HomepageView-BCqFe1Ym.js} +3 -3
- package/web/assets/{ImageStudioPanels-CgVf0wiq.js → ImageStudioPanels-DdwihAkT.js} +2 -2
- package/web/assets/ImageStudioView-gJSYrmu1.js +1 -0
- package/web/assets/{InlineAiPanel-CdIPINsA.js → InlineAiPanel-CjYOW0_0.js} +1 -1
- package/web/assets/InlineFiles-3g2jMUeA.js +1 -0
- package/web/assets/{MarkdownBlock-DSItkLhu.js → MarkdownBlock-DjsGkPZ_.js} +24 -24
- package/web/assets/{ModelPill--CU3XTIQ.js → ModelPill-DgyXBsL9.js} +2 -2
- package/web/assets/MuseLibraryView-D_HBijmU.js +2 -0
- package/web/assets/{MuseView-CvsO62Fo.js → MuseView-BVDlmM6i.js} +3 -3
- package/web/assets/{PageHistoryPanel-CDh7nm78.js → PageHistoryPanel-B1EAPZeX.js} +2 -2
- package/web/assets/{PdfAnnotator-DafvjP3U.js → PdfAnnotator-bdB9evsY.js} +1 -1
- package/web/assets/{PenRow-CEy-s6SF.js → PenRow-DCOIGlfY.js} +1 -1
- package/web/assets/PluginToolCard-BXE5vA1h.js +2 -0
- package/web/assets/{ProductView-AUqnTwmQ.js → ProductView-l5Q7uBy6.js} +1 -1
- package/web/assets/{SettingsPage-B9mmkWaM.js → SettingsPage-fjxfS_Mt.js} +2 -2
- package/web/assets/{StudioGuestSurface-OOhRA8nt.js → StudioGuestSurface-360CWUwf.js} +1 -1
- package/web/assets/TodoListView-BsPt2GUU.js +1 -0
- package/web/assets/{Tooltip-DOYi44eY.js → Tooltip-CuXpWtdJ.js} +1 -1
- package/web/assets/UnifiedPage-6xbFLtXT.js +712 -0
- package/web/assets/{ViewSelectionBar-WmSWMFsR.js → ViewSelectionBar-C5FDh7fO.js} +2 -2
- package/web/assets/{appStore-DDOkzWDA.js → appStore-BskcSDl6.js} +114 -115
- package/web/assets/{arrow-up-right-BptN64d-.js → arrow-up-right-DEykpgsH.js} +1 -1
- package/web/assets/{astryxBridge-BL56QfEv.js → astryxBridge-B2IZdPvo.js} +1 -1
- package/web/assets/automationListSource-Cm09JKkK.js +1 -0
- package/web/assets/{boardSurface-CP4HNmcm.js → boardSurface-Dv-aVaUJ.js} +1 -1
- package/web/assets/{calendarNavStore-DCi7VBmM.js → calendarNavStore-FKStA7Hh.js} +1 -1
- package/web/assets/{canvasPrefs-ArsX3NFO.js → canvasPrefs-CMulOS0k.js} +1 -1
- package/web/assets/{chatBoxSurface-DRsDr-MT.js → chatBoxSurface-BR_G6cxG.js} +1 -1
- package/web/assets/{chevron-up-ChXNh14u.js → chevron-up-C_EDOZzI.js} +1 -1
- package/web/assets/{client-fKy9CWk0.js → client-DD5czSuF.js} +1 -1
- package/web/assets/{code-xml-DCCD9eCS.js → code-xml-vTB4LtTf.js} +1 -1
- package/web/assets/{codeStudioStore-BgLfCDK2.js → codeStudioStore-OswE1_s0.js} +1 -1
- package/web/assets/{contextMenuSurface-BF593l2M.js → contextMenuSurface-DqdYEGuH.js} +1 -1
- package/web/assets/{copy-plus-ClKrSgM7.js → copy-plus-CVHqDNny.js} +1 -1
- package/web/assets/create-DZWy4zBR.js +14 -0
- package/web/assets/{dashboardSurface-C6cbR3oG.js → dashboardSurface-Co4byEQm.js} +1 -1
- package/web/assets/dbStore-Bc2lC8ZI.js +2 -0
- package/web/assets/deskCapture-BfTzH2aO.js +1 -0
- package/web/assets/{diff2html-Di8qIz6O.js → diff2html-0MkNy2ws.js} +1 -1
- package/web/assets/{docx-preview-B-URZXdP.js → docx-preview-CwNWZegI.js} +1 -1
- package/web/assets/{draft-CBSW5tHx.js → draft-DTzuTatQ.js} +2 -2
- package/web/assets/{drawingStore-CGvTqqYW.js → drawingStore-BD5m2eqn.js} +1 -1
- package/web/assets/{file-down-Z913cCyQ.js → file-down-Cjo_T6By.js} +1 -1
- package/web/assets/{floatingTocSurface-DGwTiqvU.js → floatingTocSurface-D3IIVNnq.js} +1 -1
- package/web/assets/{foldActions-DGIPTmE1.js → foldActions-utwZpRrA.js} +1 -1
- package/web/assets/{folder-1OJQeDI1.js → folder-DiaFWdCg.js} +1 -1
- package/web/assets/{folder-minus-D_j1SwHu.js → folder-minus-DUEOcs12.js} +1 -1
- package/web/assets/{folder-plus-DP9sFr26.js → folder-plus-Cmhq0GcR.js} +1 -1
- package/web/assets/{gestures-ZhFAENNZ.js → gestures-Bx9M0le5.js} +1 -1
- package/web/assets/{git-branch-BMajF2cu.js → git-branch-DzGWffyD.js} +1 -1
- package/web/assets/{homeCardStatus-5R7XkxFL.js → homeCardStatus-NAk4A77P.js} +1 -1
- package/web/assets/{i18n.generated-DW_l6CkR.js → i18n.generated-D4-Wu9Wh.js} +1 -1
- package/web/assets/imageStudio-D67oElIb.js +4 -0
- package/web/assets/{index-COzdD7mZ.js → index-3VWZ1rsL.js} +1 -1
- package/web/assets/{index-bF04pF8q.js → index-58wBjkHy.js} +1 -1
- package/web/assets/{index-Cg1FWM_p.js → index-B9_zH7f5.js} +1 -1
- package/web/assets/index-BQrMYjou.js +1 -0
- package/web/assets/{index-D-ClOPbg.js → index-BWrWMYua.js} +1 -1
- package/web/assets/{index-C--E96Ul.js → index-BdLJBf4-.js} +1 -1
- package/web/assets/{index-CI2esW1X.js → index-Bf3W92Hb.js} +1 -1
- package/web/assets/{index-B8A3nKeL.js → index-BjmPaLFA.js} +1 -1
- package/web/assets/{index-BeW45J9J.js → index-Bv-vJTzF.js} +1 -1
- package/web/assets/{index-BnJguNqI.js → index-C7yb62gg.js} +1 -1
- package/web/assets/{index-CtRdzpNh.js → index-C9gBBMYv.js} +1 -1
- package/web/assets/index-CiQ59Kib.js +1 -0
- package/web/assets/{index-DfhEDV2T.js → index-CzTUjEMt.js} +1 -1
- package/web/assets/{index-BYKR7EVg.js → index-D4Qx6o3E.js} +1 -1
- package/web/assets/{index-jzlU5luC.js → index-DDBcn3UD.js} +1 -1
- package/web/assets/{index-CtCYv9bF.js → index-DEADY94l.js} +1 -1
- package/web/assets/{index-CWXpOSI2.js → index-DGTKsPAQ.js} +1 -1
- package/web/assets/{index-SpegRFQV.js → index-DRwDqvjf.js} +1 -1
- package/web/assets/{index-BDZIQnEx.js → index-DexVkoxH.js} +1 -1
- package/web/assets/{index-uhvJ8AiJ.js → index-IMOhRWY8.js} +1 -1
- package/web/assets/{index-Dr6YmrrT.js → index-XjvpYHIo.js} +1 -1
- package/web/assets/{index-fDB1l4d-.js → index-YuejkHoJ.js} +51 -37
- package/web/assets/{index-CVLDDD5Z.js → index-pH0266gX.js} +1 -1
- package/web/assets/{index-BniT-A2n.js → index-sQl_bGM_.js} +1 -1
- package/web/assets/{index-CPfmhZ3Z.js → index-vbNFy5lS.js} +1 -1
- package/web/assets/{invitePage-iOT1zBvp.js → invitePage-BT_rFfab.js} +1 -1
- package/web/assets/{ipc-SAPDwyQ4.js → ipc-8cxXGSZK.js} +1 -1
- package/web/assets/{jszip.min-B3n1FGCb.js → jszip.min-By4OI3XR.js} +1 -1
- package/web/assets/launchpad-BX4jQyF4.js +2 -0
- package/web/assets/{layout-grid-oIyIGbc5.js → layout-grid-CzxXbCDa.js} +1 -1
- package/web/assets/{linkFollow-uke1Xtit.js → linkFollow-J2c0wSgB.js} +4 -4
- package/web/assets/{listFold-BeNv2v6M.js → listFold-B_2Xqxn_.js} +1 -1
- package/web/assets/{lock-open-D2nMg0ga.js → lock-open-DVWCLSZm.js} +1 -1
- package/web/assets/{log-out-D70NCXC4.js → log-out-CdKTS7HC.js} +1 -1
- package/web/assets/{magnet-Cqmm97W8.js → magnet-BmVcZ9U4.js} +1 -1
- package/web/assets/main-CForzSFD.js +15 -0
- package/web/assets/{markdownEditorSurface-zUzFity2.js → markdownEditorSurface-Bs8FJNHu.js} +1 -1
- package/web/assets/{mediaPlayer-DB4KUvua.js → mediaPlayer-O9pVRl_k.js} +1 -1
- package/web/assets/{message-square-plus-BvUfAAZm.js → message-square-plus-CspBv9iG.js} +1 -1
- package/web/assets/{messages-GQUjmbwW.js → messages-CG7ywZ-K.js} +1 -1
- package/web/assets/{minimize-2-CMhzL6ZW.js → minimize-2-Bq4vUin-.js} +1 -1
- package/web/assets/mobileEntry-CptXQ4Ov.js +13 -0
- package/web/assets/modelPickerSurface-C0SkjaPL.js +1 -0
- package/web/assets/{nativeDownload-DsGyUSJ5.js → nativeDownload-DlnT8U-y.js} +1 -1
- package/web/assets/{nativeSheetMenu--iihXNVd.js → nativeSheetMenu-CVC51DzC.js} +1 -1
- package/web/assets/{pageStore-ys8L4rjF.css → pageStore-BC6Z18n7.css} +1 -1
- package/web/assets/{pageStore-CyvNZEYX.js → pageStore-D_fKLv-o.js} +7 -7
- package/web/assets/{pageTree-Ci2qzrs1.js → pageTree-DtDKozTg.js} +3 -3
- package/web/assets/{pen-line-DC3lbEY1.js → pen-line-ho1GgAe2.js} +1 -1
- package/web/assets/{pen-tool-DD5_N4lZ.js → pen-tool-CV-FKFEZ.js} +1 -1
- package/web/assets/{pencil--sWwxHdP.js → pencil-BgF4Kiqp.js} +1 -1
- package/web/assets/{phoneList-DKRMxQHf.js → phoneList-BLVdQcXY.js} +1 -1
- package/web/assets/pluginChat-C6t6DWhY.js +2 -0
- package/web/assets/{react-b7FrqRQR.js → react-DOzedx9n.js} +1 -1
- package/web/assets/recordSurface-C9SRNjy4.js +1 -0
- package/web/assets/{redo-2-CqlqhWrI.js → redo-2-DWZTaEz-.js} +1 -1
- package/web/assets/{rotate-ccw-D8kni6Ni.js → rotate-ccw-CyZpL7MX.js} +1 -1
- package/web/assets/{selectionActions-DIq0xDm8.js → selectionActions-C2a8ImJm.js} +1 -1
- package/web/assets/selectionBarSurface-DaXlyy1s.js +1 -0
- package/web/assets/{sessionTitle-Ctp4iNKu.js → sessionTitle-BtZ1BteL.js} +1 -1
- package/web/assets/settingsPageSurface-Cg8FNZq3.js +1 -0
- package/web/assets/{sharePage-CY04XCAf.js → sharePage-vnghra3Q.js} +2 -2
- package/web/assets/{shareViewer-DweNF8Ch.js → shareViewer-CWJQHiV-.js} +1 -1
- package/web/assets/{star-B0sZEmbj.js → star-ZEpUQwnX.js} +1 -1
- package/web/assets/tableSurface-DfEdzVDn.js +1 -0
- package/web/assets/{tanguProbe-B8Qv2vcm.js → tanguProbe-BboOas-a.js} +6 -6
- package/web/assets/{terminalView-BLGdmdl7.js → terminalView-xp8ARBLi.js} +1 -1
- package/web/assets/{type-Dt7RNB9g.js → type-CMyP4cKt.js} +1 -1
- package/web/assets/{undo-2-QimgpLBn.js → undo-2-C4ZCsMsx.js} +1 -1
- package/web/assets/{unitAccount-DL3jfd84.js → unitAccount-DNxfGo3c.js} +1 -1
- package/web/assets/{unitBridge-BSsCy1zP.js → unitBridge-Bq0n1ZM6.js} +1 -1
- package/web/assets/{unitCloudTransport-CI_6H0TU.js → unitCloudTransport-CErylgEO.js} +1 -1
- package/web/assets/{unitOwnerAccess-CiQ7nD7E.js → unitOwnerAccess-7s-3dfNM.js} +1 -1
- package/web/assets/{unitShim-Dl2ksNp-.js → unitShim-BfheyIG8.js} +3 -3
- package/web/assets/{upload-Dy7svciS.js → upload-VtCrluEO.js} +1 -1
- package/web/assets/userSpaces-BpeYjLni.js +1 -0
- package/web/assets/viewportLock-cVUalJAI.js +738 -0
- package/web/assets/{zoom-in-DDEtY_Go.js → zoom-in-C7R8s9x-.js} +1 -1
- package/web/index.html +2 -2
- package/web/assets/CalendarSide-B0RVbOsg.js +0 -1
- package/web/assets/CalendarView-BHio-n_r.js +0 -3
- package/web/assets/DashboardGridView-CR-R_qV8.js +0 -25
- package/web/assets/EventCard-QyYorE1_.js +0 -1
- package/web/assets/GitCloneDialog-CbW-RJak.js +0 -1
- package/web/assets/ImageStudioView-4WcX0_V4.js +0 -1
- package/web/assets/InlineFiles-CAIyTk1n.js +0 -1
- package/web/assets/MuseLibraryView-PlS7HAlV.js +0 -2
- package/web/assets/PluginToolCard-DCzLhsCA.js +0 -2
- package/web/assets/TodoListView-BkgMe44I.js +0 -1
- package/web/assets/UnifiedPage-s7-tDSwG.js +0 -712
- package/web/assets/automationListSource-B1jz6q0t.js +0 -1
- package/web/assets/create-DYmVT68X.js +0 -14
- package/web/assets/dbStore-BIG5Mfh2.js +0 -1
- package/web/assets/deskCapture-q-jRDIcc.js +0 -1
- package/web/assets/imageStudio-DC_syDtx.js +0 -4
- package/web/assets/index-CIKPZc3Q.js +0 -1
- package/web/assets/index-CmsN2Zm2.js +0 -1
- package/web/assets/launchpad-CcmSwlJl.js +0 -2
- package/web/assets/main-B9aT0WXG.js +0 -15
- package/web/assets/mobileEntry-BnHzrdoC.js +0 -13
- package/web/assets/modelPickerSurface-Dtz40Ae2.js +0 -1
- package/web/assets/pluginChat-82zZt47Y.js +0 -2
- package/web/assets/recordSurface-vUX25Z8R.js +0 -1
- package/web/assets/selectionBarSurface-B94e5JW_.js +0 -1
- package/web/assets/settingsPageSurface-C9TA3mJg.js +0 -1
- package/web/assets/tableSurface-CSBYBw5P.js +0 -1
- package/web/assets/userSpaces-oMHIWgYe.js +0 -1
- package/web/assets/viewportLock-BZq5PTeN.js +0 -738
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{u as I,r as j,j as e,t as E}from"./index-
|
|
1
|
+
import{u as I,r as j,j as e,t as E}from"./index-YuejkHoJ.js";import{p as L,q as T,M as B,a6 as P,bz as Y,l as K}from"./pageStore-D_fKLv-o.js";import"./client-DD5czSuF.js";import{a as Q}from"./phoneList-BLVdQcXY.js";import{F as W,G as J,H as Z,J as ee,a as D,K as ie,M as te,N as ae,O as H,u as S,b as _,L as G,P as se,i as k,Q as ne,f as q,g as oe,p as re,j as le,I as de,m as O,k as ce,t as ue,R as me,c as he,d as ge}from"./imageStudio-D67oElIb.js";import{u as $,qV as xe,aN as pe,df as je,m3 as R,N as Se,jb as fe,aO as be,aP as ve,aQ as ye,b4 as we,R as Ne,ap as Ce}from"./appStore-BskcSDl6.js";/* empty css */import{L as ke}from"./lock-open-DVWCLSZm.js";import{G as Me}from"./git-branch-DzGWffyD.js";import{R as Ie}from"./rotate-ccw-CyZpL7MX.js";import{L as ze}from"./layout-grid-CzxXbCDa.js";import"./react-DOzedx9n.js";import"./InlineFiles-3g2jMUeA.js";import"./nativeDownload-DlnT8U-y.js";import"./dbStore-Bc2lC8ZI.js";import"./ipc-8cxXGSZK.js";import"./drawingStore-BD5m2eqn.js";const Ee=[["path",{d:"M6 2v14a2 2 0 0 0 2 2h14",key:"ron5a4"}],["path",{d:"M18 22V8a2 2 0 0 0-2-2H2",key:"7s9ehn"}]],$e=L("crop",Ee);const Pe=[["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"}]],Le=L("flip-horizontal-2",Pe);const Re=[["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"}]],Fe=L("flip-vertical-2",Re);function Ae({image:i,onApply:d,onCancel:n}){const{t:l}=I(),a=W(i.blob),[c,g]=j.useState(i.crop||{x:0,y:0,w:i.width,h:i.height}),s=j.useRef(null),o=j.useRef(null),f=r=>{const u=Math.max(0,Math.min(i.width-1,Math.round(r.x))),b=Math.max(0,Math.min(i.height-1,Math.round(r.y)));return{x:u,y:b,w:Math.max(1,Math.min(i.width-u,Math.round(r.w))),h:Math.max(1,Math.min(i.height-b,Math.round(r.h)))}};return e.jsxs("div",{className:"ims-crop",onKeyDown:r=>{r.key==="Escape"&&(r.stopPropagation(),n())},children:[e.jsx("h4",{children:l("imageStudio.crop")}),e.jsx("p",{children:l("imageStudio.cropHint")}),e.jsxs("div",{ref:o,className:"ims-crop-stage",style:{aspectRatio:i.width/i.height},onPointerDown:r=>{const u=r.currentTarget.getBoundingClientRect(),b=r.target.dataset.edge||"move";s.current={pointer:r.pointerId,x:r.clientX,y:r.clientY,base:c,edge:b,sx:i.width/u.width,sy:i.height/u.height},r.currentTarget.setPointerCapture(r.pointerId),r.preventDefault()},onPointerMove:r=>{const u=s.current;if(!u||u.pointer!==r.pointerId)return;const b=(r.clientX-u.x)*u.sx,x=(r.clientY-u.y)*u.sy,h=u.base;if(u.edge==="move")g(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+x))}));else{const y=u.edge.includes("w")?Math.max(0,Math.min(h.x+h.w-1,h.x+b)):h.x,t=u.edge.includes("n")?Math.max(0,Math.min(h.y+h.h-1,h.y+x)):h.y,p=u.edge.includes("e")?Math.min(i.width,Math.max(h.x+1,h.x+h.w+b)):h.x+h.w,v=u.edge.includes("s")?Math.min(i.height,Math.max(h.y+1,h.y+h.h+x)):h.y+h.h;g(f({x:y,y:t,w:p-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(r=>e.jsx("span",{"data-edge":r,className:`ims-crop-handle ${r}`},r))})]}),e.jsxs("select",{"aria-label":l("imageStudio.cropRatio"),defaultValue:"",onChange:r=>{const u=Number(r.target.value)||i.width/i.height,b=Math.min(i.width,i.height*u),x=b/u;g(f({x:(i.width-b)/2,y:(i.height-x)/2,w:b,h:x}))},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(([r,u])=>e.jsx("option",{value:r,children:u},u))]}),e.jsx("div",{className:"ims-fields",children:["x","y","w","h"].map(r=>e.jsxs("label",{children:[l(`imageStudio.${r}`),e.jsx("input",{type:"number","aria-label":l(`imageStudio.crop.${r}`),value:c[r],min:r==="x"||r==="y"?0:1,max:r==="x"||r==="w"?i.width:i.height,onChange:u=>g(f({...c,[r]:Number(u.target.value)||0}))})]},r))}),e.jsxs("div",{className:"ims-button-row",children:[e.jsx("button",{onClick:n,children:l("imageStudio.cancel")}),e.jsx("button",{className:"ims-primary",disabled:!J(c,i.width,i.height),onClick:()=>d(c),children:l("imageStudio.applyCrop")})]})]})}const Te=Z,qe=["low","medium","high","xhigh","max"];function Be(i,d,n,l){const[a,c]=n.split(":").map(Number),g=1+Math.max(.1,Math.min(1,l)),s=Math.ceil(Math.max(i*g,d*g*a/c)),o=Math.ceil(s*c/a);return{w:s,h:o,x:Math.floor((s-i)/2),y:Math.floor((o-d)/2)}}async function De(i,d,n,l,a){if(!i.length||i.length>8)throw new Error(E("imageStudio.ai.referenceLimit"));if(d!=="expand")return Promise.all(i.map(s=>ee(s,a)));const c=await D([i[0]],!0,1024),g=await ie(c);try{const s=Be(g.width,g.height,n,l),o=Math.min(1,1536/Math.max(s.w,s.h)),f=document.createElement("canvas");f.width=Math.round(s.w*o),f.height=Math.round(s.h*o);const r=f.getContext("2d");if(!r)throw new Error("Canvas unavailable");r.drawImage(g,s.x*o,s.y*o,g.width*o,g.height*o);const u=await new Promise((x,h)=>f.toBlob(y=>y?x(y):h(new Error("PNG encoding failed")),"image/png")),b=await te(u);return[{name:"expand-reference.png",mimeType:"image/png",size:u.size,data:b.split(",")[1]}]}finally{g.close()}}function He(i,d,n,l,a,c=""){return[E(`imageStudio.ai.prompt.${i}`),E(`imageStudio.ai.sourcePrompt.${i==="expand"?"current":a}`),d.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 _e({board:i,images:d}){const{t:n}=I(),[l,a]=j.useState("edit"),[c,g]=j.useState(""),[s,o]=j.useState("original"),[f,r]=j.useState("current"),[u,b]=j.useState(1),[x,h]=j.useState(.5),[y,t]=j.useState(""),[p,v]=j.useState(!1),[w,R]=j.useState(""),N=$(m=>!!(i.sessionId&&m.runningBySession[i.sessionId])),C=ae(d[0],s),V=async()=>{v(!0),R("");let m=[];try{const M=await H(i.id);if(S.getState().activeId!==i.id)return;if($.getState().runningBySession[M])throw new Error(n("imageStudio.ai.wait"));m=S.getState().beginGeneration(i.id,M,{count:u,aspect:C.aspect,ratio:C.requested,kind:"edit",sourceIds:d.map(O=>O.id)});const A=l==="expand"?"current":f,Y=await qe(d,l,C.requested,x,A);if(!await $.getState().send(He(l,c,C,u,A,y),Y,void 0,void 0,void 0,M))throw new Error(n("imageStudio.ai.sendFailed"));S.getState().activateGeneration(m)}catch(M){m.length&&S.getState().failGeneration(i.id,{ids:m}),R(M instanceof Error?M.message:String(M))}finally{v(!1)}};return e.jsxs("details",{className:"ims-ai",open:!0,children:[e.jsxs("summary",{children:[e.jsx(T,{size:15}),n("imageStudio.ai.title"),e.jsxs("span",{children:[d.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(m=>e.jsx("button",{"aria-pressed":l===m,disabled:N||p||m!=="edit"&&d.length!==1,onClick:()=>a(m),children:n(`imageStudio.ai.${m}`)},m))}),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:m=>g(m.target.value),maxLength:8e3,rows:3,disabled:p||N}),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:m=>r(m.target.value),disabled:p||N||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:m=>o(m.target.value),disabled:p||N,children:[e.jsx("option",{value:"original",children:n("imageStudio.ai.ratio.original",{ratio:C.originalLabel})}),Te.map(m=>e.jsx("option",{value:m,children:m},m))]})]}),e.jsxs("label",{children:[n("imageStudio.ai.count"),e.jsx("select",{"aria-label":n("imageStudio.ai.count"),value:u,onChange:m=>b(Number(m.target.value)),disabled:p||N,children:[1,2,3,4].map(m=>e.jsx("option",{children:m},m))})]}),e.jsxs("label",{children:[n("imageStudio.ai.quality"),e.jsxs("select",{"aria-label":n("imageStudio.ai.quality"),value:y,onChange:m=>t(m.target.value),disabled:p||N,children:[e.jsx("option",{value:"",children:n("imageStudio.ai.quality.default")}),Be.map(m=>e.jsx("option",{value:m,children:n(`imageStudio.ai.quality.${m}`)},m))]})]})]}),C.requested!==C.engine&&e.jsx("p",{className:"ims-caption ims-ai-ratio-note",children:n("imageStudio.ai.ratioFit",{ratio:C.requested,engineRatio:C.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:x,onChange:m=>h(Number(m.target.value))}),e.jsxs("output",{children:[Math.round(x*100),"%"]})]}),e.jsxs("button",{className:"ims-primary",disabled:p||N||!d.length||d.length>8||l==="edit"&&!c.trim(),onClick:()=>{V()},children:[e.jsx(T,{size:15}),n(N||p?"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 ri(){const{t:i}=I(),d=S(o=>o.boards),n=S(o=>o.activeId),l=S(o=>o.ready);j.useEffect(()=>{S.getState().hydrate()},[]);const a=j.useMemo(()=>Object.values(d).sort((o,f)=>f.updatedAt-o.updatedAt).slice(0,12),[d]),c=o=>{o(),K.getState().openView("image-studio",{},"main")},g=()=>c(()=>S.getState().create(i("imageStudio.untitled"))),s=X();return e.jsxs("nav",{className:`csn ims-nav${s?" pl-fab-room":""}`,"aria-label":i("imageStudio.title"),children:[e.jsxs("div",{className:"csn-section",children:[!s&&e.jsx("span",{className:"csn-heading",children:i("imageStudio.nav.create")}),!s&&e.jsxs("button",{type:"button",className:"csn-item",disabled:!l,onClick:g,children:[e.jsx(L,{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(ze,{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(o=>{const f=le(o,1)[0];return e.jsxs("button",{type:"button",className:"csn-item",title:o.name,"aria-current":o.id===n?"page":void 0,onClick:()=>c(()=>S.getState().open(o.id)),children:[f?e.jsx("span",{className:"ims-nav-thumb",children:e.jsx(de,{image:f})}):e.jsx(F,{size:16}),e.jsx("span",{className:"ims-nav-name",children:o.name})]},o.id)})]}),s&&l&&e.jsx(Q,{label:i("imageStudio.new"),icon:e.jsx(L,{}),onClick:g})]})}function li(i){const{t:d}=I(),n=S(o=>o.activeId?o.boards[o.activeId]:void 0),[l,a]=j.useState(!1),[c,g]=j.useState("");j.useEffect(()=>{S.getState().hydrate()},[]),j.useEffect(()=>{n?.sessionId&&$.getState().loadSessionHistory(n.sessionId)},[n?.sessionId]);const s=Ne()?.Chat;return n?.sessionId&&s?e.jsx("div",{className:"ims-chat","data-image-studio-chat":n.id,children:e.jsx(s,{...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(D,{size:26,strokeWidth:1.3}),e.jsx("h3",{children:d("imageStudio.chat")}),e.jsx("p",{children:d(n?"imageStudio.chatHint":"imageStudio.choose")}),n&&e.jsxs("button",{className:"ims-primary",disabled:l,onClick:async()=>{a(!0),g("");try{await H(n.id)}catch(o){g(String(o))}finally{a(!1)}},children:[l?e.jsx(Se,{size:15,className:"ims-spin"}):e.jsx(L,{size:15}),d("imageStudio.connect")]}),c&&e.jsx("p",{role:"alert",children:d("imageStudio.error",{error:c})})]})}function di(){const{t:i}=I(),d=S(s=>s.activeId?s.boards[s.activeId]:void 0),n=S(s=>s.selection),[l,a]=j.useState(""),c=d?_(d).reverse().filter(s=>s.name.toLocaleLowerCase().includes(l.toLocaleLowerCase())):[],g=(s,o)=>d&&S.getState().update(d.id,f=>U(f,r=>r.id===s?{...r,...o}:r));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:o=>S.setState({selection:o.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.${se(s)}`)})]})]}),e.jsx("button",{"aria-label":i(s.hidden?"imageStudio.show":"imageStudio.hide"),title:i(s.hidden?"imageStudio.show":"imageStudio.hide"),onClick:()=>g(s.id,{hidden:!s.hidden}),children:s.hidden?e.jsx(xe,{size:14}):e.jsx(pe,{size:14})}),e.jsx("button",{"aria-label":i(s.locked?"imageStudio.unlock":"imageStudio.lock"),title:i(s.locked?"imageStudio.unlock":"imageStudio.lock"),onClick:()=>g(s.id,{locked:!s.locked}),children:s.locked?e.jsx(je,{size:14}):e.jsx(ke,{size:14})})]},s.id))}),!c.length&&e.jsxs("div",{className:"ims-panel-empty",children:[e.jsx(F,{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:d,onChange:n,min:l=-1e5,max:a=1e5}){const[c,g]=j.useState(String(Math.round(d*100)/100));j.useEffect(()=>g(String(Math.round(d*100)/100)),[d]);const s=()=>{const o=Number(c);c.trim()&&Number.isFinite(o)?n(Math.max(l,Math.min(a,o))):g(String(d))};return e.jsxs("label",{children:[i,e.jsx("input",{type:"number","aria-label":i,value:c,min:l,max:a,onChange:o=>g(o.target.value),onBlur:s,onKeyDown:o=>{o.key==="Enter"&&o.currentTarget.blur()}})]})}function ci(){const{t:i}=I(),d=S(t=>t.activeId?t.boards[t.activeId]:void 0),n=S(t=>t.selection),l=d?_(d).filter(t=>n.includes(t.id)):[],a=l[0],c=a&&k(a)&&a.parentId?d?.images.find(t=>t.id===a.parentId):void 0,[g,s]=j.useState(""),[o,f]=j.useState(!1),[r,u]=j.useState(!1);j.useEffect(()=>{u(!1),s("")},[d?.id,a?.id]);const b=async t=>{f(!0),s("");try{await t()}catch(p){s(String(p))}finally{f(!1)}};if(!d||!a)return e.jsxs("div",{className:"ims-panel ims-panel-empty",children:[e.jsx(F,{size:26}),e.jsx("p",{children:i("imageStudio.select")})]});const x=t=>S.getState().update(d.id,p=>U(p,v=>v.id===a.id&&!v.locked?{...v,...t}:v)),h=t=>{k(a)&&x(me(a,t))},y=(t,p)=>{let v={x:a.x,y:a.y,w:a.w,h:a.h,[t]:p};if(k(a)&&(t==="w"||t==="h")){const w=ce(a);v={...v,...t==="w"?{h:p*w.h/w.w}:{w:p*w.w/w.h}}}S.getState().update(d.id,w=>ue(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(_e,{board:d,images:l.filter(k)},`${d.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=>x({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:p=>y(t,p)},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(Me,{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:()=>u(!r),children:e.jsx($e,{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(fe,{size:16})}),e.jsx("button",{title:i("imageStudio.flipX"),"aria-label":i("imageStudio.flipX"),onClick:()=>h({flipX:!a.flipX}),children:e.jsx(Pe,{size:16})}),e.jsx("button",{title:i("imageStudio.flipY"),"aria-label":i("imageStudio.flipY"),onClick:()=>h({flipY:!a.flipY}),children:e.jsx(Re,{size:16})})]}),r&&e.jsx(Ae,{image:a,onCancel:()=>u(!1),onApply:t=>{h({crop:t}),u(!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:p=>x({[t]:Number(p.target.value)})})]},t))}),e.jsxs("button",{onClick:()=>x({brightness:100,contrast:100,saturation:100}),children:[e.jsx(Ie,{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[p,v]=t.target.value.split("x").map(Number);x({w:p,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=>x({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=>x({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=>x({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=>x({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=>x({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=>x({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=>x({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=>x({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=>x({strokeWidth:t})}),e.jsx(z,{label:i("imageStudio.radius"),value:a.radius,min:0,max:1e3,onChange:t=>x({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(d.id,p=>ne(p,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(d.id,t=>B(t,n,"up")),children:e.jsx(be,{size:15})}),e.jsx("button",{title:i("imageStudio.layerDown"),"aria-label":i("imageStudio.layerDown"),onClick:()=>S.getState().update(d.id,t=>B(t,n,"down")),children:e.jsx(ve,{size:15})}),e.jsx("button",{title:i("imageStudio.remove"),"aria-label":i("imageStudio.remove"),onClick:oe,children:e.jsx(ye,{size:15})})]}),e.jsxs("div",{className:"ims-panel-actions",children:[e.jsxs("button",{disabled:o||l.every(t=>t.hidden),onClick:()=>{b(he)},children:[e.jsx(D,{size:14}),i("imageStudio.reference")]}),e.jsxs("button",{onClick:()=>re(!0),children:[e.jsx(we,{size:14}),i("imageStudio.duplicate")]}),l.length===1&&k(a)&&e.jsxs("button",{className:"ims-primary",disabled:o,onClick:()=>{b(async()=>ge(await q([a],!0),a.name.replace(/\.[^.]+$/,"")+".png"))},children:[e.jsx(Ce,{size:14}),i("imageStudio.export")]})]}),g&&e.jsx("p",{role:"alert",children:i("imageStudio.error",{error:g})})]})}export{di as ImageStudioAssets,li as ImageStudioChat,ci as ImageStudioInspector,ri as ImageStudioNav,z as NumberField};
|
|
3
|
+
`)}function _e({board:i,images:d}){const{t:n}=I(),[l,a]=j.useState("edit"),[c,g]=j.useState(""),[s,o]=j.useState("original"),[f,r]=j.useState("current"),[u,b]=j.useState(1),[x,h]=j.useState(.5),[y,t]=j.useState(""),[p,v]=j.useState(!1),[w,F]=j.useState(""),C=$(m=>!!(i.sessionId&&m.runningBySession[i.sessionId])),N=ae(d[0],s),V=async()=>{v(!0),F("");let m=[];try{const M=await H(i.id);if(S.getState().activeId!==i.id)return;if($.getState().runningBySession[M])throw new Error(n("imageStudio.ai.wait"));m=S.getState().beginGeneration(i.id,M,{count:u,aspect:N.aspect,ratio:N.requested,kind:"edit",sourceIds:d.map(X=>X.id)});const A=l==="expand"?"current":f,U=await De(d,l,N.requested,x,A);if(!await $.getState().send(He(l,c,N,u,A,y),U,void 0,void 0,void 0,M))throw new Error(n("imageStudio.ai.sendFailed"));S.getState().activateGeneration(m)}catch(M){m.length&&S.getState().failGeneration(i.id,{ids:m}),F(M instanceof Error?M.message:String(M))}finally{v(!1)}};return e.jsxs("details",{className:"ims-ai",open:!0,children:[e.jsxs("summary",{children:[e.jsx(T,{size:15}),n("imageStudio.ai.title"),e.jsxs("span",{children:[d.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(m=>e.jsx("button",{"aria-pressed":l===m,disabled:C||p||m!=="edit"&&d.length!==1,onClick:()=>a(m),children:n(`imageStudio.ai.${m}`)},m))}),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:m=>g(m.target.value),maxLength:8e3,rows:3,disabled:p||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:m=>r(m.target.value),disabled:p||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:m=>o(m.target.value),disabled:p||C,children:[e.jsx("option",{value:"original",children:n("imageStudio.ai.ratio.original",{ratio:N.originalLabel})}),Te.map(m=>e.jsx("option",{value:m,children:m},m))]})]}),e.jsxs("label",{children:[n("imageStudio.ai.count"),e.jsx("select",{"aria-label":n("imageStudio.ai.count"),value:u,onChange:m=>b(Number(m.target.value)),disabled:p||C,children:[1,2,3,4].map(m=>e.jsx("option",{children:m},m))})]}),e.jsxs("label",{children:[n("imageStudio.ai.quality"),e.jsxs("select",{"aria-label":n("imageStudio.ai.quality"),value:y,onChange:m=>t(m.target.value),disabled:p||C,children:[e.jsx("option",{value:"",children:n("imageStudio.ai.quality.default")}),qe.map(m=>e.jsx("option",{value:m,children:n(`imageStudio.ai.quality.${m}`)},m))]})]})]}),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:x,onChange:m=>h(Number(m.target.value))}),e.jsxs("output",{children:[Math.round(x*100),"%"]})]}),e.jsxs("button",{className:"ims-primary",disabled:p||C||!d.length||d.length>8||l==="edit"&&!c.trim(),onClick:()=>{V()},children:[e.jsx(T,{size:15}),n(C||p?"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 ri(){const{t:i}=I(),d=S(o=>o.boards),n=S(o=>o.activeId),l=S(o=>o.ready);j.useEffect(()=>{S.getState().hydrate()},[]);const a=j.useMemo(()=>Object.values(d).sort((o,f)=>f.updatedAt-o.updatedAt).slice(0,12),[d]),c=o=>{o(),K.getState().openView("image-studio",{},"main")},g=()=>c(()=>S.getState().create(i("imageStudio.untitled"))),s=Y();return e.jsxs("nav",{className:`csn ims-nav${s?" pl-fab-room":""}`,"aria-label":i("imageStudio.title"),children:[e.jsxs("div",{className:"csn-section",children:[!s&&e.jsx("span",{className:"csn-heading",children:i("imageStudio.nav.create")}),!s&&e.jsxs("button",{type:"button",className:"csn-item",disabled:!l,onClick:g,children:[e.jsx(P,{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(ze,{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(o=>{const f=le(o,1)[0];return e.jsxs("button",{type:"button",className:"csn-item",title:o.name,"aria-current":o.id===n?"page":void 0,onClick:()=>c(()=>S.getState().open(o.id)),children:[f?e.jsx("span",{className:"ims-nav-thumb",children:e.jsx(de,{image:f})}):e.jsx(R,{size:16}),e.jsx("span",{className:"ims-nav-name",children:o.name})]},o.id)})]}),s&&l&&e.jsx(Q,{label:i("imageStudio.new"),icon:e.jsx(P,{}),onClick:g})]})}function li(i){const{t:d}=I(),n=S(o=>o.activeId?o.boards[o.activeId]:void 0),[l,a]=j.useState(!1),[c,g]=j.useState("");j.useEffect(()=>{S.getState().hydrate()},[]),j.useEffect(()=>{n?.sessionId&&$.getState().loadSessionHistory(n.sessionId)},[n?.sessionId]);const s=Ce()?.Chat;return n?.sessionId&&s?e.jsx("div",{className:"ims-chat","data-image-studio-chat":n.id,children:e.jsx(s,{...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:d("imageStudio.chat")}),e.jsx("p",{children:d(n?"imageStudio.chatHint":"imageStudio.choose")}),n&&e.jsxs("button",{className:"ims-primary",disabled:l,onClick:async()=>{a(!0),g("");try{await H(n.id)}catch(o){g(String(o))}finally{a(!1)}},children:[l?e.jsx(Se,{size:15,className:"ims-spin"}):e.jsx(P,{size:15}),d("imageStudio.connect")]}),c&&e.jsx("p",{role:"alert",children:d("imageStudio.error",{error:c})})]})}function di(){const{t:i}=I(),d=S(s=>s.activeId?s.boards[s.activeId]:void 0),n=S(s=>s.selection),[l,a]=j.useState(""),c=d?_(d).reverse().filter(s=>s.name.toLocaleLowerCase().includes(l.toLocaleLowerCase())):[],g=(s,o)=>d&&S.getState().update(d.id,f=>O(f,r=>r.id===s?{...r,...o}:r));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:o=>S.setState({selection:o.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.${se(s)}`)})]})]}),e.jsx("button",{"aria-label":i(s.hidden?"imageStudio.show":"imageStudio.hide"),title:i(s.hidden?"imageStudio.show":"imageStudio.hide"),onClick:()=>g(s.id,{hidden:!s.hidden}),children:s.hidden?e.jsx(xe,{size:14}):e.jsx(pe,{size:14})}),e.jsx("button",{"aria-label":i(s.locked?"imageStudio.unlock":"imageStudio.lock"),title:i(s.locked?"imageStudio.unlock":"imageStudio.lock"),onClick:()=>g(s.id,{locked:!s.locked}),children:s.locked?e.jsx(je,{size:14}):e.jsx(ke,{size:14})})]},s.id))}),!c.length&&e.jsxs("div",{className:"ims-panel-empty",children:[e.jsx(R,{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:d,onChange:n,min:l=-1e5,max:a=1e5}){const[c,g]=j.useState(String(Math.round(d*100)/100));j.useEffect(()=>g(String(Math.round(d*100)/100)),[d]);const s=()=>{const o=Number(c);c.trim()&&Number.isFinite(o)?n(Math.max(l,Math.min(a,o))):g(String(d))};return e.jsxs("label",{children:[i,e.jsx("input",{type:"number","aria-label":i,value:c,min:l,max:a,onChange:o=>g(o.target.value),onBlur:s,onKeyDown:o=>{o.key==="Enter"&&o.currentTarget.blur()}})]})}function ci(){const{t:i}=I(),d=S(t=>t.activeId?t.boards[t.activeId]:void 0),n=S(t=>t.selection),l=d?_(d).filter(t=>n.includes(t.id)):[],a=l[0],c=a&&k(a)&&a.parentId?d?.images.find(t=>t.id===a.parentId):void 0,[g,s]=j.useState(""),[o,f]=j.useState(!1),[r,u]=j.useState(!1);j.useEffect(()=>{u(!1),s("")},[d?.id,a?.id]);const b=async t=>{f(!0),s("");try{await t()}catch(p){s(String(p))}finally{f(!1)}};if(!d||!a)return e.jsxs("div",{className:"ims-panel ims-panel-empty",children:[e.jsx(R,{size:26}),e.jsx("p",{children:i("imageStudio.select")})]});const x=t=>S.getState().update(d.id,p=>O(p,v=>v.id===a.id&&!v.locked?{...v,...t}:v)),h=t=>{k(a)&&x(me(a,t))},y=(t,p)=>{let v={x:a.x,y:a.y,w:a.w,h:a.h,[t]:p};if(k(a)&&(t==="w"||t==="h")){const w=ce(a);v={...v,...t==="w"?{h:p*w.h/w.w}:{w:p*w.w/w.h}}}S.getState().update(d.id,w=>ue(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(_e,{board:d,images:l.filter(k)},`${d.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=>x({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:p=>y(t,p)},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(Me,{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:()=>u(!r),children:e.jsx($e,{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(fe,{size:16})}),e.jsx("button",{title:i("imageStudio.flipX"),"aria-label":i("imageStudio.flipX"),onClick:()=>h({flipX:!a.flipX}),children:e.jsx(Le,{size:16})}),e.jsx("button",{title:i("imageStudio.flipY"),"aria-label":i("imageStudio.flipY"),onClick:()=>h({flipY:!a.flipY}),children:e.jsx(Fe,{size:16})})]}),r&&e.jsx(Ae,{image:a,onCancel:()=>u(!1),onApply:t=>{h({crop:t}),u(!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:p=>x({[t]:Number(p.target.value)})})]},t))}),e.jsxs("button",{onClick:()=>x({brightness:100,contrast:100,saturation:100}),children:[e.jsx(Ie,{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[p,v]=t.target.value.split("x").map(Number);x({w:p,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=>x({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=>x({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=>x({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=>x({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=>x({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=>x({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=>x({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=>x({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=>x({strokeWidth:t})}),e.jsx(z,{label:i("imageStudio.radius"),value:a.radius,min:0,max:1e3,onChange:t=>x({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(d.id,p=>ne(p,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(d.id,t=>q(t,n,"up")),children:e.jsx(be,{size:15})}),e.jsx("button",{title:i("imageStudio.layerDown"),"aria-label":i("imageStudio.layerDown"),onClick:()=>S.getState().update(d.id,t=>q(t,n,"down")),children:e.jsx(ve,{size:15})}),e.jsx("button",{title:i("imageStudio.remove"),"aria-label":i("imageStudio.remove"),onClick:oe,children:e.jsx(ye,{size:15})})]}),e.jsxs("div",{className:"ims-panel-actions",children:[e.jsxs("button",{disabled:o||l.every(t=>t.hidden),onClick:()=>{b(he)},children:[e.jsx(B,{size:14}),i("imageStudio.reference")]}),e.jsxs("button",{onClick:()=>re(!0),children:[e.jsx(we,{size:14}),i("imageStudio.duplicate")]}),l.length===1&&k(a)&&e.jsxs("button",{className:"ims-primary",disabled:o,onClick:()=>{b(async()=>ge(await D([a],!0),a.name.replace(/\.[^.]+$/,"")+".png"))},children:[e.jsx(Ne,{size:14}),i("imageStudio.export")]})]}),g&&e.jsx("p",{role:"alert",children:i("imageStudio.error",{error:g})})]})}export{di as ImageStudioAssets,li as ImageStudioChat,ci as ImageStudioInspector,ri as ImageStudioNav,z as NumberField};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as U,r as o,j as t}from"./index-YuejkHoJ.js";import{ah as xe,M as J,bo as fe,a6 as Oe,f as Re,b7 as $e,ba as _,am as Ae,L as Be,bv as Ue,q as qe,b9 as Fe}from"./pageStore-D_fKLv-o.js";import"./client-DD5czSuF.js";import{N as te,R as $,b4 as Se,aO as He,aP as Ve,df as _e,aQ as je,E as Ke,S as We,de as Ye,m3 as Xe,X as Ge,u as Qe,d3 as Ze,aD as Je,mu as et}from"./appStore-BskcSDl6.js";import{u as tt}from"./gestures-Bx9M0le5.js";import{C as st,a as it}from"./Chrome-owLewFu4.js";import{s as at,d as ee,r as nt,b as D,i as ve,h as rt,u as r,a as ot,c as be,e as ye,p as B,f as ce,m as lt,g as Ce,j as dt,k as we,I as ct,l as ut,n as mt,o as gt,q as pt,t as ue,v as ht,S as me,w as xt,x as K,y as A,L as ft,z as ge,A as St,B as jt,C as vt,D as bt,E as yt}from"./imageStudio-D67oElIb.js";import{C as Ct,a as wt}from"./launchpad-BX4jQyF4.js";import{a as kt,C as zt}from"./copy-plus-CVHqDNny.js";import{L as Nt}from"./lock-open-DVWCLSZm.js";import{U as W}from"./upload-VtCrluEO.js";import{F as It}from"./file-down-Cjo_T6By.js";import{U as Et}from"./undo-2-C4ZCsMsx.js";import{R as Pt}from"./redo-2-DWZTaEz-.js";import{L as Lt}from"./layout-grid-CzxXbCDa.js";import{A as Tt}from"./arrow-up-right-DEykpgsH.js";import{H as Dt,T as Mt,F as Ot}from"./type-CMyP4cKt.js";import"./react-DOzedx9n.js";import"./dbStore-Bc2lC8ZI.js";import"./ipc-8cxXGSZK.js";import"./nativeDownload-DlnT8U-y.js";import"./drawingStore-BD5m2eqn.js";import"./magnet-BmVcZ9U4.js";import"./InlineFiles-3g2jMUeA.js";import"./pencil-BgF4Kiqp.js";import"./folder-plus-Cmhq0GcR.js";import"./folder-DiaFWdCg.js";function Rt({board:s,selection:i,onClose:j}){const{t:c}=U(),[g,v]=o.useState("png"),[b,w]=o.useState(1),[l,p]=o.useState("transparent"),[S,y]=o.useState(.92),[N,C]=o.useState(!1),[u,d]=o.useState(""),z=at(s,i),P=z?.bounds,L=Math.round((P?.w||0)*b),M=Math.round((P?.h||0)*b),O=!P||L<1||M<1||L*M>4e7||Math.max(L,M)>16384;return t.jsxs("section",{className:"ims-export ims-panel","aria-label":c("imageStudio.exportOptions"),children:[t.jsxs("div",{className:"ims-section-head",children:[t.jsx("h3",{children:c("imageStudio.exportOptions")}),t.jsx("button",{"aria-label":c("imageStudio.close"),onClick:j,children:t.jsx(xe,{size:15})})]}),t.jsxs("div",{className:"ims-fields",children:[t.jsxs("label",{children:[c("imageStudio.format"),t.jsx("select",{"aria-label":c("imageStudio.format"),value:g,onChange:h=>v(h.target.value),children:["png","jpeg","webp","svg"].map(h=>t.jsx("option",{value:h,children:h.toUpperCase()},h))})]}),t.jsxs("label",{children:[c("imageStudio.scale"),t.jsx("select",{"aria-label":c("imageStudio.scale"),value:b,onChange:h=>w(Number(h.target.value)),children:[.5,1,2,3].map(h=>t.jsxs("option",{value:h,children:[h,"×"]},h))})]}),t.jsxs("label",{children:[c("imageStudio.background"),t.jsxs("select",{"aria-label":c("imageStudio.background"),value:l,onChange:h=>p(h.target.value),children:[t.jsx("option",{value:"transparent",children:c("imageStudio.transparent")}),t.jsx("option",{value:"#ffffff",children:c("imageStudio.white")}),t.jsx("option",{value:"#000000",children:c("imageStudio.black")})]})]}),(g==="jpeg"||g==="webp")&&t.jsxs("label",{children:[c("imageStudio.quality"),t.jsx("input",{"aria-label":c("imageStudio.quality"),type:"range",min:".1",max:"1",step:".05",value:S,onChange:h=>y(Number(h.target.value))})]})]}),t.jsxs("p",{children:[L," × ",M," px · ",c(i.length?"imageStudio.selectedOnly":"imageStudio.allVisible")]}),g==="svg"&&t.jsx("p",{children:c("imageStudio.svgHint")}),g==="jpeg"&&l==="transparent"&&t.jsx("p",{children:c("imageStudio.jpegHint")}),O&&t.jsx("p",{role:"alert",children:c("imageStudio.exportLimit")}),t.jsxs("button",{className:"ims-primary",disabled:N||O,onClick:async()=>{C(!0),d("");try{ee(await nt(s,i,{format:g,scale:b,background:l,quality:S}),`${s.name}.${g==="jpeg"?"jpg":g}`)}catch(h){d(String(h))}finally{C(!1)}},children:[N?t.jsx(te,{className:"ims-spin",size:15}):t.jsx($,{size:15}),c("imageStudio.download")]}),u&&t.jsx("p",{role:"alert",children:c("imageStudio.error",{error:u})})]})}function $t({target:s,board:i,busy:j,onClose:c,onImport:g,onExport:v,onInspect:b,run:w}){const{t:l}=U(),p=i?D(i).filter(d=>s.ids.includes(d.id)):[],S=p.length===1&&ve(p[0])?p[0]:void 0,y=p.filter(d=>!d.locked).map(d=>d.id),N=/Mac|iPhone|iPad/.test(navigator.platform)?"⌘":"Ctrl+",C=d=>()=>{i&&r.getState().activeId!==i.id||(r.setState({selection:p.map(z=>z.id)}),d())},u=[];return S&&u.push({label:l("imageStudio.downloadImage"),icon:t.jsx($,{size:14}),disabled:j,run:C(()=>{w(async()=>ee(await ot([S],!0),S.name.replace(/\.[^.]+$/,"")+".png"))})},{label:l("imageStudio.downloadOriginal"),icon:t.jsx($,{size:14}),run:C(()=>{const d={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"}[S.blob.type]||"png";ee(S.blob,S.name.replace(/\.[^.]+$/,"")+"-original."+d)})}),p.length&&i?u.push({label:l("imageStudio.exportSelection"),icon:t.jsx($,{size:14}),disabled:j,run:C(v)},{label:l("imageStudio.reference"),icon:t.jsx(J,{size:14}),separatorBefore:!0,disabled:j||p.length>8,run:C(()=>{w(be)})},{label:l("imageStudio.inspector"),icon:t.jsx(fe,{size:14}),run:C(b)},{label:l("imageStudio.copyObjects"),icon:t.jsx(Se,{size:14}),shortcut:`${N}C`,separatorBefore:!0,run:C(ye)},{label:l("imageStudio.duplicate"),icon:t.jsx(kt,{size:14}),shortcut:`${N}D`,run:C(()=>B(!0))},{label:l("imageStudio.layerUp"),icon:t.jsx(He,{size:14}),separatorBefore:!0,disabled:!y.length,run:C(()=>r.getState().update(i.id,d=>ce(d,y,"up")))},{label:l("imageStudio.layerDown"),icon:t.jsx(Ve,{size:14}),disabled:!y.length,run:C(()=>r.getState().update(i.id,d=>ce(d,y,"down")))},{label:l(y.length?"imageStudio.lock":"imageStudio.unlock"),icon:y.length?t.jsx(_e,{size:14}):t.jsx(Nt,{size:14}),run:C(()=>r.getState().update(i.id,d=>lt(d,z=>s.ids.includes(z.id)?{...z,locked:!!y.length}:z)))},{label:l("imageStudio.remove"),icon:t.jsx(je,{size:14}),shortcut:"⌫",separatorBefore:!0,danger:!0,disabled:!y.length,run:C(Ce)}):u.push({label:l("imageStudio.import"),icon:t.jsx(W,{size:14}),disabled:j,run:g},{label:l("imageStudio.pasteObjects"),icon:t.jsx(zt,{size:14}),shortcut:`${N}V`,disabled:!i||!rt(),run:C(()=>B())},{label:l("imageStudio.selectAll"),icon:t.jsx(Ct,{size:14}),disabled:!i?.images.length&&!i?.elements?.length,run:()=>r.setState({selection:i?D(i).filter(d=>!d.hidden).map(d=>d.id):[]})},{label:l("imageStudio.exportBoard"),icon:t.jsx($,{size:14}),separatorBefore:!0,disabled:j||!i||!D(i).some(d=>!d.hidden),run:C(v)}),t.jsx(wt,{menu:{x:s.x,y:s.y,items:u},onClose:c,autoFocus:!0})}const pe=4/3,At=.05;function Bt({board:s}){const i=dt(s,2);if(!i.length)return t.jsx("span",{className:"ims-cover is-empty",children:t.jsx("span",{className:"ims-cover-in",children:t.jsx(Xe,{size:22,strokeWidth:1.4})})});const j=i.map(g=>{const v=we(g);return v.w/v.h}),c=Math.min(1,(1-At*(i.length-1))*pe/j.reduce((g,v)=>g+v,0));return t.jsx("span",{className:"ims-cover",children:t.jsx("span",{className:"ims-cover-in",children:i.map((g,v)=>t.jsx("span",{className:"ims-cover-img",style:{width:`${j[v]*c/pe*100}%`,aspectRatio:String(j[v])},children:t.jsx(ct,{image:g})},g.id))})})}function Ut(){const{t:s,locale:i}=U(),j=r(u=>u.boards),[c,g]=o.useState(""),[v,b]=o.useState(!1),[w,l]=o.useState(""),p=o.useRef(null),S=o.useMemo(()=>Object.values(j).sort((u,d)=>d.updatedAt-u.updatedAt),[j]),y=c.trim().toLocaleLowerCase(),N=y?S.filter(u=>u.name.toLocaleLowerCase().includes(y)):S,C=async u=>{b(!0),l("");try{const d=await ut(u),z=r.getState().create(d.name);r.getState().update(z,P=>({...d,id:P.id}))}catch(d){l(String(d))}finally{b(!1)}};return t.jsx("div",{className:"csl-launchpad ims-launch",children:t.jsx("div",{className:"csl-inner",children:t.jsxs("main",{className:"csl-catalog",children:[t.jsxs("header",{className:"csl-catalog-header",children:[t.jsxs("div",{children:[t.jsx("h1",{children:s("imageStudio.projects")}),t.jsx("p",{children:s("imageStudio.launch.subtitle")})]}),t.jsxs("div",{className:"csl-catalog-actions",children:[t.jsxs("button",{type:"button",className:"csl-import",disabled:v,onClick:()=>p.current?.click(),children:[t.jsx(Ke,{size:15}),s("imageStudio.restore")]}),t.jsxs("button",{type:"button",className:"csl-new",onClick:()=>r.getState().create(s("imageStudio.untitled")),children:[t.jsx(Oe,{size:16}),s("imageStudio.new")]})]})]}),w&&t.jsx("div",{className:"ims-error",role:"alert",children:s("imageStudio.error",{error:w})}),S.length>0&&t.jsx("div",{className:"csl-catalog-toolbar",children:t.jsxs("label",{className:"csl-search",children:[t.jsx(We,{size:15}),t.jsx("input",{type:"search","aria-label":s("imageStudio.launch.search"),placeholder:s("imageStudio.launch.search"),value:c,onChange:u=>g(u.target.value)})]})}),N.length?t.jsx("div",{className:"ims-launch-grid",role:"group","aria-label":s("imageStudio.projects"),children:N.map(u=>t.jsxs("button",{type:"button",className:"ims-launch-card","data-project-id":u.id,onClick:()=>r.getState().open(u.id),children:[t.jsx(Bt,{board:u}),t.jsxs("span",{className:"ims-launch-meta",children:[t.jsx("strong",{children:u.name}),t.jsxs("small",{children:[s("imageStudio.itemCount",{count:D(u).length})," · ",Ye(u.updatedAt,{locale:i})]})]})]},u.id))}):t.jsxs("div",{className:"csl-empty",children:[t.jsx("strong",{children:s(S.length?"imageStudio.launch.noMatch":"imageStudio.launch.empty")}),!S.length&&t.jsx("p",{children:s("imageStudio.launch.emptyHint")})]}),t.jsx("input",{ref:p,type:"file",accept:".json",hidden:!0,onChange:u=>{const d=u.target.files?.[0];u.target.value="",d&&C(d)}})]})})})}const he=[];function xs(s){const{t:i}=U(),j=r(l=>l.ready),c=r(l=>l.error),g=r(l=>l.activeId);o.useEffect(()=>{r.getState().hydrate();const l=()=>{r.getState().flush()},p=S=>{const y=r.getState();(y.saving||y.ready&&y.error)&&(l(),S.preventDefault(),S.returnValue="")};return window.addEventListener("pagehide",l),window.addEventListener("beforeunload",p),()=>{window.removeEventListener("pagehide",l),window.removeEventListener("beforeunload",p),l()}},[]);const v=Re(l=>l.activeSpaceId==="image-studio")&&Ge()==="main",b=!!g,w=o.useRef(!1);return o.useEffect(()=>{!j||!v||(b?mt():gt(w.current),w.current=b)},[j,v,b]),j?g?t.jsx(qt,{},g):t.jsx(Ut,{}):t.jsx("div",{className:"ims-panel ims-panel-empty",children:c?t.jsxs(t.Fragment,{children:[t.jsx("p",{role:"alert",children:i("imageStudio.error",{error:c})}),t.jsx("button",{onClick:()=>{r.getState().hydrate()},children:i("imageStudio.retry")})]}):t.jsx(te,{className:"ims-spin"})})}function qt(){const{t:s}=U(),i=r(e=>e.activeId?e.boards[e.activeId]:void 0),j=r(e=>e.saving),c=r(e=>e.error),g=r(e=>i&&e.past[i.id]?.length||0),v=r(e=>i&&e.future[i.id]?.length||0),b=r(e=>e.selection),w=r(e=>i&&e.placeholders[i.id]||he),l=Qe(e=>!!(i?.sessionId&&e.runningBySession[i.sessionId])),[p,S]=o.useState(!1),[y,N]=o.useState(""),[C,u]=o.useState(0),[d,z]=o.useState(!1),[P,L]=o.useState(!1),[M,O]=o.useState(!1),h=o.useRef(null),[se,ke]=o.useState(!0),[ie,ze]=o.useState(!1),[Ne,Y]=o.useState(!1),I=o.useRef(null),q=o.useRef(null),[ae,ne]=o.useState(null),Ie=o.useCallback(()=>{ne(null),I.current?.focus({preventScroll:!0})},[]),m=$e(I,`image-studio:${i?.id||""}`,void 0,{x:56,y:64,z:1}),F=i?.images||[],T=i?D(i):[],H=T.filter(e=>!e.hidden),Ee=!T.length&&!g&&!v,X=[...H,...w],V=o.useRef(!0);o.useEffect(()=>(V.current=!0,()=>{V.current=!1}),[]);const re=o.useCallback(e=>{V.current&&N(e)},[]);pt(i||Ft,re,C);const x=tt(I,m,{boxes:()=>new Map(H.map(e=>[e.id,e])),identity:()=>i?.id,commit:e=>{i&&r.getState().update(i.id,a=>ue(a,e))},constrain:(e,a)=>{if(a.kind!=="resize")return e;const n=F.find(Me=>Me.id===a.key),f=e.get(a.key);if(!n||!f)return e;const k=we(n),E=Math.max(48,f.w),De=E*k.h/k.w;return new Map(e).set(a.key,{...f,w:E,h:De})},hitKey:e=>e.closest("[data-image-id]")?.dataset.imageId||null,isEditing:e=>!!T.find(a=>a.id===e)?.locked,hitEdge:e=>e.dataset.resize||null,onDelete:e=>{i&&r.getState().update(i.id,a=>ge(a,D(a).filter(n=>n.locked||!e.includes(n.id))))},onDoubleClick:e=>{e&&(r.setState({selection:[e]}),A(K))},onContextMenu:(e,a)=>{const n=e?x.sel.includes(e)?x.sel:[e]:[];x.setSel(n),r.setState({selection:n}),ne({x:a.clientX,y:a.clientY,ids:n})},minW:48,minH:48,repel:!1},se);o.useEffect(()=>x.bind(I.current),[x.bind]),o.useEffect(()=>m.bindWheel(I.current),[m.bindWheel]),o.useEffect(()=>{const e=()=>{O(!1),h.current=null};return window.addEventListener("blur",e),()=>window.removeEventListener("blur",e)},[]);const oe=o.useRef(x.sel);o.useEffect(()=>{oe.current!==x.sel&&(oe.current=x.sel,r.setState({selection:x.sel}))},[x.sel]),o.useEffect(()=>{if(b.join("|")!==x.sel.join("|")){x.setSel(b);const e=T.find(a=>a.id===b[0]);if(e){const{w:a,h:n}=_(I.current),f=m.vpRef.current,k=(e.x+e.w/2)*f.z+f.x,E=(e.y+e.h/2)*f.z+f.y;(k<0||k>a||E<0||E>n)&&m.centerOn(e.x+e.w/2,e.y+e.h/2)}}},[b,x.setSel]);const le=o.useRef(0);o.useEffect(()=>{const e=T.length+w.length;e>le.current&&m.fitTo(X,64),le.current=e},[T,w,m.fitTo]);const R=async e=>{S(!0),N("");try{await e()}catch(a){re(String(a))}finally{V.current&&S(!1)}},G=()=>i?.id||r.getState().create(s("imageStudio.untitled")),de=async e=>{const a=await Promise.all(e.map(f=>bt(f,f.name,"import")));if(!a.length)return;const n=G();r.getState().update(n,f=>{const k=[...f.images];for(const E of a)k.push({...E,...yt(E.width,E.height,k)});return{...f,images:k}})},Pe=e=>{R(async()=>{const a=G();await St(a,s(e))})},Q=T.filter(e=>b.includes(e.id)),Le=i&&x.live?D(ue(i,x.live)):T,Z=e=>{const a=G(),{w:n,h:f}=_(I.current),k=jt(e,s(`imageStudio.new.${e}`),(n/2-m.vp.x)/m.vp.z,(f/2-m.vp.y)/m.vp.z);k.x-=k.w/2,k.y-=k.h/2,r.getState().update(a,E=>ge(E,[...D(E),k])),r.setState({selection:[k.id]}),A(K)},Te=e=>{const{w:a,h:n}=_(I.current);m.setVp(Fe(m.vp,m.vp.z*e,a/2,n/2))};return t.jsxs("div",{className:"ims",onKeyDownCapture:e=>{if(e.target.closest('input, select, textarea, button, [contenteditable="true"]'))return;const a=e.metaKey||e.ctrlKey,n=e.key.toLowerCase();let f=!0;a&&n==="z"&&i?r.getState().undo(i.id,e.shiftKey):a&&n==="c"?ye():a&&n==="v"?B():a&&n==="d"?B(!0):a&&n==="e"?z(!0):!a&&n==="t"?Z("text"):!a&&n==="f"?Z("frame"):!a&&n==="h"?L(!0):!a&&n==="v"?L(!1):n===" "?O(!0):(n==="escape"&&(L(!1),z(!1)),f=!1),f&&(e.preventDefault(),e.stopPropagation())},onKeyUpCapture:e=>{e.key===" "&&(O(!1),e.preventDefault(),e.stopPropagation())},onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||(O(!1),h.current=null)},children:[t.jsxs("header",{className:"ims-header",children:[t.jsxs("button",{className:"ims-back",title:s("imageStudio.back"),onClick:()=>r.getState().close(),children:[t.jsx(Ae,{size:15}),t.jsx("span",{children:i?.name})]}),t.jsxs("div",{className:"ims-head-actions",children:[i&&t.jsx("button",{disabled:p,title:s("imageStudio.backup"),"aria-label":s("imageStudio.backup"),onClick:()=>{R(()=>vt(i))},children:t.jsx(It,{size:16})}),t.jsxs("button",{className:"ims-primary",disabled:!H.length||p,onClick:()=>z(!d),children:[t.jsx($,{size:14}),t.jsx("span",{children:s("imageStudio.exportOptions")})]})]})]}),t.jsxs("div",{className:"ims-toolbar",role:"toolbar","aria-label":s("imageStudio.title"),children:[t.jsxs("button",{disabled:p,onClick:()=>q.current?.click(),children:[t.jsx(W,{size:15}),t.jsx("span",{children:s("imageStudio.import")})]}),!Ee&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"ims-divider"}),t.jsx("button",{disabled:!g,title:s("imageStudio.undo"),"aria-label":s("imageStudio.undo"),onClick:()=>i&&r.getState().undo(i.id),children:t.jsx(Et,{size:15})}),t.jsx("button",{disabled:!v,title:s("imageStudio.redo"),"aria-label":s("imageStudio.redo"),onClick:()=>i&&r.getState().undo(i.id,!0),children:t.jsx(Pt,{size:15})}),t.jsx("button",{disabled:!F.some(e=>!e.locked&&!e.hidden),title:s("imageStudio.arrange"),"aria-label":s("imageStudio.arrange"),onClick:()=>{if(i){const e=ht(F.filter(a=>!a.locked&&!a.hidden));r.getState().update(i.id,a=>({...a,images:a.images.map(n=>e.find(f=>f.id===n.id)||n)})),m.fitTo(e)}},children:t.jsx(Lt,{size:15})}),t.jsx("button",{disabled:!Q.length,title:s("imageStudio.remove"),"aria-label":s("imageStudio.remove"),onClick:Ce,children:t.jsx(je,{size:15})}),t.jsx("button",{disabled:!Q.length,title:s("imageStudio.duplicate"),"aria-label":s("imageStudio.duplicate"),onClick:()=>B(!0),children:t.jsx(Se,{size:15})}),t.jsx("button",{disabled:!Q.length||p,title:s("imageStudio.reference"),"aria-label":s("imageStudio.reference"),onClick:()=>{R(be)},children:t.jsx(J,{size:15})})]}),t.jsx("span",{className:"ims-toolbar-space"}),[[me,J,"imageStudio.chat"],[xt,Be,"imageStudio.layers"],[K,fe,"imageStudio.inspector"]].map(([e,a,n])=>t.jsx("button",{title:s(n),"aria-label":s(n),onClick:()=>A(e),children:t.jsx(a,{size:16})},e))]}),d&&i&&t.jsx(Rt,{board:i,selection:b,onClose:()=>z(!1)}),c&&t.jsxs("div",{className:"ims-error",role:"alert",children:[s("imageStudio.saveError"),t.jsx("button",{onClick:()=>{r.getState().flush()},children:s("imageStudio.retry")})]}),y&&t.jsxs("div",{className:"ims-error",role:"alert",children:[s("imageStudio.error",{error:y}),t.jsx("button",{onClick:()=>{N(""),u(e=>e+1)},children:s("imageStudio.retry")})]}),t.jsxs("div",{ref:I,className:`ims-stage${P||M?" is-panning":""}`,tabIndex:0,onContextMenu:e=>e.stopPropagation(),onPointerDownCapture:e=>{e.button===2||!(P||M)||e.target.closest(".amx-stage-tools, .amx-stage-hud, .amx-stage-minimap")||(e.stopPropagation(),e.preventDefault(),e.currentTarget.focus(),e.currentTarget.setPointerCapture(e.pointerId),h.current={id:e.pointerId,x:e.clientX,y:e.clientY,vx:m.vp.x,vy:m.vp.y})},onPointerMoveCapture:e=>{const a=h.current;if(!a||a.id!==e.pointerId)return;e.stopPropagation();const{u:n}=_(I.current);m.setVp({...m.vp,x:a.vx+(e.clientX-a.x)/n,y:a.vy+(e.clientY-a.y)/n})},onPointerUpCapture:e=>{h.current?.id===e.pointerId&&(e.stopPropagation(),h.current=null)},onPointerCancel:()=>{h.current=null},"aria-label":s("imageStudio.title"),onDragOver:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),Y(!0))},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||Y(!1)},onDrop:e=>{e.preventDefault(),Y(!1),p||R(()=>de(Array.from(e.dataTransfer.files)))},children:[t.jsx("div",{className:"ims-grid",style:Ue(m.vp)}),t.jsxs("div",{className:"ims-world",style:{transform:`translate(${m.vp.x}px, ${m.vp.y}px) scale(${m.vp.z})`},children:[H.map(e=>{const a=Le.find(n=>n.id===e.id)||e;return t.jsxs("div",{"data-image-id":e.id,className:`ims-layer ${ve(e)?"ims-image":`ims-${e.kind}`}${x.sel.includes(e.id)?" is-selected":""}${e.locked?" is-locked":""}`,style:{left:a.x,top:a.y,width:a.w,height:a.h},children:[t.jsx(ft,{item:e}),t.jsx("div",{className:"ims-image-label",children:e.name}),x.sel.includes(e.id)&&!e.locked&&t.jsx("div",{className:"ims-resize","data-resize":"se"})]},e.id)}),w.map(e=>{const a=F.find(n=>n.id===e.sourceIds[0]);return t.jsxs("div",{"data-generation-id":e.id,className:`ims-generation${e.status==="failed"?" is-failed":""}`,style:{left:e.x,top:e.y,width:e.w,height:e.h},role:e.status==="failed"?"alert":"status","aria-live":"polite",onPointerDown:n=>n.stopPropagation(),children:[t.jsx("div",{className:"ims-generation-sheen"}),t.jsxs("div",{className:"ims-generation-copy",children:[t.jsx(qe,{size:20,strokeWidth:1.5}),t.jsx("strong",{children:s(e.kind==="edit"?"imageStudio.generation.editing":"imageStudio.generation.creating")}),t.jsx("span",{children:e.status==="failed"?s("imageStudio.generation.failed"):s(e.status==="preparing"?"imageStudio.generation.preparing":"imageStudio.generation.running")}),a&&t.jsx("small",{children:s("imageStudio.generation.versionOf",{name:a.name})}),e.count>1&&t.jsxs("small",{children:[e.index+1," / ",e.count]})]}),e.status==="failed"&&t.jsxs("div",{className:"ims-generation-actions amx-stage-tools",children:[t.jsx("button",{onClick:()=>A(me),children:s("imageStudio.generation.openChat")}),t.jsx("button",{title:s("imageStudio.generation.dismiss"),"aria-label":s("imageStudio.generation.dismiss"),onClick:()=>r.getState().removeGeneration(i.id,e.id),children:t.jsx(xe,{size:14})})]})]},e.id)}),x.marquee&&t.jsx("div",{className:"ims-marquee",style:{left:x.marquee.x,top:x.marquee.y,width:x.marquee.w,height:x.marquee.h}})]}),!T.length&&!w.length&&t.jsxs("div",{className:"ims-empty amx-stage-tools",children:[t.jsxs("div",{className:"ims-eyebrow",children:[s("imageStudio.title")," ",t.jsx("span",{children:"/"})," ",s("imageStudio.new")]}),t.jsx("h1",{children:s("imageStudio.headline")}),t.jsx("p",{children:s("imageStudio.intro")}),t.jsx("div",{className:"ims-starters",children:["poster","product","illustration"].map(e=>t.jsxs("button",{disabled:p,onClick:()=>Pe(`imageStudio.${e}Prompt`),children:[t.jsx("span",{children:s(`imageStudio.${e}`)}),t.jsx(Tt,{size:14})]},e))}),t.jsxs("button",{className:"ims-empty-import",disabled:p,onClick:()=>q.current?.click(),children:[t.jsx(W,{size:16}),s("imageStudio.import")]}),t.jsx("small",{children:s("imageStudio.importLimit")})]}),!w.length&&(l||p)&&t.jsxs("div",{className:"ims-progress amx-stage-tools",role:"status",children:[t.jsx(te,{size:15,className:"ims-spin"}),s(l?"imageStudio.generating":"imageStudio.busy")]}),Ne&&t.jsxs("div",{className:"ims-drop",children:[t.jsx(W,{size:28}),s("imageStudio.drop")]}),t.jsxs("div",{className:"ims-create-tools amx-stage-tools",role:"toolbar","aria-label":s("imageStudio.canvasTools"),children:[t.jsx("button",{title:s("imageStudio.selectTool"),"aria-label":s("imageStudio.selectTool"),"aria-pressed":!P,onClick:()=>{L(!1),I.current?.focus()},children:t.jsx(Ze,{size:17})}),t.jsx("button",{title:s("imageStudio.handTool"),"aria-label":s("imageStudio.handTool"),"aria-pressed":P,onClick:()=>{L(!0),I.current?.focus()},children:t.jsx(Dt,{size:17})}),t.jsx("span",{}),[["text",Mt],["rectangle",Je],["ellipse",et],["frame",Ot]].map(([e,a])=>t.jsx("button",{title:s(`imageStudio.add.${e}`),"aria-label":s(`imageStudio.add.${e}`),onClick:()=>Z(e),children:t.jsx(a,{size:17})},e))]}),ie&&t.jsx(st,{hostRef:I,vp:m.vp,items:X.map(e=>({key:e.id,kind:"card",box:e})),onCenter:m.centerOn}),t.jsx(it,{zoom:m.vp.z,onZoomBy:Te,onFit:()=>m.fitTo(X),snap:se,onSnap:ke,mini:ie,onMini:ze})]}),t.jsxs("footer",{className:"ims-footer",children:[t.jsx("span",{title:s("imageStudio.hint"),children:s(i?c?"imageStudio.unsaved":j?"imageStudio.saving":"imageStudio.local":"imageStudio.empty")}),i&&t.jsx("input",{"aria-label":s("imageStudio.name"),value:i.name,onChange:e=>r.getState().update(i.id,a=>({...a,name:e.target.value}),!1)}),t.jsx("span",{children:s("imageStudio.itemCount",{count:T.length})})]}),ae&&t.jsx($t,{target:ae,board:i,busy:p,onClose:Ie,onImport:()=>q.current?.click(),onExport:()=>z(!0),onInspect:()=>A(K),run:R}),t.jsx("input",{ref:q,type:"file",accept:"image/png,image/jpeg,image/webp,image/gif",multiple:!0,hidden:!0,onChange:e=>{const a=Array.from(e.target.files||[]);e.target.value="",R(()=>de(a))}})]})}const Ft={version:1,id:"",name:"",updatedAt:0,sessionId:null,images:[],collected:[]};export{xs as ImageStudioView};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as _,u as $,r,j as t,a as H}from"./index-
|
|
1
|
+
import{C as _,u as $,r,j as t,a as H}from"./index-YuejkHoJ.js";import{X as Q,q as V}from"./pageStore-D_fKLv-o.js";import"./client-DD5czSuF.js";import{aM as W}from"./appStore-BskcSDl6.js";const Y=[{id:"Chinese (Simplified)",label:"简体中文"},{id:"English",label:"English"},{id:"Japanese",label:"日本語"},{id:"Korean",label:"한국어"},{id:"French",label:"Français"},{id:"German",label:"Deutsch"},{id:"Spanish",label:"Español"},{id:"Russian",label:"Русский"}],M=(g,d)=>(g.match(d)||[]).length;function ie(g,d=_()){const o=g.replace(/[\s\p{P}\p{S}\d]/gu,"");if(!o)return d==="zh"?"English":"Chinese (Simplified)";const b=!/[-ヿ]/.test(o)&&M(o,/[㐀-鿿豈-]/g)/o.length>.3;return d==="zh"?b?"English":"Chinese (Simplified)":M(o,/[A-Za-z]/g)/o.length>.9?"Chinese (Simplified)":"English"}H({"inlineai.action.improve":{zh:"润色",en:"Improve writing"},"inlineai.action.fix":{zh:"修正拼写与语法",en:"Fix spelling and grammar"},"inlineai.action.shorter":{zh:"精简",en:"Make shorter"},"inlineai.action.longer":{zh:"扩写",en:"Make longer"},"inlineai.action.summarize":{zh:"总结",en:"Summarize"},"inlineai.action.translate":{zh:"翻译",en:"Translate"},"inlineai.action.continue":{zh:"续写",en:"Continue writing"},"inlineai.action.custom":{zh:"自定义指令…",en:"Custom instruction…"},"inlineai.label":{zh:"AI 写作",en:"AI writing"},"inlineai.placeholder":{zh:"告诉 Tangu 要写什么,留空则续写",en:"Tell Tangu what to write, or leave empty to continue"},"inlineai.placeholderSel":{zh:"告诉 Tangu 怎么改选中的文字",en:"Tell Tangu how to change the selection"},"inlineai.send":{zh:"生成",en:"Generate"},"inlineai.generating":{zh:"正在生成…",en:"Generating…"},"inlineai.stop":{zh:"停止",en:"Stop"},"inlineai.replace":{zh:"替换",en:"Replace"},"inlineai.insertBelow":{zh:"插入下方",en:"Insert below"},"inlineai.insert":{zh:"插入",en:"Insert"},"inlineai.discard":{zh:"丢弃",en:"Discard"},"inlineai.retry":{zh:"重试",en:"Try again"},"inlineai.hint":{zh:"预览:确认后才写入笔记",en:"Preview: nothing is written until you confirm"},"inlineai.toolText":{zh:"模型写出了工具调用的样子,但这里什么都没有执行",en:"The model wrote something that looks like a tool call, but nothing was run"},"inlineai.errEmptyResult":{zh:"没有生成任何内容",en:"Nothing was generated"},"inlineai.unavailable":{zh:"这里用不了正文 AI",en:"In-note AI is not available here"},"inlineai.targetChanged":{zh:"选中的文字在生成期间被改过,结果已插入到下方",en:"The selection changed while generating, so the result was inserted below it"},"inlineai.copy":{zh:"复制",en:"Copy"},"inlineai.copied":{zh:"已复制",en:"Copied"},"inlineai.close":{zh:"关闭",en:"Close"},"inlineai.targetLang":{zh:"目标语言",en:"Target language"},"inlineai.byMt":{zh:"机器翻译 · {name}",en:"Machine translation · {name}"}});function ae({x:g,y:d,anchorTop:o,title:b,hasSelection:m,askFirst:k,run:P,onApply:s,onClose:c,editorEl:C,language:f}){const{t:i}=$(),[a,h]=r.useState(k?"ask":"running"),[x,F]=r.useState(""),[u,v]=r.useState(""),[G,E]=r.useState(""),[B,N]=r.useState(!1),[q,O]=r.useState(""),[J,T]=r.useState(!1),w=r.useRef(null),p=r.useRef(""),R=r.useRef(void 0),S=r.useRef(null),y=r.useRef(null),I=r.useRef(C);I.current=C;const z=n=>{w.current?.abort();const e=new AbortController;w.current=e,R.current=n,p.current="",v(""),E(""),N(!1),h("running"),P(n,l=>{e.signal.aborted||(p.current+=l,v(p.current))},e.signal).then(l=>{if(e.signal.aborted)return;const D=String(l.text??"");v(D),N(!!l.toolCallText),O(l.model?l.model.mt?i("inlineai.byMt",{name:l.model.name}):l.model.name:""),D.trim()?h("done"):(E(i("inlineai.errEmptyResult")),h("error"))}).catch(l=>{e.signal.aborted||(E(String(l?.message||l)),h("error"))})},U=()=>{w.current?.abort(),p.current.trim()?(v(p.current),h("done")):k?h("ask"):c()};r.useEffect(()=>(k?requestAnimationFrame(()=>S.current?.focus()):z(void 0),()=>w.current?.abort()),[]);const L=m?"replace":"insert",K=n=>{const e=document.activeElement;return!e||e===document.body||e===document.documentElement?!0:y.current?.contains(e)?!n||e===y.current:s?!!I.current?.contains(e):!e.matches('input, textarea, select, [contenteditable]:not([contenteditable="false"])')},j=r.useRef({phase:a,text:u,primary:L});j.current={phase:a,text:u,primary:L},r.useEffect(()=>{const n=e=>{e.isComposing||e.keyCode===229||(e.key==="Escape"&&K(!1)?(e.preventDefault(),e.stopPropagation(),c()):s&&e.key==="Enter"&&!e.shiftKey&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&j.current.phase==="done"&&K(!0)&&(e.preventDefault(),e.stopPropagation(),s(j.current.primary,j.current.text)))};return window.addEventListener("keydown",n,!0),()=>window.removeEventListener("keydown",n,!0)},[c,s]),r.useEffect(()=>{if(s)return;const n=e=>{y.current?.contains(e.target)||c()};return document.addEventListener("mousedown",n,!0),()=>document.removeEventListener("mousedown",n,!0)},[s,c]);const X=()=>{navigator.clipboard?.writeText(u).then(()=>{T(!0),window.setTimeout(()=>T(!1),1500)}).catch(()=>{})},Z=n=>t.jsx("button",{type:"button",className:`btn sm${n?" primary":""}`,"data-act":"copy",onClick:X,children:i(J?"inlineai.copied":"inlineai.copy")});return t.jsxs(Q,{innerRef:n=>{y.current=n},className:"ui-popover am-ai-panel",x:g,y:d,anchorTop:o,prefer:"below",role:"dialog","aria-label":s?i("inlineai.label"):b,"data-testid":"inline-ai-panel","data-phase":a,"data-readonly":s?void 0:"",children:[t.jsxs("div",{className:"am-ai-head",children:[f?t.jsx(W,{size:14,"aria-hidden":!0}):t.jsx(V,{size:14,"aria-hidden":!0}),t.jsx("span",{className:"am-ai-title",children:b}),f&&t.jsx("select",{className:"am-ai-lang","aria-label":i("inlineai.targetLang"),"data-testid":"inline-ai-lang",value:f.value,onChange:n=>f.onChange(n.target.value),children:Y.map(n=>t.jsx("option",{value:n.id,children:n.label},n.id))}),a!=="ask"&&t.jsx("span",{className:"am-ai-hint","data-testid":"inline-ai-hint",children:a==="running"?i("inlineai.generating"):a==="done"&&q||(s?i("inlineai.hint"):"")})]}),a==="ask"&&t.jsxs("div",{className:"am-ai-ask",children:[t.jsx("textarea",{ref:S,className:"am-ai-input",rows:2,value:x,placeholder:i(m?"inlineai.placeholderSel":"inlineai.placeholder"),onChange:n=>F(n.target.value),onKeyDown:n=>{if(n.key!=="Enter"||n.shiftKey||n.nativeEvent.isComposing||n.keyCode===229)return;n.preventDefault(),n.stopPropagation();const e=x.trim();!e&&m||z(e||void 0)}}),t.jsxs("div",{className:"am-ai-actions",children:[t.jsx("button",{type:"button",className:"btn sm primary","data-act":"send",disabled:m&&!x.trim(),onClick:()=>z(x.trim()||void 0),children:i("inlineai.send")}),t.jsx("button",{type:"button",className:"btn sm","data-act":"discard",onClick:c,children:i("inlineai.discard")})]})]}),a!=="ask"&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"am-ai-preview","data-testid":"inline-ai-preview",children:u||(a==="running"?"…":"")}),a==="error"&&t.jsx("div",{className:"am-ai-error",role:"alert",children:G}),B&&a==="done"&&t.jsx("div",{className:"am-ai-error",children:i("inlineai.toolText")}),t.jsxs("div",{className:"am-ai-actions",children:[a==="running"&&t.jsx("button",{type:"button",className:"btn sm","data-act":"stop",onClick:U,children:i("inlineai.stop")}),a==="done"&&s&&m&&t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn sm primary","data-act":"replace",onClick:()=>s("replace",u),children:i("inlineai.replace")}),t.jsx("button",{type:"button",className:"btn sm","data-act":"below",onClick:()=>s("below",u),children:i("inlineai.insertBelow")})]}),a==="done"&&s&&!m&&t.jsx("button",{type:"button",className:"btn sm primary","data-act":"insert",onClick:()=>s("insert",u),children:i("inlineai.insert")}),a==="done"&&Z(!s),(a==="done"||a==="error")&&t.jsx("button",{type:"button",className:"btn sm","data-act":"retry",onClick:()=>z(R.current),children:i("inlineai.retry")}),t.jsx("button",{type:"button",className:"btn sm","data-act":"discard",onClick:c,children:i(s?"inlineai.discard":"inlineai.close")})]})]})]})}export{ae as I,ie as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as s,r as b,t as U}from"./index-YuejkHoJ.js";import{p7 as v,hp as x,hr as u,hq as f,p8 as z,fB as S,gr as L}from"./appStore-BskcSDl6.js";import{n as R}from"./nativeDownload-DlnT8U-y.js";import{t as y}from"./dbStore-Bc2lC8ZI.js";import"./react-DOzedx9n.js";import"./pageStore-D_fKLv-o.js";import"./client-DD5czSuF.js";import"./ipc-8cxXGSZK.js";import"./drawingStore-BD5m2eqn.js";const k=t=>(t.mime?.startsWith("image/")??!1)||/\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(t.name);function E(t){const n=t.match(/^data:([^;]+);base64,(.*)$/),e=u(n?.[2]||"");return{mimeType:n?.[1]||"application/octet-stream",bytes:e,size:e.length}}function N(t,n,e,i){e=t.sourceSessionId||e;const o=i==="host"?v(e):null,l=a=>{R({text:a?.message||String(a),level:"error"})},r=o?.downloadHostFile;return{name:t.name,path:o?.local&&t.path&&/^([/~]|[A-Za-z]:[\\/])/.test(t.path)?t.path:void 0,load:async()=>{if(t.dataUrl)return E(t.dataUrl);if(!t.path)return null;if(o){const c=await o.readHostFile(t.path);return c.tooLarge?{tooLarge:!0,size:c.size}:{mimeType:c.mimeType,bytes:u(c.content),size:c.size}}const a=await f(y(e),e,t.path);return{mimeType:a.mimeType,bytes:u(a.content),size:a.size}},download:t.path?i==="host"?r?()=>{r(t.path,t.name).catch(l)}:void 0:()=>{x(y(e),e,t.path).catch(l)}:void 0}}const T=({f:t,onClick:n})=>{const e=L(t.mime||"",t.name);return s.jsxs("button",{className:"inline-file-card",title:t.name,onClick:n,children:[s.jsx(e,{size:15}),s.jsx("span",{className:"inline-file-name",children:t.name})]})},B=({f:t,cfg:n,sessionId:e,execMode:i,onClick:o})=>{e=t.sourceSessionId||e;const l=t.dataUrl||(t.path&&i!=="host"?z(y(e),e,t.path):null),[r,a]=b.useState(l),[c,h]=b.useState(!1),g=b.useRef(null);return b.useEffect(()=>{if(h(!1),l){a(l);return}let p=!1;return(async()=>{if(!t.path)return;const F=i==="host"?v(e):null;try{let d=null,w="";if(F){const m=await F.readHostFile(t.path);if(p)return;if(m.tooLarge){h(!0);return}d=u(m.content),w=m.mimeType}else if(i!=="host"){const m=await f(y(e),e,t.path);if(p)return;d=u(m.content),w=m.mimeType}if(!d||p)return;const j=URL.createObjectURL(new Blob([d],{type:w||t.mime||"image/png"}));g.current=j,a(j)}catch{p||h(!0)}})(),()=>{p=!0,g.current&&(URL.revokeObjectURL(g.current),g.current=null)}},[t.path,t.dataUrl]),c?s.jsx(T,{f:t,onClick:o}):r?s.jsx("img",{className:"inline-file-img",src:r,alt:t.name,title:t.name,draggable:!1,onError:()=>h(!0),...S({name:t.name,alt:{label:U("viewer.openTab"),run:o}})}):null},Z=({files:t,cfg:n,sessionId:e,execMode:i,onOpenPreview:o})=>{if(!t.length)return null;const l=r=>o?.(N(r,n,e,i));return s.jsx("div",{className:"inline-file-grid",children:t.map((r,a)=>k(r)?s.jsx(B,{f:r,cfg:n,sessionId:e,execMode:i,onClick:()=>l(r)},a):s.jsx(T,{f:r,onClick:()=>l(r)},a))})};export{Z as InlineFiles,N as targetFor};
|