dsh-film 0.6.2 → 0.6.4

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 (142) hide show
  1. package/README.md +14 -0
  2. package/apps/toonflow/SOURCE.json +1 -1
  3. package/apps/toonflow/build/ext/ext-image.umd.js +2 -2
  4. package/apps/toonflow/build/ext/ext-txt.umd.js +2 -2
  5. package/apps/toonflow/build/server/film.js +741 -741
  6. package/apps/toonflow/build/web/assets/{abnfDiagram-VCTEODGH-D0UMhTg3.js → abnfDiagram-VCTEODGH-y83QCmFJ.js} +1 -1
  7. package/apps/toonflow/build/web/assets/{about-B5Sps3Qo.js → about-dIL_CMsv.js} +3 -3
  8. package/apps/toonflow/build/web/assets/{addCustomProviderDialog-C5OyavzH.js → addCustomProviderDialog-BqT6et2m.js} +3 -3
  9. package/apps/toonflow/build/web/assets/{addCustomProviderDialog-CejAThBZ.js → addCustomProviderDialog-gCI7xKuG.js} +1 -1
  10. package/apps/toonflow/build/web/assets/{addProviderDialog-CPXfe0D1.js → addProviderDialog-DoSNCG2I.js} +1 -1
  11. package/apps/toonflow/build/web/assets/{alert-BLKtm_mK-Cf9oSaeT.js → alert-BLKtm_mK-BcrpHnu7.js} +1 -1
  12. package/apps/toonflow/build/web/assets/{architectureDiagram-5GKGNRK7-Dd_S6bvi.js → architectureDiagram-5GKGNRK7-CWBYaKdg.js} +1 -1
  13. package/apps/toonflow/build/web/assets/{blockDiagram-I7D4REHJ-grImzEwn.js → blockDiagram-I7D4REHJ-BVXJd5c3.js} +1 -1
  14. package/apps/toonflow/build/web/assets/{button--KQ-t6Kp-8DJGLp43.js → button--KQ-t6Kp-WJonUtSh.js} +1 -1
  15. package/apps/toonflow/build/web/assets/{c4Diagram-7LVT6UL2-D3lemEfk.js → c4Diagram-7LVT6UL2-CPXPy3dm.js} +1 -1
  16. package/apps/toonflow/build/web/assets/{caret--fIGj8_a-CBE0d3Q3.js → caret--fIGj8_a-CLiDOZW2.js} +1 -1
  17. package/apps/toonflow/build/web/assets/channel-DOESkbFg.js +1 -0
  18. package/apps/toonflow/build/web/assets/{chunk-4HAMMTFA-CNETP6t6.js → chunk-4HAMMTFA-ef7XESoL.js} +1 -1
  19. package/apps/toonflow/build/web/assets/{chunk-75Z2AOVW-Bq1Y1b2X.js → chunk-75Z2AOVW-BdCLTTBl.js} +1 -1
  20. package/apps/toonflow/build/web/assets/{chunk-DU6HZSFF-DkYz31LP.js → chunk-DU6HZSFF-CAzSadZm.js} +1 -1
  21. package/apps/toonflow/build/web/assets/{chunk-F27PBJKO-C2sCNlew.js → chunk-F27PBJKO-DToUh-A4.js} +1 -1
  22. package/apps/toonflow/build/web/assets/{chunk-GMAD6QVW-BHb3tsdx.js → chunk-GMAD6QVW-BD64RIys.js} +1 -1
  23. package/apps/toonflow/build/web/assets/{chunk-GVQU2GXP-cTLEANgW.js → chunk-GVQU2GXP-DQ59Dd8F.js} +1 -1
  24. package/apps/toonflow/build/web/assets/{chunk-IMKFNOWR-BJs_GqSS.js → chunk-IMKFNOWR-DBPp7OE-.js} +1 -1
  25. package/apps/toonflow/build/web/assets/{chunk-L3NEJ4N5-Lseu6w25.js → chunk-L3NEJ4N5-De49_jZc.js} +1 -1
  26. package/apps/toonflow/build/web/assets/{chunk-OSK3NFVY-CIoPijZ4.js → chunk-OSK3NFVY-DXhg5kGi.js} +1 -1
  27. package/apps/toonflow/build/web/assets/{chunk-P2QGCYS3-qmgSMszd.js → chunk-P2QGCYS3-OSarx9Xh.js} +1 -1
  28. package/apps/toonflow/build/web/assets/{chunk-POPQ4Y6H-Ky3JKcZZ.js → chunk-POPQ4Y6H-Dny3GXCk.js} +1 -1
  29. package/apps/toonflow/build/web/assets/{chunk-PWAF6VOD-CcA1jdPH.js → chunk-PWAF6VOD-BcxC7Kqh.js} +1 -1
  30. package/apps/toonflow/build/web/assets/{chunk-SHT3W25Y-BlZvcajQ.js → chunk-SHT3W25Y-DAf7oaDJ.js} +1 -1
  31. package/apps/toonflow/build/web/assets/{chunk-SVP7TREG-CrN9bK-I.js → chunk-SVP7TREG-BfGkFIIA.js} +1 -1
  32. package/apps/toonflow/build/web/assets/{chunk-TICWLB2K-ItBIecIF.js → chunk-TICWLB2K-BpN-F2ER.js} +1 -1
  33. package/apps/toonflow/build/web/assets/{chunk-XXDRQBXY-Brr7Z5Fx.js → chunk-XXDRQBXY-D5vO1fps.js} +1 -1
  34. package/apps/toonflow/build/web/assets/classDiagram-ZZMXUADV-DS18AjIC.js +1 -0
  35. package/apps/toonflow/build/web/assets/classDiagram-v2-VYDZK3BY-DS18AjIC.js +1 -0
  36. package/apps/toonflow/build/web/assets/{code-TE80M-uF-hmHATCjD.js → code-TE80M-uF-CWMi6oCr.js} +1 -1
  37. package/apps/toonflow/build/web/assets/{code-block-DHMOMJDf-D62Pz4L_.js → code-block-DHMOMJDf-emIqudh0.js} +2 -2
  38. package/apps/toonflow/build/web/assets/{color-picker-BoX927RI.js → color-picker-WZ0kDS5A.js} +1 -1
  39. package/apps/toonflow/build/web/assets/{cose-bilkent-JH36ORCC-DHMmv4zy.js → cose-bilkent-JH36ORCC-CZy7vS57.js} +1 -1
  40. package/apps/toonflow/build/web/assets/{css-1Sjp8svB.js → css-BDAuNTf7.js} +1 -1
  41. package/apps/toonflow/build/web/assets/{css-CUCiX9Ma.js → css-Btp2aWrP.js} +1 -1
  42. package/apps/toonflow/build/web/assets/{css-Cxax0Egt.js → css-DO-xQ-Bb.js} +3 -3
  43. package/apps/toonflow/build/web/assets/css-QiNpwTCa.js +1 -0
  44. package/apps/toonflow/build/web/assets/{css-BNNJjTg7.js → css-v1gDjeA1.js} +1 -1
  45. package/apps/toonflow/build/web/assets/{cynefinDiagram-5FMLGOSQ-CC1cmzCF.js → cynefinDiagram-5FMLGOSQ-DFTfuJhx.js} +1 -1
  46. package/apps/toonflow/build/web/assets/{dagre-GXQ25YYZ-Df-e8Lu8.js → dagre-GXQ25YYZ--zogJOD3.js} +1 -1
  47. package/apps/toonflow/build/web/assets/{developer-CQuy0gBx.js → developer-CxWOumb_.js} +2 -2
  48. package/apps/toonflow/build/web/assets/{diagram-S7CK7UJ4-Beb25yht.js → diagram-S7CK7UJ4-BLh04A13.js} +1 -1
  49. package/apps/toonflow/build/web/assets/{diagram-UQ7AKVKN-DAbxFcpF.js → diagram-UQ7AKVKN-DbRAzGBZ.js} +1 -1
  50. package/apps/toonflow/build/web/assets/{diagram-VSXAHHWV-D0XiX_XN.js → diagram-VSXAHHWV-Bn_GhQ-d.js} +1 -1
  51. package/apps/toonflow/build/web/assets/{diagram-VX7I27RA-BuyoJ_A_.js → diagram-VX7I27RA-Bso4bdB7.js} +1 -1
  52. package/apps/toonflow/build/web/assets/{diagram-Z3DM3KII-B918kH1j.js → diagram-Z3DM3KII-Bp9mEiVb.js} +1 -1
  53. package/apps/toonflow/build/web/assets/document-BaSkuwsP.js +1313 -0
  54. package/apps/toonflow/build/web/assets/{dropdown-C1VVicv6-0gj-RRgq.js → dropdown-C1VVicv6-CdMswHRC.js} +1 -1
  55. package/apps/toonflow/build/web/assets/{ebnfDiagram-PWID7BFC-ZZ73eUML.js → ebnfDiagram-PWID7BFC-BWKWhGDg.js} +1 -1
  56. package/apps/toonflow/build/web/assets/{editProviderDialog-Pdhg7e8i.js → editProviderDialog-CrpmX7gl.js} +2 -2
  57. package/apps/toonflow/build/web/assets/{erDiagram-RLTQ6QDP-DN6ctKTl.js → erDiagram-RLTQ6QDP-DImoQGL4.js} +1 -1
  58. package/apps/toonflow/build/web/assets/{error-component-DtKM0hGV-D4RGCxRl.js → error-component-DtKM0hGV-BXP1OKuw.js} +1 -1
  59. package/apps/toonflow/build/web/assets/flowDiagram-HODETNUW-C2uzaIhZ.js +1 -0
  60. package/apps/toonflow/build/web/assets/{footnote-definition-DCmA6zZU-DjLBYGXj.js → footnote-definition-DCmA6zZU-DAKS9czk.js} +1 -1
  61. package/apps/toonflow/build/web/assets/{footnote-reference-Bzs0VYi--DKF6PYQQ.js → footnote-reference-Bzs0VYi--BIT275Vi.js} +1 -1
  62. package/apps/toonflow/build/web/assets/{formCreate-CGkCL76k.js → formCreate-B8Btt2yn.js} +1 -1
  63. package/apps/toonflow/build/web/assets/{ganttDiagram-EL5Y4UJY-BBW7i-rw.js → ganttDiagram-EL5Y4UJY-CuZDQQM4.js} +1 -1
  64. package/apps/toonflow/build/web/assets/{general-DEsq8_VV.js → general-RnZ0j2lt.js} +1 -1
  65. package/apps/toonflow/build/web/assets/{gitGraphDiagram-WWUBYQGX-fWLDoC89.js → gitGraphDiagram-WWUBYQGX-DlxoVuhL.js} +1 -1
  66. package/apps/toonflow/build/web/assets/{hello-BqtUdzEf.js → hello-BCgdwhHG.js} +2 -2
  67. package/apps/toonflow/build/web/assets/{home-DOhSYThT.js → home-D1E87Xmw.js} +1 -1
  68. package/apps/toonflow/build/web/assets/{html-wOlXXuRb-CY33Zr7S.js → html-wOlXXuRb-C5lUM4DH.js} +1 -1
  69. package/apps/toonflow/build/web/assets/{icon-B9ufy3Wq-L-5WZyxF.js → icon-B9ufy3Wq-BbnCPReU.js} +1 -1
  70. package/apps/toonflow/build/web/assets/{image-5kVEigfx-vp1kJ6GF.js → image-5kVEigfx-Da9VC35L.js} +1 -1
  71. package/apps/toonflow/build/web/assets/{image-DacVk3M4-qTV7Cq57.js → image-DacVk3M4-OLOrL3a3.js} +1 -1
  72. package/apps/toonflow/build/web/assets/{image-DM6LzYR_.js → image-DwfwIZHO.js} +1 -1
  73. package/apps/toonflow/build/web/assets/{index-OP7LWQXQ.js → index-BS6CYJkl.js} +3 -3
  74. package/apps/toonflow/build/web/assets/{infoDiagram-27XIBGKW-CBCgR2Wn.js → infoDiagram-27XIBGKW-BG5KLX3a.js} +1 -1
  75. package/apps/toonflow/build/web/assets/{inline-math-DXsZkcD9-R0mewLK_.js → inline-math-DXsZkcD9-C4YVK5Fk.js} +1 -1
  76. package/apps/toonflow/build/web/assets/{input-tag-qDcMGqmM.js → input-tag-Dh1yQww_.js} +1 -1
  77. package/apps/toonflow/build/web/assets/{ishikawaDiagram-5VMMS53U-CJJ7MI4r.js → ishikawaDiagram-5VMMS53U-wfJLcif-.js} +1 -1
  78. package/apps/toonflow/build/web/assets/{journeyDiagram-3NMN7TZE-Cxm--A5w.js → journeyDiagram-3NMN7TZE-Cx38pTw4.js} +1 -1
  79. package/apps/toonflow/build/web/assets/{kanban-definition-UXKFOSKX-CXYq9UBI.js → kanban-definition-UXKFOSKX-DquI1-wU.js} +1 -1
  80. package/apps/toonflow/build/web/assets/{languageModel-ByhMqZkT.js → languageModel-BMa4DA0E.js} +2 -2
  81. package/apps/toonflow/build/web/assets/{line-BhVnyuQF.js → line-DuJL0q8z.js} +1 -1
  82. package/apps/toonflow/build/web/assets/{linear-C41JJsSy.js → linear-CFhJM0-q.js} +1 -1
  83. package/apps/toonflow/build/web/assets/{link-B4i80GlG-DjUxBhe6.js → link-B4i80GlG-HO85RTaD.js} +1 -1
  84. package/apps/toonflow/build/web/assets/{math-HWaHchtn-D2Kdx6Tg.js → math-HWaHchtn-B2YiucQQ.js} +1 -1
  85. package/apps/toonflow/build/web/assets/{mcp-D54KWa7S.js → mcp-Deo_-JHx.js} +1 -1
  86. package/apps/toonflow/build/web/assets/{mediaModel-Brhy7nQ-.js → mediaModel-EwRv2HKi.js} +2 -2
  87. package/apps/toonflow/build/web/assets/{mermaid-CMetGjR8-Ct3Kjem0.js → mermaid-CMetGjR8-Dbfnn25I.js} +1 -1
  88. package/apps/toonflow/build/web/assets/{mermaid.core-BfTOnEmH.js → mermaid.core-DN9Iu2BQ.js} +4 -4
  89. package/apps/toonflow/build/web/assets/{messageMarkdown-D9otquxF.js → messageMarkdown-CI6S8YeJ.js} +4 -4
  90. package/apps/toonflow/build/web/assets/{mindmap-definition-YA3MSWOX-CTy13-G5.js → mindmap-definition-YA3MSWOX-Db9u1_X8.js} +1 -1
  91. package/apps/toonflow/build/web/assets/{modal-_s_8RqAI-BQ1olOcW.js → modal-_s_8RqAI-CXOdTrou.js} +1 -1
  92. package/apps/toonflow/build/web/assets/{modelEditorDialog-CPzsE0Ll.js → modelEditorDialog-IZZaVI92.js} +1 -1
  93. package/apps/toonflow/build/web/assets/{opening-B_GdjcHq.js → opening-B-khDj25.js} +1 -1
  94. package/apps/toonflow/build/web/assets/{pegDiagram-XKGWAZYB-DhGBw-KW.js → pegDiagram-XKGWAZYB-Dx3Zyf3p.js} +1 -1
  95. package/apps/toonflow/build/web/assets/{pieDiagram-E7YTZNPT-D-EIrwo3.js → pieDiagram-E7YTZNPT-Bb1VDUdN.js} +1 -1
  96. package/apps/toonflow/build/web/assets/{pluginMarket-HFwBHHIC.js → pluginMarket-DrceJZ7a.js} +2 -2
  97. package/apps/toonflow/build/web/assets/{privacy-ClKIE6_u.js → privacy-C6_LFRmi.js} +1 -1
  98. package/apps/toonflow/build/web/assets/{providerAgentDialog-BdOZ12xW.js → providerAgentDialog-CrNojfXL.js} +1 -1
  99. package/apps/toonflow/build/web/assets/{providerDebugDialog-dW43f6f0.js → providerDebugDialog-Bvh9pcOz.js} +1 -1
  100. package/apps/toonflow/build/web/assets/{quadrantDiagram-AXDQQJYC-BDYDZYZt.js → quadrantDiagram-AXDQQJYC-BzYX4KFr.js} +1 -1
  101. package/apps/toonflow/build/web/assets/{railroadDiagram-O6MQD6OU-iupJUKW3.js → railroadDiagram-O6MQD6OU-d137FgKO.js} +1 -1
  102. package/apps/toonflow/build/web/assets/{replyStream-CBCEVzVT.js → replyStream-BLpPlWqE.js} +1 -1
  103. package/apps/toonflow/build/web/assets/{requirementDiagram-BXWQKSXE-DRaD04Jd.js → requirementDiagram-BXWQKSXE-DqGfC9rC.js} +1 -1
  104. package/apps/toonflow/build/web/assets/{sankeyDiagram-P5KCCOFB-t-eNYTvW.js → sankeyDiagram-P5KCCOFB-C6vfNTe0.js} +1 -1
  105. package/apps/toonflow/build/web/assets/{segmented-lXL-xmY0-1mKGMWvy.js → segmented-lXL-xmY0-BG5BfeeB.js} +1 -1
  106. package/apps/toonflow/build/web/assets/{sequenceDiagram-WJ2MYXX4-CtTb2TiL.js → sequenceDiagram-WJ2MYXX4-D-Nm9Fv7.js} +1 -1
  107. package/apps/toonflow/build/web/assets/{settings-CIPSyRqC.js → settings-BG9taok1.js} +2 -2
  108. package/apps/toonflow/build/web/assets/{slider-Cmh1sW0u.js → slider-DvzNLdnM.js} +1 -1
  109. package/apps/toonflow/build/web/assets/{src-emSm4Z6z.js → src-D671NPJF.js} +1 -1
  110. package/apps/toonflow/build/web/assets/{stateDiagram-D77RDMKH-sWb4EpBL.js → stateDiagram-D77RDMKH-CzDTvJ0e.js} +1 -1
  111. package/apps/toonflow/build/web/assets/stateDiagram-v2-MP3YSRHH-Bndu4QQ_.js +1 -0
  112. package/apps/toonflow/build/web/assets/{swimlanes-42K2YHIH-CFBhoxj-.js → swimlanes-42K2YHIH-C-9ilg_3.js} +1 -1
  113. package/apps/toonflow/build/web/assets/swimlanesDiagram-VR7AAH4N-DvUpfUTq.js +8 -0
  114. package/apps/toonflow/build/web/assets/{systemPromptDialog-BzKMFNhv.js → systemPromptDialog-a18nAov5.js} +1 -1
  115. package/apps/toonflow/build/web/assets/{table-DoalR-BE-DnIiJfHO.js → table-DoalR-BE-BUhmqdPr.js} +1 -1
  116. package/apps/toonflow/build/web/assets/{table-v2-Cs1dXfyj.js → table-v2-DWlK3ShK.js} +1 -1
  117. package/apps/toonflow/build/web/assets/{tfAccount-DUjPOC24.js → tfAccount-DJKxtaYq.js} +2 -2
  118. package/apps/toonflow/build/web/assets/{tfRechargeDialog-D0xjTPqQ.js → tfRechargeDialog-E2ycoBZJ.js} +1 -1
  119. package/apps/toonflow/build/web/assets/{throttle-TA4f25_r.js → throttle-Cf7WU0rj.js} +1 -1
  120. package/apps/toonflow/build/web/assets/{timeline-definition-24CTP7MA-DLO6QpFS.js → timeline-definition-24CTP7MA-C__EpI8g.js} +1 -1
  121. package/apps/toonflow/build/web/assets/{tiptapHost-Byp7TUKx.js → tiptapHost-dxBA8N0F.js} +1 -1
  122. package/apps/toonflow/build/web/assets/{tooltip-Dqytx65e-DSBEK6dN.js → tooltip-Dqytx65e-DQb8Fz5N.js} +1 -1
  123. package/apps/toonflow/build/web/assets/{ui-D2BftwAa.js → ui-eiuJm87r.js} +1 -1
  124. package/apps/toonflow/build/web/assets/{vennDiagram-4TSXK5OY-wOYFftDJ.js → vennDiagram-4TSXK5OY-0Kmg8p_x.js} +1 -1
  125. package/apps/toonflow/build/web/assets/{wardleyDiagram-VM6X3IG4-I6owp3mL.js → wardleyDiagram-VM6X3IG4-Ih-GiYle.js} +1 -1
  126. package/apps/toonflow/build/web/assets/{workspace-CTR94hBB.js → workspace-BVZXADu8.js} +6 -6
  127. package/apps/toonflow/build/web/assets/{workspaceFiles-DtoUossw.js → workspaceFiles-EmHu6meS.js} +1 -1
  128. package/apps/toonflow/build/web/assets/{workspacePicker-C1BGFkcy.js → workspacePicker-ClSRZqYi.js} +1 -1
  129. package/apps/toonflow/build/web/assets/{xychartDiagram-S5SC5T6Z-CLDGSEqY.js → xychartDiagram-S5SC5T6Z-Dwq6ZMAt.js} +1 -1
  130. package/apps/toonflow/build/web/assets/{yaml-BRD7Ck1_-BSh829DZ.js → yaml-BRD7Ck1_-NGJtzIPv.js} +1 -1
  131. package/apps/toonflow/build/web/assets/{zoom-container-1u9Y9848-BsUoXUWu.js → zoom-container-1u9Y9848-CD2zVIUs.js} +1 -1
  132. package/apps/toonflow/build/web/index.html +1 -1
  133. package/client/client.js +20 -14
  134. package/package.json +1 -1
  135. package/apps/toonflow/build/web/assets/channel-D5vDs_a-.js +0 -1
  136. package/apps/toonflow/build/web/assets/classDiagram-ZZMXUADV-BiP8S7Ww.js +0 -1
  137. package/apps/toonflow/build/web/assets/classDiagram-v2-VYDZK3BY-BiP8S7Ww.js +0 -1
  138. package/apps/toonflow/build/web/assets/css-2u6DWTmC.js +0 -1
  139. package/apps/toonflow/build/web/assets/document-EJYR7b2D.js +0 -1313
  140. package/apps/toonflow/build/web/assets/flowDiagram-HODETNUW-D6yZmKDB.js +0 -1
  141. package/apps/toonflow/build/web/assets/stateDiagram-v2-MP3YSRHH-DSJ0GtI-.js +0 -1
  142. package/apps/toonflow/build/web/assets/swimlanesDiagram-VR7AAH4N-DVXhgmaH.js +0 -8
package/README.md CHANGED
@@ -4,6 +4,16 @@
4
4
 
5
5
  [English](#english)
6
6
 
7
+ ## 0.6.4:「以资源管理器打开」能看到窗口;图片和 JSON 在 Film 里打开
8
+
9
+ - **以资源管理器打开**:宿主的「在文件夹中显示」不可用或拒绝这个路径时(0.6.2 及更早每次都是这样),工作台自己打开系统文件管理器。之前这一步把资源管理器以隐藏方式启动,请求成功、却看不到窗口;现在窗口正常显示并选中文件,文件名带逗号、等号也能选中正确的文件。只显示当前项目里的文件;打不开文件管理器时会提示原因,不再没有反应。
10
+ - **文档里点开文件**:Film 自带查看器能显示的类型都在 Film 里打开,不再跳到宿主的媒体库或预览——图片(JPG、PNG、WebP、GIF、BMP、SVG、AVIF、ICO、APNG)、JSON 和其他文本(TXT、LOG、CSV、TSV、YAML、XML、TOML、INI,以及 SRT、VTT 字幕)、Markdown、音视频。PDF、Office 文档、3D 模型等 Film 显示不了的类型仍交给宿主预览。
11
+ - 图片查看器升级到 0.1.1(支持 APNG),文本编辑器升级到 0.1.1(支持 SRT、VTT 字幕),老数据目录里的旧版本会自动替换。
12
+
13
+ ## 0.6.3:恢复「在文件夹中显示」
14
+
15
+ - 工作台里**在系统文件管理器中显示文件**的操作恢复可用:重新通过宿主的会话服务调用原生的「在文件夹中显示」;宿主没有这个能力或拒绝时,仍回退到工作台自己的处理。
16
+
7
17
  ## 0.6.2:图片节点按模型显示分辨率和比例
8
18
 
9
19
  - **图片生成节点的分辨率和比例**改为所选 VibeDev 图片模型在网关目录里声明的选项,例如 `gpt-image-2.5-flare-4k` 只有 4K 和十种比例,`gemini-3-pro-image` 有 1K、1.5K、2K、4K;没有声明的模型仍是 2K 和 16:9。切换模型时,当前选择新模型不支持就自动改选。
@@ -79,6 +89,10 @@ node scripts/verify-package.mjs dsh-film-<版本>.tgz # 用打好的包启
79
89
 
80
90
  **dsh-film** opens a canvas film workbench in the right sidebar of DeepSeek Harness and VibeDev: novel breakdown, script, storyboard canvas, image / video / audio generation, director desk and editing. Every model and charge goes through the VibeDev account (`@vibedev-si/dsh-vibedev`); no model API keys are needed.
81
91
 
92
+ **0.6.4**: "以资源管理器打开" (show in the file manager) shows a window again when the Host's own reveal is unavailable or refuses a path (every time up to 0.6.2): the workbench used to start Explorer hidden, so the request succeeded and nothing appeared; now the window opens with the file selected, also when its name contains commas or equals signs. Only files of the open project are revealed, and a file manager that cannot open is reported instead of doing nothing. In documents, every kind Film's own viewers show opens inside Film instead of the Host's media viewer or preview: images (JPG, PNG, WebP, GIF, BMP, SVG, AVIF, ICO, APNG), JSON and other text (TXT, LOG, CSV, TSV, YAML, XML, TOML, INI, SRT and VTT subtitles), Markdown, audio and video. PDF, Office documents, 3D models and other kinds Film cannot show still go to the Host preview. The image viewer 0.1.1 adds APNG and the text editor 0.1.1 adds SRT and VTT; data directories with the older viewers take the new ones.
93
+
94
+ **0.6.3**: revealing a file in the system file manager from the workbench works again: the plugin reaches the Host's native reveal through the session service by its full name; when the Host has no native opener or refuses, the workbench falls back to its own handling as before.
95
+
82
96
  **0.6.2**: the image generation node offers the sizes and aspect ratios the selected VibeDev image model declares in the gateway catalog (for example only 4K and ten ratios for `gpt-image-2.5-flare-4k`, 1K, 1.5K, 2K and 4K for `gemini-3-pro-image`); a model that declares none keeps 2K and 16:9, and switching models re-picks a choice the new model does not offer. Every `<n>K` tier becomes pixels with n × 1024 as the long edge at the chosen ratio, so 1.5K and 3K are no longer generated at 1K; a size that cannot be read is refused with a message, never generated at another size. The options need the account plugin 0.3.8 or later; with an older one the node shows 2K and 16:9 as before.
83
97
 
84
98
  **0.5.0** replaces the earlier workbench (0.4.0 and before) with the ToonFlow-based canvas. Update it from the VibeDev Plugin Center; the profile entry stays `dsh-film`. Projects of the old workbench are kept, not converted. Windows x64, macOS Apple silicon arm64 and Intel x64 are supported. Bun 1.3.13 is installed with the plugin as a platform-specific optional dependency (`@oven/bun-windows-x64`, `@oven/bun-darwin-aarch64`, or `@oven/bun-darwin-x64`); npm and pnpm install the package for the current platform. Image and video generation need the account plugin 0.2.7 or later; audio (music, podcasts, speech) needs 0.3.1 or later.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "repository": "https://github.com/VibeDev-Si/dsh-film-studio",
3
- "commit": "44422e6ddea2d5b9741dc7770b88d0ee5ce99f33",
3
+ "commit": "741c6fbff0a64125578c2b68325e53e70065688b",
4
4
  "released": true
5
5
  }
@@ -1,3 +1,3 @@
1
- /*! toonflowExt:{"id":"ext-image","displayName":"图片","icon":"data:image\u002fsvg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%2341b883%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%223%22%20width%3D%2218%22%20height%3D%2218%22%20rx%3D%223%22%2F%3E%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%221.5%22%2F%3E%3Cpath%20d%3D%22m21%2015-5-5L5%2021%22%2F%3E%3C%2Fsvg%3E","configRules":[{"type":"switch","field":"fitToWindow","title":"图片适应窗口","value":true}],"extensions":["jpg","jpeg","png","webp","gif","bmp","svg","avif","ico"],"resourceKind":"file","version":"0.1.0","readme":"# 图片预览\n\n支持 JPG、JPEG、PNG、WebP、GIF、BMP、SVG、AVIF 和 ICO。通过宿主共享文件 URL 读取资源,在切换或关闭标签时释放 URL。\n\n图标由扩展自行声明;“图片适应窗口”设置默认开启,关闭后按原始尺寸展示并支持滚动。\n\n扩展 ID 为 `ext-image`,包名为 `@toonflow\u002fext-image`。在仓库根目录执行 `bun run --cwd packages\u002fext\u002fimage build`,产物为 `build\u002fext\u002fext-image.umd.js`。扩展开发与上下文接口见 `packages\u002fextScaffold\u002freadme.md`。\n"} */
1
+ /*! toonflowExt:{"id":"ext-image","displayName":"图片","icon":"data:image\u002fsvg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%2341b883%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%223%22%20width%3D%2218%22%20height%3D%2218%22%20rx%3D%223%22%2F%3E%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%221.5%22%2F%3E%3Cpath%20d%3D%22m21%2015-5-5L5%2021%22%2F%3E%3C%2Fsvg%3E","configRules":[{"type":"switch","field":"fitToWindow","title":"图片适应窗口","value":true}],"extensions":["jpg","jpeg","png","webp","gif","bmp","svg","avif","ico","apng"],"resourceKind":"file","version":"0.1.1","readme":"# 图片预览\n\n支持 JPG、JPEG、PNG、WebP、GIF、BMP、SVG、AVIF、ICO 和 APNG。通过宿主共享文件 URL 读取资源,在切换或关闭标签时释放 URL。\n\n图标由扩展自行声明;“图片适应窗口”设置默认开启,关闭后按原始尺寸展示并支持滚动。\n\n扩展 ID 为 `ext-image`,包名为 `@toonflow\u002fext-image`。在仓库根目录执行 `bun run --cwd packages\u002fext\u002fimage build`,产物为 `build\u002fext\u002fext-image.umd.js`。扩展开发与上下文接口见 `packages\u002fextScaffold\u002freadme.md`。\n"} */
2
2
  if(typeof document!=="undefined"){let style=document.getElementById("toonflowExt-ext-image");if(!style){style=document.createElement("style");style.id="toonflowExt-ext-image";document.head.appendChild(style)}style.textContent=".imageDocument[data-v-d3e6d923]{flex-direction:column;width:100%;height:100%;min-height:0;display:flex}.imageDocument .imageToolbar[data-v-d3e6d923]{border-bottom:1px solid var(--el-border-color-lighter);flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;padding:6px;display:flex}.imageDocument .imageToolbar>span[data-v-d3e6d923]{text-align:center;min-width:48px;font-size:.75rem}.imageDocument .imagePreview[data-v-d3e6d923]{box-sizing:border-box;flex:1;min-height:0;padding:24px;display:flex;overflow:auto}.imageDocument .imagePreview img[data-v-d3e6d923]{object-fit:contain;flex-shrink:0;max-width:none;margin:auto;display:block}.imageDocument .imagePreview .imageError[data-v-d3e6d923]{color:var(--el-color-danger);margin:auto;font-size:.875rem}\n/*$vite$:1*/"}
3
- (function(e,t){typeof exports==`object`&&typeof module<`u`?module.exports=t(require("vue"),require("element-plus")):typeof define==`function`&&define.amd?define([`vue`,`element-plus`],t):(e=typeof globalThis<`u`?globalThis:e||self,e.toonflowExts=e.toonflowExts||{},e.toonflowExts[`ext-image`]=t(e.toonflowExtHost.vue,e.toonflowExtHost.elementPlus))})(this,function(e,t){var n=Object.defineProperty,r=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},i=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r};function a(e){if(typeof e.id!=`string`||e.id.length>96||!/^ext-[a-z][a-zA-Z0-9]*$/.test(e.id))throw Error(`扩展 ID 必须为 ext- 加小驼峰名称,最多 96 个字符:${e.id}`);if(typeof e.displayName!=`string`||!e.displayName.trim())throw Error(`扩展显示名不能为空`);if(e.icon!==void 0){let t=e.icon;if(typeof t!=`string`||t&&!/^data:image\/(?:svg\+xml|png|jpeg|webp|gif|avif)(?:;[^,]*)?,/i.test(t)&&!(URL.canParse(t)&&[`http:`,`https:`].includes(new URL(t).protocol)))throw Error(`扩展图标必须是 HTTP、HTTPS 或图片 data URL`)}if(e.configRules!==void 0&&(!Array.isArray(e.configRules)||e.configRules.length>100))throw Error(`扩展配置规则必须为最多 100 项的表单规则数组`);if(e.resourceKind!==`file`&&e.resourceKind!==`canvasNode`)throw Error(`扩展资源类型无效`);if(e.text!==void 0&&typeof e.text!=`boolean`)throw Error(`扩展文本标记必须为布尔值`);if(!Array.isArray(e.extensions)||e.extensions.some(e=>typeof e!=`string`||!/^[a-z0-9]+$/.test(e)))throw Error(`文件后缀必须是不带点的小写字母或数字`);if(e.resourceKind===`file`&&!e.extensions.length)throw Error(`文件扩展至少需要一个后缀`);if(new Set(e.extensions).size!==e.extensions.length)throw Error(`文件后缀不能重复`);if(typeof e.load!=`function`)throw Error(`扩展必须提供组件加载函数`);return e}var o={id:`ext-image`,displayName:`图片`,icon:`data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%2341b883%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%223%22%20width%3D%2218%22%20height%3D%2218%22%20rx%3D%223%22%2F%3E%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%221.5%22%2F%3E%3Cpath%20d%3D%22m21%2015-5-5L5%2021%22%2F%3E%3C%2Fsvg%3E`,configRules:[{type:`switch`,field:`fitToWindow`,title:`图片适应窗口`,value:!0}],extensions:[`jpg`,`jpeg`,`png`,`webp`,`gif`,`bmp`,`svg`,`avif`,`ico`],resourceKind:`file`},s,c,l,u,d,f,p,m=r((()=>{s={class:`imageDocument`},c={class:`imageToolbar`},l={"aria-live":`polite`},u=[`aria-busy`],d=[`src`,`alt`],f={key:1,class:`imageError`,role:`alert`},p=(0,e.defineComponent)({__name:`index`,props:{context:{}},setup(n){let r=n,i=(0,e.ref)(),a=(0,e.ref)(``),o=(0,e.ref)(``),p=(0,e.ref)(!1),m=(0,e.ref)(r.context.config.fitToWindow!==!1),h=(0,e.ref)(1),g=(0,e.ref)(0),_=(0,e.ref)(0),v=(0,e.ref)({width:0,height:0}),y=(0,e.computed)(()=>m.value&&g.value&&_.value?Math.min(1,Math.max(1,v.value.width)/g.value,Math.max(1,v.value.height)/_.value):h.value);(0,e.watch)(()=>r.context.config.fitToWindow,e=>{m.value=e!==!1,h.value=1});let b=new ResizeObserver(([e])=>{e&&(v.value={width:e.contentRect.width,height:e.contentRect.height})});(0,e.onMounted)(()=>{i.value&&b.observe(i.value)}),(0,e.onBeforeUnmount)(()=>b.disconnect());function x(e){let t=e.target;g.value=t.naturalWidth,_.value=t.naturalHeight}function S(e){h.value=Math.max(.1,Math.min(8,y.value*e)),m.value=!1}function C(e){(e.ctrlKey||e.metaKey)&&(e.preventDefault(),S(e.deltaY<0?1.1:1/1.1))}function w(){a.value=``,o.value=`无法预览图片:${r.context.resource.label}`}return(0,e.watch)(()=>[r.context.resource.directory,r.context.resource.path],async(e,t,n)=>{let i=!1,s;n(()=>{i=!0,s?.release()}),a.value=``,o.value=``,p.value=!0,g.value=0,_.value=0;try{s=r.context.files.acquireUrl(r.context.resource.path);let e=await s.url;i||(a.value=e)}catch(e){i||(o.value=e instanceof Error?e.message:`图片读取失败`)}finally{i||(p.value=!1)}},{immediate:!0}),(r,v)=>((0,e.openBlock)(),(0,e.createElementBlock)(`section`,s,[(0,e.createElementVNode)(`header`,c,[(0,e.createVNode)((0,e.unref)(t.ElButton),{text:``,size:`small`,disabled:!a.value,"aria-label":`缩小`,onClick:v[0]||=e=>S(1/1.25)},{default:(0,e.withCtx)(()=>[...v[4]||=[(0,e.createTextVNode)(`−`,-1)]]),_:1},8,[`disabled`]),(0,e.createElementVNode)(`span`,l,(0,e.toDisplayString)(Math.round(y.value*100))+`%`,1),(0,e.createVNode)((0,e.unref)(t.ElButton),{text:``,size:`small`,disabled:!a.value,"aria-label":`放大`,onClick:v[1]||=e=>S(1.25)},{default:(0,e.withCtx)(()=>[...v[5]||=[(0,e.createTextVNode)(`+`,-1)]]),_:1},8,[`disabled`]),(0,e.createVNode)((0,e.unref)(t.ElButton),{text:``,size:`small`,disabled:!a.value,onClick:v[2]||=e=>{m.value=!1,h.value=1}},{default:(0,e.withCtx)(()=>[...v[6]||=[(0,e.createTextVNode)(`原始大小`,-1)]]),_:1},8,[`disabled`]),(0,e.createVNode)((0,e.unref)(t.ElButton),{text:``,size:`small`,disabled:!a.value,"aria-pressed":m.value,onClick:v[3]||=e=>m.value=!0},{default:(0,e.withCtx)(()=>[...v[7]||=[(0,e.createTextVNode)(`适应窗口`,-1)]]),_:1},8,[`disabled`,`aria-pressed`])]),(0,e.createElementVNode)(`div`,{ref_key:`viewport`,ref:i,class:`imagePreview`,"aria-busy":p.value,onWheel:C},[a.value?((0,e.openBlock)(),(0,e.createElementBlock)(`img`,{key:0,src:a.value,alt:n.context.resource.label,style:(0,e.normalizeStyle)(g.value?{width:`${g.value*y.value}px`,height:`${_.value*y.value}px`}:void 0),onLoad:x,onError:w},null,44,d)):(0,e.createCommentVNode)(``,!0),o.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,f,(0,e.toDisplayString)(o.value),1)):(0,e.createCommentVNode)(``,!0)],40,u)]))}})})),h=r((()=>{})),g,_=r((()=>{g=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n}})),v=i({default:()=>y}),y,b=r((()=>{m(),m(),h(),_(),y=g(p,[[`__scopeId`,`data-v-d3e6d923`]])}));return a({...o,load:()=>Promise.resolve().then(()=>(b(),v))})});
3
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?module.exports=t(require("vue"),require("element-plus")):typeof define==`function`&&define.amd?define([`vue`,`element-plus`],t):(e=typeof globalThis<`u`?globalThis:e||self,e.toonflowExts=e.toonflowExts||{},e.toonflowExts[`ext-image`]=t(e.toonflowExtHost.vue,e.toonflowExtHost.elementPlus))})(this,function(e,t){var n=Object.defineProperty,r=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},i=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r};function a(e){if(typeof e.id!=`string`||e.id.length>96||!/^ext-[a-z][a-zA-Z0-9]*$/.test(e.id))throw Error(`扩展 ID 必须为 ext- 加小驼峰名称,最多 96 个字符:${e.id}`);if(typeof e.displayName!=`string`||!e.displayName.trim())throw Error(`扩展显示名不能为空`);if(e.icon!==void 0){let t=e.icon;if(typeof t!=`string`||t&&!/^data:image\/(?:svg\+xml|png|jpeg|webp|gif|avif)(?:;[^,]*)?,/i.test(t)&&!(URL.canParse(t)&&[`http:`,`https:`].includes(new URL(t).protocol)))throw Error(`扩展图标必须是 HTTP、HTTPS 或图片 data URL`)}if(e.configRules!==void 0&&(!Array.isArray(e.configRules)||e.configRules.length>100))throw Error(`扩展配置规则必须为最多 100 项的表单规则数组`);if(e.resourceKind!==`file`&&e.resourceKind!==`canvasNode`)throw Error(`扩展资源类型无效`);if(e.text!==void 0&&typeof e.text!=`boolean`)throw Error(`扩展文本标记必须为布尔值`);if(!Array.isArray(e.extensions)||e.extensions.some(e=>typeof e!=`string`||!/^[a-z0-9]+$/.test(e)))throw Error(`文件后缀必须是不带点的小写字母或数字`);if(e.resourceKind===`file`&&!e.extensions.length)throw Error(`文件扩展至少需要一个后缀`);if(new Set(e.extensions).size!==e.extensions.length)throw Error(`文件后缀不能重复`);if(typeof e.load!=`function`)throw Error(`扩展必须提供组件加载函数`);return e}var o={id:`ext-image`,displayName:`图片`,icon:`data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%2341b883%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%223%22%20width%3D%2218%22%20height%3D%2218%22%20rx%3D%223%22%2F%3E%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%221.5%22%2F%3E%3Cpath%20d%3D%22m21%2015-5-5L5%2021%22%2F%3E%3C%2Fsvg%3E`,configRules:[{type:`switch`,field:`fitToWindow`,title:`图片适应窗口`,value:!0}],extensions:[`jpg`,`jpeg`,`png`,`webp`,`gif`,`bmp`,`svg`,`avif`,`ico`,`apng`],resourceKind:`file`},s,c,l,u,d,f,p,m=r((()=>{s={class:`imageDocument`},c={class:`imageToolbar`},l={"aria-live":`polite`},u=[`aria-busy`],d=[`src`,`alt`],f={key:1,class:`imageError`,role:`alert`},p=(0,e.defineComponent)({__name:`index`,props:{context:{}},setup(n){let r=n,i=(0,e.ref)(),a=(0,e.ref)(``),o=(0,e.ref)(``),p=(0,e.ref)(!1),m=(0,e.ref)(r.context.config.fitToWindow!==!1),h=(0,e.ref)(1),g=(0,e.ref)(0),_=(0,e.ref)(0),v=(0,e.ref)({width:0,height:0}),y=(0,e.computed)(()=>m.value&&g.value&&_.value?Math.min(1,Math.max(1,v.value.width)/g.value,Math.max(1,v.value.height)/_.value):h.value);(0,e.watch)(()=>r.context.config.fitToWindow,e=>{m.value=e!==!1,h.value=1});let b=new ResizeObserver(([e])=>{e&&(v.value={width:e.contentRect.width,height:e.contentRect.height})});(0,e.onMounted)(()=>{i.value&&b.observe(i.value)}),(0,e.onBeforeUnmount)(()=>b.disconnect());function x(e){let t=e.target;g.value=t.naturalWidth,_.value=t.naturalHeight}function S(e){h.value=Math.max(.1,Math.min(8,y.value*e)),m.value=!1}function C(e){(e.ctrlKey||e.metaKey)&&(e.preventDefault(),S(e.deltaY<0?1.1:1/1.1))}function w(){a.value=``,o.value=`无法预览图片:${r.context.resource.label}`}return(0,e.watch)(()=>[r.context.resource.directory,r.context.resource.path],async(e,t,n)=>{let i=!1,s;n(()=>{i=!0,s?.release()}),a.value=``,o.value=``,p.value=!0,g.value=0,_.value=0;try{s=r.context.files.acquireUrl(r.context.resource.path);let e=await s.url;i||(a.value=e)}catch(e){i||(o.value=e instanceof Error?e.message:`图片读取失败`)}finally{i||(p.value=!1)}},{immediate:!0}),(r,v)=>((0,e.openBlock)(),(0,e.createElementBlock)(`section`,s,[(0,e.createElementVNode)(`header`,c,[(0,e.createVNode)((0,e.unref)(t.ElButton),{text:``,size:`small`,disabled:!a.value,"aria-label":`缩小`,onClick:v[0]||=e=>S(1/1.25)},{default:(0,e.withCtx)(()=>[...v[4]||=[(0,e.createTextVNode)(`−`,-1)]]),_:1},8,[`disabled`]),(0,e.createElementVNode)(`span`,l,(0,e.toDisplayString)(Math.round(y.value*100))+`%`,1),(0,e.createVNode)((0,e.unref)(t.ElButton),{text:``,size:`small`,disabled:!a.value,"aria-label":`放大`,onClick:v[1]||=e=>S(1.25)},{default:(0,e.withCtx)(()=>[...v[5]||=[(0,e.createTextVNode)(`+`,-1)]]),_:1},8,[`disabled`]),(0,e.createVNode)((0,e.unref)(t.ElButton),{text:``,size:`small`,disabled:!a.value,onClick:v[2]||=e=>{m.value=!1,h.value=1}},{default:(0,e.withCtx)(()=>[...v[6]||=[(0,e.createTextVNode)(`原始大小`,-1)]]),_:1},8,[`disabled`]),(0,e.createVNode)((0,e.unref)(t.ElButton),{text:``,size:`small`,disabled:!a.value,"aria-pressed":m.value,onClick:v[3]||=e=>m.value=!0},{default:(0,e.withCtx)(()=>[...v[7]||=[(0,e.createTextVNode)(`适应窗口`,-1)]]),_:1},8,[`disabled`,`aria-pressed`])]),(0,e.createElementVNode)(`div`,{ref_key:`viewport`,ref:i,class:`imagePreview`,"aria-busy":p.value,onWheel:C},[a.value?((0,e.openBlock)(),(0,e.createElementBlock)(`img`,{key:0,src:a.value,alt:n.context.resource.label,style:(0,e.normalizeStyle)(g.value?{width:`${g.value*y.value}px`,height:`${_.value*y.value}px`}:void 0),onLoad:x,onError:w},null,44,d)):(0,e.createCommentVNode)(``,!0),o.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,f,(0,e.toDisplayString)(o.value),1)):(0,e.createCommentVNode)(``,!0)],40,u)]))}})})),h=r((()=>{})),g,_=r((()=>{g=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n}})),v=i({default:()=>y}),y,b=r((()=>{m(),m(),h(),_(),y=g(p,[[`__scopeId`,`data-v-d3e6d923`]])}));return a({...o,load:()=>Promise.resolve().then(()=>(b(),v))})});
@@ -1,6 +1,6 @@
1
- /*! toonflowExt:{"id":"ext-txt","displayName":"文本编辑器","icon":"data:image\u002fsvg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%234e9fff%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M14%203H6a2%202%200%200%200-2%202v14a2%202%200%200%200%202%202h12a2%202%200%200%200%202-2V9zM14%203v6h6M8%2013h8M8%2017h5%22%2F%3E%3C%2Fsvg%3E","configRules":[{"type":"inputNumber","field":"fontSize","title":"字号","value":14,"props":{"min":10,"max":32,"step":1}},{"type":"switch","field":"wordWrap","title":"自动换行","value":true}],"extensions":["txt","log","json","jsonc","csv","tsv","yaml","yml","xml","toml","ini"],"resourceKind":"file","text":true,"version":"0.1.0","readme":"# 文本编辑器\n\n提供纯文本文件编辑,文件读取、保存队列和关闭前保存由文档宿主管理。组件通过 `context.text` 接收文本,通过 `context.updateText(text)` 提交修改。\n\n扩展自行声明文件图标、字号和自动换行设置,通过 `context.config` 读取当前配置。\n\n在仓库根目录执行 `bun run --cwd packages\u002fext\u002ftxt build`,产物为 `build\u002fext\u002fext-txt.umd.js`。扩展开发与上下文接口见 `packages\u002fextScaffold\u002freadme.md`。\n"} */
1
+ /*! toonflowExt:{"id":"ext-txt","displayName":"文本编辑器","icon":"data:image\u002fsvg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%234e9fff%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M14%203H6a2%202%200%200%200-2%202v14a2%202%200%200%200%202%202h12a2%202%200%200%200%202-2V9zM14%203v6h6M8%2013h8M8%2017h5%22%2F%3E%3C%2Fsvg%3E","configRules":[{"type":"inputNumber","field":"fontSize","title":"字号","value":14,"props":{"min":10,"max":32,"step":1}},{"type":"switch","field":"wordWrap","title":"自动换行","value":true}],"extensions":["txt","log","json","jsonc","csv","tsv","yaml","yml","xml","toml","ini","srt","vtt"],"resourceKind":"file","text":true,"version":"0.1.1","readme":"# 文本编辑器\n\n提供纯文本文件编辑:TXT、LOG、JSON、JSONC、CSV、TSV、YAML、YML、XML、TOML、INI,以及 SRT、VTT 字幕。文件读取、保存队列和关闭前保存由文档宿主管理。组件通过 `context.text` 接收文本,通过 `context.updateText(text)` 提交修改。\n\n扩展自行声明文件图标、字号和自动换行设置,通过 `context.config` 读取当前配置。\n\n在仓库根目录执行 `bun run --cwd packages\u002fext\u002ftxt build`,产物为 `build\u002fext\u002fext-txt.umd.js`。扩展开发与上下文接口见 `packages\u002fextScaffold\u002freadme.md`。\n"} */
2
2
  if(typeof document!=="undefined"){let style=document.getElementById("toonflowExt-ext-txt");if(!style){style=document.createElement("style");style.id="toonflowExt-ext-txt";document.head.appendChild(style)}style.textContent=".textDocument[data-v-96fd092e]{flex-direction:column;height:100%;min-height:0;display:flex}.textDocument .textToolbar[data-v-96fd092e]{border-bottom:1px solid var(--el-border-color-lighter);padding:4px 12px;display:flex}.textDocument .searchPanel[data-v-96fd092e]{border-bottom:1px solid var(--el-border-color-lighter);flex-direction:column;gap:6px;padding:8px 12px;display:flex}.textDocument .searchPanel .searchRow[data-v-96fd092e]{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.textDocument .searchPanel .searchRow [data-v-96fd092e] .el-input{flex:1;min-width:150px}.textDocument .searchPanel .searchStatus[data-v-96fd092e]{color:var(--el-text-color-secondary);white-space:nowrap;font-size:.75rem}.textDocument .textEditor[data-v-96fd092e]{box-sizing:border-box;resize:none;width:100%;min-height:0;color:var(--el-text-color-primary);tab-size:2;background:0 0;border:0;outline:none;flex:1;padding:20px 24px;font:.875rem/1.7 Consolas,SFMono-Regular,monospace;display:block}\n/*$vite$:1*/"}
3
- (function(e,t){typeof exports==`object`&&typeof module<`u`?module.exports=t(require("vue"),require("element-plus")):typeof define==`function`&&define.amd?define([`vue`,`element-plus`],t):(e=typeof globalThis<`u`?globalThis:e||self,e.toonflowExts=e.toonflowExts||{},e.toonflowExts[`ext-txt`]=t(e.toonflowExtHost.vue,e.toonflowExtHost.elementPlus))})(this,function(e,t){var n=Object.defineProperty,r=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},i=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r};function a(e){if(typeof e.id!=`string`||e.id.length>96||!/^ext-[a-z][a-zA-Z0-9]*$/.test(e.id))throw Error(`扩展 ID 必须为 ext- 加小驼峰名称,最多 96 个字符:${e.id}`);if(typeof e.displayName!=`string`||!e.displayName.trim())throw Error(`扩展显示名不能为空`);if(e.icon!==void 0){let t=e.icon;if(typeof t!=`string`||t&&!/^data:image\/(?:svg\+xml|png|jpeg|webp|gif|avif)(?:;[^,]*)?,/i.test(t)&&!(URL.canParse(t)&&[`http:`,`https:`].includes(new URL(t).protocol)))throw Error(`扩展图标必须是 HTTP、HTTPS 或图片 data URL`)}if(e.configRules!==void 0&&(!Array.isArray(e.configRules)||e.configRules.length>100))throw Error(`扩展配置规则必须为最多 100 项的表单规则数组`);if(e.resourceKind!==`file`&&e.resourceKind!==`canvasNode`)throw Error(`扩展资源类型无效`);if(e.text!==void 0&&typeof e.text!=`boolean`)throw Error(`扩展文本标记必须为布尔值`);if(!Array.isArray(e.extensions)||e.extensions.some(e=>typeof e!=`string`||!/^[a-z0-9]+$/.test(e)))throw Error(`文件后缀必须是不带点的小写字母或数字`);if(e.resourceKind===`file`&&!e.extensions.length)throw Error(`文件扩展至少需要一个后缀`);if(new Set(e.extensions).size!==e.extensions.length)throw Error(`文件后缀不能重复`);if(typeof e.load!=`function`)throw Error(`扩展必须提供组件加载函数`);return e}var o={id:`ext-txt`,displayName:`文本编辑器`,icon:`data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%234e9fff%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M14%203H6a2%202%200%200%200-2%202v14a2%202%200%200%200%202%202h12a2%202%200%200%200%202-2V9zM14%203v6h6M8%2013h8M8%2017h5%22%2F%3E%3C%2Fsvg%3E`,configRules:[{type:`inputNumber`,field:`fontSize`,title:`字号`,value:14,props:{min:10,max:32,step:1}},{type:`switch`,field:`wordWrap`,title:`自动换行`,value:!0}],extensions:[`txt`,`log`,`json`,`jsonc`,`csv`,`tsv`,`yaml`,`yml`,`xml`,`toml`,`ini`],resourceKind:`file`,text:!0},s,c,l,u,d,f,p,m=r((()=>{s={class:`textToolbar`},c={key:0,class:`searchPanel`},l={class:`searchRow`},u={class:`searchStatus`,"aria-live":`polite`},d={key:0,class:`searchRow`},f=[`value`,`disabled`,`aria-label`,`wrap`],p=(0,e.defineComponent)({__name:`index`,props:{context:{}},setup(n){let r=n,i=(0,e.ref)(),a=(0,e.ref)(),o=(0,e.ref)(!1),p=(0,e.ref)(!1),m=(0,e.ref)(``),h=(0,e.ref)(``),g=(0,e.ref)(!1),_=(0,e.ref)(-1),v=(0,e.computed)(()=>{let e=r.context.config.fontSize;return typeof e==`number`&&e>=10&&e<=32?e:14}),y=(0,e.computed)(()=>{if(!o.value||!r.context.active||!m.value)return[];let e=new RegExp(m.value.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),g.value?`g`:`gi`);return Array.from(r.context.text.matchAll(e),e=>({start:e.index,end:e.index+e[0].length}))});(0,e.watch)(y,()=>{_.value=-1}),(0,e.watch)(()=>r.context.location,async t=>{if(!t||(await(0,e.nextTick)(),r.context.location!==t||!i.value))return;let n=i.value.value.split(`
3
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?module.exports=t(require("vue"),require("element-plus")):typeof define==`function`&&define.amd?define([`vue`,`element-plus`],t):(e=typeof globalThis<`u`?globalThis:e||self,e.toonflowExts=e.toonflowExts||{},e.toonflowExts[`ext-txt`]=t(e.toonflowExtHost.vue,e.toonflowExtHost.elementPlus))})(this,function(e,t){var n=Object.defineProperty,r=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},i=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r};function a(e){if(typeof e.id!=`string`||e.id.length>96||!/^ext-[a-z][a-zA-Z0-9]*$/.test(e.id))throw Error(`扩展 ID 必须为 ext- 加小驼峰名称,最多 96 个字符:${e.id}`);if(typeof e.displayName!=`string`||!e.displayName.trim())throw Error(`扩展显示名不能为空`);if(e.icon!==void 0){let t=e.icon;if(typeof t!=`string`||t&&!/^data:image\/(?:svg\+xml|png|jpeg|webp|gif|avif)(?:;[^,]*)?,/i.test(t)&&!(URL.canParse(t)&&[`http:`,`https:`].includes(new URL(t).protocol)))throw Error(`扩展图标必须是 HTTP、HTTPS 或图片 data URL`)}if(e.configRules!==void 0&&(!Array.isArray(e.configRules)||e.configRules.length>100))throw Error(`扩展配置规则必须为最多 100 项的表单规则数组`);if(e.resourceKind!==`file`&&e.resourceKind!==`canvasNode`)throw Error(`扩展资源类型无效`);if(e.text!==void 0&&typeof e.text!=`boolean`)throw Error(`扩展文本标记必须为布尔值`);if(!Array.isArray(e.extensions)||e.extensions.some(e=>typeof e!=`string`||!/^[a-z0-9]+$/.test(e)))throw Error(`文件后缀必须是不带点的小写字母或数字`);if(e.resourceKind===`file`&&!e.extensions.length)throw Error(`文件扩展至少需要一个后缀`);if(new Set(e.extensions).size!==e.extensions.length)throw Error(`文件后缀不能重复`);if(typeof e.load!=`function`)throw Error(`扩展必须提供组件加载函数`);return e}var o={id:`ext-txt`,displayName:`文本编辑器`,icon:`data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%234e9fff%22%20stroke-width%3D%221.8%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M14%203H6a2%202%200%200%200-2%202v14a2%202%200%200%200%202%202h12a2%202%200%200%200%202-2V9zM14%203v6h6M8%2013h8M8%2017h5%22%2F%3E%3C%2Fsvg%3E`,configRules:[{type:`inputNumber`,field:`fontSize`,title:`字号`,value:14,props:{min:10,max:32,step:1}},{type:`switch`,field:`wordWrap`,title:`自动换行`,value:!0}],extensions:[`txt`,`log`,`json`,`jsonc`,`csv`,`tsv`,`yaml`,`yml`,`xml`,`toml`,`ini`,`srt`,`vtt`],resourceKind:`file`,text:!0},s,c,l,u,d,f,p,m=r((()=>{s={class:`textToolbar`},c={key:0,class:`searchPanel`},l={class:`searchRow`},u={class:`searchStatus`,"aria-live":`polite`},d={key:0,class:`searchRow`},f=[`value`,`disabled`,`aria-label`,`wrap`],p=(0,e.defineComponent)({__name:`index`,props:{context:{}},setup(n){let r=n,i=(0,e.ref)(),a=(0,e.ref)(),o=(0,e.ref)(!1),p=(0,e.ref)(!1),m=(0,e.ref)(``),h=(0,e.ref)(``),g=(0,e.ref)(!1),_=(0,e.ref)(-1),v=(0,e.computed)(()=>{let e=r.context.config.fontSize;return typeof e==`number`&&e>=10&&e<=32?e:14}),y=(0,e.computed)(()=>{if(!o.value||!r.context.active||!m.value)return[];let e=new RegExp(m.value.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),g.value?`g`:`gi`);return Array.from(r.context.text.matchAll(e),e=>({start:e.index,end:e.index+e[0].length}))});(0,e.watch)(y,()=>{_.value=-1}),(0,e.watch)(()=>r.context.location,async t=>{if(!t||(await(0,e.nextTick)(),r.context.location!==t||!i.value))return;let n=i.value.value.split(`
4
4
  `),a=Math.min(Math.max(0,t.line-1),n.length-1),o=n.slice(0,a).reduce((e,t)=>e+t.length+1,0)+Math.min(Math.max(0,t.column-1),n[a].length);i.value?.focus(),i.value?.setSelectionRange(o,o+t.query.length),i.value&&(i.value.scrollTop=Math.max(0,a*v.value*1.7-i.value.clientHeight/2))},{immediate:!0});function b(e){r.context.updateText(e.target.value)}async function x(t){o.value=!0,p.value=t;let n=i.value,r=n&&n.value.slice(n.selectionStart,n.selectionEnd);r&&!r.includes(`
5
5
  `)&&(m.value=r),await(0,e.nextTick)(),a.value?.focus()}function S(e=1){if(!y.value.length||!i.value)return;_.value=_.value<0?e<0?y.value.length-1:0:(_.value+e+y.value.length)%y.value.length;let t=y.value[_.value],n=r.context.text.slice(0,t.start).replace(/\r\n?/g,`
6
6
  `),a=r.context.text.slice(t.start,t.end).replace(/\r\n?/g,`