@forsion/unit 2.12.2 → 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.
Files changed (204) hide show
  1. package/README.md +61 -0
  2. package/backendWorker.mjs +6 -2
  3. package/main.mjs +991 -497
  4. package/package.json +1 -1
  5. package/release.json +5 -5
  6. package/web/assets/ArtificialView-XwHMLUFb.js +1 -0
  7. package/web/assets/{AutomationBuilder-sxWdUa0L.js → AutomationBuilder-hqs0QhMt.js} +1 -1
  8. package/web/assets/CalendarConfigView-DKib8Oed.js +1 -0
  9. package/web/assets/CalendarView-DJ5iOzvu.js +1 -0
  10. package/web/assets/CapabilityMenu-SwVlZ06x.js +1 -0
  11. package/web/assets/{CheckboxInput-BsaoUHZ0.js → CheckboxInput-BC-5a_C9.js} +1 -1
  12. package/web/assets/Chrome-HdfyYV3i.js +1 -0
  13. package/web/assets/{CodeView-j065KtVh.js → CodeView-CFL6yQ-6.js} +3 -3
  14. package/web/assets/DashboardGridView-B9DCWYVb.js +17 -0
  15. package/web/assets/{EventCard-BmDQkEj9.js → EventCard-B_ndpqH_.js} +1 -1
  16. package/web/assets/ExcalidrawCanvas-BQ4KKLJP.js +1 -0
  17. package/web/assets/{FloatingToc-CENybkAA.js → FloatingToc-Ce9GamvH.js} +1 -1
  18. package/web/assets/HomepageView-RCOfcVbE.js +1 -0
  19. package/web/assets/ImageStudioPanels-lkS_y2uM.js +3 -0
  20. package/web/assets/ImageStudioView-UPv52acl.js +1 -0
  21. package/web/assets/InlineFiles-CQbQumkf.js +1 -0
  22. package/web/assets/MarkdownBlock--__nPQGh.css +1 -0
  23. package/web/assets/MarkdownBlock-CkqiwPXa.js +58 -0
  24. package/web/assets/ModelPill-CY-rU1RU.js +2 -0
  25. package/web/assets/MuseLibraryView-CtTHlVnT.js +2 -0
  26. package/web/assets/{MuseView-d-iBk3sc.js → MuseView-CC2A7MBs.js} +2 -2
  27. package/web/assets/{PageHistoryPanel-CR-k1AM7.js → PageHistoryPanel-KhKT1DLy.js} +2 -2
  28. package/web/assets/PdfAnnotator-C_kglLCA.css +1 -0
  29. package/web/assets/PdfAnnotator-DUyrgY-t.js +505 -0
  30. package/web/assets/{ProductView-u2aezVsl.js → ProductView-CgsIYZqD.js} +1 -1
  31. package/web/assets/RightPanel-BHDgqTFs.js +4 -0
  32. package/web/assets/RunLocationPicker-BE5mxnab.css +1 -0
  33. package/web/assets/RunLocationPicker-DBnXYV5B.js +38 -0
  34. package/web/assets/{SidebarRow-BuSkKH5q.js → SidebarRow-BAJxbMcx.js} +1 -1
  35. package/web/assets/{SketchCard-D87GADyG.js → SketchCard-BGYz-bXP.js} +5 -5
  36. package/web/assets/{StudioGuestSurface-BijU_EEb.js → StudioGuestSurface-lt6znmkl.js} +1 -1
  37. package/web/assets/{TodoListView-DPPVpPUn.js → TodoListView-DPKhee6i.js} +1 -1
  38. package/web/assets/{Tooltip-DY4ISA-e.js → Tooltip-ZxrDqN4p.js} +1 -1
  39. package/web/assets/UnifiedPage-BX6ZQL0h.js +68 -0
  40. package/web/assets/UnifiedPage-CWXc_mo1.css +1 -0
  41. package/web/assets/{amadeus-manual.en-DWaN2fPs.js → amadeus-manual.en-DzRWr4BL.js} +18 -18
  42. package/web/assets/{amadeus-manual.zh--7D5TS8X.js → amadeus-manual.zh-DW32DkL7.js} +18 -18
  43. package/web/assets/{appStore-Dg9WALEA.js → appStore-DWP8UET9.js} +208 -122
  44. package/web/assets/appStore-wtOILggO.css +1 -0
  45. package/web/assets/{arrow-up-right-CpQs92mu.js → arrow-up-right-DrCXuWS7.js} +1 -1
  46. package/web/assets/{astryxBridge-BZhaZPs4.js → astryxBridge-D-m4_kYt.js} +3 -3
  47. package/web/assets/automationListSource-C8BNy6RY.js +1 -0
  48. package/web/assets/book-open-OLNm7OaB.js +1 -0
  49. package/web/assets/{calendarNavStore-C7fGRpoH.js → calendarNavStore-Cylfvv3s.js} +1 -1
  50. package/web/assets/{canvasPrefs-BeG4oEgP.js → canvasPrefs-8taQ42Cz.js} +1 -1
  51. package/web/assets/chatBoxSurface-CIlzs45H.js +1 -0
  52. package/web/assets/{circle-question-mark-WL3vbp-Z.js → circle-question-mark-XbAFplz1.js} +1 -1
  53. package/web/assets/{circle-x-D7s-M5sB.js → circle-x-fcReAZaE.js} +1 -1
  54. package/web/assets/{client-BSKpsyAw.js → client-0MPbodA6.js} +1 -1
  55. package/web/assets/{code-xml-BALV9u_c.js → code-xml-Cuna8Kh4.js} +1 -1
  56. package/web/assets/{codeStudioStore-C2mWfm32.js → codeStudioStore-BBU62GTy.js} +1 -1
  57. package/web/assets/codingNavigation-CZB4v1ZW.css +1 -0
  58. package/web/assets/codingNavigation-DDlPpPk5.js +47 -0
  59. package/web/assets/{create-4xUyKtAF.js → create-BGtEfCcg.js} +4 -4
  60. package/web/assets/dashboardSurface-BYM3C7WG.js +1 -0
  61. package/web/assets/{deskCapture-Df701U8L.js → deskCapture-BiUCmqfc.js} +1 -1
  62. package/web/assets/{diff2html-BV-zCH4d.js → diff2html-BNp2FTbk.js} +1 -1
  63. package/web/assets/{docx-preview-DW4IyU_Q.js → docx-preview-CFznGVOU.js} +1 -1
  64. package/web/assets/{emoji-DGaxpCIu.js → emoji-6zl4yfOS.js} +1 -1
  65. package/web/assets/floatingTocSurface-DreXPCa6.js +1 -0
  66. package/web/assets/{foldActions-B7KByFdN.js → foldActions-05QcQziQ.js} +1 -1
  67. package/web/assets/folder-BpsfOHD4.js +1 -0
  68. package/web/assets/{folder-plus-D1TDb7k9.js → folder-plus-BeQHr4AZ.js} +1 -1
  69. package/web/assets/gestures-DQBCcK4y.js +1 -0
  70. package/web/assets/{hand-Crrw-nSn.js → hand-Bko7ms15.js} +1 -1
  71. package/web/assets/{hard-drive-BbyVSbfP.js → hard-drive-BpuI5ebj.js} +1 -1
  72. package/web/assets/i18n-ecQQxiMQ.css +1 -0
  73. package/web/assets/i18n.generated-BuLjnmY8.js +15 -0
  74. package/web/assets/imageStudio--KF9gwHA.css +1 -0
  75. package/web/assets/imageStudio-BLVNKmEG.js +2 -0
  76. package/web/assets/{index-DKhyDkGB.js → index-BF10xp_K.js} +1 -1
  77. package/web/assets/{index-C7U6T-k8.js → index-BHm6K743.js} +1 -1
  78. package/web/assets/{index-CF4RV4mh.js → index-BM2o7PeV.js} +90 -90
  79. package/web/assets/{index-Brik2pf9.js → index-BgnNNv3e.js} +1 -1
  80. package/web/assets/{index--drOLtq7.js → index-C0Gy2NQ6.js} +1 -1
  81. package/web/assets/{index-CflzrdSt.js → index-C1doZp5H.js} +1 -1
  82. package/web/assets/{index-SZ5waGAq.js → index-C4L6vjd_.js} +1 -1
  83. package/web/assets/{index-Cmr7gVZQ.js → index-CD3yIkOA.js} +1 -1
  84. package/web/assets/{index-BYsdKR_1.js → index-CJeUgjPU.js} +1 -1
  85. package/web/assets/{index-CzM-C2Sd.js → index-CLHoq1w-.js} +1 -1
  86. package/web/assets/{index-tAXBa_fN.js → index-CUZI62qU.js} +1 -1
  87. package/web/assets/{index-C6GJulug.js → index-Cff42k7q.js} +1 -1
  88. package/web/assets/index-Ck_O3Jdd.js +1 -0
  89. package/web/assets/index-CuiYK18N.js +1 -0
  90. package/web/assets/{index-BRW82CsP.js → index-CwcOeZdT.js} +1 -1
  91. package/web/assets/{index-DUWR2nZi.js → index-D6AycQIz.js} +1 -1
  92. package/web/assets/{index-BCZZVJ_w.js → index-D7gVhvNY.js} +1 -1
  93. package/web/assets/{index-DjzSBM0U.js → index-D9UZQy42.js} +1 -1
  94. package/web/assets/{index-KL5Rj9kP.js → index-DuBQ0j2g.js} +1 -1
  95. package/web/assets/{index-Dg9oixs4.js → index-OD1gSX3h.js} +1 -1
  96. package/web/assets/{index-gPSbFSUn.js → index-Uo5tswys.js} +1 -1
  97. package/web/assets/{index-D1f_JwPH.js → index-o8cj0pRH.js} +1 -1
  98. package/web/assets/{index-OHi69jDq.js → index-rHjhbwvm.js} +1 -1
  99. package/web/assets/{index-CqyM6tQ0.js → index-rggq2czF.js} +1 -1
  100. package/web/assets/{index-Czu_bbDM.js → index-sCXThwqZ.js} +1 -1
  101. package/web/assets/{invitePage-lLQ-e0pj.js → invitePage-b0HGvMj6.js} +1 -1
  102. package/web/assets/{ipc-DQOD2UKk.js → ipc-CxAyeo8q.js} +1 -1
  103. package/web/assets/{jszip.min-DZxV9uZ_.js → jszip.min-B94KpE21.js} +1 -1
  104. package/web/assets/launchpad-C2c1MSVX.css +1 -0
  105. package/web/assets/{layout-grid-B_pjJwz4.js → layout-grid-BBVuEdWG.js} +1 -1
  106. package/web/assets/{linkFollow-C0_3k_PC.js → linkFollow-B7ivDZMM.js} +4 -4
  107. package/web/assets/{list-tree-DkAJYEXd.js → list-tree-4-0QDbLu.js} +1 -1
  108. package/web/assets/{listFold-BsOVn9UZ.js → listFold-DLuxXiIj.js} +1 -1
  109. package/web/assets/{lock-BnGHxjeE.js → lock-CnbZm4vo.js} +1 -1
  110. package/web/assets/{log-out-DBuMeqik.js → log-out-BEynWaHa.js} +1 -1
  111. package/web/assets/{main-NgUPPqDn.css → main-BiS_5wrB.css} +1 -1
  112. package/web/assets/main-sIq2N9Z5.js +20 -0
  113. package/web/assets/markdownEditorSurface-ZSJ3RHAv.js +3 -0
  114. package/web/assets/mdMarkStore-DQHDjG7s.js +2 -0
  115. package/web/assets/{mdMarks-Bq7Hl-4C.js → mdMarks-DbIcRa0O.js} +1 -1
  116. package/web/assets/{message-square-plus-BiAZAvcw.js → message-square-plus-CpiKDvle.js} +1 -1
  117. package/web/assets/{messages-BH5MfQdZ.js → messages-_jta1lSI.js} +1 -1
  118. package/web/assets/minus-C9ndHJ9O.js +1 -0
  119. package/web/assets/mobileEntry-CPmU_c4m.js +13 -0
  120. package/web/assets/nativeDownload-BYT082bY.js +1 -0
  121. package/web/assets/{pageChrome-xLNdFaSg.css → pageChrome-CovzZPdb.css} +1 -1
  122. package/web/assets/pageChrome-D3Niv1JM.js +1 -0
  123. package/web/assets/{pageTree-CZH2J6cc.js → pageTree-CgfvpzIj.js} +2 -2
  124. package/web/assets/{pen-tool-lkmBqliH.js → pen-tool-BXEFnU2i.js} +1 -1
  125. package/web/assets/{pencil-Cvk91P_Z.js → pencil-cqvCkekG.js} +1 -1
  126. package/web/assets/pluginChat-BbBukMuN.js +2 -0
  127. package/web/assets/{redo-2-DSi54z4e.js → redo-2-BO7wCDwy.js} +1 -1
  128. package/web/assets/{rotate-ccw-CUlnplr0.js → rotate-ccw-BvipPIjC.js} +1 -1
  129. package/web/assets/{sharePage-MM6UpPJ9.js → sharePage-XbN50US7.js} +2 -2
  130. package/web/assets/{shareViewer-CDZ8lTdy.js → shareViewer-BaYogetW.js} +1 -1
  131. package/web/assets/{star-CwDiGyUW.js → star-BQWMXnn7.js} +1 -1
  132. package/web/assets/tableSurface-BXqqidd1.js +1 -0
  133. package/web/assets/{terminal-DIXogYJY.js → terminal-l9k6RDrH.js} +1 -1
  134. package/web/assets/{terminalView-B3aZSsrQ.js → terminalView-Cpnt5_0P.js} +1 -1
  135. package/web/assets/theme-C6D3tMGV.css +1 -0
  136. package/web/assets/type-CFoaj2eD.js +1 -0
  137. package/web/assets/{undo-2-tUKCv5Gs.js → undo-2-DusxpdLa.js} +1 -1
  138. package/web/assets/{unitAccount-D8lVwaaT.js → unitAccount-DwutFPPw.js} +1 -1
  139. package/web/assets/{unitBridge-D547ublk.js → unitBridge-CcgQpkqV.js} +1 -1
  140. package/web/assets/{unitCloudTransport-BVF6lVp4.js → unitCloudTransport-vA7cLDts.js} +1 -1
  141. package/web/assets/{unitOwnerAccess-BfnEjsZb.js → unitOwnerAccess-LBlJ1YfA.js} +1 -1
  142. package/web/assets/{unitShim-DxetRgmP.js → unitShim-B_M9IrbC.js} +3 -3
  143. package/web/assets/{upload-BbeAsMuD.js → upload-ZrOj6tXA.js} +1 -1
  144. package/web/assets/userSpaces-uJOnsedR.js +1 -0
  145. package/web/assets/viewportLock-D3SNkwS2.js +631 -0
  146. package/web/assets/viewportLock-IP1zaVkz.css +1 -0
  147. package/web/assets/{workflow-DuoVRSSX.js → workflow-DPoG4QE2.js} +1 -1
  148. package/web/assets/{zoom-in-hr5bRpDL.js → zoom-in-lbTgzdQP.js} +1 -1
  149. package/web/index.html +232 -13
  150. package/web/assets/ArtificialView-B4ESD4iK.js +0 -1
  151. package/web/assets/CalendarConfigView-cCfo_EvZ.js +0 -1
  152. package/web/assets/CalendarView-wgLapctk.js +0 -1
  153. package/web/assets/CapabilityMenu-BQBsM638.js +0 -1
  154. package/web/assets/ChatView-BIUk0OJd.css +0 -1
  155. package/web/assets/ChatView-C-jCJnyS.js +0 -47
  156. package/web/assets/Chrome-CwFiDmre.js +0 -1
  157. package/web/assets/DashboardGridView-DXqe0vPd.js +0 -17
  158. package/web/assets/ExcalidrawCanvas-C3egkikA.js +0 -1
  159. package/web/assets/HomepageView-CRdhjLXu.js +0 -1
  160. package/web/assets/ImageStudioPanels-Dke7xf8E.js +0 -3
  161. package/web/assets/ImageStudioView-g38V8gaj.js +0 -1
  162. package/web/assets/InlineFiles-C_hjvn3u.js +0 -1
  163. package/web/assets/MarkdownBlock-DIjYEhTK.js +0 -56
  164. package/web/assets/ModelPill-BPlgovPo.js +0 -1
  165. package/web/assets/MuseLibraryView-CenyTTim.js +0 -2
  166. package/web/assets/PdfAnnotator-CGzC_o1Q.css +0 -1
  167. package/web/assets/PdfAnnotator-D79ip27w.js +0 -560
  168. package/web/assets/RightPanel-C3OJTIqT.js +0 -4
  169. package/web/assets/RunLocationPicker-BNcZ7KKF.css +0 -1
  170. package/web/assets/RunLocationPicker-CTYXUH2z.js +0 -34
  171. package/web/assets/UnifiedPage-CKNtVD_n.js +0 -57
  172. package/web/assets/UnifiedPage-DX_sTpyZ.css +0 -1
  173. package/web/assets/appStore-Di8LXuJ9.css +0 -1
  174. package/web/assets/automationListSource-DP5xZBxo.js +0 -1
  175. package/web/assets/chatBoxSurface-zvcyfrxE.js +0 -1
  176. package/web/assets/dashboardSurface-CFTH5z4c.js +0 -1
  177. package/web/assets/ellipsis-r1EcXsFq.js +0 -1
  178. package/web/assets/floatingTocSurface-C6RJ6i41.js +0 -1
  179. package/web/assets/folder-DlxnPmWY.js +0 -1
  180. package/web/assets/frame-_xBVYe3P.js +0 -1
  181. package/web/assets/gestures-CkW1Kfs9.js +0 -1
  182. package/web/assets/i18n-D-eU58uw.css +0 -1
  183. package/web/assets/i18n.generated-Bbsz16cl.js +0 -15
  184. package/web/assets/imageStudio-BqbNOvpu.css +0 -1
  185. package/web/assets/imageStudio-C_Rs630L.js +0 -2
  186. package/web/assets/index-BCubCwdT.js +0 -1
  187. package/web/assets/index-DZfZTksa.js +0 -1
  188. package/web/assets/main-Dki8NlsT.js +0 -21
  189. package/web/assets/markdownEditorSurface-B4PeUzed.js +0 -3
  190. package/web/assets/mdMarkStore-CsKl7C8O.js +0 -2
  191. package/web/assets/minus-Cyv1YzOU.js +0 -1
  192. package/web/assets/mobileEntry-Bd_nKr0D.js +0 -13
  193. package/web/assets/nativeDownload-D-f1_L2S.js +0 -1
  194. package/web/assets/pageChrome-C9_azUYW.js +0 -1
  195. package/web/assets/panel-left-rOc8As0s.js +0 -1
  196. package/web/assets/pen-line-m6_HvWZ9.js +0 -1
  197. package/web/assets/sticky-note-BIuPUSOU.js +0 -1
  198. package/web/assets/tableSurface-Y_JBQsuz.js +0 -1
  199. package/web/assets/theme-DfEi_DND.css +0 -1
  200. package/web/assets/type-Cqoabh7H.js +0 -1
  201. package/web/assets/userSpaces-DyyAn7vj.js +0 -1
  202. package/web/assets/viewportLock-C4SX-9PO.js +0 -103
  203. package/web/assets/viewportLock-DYSe7Jsn.css +0 -1
  204. package/web/assets/waves-horizontal-B8ZpHQ5H.js +0 -1
@@ -1 +1 @@
1
- import{t as w,r as A,u as S,d as b,j as e,D as H}from"./index-CF4RV4mh.js";import{iI as K,iJ as V,iK as W,iL as T,iM as X,iN as L,iO as Y,iA as M,iP as y,at as _,ex as J,iQ as O,iR as Q,iS as Z,iT as $,iU as G,iV as ee,iW as F,iX as P,eO as ae,iY as te,iZ as ne}from"./appStore-Dg9WALEA.js";import{n as ce}from"./nativeDownload-D-f1_L2S.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=K(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:F,number:ee,checkbox:G,date:L,select:$,multiselect:Z,url:Q,page:T};function ie({col:s}){const c=O(s.type);if(c?.icon)return e.jsx(e.Fragment,{children:c.icon});const a=re[P(s.type)]??F;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"),f=n.columns.filter(r=>r.id!==u?.id&&r.id!==i),U=le(c),x=i?W(s.raw):null,[g,k]=b.useState(!1),q=s.color??"var(--accent, #6c5ce7)",j=b.useRef(null),C=b.useRef(null),E=b.useRef(a);E.current=a;const I=!n.readonly||!!n.openRow;return b.useEffect(()=>{const r=document.activeElement instanceof HTMLElement?document.activeElement:null,B=window.requestAnimationFrame(()=>{(j.current?.querySelector(".amx-cal-card-title:not(.amx-cal-card-title-ro)")??C.current)?.focus()}),D=p=>{if(p.key==="Escape"){p.preventDefault(),E.current();return}if(p.key!=="Tab"||!j.current)return;const N=Array.from(j.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",D),()=>{window.cancelAnimationFrame(B),window.removeEventListener("keydown",D),r?.focus()}},[]),e.jsx("div",{className:"amx-cal-cardcatch",onMouseDown:a,children:e.jsx("div",{className:"amx-cal-cardwrap",ref:j,role:"dialog","aria-modal":"true","aria-label":l("evcard.editEvent",{title:o||l("evcard.untitled")}),style:U,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:q}}),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=>X(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(Y,{value:s.raw,onChange:r=>M(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")})]})]})]}),f.length>0&&e.jsx("div",{className:"amx-cal-card-props",children:f.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))}),(I||t)&&e.jsxs("div",{className:"amx-cal-card-foot",children:[I&&e.jsxs("button",{className:"amx-cal-card-open",onClick:()=>{n.openRow?n.openRow(d.rowId):J(n.path),a()},children:[e.jsx(_,{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=O(a.type),d=P(a.type),i=H(c.cells[a.id],d),o=t=>M(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(f=>f.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(f=>f!==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
+ 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};
@@ -0,0 +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-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-CF4RV4mh.js";import"./appStore-Dg9WALEA.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
+ 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};
@@ -0,0 +1 @@
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};
@@ -0,0 +1,3 @@
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
+
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};
@@ -0,0 +1 @@
1
+ import{u as U,d as o,j as t}from"./index-BM2o7PeV.js";import{F as xe,aE as fe,aM as te,aN as R,T as Z,kn as Se,bU as je,bH as $e,bI as Re,bJ as ve,a4 as Ae,aq as Be,R as Ue,d$ as Fe,ko as He,a5 as qe,b1 as _e,u as Ve,fA as Ke,fN as V,aK as We,L as Ye,kp as Xe,K as Ge,dX as Je,cO as Qe,kq as Ze,fJ as et}from"./appStore-DWP8UET9.js";import"./client-0MPbodA6.js";import{u as tt}from"./gestures-DQBCcK4y.js";import{C as st,a as it}from"./Chrome-HdfyYV3i.js";import{b as M,i as be,u as r,a as at,C as nt,r as ce,m as rt,c as ot,d as ye,e as ue,f as me,g as lt,n as dt,h as ct}from"./RightPanel-BHDgqTFs.js";import{s as ut,d as ee,r as mt,h as gt,a as pt,b as Ce,c as we,p as B,e as ke,I as ht,i as xt,f as ft,l as St,u as jt,g as A,S as ge,j as vt,k as K,L as bt,m as yt,n as Ct,o as wt}from"./imageStudio-BLVNKmEG.js";import{L as kt}from"./lock-CnbZm4vo.js";import{L as zt}from"./InlineFiles-CQbQumkf.js";import{U as W}from"./upload-ZrOj6tXA.js";/* empty css */import{F as Nt,R as It}from"./redo-2-BO7wCDwy.js";import{U as Et}from"./undo-2-DusxpdLa.js";import{L as Lt}from"./layout-grid-BBVuEdWG.js";import{A as Pt}from"./arrow-up-right-DrCXuWS7.js";import{H as Tt}from"./hand-Bko7ms15.js";import{T as Mt,F as Ot}from"./type-CFoaj2eD.js";import"./nativeDownload-BYT082bY.js";import"./ipc-CxAyeo8q.js";import"./minus-C9ndHJ9O.js";import"./book-open-OLNm7OaB.js";import"./folder-plus-BeQHr4AZ.js";import"./folder-BpsfOHD4.js";import"./pencil-cqvCkekG.js";const Dt=[["path",{d:"M11 14h10",key:"1w8e9d"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v1.344",key:"1e62lh"}],["path",{d:"m17 18 4-4-4-4",key:"z2g111"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113",key:"bjbb7m"}],["rect",{x:"8",y:"2",width:"8",height:"4",rx:"1",key:"ublpy"}]],$t=xe("clipboard-paste",Dt);const Rt=[["line",{x1:"15",x2:"15",y1:"12",y2:"18",key:"1p7wdc"}],["line",{x1:"12",x2:"18",y1:"15",y2:"15",key:"1nscbv"}],["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],At=xe("copy-plus",Rt);function Bt({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=ut(s,i),L=z?.bounds,P=Math.round((L?.w||0)*b),O=Math.round((L?.h||0)*b),D=!L||P<1||O<1||P*O>4e7||Math.max(P,O)>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(fe,{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:[P," × ",O," 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")}),D&&t.jsx("p",{role:"alert",children:c("imageStudio.exportLimit")}),t.jsxs("button",{className:"ims-primary",disabled:N||D,onClick:async()=>{C(!0),d("");try{ee(await mt(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(R,{size:15}),c("imageStudio.download")]}),u&&t.jsx("p",{role:"alert",children:c("imageStudio.error",{error:u})})]})}function Ut({target:s,board:i,busy:j,onClose:c,onImport:g,onExport:v,onInspect:b,run:w}){const{t:l}=U(),p=i?M(i).filter(d=>s.ids.includes(d.id)):[],S=p.length===1&&be(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(R,{size:14}),disabled:j,run:C(()=>{w(async()=>ee(await pt([S],!0),S.name.replace(/\.[^.]+$/,"")+".png"))})},{label:l("imageStudio.downloadOriginal"),icon:t.jsx(R,{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(R,{size:14}),disabled:j,run:C(v)},{label:l("imageStudio.reference"),icon:t.jsx(Z,{size:14}),separatorBefore:!0,disabled:j||p.length>8,run:C(()=>{w(Ce)})},{label:l("imageStudio.inspector"),icon:t.jsx(Se,{size:14}),run:C(b)},{label:l("imageStudio.copyObjects"),icon:t.jsx(je,{size:14}),shortcut:`${N}C`,separatorBefore:!0,run:C(we)},{label:l("imageStudio.duplicate"),icon:t.jsx(At,{size:14}),shortcut:`${N}D`,run:C(()=>B(!0))},{label:l("imageStudio.layerUp"),icon:t.jsx($e,{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(Re,{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(kt,{size:14}):t.jsx(zt,{size:14}),run:C(()=>r.getState().update(i.id,d=>rt(d,z=>s.ids.includes(z.id)?{...z,locked:!!y.length}:z)))},{label:l("imageStudio.remove"),icon:t.jsx(ve,{size:14}),shortcut:"⌫",separatorBefore:!0,danger:!0,disabled:!y.length,run:C(ke)}):u.push({label:l("imageStudio.import"),icon:t.jsx(W,{size:14}),disabled:j,run:g},{label:l("imageStudio.pasteObjects"),icon:t.jsx($t,{size:14}),shortcut:`${N}V`,disabled:!i||!gt(),run:C(()=>B())},{label:l("imageStudio.selectAll"),icon:t.jsx(at,{size:14}),disabled:!i?.images.length&&!i?.elements?.length,run:()=>r.setState({selection:i?M(i).filter(d=>!d.hidden).map(d=>d.id):[]})},{label:l("imageStudio.exportBoard"),icon:t.jsx(R,{size:14}),separatorBefore:!0,disabled:j||!i||!M(i).some(d=>!d.hidden),run:C(v)}),t.jsx(nt,{menu:{x:s.x,y:s.y,items:u},onClose:c,autoFocus:!0})}const pe=4/3,Ft=.05;function Ht({board:s}){const i=ot(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(He,{size:22,strokeWidth:1.4})})});const j=i.map(g=>{const v=ye(g);return v.w/v.h}),c=Math.min(1,(1-Ft*(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(ht,{image:g})},g.id))})})}function qt(){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 xt(u),z=r.getState().create(d.name);r.getState().update(z,L=>({...d,id:L.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(Ae,{size:15}),s("imageStudio.restore")]}),t.jsxs("button",{type:"button",className:"csl-new",onClick:()=>r.getState().create(s("imageStudio.untitled")),children:[t.jsx(Be,{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(Ue,{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(Ht,{board:u}),t.jsxs("span",{className:"ims-launch-meta",children:[t.jsx("strong",{children:u.name}),t.jsxs("small",{children:[s("imageStudio.itemCount",{count:M(u).length})," · ",Fe(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=qe(l=>l.activeSpaceId==="image-studio")&&_e()==="main",b=!!g,w=o.useRef(!1);return o.useEffect(()=>{!j||!v||(b?ft():St(w.current),w.current=b)},[j,v,b]),j?g?t.jsx(_t,{},g):t.jsx(qt,{}):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 _t(){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=Ve(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),[L,P]=o.useState(!1),[O,D]=o.useState(!1),h=o.useRef(null),[se,ze]=o.useState(!0),[ie,Ne]=o.useState(!1),[Ie,Y]=o.useState(!1),I=o.useRef(null),F=o.useRef(null),[ae,ne]=o.useState(null),Ee=o.useCallback(()=>{ne(null),I.current?.focus({preventScroll:!0})},[]),m=Ke(I,`image-studio:${i?.id||""}`,void 0,{x:56,y:64,z:1}),H=i?.images||[],T=i?M(i):[],q=T.filter(e=>!e.hidden),Le=!T.length&&!g&&!v,X=[...q,...w],_=o.useRef(!0);o.useEffect(()=>(_.current=!0,()=>{_.current=!1}),[]);const re=o.useCallback(e=>{_.current&&N(e)},[]);jt(i||Vt,re,C);const x=tt(I,m,{boxes:()=>new Map(q.map(e=>[e.id,e])),identity:()=>i?.id,commit:e=>{i&&r.getState().update(i.id,a=>me(a,e))},constrain:(e,a)=>{if(a.kind!=="resize")return e;const n=H.find(De=>De.id===a.key),f=e.get(a.key);if(!n||!f)return e;const k=ye(n),E=Math.max(48,f.w),Oe=E*k.h/k.w;return new Map(e).set(a.key,{...f,w:E,h:Oe})},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=>ue(a,M(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=()=>{D(!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}=V(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 $=async e=>{S(!0),N("");try{await e()}catch(a){re(String(a))}finally{_.current&&S(!1)}},G=()=>i?.id||r.getState().create(s("imageStudio.untitled")),de=async e=>{const a=await Promise.all(e.map(f=>wt(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,...ct(E.width,E.height,k)});return{...f,images:k}})},Pe=e=>{$(async()=>{const a=G();await yt(a,s(e))})},J=T.filter(e=>b.includes(e.id)),Te=i&&x.live?M(me(i,x.live)):T,Q=e=>{const a=G(),{w:n,h:f}=V(I.current),k=dt(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=>ue(E,[...M(E),k])),r.setState({selection:[k.id]}),A(K)},Me=e=>{const{w:a,h:n}=V(I.current);m.setVp(et(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"?we():a&&n==="v"?B():a&&n==="d"?B(!0):a&&n==="e"?z(!0):!a&&n==="t"?Q("text"):!a&&n==="f"?Q("frame"):!a&&n==="h"?P(!0):!a&&n==="v"?P(!1):n===" "?D(!0):(n==="escape"&&(P(!1),z(!1)),f=!1),f&&(e.preventDefault(),e.stopPropagation())},onKeyUpCapture:e=>{e.key===" "&&(D(!1),e.preventDefault(),e.stopPropagation())},onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||(D(!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(We,{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:()=>{$(()=>Ct(i))},children:t.jsx(Nt,{size:16})}),t.jsxs("button",{className:"ims-primary",disabled:!q.length||p,onClick:()=>z(!d),children:[t.jsx(R,{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:()=>F.current?.click(),children:[t.jsx(W,{size:15}),t.jsx("span",{children:s("imageStudio.import")})]}),!Le&&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(It,{size:15})}),t.jsx("button",{disabled:!H.some(e=>!e.locked&&!e.hidden),title:s("imageStudio.arrange"),"aria-label":s("imageStudio.arrange"),onClick:()=>{if(i){const e=lt(H.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:!J.length,title:s("imageStudio.remove"),"aria-label":s("imageStudio.remove"),onClick:ke,children:t.jsx(ve,{size:15})}),t.jsx("button",{disabled:!J.length,title:s("imageStudio.duplicate"),"aria-label":s("imageStudio.duplicate"),onClick:()=>B(!0),children:t.jsx(je,{size:15})}),t.jsx("button",{disabled:!J.length||p,title:s("imageStudio.reference"),"aria-label":s("imageStudio.reference"),onClick:()=>{$(Ce)},children:t.jsx(Z,{size:15})})]}),t.jsx("span",{className:"ims-toolbar-space"}),[[ge,Z,"imageStudio.chat"],[vt,Ye,"imageStudio.layers"],[K,Se,"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(Bt,{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${L||O?" is-panning":""}`,tabIndex:0,onContextMenu:e=>e.stopPropagation(),onPointerDownCapture:e=>{e.button===2||!(L||O)||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}=V(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||$(()=>de(Array.from(e.dataTransfer.files)))},children:[t.jsx("div",{className:"ims-grid",style:Xe(m.vp)}),t.jsxs("div",{className:"ims-world",style:{transform:`translate(${m.vp.x}px, ${m.vp.y}px) scale(${m.vp.z})`},children:[q.map(e=>{const a=Te.find(n=>n.id===e.id)||e;return t.jsxs("div",{"data-image-id":e.id,className:`ims-layer ${be(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(bt,{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=H.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(Ge,{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(ge),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(fe,{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(Pt,{size:14})]},e))}),t.jsxs("button",{className:"ims-empty-import",disabled:p,onClick:()=>F.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")]}),Ie&&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":!L,onClick:()=>{P(!1),I.current?.focus()},children:t.jsx(Je,{size:17})}),t.jsx("button",{title:s("imageStudio.handTool"),"aria-label":s("imageStudio.handTool"),"aria-pressed":L,onClick:()=>{P(!0),I.current?.focus()},children:t.jsx(Tt,{size:17})}),t.jsx("span",{}),[["text",Mt],["rectangle",Qe],["ellipse",Ze],["frame",Ot]].map(([e,a])=>t.jsx("button",{title:s(`imageStudio.add.${e}`),"aria-label":s(`imageStudio.add.${e}`),onClick:()=>Q(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:Me,onFit:()=>m.fitTo(X),snap:se,onSnap:ze,mini:ie,onMini:Ne})]}),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(Ut,{target:ae,board:i,busy:p,onClose:Ee,onImport:()=>F.current?.click(),onExport:()=>z(!0),onInspect:()=>A(K),run:$}),t.jsx("input",{ref:F,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="",$(()=>de(a))}})]})}const Vt={version:1,id:"",name:"",updatedAt:0,sessionId:null,images:[],collected:[]};export{xs as ImageStudioView};
@@ -0,0 +1 @@
1
+ import{F as v,mf as k,kZ as L,ci as w,k$ as p,k_ as x,mg as U,kx as z}from"./appStore-DWP8UET9.js";import{j as l,d as y}from"./index-BM2o7PeV.js";import{n as T}from"./nativeDownload-BYT082bY.js";const S=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 9.9-1",key:"1mm8w8"}]],_=v("lock-open",S),R=t=>(t.mime?.startsWith("image/")??!1)||/\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(t.name);function N(t){const n=t.match(/^data:([^;]+);base64,(.*)$/),e=p(n?.[2]||"");return{mimeType:n?.[1]||"application/octet-stream",bytes:e,size:e.length}}function E(t,n,e,i){e=t.sourceSessionId||e;const o=i==="host"?k(e):null,s=r=>{T({text:r?.message||String(r),level:"error"})},a=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 N(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:p(c.content),size:c.size}}const r=await x(w(e),e,t.path);return{mimeType:r.mimeType,bytes:p(r.content),size:r.size}},download:t.path?i==="host"?a?()=>{a(t.path,t.name).catch(s)}:void 0:()=>{L(w(e),e,t.path).catch(s)}:void 0}}const f=({f:t,onClick:n})=>{const e=z(t.mime||"",t.name);return l.jsxs("button",{className:"inline-file-card",title:t.name,onClick:n,children:[l.jsx(e,{size:15}),l.jsx("span",{className:"inline-file-name",children:t.name})]})},D=({f:t,cfg:n,sessionId:e,execMode:i,onClick:o})=>{e=t.sourceSessionId||e;const s=t.dataUrl||(t.path&&i!=="host"?U(w(e),e,t.path):null),[a,r]=y.useState(s),[c,h]=y.useState(!1),d=y.useRef(null);return y.useEffect(()=>{if(h(!1),s){r(s);return}let u=!1;return(async()=>{if(!t.path)return;const b=i==="host"?k(e):null;try{let g=null,F="";if(b){const m=await b.readHostFile(t.path);if(u)return;if(m.tooLarge){h(!0);return}g=p(m.content),F=m.mimeType}else if(i!=="host"){const m=await x(w(e),e,t.path);if(u)return;g=p(m.content),F=m.mimeType}if(!g||u)return;const j=URL.createObjectURL(new Blob([g],{type:F||t.mime||"image/png"}));d.current=j,r(j)}catch{u||h(!0)}})(),()=>{u=!0,d.current&&(URL.revokeObjectURL(d.current),d.current=null)}},[t.path,t.dataUrl]),c?l.jsx(f,{f:t,onClick:o}):a?l.jsx("img",{className:"inline-file-img",src:a,alt:t.name,title:t.name,onClick:o,draggable:!1,onError:()=>h(!0)}):null},$=({files:t,cfg:n,sessionId:e,execMode:i,onOpenPreview:o})=>{if(!t.length)return null;const s=a=>o?.(E(a,n,e,i));return l.jsx("div",{className:"inline-file-grid",children:t.map((a,r)=>R(a)?l.jsx(D,{f:a,cfg:n,sessionId:e,execMode:i,onClick:()=>s(a)},r):l.jsx(f,{f:a,onClick:()=>s(a)},r))})};export{$ as I,_ as L,E as t};
@@ -0,0 +1 @@
1
+ .slash-category-tabs{display:flex;flex-shrink:0;gap:3px;margin:4px 6px 8px;padding:3px;border-radius:var(--radius-pill);background:var(--overlay-light)}.slash-menu .slash-category-tab{flex:1;min-width:0;border:0;border-radius:var(--radius-pill);padding:4px 8px;background:transparent;color:var(--text-sec);font-family:var(--font-ui);font-size:var(--menu-text-size, var(--ui-font-meta));line-height:var(--ui-line-meta);white-space:nowrap;cursor:pointer}.slash-menu .slash-category-tab[aria-selected=true]{background:var(--menu-hover);color:var(--text)}.slash-menu .slash-list{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden}.slash-menu .slash-scroll{min-height:0}.slash-menu .slash-foot{flex-shrink:0;flex-wrap:wrap}