@forsion/unit 2.13.3 → 2.13.5

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 (304) hide show
  1. package/main.mjs +135 -10
  2. package/package.json +1 -1
  3. package/release.json +5 -5
  4. package/web/assets/ArtificialView-BD1yHz1N.js +1 -0
  5. package/web/assets/AutomationBuilder-B09c-5Bi.js +1 -0
  6. package/web/assets/CalendarConfigView-Bd-ZDGPO.js +1 -0
  7. package/web/assets/CalendarSide-B0RVbOsg.js +1 -0
  8. package/web/assets/CalendarView-BHio-n_r.js +3 -0
  9. package/web/assets/CalendarView-t91KpUG7.css +1 -0
  10. package/web/assets/CapabilityMenu-DyHTEYLr.js +1 -0
  11. package/web/assets/Chrome-C7F6fdDp.js +1 -0
  12. package/web/assets/{CodeView-DRVh13k9.js → CodeView-BGOnrGhB.js} +3 -3
  13. package/web/assets/CtxMenuButtons-BYjrbUKS.js +1 -0
  14. package/web/assets/DashboardGridView-CR-R_qV8.js +25 -0
  15. package/web/assets/DashboardGridView-RoVFSkNO.css +1 -0
  16. package/web/assets/EventCard-QyYorE1_.js +1 -0
  17. package/web/assets/ExcalidrawCanvas-BgcFPMpU.css +1 -0
  18. package/web/assets/ExcalidrawCanvas-lwJCN6uB.js +1 -0
  19. package/web/assets/FloatingToc-DO7SH8Ku.js +1 -0
  20. package/web/assets/GitCloneDialog-CbW-RJak.js +1 -0
  21. package/web/assets/GitCloneDialog-DOxZk2K0.css +1 -0
  22. package/web/assets/HomepageView-Bx8FbWlY.css +1 -0
  23. package/web/assets/HomepageView-CHJEhf9c.js +4 -0
  24. package/web/assets/ImageStudioPanels-CgVf0wiq.js +3 -0
  25. package/web/assets/ImageStudioView-4WcX0_V4.js +1 -0
  26. package/web/assets/InlineAiPanel-CdIPINsA.js +1 -0
  27. package/web/assets/InlineAiPanel-DZZijfif.css +1 -0
  28. package/web/assets/InlineFiles-CAIyTk1n.js +1 -0
  29. package/web/assets/MarkdownBlock-Cqfk5DhC.css +1 -0
  30. package/web/assets/MarkdownBlock-DSItkLhu.js +58 -0
  31. package/web/assets/ModelPill--CU3XTIQ.js +2 -0
  32. package/web/assets/{ModelPill-CzdNh7Mt.css → ModelPill-BiUsuhy3.css} +1 -1
  33. package/web/assets/MuseLibraryView-16p1zsxz.css +1 -0
  34. package/web/assets/MuseLibraryView-PlS7HAlV.js +2 -0
  35. package/web/assets/MuseView-CvsO62Fo.js +7 -0
  36. package/web/assets/PageHistoryPanel-CDh7nm78.js +2 -0
  37. package/web/assets/{PdfAnnotator-CW0wPWRB.js → PdfAnnotator-DafvjP3U.js} +3 -3
  38. package/web/assets/PenRow-CEy-s6SF.js +1 -0
  39. package/web/assets/PluginToolCard-BmTRr5JT.css +1 -0
  40. package/web/assets/PluginToolCard-DCzLhsCA.js +2 -0
  41. package/web/assets/ProductView-AUqnTwmQ.js +1 -0
  42. package/web/assets/SettingsPage-B9mmkWaM.js +3 -0
  43. package/web/assets/StudioGuestSurface-OOhRA8nt.js +1 -0
  44. package/web/assets/TodoListView-BkgMe44I.js +1 -0
  45. package/web/assets/Tooltip-DOYi44eY.js +1 -0
  46. package/web/assets/UnifiedPage-CTmQpf2T.css +1 -0
  47. package/web/assets/UnifiedPage-s7-tDSwG.js +712 -0
  48. package/web/assets/ViewSelectionBar-WmSWMFsR.js +2 -0
  49. package/web/assets/appStore-DDOkzWDA.js +456 -0
  50. package/web/assets/appStore-iy8_Tmac.css +1 -0
  51. package/web/assets/arrow-up-right-BptN64d-.js +1 -0
  52. package/web/assets/{artificial-BzLFkChP.css → artificial-BubVxExB.css} +1 -1
  53. package/web/assets/astryxBridge-BL56QfEv.js +69 -0
  54. package/web/assets/astryxBridge-djzCiy4v.css +1 -0
  55. package/web/assets/automationListSource-B1jz6q0t.js +1 -0
  56. package/web/assets/boardSurface-CP4HNmcm.js +1 -0
  57. package/web/assets/calendarNavStore-DCi7VBmM.js +1 -0
  58. package/web/assets/canvasPrefs-ArsX3NFO.js +1 -0
  59. package/web/assets/chatBoxSurface-DRsDr-MT.js +1 -0
  60. package/web/assets/chevron-up-ChXNh14u.js +1 -0
  61. package/web/assets/{client-BqhpYbYL.js → client-fKy9CWk0.js} +1 -1
  62. package/web/assets/code-xml-DCCD9eCS.js +1 -0
  63. package/web/assets/{codeStudioStore-Dq5i8nbE.js → codeStudioStore-BgLfCDK2.js} +8 -8
  64. package/web/assets/codingNavigation-BrkLENBZ.css +1 -0
  65. package/web/assets/contextMenuSurface-BF593l2M.js +1 -0
  66. package/web/assets/copy-plus-ClKrSgM7.js +1 -0
  67. package/web/assets/create-DYmVT68X.js +14 -0
  68. package/web/assets/dashboardSurface-C6cbR3oG.js +1 -0
  69. package/web/assets/dbStore-BIG5Mfh2.js +1 -0
  70. package/web/assets/deskCapture-q-jRDIcc.js +1 -0
  71. package/web/assets/{diff2html-OoRdHZ_O.js → diff2html-Di8qIz6O.js} +2 -2
  72. package/web/assets/{docx-preview-B43XC8Cn.js → docx-preview-B-URZXdP.js} +1 -1
  73. package/web/assets/draft-CBSW5tHx.js +2 -0
  74. package/web/assets/drawingStore-CGvTqqYW.js +7 -0
  75. package/web/assets/file-down-Z913cCyQ.js +1 -0
  76. package/web/assets/floatingTocSurface-DGwTiqvU.js +1 -0
  77. package/web/assets/foldActions-DGIPTmE1.js +1 -0
  78. package/web/assets/folder-1OJQeDI1.js +1 -0
  79. package/web/assets/folder-minus-D_j1SwHu.js +1 -0
  80. package/web/assets/folder-plus-DP9sFr26.js +1 -0
  81. package/web/assets/gestures-ZhFAENNZ.js +1 -0
  82. package/web/assets/git-branch-BMajF2cu.js +1 -0
  83. package/web/assets/homeCardStatus-5R7XkxFL.js +1 -0
  84. package/web/assets/i18n-CAf4PT1o.css +1 -0
  85. package/web/assets/i18n.generated-DW_l6CkR.js +15 -0
  86. package/web/assets/imageStudio-CwG21Bat.css +1 -0
  87. package/web/assets/imageStudio-DC_syDtx.js +4 -0
  88. package/web/assets/index-B8A3nKeL.js +1 -0
  89. package/web/assets/{index-DDMXVG0h.js → index-BDZIQnEx.js} +2 -2
  90. package/web/assets/index-BYKR7EVg.js +1 -0
  91. package/web/assets/index-BeW45J9J.js +7 -0
  92. package/web/assets/index-BnJguNqI.js +1 -0
  93. package/web/assets/index-BniT-A2n.js +1 -0
  94. package/web/assets/index-C--E96Ul.js +1 -0
  95. package/web/assets/index-CI2esW1X.js +1 -0
  96. package/web/assets/index-CIKPZc3Q.js +1 -0
  97. package/web/assets/index-COzdD7mZ.js +13 -0
  98. package/web/assets/index-CPfmhZ3Z.js +1 -0
  99. package/web/assets/index-CVLDDD5Z.js +1 -0
  100. package/web/assets/index-CWXpOSI2.js +1 -0
  101. package/web/assets/index-Cg1FWM_p.js +1 -0
  102. package/web/assets/index-CmsN2Zm2.js +1 -0
  103. package/web/assets/index-CtCYv9bF.js +1 -0
  104. package/web/assets/index-CtRdzpNh.js +1 -0
  105. package/web/assets/index-D-ClOPbg.js +1 -0
  106. package/web/assets/{index-CobUnTcv.js → index-DfhEDV2T.js} +2 -2
  107. package/web/assets/index-Dr6YmrrT.js +1 -0
  108. package/web/assets/index-SpegRFQV.js +1 -0
  109. package/web/assets/index-bF04pF8q.js +3 -0
  110. package/web/assets/index-fDB1l4d-.js +3398 -0
  111. package/web/assets/index-jzlU5luC.js +1 -0
  112. package/web/assets/{index-D102FOuM.js → index-uhvJ8AiJ.js} +1 -1
  113. package/web/assets/{invitePage-BW0BH8Ac.js → invitePage-iOT1zBvp.js} +1 -1
  114. package/web/assets/{ipc-D7yENkjV.js → ipc-SAPDwyQ4.js} +1 -1
  115. package/web/assets/{jszip.min-UE5d5vPJ.js → jszip.min-B3n1FGCb.js} +1 -1
  116. package/web/assets/launchpad-C9U9hpWJ.css +1 -0
  117. package/web/assets/launchpad-CcmSwlJl.js +2 -0
  118. package/web/assets/layout-grid-oIyIGbc5.js +1 -0
  119. package/web/assets/linkFollow-uke1Xtit.js +8 -0
  120. package/web/assets/{listFold-CKxjyY5_.js → listFold-BeNv2v6M.js} +1 -1
  121. package/web/assets/lock-open-D2nMg0ga.js +1 -0
  122. package/web/assets/log-out-D70NCXC4.js +1 -0
  123. package/web/assets/magnet-Cqmm97W8.js +1 -0
  124. package/web/assets/main-B9aT0WXG.js +15 -0
  125. package/web/assets/main-BlVApHpj.css +1 -0
  126. package/web/assets/markdownEditorSurface-BiDH0__r.css +1 -0
  127. package/web/assets/markdownEditorSurface-zUzFity2.js +3 -0
  128. package/web/assets/mediaPlayer-DB4KUvua.js +1 -0
  129. package/web/assets/message-square-plus-BvUfAAZm.js +1 -0
  130. package/web/assets/{messages-4w1Khzm1.js → messages-GQUjmbwW.js} +1 -1
  131. package/web/assets/minimize-2-CMhzL6ZW.js +1 -0
  132. package/web/assets/mobileEntry-6u7TYC4s.css +1 -0
  133. package/web/assets/mobileEntry-BnHzrdoC.js +13 -0
  134. package/web/assets/modelPickerSurface-Dtz40Ae2.js +1 -0
  135. package/web/assets/nativeDownload-DsGyUSJ5.js +1 -0
  136. package/web/assets/nativeSheetMenu--iihXNVd.js +1 -0
  137. package/web/assets/pageStore-CyvNZEYX.js +13 -0
  138. package/web/assets/pageStore-ys8L4rjF.css +1 -0
  139. package/web/assets/{pageTree-CIXFRCLk.js → pageTree-Ci2qzrs1.js} +4 -4
  140. package/web/assets/pen-line-DC3lbEY1.js +1 -0
  141. package/web/assets/pen-tool-DD5_N4lZ.js +1 -0
  142. package/web/assets/pencil--sWwxHdP.js +1 -0
  143. package/web/assets/phoneList-BpLxxdq6.css +1 -0
  144. package/web/assets/phoneList-DKRMxQHf.js +1 -0
  145. package/web/assets/pluginChat-82zZt47Y.js +2 -0
  146. package/web/assets/react-b7FrqRQR.js +1 -0
  147. package/web/assets/recordSurface-vUX25Z8R.js +1 -0
  148. package/web/assets/redo-2-CqlqhWrI.js +1 -0
  149. package/web/assets/rotate-ccw-D8kni6Ni.js +1 -0
  150. package/web/assets/selectionActions-DIq0xDm8.js +2 -0
  151. package/web/assets/selectionBarSurface-B94e5JW_.js +1 -0
  152. package/web/assets/sessionTitle-Ctp4iNKu.js +1 -0
  153. package/web/assets/settingsPageSurface-C9TA3mJg.js +1 -0
  154. package/web/assets/sharePage-CY04XCAf.js +2 -0
  155. package/web/assets/{shareViewer-BzuSyJv_.js → shareViewer-DweNF8Ch.js} +2 -2
  156. package/web/assets/star-B0sZEmbj.js +1 -0
  157. package/web/assets/tableSurface-CSBYBw5P.js +1 -0
  158. package/web/assets/tanguProbe-B8Qv2vcm.js +6 -0
  159. package/web/assets/{terminalView-SAxITnRW.js → terminalView-BLGdmdl7.js} +3 -3
  160. package/web/assets/theme-CUWFlazV.css +1 -0
  161. package/web/assets/type-Dt7RNB9g.js +1 -0
  162. package/web/assets/undo-2-QimgpLBn.js +1 -0
  163. package/web/assets/{unitAccount-BPYRAa3m.js → unitAccount-DL3jfd84.js} +1 -1
  164. package/web/assets/{unitBridge-BNVzai6X.js → unitBridge-BSsCy1zP.js} +1 -1
  165. package/web/assets/{unitCloudTransport-iFweA1xk.js → unitCloudTransport-CI_6H0TU.js} +1 -1
  166. package/web/assets/unitOwnerAccess-CiQ7nD7E.js +1 -0
  167. package/web/assets/unitShim-Dl2ksNp-.js +5 -0
  168. package/web/assets/upload-Dy7svciS.js +1 -0
  169. package/web/assets/userSpaces-oMHIWgYe.js +1 -0
  170. package/web/assets/viewportLock-B0l1GU_k.css +1 -0
  171. package/web/assets/viewportLock-BZq5PTeN.js +738 -0
  172. package/web/assets/zoom-in-DDEtY_Go.js +1 -0
  173. package/web/excalidraw/excalidraw.js +4 -2
  174. package/web/index.html +12 -13
  175. package/web/assets/ArtificialView-DS97zlMg.js +0 -1
  176. package/web/assets/AutomationBuilder-BsJc8wuC.js +0 -1
  177. package/web/assets/CalendarConfigView-BN8mraSo.js +0 -1
  178. package/web/assets/CalendarView-D55PA1vn.js +0 -1
  179. package/web/assets/CapabilityMenu-BVrokPpT.js +0 -1
  180. package/web/assets/CheckboxInput-BuJ3HPm_.js +0 -1
  181. package/web/assets/Chrome-amTcZNE4.js +0 -1
  182. package/web/assets/DashboardGridView-D9s9pez_.css +0 -1
  183. package/web/assets/DashboardGridView-DlFyYfUh.js +0 -17
  184. package/web/assets/EventCard-DUrn2krw.js +0 -1
  185. package/web/assets/ExcalidrawCanvas-4uYrLYin.css +0 -1
  186. package/web/assets/ExcalidrawCanvas-TpbzBF-J.js +0 -1
  187. package/web/assets/FloatingToc-B1d4-5EL.js +0 -1
  188. package/web/assets/HomepageView-DnQ_5Obe.css +0 -1
  189. package/web/assets/HomepageView-nzKfbHM-.js +0 -1
  190. package/web/assets/ImageStudioPanels-B2PTq6Yb.js +0 -3
  191. package/web/assets/ImageStudioView-Cawr6pGW.js +0 -1
  192. package/web/assets/InlineFiles-DKPH5JHz.js +0 -1
  193. package/web/assets/MarkdownBlock--__nPQGh.css +0 -1
  194. package/web/assets/MarkdownBlock-BHpDy2qQ.js +0 -58
  195. package/web/assets/ModelPill-ChzAM3z1.js +0 -2
  196. package/web/assets/MuseLibraryView-DLuQ_jyV.js +0 -2
  197. package/web/assets/MuseView-CDDwV6SR.js +0 -6
  198. package/web/assets/PageHistoryPanel-BbdXpjJM.js +0 -2
  199. package/web/assets/PenRow-BY-MZLDQ.js +0 -1
  200. package/web/assets/ProductView-0ieVL3rY.js +0 -1
  201. package/web/assets/RightPanel-BRexwQ3W.js +0 -4
  202. package/web/assets/RunLocationPicker-BrDfOu8-.css +0 -1
  203. package/web/assets/RunLocationPicker-CadYiE7C.js +0 -43
  204. package/web/assets/SketchCard-BcXCdBAs.js +0 -641
  205. package/web/assets/StudioGuestSurface-ZJFKnNYF.js +0 -1
  206. package/web/assets/TodoListView-DuRdVFgB.js +0 -1
  207. package/web/assets/Tooltip-DtDUL18W.js +0 -1
  208. package/web/assets/UnifiedPage-CWXc_mo1.css +0 -1
  209. package/web/assets/UnifiedPage-D7JTfABH.js +0 -68
  210. package/web/assets/appStore-ClD7vq5L.css +0 -1
  211. package/web/assets/appStore-affnJoin.js +0 -3292
  212. package/web/assets/approvalText-Cy2UAUAQ.js +0 -2
  213. package/web/assets/arrow-up-right-R4P9Mmxz.js +0 -1
  214. package/web/assets/astryxBridge-CF_hpqC2.css +0 -1
  215. package/web/assets/astryxBridge-CT2wZJXs.js +0 -70
  216. package/web/assets/automationListSource-JVBMsMbC.js +0 -1
  217. package/web/assets/boardSurface-Ce0_vf9f.js +0 -1
  218. package/web/assets/book-open-CcXCToyx.js +0 -1
  219. package/web/assets/calendarNavStore-tQJRVpum.js +0 -1
  220. package/web/assets/canvasPrefs-CSuX9aLF.js +0 -1
  221. package/web/assets/chatBoxSurface-IG6Vu4Dz.js +0 -1
  222. package/web/assets/circle-question-mark-O8AhUz35.js +0 -1
  223. package/web/assets/circle-x-AV2ZWulM.js +0 -1
  224. package/web/assets/code-xml-DdR58F83.js +0 -1
  225. package/web/assets/codingNavigation-CxdCK78-.js +0 -53
  226. package/web/assets/codingNavigation-_tOR0ell.css +0 -1
  227. package/web/assets/create-BgJN5qsj.js +0 -14
  228. package/web/assets/dashboardSurface-BY-AFB-r.js +0 -1
  229. package/web/assets/deskCapture-BD2qD6NI.js +0 -1
  230. package/web/assets/emoji-BPdA62d7.js +0 -1
  231. package/web/assets/floatingTocSurface-BM2SYE_u.js +0 -1
  232. package/web/assets/foldActions-BcyvNVBs.js +0 -1
  233. package/web/assets/folder-CCZqnwRc.js +0 -1
  234. package/web/assets/folder-plus-BJKT1Pqg.js +0 -1
  235. package/web/assets/gestures-BwPbZDkU.js +0 -1
  236. package/web/assets/hack2gate-dark-Dx2RtDRI.jpg +0 -0
  237. package/web/assets/hack2gate-light-DRKq9tyS.jpg +0 -0
  238. package/web/assets/hand-DRu7IJdU.js +0 -1
  239. package/web/assets/hard-drive-CXNJUCXw.js +0 -1
  240. package/web/assets/i18n-BMo19xaR.css +0 -1
  241. package/web/assets/i18n.generated-DvY59Zq3.js +0 -15
  242. package/web/assets/imageStudio-Axwmd4GW.js +0 -2
  243. package/web/assets/imageStudio-DZ0qGU2s.css +0 -1
  244. package/web/assets/index-B1rE_NwA.js +0 -1
  245. package/web/assets/index-BFTY79aq.js +0 -1
  246. package/web/assets/index-BGEkZBs2.js +0 -1
  247. package/web/assets/index-BO2XJc36.js +0 -13
  248. package/web/assets/index-BYUntVIZ.js +0 -297
  249. package/web/assets/index-C65u4fXd.js +0 -1
  250. package/web/assets/index-C_Ohi-I3.js +0 -1
  251. package/web/assets/index-CkMhazev.js +0 -1
  252. package/web/assets/index-D3CYvMpl.js +0 -1
  253. package/web/assets/index-D78izbLA.js +0 -1
  254. package/web/assets/index-DY0M_dpd.js +0 -1
  255. package/web/assets/index-DcbZwhpE.js +0 -1
  256. package/web/assets/index-Dlkq7gkE.js +0 -1
  257. package/web/assets/index-HqmJW2np.js +0 -1
  258. package/web/assets/index-LxlyPm0_.js +0 -1
  259. package/web/assets/index-Uq4J2aoW.js +0 -1
  260. package/web/assets/index-WbVt2P8R.js +0 -3
  261. package/web/assets/index-XyjIhkPw.js +0 -1
  262. package/web/assets/index-Y2kzYlZq.js +0 -1
  263. package/web/assets/index-mB0EQkyZ.js +0 -1
  264. package/web/assets/index-pJh7JN7_.js +0 -1
  265. package/web/assets/index-taRxNsbp.js +0 -7
  266. package/web/assets/launchpad-C2c1MSVX.css +0 -1
  267. package/web/assets/layout-grid-Hs3eDA07.js +0 -1
  268. package/web/assets/linkFollow-Msu1XH9v.js +0 -8
  269. package/web/assets/list-tree-DmuRb-p9.js +0 -1
  270. package/web/assets/lock-kffGfeHt.js +0 -1
  271. package/web/assets/log-out-B5gEP0tF.js +0 -1
  272. package/web/assets/main-BiS_5wrB.css +0 -1
  273. package/web/assets/main-DIyFlyfK.js +0 -20
  274. package/web/assets/markdownEditorSurface-Bql20IAf.css +0 -1
  275. package/web/assets/markdownEditorSurface-Cx2rqFAY.js +0 -3
  276. package/web/assets/message-square-plus-DxBPIhPS.js +0 -1
  277. package/web/assets/minus-CfoZ4oxr.js +0 -1
  278. package/web/assets/mobileEntry-B8JwR53-.js +0 -13
  279. package/web/assets/mobileEntry-DS1vohuL.css +0 -1
  280. package/web/assets/nativeDownload-Udrv_tmU.js +0 -1
  281. package/web/assets/pageChrome-D-9npbUE.js +0 -1
  282. package/web/assets/pageChrome-eO9pb2fH.css +0 -1
  283. package/web/assets/pen-tool-D_Y9We9x.js +0 -1
  284. package/web/assets/pencil-DGiTRzW1.js +0 -1
  285. package/web/assets/phoneList-BQfCJwKF.css +0 -1
  286. package/web/assets/phoneList-DHUia6HT.js +0 -9
  287. package/web/assets/pluginChat-BXuJiMYi.js +0 -2
  288. package/web/assets/redo-2-QgiKEg9T.js +0 -1
  289. package/web/assets/rotate-ccw-BLoH5er1.js +0 -1
  290. package/web/assets/sharePage-DYYN5usb.js +0 -2
  291. package/web/assets/star-BmywYD3u.js +0 -1
  292. package/web/assets/tableSurface-21LDYY_G.js +0 -1
  293. package/web/assets/terminal-BlmA_Z1C.js +0 -1
  294. package/web/assets/theme-Dgqst5S9.css +0 -1
  295. package/web/assets/type-DmIL6FB-.js +0 -1
  296. package/web/assets/undo-2-yMeXc8Wi.js +0 -1
  297. package/web/assets/unitOwnerAccess-Bggl7bDP.js +0 -1
  298. package/web/assets/unitShim-BP2nBO_k.js +0 -5
  299. package/web/assets/upload-D20PZHXc.js +0 -1
  300. package/web/assets/userSpaces-CrLrKklx.js +0 -1
  301. package/web/assets/viewportLock-DO1lzA2N.css +0 -1
  302. package/web/assets/viewportLock-tlT6H_Hc.js +0 -629
  303. package/web/assets/workflow-Bd6xBHiT.js +0 -1
  304. package/web/assets/zoom-in-_TgFOpyv.js +0 -1
@@ -0,0 +1,15 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./pageStore-CyvNZEYX.js","./index-fDB1l4d-.js","./react-b7FrqRQR.js","./client-fKy9CWk0.js","./pageStore-ys8L4rjF.css","./dbStore-BIG5Mfh2.js","./drawingStore-CGvTqqYW.js"])))=>i.map(i=>d[i]);
2
+ import{r as c,j as t,a as mt,u as be,t as es,_ as Be,b as Us,L as Ks}from"./index-fDB1l4d-.js";import{c as Xs}from"./client-fKy9CWk0.js";import{n as qs,p as Gs,L as ts,q as Zs,C as Ln,t as Qs,v as Ct,w as Js,u as eo,x as to,c as no,y as so,z as oo,D as Mn,e as io,h as ns,F as ao,A as ss,G as $e,S as os,M as is,j as as,B as ro,W as co,T as lo,P as rs,k as uo,N as mo,H as po,I as fo,l as ho,m as go,E as bo}from"./viewportLock-BZq5PTeN.js";import{M as wo,I as vo,F as ko,S as yo,U as xo,C as So,D as jo,G as Eo,E as Co,W as No,J as Io,P as To,K as Lo,L as Mo,N as zo,R as Po,T as fe,V as Do,u as N,X as zn,Y as Pn,Z as Ro,_ as At,$ as Oo,a0 as Ye,a1 as Ao,a2 as Fo,a3 as _o,a4 as Ft,a5 as Bo,a6 as Dn,a7 as $o,a8 as Vo,a9 as Ho,aa as Wo,ab as Yo,ac as cs,ad as Uo,ae as _t,l as Bt,af as Ko,j as pt,k as Xo,ag as ls,ah as qo,ai as Rn,s as Go,aj as ds,h as Zo,ak as Qo,Q as Jo,al as ei,O as ti,am as On,an as ni,i as $t,ao as si,ap as oi,aq as ii,ar as ai,as as ri,r as ci,t as li,v as di,w as ui,at as mi,y as pi,z as fi,A as hi,B as gi,au as bi}from"./appStore-DDOkzWDA.js";import{p as Ue,B as us,D as wi,L as vi,P as ki,q as yi,r as xi,M as Si,C as ji,I as Ei,F as Pt,t as Ci,Z as ms,k as ae,v as Ni,f as K,w as Ii,x as Ti,y as ps,l as W,z as Ee,A as ge,U as An,E as Li,G as Mi,H as Fn,J as _n,K as zi,O as Pi,Q as Nt,R as ct,T as Di,V as Ri,W as Oi,X as Bn,Y as Ai,_ as $n,$ as Fi,a0 as it,a1 as Vn,a2 as _i,a3 as je,a4 as Bi,a5 as $i,a6 as Dt,a7 as Vi,a8 as Rt,a9 as Hi,aa as Wi,ab as Yi,ac as Ui,ad as fs,S as Ki,ae as ft,af as Ve,ag as Xi,ah as Vt,ai as hs,s as Ke,aj as gs,ak as ut,al as Ht,am as qi,an as Gi,ao as Zi,ap as Qi,aq as Hn,ar as Ji,as as ea,at as ta,au as na,av as sa,aw as oa,ax as ia}from"./pageStore-CyvNZEYX.js";import{P as aa}from"./pen-tool-DD5_N4lZ.js";import{T as ra,R as ca,V as la,M as da,C as ua,a as ma,H as pa,f as fa}from"./userSpaces-oMHIWgYe.js";import{M as ha}from"./Chrome-C7F6fdDp.js";import{P as ga,W as ba,H as wa,A as Se}from"./DashboardGridView-CR-R_qV8.js";import{S as va}from"./star-B0sZEmbj.js";import{F as bs}from"./folder-1OJQeDI1.js";import{C as ka}from"./chevron-up-ChXNh14u.js";import{F as ws}from"./UnifiedPage-s7-tDSwG.js";import{n as Wn}from"./nativeDownload-DsGyUSJ5.js";import{q as ya,a as xa}from"./PluginToolCard-DCzLhsCA.js";import"./i18n.generated-DW_l6CkR.js";import{n as Sa}from"./codeStudioStore-BgLfCDK2.js";import"./ModelPill--CU3XTIQ.js";import"./nativeSheetMenu--iihXNVd.js";import"./upload-Dy7svciS.js";import"./MuseView-CvsO62Fo.js";import"./automationListSource-B1jz6q0t.js";import"./messages-GQUjmbwW.js";import"./message-square-plus-BvUfAAZm.js";import"./rotate-ccw-D8kni6Ni.js";import"./undo-2-QimgpLBn.js";import"./git-branch-BMajF2cu.js";import"./selectionActions-DIq0xDm8.js";import"./mediaPlayer-DB4KUvua.js";import"./react-b7FrqRQR.js";import"./arrow-up-right-BptN64d-.js";import"./CapabilityMenu-DyHTEYLr.js";import"./folder-plus-DP9sFr26.js";import"./layout-grid-oIyIGbc5.js";import"./SettingsPage-B9mmkWaM.js";import"./ipc-SAPDwyQ4.js";import"./lock-open-D2nMg0ga.js";import"./MarkdownBlock-DSItkLhu.js";import"./index-CmsN2Zm2.js";import"./linkFollow-uke1Xtit.js";import"./listFold-BeNv2v6M.js";import"./FloatingToc-DO7SH8Ku.js";import"./canvasPrefs-ArsX3NFO.js";import"./type-Dt7RNB9g.js";import"./file-down-Z913cCyQ.js";import"./AutomationBuilder-B09c-5Bi.js";import"./dbStore-BIG5Mfh2.js";import"./gestures-ZhFAENNZ.js";import"./pencil--sWwxHdP.js";import"./tanguProbe-B8Qv2vcm.js";import"./sessionTitle-Ctp4iNKu.js";import"./index-CIKPZc3Q.js";import"./create-DYmVT68X.js";import"./launchpad-CcmSwlJl.js";import"./CtxMenuButtons-BYjrbUKS.js";import"./phoneList-DKRMxQHf.js";import"./pdf.worker.min-CGb3BKV9.js";import"./code-xml-DCCD9eCS.js";import"./zoom-in-DDEtY_Go.js";import"./minimize-2-CMhzL6ZW.js";import"./InlineFiles-CAIyTk1n.js";import"./pen-line-DC3lbEY1.js";import"./ViewSelectionBar-WmSWMFsR.js";import"./InlineAiPanel-CdIPINsA.js";import"./GitCloneDialog-CbW-RJak.js";import"./log-out-D70NCXC4.js";import"./StudioGuestSurface-OOhRA8nt.js";/* empty css */import"./drawingStore-CGvTqqYW.js";import"./magnet-Cqmm97W8.js";import"./pageTree-Ci2qzrs1.js";import"./pluginExt-Byb64tQO.js";import"./folder-minus-D_j1SwHu.js";import"./redo-2-CqlqhWrI.js";import"./foldActions-DGIPTmE1.js";const ja=[["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"}]],Ea=Ue("box",ja);const Ca=[["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"}]],Na=Ue("calendar",Ca);const Ia=[["path",{d:"m11 17-5-5 5-5",key:"13zhaf"}],["path",{d:"m18 17-5-5 5-5",key:"h8a8et"}]],Ta=Ue("chevrons-left",Ia);const La=[["path",{d:"m6 17 5-5-5-5",key:"xnjwq"}],["path",{d:"m13 17 5-5-5-5",key:"17xmmf"}]],Ma=Ue("chevrons-right",La);const za=[["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"}]],Pa=Ue("tag",za),vs={folder:bs,"folder-open":Po,star:va,heart:pa,home:zo,zap:ms,bookmark:Ci,bell:Mo,tag:Pa,flag:Lo,pin:ga,box:Ea,package:To,settings:Io,wrench:No,terminal:ma,code:ua,"file-text":Pt,image:Ei,music:da,video:la,camera:Co,globe:Eo,compass:ji,map:ha,calendar:Na,clock:jo,mail:So,"message-circle":Si,users:xi,user:xo,search:yo,filter:ko,sparkles:yi,rocket:ca,target:ra,trophy:Zs,lightbulb:ts,coffee:Gs,palette:ki,layers:vi,database:wi,"pen-tool":aa,inbox:vo,bot:us,command:qs,moon:wo},Da=Object.keys(vs),It=n=>n?vs[n]:void 0;function Ra(n,i,o){const d=n.target.closest("button")??i;let a=!1,v=!1,p,g;const w=parseFloat(getComputedStyle(document.body).zoom)||1,m=n.clientX,k=n.clientY;d.setPointerCapture(n.pointerId);const f=(j=!1)=>{if(v=!0,window.removeEventListener("pointermove",I,!0),window.removeEventListener("pointerup",C,!0),window.removeEventListener("pointercancel",b,!0),window.removeEventListener("keydown",h,!0),window.removeEventListener("blur",b),d.removeEventListener("lostpointercapture",b),d.hasPointerCapture(n.pointerId)&&d.releasePointerCapture(n.pointerId),document.documentElement.classList.remove("rb-pointer-dragging"),p?.remove(),g?.remove(),a){const A=y=>{y.preventDefault(),y.stopImmediatePropagation(),_()},L=()=>{clearTimeout(X),X=window.setTimeout(_,0)},_=()=>{window.removeEventListener("click",A,!0),window.removeEventListener("pointerup",L,!0),clearTimeout(X)};window.addEventListener("click",A,!0),j||window.addEventListener("pointerup",L,{capture:!0,once:!0});let X=window.setTimeout(_,j?0:1e4)}},b=()=>{v||(f(),a&&o.cancel())},h=j=>{j.key==="Escape"&&(j.preventDefault(),j.stopImmediatePropagation(),b())},I=j=>{if(!(j.pointerId!==n.pointerId||v)){if(!(j.buttons&1)){b();return}if(!(!a&&Math.hypot(j.clientX-m,j.clientY-k)<6)){a||(a=!0,document.documentElement.classList.add("rb-pointer-dragging"),g=document.createElement("div"),g.className="rb-pointer-shield",g.style.width=`${window.innerWidth/w}px`,g.style.height=`${window.innerHeight/w}px`,g.setAttribute("aria-hidden","true"),document.body.appendChild(g),p=i.cloneNode(!0),p.removeAttribute("data-id"),p.querySelectorAll("[id]").forEach(A=>A.removeAttribute("id")),p.className="rb-pointer-ghost",p.setAttribute("aria-hidden","true"),p.style.width=`${i.getBoundingClientRect().width/w}px`,document.body.appendChild(p),o.start()),j.preventDefault(),p.style.left=`${(j.clientX+12)/w}px`,p.style.top=`${(j.clientY+12)/w}px`,g.style.pointerEvents="none";try{o.move(j)}finally{g.style.pointerEvents=""}}}},C=j=>{j.pointerId!==n.pointerId||j.button!==0||v||(f(!0),a&&(j.preventDefault(),o.drop(j)))};return window.addEventListener("pointermove",I,!0),window.addEventListener("pointerup",C,!0),window.addEventListener("pointercancel",b,!0),window.addEventListener("keydown",h,!0),window.addEventListener("blur",b),d.addEventListener("lostpointercapture",b),b}const Oa=300,Aa=150;function Fa(n){const i=d=>n.known(d.type),o=n.active?n.stash.filter(i):[];return o.length?o:n.defaults.filter(i)}function _a(n){return n.zone==="shell"&&n.buttons===0&&!n.typing}const Tt=4,Yn=5,Un=5,Ba=1e3,$a=100;function Kn(n){if(n>=9)return"";const i=Hi({id:`space-slot-${n+1}`,hotkey:`mod+${n+1}`});return i?Wi(i,Yi()):""}function He({item:n,expanded:i,dot:o}){if(n.component){const v=n.component;return t.jsx(v,{expanded:i})}const d=n.icon,a=n.tooltip?je(n.tooltip):"";return t.jsxs("button",{className:"rb-btn","aria-label":a||void 0,"data-rb-tip":i?void 0:a||void 0,onClick:n.onClick,children:[d&&t.jsx(d,{size:18}),o&&t.jsx("span",{className:"rb-badge rb-dot","aria-hidden":"true"}),i&&t.jsx("span",{className:"rb-label",children:a})]})}function Va({cmd:n,expanded:i,overrideIcon:o}){const[,d]=c.useReducer(g=>g+1,0),a=o??n.icon??ms,v=je(n.title);let p;if(n.checked)try{p=!!n.checked()}catch{p=void 0}return t.jsxs("button",{className:`rb-btn${p?" is-on":""}`,"aria-pressed":p,"aria-label":v,"data-rb-tip":i?void 0:v,onMouseEnter:n.checked?d:void 0,onMouseLeave:n.checked?d:void 0,onClick:()=>{const g=n.run();n.checked&&(d(),g&&typeof g.then=="function"&&g.then(d,d))},children:[t.jsx(a,{size:18}),i&&t.jsx("span",{className:"rb-label",children:v})]})}const at=24,We=n=>n.startsWith("space:")?n.slice(6):null,Ha=600;function Wa(){const n=ae(e=>e.items),i=Ni(n),o=ae(e=>e.expanded),d=ae(e=>e.order),a=ae(e=>e.bottomOrder),v=ae(e=>e.folders),p=ae(e=>e.commandItems),g=ae(e=>e.commandIcons),w=ae(e=>e.recentCount),m=K(e=>e.recent),k=Ii(e=>e.commands);Ti(e=>e.overrides);const{t:f}=ps(),b=()=>ae.getState(),[h,I]=c.useState(null),C=c.useRef(void 0);c.useEffect(()=>()=>C.current?.(),[]);const[j,A]=c.useState(null),[L,_]=c.useState(null),[X,y]=c.useState(null),[z,M]=c.useState(null),[V,B]=c.useState(null),[$,G]=c.useState(null),[q,Ce]=c.useState(99),P=c.useRef(null),le=c.useRef(null),Ne=c.useRef(null),re=c.useRef(null),D=c.useRef(null),de=c.useRef(null),se=c.useRef(void 0),we=c.useRef(null),[Q,Ie]=c.useState({top:0,bottom:0}),[Y,qe]=c.useState(null),[Te,S]=c.useState({}),F=c.useRef({}),oe=c.useRef({});c.useEffect(()=>()=>{for(const e of Object.values(F.current))window.clearTimeout(e?.timer)},[]);const[Z,ve]=c.useState(!1),ue=c.useRef(void 0);c.useEffect(()=>()=>window.clearTimeout(ue.current),[]);const Le=e=>{for(const r of["top","bottom"]){const u=F.current[r];if(!u)continue;window.clearTimeout(u.timer);const l=oe.current[r];l&&(l.style.transform=u.from?`translateY(${-u.from*H}px)`:""),delete F.current[r]}S({}),window.clearTimeout(ue.current);const s=!window.matchMedia("(prefers-reduced-motion: reduce)").matches;ve(s),s&&(ue.current=window.setTimeout(()=>ve(!1),240)),qe(e)},[Me,Wt]=c.useState(null),ze=c.useRef(null),ht=c.useRef(void 0),Ge=c.useRef(!1),Yt=c.useRef(0),Pe=()=>{window.clearTimeout(ht.current),ze.current=null,Ge.current&&(Ge.current=!1,Yt.current=Date.now()),Wt(null)},Ts=!W(e=>e.leftVisible),[U,Ut]=c.useState(null),Kt=K(e=>U?e.spaces.find(s=>s.id===U.spaceId):void 0),gt=c.useRef(null),Ze=c.useRef(null),ke=c.useRef(void 0),De=c.useRef(void 0),Xt=c.useRef(null),[,Qe]=c.useReducer(e=>e+1,0),Je=()=>{window.clearTimeout(De.current),De.current=void 0},me=()=>{window.clearTimeout(ke.current),Je(),Ut(null)},bt=!!h||!!V||!!$||!!z,Ls=e=>W.getState().leftVisible&&e===K.getState().activeSpaceId,qt=K(e=>!!U&&e.activeSpaceId===U.spaceId)&&!Ts;c.useEffect(()=>{(bt||qt)&&me()},[bt,qt]),c.useEffect(()=>U?Ee(()=>{U.views.some(e=>!ge(e.type))&&me()}):void 0,[U]),c.useEffect(()=>()=>{window.clearTimeout(ke.current),window.clearTimeout(De.current)},[]);const Gt=e=>{if(Ls(e)){me();return}const{spaces:s,activeSpaceId:r}=K.getState(),u=s.find(R=>R.id===e),l=W.getState(),x=e===r,E=u?Fa({active:x,stash:l.stash.left,defaults:x?l.sidebarDefaults.left:u.sidebarDefaults.left,known:R=>!!ge(R)}):[];Je(),Ut(E.length?{spaceId:e,views:E}:null)},Ms=e=>{const s=e.target.closest("[data-space-id]")?.dataset.spaceId??null;s!==Ze.current&&(window.clearTimeout(ke.current),Ze.current=s,s&&(bt||(U?.spaceId===s?Je():U?Gt(s):ke.current=window.setTimeout(()=>{Ze.current===s&&Gt(s)},Oa))))},Zt=!!U;c.useEffect(()=>{if(!Zt)return;const e=T=>{const O=T instanceof Element?T:null;return O?gt.current?.contains(O)?"card":P.current?.contains(O)&&O.closest("[data-space-id]")?"trigger":O.closest(".shell")?"shell":"overlay":"overlay"},s=()=>{const T=document.activeElement;return!!T&&!!gt.current?.contains(T)&&T.matches('input, textarea, select, [contenteditable]:not([contenteditable="false"])')};let r=null;const u=(T,O)=>{const te=e(T);_a({zone:te,buttons:O,typing:te==="shell"&&s()})?De.current===void 0&&(De.current=window.setTimeout(me,Aa)):Je()},l=T=>{r=T.target,u(T.target,T.buttons)},x=()=>{window.setTimeout(()=>u(r,0),0)},E=T=>{const O=e(T.target);(O==="shell"||O==="trigger")&&me()},R=T=>{T.key==="Escape"&&!s()&&me()};return document.addEventListener("mousemove",l),document.addEventListener("mouseover",l),document.addEventListener("mouseup",l),document.addEventListener("focusout",x),document.addEventListener("mousedown",E,!0),window.addEventListener("keydown",R),window.addEventListener("resize",Qe),window.addEventListener(An,Qe),()=>{document.removeEventListener("mousemove",l),document.removeEventListener("mouseover",l),document.removeEventListener("mouseup",l),document.removeEventListener("focusout",x),document.removeEventListener("mousedown",E,!0),window.removeEventListener("keydown",R),window.removeEventListener("resize",Qe),window.removeEventListener(An,Qe)}},[Zt]);const zs=()=>{const e=P.current,s=ct(e),r=e?.getBoundingClientRect(),u=e?.parentElement?.querySelector(".shell-work"),l=u?.getBoundingClientRect(),E=(u?.querySelector(".dv-prefix--edge")?.closest(".dv-tabs-and-actions-container")?.getBoundingClientRect()?.bottom??l?.top??0)+4,R=(l?.bottom??window.innerHeight)-8,T=W.getState(),O=Bi((l?.width??1200)/s,"left",{free:T.sideFree.left,saved:T.sideWidths.left,scale:T.sideScale.left}),te=T.leftVisible?T.api?.panels.find(Fe=>Fe.params?.__loc==="left")?.group.element.getBoundingClientRect():void 0;return te?.height?{left:te.left/s,top:te.top/s,height:te.height/s,width:O,"--rb-peek-lights":"26px"}:{left:((r?.right??44)+4)/s,top:E/s,height:Math.max(160,R-E)/s,width:O}},wt=!!h||!!V||!!$||!!z||!!U;c.useEffect(()=>{(wt||o)&&Pe()},[wt,o]),c.useEffect(()=>()=>window.clearTimeout(ht.current),[]);const Ps=e=>{const s=e.target.closest("[data-rb-tip]");if(s===ze.current)return;const r=Ge.current||Date.now()-Yt.current<=$a;if(Pe(),!s||wt||o)return;ze.current=s;const u=()=>{if(ze.current!==s||!s.isConnected||!s.dataset.rbTip)return;const l=s.getBoundingClientRect();Ge.current=!0,Wt({text:s.dataset.rbTip,mid:l.top+l.height/2})};r?u():ht.current=window.setTimeout(u,Ba)},Ds=new Set(v.flatMap(e=>e.items)),et=new Map,Qt=e=>{const s=[];for(const u of n)(u.side??"top")===e&&!u.pinned&&s.push({kind:"item",id:u.id,item:u});if(e==="bottom")for(const u of p){const l=k.find(x=>x.id===u);l&&s.push({kind:"cmd",id:`cmd:${u}`,cmd:l})}for(const u of v)u.zone===e&&s.push({kind:"folder",id:u.id,folder:u});for(const u of s)et.set(u.id,u);return Ai(s.map(u=>u.id),e==="top"?d:a).map(u=>et.get(u)).filter(u=>!Ds.has(u.id))},J=Qt("top"),ee=Qt("bottom"),Jt=e=>e.items.reduce((s,r)=>s+(et.has(r)?1:0),0),Rs=n.filter(e=>e.side==="bottom"&&e.pinned),Os=n.filter(e=>e.side==="head"),en=n.filter(e=>e.side==="home");c.useEffect(()=>{const e=[...en.map(s=>s.id),...[...J,...ee].flatMap(s=>s.kind==="folder"?s.folder.items:[s.id])];Li(e.filter(s=>s.startsWith("space:")).map(s=>s.slice(6)))});const H=(o?34:32)+Tt;c.useLayoutEffect(()=>{const e=P.current;if(!e)return;const s=()=>{const u=getComputedStyle(e),l=(le.current?.offsetHeight??0)+(re.current?.offsetHeight??0),x=e.clientHeight-parseFloat(u.paddingTop)-parseFloat(u.paddingBottom)-l-(Ne.current?.offsetHeight??0)-2*H-48;Ce(Math.max(2,Math.floor(x/H)))};s();const r=new ResizeObserver(s);return r.observe(e),re.current&&r.observe(re.current),()=>r.disconnect()},[o,H,n.length,v.length,p.length,Y]);const tn=(e,s)=>e<=s?e:s+1,nn=tn(J.length,Yn),vt=tn(ee.length,Un);let ce=nn,pe=vt;if(Y)Y==="top"?ce=q:pe=q;else if(ce+pe>q)if(J.length===0)ce=0,pe=q;else if(ee.length===0)ce=q,pe=0;else{const e=Math.floor(q/2);ce=Math.max(1,Math.min(nn,Math.max(e,q-vt))),pe=Math.max(1,Math.min(vt,q-ce))}const sn=(e,s,r,u,l)=>{if(e.length<=s&&e.length<=l)return{shown:e,tail:[],start:0,max:0};const x=Math.max(0,s-1),E=e.length-x,R=Math.min(Math.max(0,u),E),T=r?e.length-x-R:R;return{shown:e.slice(T,T+x),tail:[...e.slice(0,T),...e.slice(T+x)],start:T,max:E}},Re=sn(J,ce,!1,Q.top,Y==="top"?1/0:Yn),Oe=sn(ee,pe,!0,Q.bottom,Y==="bottom"?1/0:Un),on=m.map(e=>n.find(s=>s.id===`space:${e}`)).filter(e=>!!e).slice(0,Mi(w,q,ce,pe,!!Y)),As=(e,s)=>r=>{const u=oe.current[e];if(!s.max||h||!r.deltaY||!u)return;window.clearTimeout(se.current);let l=F.current[e];l||(l=F.current[e]={px:s.start*H,from:s.start,timer:0},S(E=>({...E,[e]:!0}))),window.clearTimeout(l.timer);const x=r.deltaMode?Math.sign(r.deltaY)*H:Math.max(-H,Math.min(H,r.deltaY));l.px=Math.max(0,Math.min(s.max*H,l.px+x)),u.style.transform=`translateY(${-l.px}px)`,l.timer=window.setTimeout(()=>Fs(e,s),120)},Fs=(e,s)=>{const r=F.current[e],u=oe.current[e];if(!r||!u)return;const l=r.at??r.from,x=r.px-l*H;let E=Math.round(r.px/H);E===l&&x&&(E+=Math.sign(x)),an(e,s,Math.max(0,Math.min(s.max,E)))},an=(e,s,r)=>{const u=oe.current[e];if(!u)return;let l=F.current[e];l||(l=F.current[e]={px:s.start*H,from:s.start,timer:0},S(x=>({...x,[e]:!0}))),window.clearTimeout(l.timer),l.px=r*H,l.at=r,u.style.transform=r?`translateY(${-r*H}px)`:"",l.timer=window.setTimeout(()=>{delete F.current[e],S(x=>({...x,[e]:!1})),Ie(x=>({...x,[e]:e==="top"?r:s.max-r}))},240)};c.useEffect(()=>()=>window.clearTimeout(se.current),[]);const rn=c.useRef(()=>{});rn.current=()=>{if(!h)for(const[e,s]of[["top",Re],["bottom",Oe]])Q[e]&&(s.max&&oe.current[e]?an(e,s,e==="top"?0:s.max):Ie(r=>({...r,[e]:0})))};const cn=!!(Q.top||Q.bottom||Te.top||Te.bottom);c.useEffect(()=>{if(!cn)return;const e=()=>{$n()&&(window.clearTimeout(se.current),se.current=window.setTimeout(()=>{$n()&&rn.current()},Ha))},s=r=>{const u=r.target;r.button!==0||u?.closest?.(".rb-menu, .rb-iconpick, [data-rb-overlay]")||u&&(P.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",s,!0),window.addEventListener("blur",e),()=>{window.removeEventListener("click",s,!0),window.removeEventListener("blur",e)}},[cn]);const ie=z?.folderId?v.find(e=>e.id===z.folderId):void 0,tt=()=>{de.current&&(window.clearTimeout(de.current),de.current=null)},ln=()=>{tt(),de.current=window.setTimeout(()=>{h||M(null)},150)},kt=(e,s,r,u)=>{tt(),M({key:e,zone:s,folderId:u,top:r.getBoundingClientRect().top})};c.useLayoutEffect(()=>{const e=D.current;if(!e||!z)return;const s=e.getBoundingClientRect().bottom-(window.innerHeight-8);s>0&&M({...z,top:Math.max(8,z.top-s)})},[z?.key,ie?.items.length]);const dn=!!z;c.useEffect(()=>{if(!dn)return;const e=r=>{r.key==="Escape"&&M(null)},s=r=>{const u=r.target;!D.current?.contains(u)&&!P.current?.contains(u)&&M(null)};return window.addEventListener("keydown",e),window.addEventListener("mousedown",s),()=>{window.removeEventListener("keydown",e),window.removeEventListener("mousedown",s)}},[dn]),c.useEffect(()=>{if(!Y)return;const e=()=>Le(null),s=u=>{if(u.button!==0)return;const l=u.target;l?.closest?.(".rb-menu, .rb-iconpick, .rb-fly, [data-rb-overlay]")||l&&P.current?.contains(l)&&l.closest("button")||e()},r=u=>{u.key==="Escape"&&e()};return window.addEventListener("pointerdown",s,!0),window.addEventListener("keydown",r),window.addEventListener("blur",e),()=>{window.removeEventListener("pointerdown",s,!0),window.removeEventListener("keydown",r),window.removeEventListener("blur",e)}},[Y,H]);const yt=c.useRef(new Map),un=c.useRef(()=>{});c.useEffect(()=>{un.current=e=>{const s=J[e];if(s){if(s.kind==="folder"){const r=yt.current.get(s.id)??P.current;r&&kt(s.id,"top",r,s.id);return}M(null),s.kind==="cmd"?s.cmd.run():s.id.startsWith("space:")?Fn(s.id.slice(6)):s.item.onClick?.()}}});const mn=Math.min(9,J.length);c.useEffect(()=>{for(let e=1;e<=9;e++){if(e>mn){_n(`space-slot-${e}`);continue}zi({id:`space-slot-${e}`,title:()=>Pi("lcl.ribbon.switchSpace",{n:e}),keywords:`space switch ${e} 切换 空间`,hotkey:`mod+${e}`,run:()=>un.current(e-1)})}return()=>{for(let e=1;e<=9;e++)_n(`space-slot-${e}`)}},[mn]);const pn=(e,s,r,u)=>{e.dataTransfer.effectAllowed="move";const l=e.currentTarget.getBoundingClientRect();e.dataTransfer.setDragImage(e.currentTarget,e.clientX-l.left,e.clientY-l.top),I({id:s,zone:r,from:u})},ye=()=>{we.current=null,I(null),A(null),_(null),y(null)},Ae=h&&fe()?.openSpace?We(h.id):null,fn=c.useRef({dropped:!1,gone:!1}),xt=(e,s)=>{const r=P.current?.getBoundingClientRect();if(!r)return!0;const u=x=>e>=x.left-at&&e<=x.right+at&&s>=x.top-at&&s<=x.bottom+at,l=D.current?.getBoundingClientRect();return u(r)||!!l&&u(l)},hn=e=>{const s=e.target;return!!s&&(!!P.current?.contains(s)||!!D.current?.contains(s))};c.useLayoutEffect(()=>{if(!Ae)return;const e={dropped:!1,gone:!1};fn.current=e;const s=l=>{e.gone=!1,!hn(l)&&(l.preventDefault(),l.stopPropagation(),l.dataTransfer&&(l.dataTransfer.dropEffect="move"),_(x=>x&&null),y(x=>x&&null))},r=l=>{e.dropped=!0,!hn(l)&&(l.preventDefault(),l.stopPropagation(),xt(l.clientX,l.clientY)||fe()?.openSpace?.(Ae,{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",s,!0),window.addEventListener("drop",r,!0),window.addEventListener("dragleave",u,!0),()=>{window.removeEventListener("dragover",s,!0),window.removeEventListener("drop",r,!0),window.removeEventListener("dragleave",u,!0)}},[Ae]);const gn=e=>{const s=fn.current;if(Ae&&!s.dropped){const{clientX:r,clientY:u}=e,l=r<0||u<0||r>window.innerWidth||u>window.innerHeight,x=!l&&/^(IFRAME|WEBVIEW)$/.test(document.elementFromPoint(r,u)?.tagName??"");(l||!xt(r,u)&&(s.gone||x))&&fe()?.openSpace?.(Ae,e.screenX||e.screenY?{screenX:e.screenX,screenY:e.screenY}:void 0)}ye()},xe=(e,s,r)=>{s&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move",r?.())},bn=(e,s)=>{const r=e.querySelectorAll(".rb-slot"),u=r[0]?.getBoundingClientRect().top??0,l=r.length>1?r[1].getBoundingClientRect().top-u:0;return{top:u,pitch:l,grabDy:s??l/2}},wn=(e,s,r)=>_i(s,r,we.current??bn(e)),vn=(e,s)=>{const r=e.parentElement;r&&(we.current=bn(r,s-e.getBoundingClientRect().top))},nt=(e,s,r=h)=>{const u=r;if(ye(),!u||u.zone!==e||u.id===s)return;u.from&&b().moveOutOfFolder(u.id);const l=e==="top"?b().order:b().bottomOrder,x=Fi(l,(e==="top"?J:ee).map(R=>R.id)),E=s?x.indexOf(s):-1;b().setZoneOrder(e,it(x,u.id,E>=0?E:x.length))},st=(e,s,r=h)=>{const u=r;if(ye(),!(!u||u.zone!==e.zone||u.id.startsWith("folder:"))){if(u.from===e.id)b().setFolderItems(e.id,it(e.items,u.id,s??e.items.length));else if(b().moveIntoFolder(e.id,u.id),u.from||b().setZoneOrder(e.zone,Vn(e.zone==="top"?b().order:b().bottomOrder,(e.zone==="top"?J:ee).map(l=>l.id),u.id)),s!==void 0){const l=b().folders.find(x=>x.id===e.id);l&&b().setFolderItems(e.id,it(l.items,u.id,s))}}},St=c.useRef(null);St.current={target:(e,s)=>{const r=document.elementFromPoint(e.clientX,e.clientY),u=!!r&&(!!P.current?.contains(r)||!!D.current?.contains(r));if(u){const x=r.closest("[data-rb-folder]")?.dataset.rbFolder,E=v.find(O=>O.id===x);if(E&&E.zone===s.zone){const O=r.closest("[data-rb-folder-index]");return _(null),y(E.id),A(O?.dataset.id??null),O||kt(E.id,E.zone,r.closest("[data-rb-folder]"),E.id),{kind:"folder",folder:E,at:O?Number(O.dataset.rbFolderIndex):void 0}}const R=r.closest("[data-rb-more]")?.dataset.rbMore;if(R===s.zone)return _(null),y(`more:${R}`),{kind:"bar",zone:s.zone,id:s.zone==="bottom"?ee[0]?.id??null:null};const T=r.closest(".rb-top, .rb-bottom");if(T){const O=T.classList.contains("rb-top")?"top":"bottom";if(O!==s.zone)return{kind:"cancel"};const te=(O==="top"?Re:Oe).shown.map(_e=>_e.id),Fe=wn(T,e.clientY,te.length);return y(null),A(null),_(_e=>_e?.zone===O&&_e.index===Fe?_e:{zone:O,index:Fe}),{kind:"bar",zone:O,id:te[Fe]??null}}}return _(null),y(null),A(null),{kind:e.clientX<0||e.clientY<0||e.clientX>=window.innerWidth||e.clientY>=window.innerHeight||!u&&!xt(e.clientX,e.clientY)?"tear":"cancel"}},drop:(e,s,r)=>{if(r.kind==="bar")nt(r.zone,r.id,s);else if(r.kind==="folder")st(r.folder,r.at,s);else if(ye(),r.kind==="tear"){const u=fe(),l=We(s.id);l&&u?.openSpace?.(l,u.cursorScreenPoint?.()??{screenX:e.screenX,screenY:e.screenY})}}};const kn=(e,s,r,u)=>{if(!fe()?.ribbonPointerDrag||!We(s)||e.button!==0||!e.isPrimary)return;e.stopPropagation(),C.current?.();const l=e.currentTarget,x={id:s,zone:r,from:u};u||vn(l,e.clientY);let E={kind:"cancel"};C.current=Ra(e.nativeEvent,l,{start:()=>{Pe(),tt(),I(x)},move:R=>{E=St.current.target(R,x)},drop:R=>{St.current.drop(R,x,E)},cancel:ye})},yn=e=>!(fe()?.ribbonPointerDrag&&We(e)),xn=Nt.prompt??((e,s)=>Promise.resolve(window.prompt(e,s))),_s=e=>{xn(f("lcl.ribbon.newFolder"),f("lcl.ribbon.folderDefaultName")).then(s=>{const r=s?.trim();r&&b().addFolder(e,r)})},ot=e=>[...e==="top"&&Nt.newSpace?[{label:f("lcl.ribbon.newSpace"),onClick:Nt.newSpace}]:[],...e==="bottom"?[{label:f("lcl.ribbon.addCommand"),onClick:()=>$i(s=>b().addCommandItem(s))}]:[],{label:f(e==="top"?"lcl.ribbon.newFolderSpaces":"lcl.ribbon.newFolderCommands"),onClick:()=>_s(e)}],Bs=e=>s=>{s.defaultPrevented||(s.preventDefault(),B({x:s.clientX,y:s.clientY,entries:ot(e)}))},$s=e=>{e.defaultPrevented||e.nativeEvent===Xt.current||(e.preventDefault(),B({x:e.clientX,y:e.clientY,entries:[...ot("top"),...ot("bottom")]}))},Sn=(e,s,r,u)=>{B(null),G({x:e,y:s,current:r,apply:u})},Vs=e=>s=>{s.preventDefault(),s.stopPropagation();const r=s.clientX,u=s.clientY;B({x:r,y:u,entries:[{label:f("lcl.ribbon.changeIcon"),onClick:()=>Sn(r,u,e.icon,l=>b().setFolderIcon(e.id,l))},{label:f("lcl.ribbon.rename"),onClick:()=>{xn(f("lcl.ribbon.renameFolder"),e.name).then(l=>{const x=l?.trim();x&&b().renameFolder(e.id,x)})}},{label:f("lcl.ribbon.dissolveFolder"),onClick:()=>b().removeFolder(e.id)}]})},jn=e=>{const s=We(e.id),r=fe()?.openSpace;return[...s&&r?[{label:f("lcl.ribbon.openInNewWindow"),onClick:()=>r(s)}]:[],...e.menu?.()??[]]},En=e=>s=>{if(s.defaultPrevented)return;const r=jn(e);r.length&&(s.preventDefault(),s.stopPropagation(),B({x:s.clientX,y:s.clientY,entries:r}))},Cn=e=>s=>{s.preventDefault(),s.stopPropagation();const r=s.clientX,u=s.clientY;B({x:r,y:u,entries:[{label:f("lcl.ribbon.setIcon"),onClick:()=>Sn(r,u,b().commandIcons[e],l=>b().setCommandIcon(e,l))},{label:f("lcl.ribbon.removeCommand"),onClick:()=>b().removeCommandItem(e)}]})},Hs=e=>{const s=It(e.icon)??bs;return t.jsxs("button",{ref:r=>{r?yt.current.set(e.id,r):yt.current.delete(e.id)},className:`rb-btn rb-folder${X===e.id?" drag-into":""}`,"data-rb-folder":e.id,"aria-label":`${e.name} (${Jt(e)})`,onMouseEnter:r=>kt(e.id,e.zone,r.currentTarget,e.id),onMouseLeave:ln,onContextMenu:Vs(e),onDragOver:r=>xe(r,!!h&&h.zone===e.zone&&!h.id.startsWith("folder:"),()=>{_(null),y(e.id)}),onDragLeave:()=>{X===e.id&&y(null)},onDrop:r=>{!h||h.id.startsWith("folder:")||(r.preventDefault(),r.stopPropagation(),st(e))},children:[t.jsx(s,{size:18}),e.items.some(r=>i.has(r))&&t.jsx("span",{className:"rb-badge rb-dot","aria-hidden":"true"}),o&&t.jsx("span",{className:"rb-label",children:e.name})]})},Nn=e=>{const s=Y===e,r=f(s?"lcl.ribbon.less":"lcl.ribbon.more"),u=s?e==="top"?ka:Rt:Vi;return t.jsxs("button",{className:`rb-btn rb-more${s?" is-open":""}${X===`more:${e}`?" drag-into":""}`,"data-rb-more":e,"aria-label":r,"aria-expanded":s,"data-rb-tip":o?void 0:r,onClick:()=>Le(s?null:e),onDragOver:l=>xe(l,!!h&&h.zone===e,()=>{_(null),y(`more:${e}`)}),onDragLeave:()=>{X===`more:${e}`&&y(null)},onDrop:l=>{l.preventDefault(),l.stopPropagation(),nt(e,e==="bottom"?ee[0]?.id??null:null)},children:[t.jsx(u,{size:18}),!s&&(e==="top"?Re:Oe).tail.some(l=>l.kind==="item"?i.has(l.id):l.kind==="folder"&&l.folder.items.some(x=>i.has(x)))&&t.jsx("span",{className:"rb-badge rb-dot","aria-hidden":"true"}),o&&t.jsx("span",{className:"rb-label",children:r})]})},jt=(e,s)=>{const r=s??o;return e.kind==="item"?t.jsx(He,{item:e.item,expanded:r,dot:i.has(e.id)}):e.kind==="cmd"?t.jsx(Va,{cmd:e.cmd,expanded:r,overrideIcon:It(g[e.cmd.id])}):Hs(e.folder)},Ws=(e,s,r,u,l,x)=>{const E=u?u.indexOf(e.id):r;return t.jsxs("div",{"data-id":e.id,className:`rb-slot${h?.id===e.id?" dragging":""}${l?" drag-over":""}`,style:E!==r?{transform:`translateY(${(E-r)*H}px)`}:void 0,draggable:yn(e.id),onPointerDown:R=>kn(R,e.id,s,null),onDragStart:R=>{vn(R.currentTarget,R.clientY),pn(R,e.id,s,null)},onDragEnd:gn,onContextMenu:e.kind==="cmd"?Cn(e.cmd.id):e.kind==="item"?En(e.item):void 0,children:[jt(e),s==="top"&&o&&Kn(x)&&t.jsx("span",{className:"rb-key",children:Kn(x)})]},e.id)},Et=e=>f(e==="top"?"lcl.ribbon.addSpaceOrFolder":"lcl.ribbon.addCommand"),In=e=>t.jsxs("button",{className:"rb-btn rb-plus","aria-label":Et(e),"data-rb-tip":o?void 0:Et(e),onClick:s=>{const r=s.currentTarget.getBoundingClientRect();B({x:r.right+6,y:r.top,entries:ot(e)})},children:[t.jsx(Dt,{size:16}),o&&t.jsx("span",{className:"rb-label",children:Et(e)})]}),Tn=(e,s)=>{const r=s.shown.map(l=>l.id),u=h&&L?.zone===e&&r.includes(h.id)?it(r,h.id,L.index):null;return t.jsxs("div",{className:`rb-group rb-${e}`,onContextMenu:Bs(e),onWheel:As(e,s),onDragOver:l=>{const x=wn(l.currentTarget,l.clientY,r.length);xe(l,!!h&&h.zone===e,()=>{y(null),_(E=>E?.zone===e&&E.index===x?E:{zone:e,index:x})})},onDrop:l=>{l.preventDefault(),l.stopPropagation(),nt(e,(L?.zone===e?r[L.index]:null)??null)},children:[e==="bottom"&&t.jsxs(t.Fragment,{children:[In(e),(s.tail.length>0||Y===e)&&Nn(e)]}),t.jsx("div",{className:"rb-strip","data-guide-anchor":e==="top"?"ribbon-spaces":void 0,style:{height:Math.max(0,s.shown.length*H-Tt)},children:t.jsx("div",{ref:l=>{oe.current[e]=l},className:"rb-strip-in",style:s.start?{transform:`translateY(${-s.start*H}px)`}:void 0,children:(e==="top"?J:ee).map((l,x)=>{const E=x-s.start;return E>=0&&E<s.shown.length?Ws(l,e,E,u,!u&&L?.zone===e&&L.index===E,x):t.jsx("div",{className:"rb-cell","aria-hidden":!0,inert:!0,style:{height:H-Tt},children:(Te[e]||Z)&&jt(l)},l.id)})})}),e==="top"&&t.jsxs(t.Fragment,{children:[(s.tail.length>0||Y===e)&&Nn(e),In(e)]})]})},Ys=(e,s,r,u)=>t.jsx("div",{"data-id":e.id,className:`rb-fly-row${h?.id===e.id?" dragging":""}${j===e.id&&h?.id!==e.id?` drag-over${h&&u.indexOf(h.id)>=0&&u.indexOf(h.id)<r?" below":""}`:""}`,"data-rb-folder":s.id,"data-rb-folder-index":r,draggable:yn(e.id),onPointerDown:l=>kn(l,e.id,s.zone,s.id),onDragStart:l=>{l.stopPropagation(),pn(l,e.id,s.zone,s.id)},onDragOver:l=>xe(l,!!h&&h.zone===s.zone&&h.id!==e.id&&!h.id.startsWith("folder:"),()=>A(e.id)),onDragLeave:()=>{j===e.id&&A(null)},onDrop:l=>{l.preventDefault(),l.stopPropagation(),st(s,r)},onDragEnd:gn,onContextMenu:e.kind==="cmd"?Cn(e.cmd.id):l=>{l.preventDefault(),l.stopPropagation(),B({x:l.clientX,y:l.clientY,entries:[...e.kind==="item"?jn(e.item):[],{label:f("lcl.ribbon.moveOut"),onClick:()=>{b().moveOutOfFolder(e.id);const x=s.zone==="top"?b().order:b().bottomOrder;b().setZoneOrder(s.zone,[...Vn(x,(s.zone==="top"?J:ee).map(E=>E.id),e.id),e.id])}}]})},children:jt(e,!0)},e.id);return t.jsxs("div",{ref:P,className:`rb${o?" rb-expanded":""}${h?" rb-dragging":""}${Y?` rb-open-${Y}`:""}`,onContextMenu:$s,onMouseOver:e=>{Ps(e),Ms(e)},onMouseLeave:()=>{Pe(),window.clearTimeout(ke.current),Ze.current=null},onMouseDownCapture:e=>{Pe(),window.clearTimeout(ke.current),ze.current=e.target.closest("[data-rb-tip]")},onDragOver:e=>xe(e,!!h),onDrop:e=>{if(!h)return;e.preventDefault();const s=h.zone,r=L?.zone===s?(s==="top"?Re:Oe).shown[L.index]?.id:void 0;if(r===void 0){ye();return}nt(s,r)},children:[t.jsxs("div",{ref:le,className:"rb-head",children:[t.jsxs("button",{className:"rb-btn rb-toggle","aria-label":f(o?"lcl.ribbon.iconsOnly":"lcl.ribbon.showLabels"),"aria-expanded":o,"data-rb-tip":o?void 0:f("lcl.ribbon.showLabels"),onClick:()=>b().toggleExpanded(),children:[o?t.jsx(Ta,{size:18}):t.jsx(Ma,{size:18}),o&&t.jsx("span",{className:"rb-label",children:f("lcl.ribbon.iconsOnly")})]}),Os.map(e=>t.jsx(He,{item:e,expanded:o},e.id))]}),t.jsx("div",{ref:Ne,className:"rb-group rb-home",children:en.map(e=>t.jsx(He,{item:e,expanded:o},e.id))}),Y!=="bottom"&&Tn("top",Re),on.length>0&&t.jsx("div",{className:"rb-group rb-recent",role:"group","aria-label":f("lcl.ribbon.recentSpaces"),children:on.map(e=>t.jsx("div",{className:"rb-recent-slot","data-recent-id":e.id,onContextMenu:En(e),children:t.jsx(He,{item:e,expanded:o})},e.id))}),Y!=="top"&&Tn("bottom",Oe),t.jsx("div",{ref:re,className:"rb-group rb-pinned",children:Rs.map(e=>t.jsx(He,{item:e,expanded:o},e.id))}),z&&ie&&t.jsxs("div",{ref:D,className:"rb-fly","data-rb-folder":ie.id,style:(()=>{const e=ct(P.current);return{left:((P.current?.getBoundingClientRect().right??44)+4)/e,top:z.top/e}})(),onMouseEnter:tt,onMouseLeave:ln,onDragOver:e=>xe(e,!!h&&h.zone===z.zone&&!h.id.startsWith("folder:")&&e.target===e.currentTarget),onDrop:e=>{e.target===e.currentTarget&&(e.preventDefault(),st(ie))},children:[t.jsx("div",{className:"rb-fly-head",children:ie.name}),Jt(ie)===0&&t.jsx("div",{className:"rb-fly-empty",children:f("lcl.ribbon.folderEmpty")}),ie.items.map((e,s)=>{const r=et.get(e);return r?Ys(r,ie,s,ie.items):null})]}),U&&Kt&&P.current?.parentElement&&Di.createPortal(t.jsx(Ri,{ref:gt,space:Kt,views:U.views,style:zs(),onContextMenuCapture:e=>{Xt.current=e.nativeEvent},onBeforeClick:()=>{U.spaceId!==K.getState().activeSpaceId&&Oi()},onEnter:U.spaceId===K.getState().activeSpaceId?void 0:()=>{me(),Fn(U.spaceId)}}),P.current.parentElement),Me&&!o&&t.jsx("div",{className:"rb-tip",role:"tooltip",style:(()=>{const e=ct(P.current);return{left:((P.current?.getBoundingClientRect().right??44)+6)/e,top:Me.mid/e}})(),children:Me.text}),V&&t.jsx("div",{className:"rb-menu-backdrop",onMouseDown:()=>B(null),onContextMenu:e=>{e.preventDefault(),B(null)},children:t.jsx(Bn,{className:"rb-menu",x:V.x,y:V.y,onMouseDown:e=>e.stopPropagation(),children:V.entries.map((e,s)=>t.jsx("button",{onClick:()=>{B(null),e.onClick()},children:e.label},s))})}),$&&t.jsx("div",{className:"rb-menu-backdrop",onMouseDown:()=>G(null),onContextMenu:e=>{e.preventDefault(),G(null)},children:t.jsxs(Bn,{className:"rb-iconpick",x:$.x,y:$.y,onMouseDown:e=>e.stopPropagation(),children:[t.jsx("button",{className:"rb-iconpick-reset",onClick:()=>{const e=$.apply;G(null),e("")},children:f("lcl.ribbon.defaultIcon")}),t.jsx("div",{className:"rb-iconpick-grid",children:Da.map(e=>{const s=It(e);return t.jsx("button",{className:`rb-iconpick-btn${$.current===e?" on":""}`,title:e,onClick:()=>{const r=$.apply;G(null),r(e)},children:t.jsx(s,{size:17})},e)})})]})})]})}const Xn=8,Ya=n=>n.dataset.lclShift==="end"?Xn:n.dataset.lclShift==="start"?-Xn:0;function Ua(){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),i=3;for(const o of document.querySelectorAll(".dv-sash")){const d=!!o.closest(".dv-split-view-container.dv-horizontal"),a=o.getBoundingClientRect();if(!a.width&&!a.height)continue;const v=d?a.left+a.width/2:a.top+a.height/2,[p,g]=d?[a.top,a.bottom]:[a.left,a.right];let w=null,m=null;for(const f of n){const[b,h,I,C]=d?[f.r.left,f.r.right,f.r.top,f.r.bottom]:[f.r.top,f.r.bottom,f.r.left,f.r.right];C<=p||I>=g||(w===null&&Math.abs(h-v)<=i&&(w=f.papery),m===null&&Math.abs(b-v)<=i&&(m=f.papery))}const k=w===!1&&m===!0?"end":w===!0&&m===!1?"start":"";k?o.dataset.lclShift=k:delete o.dataset.lclShift}}function Ka(){const n=document.createElement("div");n.className="lcl-sash-tick",document.body.appendChild(n);let i=null,o=0;const d=(b,h)=>{const I=!!b.closest(".dv-split-view-container.dv-horizontal"),C=b.getBoundingClientRect(),j=Ya(b);cancelAnimationFrame(o),o=requestAnimationFrame(()=>{n.classList.add("show"),n.classList.toggle("h",!I);const A=ct(n);I?(n.style.left=`${(C.left+C.width/2+j)/A}px`,n.style.top=`${Math.min(Math.max(h.clientY,C.top),C.bottom)/A}px`):(n.style.left=`${Math.min(Math.max(h.clientX,C.left),C.right)/A}px`,n.style.top=`${(C.top+C.height/2+j)/A}px`)})},a=b=>b instanceof Element?b.closest(".dv-sash"):null,v=b=>{const h=i instanceof HTMLElement?i:a(b.target);h?d(h,b):n.classList.contains("show")&&(cancelAnimationFrame(o),n.classList.remove("show"))},p=b=>{i=a(b.target)},g=b=>{i&&(i=null,a(b.target)||(cancelAnimationFrame(o),n.classList.remove("show")))};let w=0;const m=()=>{window.clearTimeout(w),w=window.setTimeout(Ua,120)},k=b=>b instanceof Element&&(b.matches(".dv-sash, .dv-view, .dv-groupview")||!!b.querySelector(".dv-sash, .dv-groupview")),f=new MutationObserver(b=>{for(const h of b)for(const I of[...h.addedNodes,...h.removedNodes])if(k(I)){m();return}});return f.observe(document.body,{childList:!0,subtree:!0}),m(),document.addEventListener("pointermove",v,{passive:!0}),document.addEventListener("pointerdown",p,{passive:!0}),document.addEventListener("pointerup",g,{passive:!0}),()=>{f.disconnect(),window.clearTimeout(w),cancelAnimationFrame(o),document.removeEventListener("pointermove",v),document.removeEventListener("pointerdown",p),document.removeEventListener("pointerup",g),n.remove()}}const ks=({dark:n,soft:i,buildDefault:o,header:d,noRibbon:a,footer:v})=>(c.useEffect(()=>Ui(),[]),c.useEffect(()=>Ka(),[]),fs==="mobile"?t.jsxs(t.Fragment,{children:[t.jsx(Ki,{dark:n,soft:i,buildDefault:o}),t.jsx(Ln,{})]}):t.jsxs("div",{className:`shell${a?" shell--noribbon":""}`,children:[d,t.jsxs("div",{className:"shell-top",children:[!a&&t.jsx(Wa,{}),t.jsxs("div",{className:"shell-work",children:[t.jsx(ba,{dark:n,soft:i,buildDefault:o}),v]})]}),t.jsx(Ln,{})]})),Xa=["n","s","e","w","ne","nw","se","sw"],Lt=n=>{const i=n.currentTarget,o=i.dataset.edge,d={x:n.screenX,y:n.screenY};if(n.type==="pointerdown"){if(n.button!==0)return;i.setPointerCapture(n.pointerId),window.tangu?.miniResize?.(o,!0,d)}else n.type==="pointermove"?i.hasPointerCapture(n.pointerId)&&window.tangu?.miniResize?.(o,!1,d):(n.type==="pointerup"&&i.hasPointerCapture(n.pointerId)&&window.tangu?.miniResize?.(o,!1,d),window.tangu?.miniResize?.(null))},ys=({buildDefault:n,direct:i,resizable:o})=>{const d=K(y=>y.spaces),a=K(y=>y.activeSpaceId),[,v]=c.useReducer(y=>y+1,0);c.useEffect(()=>Ee(v),[]);const p=d.filter(ft),g=p.find(y=>y.id===a),w=Ve(y=>y.mainLeaves.find(z=>z.id===y.activeMainId)),[m,k]=c.useState(null),f=Qs();c.useEffect(()=>k(null),[w?.id,w?.type]);const b=m==="picker"&&!f?null:m,{t:h}=ps(),I=g?.icon,C=i?ge(i.view.type):void 0,j=c.useRef(!1);C&&(j.current=!0),c.useEffect(()=>{i&&j.current&&!C&&window.tangu?.closeSelf?.()},[i,C]);const A=i?.title||(C?je(C.displayName):g?je(g.mini?.name??g.name):"Mini Panel");c.useEffect(()=>{const y=Ve.getState();if(y.setDefaultBuilder(n),!i)if(g)y.getActiveLeaf()?.type!==g.mini.view.type&&y.resetLayout();else{const z=p.find(M=>M.id==="tangu")??p[0];z&&Xi(z.id),y.resetLayout()}},[d,a,g,n,i]),c.useEffect(()=>{const y=z=>{z.key==="Escape"&&k(null)};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[]);const L=w&&(i?w.type===i.view.type:g&&w.type===g.mini.view.type)?Ve.getState().getActiveLeaf():null,_=L?ge(L.type):null,X=()=>{if(i){ut({type:i.mainView.type,params:{...i.mainView.params,...Ve.getState().getActiveLeaf()?.params}});return}const y=Ht();y?.mini&&ut({spaceId:y.id,type:y.mini.mainView.type,params:{...y.mini.mainView.params,...Ve.getState().getActiveLeaf()?.params}})};return t.jsxs("div",{className:"mini-card-shell mini-card-floating","data-space":i?"direct":g?.id,children:[t.jsxs("header",{className:"mini-card-chrome",children:[t.jsxs("div",{className:"mini-card-cap",children:[t.jsxs("button",{className:"mini-card-space","aria-label":h("lcl.mini.switchSpace"),"aria-expanded":b==="space",disabled:!!i||p.length<2,onClick:()=>k(b==="space"?null:"space"),children:[!i&&I&&t.jsx(I,{size:15}),(i||!f)&&t.jsx("span",{children:A}),!i&&p.length>1&&t.jsx(Rt,{size:12})]}),f&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"mini-card-cap-div"}),t.jsxs("button",{className:"mini-card-picker","aria-label":f.label,"aria-expanded":b==="picker",onClick:()=>k(b==="picker"?null:"picker"),children:[t.jsx("span",{children:f.items.find(y=>y.id===f.value)?.label||f.placeholder}),t.jsx(Rt,{size:12})]})]})]}),t.jsx("div",{className:"mini-card-drag-title"}),t.jsxs("div",{className:"mini-card-cap",children:[f?.create&&t.jsx("button",{className:"mini-card-action","aria-label":f.create.label,title:f.create.label,disabled:f.create.disabled,onClick:()=>Ct()?.create?.onCreate(),children:t.jsx(Dt,{size:15})}),t.jsx("button",{className:"mini-card-action","aria-label":h("lcl.mini.showMain"),title:h("lcl.mini.showMain"),disabled:!i&&!g,onClick:X,children:t.jsx(Do,{size:15})}),t.jsx("button",{className:"mini-card-action mini-card-close","aria-label":h("lcl.mini.close"),onClick:()=>window.tangu?.closeSelf?.(),children:t.jsx(Vt,{size:15})})]})]}),t.jsx("main",{className:"mini-card-main",children:L&&_?t.jsx("div",{className:"mini-panel-view","data-view":L.type,children:t.jsx(hs,{children:t.jsx(c.Suspense,{fallback:null,children:_.factory({leaf:L,params:L.params})})})},`${L.id}:${L.type}`):t.jsx("div",{className:"mini-panel-empty",children:h("lcl.mini.empty")})}),b&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"mini-card-dismiss","aria-label":h("lcl.mini.closeMenu"),onClick:()=>k(null)}),b==="space"&&t.jsx("section",{className:"mini-card-popover","aria-label":h("lcl.mini.switchSpace"),children:t.jsx("div",{className:"mini-card-popover-list",children:p.map(y=>{const z=y.icon;return t.jsxs("button",{className:`mini-card-row${y.id===a?" active":""}`,onClick:()=>{Ke(y.id),k(null)},children:[z&&t.jsx(z,{size:15}),t.jsx("span",{className:"mini-card-row-label",children:je(y.mini.name??y.name)})]},y.id)})})}),b==="picker"&&f&&t.jsxs("section",{className:"mini-card-popover mini-card-popover--picker","aria-label":f.label,children:[t.jsx("div",{className:"mini-card-popover-title",children:f.label}),t.jsxs("div",{className:"mini-card-popover-list",children:[f.create&&t.jsxs("button",{className:"mini-card-row mini-card-row-new",disabled:f.create.disabled,onClick:()=>{k(null),Ct()?.create?.onCreate()},children:[t.jsx(Dt,{size:15}),t.jsx("span",{className:"mini-card-row-label",children:f.create.label})]}),f.items.map(y=>t.jsxs("button",{className:`mini-card-row${y.id===f.value?" active":""}`,onClick:()=>{k(null),Ct()?.onSelect(y.id)},children:[t.jsx("span",{className:"mini-card-row-label",children:y.label}),y.id===f.value&&t.jsx(gs,{size:14})]},y.id))]})]})]}),o&&Xa.map(y=>t.jsx("div",{className:"mini-card-edge","data-edge":y,onPointerDown:Lt,onPointerMove:Lt,onLostPointerCapture:Lt},y))]})};function qa(){return t.jsx("div",{className:"mac-titlebar"})}const Mt=9e3,lt=5*1024*1024;function Ot(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(Ot):n&&typeof n=="object"?Object.fromEntries(Object.entries(n).map(([i,o])=>[i,/^(?:token|.*api[_-]?key|access[_-]?token|refresh[_-]?token|password|secret|authorization|cookie|set-cookie)$/i.test(i)?"[redacted]":Ot(o)])):n}async function Ga(n,i,o){const d=await Js(n,i,{...o,maxBytes:lt});let a=Ot({...d,feedbackSelection:o});const v=w=>{const m=JSON.stringify(w,null,2);return{json:m,bytes:new TextEncoder().encode(m).byteLength}};let p=v(a);const g=a.messages||[];if(p.bytes>lt&&g.length){const w=f=>({...a,messageCount:f,messagesTruncated:!0,messages:g.slice(g.length-f)});let m=0,k=g.length-1;for(;m<k;){const f=Math.ceil((m+k)/2);v(w(f)).bytes<=lt?m=f:k=f-1}a=w(m),p=v(a)}return{...p,filename:`tangu-feedback-${i?.id.slice(0,8)||"app"}-${new Date().toISOString().slice(0,10)}.json`,missing:Object.entries(d.sources).filter(([,w])=>w!=="included").map(([w])=>w),truncated:!!a.messagesTruncated||!!a.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:"整段对话,包含工具输入与输出;附件超过 5 MB 时保留最新的部分。",en:"The whole conversation, including tool inputs and outputs. If the attachment exceeds 5 MB, the most recent part is kept."},"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 older records were left out because of collection limits; 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 xs(n){N.getState().setPendingDraft(n),W.getState().openView("chat",{followActive:!0,reuseKey:"primary"},"main")}const Ss=({cfg:n,activeSession:i,onClose:o,surface:d="modal"})=>{const{t:a}=be(),[v]=c.useState(()=>({cfg:n,session:i})),p=N(S=>S.feedbackDraft),[g,w]=c.useState("bug"),[m,k]=c.useState(!0),[f,b]=c.useState(!1),[h,I]=c.useState(!1),[C,j]=c.useState(0),[A,L]=c.useState(null),[_,X]=c.useState(!1),[y,z]=c.useState(!1),[M,V]=c.useState(null),[B,$]=c.useState(""),G=c.useRef(null),q=c.useRef(!1),Ce=c.useRef(o);Ce.current=o;const P=m||f||h,le=`${m}:${f}:${h}:${C}`,Ne=A?.key===le?A:null,re=P&&!Ne,D=P?Ne?.report:void 0,de=!!D&&D.bytes>lt,se=p.trim().length>Mt,we=!!p.trim()&&!se&&!y&&!M&&!re&&!de&&(!P||!!D),Q=()=>{q.current||Ce.current()};c.useEffect(()=>{if(!P)return;let S=!0;return Ga(v.cfg,v.session,{diagnostics:m,conversation:f,activity:h}).then(F=>{S&&L({key:le,report:F})}).catch(()=>{S&&L({key:le,failed:!0})}),()=>{S=!1}},[v,m,f,h,C,le,P]),c.useEffect(()=>{const S=document.activeElement,F=requestAnimationFrame(()=>G.current?.querySelector("textarea")?.focus()),oe=Z=>{if(Z.key==="Escape"&&(Z.preventDefault(),Z.stopImmediatePropagation(),q.current||Ce.current()),Z.key==="Tab"){const ve=Array.from(G.current?.querySelectorAll('button:not(:disabled), textarea:not(:disabled), input:not(:disabled), [tabindex="0"]')||[]).filter(Me=>Me.getClientRects().length>0),ue=ve[0],Le=ve[ve.length-1];if(!ue){Z.preventDefault(),G.current?.focus();return}Z.shiftKey&&(document.activeElement===ue||!G.current?.contains(document.activeElement))?(Z.preventDefault(),Le.focus()):!Z.shiftKey&&(document.activeElement===Le||!G.current?.contains(document.activeElement))&&(Z.preventDefault(),ue.focus())}};return document.addEventListener("keydown",oe,!0),()=>{cancelAnimationFrame(F),document.removeEventListener("keydown",oe,!0),S?.focus()}},[]);const Ie=async()=>{if(!(!we||q.current)){if(!window.tangu?.submitFeedback){$(a("feedback.errUnavailable"));return}q.current=!0,z(!0),$("");try{const S=await window.tangu.submitFeedback({description:`[Tangu · ${a(`feedback.${g}`)}]
13
+
14
+ ${p.trim()}`,...D?{sessionLogJson:D.json,sessionLogName:D.filename}:{}});S.ok?(V(S),N.setState({feedbackDraft:""})):$(S.error==="attachment-too-large"?a("feedback.tooLarge"):a("feedback.errFail",{err:S.error==="not-logged-in"?a("feedback.errNotLoggedIn"):S.error||"Unknown error"}))}catch(S){$(a("feedback.errFail",{err:String(S?.message||S)}))}finally{q.current=!1,z(!1)}}},Y=()=>{if(!p.trim()||y)return;const S=a("feedback.diagnosePrompt",{description:p.trim()});window.tangu?.requestMainAction?window.tangu.requestMainAction("chat-draft",S):xs(S),Q()},qe=D?`${(D.bytes/1024).toFixed(1)} KB`:"",Te=()=>{if(!D)return;const S=URL.createObjectURL(new Blob([D.json],{type:"application/json;charset=utf-8"})),F=document.createElement("a");F.href=S,F.download=D.filename,F.click(),setTimeout(()=>URL.revokeObjectURL(S),1e4)};return t.jsx("div",{className:d==="panel"?"feedback-panel-surface":"memv-modal feedback-overlay",onClick:S=>{d==="modal"&&S.target===S.currentTarget&&Q()},children:t.jsxs("div",{ref:G,className:"modal feedback-modal",role:"dialog","aria-modal":"true","aria-labelledby":"feedback-title",tabIndex:-1,onKeyDown:S=>{(S.metaKey||S.ctrlKey)&&S.key==="Enter"&&!S.nativeEvent.isComposing&&(S.preventDefault(),Ie())},children:[t.jsxs("div",{className:"modal-head feedback-head",children:[t.jsxs("div",{className:"feedback-heading",children:[t.jsx(zn,{size:19}),t.jsxs("div",{children:[t.jsx("h2",{id:"feedback-title",children:a("feedback.title")}),t.jsx("p",{children:a("feedback.subtitle")})]})]}),t.jsx("button",{className:"icon-btn",onClick:Q,disabled:y,"aria-label":a("settings.btn.cancel"),children:t.jsx(Vt,{size:18})})]}),M?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(gs,{size:28})}),t.jsx("h3",{children:a("feedback.successTitle")}),t.jsx("p",{children:a("feedback.successHint")}),M.id&&t.jsx("code",{children:a("feedback.ticket",{id:M.id})}),M.attachmentSkipped&&t.jsx("p",{className:"feedback-warning",children:a("feedback.okNoLog")}),B&&t.jsx("p",{className:"feedback-warning",role:"alert",children:B})]}),t.jsxs("div",{className:"feedback-footer",children:[window.tangu?.openAccountCenter&&t.jsx("button",{className:"btn ghost",onClick:()=>{$(""),window.tangu.openAccountCenter("feedback").catch(()=>$(a("feedback.errUnavailable")))},children:a("feedback.viewFeedback")}),t.jsx("span",{className:"grow"}),t.jsx("button",{autoFocus:!0,className:"btn primary",onClick:Q,children:a("feedback.done")})]})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"modal-body feedback-body",children:[_?t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn ghost sm feedback-back",onClick:()=>X(!1),children:[t.jsx(qi,{size:14}),a("feedback.backToForm")]}),t.jsxs("div",{className:"feedback-file",children:[t.jsx(Pt,{size:15}),t.jsx("span",{children:D?.filename}),t.jsx("span",{children:qe})]}),t.jsx("pre",{className:"feedback-preview",tabIndex:0,children:D?.json})]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"feedback-kinds",role:"group","aria-label":a("feedback.kind"),children:[{id:"bug",Icon:Gi},{id:"idea",Icon:ts},{id:"other",Icon:zn}].map(({id:S,Icon:F})=>t.jsxs("button",{className:"btn ghost","aria-pressed":g===S,disabled:y,onClick:()=>w(S),children:[t.jsx(F,{size:15}),a(`feedback.${S}`)]},S))}),t.jsxs("div",{className:"feedback-description",children:[t.jsx("label",{htmlFor:"feedback-description",children:a(g==="bug"?"feedback.description":"feedback.label")}),t.jsx("textarea",{id:"feedback-description",value:p,onChange:S=>{N.setState({feedbackDraft:S.target.value}),$("")},placeholder:a(`feedback.${g}Placeholder`),disabled:y,"aria-invalid":se,"aria-describedby":"feedback-count"}),t.jsxs("span",{id:"feedback-count",className:se?"feedback-warning":"feedback-count",children:[p.trim().length.toLocaleString()," / ",Mt.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:a("feedback.context")}),t.jsx("code",{children:"/feedback"})]}),t.jsx("p",{className:"feedback-session",children:v.session?a("feedback.sessionContext",{name:v.session.title||v.session.id.slice(0,8)}):a("feedback.withoutSession")}),[{id:"diagnostics",checked:m,change:k,unavailable:!1},{id:"conversation",checked:f,change:b,unavailable:!v.session},{id:"activity",checked:h,change:I,unavailable:!window.tangu?.exportActivity}].map(S=>t.jsxs("label",{className:"feedback-option","data-disabled":S.unavailable||void 0,children:[t.jsx("input",{type:"checkbox",checked:S.checked,onChange:F=>S.change(F.target.checked),disabled:y||S.unavailable}),t.jsxs("span",{children:[t.jsx("strong",{children:a(`feedback.${S.id}`)}),t.jsx("small",{children:a(`feedback.${S.id}Hint`)})]})]},S.id))]}),t.jsxs("div",{className:"feedback-report-status",role:"status",children:[t.jsx("span",{children:re?t.jsxs(t.Fragment,{children:[t.jsx(Pn,{size:13,className:"spin"}),a("feedback.preparing")]}):D?t.jsxs(t.Fragment,{children:[t.jsx(Pt,{size:13}),a("feedback.ready",{size:qe})]}):a(P?"feedback.prepareFailed":"feedback.textOnly")}),t.jsxs("div",{children:[D&&t.jsx("button",{className:"btn ghost sm",onClick:()=>X(!0),disabled:y,children:a("feedback.preview")}),D&&t.jsxs("button",{className:"btn ghost sm",onClick:Te,disabled:y,children:[t.jsx(Ro,{size:13}),a("feedback.export")]}),P&&t.jsx("button",{className:"icon-btn",onClick:()=>j(S=>S+1),disabled:y||re,"aria-label":a("feedback.refresh"),title:a("feedback.refresh"),children:t.jsx(At,{size:13})})]})]}),!!D?.missing.length&&t.jsx("p",{className:"feedback-warning",children:a("feedback.partial",{sources:D.missing.map(S=>a(`feedback.source.${S}`)).join(", ")})}),D?.truncated&&t.jsx("p",{className:"feedback-note",children:a("feedback.truncated")}),P&&t.jsx("p",{className:"feedback-note",children:a("feedback.privacy")})]}),de&&t.jsx("p",{className:"feedback-warning",role:"alert",children:a("feedback.tooLarge")}),se&&t.jsx("p",{className:"feedback-warning",role:"alert",children:a("feedback.limit",{max:Mt})}),B&&t.jsx("p",{className:"feedback-warning",role:"alert",children:B})]}),t.jsxs("div",{className:"feedback-footer",children:[t.jsxs("button",{className:"btn ghost feedback-diagnose",onClick:Y,disabled:y||!p.trim(),title:a("feedback.diagnoseViaChatHint"),children:[t.jsx(Zi,{size:15}),a("feedback.diagnoseViaChat")]}),t.jsx("span",{className:"grow"}),t.jsxs("button",{className:"btn primary",onClick:()=>{Ie()},disabled:!we,children:[y&&t.jsx(Pn,{size:14,className:"spin"}),a(y?"feedback.sending":B?"feedback.retry":"feedback.submit")]})]})]})]})})};mt({"syncSetup.title":{zh:"把这台电脑同步到蓬洲云",en:"Sync this computer to Penzor Cloud"},"syncSetup.lead":{zh:"已登录「{name}」。勾着的会和你的其他设备保持一致,以后随时可以在蓬洲云 › 同步里关。",en:"Signed in as {name}. Checked items stay in sync with your other devices. You can turn them off anytime in Penzor Cloud › Sync."},"syncSetup.notes":{zh:"智库「{name}」",en:'Notes vault "{name}"'},"syncSetup.notesAny":{zh:"这台电脑的智库",en:"Notes vault on this computer"},"syncSetup.notesSize":{zh:"{size} · 用掉设备同步 {max} 里的 {pct}%",en:"{size} · {pct}% of your {max} device sync storage"},"syncSetup.notesOver":{zh:"{size},超过设备同步的 {max}:放不下的先留在这台电脑,不会删除",en:"{size}, more than your {max} device sync storage. What doesn't fit stays on this computer. Nothing is deleted."},"syncSetup.notesHint":{zh:"整个本机智库,和你的其他电脑保持一致",en:"Your whole local vault, kept the same on your other computers"},"syncSetup.agents":{zh:"Agents 与记忆",en:"Agents & memory"},"syncSetup.agentsHint":{zh:"Agents 的记忆、日志、技能和协作说明",en:"Your agents' memory, logs, skills and collaboration notes"},"syncSetup.plugins":{zh:"插件数据",en:"Plugin data"},"syncSetup.pluginsHint":{zh:"插件自己存的设置和数据",en:"Settings and data your plugins save"},"syncSetup.footHint":{zh:"另一台电脑登录同一账号,就会自动出现",en:"Sign in on another computer and it appears there too"},"syncSetup.later":{zh:"稍后",en:"Later"},"syncSetup.start":{zh:"开始同步",en:"Start syncing"},"syncSetup.progress":{zh:"正在同步到蓬洲云 · 智库 {done} / {total} 个文件",en:"Syncing to Penzor Cloud · notes {done} / {total} files"},"syncSetup.view":{zh:"查看",en:"View"},"syncSetup.decide":{zh:"云端已经有一份智库,去蓬洲云 › 同步里选怎么合并。",en:"Penzor Cloud already has a notes vault. Choose how to combine them in Penzor Cloud › Sync."},"syncSetup.failed":{zh:"有一项没开成:{error}",en:"One item couldn't be turned on: {error}"}});const qn="forsion-penzor",zt=1024**3,rt=n=>n>=zt?`${(n/zt).toFixed(n>=10*zt?0:1)} GB`:n>=1024**2?`${Math.round(n/1024**2)} MB`:`${Math.max(1,Math.round(n/1024))} KB`,Za=()=>c.useSyncExternalStore(Yo,cs);function Qa(){K.getState().spaces.some(n=>n.id===qn)&&Ke(qn)}function Ja(){const{t:n}=be(),[i,o]=c.useState("");c.useEffect(()=>Oo(o),[]);const d=Za(),[a,v]=c.useState(!1),[p,g]=c.useState(!1),[w,m]=c.useState({notes:!0,agents:!0,plugins:!0}),[k,f]=c.useState(!1),b=Ye()==="main",h=Ao("syncSetup",a,Fo.syncSetup);c.useEffect(()=>{b&&window.remoteSync&&_o()},[b]);let I=!1;try{I=localStorage.getItem(Ft)==="1"}catch{}const C=b&&Bo(d,I),j=C&&!a,A=b&&!!d&&d.signedIn&&!d.decided&&I&&d.notes.available&&!j&&!a;c.useEffect(()=>{A&&Dn()},[A]),c.useEffect(()=>{if(!j)return;const M=setTimeout(()=>v(!0),2500);return()=>clearTimeout(M)},[j]),c.useEffect(()=>{a&&!C&&!p&&v(!1)},[a,C,p]);const L=d?.notes.progress;if(c.useEffect(()=>{if(k&&d&&!d.notes.running&&d.notes.last){const M=setTimeout(()=>f(!1),1500);return()=>clearTimeout(M)}},[k,d]),!b||!d)return null;const _=async()=>{g(!0);const M=await Uo(w);g(!1),v(!1);const V=M.find($=>!$.ok);V&&Wn({text:n("syncSetup.failed",{error:V.error??""}),level:"warning"}),cs()?.notes.pending?(Wn({text:n("syncSetup.decide"),level:"info"}),Qa()):w.notes&&f(!0)},X=()=>{Dn(),v(!1)},y=(()=>{const{localBytes:M,maxBytes:V}=d.notes;return M==null||!V?n("syncSetup.notesHint"):M>V?n("syncSetup.notesOver",{size:rt(M),max:rt(V)}):n("syncSetup.notesSize",{size:rt(M),max:rt(V),pct:String(Math.max(1,Math.round(M/V*100)))})})(),z=[["notes",t.jsx($o,{size:15}),d.notes.rootName?n("syncSetup.notes",{name:d.notes.rootName}):n("syncSetup.notesAny"),y],["agents",t.jsx(us,{size:15}),n("syncSetup.agents"),n("syncSetup.agentsHint")],["plugins",t.jsx(Vo,{size:15}),n("syncSetup.plugins"),n("syncSetup.pluginsHint")]];return t.jsxs(t.Fragment,{children:[h&&t.jsx("div",{className:"u-backdrop sync-setup-backdrop",children:t.jsxs("div",{className:"modal modal-sm sync-setup",role:"dialog","aria-modal":"true","aria-label":n("syncSetup.title"),children:[t.jsxs("div",{className:"modal-head",children:[t.jsx(Ho,{size:16}),t.jsx("span",{className:"sync-setup-title",children:n("syncSetup.title")})]}),t.jsxs("div",{className:"sync-setup-body",children:[t.jsx("p",{className:"sync-setup-lead",children:n("syncSetup.lead",{name:i})}),z.map(([M,V,B,$])=>t.jsxs("label",{className:"sync-setup-row",children:[t.jsx("input",{type:"checkbox",checked:w[M],disabled:p,onChange:G=>m({...w,[M]:G.target.checked})}),t.jsx("span",{className:"sync-setup-tile",children:V}),t.jsxs("span",{className:"sync-setup-copy",children:[t.jsx("b",{children:B}),t.jsx("small",{children:$})]})]},M))]}),t.jsxs("div",{className:"sync-setup-foot",children:[t.jsx("span",{className:"sync-setup-hint",children:n("syncSetup.footHint")}),t.jsxs("span",{className:"sync-setup-acts",children:[t.jsx("button",{className:"btn",disabled:p,onClick:X,children:n("syncSetup.later")}),t.jsx("button",{className:"btn primary",disabled:p,onClick:()=>{_()},children:n("syncSetup.start")})]})]})]})}),k&&d.notes.running&&L&&L.total>0&&t.jsxs("div",{className:"sync-setup-progress",role:"status",children:[t.jsx(At,{size:14,className:"spin"}),t.jsx("span",{children:n("syncSetup.progress",{done:String(L.done),total:String(L.total)})}),t.jsx("span",{className:"sync-setup-bar",children:t.jsx("i",{style:{width:`${Math.round(L.done/L.total*100)}%`}})}),t.jsx("button",{type:"button",className:"sync-setup-link",onClick:Wo,children:n("syncSetup.view")})]})]})}function Gn(n){return Array.from(n.dataTransfer?.types??[]).includes("Files")}function Xe(){const n=o=>{!Gn(o)||o.defaultPrevented||(o.preventDefault(),o.dataTransfer&&(o.dataTransfer.dropEffect="none"))},i=o=>{Gn(o)&&!o.defaultPrevented&&o.preventDefault()};return document.addEventListener("dragover",n),document.addEventListener("drop",i),()=>{document.removeEventListener("dragover",n),document.removeEventListener("drop",i)}}function js({target:n,onUnavailable:i}){const[,o]=c.useReducer(m=>m+1,0),[d,a]=c.useState(()=>({...n.params??{}})),v=c.useRef(d);v.current=d;const p=c.useRef(!1);c.useEffect(()=>Ee(o),[]),c.useEffect(()=>a({...n.params??{}}),[n]);const g=ge(n.type);g&&(p.current=!0),c.useEffect(()=>{p.current&&!g&&i?.()},[g,i]);const w=c.useMemo(()=>({id:`floating:${n.type}`,type:n.type,loc:"main",get params(){return v.current},setTitle:m=>{document.title=m},setParams:m=>a({...m}),close:()=>i?.()}),[n.type,i]);return g?t.jsx("div",{className:"floating-plugin-view","data-view":n.type,children:t.jsx(hs,{children:t.jsx(c.Suspense,{fallback:null,children:g.factory({leaf:w,params:d})})})}):t.jsx("div",{className:"floating-panel-empty",children:"Loading panel…"})}const er=[[390,"iPhone"],[414,"Max"],[768,"iPad"]];function tr({children:n}){const[i,o]=c.useState(390);return fs!=="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:er.map(([d,a])=>t.jsxs("button",{className:`sc-size${i===d?" on":""}`,onClick:()=>o(d),children:[a," · ",d]},d))}),t.jsx("div",{className:"sc-device",style:{width:i},children:n})]})}function nr(){eo(),c.useEffect(()=>Xe(),[]),c.useEffect(()=>{to(),no()},[]),c.useEffect(()=>window.tangu?.onMainAction?.((m,k)=>{m==="onboarding"&&N.getState().setOnboarding(!0),m==="dev-commands"&&so(),m==="test-notification"&&oo(),m==="reset-layout"&&W.getState().resetLayout({undoable:!0}),m==="achievement-toast"&&Qi(),m==="space-removed"&&k&&fa(k),m==="chat-draft"&&k&&xs(k),m==="chat-quote"&&k&&ya(k),m==="agents-changed"&&(N.getState().refreshAgents(),window.dispatchEvent(new Event("forsion:agents-changed"))),m==="skills-changed"&&(_t(Bt()).then(f=>N.setState({skillsList:f})).catch(()=>{}),window.dispatchEvent(new Event("forsion:skills-changed"))),m==="open-agents"&&Mn(N.getState().defaultAgentSlug||""),m==="open-agent"&&k&&/^[a-z0-9][a-z0-9-]{0,63}$/.test(k)&&Mn(k),m==="unit-route"&&k&&Ko(k),m==="open-space"&&k&&K.getState().spaces.some(f=>f.id===k)&&Ke(k)}),[]);const n=pt(),i=Xo();io();const o=N(ls(m=>({sessions:m.sessions,archivedSessions:m.archivedSessions,activeId:m.activeId,settingsOpen:m.settingsOpen,settingsTab:m.settingsTab,settingsSkillKey:m.settingsSkillKey,settingsNonce:m.settingsNonce,onboarding:m.onboarding,feedbackOpen:m.feedbackOpen,marketOpen:m.marketOpen,marketTarget:m.marketTarget,closeMarket:m.closeMarket,achievementsOpen:m.achievementsOpen,cfg:m.cfg,tr:m.tr,openSettings:m.openSettings,closeSettings:m.closeSettings,patchConfig:m.patchConfig,connect:m.connect,setOnboarding:m.setOnboarding,closeFeedback:m.closeFeedback}))),d=o.sessions.find(m=>m.id===o.activeId)||o.archivedSessions.find(m=>m.id===o.activeId)||null,a=c.useSyncExternalStore(qo,Rn,Rn),[v,p]=c.useState(!1),g=c.useRef(o.onboarding);c.useEffect(()=>{const m=g.current;if(g.current=o.onboarding,m&&!o.onboarding){p(!0);const k=setTimeout(()=>p(!1),650);return()=>clearTimeout(k)}},[o.onboarding]),c.useEffect(()=>Go(!!o.onboarding),[o.onboarding]);const w=o.settingsOpen||o.marketOpen||o.achievementsOpen||o.feedbackOpen||!!a||o.onboarding;return t.jsxs(tr,{children:[t.jsx("div",{className:`shell-host${v?" main-enter":""}`,style:o.onboarding?{visibility:"hidden"}:void 0,children:t.jsx(ks,{dark:i.mode==="dark",soft:!!ds(i.lang)?.manifest.panelGap,buildDefault:ns,header:t.jsx(qa,{}),footer:t.jsx(ao,{})})}),Zo()&&t.jsx(ss,{}),t.jsx(Qo,{}),t.jsx(Jo,{}),t.jsx(ws,{}),t.jsx(wa,{}),t.jsx(Se,{children:o.settingsOpen&&t.jsx($e,{title:o.tr("settings.title"),onClose:()=>o.closeSettings(),children:t.jsx(os,{open:!0,initialTab:o.settingsTab??void 0,initialSkillKey:o.settingsSkillKey??void 0,cfg:o.cfg,activeSession:d,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:(m,k,f)=>n.setTheme(m,k,n.bg,f),onFlatChange:n.setFlat,onGlassChange:m=>n.setGlass(m),onSeedChange:m=>n.setSeedValue(m),onReloadThemes:()=>n.reloadThemes(),onReconnect:m=>{o.connect({...o.cfg,...m||{}})},onRelaunchOnboarding:()=>{o.closeSettings();try{localStorage.removeItem(Ft)}catch{}o.setOnboarding(!0)}},o.settingsNonce)},"settings")}),t.jsx(Se,{children:o.onboarding&&t.jsx(ei.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(ti,{themeLang:n.lang,themeSkin:n.skin,themeMode:n.mode,themeModePref:n.modePref,themeSeed:n.seed,onThemeChange:(m,k,f)=>n.setTheme(m,k,n.bg,f),onSeedChange:m=>n.setSeedValue(m),onReconnect:()=>{window.tangu?.getConfig().then(m=>{const k={backendUrl:m.backendUrl,token:m.token,modelId:m.modelId};N.setState({cfg:k,desktopMode:"managed"}),N.getState().connect(k)})},onFinish:()=>{o.setOnboarding(!1),window.tangu?.getConfig().then(m=>{const k={backendUrl:m.backendUrl,token:m.token,modelId:m.modelId};N.setState({cfg:k,homeDir:m.homeDir,defaultWsDir:m.defaultWorkspaceDir||""}),N.getState().connect(k)})}})},"onboarding")}),t.jsx(Se,{children:o.marketOpen&&t.jsx($e,{title:o.tr("market.title"),onClose:()=>o.closeMarket(),children:t.jsx(is,{initialQuery:o.marketTarget?.q,initialItemId:o.marketTarget?.itemId,initialDetailTab:o.marketTarget?.detailTab,onClose:()=>o.closeMarket()},o.marketTarget?.nonce)},"market")}),t.jsx(Se,{children:o.achievementsOpen&&t.jsx($e,{title:o.tr("achievements.title"),onClose:()=>N.getState().closeAchievements(),children:t.jsx(as,{onClose:()=>N.getState().closeAchievements()})},"achievements")}),t.jsx(Se,{children:o.feedbackOpen&&t.jsx($e,{compact:!0,title:o.tr("feedback.title"),onClose:()=>o.closeFeedback(),children:t.jsx(Ss,{surface:"panel",cfg:o.cfg,activeSession:d,onClose:()=>o.closeFeedback()})},"feedback")}),t.jsx(ro,{}),t.jsx(co,{}),t.jsx(lo,{}),t.jsx(Ja,{}),t.jsx(Se,{children:a?.view&&t.jsx($e,{title:a.title,onClose:On,children:t.jsx(js,{target:a.view,onUnavailable:On})},a.id)}),!w&&t.jsx(rs,{}),!w&&t.jsx(uo,{onOpen:()=>N.getState().openAchievements()}),!o.onboarding&&t.jsx(mo,{})]})}function sr(){W.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 Zn=6e3;function or(){const[n,i]=c.useState(Hn?"wait":"plain");return c.useEffect(()=>{const o=Hn;if(!o)return;const d=Date.now();let a=null,v=!1;const p=()=>{const k=K.getState().spaces.find(b=>b.id===o);if(a){k!==a&&!v&&(v=!0,location.reload());return}if(!k||!Ji()&&Date.now()-d<Zn)return;a=k;const f=W.getState();f.setSidebarDefaults(k.sidebarDefaults),f.setSideProfile(k.id,k.resizableSides??{},k.sideDefaultScale,k.bottomSpan),f.setPinned(k.pinned),document.title=je(k.name),i("ready")};p();const g=K.subscribe(p),w=Ee(p),m=window.setTimeout(()=>{p(),a||i("stuck")},Zn+50);return()=>{g(),w(),window.clearTimeout(m)}},[]),n}function ir(){const{t:n}=be(),i=pt(),o=or();c.useEffect(()=>{N.getState().setTr((a,v)=>n(a,v))},[n]),c.useEffect(()=>{N.getState().boot()},[]),c.useEffect(()=>Xe(),[]),c.useEffect(()=>window.tangu?.onMainAction?.(a=>{a==="agents-changed"&&(N.getState().refreshAgents(),window.dispatchEvent(new Event("forsion:agents-changed"))),a==="skills-changed"&&(_t(Bt()).then(v=>N.setState({skillsList:v})).catch(()=>{}),window.dispatchEvent(new Event("forsion:skills-changed")))}),[]),c.useEffect(()=>{window.tangu?.detachedReady?.(ni()).then(a=>{if(!a?.length)return;const v=W.getState();for(const p of a)v.openView(p.type,p.params??{},"main")})},[]);const d=(()=>{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:[d&&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(ks,{noRibbon:!0,dark:i.mode==="dark",soft:!!ds(i.lang)?.manifest.panelGap,buildDefault:o==="ready"?ns:sr})}),window.amadeus&&t.jsx(ss,{}),t.jsx(ws,{})]})}mt({"dock.pickTitle":{zh:"贴到哪个窗口旁边",en:"Dock beside a window"},"dock.pickHint":{zh:"选一个窗口,对话面板会贴在它旁边,一起移动和缩放。",en:"Pick a window. The chat panel docks beside it and moves and resizes with it."},"dock.loading":{zh:"正在查找窗口…",en:"Looking for windows…"},"dock.empty":{zh:"屏幕上没有可以贴靠的窗口。",en:"No windows on screen to dock beside."},"dock.refresh":{zh:"刷新",en:"Refresh"},"dock.close":{zh:"关闭",en:"Close"},"dock.selectedIn":{zh:"在 {app} 里选中的:",en:"Selected in {app}:"},"dock.err.helper_not_installed":{zh:"还没装好「电脑操作」的本机 helper。让 Agent 用一次电脑操作,它会自动装好。",en:"The Computer Use helper is not installed yet. Ask the agent to use Computer Use once and it installs itself."},"dock.err.helper_not_running":{zh:"「电脑操作」的本机 helper 没有启动。",en:"The Computer Use helper is not running."},"dock.err.unsupported_helper":{zh:"本机的「电脑操作」helper 是旧版,不支持侧边拼接。让 Agent 用一次电脑操作,它会自动更新。",en:"The Computer Use helper is out of date and cannot dock. Ask the agent to use Computer Use once and it updates itself."},"dock.err.window_gone":{zh:"这个窗口已经关了。",en:"That window has been closed."},"dock.err.generic":{zh:"没能贴过去({code})。",en:"Could not dock ({code})."}});const ar=new Set(["helper_not_installed","helper_not_running","unsupported_helper","window_gone"]);function rr(n,i,o){return n?.text?n.text:n?.items?.length?[o("dock.selectedIn",{app:i}),...n.items.map(d=>`- ${d}`)].join(`
15
+ `):""}function cr(){const{t:n}=be(),[i,o]=c.useState(!1),[d,a]=c.useState(null);c.useEffect(()=>{N.getState().setTr((p,g)=>n(p,g))},[n]),c.useEffect(()=>{N.getState().boot().finally(()=>{N.setState({sessionMode:"work"}),o(!0)});const p=window.tangu?.onAppDockState?.(g=>a(g.target));return window.tangu?.appDockReady?.().then(g=>a(g.target)),()=>p?.()},[]),c.useEffect(()=>{window.amadeus&&$t()},[]),c.useEffect(()=>Xe(),[]),c.useEffect(()=>{if(!i||!d)return;const p={type:"chat",params:{miniSurface:!0,appRef:d}};ur({view:p,mainView:{type:"chat"}}),N.getState().setActiveId(null),W.getState().openView("chat",p.params,"main")},[i,d?.pid,d?.windowId]);const v=c.useRef(n);return v.current=n,c.useEffect(()=>{if(!d)return;let p="";const g=async()=>{const w=rr(await window.tangu?.appDockSelection?.(),d.app,v.current);!w||w===p||(p=w,N.getState().setPendingChatQuote("chat",w))};return window.addEventListener("focus",g),()=>window.removeEventListener("focus",g)},[d?.pid,d?.windowId]),d?t.jsx(ys,{buildDefault:()=>{},direct:{title:d.app,view:{type:"chat",params:{miniSurface:!0,appRef:d}},mainView:{type:"chat"}}}):t.jsx(lr,{})}function lr(){const{t:n}=be(),[i,o]=c.useState(null),[d,a]=c.useState(""),v=async()=>{o(null),a("");const w=await window.tangu?.appDockCandidates?.();o(w?.windows??[]),w?.error&&a(w.error)};c.useEffect(()=>{v()},[]);const p=async w=>{a("");const m=await window.tangu?.appDockAttach?.({pid:w.pid,windowId:w.windowId,app:w.app,bundleId:w.bundleId,title:w.title});m&&!m.ok&&m.error!=="superseded"&&a(m.error||"unavailable")},g=d?ar.has(d)?n(`dock.err.${d}`):n("dock.err.generic",{code:d}):"";return t.jsxs("div",{className:"mini-card-shell","data-space":"dock",children:[t.jsxs("header",{className:"mini-card-chrome",children:[t.jsx("div",{className:"mini-card-drag-title dock-picker-title",children:n("dock.pickTitle")}),t.jsx("button",{className:"mini-card-action","aria-label":n("dock.refresh"),title:n("dock.refresh"),onClick:()=>{v()},children:t.jsx(At,{size:15})}),t.jsx("button",{className:"mini-card-action mini-card-close","aria-label":n("dock.close"),onClick:()=>window.tangu?.closeSelf?.(),children:t.jsx(Vt,{size:15})})]}),t.jsxs("main",{className:"mini-card-main dock-picker",children:[t.jsx("p",{className:"dock-picker-hint",children:n("dock.pickHint")}),g&&t.jsx("p",{className:"dock-picker-error",role:"alert",children:g}),i===null?t.jsx("div",{className:"mini-panel-empty",children:n("dock.loading")}):i.length===0?!g&&t.jsx("div",{className:"mini-panel-empty",children:n("dock.empty")}):t.jsx("div",{className:"dock-picker-list",children:i.map(w=>t.jsxs("button",{className:"mini-card-row dock-picker-row","data-window-id":w.windowId,onClick:()=>{p(w)},children:[t.jsx(si,{size:15}),t.jsxs("span",{className:"mini-card-row-label",children:[t.jsx("span",{className:"dock-picker-app",children:w.app}),w.title&&t.jsx("span",{className:"dock-picker-window",children:w.title})]})]},`${w.pid}:${w.windowId}`))})]})]})}function dr(){let n,i=0;const o=window.tangu?.onMiniDockMotion?.(d=>{const a=document.querySelector(".mini-card-shell");if(!a)return;i=d.id;const v=getComputedStyle(a).transform;n?.cancel();const p=d.x||d.y?`translate3d(calc(${d.x}px / var(--uiz, 1)), calc(${d.y}px / var(--uiz, 1)), 0)`:"none";a.style.transform=p;const g=()=>{i===d.id&&(n?.cancel(),n=void 0,p==="none"&&a.style.removeProperty("transform"),window.tangu?.miniDockMotionDone?.(d.id))};if(!d.animate||matchMedia("(prefers-reduced-motion: reduce)").matches){g();return}n=a.animate([{transform:v},{transform:p}],{duration:220,easing:"cubic-bezier(.22, .8, .25, 1)"}),n.finished.then(g,()=>{})});return()=>{i++,n?.cancel(),o?.()}}let ne=null;function ur(n){ne=n}Ye()==="mini"&&(ta(async n=>{n.type==="amadeus-editor"&&await sa();const i={...n.params};delete i.miniSurface,n.type==="chat"&&(i.sessionId||=N.getState().activeId||void 0,i.followActive=!i.sessionId),window.tangu?.showMainPanel?.({...n,params:i})}),na(n=>{if(ne?.view)return n.type===ne.view.type?n:n.type===(ne.mainView?.type||ne.view.type)?{type:ne.view.type,params:{...ne.view.params,...n.params}}:(ut({...n}),null);const i=Ht();if(!i||!ft(i))return null;const o=i.mini;return n.type===o.view.type?n:n.type===o.mainView.type?{type:o.view.type,params:{...o.view.params,...n.params}}:(ut({...n}),null)}));function mr(){const n=Ht();n&&ft(n)&&W.getState().openView(n.mini.view.type,n.mini.view.params??{},"main")}function pr(){return oi()?t.jsx(cr,{}):t.jsx(fr,{})}function fr(){const{t:n}=be();c.useEffect(dr,[]);const[i,o]=c.useState(null);return c.useEffect(()=>{N.getState().setTr((d,a)=>n(d,a))},[n]),c.useEffect(()=>{let d=!1,a=!1;const v=new URLSearchParams(location.search);let p=v.get("sessionId")?{sessionId:v.get("sessionId")}:null;const g=()=>{if(!d||!p)return;if(p.view){const C=p.view;if(!ge(C.type)){a&&window.tangu?.closeSelf?.();return}a=!0;const j=p;p=null,ne=j,o(j),W.getState().openView(C.type,{...C.params,...j.params},"main");return}const f=p.spaceId||(p.sessionId?"tangu":void 0),b=K.getState().spaces.find(C=>C.id===f);if(!b||!ft(b))return;const h=p;p=null,ne=null,o(null),Ke(b.id);const I={...b.mini.view.params,...h.params,...h.sessionId?{sessionId:h.sessionId,followActive:!1}:{}};W.getState().openView(b.mini.view.type,I,"main"),h.sessionId&&N.getState().setActiveId(h.sessionId)},w=window.tangu?.onMiniTarget?.(f=>{p=f,g()});window.tangu?.miniReady?.();const m=K.subscribe(g),k=Ee(g);return N.getState().boot().finally(()=>{d=!0,g()}),()=>{w?.(),m(),k(),d=!1,ne=null}},[]),c.useEffect(()=>{window.amadeus&&$t()},[]),c.useEffect(()=>Xe(),[]),c.useEffect(()=>{new URLSearchParams(location.search).has("transient")||ea("mini.open")},[]),t.jsx(ys,{buildDefault:mr,resizable:!!window.tangu?.miniResize&&!new URLSearchParams(location.search).has("transient"),direct:i?.view?{title:i.title,view:i.view,mainView:i.mainView??i.view}:null})}const hr={settings:"settings.title",market:"market.title",achievements:"achievements.title",feedback:"feedback.title",btw:"btw.title"};function gr(n,i){return n.builtin?i(hr[n.builtin]):n.title}function br(){const{t:n}=be(),i=pt(),[o,d]=c.useState(null),a=N(ls(h=>({cfg:h.cfg,cfgLoaded:h.cfgLoaded,closeSettings:h.closeSettings,closeMarket:h.closeMarket,closeAchievements:h.closeAchievements,closeFeedback:h.closeFeedback,patchConfig:h.patchConfig,connect:h.connect}))),v=o?.params?.session?.id?o.params.session:null,p=()=>window.tangu?.closeSelf?.(),g=o?.builtin==="btw"?xa(o.params):null,w=o?gr(o,n):"";if(c.useEffect(()=>{o?.builtin&&w&&(document.title=w)},[o?.builtin,w]),c.useEffect(()=>{N.getState().setTr((h,I)=>n(h,I))},[n]),c.useEffect(()=>{N.getState().boot()},[]),c.useEffect(()=>{window.amadeus&&$t()},[]),c.useEffect(()=>Xe(),[]),c.useEffect(()=>window.tangu?.onMainAction?.(h=>{h==="agents-changed"&&(N.getState().refreshAgents(),window.dispatchEvent(new Event("forsion:agents-changed"))),h==="skills-changed"&&(_t(Bt()).then(I=>N.setState({skillsList:I})).catch(()=>{}),window.dispatchEvent(new Event("forsion:skills-changed")))}),[]),c.useEffect(()=>{const h=ii(),I=window.tangu?.onFloatingTarget?.(d);return window.tangu?.floatingReady?.(h).then(C=>{C&&d(C)}),()=>I?.()},[]),c.useEffect(()=>{o?.builtin==="feedback"&&typeof o.params?.description=="string"&&N.setState({feedbackDraft:o.params.description})},[o]),!o)return t.jsx("div",{className:"floating-native-root"});const m=()=>{a.closeSettings(),p()},k=()=>{a.closeMarket(),p()},f=()=>{a.closeAchievements(),p()},b=()=>{a.closeFeedback(),p()};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(os,{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:a.cfg,activeSession:v,themeLang:i.lang,themeSkin:i.skin,themeMode:i.mode,themeModePref:i.modePref,flatOn:i.flat,glassOn:i.glass,themeSeed:i.seed,onClose:m,onConfigChange:a.patchConfig,onThemeChange:(h,I,C)=>i.setTheme(h,I,i.bg,C),onFlatChange:i.setFlat,onGlassChange:i.setGlass,onSeedChange:i.setSeedValue,onReloadThemes:i.reloadThemes,onReconnect:h=>{a.connect({...a.cfg,...h||{}})},onRelaunchOnboarding:()=>{try{localStorage.removeItem(Ft)}catch{}window.tangu?.requestMainAction?.("onboarding"),p()}},JSON.stringify(o.params??{})),o.builtin==="market"&&t.jsx(is,{initialItemId:typeof o.params?.itemId=="string"?o.params.itemId:void 0,initialDetailTab:typeof o.params?.detailTab=="string"?o.params.detailTab:void 0,initialQuery:typeof o.params?.q=="string"?o.params.q:void 0,onClose:k},String(o.params?.nonce??o.params?.itemId??o.params?.q??"")),o.builtin==="achievements"&&t.jsx(as,{onClose:f}),o.builtin==="feedback"&&a.cfgLoaded&&t.jsx(Ss,{surface:"panel",cfg:a.cfg,activeSession:v,onClose:b},v?.id||""),o.builtin==="btw"&&a.cfgLoaded&&g&&t.jsx(po,{seed:g,onClose:p}),o.view&&t.jsx(js,{target:o.view,onUnavailable:p})]}),(o.builtin==="settings"||o.builtin==="market")&&t.jsx(rs,{}),o.builtin==="settings"&&t.jsx(ai,{})]})}let he=null;function Qn(n){if(!n){he&&(he.style.display="none");return}he||(he=document.createElement("div"),Object.assign(he.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(he)),he.style.display="block"}function wr(){const n=window.tangu;if(n?.openDetached){if(Ye()==="main"){let i="";const o=()=>{const p=N.getState(),g=p.activeId,w={sessionId:g,runId:g?p.runningBySession[g]??null:null},m=JSON.stringify(w);m!==i&&(i=m,n.reportMiniSession?.(w))};N.subscribe(o),o();let d=null;const a=()=>{if(!W.getState().api||!d||!ge(d.type))return;const g=d;d=null,g.spaceId&&Ke(g.spaceId);const w=W.getState().openView(g.type,g.params??{},"main");w&&g.params&&w.setParams({...w.params,...g.params})};n.onMainPanelTarget?.(p=>{d=p,a()}),Ee(a);let v=!1;W.subscribe(p=>{p.api&&(v||(v=!0,n.mainPanelReady?.()),a())})}ri({ribbonPointerDrag:n.platform==="win32",cursorScreenPoint:n.cursorScreenPoint,detach:(i,o)=>{n.openDetached?.(i,o)},openSpace:(i,o)=>{Ye()==="main"&&oa()===i&&K.getState().activeSpaceId===i&&W.getState().saveNamed(ia(i)),n.openDetached?.([],o,{space:i})},dragUpdate:(i,o,d)=>n.dragUpdate?.(i,o,d),drop:async(i,o,d)=>(await n.dropView?.(i,o,d))?.routed??!1}),n.onAcceptView?.(i=>{Qn(null),W.getState().openView(i.type,i.params??{},"main")}),n.onDragPreview?.(i=>Qn(i))}}function vr(){const n=window.tangu;if(!n?.reportRunningSessions)return;const i=o=>n.reportRunningSessions(Object.keys(o).length);i(N.getState().runningBySession),N.subscribe((o,d)=>{o.runningBySession!==d.runningBySession&&i(o.runningBySession)})}const Jn=n=>Sa(n).toLowerCase(),Es=(n,i)=>n.configBySession[i]?.cwd||n.sessions.find(o=>o.id===i)?.project_path||"",Cs=(n,i)=>Object.keys(n.runningBySession).some(o=>Jn(Es(n,o))===Jn(i));function kr(){const n=window.tangu;if(!(!n?.codeStudioGitCommit||!n.codeStudioGitStatus||!n.productsIsCreation))return N.subscribe((i,o)=>{if(i.runningBySession!==o.runningBySession)for(const d of Object.keys(o.runningBySession)){if(i.runningBySession[d])continue;const a=Es(i,d);!a||Cs(i,a)||yr(a,d)}})}async function yr(n,i){try{if(!await window.tangu.productsIsCreation(n))return;const o=await window.tangu.codeStudioGitStatus(n);if(!(o?.auto??o?.writable)||Cs(N.getState(),n))return;const d=fo(N.getState().messagesBySession[i]||[]);await window.tangu.codeStudioGitCommit(n,{name:d,auto:!0,untitled:es("studio.history.untitled")})}catch(o){console.warn("[creations] 自动存版本失败",o)}}function xr(){if(!window.tangu?.onAuthWillChange)return()=>{};let n=!1,i=null,o=!1,d=0,a=Promise.resolve(),v=!1;const p=()=>{i&&(i.inert=o),i=null},g=window.tangu.onAuthWillChange(async()=>{const m=++d;i||(i=document.body,o=i?.inert??!1,i&&(i.inert=!0));try{if(await a,m!==d||v||!window.amadeus)return;const[{flushAllScopes:k,resetAllScopeDocs:f,usePageStore:b},{useDbStore:h},{useDrawStore:I},C]=await Promise.all([Be(()=>import("./pageStore-CyvNZEYX.js").then(j=>j.dI),__vite__mapDeps([0,1,2,3,4]),import.meta.url),Be(()=>import("./dbStore-BIG5Mfh2.js").then(j=>j.d),__vite__mapDeps([5,0,1,2,3,4]),import.meta.url),Be(()=>import("./drawingStore-CGvTqqYW.js").then(j=>j.m),__vite__mapDeps([6,1,0,2,3,4]),import.meta.url),Be(()=>import("./index-fDB1l4d-.js").then(j=>j.cw),[],import.meta.url)]);if(await Promise.all([k(!0),h.getState().flushAll(!0),I.getState().flushAll(!0)]),m!==d)return;n=b.getState().vaultSide==="cloud",n&&(C.retireAllUnifiedScopes(),f(),b.setState({vaultRoot:null,pages:[],folders:[],files:[],icons:{}}))}catch(k){throw m===d&&p(),k}}),w=window.tangu.onAuthChanged?.(()=>{const m=++d;if(!n){a.finally(()=>{m===d&&p()});return}n=!1,a=a.then(async()=>{const{usePageStore:k}=await Be(async()=>{const{usePageStore:f}=await import("./pageStore-CyvNZEYX.js").then(b=>b.dI);return{usePageStore:f}},__vite__mapDeps([0,1,2,3,4]),import.meta.url);v||(await k.getState().restoreVault(),await k.getState().initVaultSide())}).catch(k=>console.error("[auth] Cannot restore vault after account change:",k)).finally(()=>{m===d&&p()})});return()=>{v=!0,++d,g(),w?.(),p()}}xr();window.addEventListener("error",n=>{console.error("[tangu] window error:",n.error||n.message)});window.addEventListener("unhandledrejection",n=>{console.error("[tangu] unhandledrejection:",n.reason)});const Sr=(()=>{try{return location.hash==="#preview"}catch{return!1}})(),dt=Ye();try{document.documentElement.dataset.window=dt}catch{}try{document.documentElement.lang=Us()==="zh"?"zh-CN":"en"}catch{}try{window.tangu?.platform==="darwin"&&(document.documentElement.dataset.platform="mac")}catch{}let Ns,Is=null;try{Ns=localStorage.getItem("forsion_theme_seed")||void 0}catch{}try{Is=localStorage.getItem("forsion_theme_lang")}catch{}try{ci(li(),di(),ui(),mi(),{customColor:Ns}),pi(),document.documentElement.style.removeProperty("background"),pt.getState().initThemes(Is),N.getState().setTr(es),ho(),wr(),vr(),kr(),fi(),go(),hi()}catch(n){console.error("[tangu] init failed, continue to mount:",n),gi("init",n)}function jr(){const n=bi()?.Preview;return n?t.jsx(n,{}):null}Xs.createRoot(document.getElementById("root")).render(t.jsx(Ks,{children:t.jsx(bo,{children:Sr?t.jsx(jr,{}):dt==="mini"?t.jsx(pr,{}):dt==="floating"?t.jsx(br,{}):dt==="detached"?t.jsx(ir,{}):t.jsx(nr,{})})}));
@@ -0,0 +1 @@
1
+ .feedback-modal.modal{--modal-w: 660px;--modal-h: 760px;max-width:calc(100vw / var(--uiz, 1) - 28px);height:min(var(--modal-h),calc(100dvh / var(--uiz, 1) - 32px));background:var(--bg-card);color:var(--text)}.feedback-head.modal-head{justify-content:space-between;gap:16px;padding:24px 26px 18px;flex-shrink:0}.feedback-heading{display:flex;align-items:flex-start;gap:12px}.feedback-heading>svg{color:var(--accent-ink);margin-top:3px}.feedback-heading h2{margin:0;font-size:var(--ui-font-title, 16px);line-height:1.35;font-weight:650}.feedback-heading p{margin:5px 0 0;color:var(--text-muted);font-size:var(--ui-font-meta, 12px);font-weight:400}.feedback-body.modal-body{min-height:0;padding:6px 26px 20px}.feedback-kinds{display:flex;gap:8px;margin-bottom:22px}.feedback-kinds .btn{flex:1;justify-content:center;gap:7px;padding:9px 8px;font-size:var(--ui-font-meta, 12px)}.feedback-kinds .btn[aria-pressed=true]{color:var(--accent-ink);background:var(--accent-soft);border-color:var(--sel-line)}.feedback-description{display:flex;flex-direction:column;gap:9px}.feedback-description>label,.feedback-section-heading h3{font-size:var(--ui-font-meta, 12px);font-weight:600;color:var(--text)}.feedback-description textarea{width:100%;min-height:136px;resize:vertical;max-height:280px;padding:12px 14px;font-size:var(--ui-font-body, 13px);line-height:1.7}.feedback-count,.feedback-description>.feedback-warning{align-self:flex-end;font-size:var(--ui-font-caption, 11px);color:var(--text-muted);font-variant-numeric:tabular-nums}.feedback-context{margin-top:17px;padding:16px;border:1px solid transparent;border-radius:var(--radius-md);background:var(--overlay-subtle)}.feedback-section-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.feedback-section-heading h3{margin:0}.feedback-section-heading code{font-size:var(--ui-font-caption, 11px);color:var(--text-faint)}.feedback-session{margin:6px 0 14px;font-size:var(--ui-font-caption, 11px);color:var(--text-muted);overflow-wrap:anywhere}.feedback-option{display:flex;align-items:flex-start;gap:10px;cursor:pointer}.feedback-option+.feedback-option{margin-top:14px}.feedback-option input{margin:3px 0 0;width:15px;height:15px;flex-shrink:0;accent-color:var(--signal-mark)}.feedback-option>span{display:flex;flex-direction:column;gap:4px}.feedback-option strong{font-size:var(--ui-font-meta, 12px);font-weight:500;color:var(--text)}.feedback-option small{font-size:var(--ui-font-caption, 11px);line-height:1.5;color:var(--text-muted)}.feedback-option[data-disabled]{opacity:.5;cursor:default}.feedback-report-status{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:38px;margin-top:9px;font-size:var(--ui-font-caption, 11px);color:var(--text-muted)}.feedback-report-status>span,.feedback-report-status>div{display:flex;align-items:center;gap:6px}.feedback-report-status .btn{font-size:var(--ui-font-caption, 11px)}.feedback-note,.feedback-warning{font-size:var(--ui-font-caption, 11px);line-height:1.6;margin:6px 0 0;overflow-wrap:anywhere}.feedback-note{color:var(--text-muted)}.feedback-warning,.feedback-description>.feedback-warning{color:var(--danger)}.feedback-footer{display:flex;align-items:center;gap:12px;flex-shrink:0;padding:16px 26px 20px;border-top:1px solid var(--border)}.feedback-footer .grow{flex:1}.feedback-footer .btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;font-size:var(--ui-font-meta, 12px);min-height:36px}.feedback-back{display:inline-flex;align-items:center;gap:6px;margin-bottom:12px}.feedback-file{display:flex;align-items:center;gap:7px;font-size:var(--ui-font-caption, 11px);color:var(--text-muted);overflow-wrap:anywhere}.feedback-file>span:first-of-type{flex:1;min-width:0}.feedback-preview{white-space:pre-wrap;overflow-wrap:anywhere;font-size:var(--ui-font-caption, 11px);line-height:1.65;padding:14px;border-radius:var(--radius-sm);background:var(--overlay-subtle);color:var(--text)}.feedback-success{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:14px;padding:28px}.feedback-success-icon{display:grid;place-items:center;width:60px;height:60px;border-radius:50%;color:var(--accent-ink);background:var(--accent-soft)}.feedback-success h3{font-size:var(--ui-font-title, 16px);margin:6px 0 0}.feedback-success p{max-width:360px;font-size:var(--ui-font-body, 13px);line-height:1.7;color:var(--text-muted);margin:0}.feedback-success code{font-size:var(--ui-font-caption, 11px);color:var(--text-muted);overflow-wrap:anywhere}@media(max-width:560px){.feedback-head.modal-head{padding:18px 16px 14px}.feedback-body.modal-body{padding-inline:16px}.feedback-footer{padding:12px 16px 16px;gap:6px;flex-wrap:wrap}.feedback-kinds{gap:5px}.feedback-kinds .btn{flex-direction:column;gap:5px}.feedback-report-status{align-items:flex-start;flex-wrap:wrap}}.sync-setup-backdrop{z-index:200}.modal.sync-setup{height:auto;background:var(--bg-card)}.sync-setup .modal-head{gap:8px}.sync-setup-body{padding:2px 18px 6px}.sync-setup-lead{margin:0 0 10px;color:var(--text-muted);font-size:var(--ui-font-meta);line-height:var(--ui-line-meta)}.sync-setup-row{display:grid;grid-template-columns:16px 26px minmax(0,1fr);gap:10px;align-items:center;padding:9px 0;border-top:var(--border-width) solid var(--border);cursor:pointer}.sync-setup-row:first-of-type{border-top:0}.sync-setup-row input{width:15px;height:15px;margin:0}.sync-setup-tile{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:var(--radius-md);background:var(--overlay-light);color:var(--text-muted)}.sync-setup-copy b{display:block;font-weight:600;font-size:var(--ui-font-body)}.sync-setup-copy small{display:block;color:var(--text-muted);font-size:var(--ui-font-meta)}.sync-setup-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 18px 16px}.sync-setup-hint{color:var(--text-faint);font-size:var(--ui-font-meta)}.sync-setup-acts{display:flex;gap:8px}.sync-setup-progress{position:fixed;left:50%;bottom:22px;transform:translate(-50%);z-index:150;display:inline-flex;align-items:center;gap:10px;padding:8px 14px;border-radius:var(--radius-pill);background:var(--bg-card);box-shadow:var(--card-shadow);border:var(--border-width) solid var(--border);font-size:var(--ui-font-body)}.sync-setup-bar{width:120px;height:4px;border-radius:2px;background:var(--overlay-light);overflow:hidden}.sync-setup-bar i{display:block;height:100%;background:var(--signal-mark, var(--accent));transition:width .3s ease}.sync-setup-link{border:0;background:none;padding:0;color:var(--text-muted);text-decoration:underline;text-underline-offset:3px;font-size:var(--ui-font-meta);cursor:pointer}.dock-picker-title{text-align:left;color:var(--text);font-weight:600}.dock-picker{display:flex;flex-direction:column;min-height:0}.dock-picker-hint{margin:0;padding:10px 12px 6px;font-size:var(--ui-font-meta, 12px);line-height:1.5;color:var(--text-muted)}.dock-picker-error{margin:0 12px 6px;font-size:var(--ui-font-meta, 12px);line-height:1.5;color:var(--danger)}.dock-picker-list{flex:1 1 auto;min-height:0;overflow-y:auto;padding:0 5px 8px}.dock-picker-row{height:auto;min-height:40px;padding-top:6px;padding-bottom:6px}.dock-picker-row .mini-card-row-label{display:flex;flex-direction:column;gap:2px}.dock-picker-app{color:var(--text)}.dock-picker-window{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;font-size:var(--ui-font-meta, 12px);color:var(--text-muted)}
@@ -0,0 +1 @@
1
+ .amx-publishing-editor .amadeus-published{line-height:1.65;overflow-wrap:anywhere;color:var(--text)}.amx-publishing-editor .md-feature{margin:24px 0}.amx-publishing-editor .md-media{margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.amx-publishing-editor .md-media-stage{position:relative;aspect-ratio:16/9;background:var(--bg)}.amx-publishing-editor .md-media-stage.has-poster{aspect-ratio:16/9}.amx-publishing-editor .md-media-stage img{display:block;position:absolute;inset:0;width:100%;height:100%;object-fit:contain}.amx-publishing-editor .md-media-stage video,.amx-publishing-editor .md-media-stage iframe{position:absolute;inset:0;width:100%;height:100%;border:0}.amx-publishing-editor .md-media-stage audio{position:absolute;inset:auto 0 0;width:100%}.amx-publishing-editor video[data-amadeus-demo]{display:block;width:100%;height:auto;aspect-ratio:auto 16/10;object-fit:contain;border-radius:var(--radius-md);background:var(--bg)}.amx-publishing-editor .md-media-placeholder{display:grid;place-items:center;height:100%;min-height:120px}.amx-publishing-editor .md-media figcaption{display:flex;gap:12px;align-items:center;flex-wrap:wrap;padding:12px;font-size:var(--ui-font-meta)}.amx-publishing-editor .md-callout{padding:12px;margin:16px 0;border:1px solid var(--border);border-radius:var(--radius-sm)}.amx-publishing-editor .md-fold summary{cursor:pointer;font-weight:600}.amx-publishing-editor .md-table-wrap{overflow:auto}.amx-publishing-editor .md-table-wrap table{border-collapse:collapse;width:100%}.amx-publishing-editor .md-table-wrap td,.amx-publishing-editor .md-table-wrap th{padding:8px;border-bottom:1px solid var(--border);text-align:left}.amx-publishing-editor pre{overflow:auto;background:var(--bg);padding:12px;border-radius:var(--radius-sm)}
@@ -0,0 +1,3 @@
1
+ import{j as i,H as g,u as b,r as d,a as x}from"./index-fDB1l4d-.js";import{fo as w}from"./appStore-DDOkzWDA.js";import"./pageStore-CyvNZEYX.js";import{P as y}from"./MarkdownBlock-DSItkLhu.js";import{m as j,r as M}from"./mediaPlayer-DB4KUvua.js";import"./react-b7FrqRQR.js";import"./ipc-SAPDwyQ4.js";import"./client-fKy9CWk0.js";import"./nativeDownload-DsGyUSJ5.js";import"./dbStore-BIG5Mfh2.js";import"./drawingStore-CGvTqqYW.js";import"./index-CmsN2Zm2.js";import"./linkFollow-uke1Xtit.js";import"./selectionActions-DIq0xDm8.js";import"./listFold-BeNv2v6M.js";import"./FloatingToc-DO7SH8Ku.js";x({"publishing.visual":{zh:"Amadeus 编辑",en:"Amadeus editor"},"publishing.source":{zh:"Markdown 源码",en:"Markdown source"},"publishing.preview":{zh:"预览",en:"Preview"}});function k({options:e,revision:p,alive:a}){const{t,locale:l}=b(),[s,n]=d.useState(e.value),[c,o]=d.useState("visual"),h=e.modes!==!1,u=h?c:"visual",v=d.useRef(null);d.useEffect(()=>{n(e.value)},[e.value,p]);const f=r=>{a()&&(e.value=r,n(r),e.onChange?.(r))};d.useEffect(()=>v.current?j(v.current,l):void 0,[u,s,l,e.previewBaseUrl]);const m=u==="preview"?M(s,{locale:l,baseUrl:e.previewBaseUrl}):null;return i.jsxs("div",{className:"am-app amx-publishing-editor","aria-label":e.label,children:[h&&i.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,padding:"8px 0"},children:["visual","source","preview"].map(r=>i.jsx("button",{className:"btn",type:"button","aria-pressed":u===r,onClick:()=>o(r),children:t(`publishing.${r}`)},r))}),u==="visual"&&i.jsx(y,{initial:s,onChange:f,readOnly:e.readOnly,immediate:!0}),u==="source"&&i.jsx("textarea",{"aria-label":e.label||t("publishing.source"),value:s,readOnly:e.readOnly,onChange:r=>f(r.target.value),style:{width:"100%",minHeight:420,resize:"vertical",padding:12,font:"inherit",fontFamily:"var(--font-mono)",color:"var(--text)",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-sm)"}}),m&&i.jsx("div",{ref:v,className:"amadeus-published",dangerouslySetInnerHTML:{__html:(m.title?`<h1>${m.title.replace(/[&<>"']/g,r=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[r])}</h1>`:"")+m.html}})]})}function _(e,p){const a={...p};let t=!0,l=0;const s=()=>i.jsx(g,{children:i.jsx(k,{options:a,revision:l++,alive:()=>t})}),n=w(e,s(),()=>{t=!1}),c=()=>n.render(s());return{getValue(){return a.value},update(o){t&&(Object.assign(a,o),c())},insertMarkdown(o){t&&!a.readOnly&&(a.value+=`
2
+
3
+ `+o,a.onChange?.(a.value),c())},focus(){t&&e.querySelector('[contenteditable="true"],textarea')?.focus()},dispose:n.dispose}}export{_ as mountPluginMarkdownEditor};
@@ -0,0 +1 @@
1
+ import{hu as U,hv as j,l1 as V}from"./appStore-DDOkzWDA.js";import{Q as I,S as W,B as z,T as F}from"./index-fDB1l4d-.js";const O=I().use(W).use(z,{singleTilde:!1}).use(F,["yaml"]).use(U).use(j,{singleTilde:!1}),s=i=>String(i??"").replace(/[&<>"']/g,u=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[u]);function E(i,u=!1){if(!i||/[\u0000-\u0020\u007f\\]/.test(i)||i.startsWith("//"))return null;if(i.startsWith("/")||i.startsWith("#"))return i;try{const l=new URL(i);if(l.protocol==="https:"||l.protocol==="http:"||!u&&l.protocol==="mailto:")return l.href}catch{}return!i.includes(":")&&!i.startsWith(".")?i:null}function S(i){return i.value??(i.children??[]).map(S).join("")}function A(i){return i.type!=="paragraph"?null:/^!\[\[([^\]\n]+)\]\]$/.exec(S(i).trim())?.[1]?.replace(/\|\d+$/,"")??null}function B(i){return i.type==="paragraph"&&i.children?.length===1&&i.children[0].type==="image"?i.children[0]:null}function P(i){try{return/\.(?:mp4|webm)$/i.test(new URL(i,"https://forsion.example").pathname)}catch{return!1}}function D(i,u={}){const l=O.parse(i),m=u.locale==="zh",c=(e,n=!1)=>{const r=E(e,n);if(!r||!u.baseUrl||r.startsWith("#"))return r;try{return E(new URL(r,u.baseUrl).href,n)}catch{return r}};let v=!0;const g=()=>{const e=!!u.priorityFirstImage&&v;return v=!1,e?'loading="eager" fetchpriority="high"':'loading="lazy"'},$=new Map((l.children??[]).filter(e=>e.type==="definition").map(e=>[e.identifier,e]));let o=0;const p=e=>(e.children??[]).map(b).join(""),d=(e,n)=>{const r=V(e),a=c(r?.provider==="Bilibili"&&/^BV[\w]{10}$/i.test(e.trim())?"https://www.bilibili.com/video/"+e.trim():e,!0);if(!a)return null;let h=a;try{h=new URL(a,"https://forsion.example").pathname}catch{}const y=/\.(mp4|webm|mov|m4v|ogv)$/i.test(h),q=/\.(mp3|m4a|ogg|wav|flac)$/i.test(h);if(!r&&!y&&!q)return null;const L=n?.alt||r?.provider||(m?q?"音频":"视频演示":q?"Audio":"Video demo"),C=n?.url?c(n.url,!0):null,w=/^(\d{1,4})[:/](\d{1,4})$/.exec(n?.title||""),M=w&&+w[1]>0&&+w[2]>0?` style="aspect-ratio:${+w[1]}/${+w[2]}"`:"",R=C?`<img src="${s(C)}" alt="${s(L)}" ${g()} decoding="async">`:`<div class="md-media-placeholder"><span>${s(L)}</span></div>`;return`<figure class="md-media" data-amadeus-media="${r?"platform":q?"audio":"video"}" data-src="${s(r?.src||a)}"><div class="md-media-stage${C?" has-poster":""}"${M}>${R}</div><figcaption><span>${s(L)}</span><button type="button" class="play-button">${m?"播放":"Play"}${r?` · ${r.provider}`:""}</button><a href="${s(a)}" target="_blank" rel="noopener noreferrer">${m?"打开原视频":"Open original"} ↗</a></figcaption><p class="md-media-error" role="status" hidden>${m?"暂时无法播放,请打开原视频。":"Playback is unavailable. Open the original video."}</p></figure>`};function b(e){const n=()=>p(e);switch(e.type){case"text":return s(e.value);case"strong":return`<strong>${n()}</strong>`;case"emphasis":return`<em>${n()}</em>`;case"delete":return`<del>${n()}</del>`;case"inlineCode":return`<code>${s(e.value)}</code>`;case"break":return"<br>";case"heading":{const r=Math.min(6,(e.depth??2)+(u.headingOffset??0));return`<h${r} id="${s(u.idPrefix||"md")}-${++o}">${n()}</h${r}>`}case"paragraph":{const r=A(e);if(r){const a=c(r,!0);if(a&&/\.(?:png|jpe?g|gif|webp|avif|svg)(?:[?#]|$)/i.test(a))return`<figure class="md-image"><img src="${s(a)}" alt="${s(r)}" ${g()} decoding="async"></figure>`;const h=d(r);if(h)return h;const y=c(r);return y?`<p class="md-bookmark"><a href="${s(y)}" target="_blank" rel="noopener noreferrer">${s(r)} ↗</a></p>`:`<p>${s(S(e))}</p>`}return`<p>${n()}</p>`}case"link":case"linkReference":{const r=e.url??$.get(e.identifier)?.url??"",a=c(r);return a?`<a href="${s(a)}"${/^https?:/.test(a)?' target="_blank" rel="noopener noreferrer"':""}>${n()}</a>`:n()}case"image":case"imageReference":{const r=$.get(e.identifier),a=c(e.url??r?.url??"",!0);return a&&P(a)?`<video src="${s(a)}" autoplay muted loop playsinline preload="metadata" aria-label="${s(e.alt||(m?"视频演示":"Video demo"))}" data-amadeus-demo></video>`:a?`<img src="${s(a)}" alt="${s(e.alt||"")}" ${g()} decoding="async">`:s(e.alt||"")}case"list":return`<${e.ordered?"ol":"ul"}${e.ordered&&e.start?` start="${e.start}"`:""}>${n()}</${e.ordered?"ol":"ul"}>`;case"listItem":return`<li>${e.checked!=null?`<input type="checkbox" disabled aria-label="${m?"清单项":"Checklist item"}"${e.checked?" checked":""}>`:""}${n()}</li>`;case"blockquote":{const r=e.children?.[0],a=r?.type==="paragraph"?/^\[!([\w-]+)\]([+-])?\s*(.*)/.exec(S(r)):null;if(!a)return`<blockquote>${n()}</blockquote>`;const h=(e.children??[]).slice(1).map(b).join(""),y=s(a[3]||a[1]);return a[2]?`<details class="md-callout md-fold"${a[2]==="+"?" open":""}><summary>${y}</summary><div>${h}</div></details>`:`<aside class="md-callout"><p class="md-callout-title">${y}</p>${h}</aside>`}case"table":return`<div class="md-table-wrap"><table>${(e.children??[]).map((r,a)=>`<${a?"tbody":"thead"}><tr>${(r.children??[]).map(h=>`<${a?"td":"th"}>${p(h)}</${a?"td":"th"}>`).join("")}</tr></${a?"tbody":"thead"}>`).join("")}</table></div>`;case"code":return`<pre><code${e.lang?` class="language-${s(e.lang.replace(/[^\w-]/g,""))}"`:""}>${s(e.value)}</code></pre>`;case"thematicBreak":return"<hr>";case"html":case"yaml":case"definition":return"";default:return e.children?n():s(e.value)}}const t=(l.children??[]).filter(e=>!["yaml","html","definition"].includes(e.type));let f="";t[0]?.type==="heading"&&t[0].depth===1&&(f=S(t.shift()));let k="",x=!1;for(let e=0;e<t.length;e++){const n=t[e];n.type==="heading"&&n.depth===2&&(x&&(k+="</section>"),k+='<section class="md-feature">',x=!0);const r=B(n),a=r&&!P(r.url??"")?r:null,h=t[e+1]&&A(t[e+1]),y=a&&h?d(h,a):null;if(y){k+=y,e++;continue}k+=b(n)}return x&&(k+="</section>"),{title:f,html:k}}function G(i,u="en"){const l=u==="zh",m=Array.from(i.querySelectorAll("[data-amadeus-media]")),c=new AbortController,v=o=>{m.forEach(p=>{p!==o&&p.querySelector("video,audio")?.pause()})};for(const o of m){const p=o.querySelector("button"),d=o.querySelector(".md-media-stage");p.addEventListener("click",()=>{const b=o.querySelector(".md-media-error");if(b.hidden=!0,o.dataset.amadeusMedia==="platform"){if(d.querySelector("iframe")){d.querySelector("iframe").remove(),d.classList.remove("playing"),p.textContent=l?"播放":"Play";return}v(o);const f=document.createElement("iframe");f.src=o.dataset.src,f.title=o.querySelector("figcaption span")?.textContent||"Video",f.allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen",f.allowFullscreen=!0,f.referrerPolicy="strict-origin-when-cross-origin",d.appendChild(f),d.classList.add("playing"),p.textContent=l?"关闭播放器":"Close player";return}let t=d.querySelector("video,audio");if(t||(t=document.createElement(o.dataset.amadeusMedia==="audio"?"audio":"video"),t.setAttribute("controls",""),t.setAttribute("playsinline",""),t.preload="none",t.src=o.dataset.src,d.appendChild(t),t.addEventListener("playing",()=>{d.classList.add("playing"),p.textContent=l?"暂停":"Pause"},{signal:c.signal}),t.addEventListener("pause",()=>{p.textContent=t.ended?l?"重播":"Replay":l?"继续播放":"Resume"},{signal:c.signal}),t.addEventListener("loadedmetadata",()=>{t instanceof HTMLVideoElement&&t.videoHeight&&(d.style.aspectRatio=`${t.videoWidth}/${t.videoHeight}`)},{signal:c.signal})),!t.paused){t.pause();return}v(o),t.play().catch(()=>{b.hidden=!1,d.classList.remove("playing")})},{signal:c.signal})}const g=H(i,c.signal),$=()=>{m.forEach(o=>o.querySelector("video,audio")?.pause())};return document.addEventListener("visibilitychange",()=>{document.hidden&&$(),g.sync()},{signal:c.signal}),()=>{c.abort(),$(),g.dispose(),m.forEach(o=>o.querySelector("iframe")?.remove())}}function H(i,u){const l=Array.from(i.querySelectorAll("video[data-amadeus-demo]")),m={sync(){},dispose(){}};if(!l.length)return m;const c=t=>{t.removeAttribute("autoplay"),t.pause(),t.controls=!0},v=typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,g=typeof IntersectionObserver<"u";if(!g&&!v)return m;const $=new Set(v?[]:l),o=new Set(g?[]:l),p=new Set;v&&l.forEach(c);const d=()=>{for(const t of l){if(!o.has(t)||document.hidden){t.paused||(t.pause(),$.has(t)||p.add(t));continue}!t.paused||!($.has(t)||p.delete(t))||($.has(t)&&(t.muted=!0),t.play()?.catch(f=>{f?.name==="AbortError"||u.aborted||$.delete(t)&&c(t)}))}},b=g?new IntersectionObserver(t=>{for(const f of t){const k=f.target;f.isIntersecting?o.add(k):o.delete(k)}d()}):null;for(const t of l)t.removeAttribute("autoplay"),b?.observe(t);return{sync:d,dispose(){b?.disconnect(),l.forEach(t=>t.pause())}}}export{G as m,D as r};
@@ -0,0 +1 @@
1
+ import{p as a}from"./pageStore-CyvNZEYX.js";const e=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M12 8v6",key:"1ib9pf"}],["path",{d:"M9 11h6",key:"1fldmi"}]],p=a("message-square-plus",e);export{p as M};
@@ -1 +1 @@
1
- import{r as t}from"./index-BYUntVIZ.js";t({"automation.deleted":{zh:"已删除「{name}」",en:"Deleted “{name}”"},"automation.deleteConfirm":{zh:"删除「{name}」?此操作无法撤销。",en:"Delete “{name}”? This can’t be undone."},"automation.undo":{zh:"撤销",en:"Undo"},"automation.ux.actions":{zh:"更多操作",en:"More actions"},"automation.ux.help":{zh:"使用说明",en:"Workflow help"},"automation.ux.properties":{zh:"规则配置",en:"Rule configuration"},"automation.ux.myWorkflows":{zh:"我的自动化",en:"My workflows"},"automation.ux.noRules":{zh:"从入门模板创建第一条自动化。",en:"Create your first workflow from a starter template."},"automation.ux.workspace":{zh:"自动化工作台",en:"Automation studio"},"automation.ux.welcome":{zh:"把重复的事,交给流程",en:"Turn repeat work into a workflow"},"automation.ux.intro":{zh:"从一个触发条件开始,连接 Agent、笔记和多维表,随时查看每一步的结果。",en:"Start with a trigger, connect your agents, notes and databases, and see what each step did."},"automation.ux.guide.trigger":{zh:"选择触发方式",en:"Choose a trigger"},"automation.ux.guide.triggerHint":{zh:"定时、事件、表格变化,或手动点击。",en:"A schedule, an event, a database change, or a click."},"automation.ux.guide.actions":{zh:"连接要做的事",en:"Connect your actions"},"automation.ux.guide.actionsHint":{zh:"在画布添加步骤,选中节点完成配置。",en:"Add steps on the canvas, then select a node to configure it."},"automation.ux.guide.test":{zh:"试运行,再启用",en:"Test, then enable"},"automation.ux.guide.testHint":{zh:"先保存为暂停状态,检查结果后开启。",en:"Save paused, review a test run, then enable it."},"automation.ux.startWith":{zh:"从场景开始",en:"Start with a use case"},"automation.ux.blank":{zh:"自定义流程",en:"Custom workflow"},"automation.ux.draftHint":{zh:"模板只填入草稿。保存前,你可以修改所有配置。",en:"Templates only fill a draft. Review and change anything before saving."},"automation.ux.native":{zh:"和 Forsion 一起工作",en:"Works with Forsion"},"automation.ux.nativeHint":{zh:"笔记按钮负责手动启动,多维表提供触发数据,Agent 处理任务,通知送达收件箱。Muse 和 Historian 的系统自动化也可在左侧单独管理。",en:"Note buttons start manual workflows, databases supply trigger data, agents handle tasks, and notifications arrive in your inbox. Manage Muse and Historian separately in the sidebar."},"automation.ux.reminder.name":{zh:"每日提醒",en:"Daily reminder"},"automation.ux.reminder.hint":{zh:"每天固定时间,把提醒送进收件箱。",en:"Send a reminder to your inbox at a set time each day."},"automation.ux.reminder.flow":{zh:"每天 09:00 → 发通知",en:"Daily at 09:00 → Notify"},"automation.ux.reminder.body":{zh:"今天有哪些值得优先处理的事?",en:"What deserves your attention today?"},"automation.ux.briefing.name":{zh:"Agent 每日简报",en:"Daily agent briefing"},"automation.ux.briefing.hint":{zh:"选一个 Agent,定时整理你关心的信息。",en:"Choose an agent to prepare a scheduled briefing."},"automation.ux.briefing.flow":{zh:"定时 → 跑 Agent",en:"Schedule → Run agent"},"automation.ux.briefing.prompt":{zh:"整理一份今日工作简报,总结当前待办和需要关注的事项。",en:"Prepare a daily briefing of current tasks and items that need attention."},"automation.ux.table.name":{zh:"新增记录提醒",en:"New record notification"},"automation.ux.table.hint":{zh:"多维表新增一行时,通知你及时跟进。",en:"Get notified when a new row is added to a database."},"automation.ux.table.flow":{zh:"新增记录 → 发通知",en:"Row added → Notify"},"automation.ux.table.body":{zh:"多维表新增了记录:{{row.id}}",en:"A new database row was added: {{row.id}}"},"automation.ux.button.name":{zh:"一键交给 Agent",en:"One click to an agent"},"automation.ux.button.hint":{zh:"手动执行常用任务,也能绑定到笔记按钮。",en:"Run a repeat task manually or attach it to a note button."},"automation.ux.button.flow":{zh:"手动点击 → 跑 Agent",en:"Manual click → Run agent"},"automation.ux.button.prompt":{zh:"检查我的待办,整理接下来最值得推进的三件事。",en:"Review my tasks and identify the three most useful next actions."},"automation.ux.overview":{zh:"入门与模板",en:"Guide and templates"},"automation.ux.search":{zh:"搜索自动化",en:"Search automations"},"automation.ux.noMatches":{zh:"没有匹配的自动化",en:"No matching automations"},"automation.ux.enable":{zh:"启用",en:"Enable"},"automation.ux.pause":{zh:"暂停",en:"Pause"},"automation.ux.on":{zh:"已启用",en:"Enabled"},"automation.ux.off":{zh:"已暂停",en:"Paused"},"automation.ux.flow":{zh:"工作流画布",en:"Workflow canvas"},"automation.ux.canvasHint":{zh:"拖动排列 · 点击配置",en:"Drag to arrange · Click to configure"},"automation.ux.canvasOrder":{zh:"按连线顺序执行。拖动只调整布局,步骤顺序在配置中调整。",en:"Steps run in connected order. Dragging changes the layout; use the step controls to reorder execution."},"automation.ux.zoomIn":{zh:"放大画布",en:"Zoom in"},"automation.ux.zoomOut":{zh:"缩小画布",en:"Zoom out"},"automation.ux.fit":{zh:"适应视图",en:"Fit to view"},"automation.ux.arrange":{zh:"自动排列",en:"Auto arrange"},"automation.ux.ready":{zh:"已配置",en:"Configured"},"automation.ux.incomplete":{zh:"待配置",en:"Needs setup"},"automation.ux.finish":{zh:"保存与启用",en:"Save and enable"},"automation.ux.finishHint":{zh:"检查配置与启动方式",en:"Review setup and activation"},"automation.ux.addStep":{zh:"添加步骤",en:"Add a step"},"automation.ux.maxSteps":{zh:"最多添加 24 个步骤",en:"Up to 24 steps"},"automation.ux.setup":{zh:"节点配置",en:"Node configuration"},"automation.ux.setupHint":{zh:"选中画布节点,配置触发条件或动作。",en:"Select a canvas node to configure its trigger or action."},"automation.ux.savePaused":{zh:"保存为暂停",en:"Save paused"},"automation.ux.saveEnabled":{zh:"保存并启用",en:"Save and enable"},"automation.ux.enabledLabel":{zh:"保存后启用",en:"Enable after saving"},"automation.ux.enableHint":{zh:"暂停状态仍可试运行;启用后才响应触发条件。",en:"Paused workflows can still be tested. Enable them to respond to triggers."},"automation.ux.saved":{zh:"自动化已保存",en:"Automation saved"},"automation.ux.checklist":{zh:"还需完成",en:"Complete the setup"},"automation.ux.allReady":{zh:"配置已完成,可以保存",en:"Ready to save"},"automation.ux.review":{zh:"检查并保存",en:"Review and save"},"automation.ux.issue.name":{zh:"填写自动化名称",en:"Enter a workflow name"},"automation.ux.issue.trigger":{zh:"补全触发条件",en:"Complete the trigger settings"},"automation.ux.issue.steps":{zh:"至少添加一个动作",en:"Add at least one action"},"automation.ux.issue.notify":{zh:"填写通知标题",en:"Enter a notification title"},"automation.ux.issue.agent":{zh:"选择执行任务的 Agent",en:"Choose an agent"},"automation.ux.issue.prompt":{zh:"说明 Agent 需要完成的任务",en:"Describe the task for the agent"},"automation.ux.issue.table":{zh:"选择目标多维表",en:"Choose a database"},"automation.ux.issue.cells":{zh:"至少指定一个要写入的字段",en:"Add at least one field to write"},"automation.ux.issue.row":{zh:"指定记录 ID 或按列值匹配目标记录",en:"Set a row ID or match target rows by a column value"},"automation.ux.issue.match":{zh:"填写记录匹配值",en:"Enter a row matching value"},"automation.ux.issue.tool":{zh:"选择一个可用工具",en:"Choose an available tool"},"automation.ux.issue.args":{zh:"补全工具的必填参数",en:"Complete the required tool arguments"},"automation.ux.issue.json":{zh:"填写有效的 JSON 参数",en:"Enter valid JSON arguments"},"automation.ux.issue.cooldown":{zh:"填写有效的冷却时长",en:"Enter a valid cooldown duration"},"automation.ux.variables":{zh:"插入变量",en:"Insert variable"},"automation.ux.insertVariable":{zh:"为「{field}」插入变量",en:"Insert a variable into {field}"},"automation.ux.today":{zh:"今天的日期",en:"Today"},"automation.ux.now":{zh:"当前时间",en:"Current time"},"automation.ux.triggerRow":{zh:"触发记录",en:"Trigger row"},"automation.ux.rowId":{zh:"记录 ID",en:"Row ID"},"automation.ux.runHint":{zh:"试运行会真实执行已保存的动作。",en:"Testing executes the saved actions."},"automation.ux.dbRunHint":{zh:"表格规则试运行不携带触发行数据;行变量与默认触发行目标需要真实表格事件。",en:"Database tests have no triggering row. Row variables and default row targets require a real database event."},"automation.ux.runResults":{zh:"运行结果",en:"Run results"},"automation.ux.runEmpty":{zh:"还没有运行记录。可以先试运行一次,或等待触发条件满足。",en:"No runs yet. Test the workflow or wait for its trigger."},"automation.ux.runLoading":{zh:"正在读取运行记录…",en:"Loading runs…"},"automation.ux.runError":{zh:"无法读取运行记录,请重试。",en:"Could not load runs. Please retry."},"automation.ux.retry":{zh:"重试",en:"Retry"},"automation.ux.done":{zh:"已完成",en:"Completed"},"automation.ux.failed":{zh:"失败",en:"Failed"},"automation.ux.running":{zh:"运行中",en:"Running"},"automation.ux.queued":{zh:"排队中",en:"Queued"},"automation.ux.autoOrigin":{zh:"自动触发",en:"Automatic"},"automation.ux.manualOrigin":{zh:"手动执行",en:"Manual"},"automation.ux.stepResult":{zh:"步骤 {n} · {type}",en:"Step {n} · {type}"},"automation.ux.latestResults":{zh:"每步执行结果",en:"Step results"},"automation.ux.noSteps":{zh:"这次执行没有步骤结果。",en:"No step results were recorded for this run."},"automation.ux.systemHint":{zh:"系统助理",en:"System assistants"},"automation.ux.loadError":{zh:"自动化加载失败,请重试。",en:"Could not load automations. Please retry."}});
1
+ import{a as t}from"./index-fDB1l4d-.js";t({"automation.deleted":{zh:"已删除「{name}」",en:"Deleted “{name}”"},"automation.deleteConfirm":{zh:"删除「{name}」?此操作无法撤销。",en:"Delete “{name}”? This can’t be undone."},"automation.undo":{zh:"撤销",en:"Undo"},"automation.ux.actions":{zh:"更多操作",en:"More actions"},"automation.ux.help":{zh:"使用说明",en:"Workflow help"},"automation.ux.properties":{zh:"规则配置",en:"Rule configuration"},"automation.ux.myWorkflows":{zh:"我的自动化",en:"My workflows"},"automation.ux.noRules":{zh:"从入门模板创建第一条自动化。",en:"Create your first workflow from a starter template."},"automation.ux.workspace":{zh:"自动化工作台",en:"Automation studio"},"automation.ux.welcome":{zh:"把重复的事,交给流程",en:"Turn repeat work into a workflow"},"automation.ux.intro":{zh:"从一个触发条件开始,连接 Agent、笔记和多维表,随时查看每一步的结果。",en:"Start with a trigger, connect your agents, notes and databases, and see what each step did."},"automation.ux.guide.trigger":{zh:"选择触发方式",en:"Choose a trigger"},"automation.ux.guide.triggerHint":{zh:"定时、事件、表格变化,或手动点击。",en:"A schedule, an event, a database change, or a click."},"automation.ux.guide.actions":{zh:"连接要做的事",en:"Connect your actions"},"automation.ux.guide.actionsHint":{zh:"在画布添加步骤,选中节点完成配置。",en:"Add steps on the canvas, then select a node to configure it."},"automation.ux.guide.test":{zh:"试运行,再启用",en:"Test, then enable"},"automation.ux.guide.testHint":{zh:"先保存为暂停状态,检查结果后开启。",en:"Save paused, review a test run, then enable it."},"automation.ux.startWith":{zh:"从场景开始",en:"Start with a use case"},"automation.ux.blank":{zh:"自定义流程",en:"Custom workflow"},"automation.ux.draftHint":{zh:"模板只填入草稿。保存前,你可以修改所有配置。",en:"Templates only fill a draft. Review and change anything before saving."},"automation.ux.native":{zh:"和 Forsion 一起工作",en:"Works with Forsion"},"automation.ux.nativeHint":{zh:"笔记按钮负责手动启动,多维表提供触发数据,Agent 处理任务,通知送达收件箱。Muse 和 Historian 的系统自动化也可在左侧单独管理。",en:"Note buttons start manual workflows, databases supply trigger data, agents handle tasks, and notifications arrive in your inbox. Manage Muse and Historian separately in the sidebar."},"automation.ux.reminder.name":{zh:"每日提醒",en:"Daily reminder"},"automation.ux.reminder.hint":{zh:"每天固定时间,把提醒送进收件箱。",en:"Send a reminder to your inbox at a set time each day."},"automation.ux.reminder.flow":{zh:"每天 09:00 → 发通知",en:"Daily at 09:00 → Notify"},"automation.ux.reminder.body":{zh:"今天有哪些值得优先处理的事?",en:"What deserves your attention today?"},"automation.ux.briefing.name":{zh:"Agent 每日简报",en:"Daily agent briefing"},"automation.ux.briefing.hint":{zh:"选一个 Agent,定时整理你关心的信息。",en:"Choose an agent to prepare a scheduled briefing."},"automation.ux.briefing.flow":{zh:"定时 → 跑 Agent",en:"Schedule → Run agent"},"automation.ux.briefing.prompt":{zh:"整理一份今日工作简报,总结当前待办和需要关注的事项。",en:"Prepare a daily briefing of current tasks and items that need attention."},"automation.ux.table.name":{zh:"新增记录提醒",en:"New record notification"},"automation.ux.table.hint":{zh:"多维表新增一行时,通知你及时跟进。",en:"Get notified when a new row is added to a database."},"automation.ux.table.flow":{zh:"新增记录 → 发通知",en:"Row added → Notify"},"automation.ux.table.body":{zh:"多维表新增了记录:{{row.id}}",en:"A new database row was added: {{row.id}}"},"automation.ux.button.name":{zh:"一键交给 Agent",en:"One click to an agent"},"automation.ux.button.hint":{zh:"手动执行常用任务,也能绑定到笔记按钮。",en:"Run a repeat task manually or attach it to a note button."},"automation.ux.button.flow":{zh:"手动点击 → 跑 Agent",en:"Manual click → Run agent"},"automation.ux.button.prompt":{zh:"检查我的待办,整理接下来最值得推进的三件事。",en:"Review my tasks and identify the three most useful next actions."},"automation.ux.overview":{zh:"入门与模板",en:"Guide and templates"},"automation.ux.search":{zh:"搜索自动化",en:"Search automations"},"automation.ux.noMatches":{zh:"没有匹配的自动化",en:"No matching automations"},"automation.ux.enable":{zh:"启用",en:"Enable"},"automation.ux.pause":{zh:"暂停",en:"Pause"},"automation.ux.on":{zh:"已启用",en:"Enabled"},"automation.ux.off":{zh:"已暂停",en:"Paused"},"automation.ux.flow":{zh:"工作流画布",en:"Workflow canvas"},"automation.ux.canvasHint":{zh:"拖动排列 · 点击配置",en:"Drag to arrange · Click to configure"},"automation.ux.canvasOrder":{zh:"按连线顺序执行。拖动只调整布局,步骤顺序在配置中调整。",en:"Steps run in connected order. Dragging changes the layout; use the step controls to reorder execution."},"automation.ux.zoomIn":{zh:"放大画布",en:"Zoom in"},"automation.ux.zoomOut":{zh:"缩小画布",en:"Zoom out"},"automation.ux.fit":{zh:"适应视图",en:"Fit to view"},"automation.ux.arrange":{zh:"自动排列",en:"Auto arrange"},"automation.ux.ready":{zh:"已配置",en:"Configured"},"automation.ux.incomplete":{zh:"待配置",en:"Needs setup"},"automation.ux.finish":{zh:"保存与启用",en:"Save and enable"},"automation.ux.finishHint":{zh:"检查配置与启动方式",en:"Review setup and activation"},"automation.ux.addStep":{zh:"添加步骤",en:"Add a step"},"automation.ux.maxSteps":{zh:"最多添加 24 个步骤",en:"Up to 24 steps"},"automation.ux.setup":{zh:"节点配置",en:"Node configuration"},"automation.ux.setupHint":{zh:"选中画布节点,配置触发条件或动作。",en:"Select a canvas node to configure its trigger or action."},"automation.ux.savePaused":{zh:"保存为暂停",en:"Save paused"},"automation.ux.saveEnabled":{zh:"保存并启用",en:"Save and enable"},"automation.ux.enabledLabel":{zh:"保存后启用",en:"Enable after saving"},"automation.ux.enableHint":{zh:"暂停状态仍可试运行;启用后才响应触发条件。",en:"Paused workflows can still be tested. Enable them to respond to triggers."},"automation.ux.saved":{zh:"自动化已保存",en:"Automation saved"},"automation.ux.checklist":{zh:"还需完成",en:"Complete the setup"},"automation.ux.allReady":{zh:"配置已完成,可以保存",en:"Ready to save"},"automation.ux.review":{zh:"检查并保存",en:"Review and save"},"automation.ux.issue.name":{zh:"填写自动化名称",en:"Enter a workflow name"},"automation.ux.issue.trigger":{zh:"补全触发条件",en:"Complete the trigger settings"},"automation.ux.issue.steps":{zh:"至少添加一个动作",en:"Add at least one action"},"automation.ux.issue.notify":{zh:"填写通知标题",en:"Enter a notification title"},"automation.ux.issue.agent":{zh:"选择执行任务的 Agent",en:"Choose an agent"},"automation.ux.issue.prompt":{zh:"说明 Agent 需要完成的任务",en:"Describe the task for the agent"},"automation.ux.issue.table":{zh:"选择目标多维表",en:"Choose a database"},"automation.ux.issue.cells":{zh:"至少指定一个要写入的字段",en:"Add at least one field to write"},"automation.ux.issue.row":{zh:"指定记录 ID 或按列值匹配目标记录",en:"Set a row ID or match target rows by a column value"},"automation.ux.issue.match":{zh:"填写记录匹配值",en:"Enter a row matching value"},"automation.ux.issue.tool":{zh:"选择一个可用工具",en:"Choose an available tool"},"automation.ux.issue.args":{zh:"补全工具的必填参数",en:"Complete the required tool arguments"},"automation.ux.issue.json":{zh:"填写有效的 JSON 参数",en:"Enter valid JSON arguments"},"automation.ux.issue.cooldown":{zh:"填写有效的冷却时长",en:"Enter a valid cooldown duration"},"automation.ux.variables":{zh:"插入变量",en:"Insert variable"},"automation.ux.insertVariable":{zh:"为「{field}」插入变量",en:"Insert a variable into {field}"},"automation.ux.today":{zh:"今天的日期",en:"Today"},"automation.ux.now":{zh:"当前时间",en:"Current time"},"automation.ux.triggerRow":{zh:"触发记录",en:"Trigger row"},"automation.ux.rowId":{zh:"记录 ID",en:"Row ID"},"automation.ux.runHint":{zh:"试运行会真实执行已保存的动作。",en:"Testing executes the saved actions."},"automation.ux.dbRunHint":{zh:"表格规则试运行不携带触发行数据;行变量与默认触发行目标需要真实表格事件。",en:"Database tests have no triggering row. Row variables and default row targets require a real database event."},"automation.ux.runResults":{zh:"运行结果",en:"Run results"},"automation.ux.runEmpty":{zh:"还没有运行记录。可以先试运行一次,或等待触发条件满足。",en:"No runs yet. Test the workflow or wait for its trigger."},"automation.ux.runLoading":{zh:"正在读取运行记录…",en:"Loading runs…"},"automation.ux.runError":{zh:"无法读取运行记录,请重试。",en:"Could not load runs. Please retry."},"automation.ux.retry":{zh:"重试",en:"Retry"},"automation.ux.done":{zh:"已完成",en:"Completed"},"automation.ux.failed":{zh:"失败",en:"Failed"},"automation.ux.running":{zh:"运行中",en:"Running"},"automation.ux.queued":{zh:"排队中",en:"Queued"},"automation.ux.autoOrigin":{zh:"自动触发",en:"Automatic"},"automation.ux.manualOrigin":{zh:"手动执行",en:"Manual"},"automation.ux.stepResult":{zh:"步骤 {n} · {type}",en:"Step {n} · {type}"},"automation.ux.latestResults":{zh:"每步执行结果",en:"Step results"},"automation.ux.noSteps":{zh:"这次执行没有步骤结果。",en:"No step results were recorded for this run."},"automation.ux.systemHint":{zh:"系统助理",en:"System assistants"},"automation.ux.loadError":{zh:"自动化加载失败,请重试。",en:"Could not load automations. Please retry."}});
@@ -0,0 +1 @@
1
+ import{p as e}from"./pageStore-CyvNZEYX.js";const i=[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]],t=e("minimize-2",i);export{t as M};
@@ -0,0 +1 @@
1
+ .mb-sheet-scrim.us-scrim{z-index:60}.us-sheet{display:flex;flex-direction:column;max-height:78%;padding-bottom:calc(10px + env(safe-area-inset-bottom))}.us-head{display:flex;align-items:center;gap:8px;padding:0 6px 4px 12px}.us-head-title{flex:1;min-width:0;font-size:var(--ui-font-title);line-height:var(--ui-line-title);font-weight:600}.us-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-muted)}.us-icon-btn:active{background:var(--bg-hover)}.us-body{overflow-y:auto;min-height:0}.us-section{padding:6px 0 2px}.us-section+.us-section{border-top:var(--border-width, 1px) solid var(--border);margin-top:6px}.us-section-title{display:flex;align-items:center;gap:6px;padding:8px 12px 4px;font-size:var(--ui-font-meta);line-height:var(--ui-line-meta);font-weight:500;color:var(--text-muted)}.us-section-toggle{width:100%;border:none;background:transparent;text-align:left;font:inherit}.us-section-toggle svg{transition:transform .16s ease}.us-section-toggle[aria-expanded=true] svg{transform:rotate(180deg)}.us-row.mb-sheet-row{padding:10px 12px;gap:12px;align-items:flex-start}.us-row[aria-disabled=true]{opacity:.55}.us-row-icon{flex:none;display:inline-flex;width:22px;justify-content:center;margin-top:1px;color:var(--text-light)}.us-row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.us-row-title{display:flex;align-items:center;gap:6px;font-size:var(--ui-font-heading);line-height:var(--ui-line-heading);color:var(--text)}.us-row-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.us-row-sub{display:flex;align-items:center;gap:6px;font-size:var(--ui-font-meta);line-height:var(--ui-line-meta);color:var(--text-muted)}.us-row-sub .settings-status-dot{flex:none;box-shadow:none}.us-row-sub .settings-status-dot.warn{background:var(--warning)}.us-row-end{flex:none;align-self:center;display:inline-flex;align-items:center;gap:6px;color:var(--text-faint)}.us-pill{flex:none;font-style:normal;font-size:var(--ui-font-caption);line-height:var(--ui-line-caption);font-weight:500;padding:1px 7px;border-radius:var(--radius-pill);background:var(--accent-light);color:var(--accent-ink)}.us-pill.muted{background:var(--overlay-light);color:var(--text-muted)}.us-banner{margin:2px 12px 6px;padding:8px 10px;border-radius:var(--radius-md);background:var(--warning-light);color:var(--text-light);font-size:var(--ui-font-meta);line-height:var(--ui-line-meta)}.us-empty{padding:12px;font-size:var(--ui-font-body);line-height:var(--ui-line-body);color:var(--text-muted)}.us-self{display:flex;align-items:center;gap:12px;padding:8px 12px 10px}.us-self-text{flex:1;min-width:0;font-size:var(--ui-font-body);line-height:var(--ui-line-body);color:var(--text-light)}.us-btn{flex:none;padding:6px 12px;border-radius:var(--radius-sm);border:var(--border-width, 1px) solid var(--border);background:var(--bg-card);color:var(--text);font:inherit;font-size:var(--ui-font-body);line-height:var(--ui-line-body)}.us-btn:active{background:var(--bg-hover)}.us-btn.danger{color:var(--danger)}.us-confirm{margin:0 12px 10px;padding:10px;border-radius:var(--radius-md);background:var(--danger-light);display:flex;flex-direction:column;gap:8px;font-size:var(--ui-font-meta);line-height:var(--ui-line-meta);color:var(--text-light)}.us-confirm-actions{display:flex;justify-content:flex-end;gap:8px}.us-addr{padding:6px 12px 10px}.us-addr-desc{font-size:var(--ui-font-meta);line-height:var(--ui-line-meta);color:var(--text-muted);margin-bottom:8px}.us-addr-row{display:flex;gap:8px}.us-addr-row input{flex:1;min-width:0;padding:7px 10px;border-radius:var(--radius-sm);border:var(--border-width, 1px) solid var(--border);background:var(--bg-input);color:var(--text);font:inherit;font-size:var(--ui-font-body);line-height:var(--ui-line-body)}.bmc-chrome{position:fixed;inset:0;z-index:35;pointer-events:none;color:var(--text);font-family:var(--font-ui)}.bmc-top{position:absolute;top:calc(env(safe-area-inset-top) / var(--uiz, 1));left:0;right:0;display:flex;justify-content:space-between;gap:8px;padding:6px 8px}.bmc-capsule,.bmc-dock{position:relative;display:flex;align-items:center;gap:2px;padding:2px;pointer-events:auto;border-radius:var(--radius-pill)}.bmc-capsule:before,.bmc-dock:before{content:"";position:absolute;inset:0;z-index:-1;border:1px solid var(--border);border-radius:inherit;background:color-mix(in srgb,var(--bg-card) 88%,transparent);box-shadow:var(--card-shadow);backdrop-filter:blur(18px) saturate(1.8);-webkit-backdrop-filter:blur(18px) saturate(1.8)}:root[data-glass=off] .bmc-capsule:before,:root[data-glass=off] .bmc-dock:before{background:var(--bg-card);backdrop-filter:none;-webkit-backdrop-filter:none}.bmc-heading{min-width:0;max-width:65%}.bmc-actions{flex-shrink:0}.bmc-actions:empty{display:none}.bmc-chrome[data-mode=page]{z-index:55}body:has([data-browser-mobile-chrome][data-mode=page]) .settings-page[data-native-chrome]{padding-top:calc(var(--nc-top, 0) * 1px / var(--uiz, 1))}.bmc-button{width:36px;height:36px;flex:0 0 36px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--radius-pill);background:transparent;color:inherit;cursor:pointer}.bmc-button:hover,.bmc-title:is(button):hover,.bmc-destination:hover,.bmc-sheet-row:hover{background:var(--bg-hover)}.bmc-title{display:flex;align-items:center;gap:5px;min-width:0;padding:0 12px;height:36px;font:inherit;font-size:var(--ui-font-body);font-weight:500;color:inherit;border:0;border-radius:var(--radius-pill);background:transparent}.bmc-title>span,.bmc-title>small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bmc-title>small{font-size:var(--ui-font-meta);color:var(--text-muted)}.bmc-title>svg{flex-shrink:0}.bmc-account{font-size:var(--ui-font-body)}.bmc-account>img{width:28px;height:28px;border-radius:50%;object-fit:cover}.bmc-dock{position:absolute;bottom:calc(env(safe-area-inset-bottom) / var(--uiz, 1) + 8px);left:50%;translate:-50% 0;width:min(500px,calc(100vw / var(--uiz, 1) - 16px));padding:4px}.bmc-destination{display:flex;flex:1 1 0;min-width:0;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:48px;padding:4px 2px;border:0;border-radius:var(--radius-pill);color:var(--text-muted);background:transparent;font-family:inherit;font-size:var(--ui-font-caption);line-height:var(--ui-line-caption);cursor:pointer}.bmc-destination>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.bmc-destination[aria-current]{background:var(--accent-light);color:var(--accent-ink)}.bmc-destination-icon{position:relative;display:flex}.bmc-badge{position:absolute;right:-4px;top:0;width:6px;height:6px;border-radius:50%;background:var(--accent-ink)}.bmc-badge[data-kind=attention]{background:var(--warning)}.bmc-badge[data-kind=unread]{background:var(--danger)}.bmc-sheet-dialog{position:fixed;inset:0;width:100%;max-width:none;height:100%;max-height:none;margin:0;padding:0;border:0;background:transparent;color:var(--text);overflow:hidden}.bmc-sheet-dialog[open]{display:flex;align-items:flex-end;justify-content:center}.bmc-sheet-dialog::backdrop{background:var(--overlay-scrim)}.bmc-sheet{width:100%;max-width:560px;max-height:min(85%,calc(100% - env(safe-area-inset-top)));padding:0 12px calc(12px + env(safe-area-inset-bottom));background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg) var(--radius-lg) 0 0;box-shadow:var(--card-shadow);font-family:var(--font-ui);font-size:var(--ui-font-body);display:flex;flex-direction:column;min-height:0;animation:ui-menu-enter var(--menu-enter-duration) var(--menu-enter-ease)}.bmc-sheet-head{display:flex;align-items:center;gap:6px;flex-shrink:0}.bmc-sheet-head>strong{flex:1;min-width:0;font-size:var(--ui-font-heading);font-weight:500;overflow-wrap:anywhere}.bmc-sheet-body{overflow-y:auto;min-height:0;overscroll-behavior:contain}.bmc-sheet-search{margin:8px 0;flex-shrink:0}.bmc-sheet-section+.bmc-sheet-section{margin-top:8px;padding-top:8px;border-top:1px solid var(--border)}.bmc-sheet-section-title,.bmc-sheet-note{color:var(--text-muted);font-size:var(--ui-font-meta);padding:4px 8px}.bmc-sheet-item{display:flex;align-items:center}.bmc-sheet-row{display:flex;align-items:center;gap:12px;flex:1;width:100%;min-width:0;min-height:44px;padding:8px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text);font:inherit;text-align:left;cursor:pointer}.bmc-sheet-row:disabled{color:var(--text-muted);cursor:default}.bmc-sheet-row[data-danger],.bmc-sheet-submit[data-danger]{color:var(--danger)}.bmc-sheet-icon{width:20px;height:20px;flex:0 0 20px}.bmc-sheet-copy{flex:1;min-width:0;overflow-wrap:anywhere}.bmc-sheet-copy>small{display:block;margin-top:3px;font-size:var(--ui-font-meta);color:var(--text-muted)}.bmc-sheet-row>svg:last-child{flex-shrink:0}.bmc-sheet-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}.bmc-sheet-grid .bmc-sheet-row{flex-direction:column;text-align:center;gap:6px}.bmc-sheet-grid .bmc-sheet-row>svg:last-child:not(:first-child){display:none}.bmc-sheet-grid [aria-pressed=true]{background:var(--accent-light);color:var(--accent-ink)}.bmc-sheet-buttons{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.bmc-sheet-submit{display:block;min-height:36px;padding:6px 16px;margin:8px 0;border:0;border-radius:var(--radius-sm);background:var(--action-fill);color:var(--on-action);font:inherit;cursor:pointer}.bmc-sheet form>input{width:100%;margin-top:8px}@media(prefers-reduced-motion:reduce){.bmc-sheet{animation:none}}:root{--bmc-rail-w: 76px}html[data-browser-rail] .mb-shell{left:calc(var(--bmc-rail-w) + env(safe-area-inset-left) / var(--uiz, 1))}.bmc-rail{position:absolute;top:0;bottom:0;left:0;box-sizing:border-box;width:calc(var(--bmc-rail-w) + env(safe-area-inset-left) / var(--uiz, 1));display:flex;flex-direction:column;align-items:center;gap:4px;padding:calc(env(safe-area-inset-top) / var(--uiz, 1) + 8px) 0 calc(env(safe-area-inset-bottom) / var(--uiz, 1) + 10px) calc(env(safe-area-inset-left) / var(--uiz, 1));background:var(--bg);border-right:1px solid var(--border);pointer-events:auto}.bmc-rail-cells{flex:1 1 0;min-height:0;align-self:stretch;overflow:hidden;display:flex;flex-direction:column;align-items:center;gap:4px}.bmc-rail .bmc-destination{flex:none;width:62px;height:58px;min-height:0;border-radius:var(--radius-lg)}