@forsion/unit 2.13.0 → 2.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/main.mjs +5 -3
  2. package/package.json +1 -1
  3. package/release.json +5 -5
  4. package/web/assets/{ArtificialView-BSv3Mx5C.js → ArtificialView-XwHMLUFb.js} +1 -1
  5. package/web/assets/{AutomationBuilder-BuiHtVB-.js → AutomationBuilder-hqs0QhMt.js} +1 -1
  6. package/web/assets/{CalendarConfigView-BJtG6cqN.js → CalendarConfigView-DKib8Oed.js} +1 -1
  7. package/web/assets/{CalendarView-C-FX1RED.js → CalendarView-DJ5iOzvu.js} +1 -1
  8. package/web/assets/{CapabilityMenu-kx1TIJYN.js → CapabilityMenu-SwVlZ06x.js} +1 -1
  9. package/web/assets/{CheckboxInput-eW7xdiRS.js → CheckboxInput-BC-5a_C9.js} +1 -1
  10. package/web/assets/{Chrome-B77-lQyh.js → Chrome-HdfyYV3i.js} +1 -1
  11. package/web/assets/{CodeView-Df3AiSIi.js → CodeView-CFL6yQ-6.js} +3 -3
  12. package/web/assets/{DashboardGridView-MlO1dpuo.js → DashboardGridView-B9DCWYVb.js} +12 -12
  13. package/web/assets/{EventCard-CDmeCbI8.js → EventCard-B_ndpqH_.js} +1 -1
  14. package/web/assets/{ExcalidrawCanvas-D9vkBh_5.js → ExcalidrawCanvas-BQ4KKLJP.js} +1 -1
  15. package/web/assets/{FloatingToc-tART_jC4.js → FloatingToc-Ce9GamvH.js} +1 -1
  16. package/web/assets/{HomepageView-Trqmd3RV.js → HomepageView-RCOfcVbE.js} +1 -1
  17. package/web/assets/{ImageStudioPanels-BfCVTnKC.js → ImageStudioPanels-lkS_y2uM.js} +2 -2
  18. package/web/assets/{ImageStudioView-KJhx0wJk.js → ImageStudioView-UPv52acl.js} +1 -1
  19. package/web/assets/{InlineFiles-BHwivGbQ.js → InlineFiles-CQbQumkf.js} +1 -1
  20. package/web/assets/{MarkdownBlock-D8LgHFYY.js → MarkdownBlock-CkqiwPXa.js} +19 -19
  21. package/web/assets/{ModelPill-DrW2cG0l.js → ModelPill-CY-rU1RU.js} +2 -2
  22. package/web/assets/{MuseLibraryView-CW78Uivf.js → MuseLibraryView-CtTHlVnT.js} +2 -2
  23. package/web/assets/{MuseView-Cb6R_l4i.js → MuseView-CC2A7MBs.js} +2 -2
  24. package/web/assets/{PageHistoryPanel-BQs9IWTP.js → PageHistoryPanel-KhKT1DLy.js} +2 -2
  25. package/web/assets/{PdfAnnotator-BFTBkxvO.js → PdfAnnotator-DUyrgY-t.js} +1 -1
  26. package/web/assets/{ProductView-mB-S0j81.js → ProductView-CgsIYZqD.js} +1 -1
  27. package/web/assets/{RightPanel-BVZeVO3c.js → RightPanel-BHDgqTFs.js} +3 -3
  28. package/web/assets/RunLocationPicker-DBnXYV5B.js +38 -0
  29. package/web/assets/{SidebarRow-D77yrSLf.js → SidebarRow-BAJxbMcx.js} +1 -1
  30. package/web/assets/{SketchCard-CAAr_cqF.js → SketchCard-BGYz-bXP.js} +1 -1
  31. package/web/assets/{StudioGuestSurface-DthpuVGg.js → StudioGuestSurface-lt6znmkl.js} +1 -1
  32. package/web/assets/{TodoListView-C3ZkMIIf.js → TodoListView-DPKhee6i.js} +1 -1
  33. package/web/assets/{Tooltip-D9Dt9ZTr.js → Tooltip-ZxrDqN4p.js} +1 -1
  34. package/web/assets/{UnifiedPage-C75y-MKT.js → UnifiedPage-BX6ZQL0h.js} +27 -27
  35. package/web/assets/{amadeus-manual.en-D5wZKuag.js → amadeus-manual.en-DzRWr4BL.js} +15 -15
  36. package/web/assets/{amadeus-manual.zh-Br5fidrj.js → amadeus-manual.zh-DW32DkL7.js} +15 -15
  37. package/web/assets/{appStore-B1ynyt42.js → appStore-DWP8UET9.js} +99 -79
  38. package/web/assets/appStore-wtOILggO.css +1 -0
  39. package/web/assets/{arrow-up-right-R10mR2I6.js → arrow-up-right-DrCXuWS7.js} +1 -1
  40. package/web/assets/{astryxBridge-CU_kQTEl.js → astryxBridge-D-m4_kYt.js} +3 -3
  41. package/web/assets/{automationListSource-B8EIRmDW.js → automationListSource-C8BNy6RY.js} +1 -1
  42. package/web/assets/{book-open-DBJ3dDpw.js → book-open-OLNm7OaB.js} +1 -1
  43. package/web/assets/{calendarNavStore-DGvUlU5N.js → calendarNavStore-Cylfvv3s.js} +1 -1
  44. package/web/assets/{canvasPrefs-DwL_OAAo.js → canvasPrefs-8taQ42Cz.js} +1 -1
  45. package/web/assets/{chatBoxSurface-Lq-2qfd3.js → chatBoxSurface-CIlzs45H.js} +1 -1
  46. package/web/assets/{circle-question-mark-HPZpZQxd.js → circle-question-mark-XbAFplz1.js} +1 -1
  47. package/web/assets/{circle-x-BZfe7d6S.js → circle-x-fcReAZaE.js} +1 -1
  48. package/web/assets/{client-DxGbwZLy.js → client-0MPbodA6.js} +1 -1
  49. package/web/assets/{code-xml-joKQ-qGS.js → code-xml-Cuna8Kh4.js} +1 -1
  50. package/web/assets/{codeStudioStore-C7rGKlOC.js → codeStudioStore-BBU62GTy.js} +1 -1
  51. package/web/assets/{codingNavigation-CjeWG4xm.js → codingNavigation-DDlPpPk5.js} +7 -7
  52. package/web/assets/{create-BjBRKATq.js → create-BGtEfCcg.js} +2 -2
  53. package/web/assets/{dashboardSurface-Cojgf_-U.js → dashboardSurface-BYM3C7WG.js} +1 -1
  54. package/web/assets/{deskCapture-DnGWk1iq.js → deskCapture-BiUCmqfc.js} +1 -1
  55. package/web/assets/{diff2html-Cd1rVi_Z.js → diff2html-BNp2FTbk.js} +1 -1
  56. package/web/assets/{docx-preview-CK0k1mUD.js → docx-preview-CFznGVOU.js} +1 -1
  57. package/web/assets/{emoji-Cjm3bKiF.js → emoji-6zl4yfOS.js} +1 -1
  58. package/web/assets/{floatingTocSurface-Dd1pT5j5.js → floatingTocSurface-DreXPCa6.js} +1 -1
  59. package/web/assets/{foldActions-Dm-uAt3L.js → foldActions-05QcQziQ.js} +1 -1
  60. package/web/assets/{folder-CvZyHIgb.js → folder-BpsfOHD4.js} +1 -1
  61. package/web/assets/{folder-plus-BRScGQ9m.js → folder-plus-BeQHr4AZ.js} +1 -1
  62. package/web/assets/{gestures-CZQVefU0.js → gestures-DQBCcK4y.js} +1 -1
  63. package/web/assets/{hand-D3QspKYq.js → hand-Bko7ms15.js} +1 -1
  64. package/web/assets/{hard-drive-BQsHSala.js → hard-drive-BpuI5ebj.js} +1 -1
  65. package/web/assets/{i18n.generated-BZRHO2Nc.js → i18n.generated-BuLjnmY8.js} +1 -1
  66. package/web/assets/{imageStudio-Cy3_437s.js → imageStudio-BLVNKmEG.js} +2 -2
  67. package/web/assets/{index-BPhwi4-v.js → index-BF10xp_K.js} +1 -1
  68. package/web/assets/{index-GjLSlygt.js → index-BHm6K743.js} +1 -1
  69. package/web/assets/{index-Bh_nLVTc.js → index-BM2o7PeV.js} +5 -5
  70. package/web/assets/{index-BcVGjCAJ.js → index-BgnNNv3e.js} +1 -1
  71. package/web/assets/{index-CcOag8eb.js → index-C0Gy2NQ6.js} +1 -1
  72. package/web/assets/{index-0AYHATDX.js → index-C1doZp5H.js} +1 -1
  73. package/web/assets/{index-9BmmlTjY.js → index-C4L6vjd_.js} +1 -1
  74. package/web/assets/{index-8ag1K7AZ.js → index-CD3yIkOA.js} +1 -1
  75. package/web/assets/{index-Dkd-nl1u.js → index-CJeUgjPU.js} +1 -1
  76. package/web/assets/{index-B5GxvbNm.js → index-CLHoq1w-.js} +1 -1
  77. package/web/assets/{index-DElrDw66.js → index-CUZI62qU.js} +1 -1
  78. package/web/assets/{index-BgtO11q8.js → index-Cff42k7q.js} +1 -1
  79. package/web/assets/{index-Dj-PygjB.js → index-Ck_O3Jdd.js} +1 -1
  80. package/web/assets/index-CuiYK18N.js +1 -0
  81. package/web/assets/{index-Bpc3R3DS.js → index-CwcOeZdT.js} +1 -1
  82. package/web/assets/{index-DJLWTPtq.js → index-D6AycQIz.js} +1 -1
  83. package/web/assets/{index-C9yo04Ck.js → index-D7gVhvNY.js} +1 -1
  84. package/web/assets/{index-BnWj6ggb.js → index-D9UZQy42.js} +1 -1
  85. package/web/assets/{index-D6mpAJ9S.js → index-DuBQ0j2g.js} +1 -1
  86. package/web/assets/{index-1FhRiJ_X.js → index-OD1gSX3h.js} +1 -1
  87. package/web/assets/{index-DNE_PBJt.js → index-Uo5tswys.js} +1 -1
  88. package/web/assets/{index-BgDZGDqt.js → index-o8cj0pRH.js} +1 -1
  89. package/web/assets/{index-BdZaheMZ.js → index-rHjhbwvm.js} +1 -1
  90. package/web/assets/{index-4E9nrhwf.js → index-rggq2czF.js} +1 -1
  91. package/web/assets/{index-D0FLFLfh.js → index-sCXThwqZ.js} +1 -1
  92. package/web/assets/{invitePage-B4gMvEKi.js → invitePage-b0HGvMj6.js} +1 -1
  93. package/web/assets/{ipc-CPhL3bPp.js → ipc-CxAyeo8q.js} +1 -1
  94. package/web/assets/{jszip.min-DAJT9RUA.js → jszip.min-B94KpE21.js} +1 -1
  95. package/web/assets/{layout-grid-DfUfnvDS.js → layout-grid-BBVuEdWG.js} +1 -1
  96. package/web/assets/{linkFollow-C6PHGUxk.js → linkFollow-B7ivDZMM.js} +5 -5
  97. package/web/assets/{list-tree-DaGpnIYu.js → list-tree-4-0QDbLu.js} +1 -1
  98. package/web/assets/{listFold-Q_8mh5ZG.js → listFold-DLuxXiIj.js} +1 -1
  99. package/web/assets/{lock-DQ_yL4nF.js → lock-CnbZm4vo.js} +1 -1
  100. package/web/assets/{log-out-DFwTeh2X.js → log-out-BEynWaHa.js} +1 -1
  101. package/web/assets/{main-NgUPPqDn.css → main-BiS_5wrB.css} +1 -1
  102. package/web/assets/main-sIq2N9Z5.js +20 -0
  103. package/web/assets/{markdownEditorSurface-e_oMhqx-.js → markdownEditorSurface-ZSJ3RHAv.js} +1 -1
  104. package/web/assets/{mdMarkStore-DjN4bf1T.js → mdMarkStore-DQHDjG7s.js} +2 -2
  105. package/web/assets/{mdMarks-cmL6vzR-.js → mdMarks-DbIcRa0O.js} +1 -1
  106. package/web/assets/{message-square-plus-CEHkduIL.js → message-square-plus-CpiKDvle.js} +1 -1
  107. package/web/assets/{messages-CBtmbpur.js → messages-_jta1lSI.js} +1 -1
  108. package/web/assets/minus-C9ndHJ9O.js +1 -0
  109. package/web/assets/{mobileEntry-qR7BAROr.js → mobileEntry-CPmU_c4m.js} +1 -1
  110. package/web/assets/{nativeDownload-CziEyW_p.js → nativeDownload-BYT082bY.js} +1 -1
  111. package/web/assets/{pageChrome-DFz_AAzZ.js → pageChrome-D3Niv1JM.js} +1 -1
  112. package/web/assets/{pageTree-yVO1_fSy.js → pageTree-CgfvpzIj.js} +1 -1
  113. package/web/assets/{pen-tool-uxsFELYC.js → pen-tool-BXEFnU2i.js} +1 -1
  114. package/web/assets/{pencil-BSbra1Ra.js → pencil-cqvCkekG.js} +1 -1
  115. package/web/assets/pluginChat-BbBukMuN.js +2 -0
  116. package/web/assets/{redo-2-BK5LMNa5.js → redo-2-BO7wCDwy.js} +1 -1
  117. package/web/assets/{rotate-ccw-HedfU4na.js → rotate-ccw-BvipPIjC.js} +1 -1
  118. package/web/assets/{sharePage-CpzDpuU1.js → sharePage-XbN50US7.js} +2 -2
  119. package/web/assets/{shareViewer-BwzH2bIs.js → shareViewer-BaYogetW.js} +1 -1
  120. package/web/assets/{star-CgYon3z4.js → star-BQWMXnn7.js} +1 -1
  121. package/web/assets/tableSurface-BXqqidd1.js +1 -0
  122. package/web/assets/{terminal-krsPf1mc.js → terminal-l9k6RDrH.js} +1 -1
  123. package/web/assets/{terminalView-4e2_u5_I.js → terminalView-Cpnt5_0P.js} +1 -1
  124. package/web/assets/{type-GJYLEhY-.js → type-CFoaj2eD.js} +1 -1
  125. package/web/assets/{undo-2-DCTs4Ro4.js → undo-2-DusxpdLa.js} +1 -1
  126. package/web/assets/{unitAccount-D3xjX3cu.js → unitAccount-DwutFPPw.js} +1 -1
  127. package/web/assets/{unitBridge-D5JcIkAP.js → unitBridge-CcgQpkqV.js} +1 -1
  128. package/web/assets/{unitCloudTransport-B44L3x6M.js → unitCloudTransport-vA7cLDts.js} +1 -1
  129. package/web/assets/{unitOwnerAccess-CRUHWGpf.js → unitOwnerAccess-LBlJ1YfA.js} +1 -1
  130. package/web/assets/{unitShim-_VzxvdEG.js → unitShim-B_M9IrbC.js} +3 -3
  131. package/web/assets/{upload-MVVRQtkj.js → upload-ZrOj6tXA.js} +1 -1
  132. package/web/assets/{userSpaces-CI4eqEgh.js → userSpaces-uJOnsedR.js} +1 -1
  133. package/web/assets/viewportLock-D3SNkwS2.js +631 -0
  134. package/web/assets/{workflow-DzeW9OXR.js → workflow-DPoG4QE2.js} +1 -1
  135. package/web/assets/{zoom-in-CovPsw4g.js → zoom-in-lbTgzdQP.js} +1 -1
  136. package/web/index.html +27 -7
  137. package/web/assets/RunLocationPicker-CyVa0RJa.js +0 -38
  138. package/web/assets/appStore-BC_CQv-L.css +0 -1
  139. package/web/assets/index-BaRySZ-M.js +0 -1
  140. package/web/assets/main-CwqZ_ymb.js +0 -19
  141. package/web/assets/minus-BUT48dAC.js +0 -1
  142. package/web/assets/pluginChat-BMFnf_j2.js +0 -2
  143. package/web/assets/tableSurface-CmDwnKnd.js +0 -1
  144. package/web/assets/viewportLock-BH26xHQO.js +0 -611
@@ -1 +0,0 @@
1
- import{qZ as y,oQ as d,oO as b,q_ as f,oG as C,q$ as j,oN as O,r0 as g,r1 as A,m$ as m,r2 as K,r3 as v,r4 as h,r5 as P,r6 as q,r7 as $,r8 as w}from"./appStore-B1ynyt42.js";import{ck as I}from"./index-Bh_nLVTc.js";I("abcedfghicklmn",10);function Z(r,s){const t=K(r),n=e=>async()=>{n.key=t,await e.wait(A);const a=s(e);return e.get(m).create(t,a),n.run=o=>e.get(m).call(r,o),()=>{e.get(m).remove(t)}};return n}function _(r){const s=t=>async()=>{await t.wait(y);const n=r(t);return t.update($,e=>[...e,n]),s.inputRule=n,()=>{t.update($,e=>e.filter(a=>a!==n))}};return s}function z(r){const s=t=>async()=>{await t.wait(y);const n=r(t);return t.update(w,e=>[...e,n]),s.pasteRule=n,()=>{t.update(w,e=>e.filter(a=>a!==n))}};return s}function T(r,s){const t=n=>async()=>{const e=s(n);return n.update(h,a=>[...a.filter(o=>o[0]!==r),[r,e]]),t.id=r,t.schema=e,()=>{n.update(h,a=>a.filter(([o])=>o!==r))}};return t.type=n=>{const e=n.get(C).marks[r];if(!e)throw v(r);return e},t}function E(r,s){const t=n=>async()=>{const e=s(n);return n.update(g,a=>[...a.filter(o=>o[0]!==r),[r,e]]),t.id=r,t.schema=e,()=>{n.update(g,a=>a.filter(([o])=>o!==r))}};return t.type=n=>{const e=n.get(C).nodes[r];if(!e)throw j(r);return e},t}function B(r){let s;const t=n=>async()=>(await n.wait(y),s=r(n),n.update(d,e=>[...e,s]),()=>{n.update(d,e=>e.filter(a=>a!==s))});return t.plugin=()=>s,t.key=()=>s.spec.key,t}function M(r){const s=t=>async()=>{await t.wait(P);const n=t.get(q),e=r(t),a=n.addObjectKeymap(e);return s.keymap=e,()=>{a()}};return s}function c(r,s){const t=O(r,s),n=e=>(e.inject(t),()=>()=>{e.remove(t)});return n.key=t,n}function N(r,s){const t=c(s,r),n=E(r,a=>a.get(t.key)(a)),e=[t,n];return e.id=n.id,e.node=n,e.type=a=>n.type(a),e.ctx=t,e.key=t.key,e.extendSchema=a=>N(r,a(s)),e}function D(r,s){const t=c(s,r),n=T(r,a=>a.get(t.key)(a)),e=[t,n];return e.id=n.id,e.mark=n,e.type=a=>n.type(a),e.ctx=t,e.key=t.key,e.extendSchema=a=>D(r,a(s)),e}function F(r,s){const t=c(Object.fromEntries(Object.entries(s).map(([a,{shortcuts:o,priority:u}])=>[a,{shortcuts:o,priority:u}])),`${r}Keymap`),n=M(a=>{const o=a.get(t.key),u=Object.entries(s).flatMap(([i,{command:p}])=>{const l=o[i],S=[l.shortcuts].flat(),R=l.priority;return S.map(k=>[k,{key:k,onRun:p,priority:R}])});return Object.fromEntries(u)}),e=[t,n];return e.ctx=t,e.shortcuts=n,e.key=t.key,e.keymap=n.keymap,e}var H=(r,s=()=>({}))=>c(s,`${r}Attr`),J=(r,s=()=>({}))=>c(s,`${r}Attr`);function L(r,s,t){const n=c({},r),e=o=>async()=>{await o.wait(b);const u={plugin:s(o),options:o.get(n.key)};return o.update(f,i=>[...i,u]),()=>{o.update(f,i=>i.filter(p=>p!==u))}},a=[n,e];return a.id=r,a.plugin=e,a.options=n,a}export{B as $,L as a,N as b,Z as c,D as d,J as e,F as f,E as g,H as h,c as i,_ as j,z as k};
@@ -1,19 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./appStore-B1ynyt42.js","./index-Bh_nLVTc.js","./nativeDownload-CziEyW_p.js","./ipc-CPhL3bPp.js","./client-DxGbwZLy.js","./appStore-BC_CQv-L.css"])))=>i.map(i=>d[i]);
2
- import{d as c,j as t,r as mt,u as Te,t as mn,_ as je,f as as,L as os}from"./index-Bh_nLVTc.js";import{c as is}from"./client-DxGbwZLy.js";import{f as rs,g as cs,L as fn,T as ls,C as qt,W as ds,h as us,u as ms,j as fs,s as ps,k as hs,a as gs,b as pn,D as bs,A as hn,F as Ce,S as gn,M as bn,c as vn,B as vs,P as wn,d as ws,N as ks,l as xs,m as ys,i as Ss,e as js}from"./viewportLock-BH26xHQO.js";import{F as oe,M as Cs,G as Es,I as Ns,J as Is,L as Ts,P as Ms,K as Ls,N as Rs,R as Ds,U as Os,T as As,V as Ps,W as Fs,X as zs,Y as _s,Z as lt,_ as Bs,$ as $s,a0 as Ws,a1 as Vs,a2 as kn,a3 as qs,a4 as Hs,m as G,a5 as ae,a6 as Ys,a7 as Ks,a8 as xn,a9 as Us,aa as qe,ab as Ht,ac as Gs,ad as Xs,ae as Fe,af as ot,ag as dt,ah as Yt,ai as Zs,aj as Kt,ak as be,al as ze,am as Ut,an as Js,ao as Qs,ap as ea,aq as ta,ar as yn,as as na,at as sa,au as aa,av as oa,aw as ia,ax as Sn,S as ra,ay as Me,az as He,aA as Ee,aB as Ie,aC as ca,aD as la,aE as jn,aF as Cn,aG as We,aH as ft,u as C,aI as Gt,aJ as da,aK as ua,aL as ma,aM as Xt,aN as fa,aO as pa,aP as ha,p as $,aQ as ga,aR as pt,s as ht,i as Ye,j as ba,aS as En,aT as va,aU as Zt,aV as Nn,g as wa,aW as ka,Q as xa,aX as In,O as ya,aY as Jt,aZ as Sa,a_ as Qt,a$ as ja,b0 as Ve,h as Tn,b1 as Ca,b2 as Ea,b3 as Na,b4 as Ia,b5 as Ta,b6 as Ma,b7 as La,w as Ra,x as Da,y as Oa,z as Aa,b8 as Pa,B as Fa,C as za,D as _a,E as Ba}from"./appStore-B1ynyt42.js";import{P as $a}from"./pen-tool-uxsFELYC.js";import{T as Wa,R as Va,M as qa,V as Ha,a as Ya,C as Ka,H as Ua,f as Ga}from"./userSpaces-CI4eqEgh.js";import{C as Xa,P as Za,H as Ja,A as ge,m as Qa}from"./SidebarRow-D77yrSLf.js";import{M as eo}from"./Chrome-B77-lQyh.js";import{T as to}from"./terminal-krsPf1mc.js";import{B as no}from"./AutomationBuilder-BuiHtVB-.js";import{S as so}from"./star-CgYon3z4.js";import{F as Mn}from"./folder-CvZyHIgb.js";import{F as Ln}from"./UnifiedPage-C75y-MKT.js";import{i as ao,q as oo,o as en,a as io,c as ro,A as co,p as lo,d as uo,E as mo}from"./codingNavigation-CjeWG4xm.js";import"./i18n.generated-BZRHO2Nc.js";import{S as fo,C as po}from"./RunLocationPicker-CyVa0RJa.js";import{R as ho}from"./RightPanel-BVZeVO3c.js";import{n as go}from"./codeStudioStore-C7rGKlOC.js";import"./ModelPill-DrW2cG0l.js";import"./rotate-ccw-HedfU4na.js";import"./upload-MVVRQtkj.js";import"./hard-drive-BQsHSala.js";import"./CapabilityMenu-kx1TIJYN.js";import"./book-open-DBJ3dDpw.js";import"./folder-plus-BRScGQ9m.js";import"./circle-x-BZfe7d6S.js";import"./layout-grid-DfUfnvDS.js";import"./nativeDownload-CziEyW_p.js";import"./DashboardGridView-MlO1dpuo.js";import"./FloatingToc-tART_jC4.js";import"./MarkdownBlock-D8LgHFYY.js";import"./index-BaRySZ-M.js";import"./linkFollow-C6PHGUxk.js";import"./mdMarks-cmL6vzR-.js";import"./emoji-Cjm3bKiF.js";import"./listFold-Q_8mh5ZG.js";import"./pageChrome-DFz_AAzZ.js";import"./pageTree-yVO1_fSy.js";import"./pluginExt-Byb64tQO.js";import"./list-tree-DaGpnIYu.js";import"./pencil-BSbra1Ra.js";import"./type-GJYLEhY-.js";import"./undo-2-DCTs4Ro4.js";import"./redo-2-BK5LMNa5.js";import"./code-xml-joKQ-qGS.js";import"./lock-DQ_yL4nF.js";import"./ipc-CPhL3bPp.js";import"./InlineFiles-BHwivGbQ.js";import"./workflow-DzeW9OXR.js";import"./canvasPrefs-DwL_OAAo.js";import"./circle-question-mark-HPZpZQxd.js";import"./gestures-CZQVefU0.js";import"./MuseView-Cb6R_l4i.js";import"./automationListSource-B8EIRmDW.js";import"./messages-CBtmbpur.js";import"./approvalText-Cy2UAUAQ.js";import"./message-square-plus-CEHkduIL.js";import"./log-out-DFwTeh2X.js";import"./index-Dj-PygjB.js";/* empty css */import"./StudioGuestSurface-DthpuVGg.js";import"./minus-BUT48dAC.js";import"./SketchCard-CAAr_cqF.js";import"./arrow-up-right-R10mR2I6.js";import"./hand-D3QspKYq.js";import"./foldActions-Dm-uAt3L.js";import"./create-BjBRKATq.js";import"./pdf.worker.min-CGb3BKV9.js";import"./zoom-in-CovPsw4g.js";import"./mdMarkStore-DjN4bf1T.js";const bo=[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]],vo=oe("box",bo);const wo=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],ko=oe("calendar",wo);const xo=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],yo=oe("chevron-up",xo);const So=[["path",{d:"m11 17-5-5 5-5",key:"13zhaf"}],["path",{d:"m18 17-5-5 5-5",key:"h8a8et"}]],jo=oe("chevrons-left",So);const Co=[["path",{d:"m6 17 5-5-5-5",key:"xnjwq"}],["path",{d:"m13 17 5-5-5-5",key:"17xmmf"}]],Eo=oe("chevrons-right",Co);const No=[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]],Io=oe("flag",No);const To=[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]],Mo=oe("tag",To);const Lo=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],Ro=oe("user",Lo),Rn={folder:Mn,"folder-open":Hs,star:so,heart:Ua,home:qs,zap:kn,bookmark:Vs,bell:no,tag:Mo,flag:Io,pin:Za,box:vo,package:Ws,settings:$s,wrench:Bs,terminal:to,code:Ka,"file-text":lt,image:_s,music:Ya,video:Ha,camera:zs,globe:Fs,compass:Ps,map:eo,calendar:ko,clock:Xa,mail:qa,"message-circle":As,users:Os,user:Ro,search:Ds,filter:Rs,sparkles:Ls,rocket:Va,target:Wa,trophy:ls,lightbulb:fn,coffee:cs,palette:Ms,layers:Ts,database:Is,"pen-tool":$a,inbox:Ns,bot:Es,command:rs,moon:Cs},Do=Object.keys(Rn),it=n=>n?Rn[n]:void 0,rt=4,tn=5,nn=5,Oo=1e3,Ao=100;function sn(n){if(n>=9)return"";const s=sa({id:`space-slot-${n+1}`,hotkey:`mod+${n+1}`});return s?aa(s,oa()):""}function Ne({item:n,expanded:s}){if(n.component){const r=n.component;return t.jsx(r,{expanded:s})}const o=n.icon,m=n.tooltip?be(n.tooltip):"";return t.jsxs("button",{className:"rb-btn","aria-label":m||void 0,"data-rb-tip":s?void 0:m||void 0,onClick:n.onClick,children:[o&&t.jsx(o,{size:18}),s&&t.jsx("span",{className:"rb-label",children:m})]})}function Po({cmd:n,expanded:s,overrideIcon:o}){const[,m]=c.useReducer(v=>v+1,0),r=o??n.icon??kn,b=be(n.title);let f;if(n.checked)try{f=!!n.checked()}catch{f=void 0}return t.jsxs("button",{className:`rb-btn${f?" is-on":""}`,"aria-pressed":f,"aria-label":b,"data-rb-tip":s?void 0:b,onMouseEnter:n.checked?m:void 0,onMouseLeave:n.checked?m:void 0,onClick:()=>{const v=n.run();n.checked&&(m(),v&&typeof v.then=="function"&&v.then(m,m))},children:[t.jsx(r,{size:18}),s&&t.jsx("span",{className:"rb-label",children:b})]})}const _e=24,an=n=>n.startsWith("space:")?n.slice(6):null,Fo=600;function zo(){const n=G(e=>e.items),s=G(e=>e.expanded),o=G(e=>e.order),m=G(e=>e.bottomOrder),r=G(e=>e.folders),b=G(e=>e.commandItems),f=G(e=>e.commandIcons),v=G(e=>e.recentCount),w=ae(e=>e.recent),d=Ys(e=>e.commands);Ks(e=>e.overrides);const{t:p}=xn(),g=()=>G.getState(),[h,x]=c.useState(null),[N,S]=c.useState(null),[E,z]=c.useState(null),[j,L]=c.useState(null),[F,R]=c.useState(null),[Z,A]=c.useState(null),[Y,W]=c.useState(null),[P,J]=c.useState(99),O=c.useRef(null),ue=c.useRef(null),V=c.useRef(null),K=c.useRef(null),Q=c.useRef(null),ee=c.useRef(null),I=c.useRef(void 0),me=c.useRef(null),[H,ve]=c.useState({top:0,bottom:0}),[M,Le]=c.useState(null),[we,ie]=c.useState({}),q=c.useRef({}),k=c.useRef({});c.useEffect(()=>()=>{for(const e of Object.values(q.current))window.clearTimeout(e?.timer)},[]);const[_,ke]=c.useState(!1),B=c.useRef(void 0);c.useEffect(()=>()=>window.clearTimeout(B.current),[]);const fe=e=>{for(const i of["top","bottom"]){const u=q.current[i];if(!u)continue;window.clearTimeout(u.timer);const l=k.current[i];l&&(l.style.transform=u.from?`translateY(${-u.from*D}px)`:""),delete q.current[i]}ie({}),window.clearTimeout(B.current);const a=!window.matchMedia("(prefers-reduced-motion: reduce)").matches;ke(a),a&&(B.current=window.setTimeout(()=>ke(!1),240)),Le(e)},[re,xe]=c.useState(null),ce=c.useRef(null),Ue=c.useRef(void 0),Re=c.useRef(!1),gt=c.useRef(0),De=()=>{window.clearTimeout(Ue.current),ce.current=null,Re.current&&(Re.current=!1,gt.current=Date.now()),xe(null)},Ge=!!h||!!Z||!!Y||!!F;c.useEffect(()=>{(Ge||s)&&De()},[Ge,s]),c.useEffect(()=>()=>window.clearTimeout(Ue.current),[]);const $n=e=>{const a=e.target.closest("[data-rb-tip]");if(a===ce.current)return;const i=Re.current||Date.now()-gt.current<=Ao;if(De(),!a||Ge||s)return;ce.current=a;const u=()=>{if(ce.current!==a||!a.isConnected||!a.dataset.rbTip)return;const l=a.getBoundingClientRect();Re.current=!0,xe({text:a.dataset.rbTip,mid:l.top+l.height/2})};i?u():Ue.current=window.setTimeout(u,Oo)},Wn=new Set(r.flatMap(e=>e.items)),Oe=new Map,bt=e=>{const a=[];for(const u of n)(u.side??"top")===e&&!u.pinned&&a.push({kind:"item",id:u.id,item:u});if(e==="bottom")for(const u of b){const l=d.find(y=>y.id===u);l&&a.push({kind:"cmd",id:`cmd:${u}`,cmd:l})}for(const u of r)u.zone===e&&a.push({kind:"folder",id:u.id,folder:u});for(const u of a)Oe.set(u.id,u);return Zs(a.map(u=>u.id),e==="top"?o:m).map(u=>Oe.get(u)).filter(u=>!Wn.has(u.id))},U=bt("top"),te=bt("bottom"),vt=e=>e.items.reduce((a,i)=>a+(Oe.has(i)?1:0),0),Vn=n.filter(e=>e.side==="bottom"&&e.pinned),qn=n.filter(e=>e.side==="head"),Hn=n.filter(e=>e.side==="home"),D=(s?34:32)+rt;c.useLayoutEffect(()=>{const e=O.current;if(!e)return;const a=()=>{const u=getComputedStyle(e),l=(ue.current?.offsetHeight??0)+(K.current?.offsetHeight??0),y=e.clientHeight-parseFloat(u.paddingTop)-parseFloat(u.paddingBottom)-l-(V.current?.offsetHeight??0)-2*D-48;J(Math.max(2,Math.floor(y/D)))};a();const i=new ResizeObserver(a);return i.observe(e),K.current&&i.observe(K.current),()=>i.disconnect()},[s,D,n.length,r.length,b.length,M]);const wt=(e,a)=>e<=a?e:a+1,kt=wt(U.length,tn),Xe=wt(te.length,nn);let ne=kt,le=Xe;if(M)M==="top"?ne=P:le=P;else if(ne+le>P)if(U.length===0)ne=0,le=P;else if(te.length===0)ne=P,le=0;else{const e=Math.floor(P/2);ne=Math.max(1,Math.min(kt,Math.max(e,P-Xe))),le=Math.max(1,Math.min(Xe,P-ne))}const xt=(e,a,i,u,l)=>{if(e.length<=a&&e.length<=l)return{shown:e,tail:[],start:0,max:0};const y=Math.max(0,a-1),T=e.length-y,he=Math.min(Math.max(0,u),T),Se=i?e.length-y-he:he;return{shown:e.slice(Se,Se+y),tail:[...e.slice(0,Se),...e.slice(Se+y)],start:Se,max:T}},Ze=xt(U,ne,!1,H.top,M==="top"?1/0:tn),Je=xt(te,le,!0,H.bottom,M==="bottom"?1/0:nn),yt=w.map(e=>n.find(a=>a.id===`space:${e}`)).filter(e=>!!e).slice(0,Us(v,P,ne,le,!!M)),Yn=(e,a)=>i=>{const u=k.current[e];if(!a.max||h||!i.deltaY||!u)return;window.clearTimeout(I.current);let l=q.current[e];l||(l=q.current[e]={px:a.start*D,from:a.start,timer:0},ie(T=>({...T,[e]:!0}))),window.clearTimeout(l.timer);const y=i.deltaMode?Math.sign(i.deltaY)*D:Math.max(-D,Math.min(D,i.deltaY));l.px=Math.max(0,Math.min(a.max*D,l.px+y)),u.style.transform=`translateY(${-l.px}px)`,l.timer=window.setTimeout(()=>Kn(e,a),120)},Kn=(e,a)=>{const i=q.current[e],u=k.current[e];if(!i||!u)return;const l=i.at??i.from,y=i.px-l*D;let T=Math.round(i.px/D);T===l&&y&&(T+=Math.sign(y)),St(e,a,Math.max(0,Math.min(a.max,T)))},St=(e,a,i)=>{const u=k.current[e];if(!u)return;let l=q.current[e];l||(l=q.current[e]={px:a.start*D,from:a.start,timer:0},ie(y=>({...y,[e]:!0}))),window.clearTimeout(l.timer),l.px=i*D,l.at=i,u.style.transform=i?`translateY(${-i*D}px)`:"",l.timer=window.setTimeout(()=>{delete q.current[e],ie(y=>({...y,[e]:!1})),ve(y=>({...y,[e]:e==="top"?i:a.max-i}))},240)};c.useEffect(()=>()=>window.clearTimeout(I.current),[]);const jt=c.useRef(()=>{});jt.current=()=>{if(!h)for(const[e,a]of[["top",Ze],["bottom",Je]])H[e]&&(a.max&&k.current[e]?St(e,a,e==="top"?0:a.max):ve(i=>({...i,[e]:0})))};const Ct=!!(H.top||H.bottom||we.top||we.bottom);c.useEffect(()=>{if(!Ct)return;const e=()=>{Kt()&&(window.clearTimeout(I.current),I.current=window.setTimeout(()=>{Kt()&&jt.current()},Fo))},a=i=>{const u=i.target;i.button!==0||u?.closest?.(".rb-menu, .rb-iconpick, [data-rb-overlay]")||u&&(O.current?.contains(u)||u.closest(".rb-fly"))&&!u.closest(".rb-btn:not(.rb-more, .rb-plus, .rb-toggle, .rb-folder)")||e()};return window.addEventListener("click",a,!0),window.addEventListener("blur",e),()=>{window.removeEventListener("click",a,!0),window.removeEventListener("blur",e)}},[Ct]);const se=F?.folderId?r.find(e=>e.id===F.folderId):void 0,Qe=()=>{ee.current&&(window.clearTimeout(ee.current),ee.current=null)},Et=()=>{Qe(),ee.current=window.setTimeout(()=>{h||R(null)},150)},Nt=(e,a,i,u)=>{Qe(),R({key:e,zone:a,folderId:u,top:i.getBoundingClientRect().top})};c.useLayoutEffect(()=>{const e=Q.current;if(!e||!F)return;const a=e.getBoundingClientRect().bottom-(window.innerHeight-8);a>0&&R({...F,top:Math.max(8,F.top-a)})},[F?.key,se?.items.length]);const It=!!F;c.useEffect(()=>{if(!It)return;const e=i=>{i.key==="Escape"&&R(null)},a=i=>{const u=i.target;!Q.current?.contains(u)&&!O.current?.contains(u)&&R(null)};return window.addEventListener("keydown",e),window.addEventListener("mousedown",a),()=>{window.removeEventListener("keydown",e),window.removeEventListener("mousedown",a)}},[It]),c.useEffect(()=>{if(!M)return;const e=()=>fe(null),a=u=>{if(u.button!==0)return;const l=u.target;l?.closest?.(".rb-menu, .rb-iconpick, .rb-fly, [data-rb-overlay]")||l&&O.current?.contains(l)&&l.closest("button")||e()},i=u=>{u.key==="Escape"&&e()};return window.addEventListener("pointerdown",a,!0),window.addEventListener("keydown",i),window.addEventListener("blur",e),()=>{window.removeEventListener("pointerdown",a,!0),window.removeEventListener("keydown",i),window.removeEventListener("blur",e)}},[M,D]);const et=c.useRef(new Map),Tt=c.useRef(()=>{});c.useEffect(()=>{Tt.current=e=>{const a=U[e];if(a){if(a.kind==="folder"){const i=et.current.get(a.id)??O.current;i&&Nt(a.id,"top",i,a.id);return}R(null),a.kind==="cmd"?a.cmd.run():a.id.startsWith("space:")?qe(a.id.slice(6)):a.item.onClick?.()}}});const Mt=Math.min(9,U.length);c.useEffect(()=>{for(let e=1;e<=9;e++){if(e>Mt){Ht(`space-slot-${e}`);continue}Gs({id:`space-slot-${e}`,title:()=>Xs("lcl.ribbon.switchSpace",{n:e}),keywords:`space switch ${e} 切换 空间`,hotkey:`mod+${e}`,run:()=>Tt.current(e-1)})}return()=>{for(let e=1;e<=9;e++)Ht(`space-slot-${e}`)}},[Mt]);const Lt=(e,a,i,u)=>{e.dataTransfer.effectAllowed="move";const l=e.currentTarget.getBoundingClientRect();e.dataTransfer.setDragImage(e.currentTarget,e.clientX-l.left,e.clientY-l.top),x({id:a,zone:i,from:u})},Ae=()=>{me.current=null,x(null),S(null),z(null),L(null)},ye=h&&Fe()?.openSpace?an(h.id):null,Rt=c.useRef({dropped:!1,gone:!1}),Un=(e,a)=>{const i=O.current?.getBoundingClientRect();if(!i)return!0;const u=y=>e>=y.left-_e&&e<=y.right+_e&&a>=y.top-_e&&a<=y.bottom+_e,l=Q.current?.getBoundingClientRect();return u(i)||!!l&&u(l)},Dt=e=>{const a=e.target;return!!a&&(!!O.current?.contains(a)||!!Q.current?.contains(a))};c.useLayoutEffect(()=>{if(!ye)return;const e={dropped:!1,gone:!1};Rt.current=e;const a=l=>{e.gone=!1,!Dt(l)&&(l.preventDefault(),l.stopPropagation(),l.dataTransfer&&(l.dataTransfer.dropEffect="move"),z(y=>y&&null),L(y=>y&&null))},i=l=>{e.dropped=!0,!Dt(l)&&(l.preventDefault(),l.stopPropagation(),Un(l.clientX,l.clientY)||Fe()?.openSpace?.(ye,{screenX:l.screenX,screenY:l.screenY}))},u=l=>{(l.clientX<=0||l.clientY<=0||l.clientX>=window.innerWidth||l.clientY>=window.innerHeight)&&(e.gone=!0)};return window.addEventListener("dragover",a,!0),window.addEventListener("drop",i,!0),window.addEventListener("dragleave",u,!0),()=>{window.removeEventListener("dragover",a,!0),window.removeEventListener("drop",i,!0),window.removeEventListener("dragleave",u,!0)}},[ye]);const Ot=e=>{const a=Rt.current;if(ye&&!a.dropped){const{clientX:i,clientY:u}=e,l=i<0||u<0||i>window.innerWidth||u>window.innerHeight,y=!l&&/^(IFRAME|WEBVIEW)$/.test(document.elementFromPoint(i,u)?.tagName??"");(a.gone||l||y)&&Fe()?.openSpace?.(ye,e.screenX||e.screenY?{screenX:e.screenX,screenY:e.screenY}:void 0)}Ae()},pe=(e,a,i)=>{a&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move",i?.())},At=(e,a)=>{const i=e.querySelectorAll(".rb-slot"),u=i[0]?.getBoundingClientRect().top??0,l=i.length>1?i[1].getBoundingClientRect().top-u:0;return{top:u,pitch:l,grabDy:a??l/2}},Gn=(e,a,i)=>na(a,i,me.current??At(e)),Xn=(e,a)=>{const i=e.parentElement;i&&(me.current=At(i,a-e.getBoundingClientRect().top))},tt=(e,a)=>{const i=h;if(Ae(),!i||i.zone!==e||i.id===a)return;i.from&&g().moveOutOfFolder(i.id);const u=e==="top"?g().order:g().bottomOrder,l=Js(u,(e==="top"?U:te).map(T=>T.id)),y=a?l.indexOf(a):-1;g().setZoneOrder(e,ze(l,i.id,y>=0?y:l.length))},nt=(e,a)=>{const i=h;if(Ae(),!(!i||i.zone!==e.zone||i.id.startsWith("folder:"))){if(i.from===e.id)g().setFolderItems(e.id,ze(e.items,i.id,a??e.items.length));else if(g().moveIntoFolder(e.id,i.id),i.from||g().setZoneOrder(e.zone,Ut(e.zone==="top"?g().order:g().bottomOrder,(e.zone==="top"?U:te).map(u=>u.id),i.id)),a!==void 0){const u=g().folders.find(l=>l.id===e.id);u&&g().setFolderItems(e.id,ze(u.items,i.id,a))}}},Pt=ot.prompt??((e,a)=>Promise.resolve(window.prompt(e,a))),Zn=e=>{Pt(p("lcl.ribbon.newFolder"),p("lcl.ribbon.folderDefaultName")).then(a=>{const i=a?.trim();i&&g().addFolder(e,i)})},Pe=e=>[...e==="top"&&ot.newSpace?[{label:p("lcl.ribbon.newSpace"),onClick:ot.newSpace}]:[],...e==="bottom"?[{label:p("lcl.ribbon.addCommand"),onClick:()=>Qs(a=>g().addCommandItem(a))}]:[],{label:p(e==="top"?"lcl.ribbon.newFolderSpaces":"lcl.ribbon.newFolderCommands"),onClick:()=>Zn(e)}],Jn=e=>a=>{a.defaultPrevented||(a.preventDefault(),A({x:a.clientX,y:a.clientY,entries:Pe(e)}))},Qn=e=>{e.defaultPrevented||(e.preventDefault(),A({x:e.clientX,y:e.clientY,entries:[...Pe("top"),...Pe("bottom")]}))},Ft=(e,a,i,u)=>{A(null),W({x:e,y:a,current:i,apply:u})},es=e=>a=>{a.preventDefault(),a.stopPropagation();const i=a.clientX,u=a.clientY;A({x:i,y:u,entries:[{label:p("lcl.ribbon.changeIcon"),onClick:()=>Ft(i,u,e.icon,l=>g().setFolderIcon(e.id,l))},{label:p("lcl.ribbon.rename"),onClick:()=>{Pt(p("lcl.ribbon.renameFolder"),e.name).then(l=>{const y=l?.trim();y&&g().renameFolder(e.id,y)})}},{label:p("lcl.ribbon.dissolveFolder"),onClick:()=>g().removeFolder(e.id)}]})},zt=e=>{const a=an(e.id),i=Fe()?.openSpace;return[...a&&i?[{label:p("lcl.ribbon.openInNewWindow"),onClick:()=>i(a)}]:[],...e.menu?.()??[]]},_t=e=>a=>{if(a.defaultPrevented)return;const i=zt(e);i.length&&(a.preventDefault(),a.stopPropagation(),A({x:a.clientX,y:a.clientY,entries:i}))},Bt=e=>a=>{a.preventDefault(),a.stopPropagation();const i=a.clientX,u=a.clientY;A({x:i,y:u,entries:[{label:p("lcl.ribbon.setIcon"),onClick:()=>Ft(i,u,g().commandIcons[e],l=>g().setCommandIcon(e,l))},{label:p("lcl.ribbon.removeCommand"),onClick:()=>g().removeCommandItem(e)}]})},ts=e=>{const a=it(e.icon)??Mn;return t.jsxs("button",{ref:i=>{i?et.current.set(e.id,i):et.current.delete(e.id)},className:`rb-btn rb-folder${j===e.id?" drag-into":""}`,"aria-label":`${e.name} (${vt(e)})`,onMouseEnter:i=>Nt(e.id,e.zone,i.currentTarget,e.id),onMouseLeave:Et,onContextMenu:es(e),onDragOver:i=>pe(i,!!h&&h.zone===e.zone&&!h.id.startsWith("folder:"),()=>{z(null),L(e.id)}),onDragLeave:()=>{j===e.id&&L(null)},onDrop:i=>{!h||h.id.startsWith("folder:")||(i.preventDefault(),i.stopPropagation(),nt(e))},children:[t.jsx(a,{size:18}),s&&t.jsx("span",{className:"rb-label",children:e.name})]})},$t=e=>{const a=M===e,i=p(a?"lcl.ribbon.less":"lcl.ribbon.more"),u=a?e==="top"?yo:yn:ta;return t.jsxs("button",{className:`rb-btn rb-more${a?" is-open":""}${j===`more:${e}`?" drag-into":""}`,"aria-label":i,"aria-expanded":a,"data-rb-tip":s?void 0:i,onClick:()=>fe(a?null:e),onDragOver:l=>pe(l,!!h&&h.zone===e,()=>{z(null),L(`more:${e}`)}),onDragLeave:()=>{j===`more:${e}`&&L(null)},onDrop:l=>{l.preventDefault(),l.stopPropagation(),tt(e,e==="bottom"?te[0]?.id??null:null)},children:[t.jsx(u,{size:18}),s&&t.jsx("span",{className:"rb-label",children:i})]})},st=(e,a)=>{const i=a??s;return e.kind==="item"?t.jsx(Ne,{item:e.item,expanded:i}):e.kind==="cmd"?t.jsx(Po,{cmd:e.cmd,expanded:i,overrideIcon:it(f[e.cmd.id])}):ts(e.folder)},ns=(e,a,i,u,l,y)=>{const T=u?u.indexOf(e.id):i;return t.jsxs("div",{"data-id":e.id,className:`rb-slot${h?.id===e.id?" dragging":""}${l?" drag-over":""}`,style:T!==i?{transform:`translateY(${(T-i)*D}px)`}:void 0,draggable:!0,onDragStart:he=>{Xn(he.currentTarget,he.clientY),Lt(he,e.id,a,null)},onDragEnd:Ot,onContextMenu:e.kind==="cmd"?Bt(e.cmd.id):e.kind==="item"?_t(e.item):void 0,children:[st(e),a==="top"&&s&&sn(y)&&t.jsx("span",{className:"rb-key",children:sn(y)})]},e.id)},at=e=>p(e==="top"?"lcl.ribbon.addSpaceOrFolder":"lcl.ribbon.addCommand"),Wt=e=>t.jsxs("button",{className:"rb-btn rb-plus","aria-label":at(e),"data-rb-tip":s?void 0:at(e),onClick:a=>{const i=a.currentTarget.getBoundingClientRect();A({x:i.right+6,y:i.top,entries:Pe(e)})},children:[t.jsx(ea,{size:16}),s&&t.jsx("span",{className:"rb-label",children:at(e)})]}),Vt=(e,a)=>{const i=a.shown.map(l=>l.id),u=h&&E?.zone===e&&i.includes(h.id)?ze(i,h.id,E.index):null;return t.jsxs("div",{className:`rb-group rb-${e}`,onContextMenu:Jn(e),onWheel:Yn(e,a),onDragOver:l=>{const y=Gn(l.currentTarget,l.clientY,i.length);pe(l,!!h&&h.zone===e,()=>{L(null),z(T=>T?.zone===e&&T.index===y?T:{zone:e,index:y})})},onDrop:l=>{l.preventDefault(),l.stopPropagation(),tt(e,(E?.zone===e?i[E.index]:null)??null)},children:[e==="bottom"&&t.jsxs(t.Fragment,{children:[Wt(e),(a.tail.length>0||M===e)&&$t(e)]}),t.jsx("div",{className:"rb-strip",style:{height:Math.max(0,a.shown.length*D-rt)},children:t.jsx("div",{ref:l=>{k.current[e]=l},className:"rb-strip-in",style:a.start?{transform:`translateY(${-a.start*D}px)`}:void 0,children:(e==="top"?U:te).map((l,y)=>{const T=y-a.start;return T>=0&&T<a.shown.length?ns(l,e,T,u,!u&&E?.zone===e&&E.index===T,y):t.jsx("div",{className:"rb-cell","aria-hidden":!0,inert:!0,style:{height:D-rt},children:(we[e]||_)&&st(l)},l.id)})})}),e==="top"&&t.jsxs(t.Fragment,{children:[(a.tail.length>0||M===e)&&$t(e),Wt(e)]})]})},ss=(e,a,i,u)=>t.jsx("div",{"data-id":e.id,className:`rb-fly-row${h?.id===e.id?" dragging":""}${N===e.id&&h?.id!==e.id?` drag-over${h&&u.indexOf(h.id)>=0&&u.indexOf(h.id)<i?" below":""}`:""}`,draggable:!0,onDragStart:l=>{l.stopPropagation(),Lt(l,e.id,a.zone,a.id)},onDragOver:l=>pe(l,!!h&&h.zone===a.zone&&h.id!==e.id&&!h.id.startsWith("folder:"),()=>S(e.id)),onDragLeave:()=>{N===e.id&&S(null)},onDrop:l=>{l.preventDefault(),l.stopPropagation(),nt(a,i)},onDragEnd:Ot,onContextMenu:e.kind==="cmd"?Bt(e.cmd.id):l=>{l.preventDefault(),l.stopPropagation(),A({x:l.clientX,y:l.clientY,entries:[...e.kind==="item"?zt(e.item):[],{label:p("lcl.ribbon.moveOut"),onClick:()=>{g().moveOutOfFolder(e.id);const y=a.zone==="top"?g().order:g().bottomOrder;g().setZoneOrder(a.zone,[...Ut(y,(a.zone==="top"?U:te).map(T=>T.id),e.id),e.id])}}]})},children:st(e,!0)},e.id);return t.jsxs("div",{ref:O,className:`rb${s?" rb-expanded":""}${h?" rb-dragging":""}${M?` rb-open-${M}`:""}`,onContextMenu:Qn,onMouseOver:$n,onMouseLeave:De,onMouseDownCapture:e=>{De(),ce.current=e.target.closest("[data-rb-tip]")},onDragOver:e=>pe(e,!!h),onDrop:e=>{if(!h)return;e.preventDefault();const a=h.zone,i=E?.zone===a?(a==="top"?Ze:Je).shown[E.index]?.id:void 0;if(i===void 0){Ae();return}tt(a,i)},children:[t.jsxs("div",{ref:ue,className:"rb-head",children:[t.jsxs("button",{className:"rb-btn rb-toggle","aria-label":p(s?"lcl.ribbon.iconsOnly":"lcl.ribbon.showLabels"),"aria-expanded":s,"data-rb-tip":s?void 0:p("lcl.ribbon.showLabels"),onClick:()=>g().toggleExpanded(),children:[s?t.jsx(jo,{size:18}):t.jsx(Eo,{size:18}),s&&t.jsx("span",{className:"rb-label",children:p("lcl.ribbon.iconsOnly")})]}),qn.map(e=>t.jsx(Ne,{item:e,expanded:s},e.id))]}),t.jsx("div",{ref:V,className:"rb-group rb-home",children:Hn.map(e=>t.jsx(Ne,{item:e,expanded:s},e.id))}),M!=="bottom"&&Vt("top",Ze),yt.length>0&&t.jsx("div",{className:"rb-group rb-recent",role:"group","aria-label":p("lcl.ribbon.recentSpaces"),children:yt.map(e=>t.jsx("div",{className:"rb-recent-slot","data-recent-id":e.id,onContextMenu:_t(e),children:t.jsx(Ne,{item:e,expanded:s})},e.id))}),M!=="top"&&Vt("bottom",Je),t.jsx("div",{ref:K,className:"rb-group rb-pinned",children:Vn.map(e=>t.jsx(Ne,{item:e,expanded:s},e.id))}),F&&se&&t.jsxs("div",{ref:Q,className:"rb-fly",style:(()=>{const e=dt(O.current);return{left:((O.current?.getBoundingClientRect().right??44)+4)/e,top:F.top/e}})(),onMouseEnter:Qe,onMouseLeave:Et,onDragOver:e=>pe(e,!!h&&h.zone===F.zone&&!h.id.startsWith("folder:")&&e.target===e.currentTarget),onDrop:e=>{e.target===e.currentTarget&&(e.preventDefault(),nt(se))},children:[t.jsx("div",{className:"rb-fly-head",children:se.name}),vt(se)===0&&t.jsx("div",{className:"rb-fly-empty",children:p("lcl.ribbon.folderEmpty")}),se.items.map((e,a)=>{const i=Oe.get(e);return i?ss(i,se,a,se.items):null})]}),re&&!s&&t.jsx("div",{className:"rb-tip",role:"tooltip",style:(()=>{const e=dt(O.current);return{left:((O.current?.getBoundingClientRect().right??44)+6)/e,top:re.mid/e}})(),children:re.text}),Z&&t.jsx("div",{className:"rb-menu-backdrop",onMouseDown:()=>A(null),onContextMenu:e=>{e.preventDefault(),A(null)},children:t.jsx(Yt,{className:"rb-menu",x:Z.x,y:Z.y,onMouseDown:e=>e.stopPropagation(),children:Z.entries.map((e,a)=>t.jsx("button",{onClick:()=>{A(null),e.onClick()},children:e.label},a))})}),Y&&t.jsx("div",{className:"rb-menu-backdrop",onMouseDown:()=>W(null),onContextMenu:e=>{e.preventDefault(),W(null)},children:t.jsxs(Yt,{className:"rb-iconpick",x:Y.x,y:Y.y,onMouseDown:e=>e.stopPropagation(),children:[t.jsx("button",{className:"rb-iconpick-reset",onClick:()=>{const e=Y.apply;W(null),e("")},children:p("lcl.ribbon.defaultIcon")}),t.jsx("div",{className:"rb-iconpick-grid",children:Do.map(e=>{const a=it(e);return t.jsx("button",{className:`rb-iconpick-btn${Y.current===e?" on":""}`,title:e,onClick:()=>{const i=Y.apply;W(null),i(e)},children:t.jsx(a,{size:17})},e)})})]})})]})}const on=8,_o=n=>n.dataset.lclShift==="end"?on:n.dataset.lclShift==="start"?-on:0;function Bo(){const n=Array.from(document.querySelectorAll(".dv-groupview")).map(o=>({r:o.getBoundingClientRect(),papery:!o.querySelector(".wb-tab--icon")})).filter(o=>o.r.width>0&&o.r.height>0),s=3;for(const o of document.querySelectorAll(".dv-sash")){const m=!!o.closest(".dv-split-view-container.dv-horizontal"),r=o.getBoundingClientRect();if(!r.width&&!r.height)continue;const b=m?r.left+r.width/2:r.top+r.height/2,[f,v]=m?[r.top,r.bottom]:[r.left,r.right];let w=null,d=null;for(const g of n){const[h,x,N,S]=m?[g.r.left,g.r.right,g.r.top,g.r.bottom]:[g.r.top,g.r.bottom,g.r.left,g.r.right];S<=f||N>=v||(w===null&&Math.abs(x-b)<=s&&(w=g.papery),d===null&&Math.abs(h-b)<=s&&(d=g.papery))}const p=w===!1&&d===!0?"end":w===!0&&d===!1?"start":"";p?o.dataset.lclShift=p:delete o.dataset.lclShift}}function $o(){const n=document.createElement("div");n.className="lcl-sash-tick",document.body.appendChild(n);let s=null,o=0;const m=(h,x)=>{const N=!!h.closest(".dv-split-view-container.dv-horizontal"),S=h.getBoundingClientRect(),E=_o(h);cancelAnimationFrame(o),o=requestAnimationFrame(()=>{n.classList.add("show"),n.classList.toggle("h",!N);const z=dt(n);N?(n.style.left=`${(S.left+S.width/2+E)/z}px`,n.style.top=`${Math.min(Math.max(x.clientY,S.top),S.bottom)/z}px`):(n.style.left=`${Math.min(Math.max(x.clientX,S.left),S.right)/z}px`,n.style.top=`${(S.top+S.height/2+E)/z}px`)})},r=h=>h instanceof Element?h.closest(".dv-sash"):null,b=h=>{const x=s instanceof HTMLElement?s:r(h.target);x?m(x,h):n.classList.contains("show")&&(cancelAnimationFrame(o),n.classList.remove("show"))},f=h=>{s=r(h.target)},v=h=>{s&&(s=null,r(h.target)||(cancelAnimationFrame(o),n.classList.remove("show")))};let w=0;const d=()=>{window.clearTimeout(w),w=window.setTimeout(Bo,120)},p=h=>h instanceof Element&&(h.matches(".dv-sash, .dv-view, .dv-groupview")||!!h.querySelector(".dv-sash, .dv-groupview")),g=new MutationObserver(h=>{for(const x of h)for(const N of[...x.addedNodes,...x.removedNodes])if(p(N)){d();return}});return g.observe(document.body,{childList:!0,subtree:!0}),d(),document.addEventListener("pointermove",b,{passive:!0}),document.addEventListener("pointerdown",f,{passive:!0}),document.addEventListener("pointerup",v,{passive:!0}),()=>{g.disconnect(),window.clearTimeout(w),cancelAnimationFrame(o),document.removeEventListener("pointermove",b),document.removeEventListener("pointerdown",f),document.removeEventListener("pointerup",v),n.remove()}}const Dn=({dark:n,soft:s,buildDefault:o,header:m,noRibbon:r,footer:b})=>(c.useEffect(()=>ia(),[]),c.useEffect(()=>$o(),[]),Sn==="mobile"?t.jsxs(t.Fragment,{children:[t.jsx(ra,{dark:n,soft:s,buildDefault:o}),t.jsx(qt,{})]}):t.jsxs("div",{className:"shell",children:[m,t.jsxs("div",{className:"shell-top",children:[!r&&t.jsx(zo,{}),t.jsxs("div",{className:"shell-work",children:[t.jsx(ds,{dark:n,soft:s,buildDefault:o}),b]})]}),t.jsx(qt,{})]})),Wo=({buildDefault:n,direct:s})=>{const o=ae(j=>j.spaces),m=ae(j=>j.activeSpaceId),[,r]=c.useReducer(j=>j+1,0);c.useEffect(()=>Me(r),[]);const b=o.filter(He),f=b.find(j=>j.id===m),v=Ee(j=>j.mainLeaves.find(L=>L.id===j.activeMainId)),[w,d]=c.useState(!1),{t:p}=xn(),g=f?.icon,h=s?Ie(s.view.type):void 0,x=c.useRef(!1);h&&(x.current=!0),c.useEffect(()=>{s&&x.current&&!h&&window.tangu?.closeSelf?.()},[s,h]);const N=s?.title||(h?be(h.displayName):f?be(f.mini?.name??f.name):"Mini Panel");c.useEffect(()=>{const j=Ee.getState();if(j.setDefaultBuilder(n),!s)if(f)j.getActiveLeaf()?.type!==f.mini.view.type&&j.resetLayout();else{const L=b.find(F=>F.id==="tangu")??b[0];L&&ca(L.id),j.resetLayout()}},[o,m,f,n,s]),c.useEffect(()=>{const j=L=>{L.key==="Escape"&&d(!1)};return window.addEventListener("keydown",j),()=>window.removeEventListener("keydown",j)},[]);const S=v&&(s?v.type===s.view.type:f&&v.type===f.mini.view.type)?Ee.getState().getActiveLeaf():null,E=S?Ie(S.type):null,z=()=>{if(s){We({type:s.mainView.type,params:{...s.mainView.params,...Ee.getState().getActiveLeaf()?.params}});return}const j=ft();j?.mini&&We({spaceId:j.id,type:j.mini.mainView.type,params:{...j.mini.mainView.params,...Ee.getState().getActiveLeaf()?.params}})};return t.jsxs("div",{className:"mini-card-shell","data-space":s?"direct":f?.id,children:[t.jsxs("header",{className:"mini-card-chrome",children:[t.jsxs("button",{className:"mini-card-space","aria-label":p("lcl.mini.switchSpace"),"aria-expanded":w,disabled:!!s||b.length<2,onClick:()=>d(!w),children:[!s&&g&&t.jsx(g,{size:15}),t.jsx("span",{children:N}),!s&&b.length>1&&t.jsx(yn,{size:12})]}),t.jsx("div",{className:"mini-card-drag-title"}),t.jsx("button",{className:"mini-card-action","aria-label":p("lcl.mini.showMain"),title:p("lcl.mini.showMain"),disabled:!s&&!f,onClick:z,children:t.jsx(la,{size:15})}),t.jsx("button",{className:"mini-card-action mini-card-close","aria-label":p("lcl.mini.close"),onClick:()=>window.tangu?.closeSelf?.(),children:t.jsx(jn,{size:15})})]}),t.jsx("main",{className:"mini-card-main",children:S&&E?t.jsx("div",{className:"mini-panel-view","data-view":S.type,children:t.jsx(Cn,{children:t.jsx(c.Suspense,{fallback:null,children:E.factory({leaf:S,params:S.params})})})},`${S.id}:${S.type}`):t.jsx("div",{className:"mini-panel-empty",children:p("lcl.mini.empty")})}),w&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"mini-card-dismiss","aria-label":p("lcl.mini.closeMenu"),onClick:()=>d(!1)}),t.jsx("section",{className:"mini-card-popover","aria-label":p("lcl.mini.switchSpace"),children:t.jsx("div",{className:"mini-card-popover-list",children:b.map(j=>{const L=j.icon;return t.jsxs("button",{className:`mini-card-row${j.id===m?" active":""}`,onClick:()=>{qe(j.id),d(!1)},children:[L&&t.jsx(L,{size:15}),t.jsx("span",{className:"mini-card-row-label",children:be(j.mini.name??j.name)})]},j.id)})})})]})]})};function Vo(){return t.jsx("div",{className:"mac-titlebar"})}const ct=9e3,qo=5*1024*1024;function ut(n){return typeof n=="string"?n.replace(/\bBearer\s+[A-Za-z0-9._~+\/-]+=*/gi,"Bearer [redacted]").replace(/\b(sk-[a-zA-Z0-9_-]{12,})\b/g,"[redacted]").replace(/((?:["']?)(?:api[_-]?key|access[_-]?token|refresh[_-]?token|token|password|secret|authorization|cookie)(?:["']?)\s*[:=]\s*["']?)([^\s,"';&}]+)/gi,"$1[redacted]"):Array.isArray(n)?n.map(ut):n&&typeof n=="object"?Object.fromEntries(Object.entries(n).map(([s,o])=>[s,/^(?:token|.*api[_-]?key|access[_-]?token|refresh[_-]?token|password|secret|authorization|cookie|set-cookie)$/i.test(s)?"[redacted]":ut(o)])):n}async function Ho(n,s,o){const m=await us(n,s,o),r=JSON.stringify(ut({...m,feedbackSelection:o}),null,2);return{json:r,filename:`tangu-feedback-${s?.id.slice(0,8)||"app"}-${new Date().toISOString().slice(0,10)}.json`,bytes:new TextEncoder().encode(r).byteLength,missing:Object.entries(m.sources).filter(([,b])=>b!=="included").map(([b])=>b),truncated:!!m.messagesTruncated||!!m.activityLogTruncated}}mt({"feedback.subtitle":{zh:"告诉我们哪里可以做得更好。",en:"Tell us what could work better."},"feedback.kind":{zh:"反馈类型",en:"Feedback type"},"feedback.bug":{zh:"遇到问题",en:"Report a problem"},"feedback.idea":{zh:"功能建议",en:"Suggest a feature"},"feedback.other":{zh:"其他反馈",en:"Something else"},"feedback.description":{zh:"具体发生了什么?",en:"What happened?"},"feedback.bugPlaceholder":{zh:`你当时在做什么?预期的结果是什么,实际又发生了什么?
3
- 如果可以,请写下重现步骤。`,en:`What were you doing? What did you expect, and what happened instead?
4
- Include steps to reproduce it if you can.`},"feedback.ideaPlaceholder":{zh:"你想完成什么?哪项改进会对你有帮助?",en:"What are you trying to do? What change would help?"},"feedback.otherPlaceholder":{zh:"分享你的使用体验或想法……",en:"Share your experience or thoughts…"},"feedback.context":{zh:"附带诊断信息",en:"Include diagnostic information"},"feedback.diagnostics":{zh:"应用与运行日志",en:"App and runtime logs"},"feedback.diagnosticsHint":{zh:"版本、界面状态、错误、运行时间线与用量;进程日志可能涉及其他会话。",en:"Version, interface state, errors, run timeline and usage. Process logs may include other sessions."},"feedback.conversation":{zh:"当前会话内容",en:"Current conversation"},"feedback.conversationHint":{zh:"最多 500 条消息,包含工具输入与输出。",en:"Up to 500 messages, including tool inputs and outputs."},"feedback.activity":{zh:"近期活动记录",en:"Recent activity"},"feedback.activityHint":{zh:"近 2 天内最新 500 行,可能包含文件名与操作路径。",en:"The latest 500 lines from the last 2 days; may contain file names and paths."},"feedback.sessionContext":{zh:"关联会话:{name}",en:"Linked conversation: {name}"},"feedback.withoutSession":{zh:"未关联会话,仍可提交应用问题。",en:"No linked conversation. You can still report an app issue."},"feedback.privacy":{zh:"已过滤常见凭据字段。日志仍可能包含路径或内容片段,请按需选择并预览。",en:"Common credential fields are filtered. Logs may still contain paths or content excerpts; choose what to include and review the preview."},"feedback.preview":{zh:"预览附件",en:"Preview attachment"},"feedback.export":{zh:"导出日志文件",en:"Export log file"},"feedback.backToForm":{zh:"返回反馈",en:"Back to feedback"},"feedback.preparing":{zh:"正在准备诊断信息…",en:"Preparing diagnostics…"},"feedback.sending":{zh:"正在提交…",en:"Sending…"},"feedback.ready":{zh:"诊断附件已就绪 · {size}",en:"Diagnostics ready · {size}"},"feedback.textOnly":{zh:"仅提交反馈文字",en:"Only your feedback text will be sent"},"feedback.partial":{zh:"部分诊断来源不可用:{sources}。将提交已获取的内容。",en:"Some diagnostic sources are unavailable: {sources}. Available information will be sent."},"feedback.source.appVersion":{zh:"应用版本",en:"app version"},"feedback.source.messages":{zh:"会话内容",en:"conversation"},"feedback.source.agentConfig":{zh:"会话设置",en:"session settings"},"feedback.source.backendLogs":{zh:"运行输出",en:"runtime output"},"feedback.source.connection":{zh:"连接信息",en:"connection details"},"feedback.source.backendStatus":{zh:"引擎状态",en:"engine status"},"feedback.source.usage":{zh:"用量",en:"usage"},"feedback.source.timeline":{zh:"运行时间线",en:"run timeline"},"feedback.source.activityLog":{zh:"活动记录",en:"activity"},"feedback.truncated":{zh:"部分记录已达到数量上限,附件内已标记。",en:"Some records reached the collection limit; this is marked in the attachment."},"feedback.tooLarge":{zh:"附件超过 5 MB,请减少勾选的内容后再提交。",en:"The attachment exceeds 5 MB. Deselect some information before sending."},"feedback.prepareFailed":{zh:"诊断信息准备失败。请重试,或取消勾选后仅提交文字。",en:"Could not prepare diagnostics. Retry, or deselect the options to send text only."},"feedback.refresh":{zh:"重新收集",en:"Collect again"},"feedback.successTitle":{zh:"反馈已收到",en:"Feedback received"},"feedback.successHint":{zh:"感谢你帮助我们改进 Tangu。你可以在账户中心查看回复。",en:"Thanks for helping improve Tangu. You can view replies in your account center."},"feedback.ticket":{zh:"反馈编号:{id}",en:"Reference: {id}"},"feedback.viewFeedback":{zh:"查看我的反馈",en:"View my feedback"},"feedback.done":{zh:"完成",en:"Done"},"feedback.limit":{zh:"反馈内容不能超过 {max} 字。",en:"Feedback cannot exceed {max} characters."},"feedback.retry":{zh:"重试提交",en:"Try again"},"feedback.diagnosePrompt":{zh:`我在使用 Tangu 时遇到一个问题,想请你帮我诊断:
5
-
6
- {description}
7
-
8
- 请结合当前会话的上下文分析可能的原因,并给出排查步骤。`,en:`I ran into a problem while using Tangu and would like your help diagnosing it:
9
-
10
- {description}
11
-
12
- Using the context of this session, analyze the likely causes and suggest troubleshooting steps.`}});function On(n){C.getState().setPendingDraft(n),$.getState().openView("chat",{followActive:!0,reuseKey:"primary"},"main")}const An=({cfg:n,activeSession:s,onClose:o,surface:m="modal"})=>{const{t:r}=Te(),[b]=c.useState(()=>({cfg:n,session:s})),f=C(k=>k.feedbackDraft),[v,w]=c.useState("bug"),[d,p]=c.useState(!0),[g,h]=c.useState(!1),[x,N]=c.useState(!1),[S,E]=c.useState(0),[z,j]=c.useState(null),[L,F]=c.useState(!1),[R,Z]=c.useState(!1),[A,Y]=c.useState(null),[W,P]=c.useState(""),J=c.useRef(null),O=c.useRef(!1),ue=c.useRef(o);ue.current=o;const V=d||g||x,K=`${d}:${g}:${x}:${S}`,Q=z?.key===K?z:null,ee=V&&!Q,I=V?Q?.report:void 0,me=!!I&&I.bytes>qo,H=f.trim().length>ct,ve=!!f.trim()&&!H&&!R&&!A&&!ee&&!me&&(!V||!!I),M=()=>{O.current||ue.current()};c.useEffect(()=>{if(!V)return;let k=!0;return Ho(b.cfg,b.session,{diagnostics:d,conversation:g,activity:x}).then(_=>{k&&j({key:K,report:_})}).catch(()=>{k&&j({key:K,failed:!0})}),()=>{k=!1}},[b,d,g,x,S,K,V]),c.useEffect(()=>{const k=document.activeElement,_=requestAnimationFrame(()=>J.current?.querySelector("textarea")?.focus()),ke=B=>{if(B.key==="Escape"&&(B.preventDefault(),B.stopImmediatePropagation(),O.current||ue.current()),B.key==="Tab"){const fe=Array.from(J.current?.querySelectorAll('button:not(:disabled), textarea:not(:disabled), input:not(:disabled), [tabindex="0"]')||[]).filter(ce=>ce.getClientRects().length>0),re=fe[0],xe=fe[fe.length-1];if(!re){B.preventDefault(),J.current?.focus();return}B.shiftKey&&(document.activeElement===re||!J.current?.contains(document.activeElement))?(B.preventDefault(),xe.focus()):!B.shiftKey&&(document.activeElement===xe||!J.current?.contains(document.activeElement))&&(B.preventDefault(),re.focus())}};return document.addEventListener("keydown",ke,!0),()=>{cancelAnimationFrame(_),document.removeEventListener("keydown",ke,!0),k?.focus()}},[]);const Le=async()=>{if(!(!ve||O.current)){if(!window.tangu?.submitFeedback){P(r("feedback.errUnavailable"));return}O.current=!0,Z(!0),P("");try{const k=await window.tangu.submitFeedback({description:`[Tangu · ${r(`feedback.${v}`)}]
13
-
14
- ${f.trim()}`,...I?{sessionLogJson:I.json,sessionLogName:I.filename}:{}});k.ok?(Y(k),C.setState({feedbackDraft:""})):P(k.error==="attachment-too-large"?r("feedback.tooLarge"):r("feedback.errFail",{err:k.error==="not-logged-in"?r("feedback.errNotLoggedIn"):k.error||"Unknown error"}))}catch(k){P(r("feedback.errFail",{err:String(k?.message||k)}))}finally{O.current=!1,Z(!1)}}},we=()=>{if(!f.trim()||R)return;const k=r("feedback.diagnosePrompt",{description:f.trim()});window.tangu?.requestMainAction?window.tangu.requestMainAction("chat-draft",k):On(k),M()},ie=I?`${(I.bytes/1024).toFixed(1)} KB`:"",q=()=>{if(!I)return;const k=URL.createObjectURL(new Blob([I.json],{type:"application/json;charset=utf-8"})),_=document.createElement("a");_.href=k,_.download=I.filename,_.click(),setTimeout(()=>URL.revokeObjectURL(k),1e4)};return t.jsx("div",{className:m==="panel"?"feedback-panel-surface":"memv-modal feedback-overlay",onClick:k=>{m==="modal"&&k.target===k.currentTarget&&M()},children:t.jsxs("div",{ref:J,className:"modal feedback-modal",role:"dialog","aria-modal":"true","aria-labelledby":"feedback-title",tabIndex:-1,onKeyDown:k=>{(k.metaKey||k.ctrlKey)&&k.key==="Enter"&&!k.nativeEvent.isComposing&&(k.preventDefault(),Le())},children:[t.jsxs("div",{className:"modal-head feedback-head",children:[t.jsxs("div",{className:"feedback-heading",children:[t.jsx(Gt,{size:19}),t.jsxs("div",{children:[t.jsx("h2",{id:"feedback-title",children:r("feedback.title")}),t.jsx("p",{children:r("feedback.subtitle")})]})]}),t.jsx("button",{className:"icon-btn",onClick:M,disabled:R,"aria-label":r("settings.btn.cancel"),children:t.jsx(jn,{size:18})})]}),A?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"modal-body feedback-success",role:"status",children:[t.jsx("span",{className:"feedback-success-icon",children:t.jsx(da,{size:28})}),t.jsx("h3",{children:r("feedback.successTitle")}),t.jsx("p",{children:r("feedback.successHint")}),A.id&&t.jsx("code",{children:r("feedback.ticket",{id:A.id})}),A.attachmentSkipped&&t.jsx("p",{className:"feedback-warning",children:r("feedback.okNoLog")}),W&&t.jsx("p",{className:"feedback-warning",role:"alert",children:W})]}),t.jsxs("div",{className:"feedback-footer",children:[window.tangu?.openAccountCenter&&t.jsx("button",{className:"btn ghost",onClick:()=>{P(""),window.tangu.openAccountCenter("feedback").catch(()=>P(r("feedback.errUnavailable")))},children:r("feedback.viewFeedback")}),t.jsx("span",{className:"grow"}),t.jsx("button",{autoFocus:!0,className:"btn primary",onClick:M,children:r("feedback.done")})]})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"modal-body feedback-body",children:[L?t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn ghost sm feedback-back",onClick:()=>F(!1),children:[t.jsx(ua,{size:14}),r("feedback.backToForm")]}),t.jsxs("div",{className:"feedback-file",children:[t.jsx(lt,{size:15}),t.jsx("span",{children:I?.filename}),t.jsx("span",{children:ie})]}),t.jsx("pre",{className:"feedback-preview",tabIndex:0,children:I?.json})]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"feedback-kinds",role:"group","aria-label":r("feedback.kind"),children:[{id:"bug",Icon:ma},{id:"idea",Icon:fn},{id:"other",Icon:Gt}].map(({id:k,Icon:_})=>t.jsxs("button",{className:"btn ghost","aria-pressed":v===k,disabled:R,onClick:()=>w(k),children:[t.jsx(_,{size:15}),r(`feedback.${k}`)]},k))}),t.jsxs("div",{className:"feedback-description",children:[t.jsx("label",{htmlFor:"feedback-description",children:r(v==="bug"?"feedback.description":"feedback.label")}),t.jsx("textarea",{id:"feedback-description",value:f,onChange:k=>{C.setState({feedbackDraft:k.target.value}),P("")},placeholder:r(`feedback.${v}Placeholder`),disabled:R,"aria-invalid":H,"aria-describedby":"feedback-count"}),t.jsxs("span",{id:"feedback-count",className:H?"feedback-warning":"feedback-count",children:[f.trim().length.toLocaleString()," / ",ct.toLocaleString()]})]}),t.jsxs("section",{className:"feedback-context","aria-labelledby":"feedback-context-title",children:[t.jsxs("div",{className:"feedback-section-heading",children:[t.jsx("h3",{id:"feedback-context-title",children:r("feedback.context")}),t.jsx("code",{children:"/feedback"})]}),t.jsx("p",{className:"feedback-session",children:b.session?r("feedback.sessionContext",{name:b.session.title||b.session.id.slice(0,8)}):r("feedback.withoutSession")}),[{id:"diagnostics",checked:d,change:p,unavailable:!1},{id:"conversation",checked:g,change:h,unavailable:!b.session},{id:"activity",checked:x,change:N,unavailable:!window.tangu?.exportActivity}].map(k=>t.jsxs("label",{className:"feedback-option","data-disabled":k.unavailable||void 0,children:[t.jsx("input",{type:"checkbox",checked:k.checked,onChange:_=>k.change(_.target.checked),disabled:R||k.unavailable}),t.jsxs("span",{children:[t.jsx("strong",{children:r(`feedback.${k.id}`)}),t.jsx("small",{children:r(`feedback.${k.id}Hint`)})]})]},k.id))]}),t.jsxs("div",{className:"feedback-report-status",role:"status",children:[t.jsx("span",{children:ee?t.jsxs(t.Fragment,{children:[t.jsx(Xt,{size:13,className:"spin"}),r("feedback.preparing")]}):I?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:13}),r("feedback.ready",{size:ie})]}):r(V?"feedback.prepareFailed":"feedback.textOnly")}),t.jsxs("div",{children:[I&&t.jsx("button",{className:"btn ghost sm",onClick:()=>F(!0),disabled:R,children:r("feedback.preview")}),I&&t.jsxs("button",{className:"btn ghost sm",onClick:q,disabled:R,children:[t.jsx(fa,{size:13}),r("feedback.export")]}),V&&t.jsx("button",{className:"icon-btn",onClick:()=>E(k=>k+1),disabled:R||ee,"aria-label":r("feedback.refresh"),title:r("feedback.refresh"),children:t.jsx(pa,{size:13})})]})]}),!!I?.missing.length&&t.jsx("p",{className:"feedback-warning",children:r("feedback.partial",{sources:I.missing.map(k=>r(`feedback.source.${k}`)).join(", ")})}),I?.truncated&&t.jsx("p",{className:"feedback-note",children:r("feedback.truncated")}),V&&t.jsx("p",{className:"feedback-note",children:r("feedback.privacy")})]}),me&&t.jsx("p",{className:"feedback-warning",role:"alert",children:r("feedback.tooLarge")}),H&&t.jsx("p",{className:"feedback-warning",role:"alert",children:r("feedback.limit",{max:ct})}),W&&t.jsx("p",{className:"feedback-warning",role:"alert",children:W})]}),t.jsxs("div",{className:"feedback-footer",children:[t.jsxs("button",{className:"btn ghost feedback-diagnose",onClick:we,disabled:R||!f.trim(),title:r("feedback.diagnoseViaChatHint"),children:[t.jsx(ha,{size:15}),r("feedback.diagnoseViaChat")]}),t.jsx("span",{className:"grow"}),t.jsxs("button",{className:"btn primary",onClick:()=>{Le()},disabled:!ve,children:[R&&t.jsx(Xt,{size:14,className:"spin"}),r(R?"feedback.sending":W?"feedback.retry":"feedback.submit")]})]})]})]})})};function Be(n){return Array.from(n.dataTransfer?.types??[]).includes("Files")}function Ke(){let n=0;const s=w=>{if(w){document.body.setAttribute("data-file-drag","1");return}n=0,document.body.removeAttribute("data-file-drag")},o=w=>{!Be(w)||w.defaultPrevented||(w.preventDefault(),w.dataTransfer&&(w.dataTransfer.dropEffect="none"))},m=w=>{Be(w)&&!w.defaultPrevented&&w.preventDefault()},r=()=>s(!1),b=w=>{Be(w)&&(n++,s(!0))},f=w=>{Be(w)&&(n=Math.max(0,n-1),n||s(!1))},v=()=>s(!1);return document.addEventListener("dragover",o),document.addEventListener("drop",m),document.addEventListener("drop",r,!0),document.addEventListener("dragenter",b),document.addEventListener("dragleave",f),window.addEventListener("dragend",v),window.addEventListener("blur",v),()=>{document.removeEventListener("dragover",o),document.removeEventListener("drop",m),document.removeEventListener("drop",r,!0),document.removeEventListener("dragenter",b),document.removeEventListener("dragleave",f),window.removeEventListener("dragend",v),window.removeEventListener("blur",v),document.body.removeAttribute("data-file-drag")}}function Pn({target:n,onUnavailable:s}){const[,o]=c.useReducer(d=>d+1,0),[m,r]=c.useState(()=>({...n.params??{}})),b=c.useRef(m);b.current=m;const f=c.useRef(!1);c.useEffect(()=>Me(o),[]),c.useEffect(()=>r({...n.params??{}}),[n]);const v=Ie(n.type);v&&(f.current=!0),c.useEffect(()=>{f.current&&!v&&s?.()},[v,s]);const w=c.useMemo(()=>({id:`floating:${n.type}`,type:n.type,loc:"main",get params(){return b.current},setTitle:d=>{document.title=d},setParams:d=>r({...d}),close:()=>s?.()}),[n.type,s]);return v?t.jsx("div",{className:"floating-plugin-view","data-view":n.type,children:t.jsx(Cn,{children:t.jsx(c.Suspense,{fallback:null,children:v.factory({leaf:w,params:m})})})}):t.jsx("div",{className:"floating-panel-empty",children:"Loading panel…"})}const Yo=[[390,"iPhone"],[414,"Max"],[768,"iPad"]];function Ko({children:n}){const[s,o]=c.useState(390);return Sn!=="mobile"?t.jsx(t.Fragment,{children:n}):window.innerWidth<=820?t.jsx(t.Fragment,{children:n}):t.jsxs("div",{className:"sc-frame",children:[t.jsx("div",{className:"sc-bar",children:Yo.map(([m,r])=>t.jsxs("button",{className:`sc-size${s===m?" on":""}`,onClick:()=>o(m),children:[r," · ",m]},m))}),t.jsx("div",{className:"sc-device",style:{width:s},children:n})]})}function Uo(){ms(),c.useEffect(()=>Ke(),[]),c.useEffect(()=>{fs(),ao()},[]),c.useEffect(()=>window.tangu?.onMainAction?.((d,p)=>{d==="onboarding"&&C.getState().setOnboarding(!0),d==="dev-commands"&&ps(),d==="test-notification"&&hs(),d==="reset-layout"&&$.getState().resetLayout({undoable:!0}),d==="achievement-toast"&&ga(),d==="space-removed"&&p&&Ga(p),d==="chat-draft"&&p&&On(p),d==="chat-quote"&&p&&oo(p),d==="agents-changed"&&(C.getState().refreshAgents(),window.dispatchEvent(new Event("forsion:agents-changed"))),d==="skills-changed"&&(pt(ht()).then(g=>C.setState({skillsList:g})).catch(()=>{}),window.dispatchEvent(new Event("forsion:skills-changed"))),d==="open-agents"&&en(C.getState().defaultAgentSlug||""),d==="open-agent"&&p&&/^[a-z0-9][a-z0-9-]{0,63}$/.test(p)&&en(p)}),[]);const n=Ye(),s=ba();gs();const o=C(En(d=>({sessions:d.sessions,archivedSessions:d.archivedSessions,activeId:d.activeId,settingsOpen:d.settingsOpen,settingsTab:d.settingsTab,settingsSkillKey:d.settingsSkillKey,onboarding:d.onboarding,feedbackOpen:d.feedbackOpen,marketOpen:d.marketOpen,closeMarket:d.closeMarket,achievementsOpen:d.achievementsOpen,cfg:d.cfg,tr:d.tr,openSettings:d.openSettings,closeSettings:d.closeSettings,patchConfig:d.patchConfig,connect:d.connect,setOnboarding:d.setOnboarding,closeFeedback:d.closeFeedback}))),m=o.sessions.find(d=>d.id===o.activeId)||o.archivedSessions.find(d=>d.id===o.activeId)||null,r=c.useSyncExternalStore(va,Zt,Zt),[b,f]=c.useState(!1),v=c.useRef(o.onboarding);c.useEffect(()=>{const d=v.current;if(v.current=o.onboarding,d&&!o.onboarding){f(!0);const p=setTimeout(()=>f(!1),650);return()=>clearTimeout(p)}},[o.onboarding]);const w=o.settingsOpen||o.marketOpen||o.achievementsOpen||o.feedbackOpen||!!r||o.onboarding;return t.jsxs(Ko,{children:[t.jsx("div",{className:`shell-host${b?" main-enter":""}`,style:o.onboarding?{visibility:"hidden"}:void 0,children:t.jsx(Dn,{dark:s.mode==="dark",soft:!!Nn(s.lang)?.manifest.panelGap,buildDefault:pn,header:t.jsx(Vo,{}),footer:t.jsx(bs,{})})}),wa()&&t.jsx(hn,{}),t.jsx(ka,{}),t.jsx(xa,{}),t.jsx(Ln,{}),t.jsx(Ja,{}),t.jsx(ge,{children:o.settingsOpen&&t.jsx(Ce,{title:o.tr("settings.title"),onClose:()=>o.closeSettings(),children:t.jsx(gn,{open:!0,initialTab:o.settingsTab??void 0,initialSkillKey:o.settingsSkillKey??void 0,cfg:o.cfg,activeSession:m,themeLang:n.lang,themeSkin:n.skin,themeMode:n.mode,themeModePref:n.modePref,flatOn:n.flat,glassOn:n.glass,themeSeed:n.seed,onClose:()=>o.closeSettings(),onConfigChange:o.patchConfig,onThemeChange:(d,p,g)=>n.setTheme(d,p,n.bg,g),onFlatChange:n.setFlat,onGlassChange:d=>n.setGlass(d),onSeedChange:d=>n.setSeedValue(d),onReloadThemes:()=>n.reloadThemes(),onReconnect:d=>{o.connect({...o.cfg,...d||{}})},onRelaunchOnboarding:()=>{o.closeSettings();try{localStorage.removeItem(In)}catch{}o.setOnboarding(!0)}})},"settings")}),t.jsx(ge,{children:o.onboarding&&t.jsx(Qa.div,{style:{position:"fixed",inset:0,zIndex:60,background:"var(--bg)"},initial:{opacity:0},animate:{opacity:1},exit:{opacity:0,scale:1.06},transition:{duration:.45,ease:[.2,.8,.2,1]},children:t.jsx(ya,{themeLang:n.lang,themeSkin:n.skin,themeMode:n.mode,themeModePref:n.modePref,themeSeed:n.seed,onThemeChange:(d,p,g)=>n.setTheme(d,p,n.bg,g),onSeedChange:d=>n.setSeedValue(d),onReconnect:()=>{window.tangu?.getConfig().then(d=>{const p={backendUrl:d.backendUrl,token:d.token,modelId:d.modelId};C.setState({cfg:p,desktopMode:"managed"}),C.getState().connect(p)})},onFinish:()=>{o.setOnboarding(!1),window.tangu?.getConfig().then(d=>{const p={backendUrl:d.backendUrl,token:d.token,modelId:d.modelId};C.setState({cfg:p,homeDir:d.homeDir,defaultWsDir:d.defaultWorkspaceDir||""}),C.getState().connect(p)})}})},"onboarding")}),t.jsx(ge,{children:o.marketOpen&&t.jsx(Ce,{title:o.tr("market.title"),onClose:()=>o.closeMarket(),children:t.jsx(bn,{onClose:()=>o.closeMarket()})},"market")}),t.jsx(ge,{children:o.achievementsOpen&&t.jsx(Ce,{title:o.tr("achievements.title"),onClose:()=>C.getState().closeAchievements(),children:t.jsx(vn,{onClose:()=>C.getState().closeAchievements()})},"achievements")}),t.jsx(ge,{children:o.feedbackOpen&&t.jsx(Ce,{compact:!0,title:o.tr("feedback.title"),onClose:()=>o.closeFeedback(),children:t.jsx(An,{surface:"panel",cfg:o.cfg,activeSession:m,onClose:()=>o.closeFeedback()})},"feedback")}),t.jsx(vs,{}),t.jsx(ge,{children:r?.view&&t.jsx(Ce,{title:r.title,onClose:Jt,children:t.jsx(Pn,{target:r.view,onUnavailable:Jt})},r.id)}),!w&&t.jsx(wn,{}),!w&&t.jsx(ws,{onOpen:()=>C.getState().openAchievements()}),!o.onboarding&&t.jsx(ks,{})]})}mt({"chatpreview.msg.ask":{zh:"帮我把 LCL 的 hash 路由分支理一下,再决定要不要抽成表。",en:"Walk me through the hash route branches in LCL, then decide whether to pull them into a table."},"chatpreview.msg.reasoning":{zh:"先看 main.tsx 的 hash 分支顺序,确认 #/aion 与 #/tangu 不会被前面的 frame 分支吞掉,再决定是否抽一个 routes 表。整体规模还小,优先可读性。",en:"Start with the order of the hash branches in main.tsx, confirm that #/aion and #/tangu are not swallowed by the earlier frame branch, then decide whether to extract a routes table. The whole thing is still small, so readability wins."},"chatpreview.todo.read":{zh:"读 main.tsx 路由分支",en:"Read the route branches in main.tsx"},"chatpreview.todo.addRoute":{zh:"加 #/tangu 分支",en:"Add the #/tangu branch"},"chatpreview.todo.navLink":{zh:"补 Navigator 链接",en:"Add the Navigator link"},"chatpreview.todo.build":{zh:"跑 tsc / build",en:"Run tsc / build"},"chatpreview.plan":{zh:`1. 检查 hash 分支顺序
15
- 2. 补路由与导航
16
- 3. 运行 typecheck / build`,en:`1. Check the order of the hash branches
17
- 2. Add the route and the navigation link
18
- 3. Run typecheck / build`},"chatpreview.msg.answer":{zh:"看完了。当前是 5 条 `if (route.view === …)` 顺序分支,`frame` 在前、`aion/tangu` 在后,互不吞。\n\n```ts\nif (route.view === 'frame') return <Frame/>\nif (route.view === 'tangu') return <Tangu/>\n```\n\n规模还小,**暂不必抽表**——超过 ~8 条再说。",en:"Had a look. Right now there are 5 sequential `if (route.view === …)` branches — `frame` first, then `aion/tangu` — and none of them swallows another.\n\n```ts\nif (route.view === 'frame') return <Frame/>\nif (route.view === 'tangu') return <Tangu/>\n```\n\nAt this size a table is **not worth extracting yet** — revisit past ~8 branches."},"chatpreview.msg.buildFirst":{zh:"我先跑一遍构建确认。",en:"Let me run a build first to confirm."},"chatpreview.plan.question":{zh:"计划已就绪。是否批准?",en:"The plan is ready. Approve it?"},"chatpreview.inquiry.question":{zh:"路由是抽成表驱动,还是保持 if 分支?",en:"Should routing become table-driven, or stay as if branches?"},"chatpreview.inquiry.optTable":{zh:"抽成 routes 表",en:"Extract a routes table"},"chatpreview.inquiry.optIf":{zh:"保持 if 分支",en:"Keep the if branches"},"chatpreview.session.routing":{zh:"重构 LCL 路由层",en:"Refactor the LCL routing layer"},"chatpreview.session.weekly":{zh:"周报整理",en:"Compile the weekly report"},"chatpreview.session.scraper":{zh:"爬虫脚本调试",en:"Debug the scraper script"},"chatpreview.session.design":{zh:"设计系统对照",en:"Design system comparison"}});function Go(n){const s=Date.now()-6e4;return[{id:"u1",role:"user",content:n("chatpreview.msg.ask"),attachments:[{name:"routes.md",mimeType:"text/markdown",data:"",size:128}],status:"done",timestamp:s+1},{id:"a1",role:"assistant",agentName:"Tangu",status:"done",timestamp:s+2,systemPrompt:"You are Tangu, a coding agent. Keep changes scoped and verify them.",reasoning:n("chatpreview.msg.reasoning"),toolEvents:[{id:"t1",name:"read_file",arguments:"src/main.tsx",done:!0,elapsedMs:400},{id:"t2",name:"run_shell",arguments:"npx tsc --noEmit",done:!0,isError:!0,elapsedMs:1200}],todos:[{status:"completed",content:n("chatpreview.todo.read")},{status:"in_progress",content:n("chatpreview.todo.addRoute")},{status:"pending",content:n("chatpreview.todo.navLink")},{status:"pending",content:n("chatpreview.todo.build")}],planProposal:n("chatpreview.plan"),inquiries:[{inquiryId:"iqp",runId:"r1",question:n("chatpreview.plan.question"),options:[],status:"pending",kind:"plan"}],content:n("chatpreview.msg.answer")},{id:"a2",role:"assistant",agentName:"Tangu",status:"done",timestamp:s+3,content:n("chatpreview.msg.buildFirst"),approvals:[{approvalId:"ap1",runId:"r1",name:"run_bash",arguments:JSON.stringify({command:"npm run build && npx tsc --noEmit"}),preview:"$ npm run build && npx tsc --noEmit",status:"pending",reason:{kind:"mode",mode:"auto-edit"}},{approvalId:"ap2",runId:"r1",name:"write_file",arguments:JSON.stringify({path:"/etc/hosts",content:`127.0.0.1 tangu.local
19
- `}),preview:"⚠ Write outside the workspace · write /etc/hosts (22 chars)",status:"pending",reason:{kind:"escalate",mode:"auto-edit"}}]},{id:"a3",role:"assistant",agentName:"Tangu",status:"done",timestamp:s+4,content:"",inquiries:[{inquiryId:"iq1",runId:"r1",question:n("chatpreview.inquiry.question"),options:[n("chatpreview.inquiry.optTable"),n("chatpreview.inquiry.optIf")],status:"pending"}]}]}const rn=new Date().toISOString(),Xo=["chatpreview.session.routing","chatpreview.session.weekly","chatpreview.session.scraper","chatpreview.session.design"];function Zo(n){return Xo.map((s,o)=>({id:`s${o+1}`,title:n(s),model_id:null,archived:!1,emoji:null,agent_config:null,project_path:"/tangu",project_name:n("app.defaultWorkspace"),created_at:rn,updated_at:rn}))}function Jo(n){return[{key:"__cloud__",name:n("app.cloudWorkspace"),kind:"cloud",path:null,system:!0},{key:"/tangu",name:n("app.defaultWorkspace"),kind:"local",path:"/tangu",system:!0}]}const cn={backendUrl:"http://localhost:8787",token:"",modelId:""};function Qo(){const{t:n}=Te(),[s,o]=c.useState(!1),[m,r]=c.useState(""),b=c.useRef(null),f=c.useMemo(()=>Go(n),[n]),v=c.useMemo(()=>Zo(n),[n]),w=c.useMemo(()=>Jo(n),[n]);return t.jsxs("div",{className:"t2-preview-shell",children:[t.jsx("div",{className:"t2-preview-side",children:t.jsx(fo,{collapsed:!1,sessions:v,archivedSessions:[],activeId:"s1",runningIds:new Set(["s2"]),unreadIds:new Set(["s3"]),cfg:cn,modelId:"",activeSession:v[0],workspaces:w,onSelect:()=>{},onNewInWorkspace:()=>{},onAddWorkspace:()=>{},onRenameWorkspace:()=>{},onRemoveWorkspace:()=>{},onRename:()=>{},onArchive:()=>{},onDelete:()=>{},onOpenSettings:()=>{},showSpecial:!0,onNewChat:()=>o(!0),onOpenWorkspace:()=>{}})}),t.jsxs("div",{className:"t2-preview-main t2-chat-view",children:[t.jsxs("div",{className:"t2-toolbar",children:[t.jsx("div",{className:"t2-toolbar-title",children:v[0].title}),t.jsx("span",{className:"t2-toolbar-grow"}),t.jsx("button",{className:"t2-pill",onClick:()=>o(!1),style:{fontWeight:s?400:600},children:n("workbench.chat")}),t.jsx("button",{className:"t2-pill",onClick:()=>o(!0),style:{fontWeight:s?600:400},children:n("chat.emptyHint")}),m&&t.jsx("span",{className:"t2-toolbar-pill","data-preview-action":!0,children:m})]}),s?t.jsx(io,{}):t.jsx("div",{className:"t2-stream",ref:b,children:t.jsx("div",{className:"t2-stream-inner",children:f.map(d=>t.jsx(ro,{msg:d},d.id))})}),t.jsx(po,{approvalTray:s?void 0:t.jsx(co,{items:lo(f),onDecide:(d,p,g,h)=>(r(`approval:${g}:${String(h?.command||"")}`),!1),onAnswer:(d,p,g)=>(r(`inquiry:${g}`),!1)}),disabled:!1,running:!1,execConfig:{execMode:"host",approvalMode:"auto-edit"},models:null,modelId:"",onModelChange:()=>{},planMode:!1,onPlanModeChange:()=>{},onExecConfigChange:()=>{},onSend:async()=>!0,onStop:()=>{},contextWindow:2e5,ctxTokens:84e3,sessionTokens:12e3,onCompact:()=>{}})]}),t.jsxs("div",{className:"t2-preview-right",children:[t.jsx("div",{className:"t2-preview-right-title",children:n("panel.tab.toc")}),t.jsx(ho,{view:"toc",cfg:cn,sessionId:"s1",sessionConfig:{},running:!1,messages:s?[]:f,chatScrollRef:b,onToast:()=>{},onOpenPreview:()=>{},subChats:[]})]})]})}function ei(){$.getState().openView("home",{},"main")}mt({"spaceWindow.stuck":{zh:"这个 Space 还没准备好。它所属的插件可能还在加载,或已被停用、卸载。准备好后这里会自动打开,也可以直接关掉这扇窗。",en:"This Space is not ready yet. Its plugin may still be loading, or may have been disabled or removed. It will open here once it is ready, or you can close this window."}});const ln=6e3;function ti(){const[n,s]=c.useState(Qt?"wait":"plain");return c.useEffect(()=>{const o=Qt;if(!o)return;const m=Date.now();let r=null,b=!1;const f=()=>{const p=ae.getState().spaces.find(h=>h.id===o);if(r){p!==r&&!b&&(b=!0,location.reload());return}if(!p||!ja()&&Date.now()-m<ln)return;r=p;const g=$.getState();g.setSidebarDefaults(p.sidebarDefaults),g.setSideProfile(p.id,p.resizableSides??{},p.sideDefaultScale,p.bottomSpan),g.setPinned(p.pinned),document.title=be(p.name),s("ready")};f();const v=ae.subscribe(f),w=Me(f),d=window.setTimeout(()=>{f(),r||s("stuck")},ln+50);return()=>{v(),w(),window.clearTimeout(d)}},[]),n}function ni(){const{t:n}=Te(),s=Ye(),o=ti();c.useEffect(()=>{C.getState().setTr((r,b)=>n(r,b))},[n]),c.useEffect(()=>{C.getState().boot()},[]),c.useEffect(()=>Ke(),[]),c.useEffect(()=>window.tangu?.onMainAction?.(r=>{r==="agents-changed"&&(C.getState().refreshAgents(),window.dispatchEvent(new Event("forsion:agents-changed"))),r==="skills-changed"&&(pt(ht()).then(b=>C.setState({skillsList:b})).catch(()=>{}),window.dispatchEvent(new Event("forsion:skills-changed")))}),[]),c.useEffect(()=>{window.tangu?.detachedReady?.(Sa()).then(r=>{if(!r?.length)return;const b=$.getState();for(const f of r)b.openView(f.type,f.params??{},"main")})},[]);const m=(()=>{try{return window.tangu?.platform==="darwin"}catch{return!1}})();return o==="wait"||o==="stuck"?t.jsxs("div",{className:"shell-host",style:{display:"flex",flexDirection:"column"},children:[m&&t.jsx("div",{style:{height:38,flex:"0 0 auto",WebkitAppRegion:"drag"}}),o==="stuck"&&t.jsx("div",{className:"space-window-wait",role:"status",style:{flex:1,display:"grid",placeItems:"center",padding:32,textAlign:"center",color:"var(--text-muted)",fontSize:"var(--ui-font-body, 13px)",lineHeight:1.6},children:t.jsx("span",{style:{maxWidth:420},children:n("spaceWindow.stuck")})})]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"shell-host",children:t.jsx(Dn,{noRibbon:!0,dark:s.mode==="dark",soft:!!Nn(s.lang)?.manifest.panelGap,buildDefault:o==="ready"?pn:ei,header:m?t.jsx("div",{style:{height:38,flex:"0 0 auto",WebkitAppRegion:"drag"}}):void 0})}),window.amadeus&&t.jsx(hn,{}),t.jsx(Ln,{})]})}let X=null;Ve()==="mini"&&(Ca(async n=>{n.type==="amadeus-editor"&&await Na();const s={...n.params};delete s.miniSurface,n.type==="chat"&&(s.sessionId||=C.getState().activeId||void 0,s.followActive=!s.sessionId),window.tangu?.showMainPanel?.({...n,params:s})}),Ea(n=>{if(X?.view)return n.type===X.view.type?n:n.type===(X.mainView?.type||X.view.type)?{type:X.view.type,params:{...X.view.params,...n.params}}:(We({...n}),null);const s=ft();if(!s||!He(s))return null;const o=s.mini;return n.type===o.view.type?n:n.type===o.mainView.type?{type:o.view.type,params:{...o.view.params,...n.params}}:(We({...n}),null)}));function si(){const n=ft();n&&He(n)&&$.getState().openView(n.mini.view.type,n.mini.view.params??{},"main")}function ai(){const{t:n}=Te(),[s,o]=c.useState(null);return c.useEffect(()=>{C.getState().setTr((m,r)=>n(m,r))},[n]),c.useEffect(()=>{let m=!1,r=!1;const b=new URLSearchParams(location.search);let f=b.get("sessionId")?{sessionId:b.get("sessionId")}:null;const v=()=>{if(!m||!f)return;if(f.view){const S=f.view;if(!Ie(S.type)){r&&window.tangu?.closeSelf?.();return}r=!0;const E=f;f=null,X=E,o(E),$.getState().openView(S.type,{...S.params,...E.params},"main");return}const g=f.spaceId||(f.sessionId?"tangu":void 0),h=ae.getState().spaces.find(S=>S.id===g);if(!h||!He(h))return;const x=f;f=null,X=null,o(null),qe(h.id);const N={...h.mini.view.params,...x.params,...x.sessionId?{sessionId:x.sessionId,followActive:!1}:{}};$.getState().openView(h.mini.view.type,N,"main"),x.sessionId&&C.getState().setActiveId(x.sessionId)},w=window.tangu?.onMiniTarget?.(g=>{f=g,v()});window.tangu?.miniReady?.();const d=ae.subscribe(v),p=Me(v);return C.getState().boot().finally(()=>{m=!0,v()}),()=>{w?.(),d(),p(),m=!1,X=null}},[]),c.useEffect(()=>{window.amadeus&&Tn()},[]),c.useEffect(()=>Ke(),[]),t.jsx(Wo,{buildDefault:si,direct:s?.view?{title:s.title,view:s.view,mainView:s.mainView??s.view}:null})}const oi={settings:"settings.title",market:"market.title",achievements:"achievements.title",feedback:"feedback.title",btw:"btw.title"};function ii(n,s){return n.builtin?s(oi[n.builtin]):n.title}function ri(){const{t:n}=Te(),s=Ye(),[o,m]=c.useState(null),r=C(En(x=>({cfg:x.cfg,cfgLoaded:x.cfgLoaded,closeSettings:x.closeSettings,closeMarket:x.closeMarket,closeAchievements:x.closeAchievements,closeFeedback:x.closeFeedback,patchConfig:x.patchConfig,connect:x.connect}))),b=o?.params?.session?.id?o.params.session:null,f=()=>window.tangu?.closeSelf?.(),v=o?.builtin==="btw"?uo(o.params):null,w=o?ii(o,n):"";if(c.useEffect(()=>{o?.builtin&&w&&(document.title=w)},[o?.builtin,w]),c.useEffect(()=>{C.getState().setTr((x,N)=>n(x,N))},[n]),c.useEffect(()=>{C.getState().boot()},[]),c.useEffect(()=>{window.amadeus&&Tn()},[]),c.useEffect(()=>Ke(),[]),c.useEffect(()=>window.tangu?.onMainAction?.(x=>{x==="agents-changed"&&(C.getState().refreshAgents(),window.dispatchEvent(new Event("forsion:agents-changed"))),x==="skills-changed"&&(pt(ht()).then(N=>C.setState({skillsList:N})).catch(()=>{}),window.dispatchEvent(new Event("forsion:skills-changed")))}),[]),c.useEffect(()=>{const x=Ia(),N=window.tangu?.onFloatingTarget?.(m);return window.tangu?.floatingReady?.(x).then(S=>{S&&m(S)}),()=>N?.()},[]),c.useEffect(()=>{o?.builtin==="feedback"&&typeof o.params?.description=="string"&&C.setState({feedbackDraft:o.params.description})},[o]),!o)return t.jsx("div",{className:"floating-native-root"});const d=()=>{r.closeSettings(),f()},p=()=>{r.closeMarket(),f()},g=()=>{r.closeAchievements(),f()},h=()=>{r.closeFeedback(),f()};return t.jsxs("div",{className:"floating-native-root",children:[window.tangu?.platform==="darwin"&&t.jsx("header",{className:"floating-native-chrome",children:t.jsx("span",{title:w,children:w})}),t.jsxs("main",{className:"floating-native-content",children:[o.builtin==="settings"&&t.jsx(gn,{open:!0,initialTab:typeof o.params?.tab=="string"?o.params.tab:void 0,initialSkillKey:typeof o.params?.skillKey=="string"?o.params.skillKey:void 0,cfg:r.cfg,activeSession:b,themeLang:s.lang,themeSkin:s.skin,themeMode:s.mode,themeModePref:s.modePref,flatOn:s.flat,glassOn:s.glass,themeSeed:s.seed,onClose:d,onConfigChange:r.patchConfig,onThemeChange:(x,N,S)=>s.setTheme(x,N,s.bg,S),onFlatChange:s.setFlat,onGlassChange:s.setGlass,onSeedChange:s.setSeedValue,onReloadThemes:s.reloadThemes,onReconnect:x=>{r.connect({...r.cfg,...x||{}})},onRelaunchOnboarding:()=>{try{localStorage.removeItem(In)}catch{}window.tangu?.requestMainAction?.("onboarding"),f()}},JSON.stringify(o.params??{})),o.builtin==="market"&&t.jsx(bn,{initialQuery:typeof o.params?.q=="string"?o.params.q:void 0,onClose:p},String(o.params?.q??"")),o.builtin==="achievements"&&t.jsx(vn,{onClose:g}),o.builtin==="feedback"&&r.cfgLoaded&&t.jsx(An,{surface:"panel",cfg:r.cfg,activeSession:b,onClose:h},b?.id||""),o.builtin==="btw"&&r.cfgLoaded&&v&&t.jsx(xs,{seed:v,onClose:f}),o.view&&t.jsx(Pn,{target:o.view,onUnavailable:f})]}),(o.builtin==="settings"||o.builtin==="market")&&t.jsx(wn,{})]})}let de=null;function dn(n){if(!n){de&&(de.style.display="none");return}de||(de=document.createElement("div"),Object.assign(de.style,{position:"fixed",inset:"0",pointerEvents:"none",zIndex:"99998",boxSizing:"border-box",border:"3px solid var(--accent, #4d8794)",background:"color-mix(in srgb, var(--accent, #4d8794) 8%, transparent)"}),document.body.appendChild(de)),de.style.display="block"}function ci(){const n=window.tangu;if(n?.openDetached){if(Ve()==="main"){let s="";const o=()=>{const f=C.getState(),v=f.activeId,w={sessionId:v,runId:v?f.runningBySession[v]??null:null},d=JSON.stringify(w);d!==s&&(s=d,n.reportMiniSession?.(w))};C.subscribe(o),o();let m=null;const r=()=>{if(!$.getState().api||!m||!Ie(m.type))return;const v=m;m=null,v.spaceId&&qe(v.spaceId);const w=$.getState().openView(v.type,v.params??{},"main");w&&v.params&&w.setParams({...w.params,...v.params})};n.onMainPanelTarget?.(f=>{m=f,r()}),Me(r);let b=!1;$.subscribe(f=>{f.api&&(b||(b=!0,n.mainPanelReady?.()),r())})}Ta({detach:(s,o)=>{n.openDetached?.(s,o)},openSpace:(s,o)=>{Ve()==="main"&&Ma()===s&&ae.getState().activeSpaceId===s&&$.getState().saveNamed(La(s)),n.openDetached?.([],o,{space:s})},dragUpdate:(s,o,m)=>n.dragUpdate?.(s,o,m),drop:async(s,o,m)=>(await n.dropView?.(s,o,m))?.routed??!1}),n.onAcceptView?.(s=>{dn(null),$.getState().openView(s.type,s.params??{},"main")}),n.onDragPreview?.(s=>dn(s))}}function li(){const n=window.tangu;if(!n?.reportRunningSessions)return;const s=o=>n.reportRunningSessions(Object.keys(o).length);s(C.getState().runningBySession),C.subscribe((o,m)=>{o.runningBySession!==m.runningBySession&&s(o.runningBySession)})}const un=n=>go(n).toLowerCase(),Fn=(n,s)=>n.configBySession[s]?.cwd||n.sessions.find(o=>o.id===s)?.project_path||"",zn=(n,s)=>Object.keys(n.runningBySession).some(o=>un(Fn(n,o))===un(s));function di(){const n=window.tangu;if(!(!n?.codeStudioGitCommit||!n.codeStudioGitStatus||!n.productsIsCreation))return C.subscribe((s,o)=>{if(s.runningBySession!==o.runningBySession)for(const m of Object.keys(o.runningBySession)){if(s.runningBySession[m])continue;const r=Fn(s,m);!r||zn(s,r)||ui(r,m)}})}async function ui(n,s){try{if(!await window.tangu.productsIsCreation(n))return;const o=await window.tangu.codeStudioGitStatus(n);if(!(o?.auto??o?.writable)||zn(C.getState(),n))return;const m=ys(C.getState().messagesBySession[s]||[]);await window.tangu.codeStudioGitCommit(n,{name:m,auto:!0,untitled:mn("studio.history.untitled")})}catch(o){console.warn("[creations] 自动存版本失败",o)}}function mi(){if(!window.tangu?.onAuthWillChange)return()=>{};let n=!1,s=null,o=!1,m=0,r=Promise.resolve(),b=!1;const f=()=>{s&&(s.inert=o),s=null},v=window.tangu.onAuthWillChange(async()=>{const d=++m;s||(s=document.body,o=s?.inert??!1,s&&(s.inert=!0));try{if(await r,d!==m||b||!window.amadeus)return;const[{flushAllScopes:p,resetAllScopeDocs:g,usePageStore:h},{useDbStore:x},{useDrawStore:N},S]=await Promise.all([je(()=>import("./appStore-B1ynyt42.js").then(E=>E.rD),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),je(()=>import("./appStore-B1ynyt42.js").then(E=>E.rE),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),je(()=>import("./appStore-B1ynyt42.js").then(E=>E.rG),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),je(()=>import("./index-Bh_nLVTc.js").then(E=>E.cx),[],import.meta.url)]);if(await Promise.all([p(!0),x.getState().flushAll(!0),N.getState().flushAll(!0)]),d!==m)return;n=h.getState().vaultSide==="cloud",n&&(S.retireAllUnifiedScopes(),g(),h.setState({vaultRoot:null,pages:[],folders:[],files:[],icons:{}}))}catch(p){throw d===m&&f(),p}}),w=window.tangu.onAuthChanged?.(()=>{const d=++m;if(!n){r.finally(()=>{d===m&&f()});return}n=!1,r=r.then(async()=>{const{usePageStore:p}=await je(async()=>{const{usePageStore:g}=await import("./appStore-B1ynyt42.js").then(h=>h.rD);return{usePageStore:g}},__vite__mapDeps([0,1,2,3,4,5]),import.meta.url);b||(await p.getState().restoreVault(),await p.getState().initVaultSide())}).catch(p=>console.error("[auth] Cannot restore vault after account change:",p)).finally(()=>{d===m&&f()})});return()=>{b=!0,++m,v(),w?.(),f()}}mi();window.addEventListener("error",n=>{console.error("[tangu] window error:",n.error||n.message)});window.addEventListener("unhandledrejection",n=>{console.error("[tangu] unhandledrejection:",n.reason)});const fi=(()=>{try{return location.hash==="#preview"}catch{return!1}})(),$e=Ve();try{document.documentElement.dataset.window=$e}catch{}try{document.documentElement.lang=as()==="zh"?"zh-CN":"en"}catch{}try{window.tangu?.platform==="darwin"&&(document.documentElement.dataset.platform="mac")}catch{}let _n,Bn=null;try{_n=localStorage.getItem("forsion_theme_seed")||void 0}catch{}try{Bn=localStorage.getItem("forsion_theme_lang")}catch{}try{Ra(Da(),Oa(),Aa(),Pa(),{customColor:_n}),Fa(),document.documentElement.style.removeProperty("background"),Ye.getState().initThemes(Bn),C.getState().setTr(mn),Ss(),ci(),li(),di(),za(),js(),_a()}catch(n){console.error("[tangu] init failed, continue to mount:",n),Ba("init",n)}is.createRoot(document.getElementById("root")).render(t.jsx(os,{children:t.jsx(mo,{children:fi?t.jsx(Qo,{}):$e==="mini"?t.jsx(ai,{}):$e==="floating"?t.jsx(ri,{}):$e==="detached"?t.jsx(ni,{}):t.jsx(Uo,{})})}));
@@ -1 +0,0 @@
1
- import{F as o}from"./appStore-B1ynyt42.js";const s=[["path",{d:"M5 12h14",key:"1ays0h"}]],e=o("minus",s);export{e as M};
@@ -1,2 +0,0 @@
1
- import{j as r,K as w,u as j,r as N}from"./index-Bh_nLVTc.js";import{hS as A,s as f,u as g,hM as I,hN as _,b as E,rz as O,hO as S,hP as T,hV as L,g2 as P}from"./appStore-B1ynyt42.js";import{w as $,n as b}from"./viewportLock-BH26xHQO.js";import{C as D}from"./codingNavigation-CjeWG4xm.js";import"./nativeDownload-CziEyW_p.js";import"./ipc-CPhL3bPp.js";import"./client-DxGbwZLy.js";import"./UnifiedPage-C75y-MKT.js";import"./MarkdownBlock-D8LgHFYY.js";import"./index-BaRySZ-M.js";import"./linkFollow-C6PHGUxk.js";import"./mdMarks-cmL6vzR-.js";import"./emoji-Cjm3bKiF.js";import"./listFold-Q_8mh5ZG.js";import"./book-open-DBJ3dDpw.js";import"./pageChrome-DFz_AAzZ.js";import"./upload-MVVRQtkj.js";import"./SketchCard-CAAr_cqF.js";import"./arrow-up-right-R10mR2I6.js";import"./Chrome-B77-lQyh.js";import"./minus-BUT48dAC.js";import"./canvasPrefs-DwL_OAAo.js";import"./hand-D3QspKYq.js";import"./type-GJYLEhY-.js";import"./foldActions-Dm-uAt3L.js";import"./lock-DQ_yL4nF.js";import"./undo-2-DCTs4Ro4.js";import"./code-xml-joKQ-qGS.js";import"./message-square-plus-CEHkduIL.js";import"./RunLocationPicker-CyVa0RJa.js";import"./codeStudioStore-C7rGKlOC.js";import"./RightPanel-BVZeVO3c.js";import"./folder-plus-BRScGQ9m.js";import"./folder-CvZyHIgb.js";import"./pencil-BSbra1Ra.js";import"./ModelPill-DrW2cG0l.js";import"./create-BjBRKATq.js";import"./approvalText-Cy2UAUAQ.js";import"./SidebarRow-D77yrSLf.js";import"./rotate-ccw-HedfU4na.js";import"./hard-drive-BQsHSala.js";import"./CapabilityMenu-kx1TIJYN.js";import"./circle-x-BZfe7d6S.js";import"./userSpaces-CI4eqEgh.js";import"./automationListSource-B8EIRmDW.js";import"./messages-CBtmbpur.js";import"./workflow-DzeW9OXR.js";import"./list-tree-DaGpnIYu.js";import"./layout-grid-DfUfnvDS.js";import"./terminal-krsPf1mc.js";import"./star-CgYon3z4.js";import"./DashboardGridView-MlO1dpuo.js";import"./FloatingToc-tART_jC4.js";import"./pageTree-yVO1_fSy.js";import"./pluginExt-Byb64tQO.js";import"./pen-tool-uxsFELYC.js";import"./redo-2-BK5LMNa5.js";import"./AutomationBuilder-BuiHtVB-.js";import"./gestures-CZQVefU0.js";import"./circle-question-mark-HPZpZQxd.js";import"./InlineFiles-BHwivGbQ.js";import"./MuseView-Cb6R_l4i.js";import"./i18n.generated-BZRHO2Nc.js";import"./log-out-DFwTeh2X.js";import"./index-Dj-PygjB.js";/* empty css */import"./StudioGuestSurface-DthpuVGg.js";import"./pdf.worker.min-CGb3BKV9.js";import"./zoom-in-CovPsw4g.js";import"./mdMarkStore-DjN4bf1T.js";N({"pluginChat.failed":{zh:"对话没接上:{error}",en:"Could not open the chat: {error}"},"pluginChat.noEngine":{zh:"引擎还没连上",en:"the engine is not connected"},"pluginChat.noFolder":{zh:"这台设备上打不开这个文件夹",en:"this folder is not available on this device"},"pluginChat.noAgent":{zh:"没有这个 Agent:{agent}",en:"no such agent: {agent}"}});const x="engine is not connected",y="folder is not available on this host: ",d="unknown agent: ",v="tangu.pluginChats",M=15e3,C=()=>{try{return JSON.parse(localStorage.getItem(v)||"{}")||{}}catch{return{}}},k=e=>String(e?.message??e),u=new Map;async function z(e){if(!await $(M))return{ok:!1,error:x};const t=e.resolveCwd?.()||void 0;if(e.folder&&!t)return{ok:!1,error:`${y}${e.folder}`};const n=`${e.owner}
2
- ${t??""}`,i=u.get(n);if(i)return i;const m=(async()=>{const s=e.agent?.trim()||void 0;if(s&&!await b(s))return{ok:!1,error:`${d}${s}`};const c=C()[n];if(c)try{const o=await A(f(),c);if(!o.archived)return g.getState().adoptSession(o),{ok:!0,sessionId:o.id}}catch(o){if(o?.status!==404)return{ok:!1,error:k(o)}}const a=g.getState(),p=s?a.agentDefs.find(o=>o.slug===s):void 0,l=s??a.defaultAgentSlug,h=I(_({...t?{...O(S(a.desktopConfig,!0),{}),execMode:"host",cwd:t}:{...S(a.desktopConfig,!1),execMode:"sandbox"},...p?.thinkingLevel?{thinkingLevel:p.thinkingLevel,...p.thinkingLevel!=="max"?{ultra:!1}:{}}:{},...l?{agentSlug:l}:{}},E.getState().vaultRoot||null));try{const o=await T(f(),{...e.title?{title:e.title}:{},...t?{project_path:t,project_name:t.replace(/[\\/]+$/,"").split(/[\\/]/).pop()||t}:{projectless:!0},...p?.model?{model_id:p.model}:{},agent_config:h});g.getState().adoptSession({...o,agent_config:o.agent_config||h},{fresh:!0});try{localStorage.setItem(v,JSON.stringify({...C(),[n]:o.id}))}catch{}return{ok:!0,sessionId:o.id}}catch(o){return{ok:!1,error:k(o)}}})();return u.set(n,m),m.finally(()=>{u.delete(n)}),m}const F=(e,t)=>e===x?t("pluginChat.noEngine"):e.startsWith(y)?t("pluginChat.noFolder"):e.startsWith(d)?t("pluginChat.noAgent",{agent:e.slice(d.length)}):e;function R({leaf:e,state:t,retry:n}){const{t:i}=j();return t?.ok&&t.sessionId?r.jsx("div",{"data-plugin-chat":e.type,style:{height:"100%",minHeight:0,display:"flex",flexDirection:"column"},children:r.jsx(D,{leaf:e,params:{followActive:!1,sessionId:t.sessionId,childSurface:!0}},t.sessionId)}):r.jsx("div",{className:"empty-state","data-plugin-chat":e.type,role:t?"alert":"status",style:{height:"100%",padding:16,textAlign:"center"},children:t?r.jsxs(r.Fragment,{children:[r.jsx("span",{children:i("pluginChat.failed",{error:F(t.error||"",i)})}),r.jsx("button",{className:"btn ghost sm",onClick:n,children:i("common.retry")})]}):r.jsx("span",{children:i("common.loading")})})}function ie(e,t,n){const i=L(t),m={id:i,type:i,loc:"right",params:{},setTitle(){},setParams(){},close(){}},s=P(e,null,n),c=l=>s.render(r.jsx(w,{children:r.jsx(R,{leaf:m,state:l,retry:()=>{p()}})}));let a;const p=()=>(c(null),a=z(t).then(l=>(c(l),l)),a);return{ready:p(),latest:()=>a,dispose:s.dispose}}export{z as ensurePluginChat,ie as mountPluginChat};
@@ -1 +0,0 @@
1
- import{j as n,d as a}from"./index-Bh_nLVTc.js";import"./MarkdownBlock-D8LgHFYY.js";import{rh as p,g2 as y,j as h,ri as j,rj as R,rk as v,fm as M,rl as b}from"./appStore-B1ynyt42.js";import"./index-BaRySZ-M.js";import"./linkFollow-C6PHGUxk.js";import"./client-DxGbwZLy.js";import"./mdMarks-cmL6vzR-.js";import"./emoji-Cjm3bKiF.js";import"./listFold-Q_8mh5ZG.js";import"./book-open-DBJ3dDpw.js";import"./nativeDownload-CziEyW_p.js";import"./ipc-CPhL3bPp.js";function g({pluginId:m,spec:t,popHost:l}){const o=h(r=>r.mode),s=a.useRef(null),d=a.useMemo(()=>j(t.error?{...t,rows:[]}:t),[t]),u=a.useMemo(()=>R(t.error?{...t,rows:[]}:t),[t]),f=a.useMemo(()=>new Map(t.rows.map(r=>[r.id,r])),[t]),x=a.useRef(t.sort?{colId:t.sort.key,dir:t.sort.dir}:null),i=a.useRef(t);i.current=t,a.useLayoutEffect(()=>{l.dataset.mode=o},[o,l]),a.useLayoutEffect(()=>{s.current&&i.current.onRender?.(s.current)});const c=r=>f.get(r.id),w=a.useMemo(()=>t.fold?.summary?r=>v(t,r.flatMap(e=>f.get(e.id)??[])):void 0,[t,f]);return n.jsx("div",{className:"amadeus-root am-app tangu-lovable amx-plugtable","data-mode":o,ref:s,children:n.jsxs(n.Fragment,{children:[n.jsx(M,{target:`plugin:${m}/${t.id}`,pagePath:`plugin:${m}`,db:d,readOnly:!0,cellMeta:u,hideHead:!0,hideTools:!!t.partial,popHost:l,selectedRowId:t.selectedId??null,initialSort:x.current,onSort:r=>i.current.onSort?.(r?{key:r.colId,dir:r.dir}:null),foldMeta:w,onRowOpen:t.onRowOpen?r=>{const e=c(r);e&&i.current.onRowOpen?.(e)}:void 0,rowAttrs:r=>{const e=c(r);return e?{...e.className?{class:e.className}:{},...b(e.attrs)??{},...b(i.current.rowAttrs?.(e))??{}}:{}}}),t.error?n.jsx("div",{className:"amx-plugtable-error",children:t.error}):t.rows.length===0&&t.empty?n.jsx("div",{className:"amx-plugtable-empty",children:t.empty}):null]})})}function L(m,t,l){p(l);const o=document.createElement("div");o.className="am-app tangu-lovable amx-plugtable-pops",document.body.appendChild(o);let s=!1;const d=y(t,n.jsx(g,{pluginId:m,spec:l,popHost:o}),()=>{s=!0,o.remove()});return{update:u=>{s||(p(u),d.render(n.jsx(g,{pluginId:m,spec:u,popHost:o})))},dispose:d.dispose}}export{L as mountPluginTable};