@forsion/unit 2.12.2

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 (791) hide show
  1. package/LICENSE +223 -0
  2. package/README.md +101 -0
  3. package/backendWorker.mjs +273 -0
  4. package/main.mjs +3434 -0
  5. package/package.json +26 -0
  6. package/release.json +11 -0
  7. package/web/assets/ArtificialView-B4ESD4iK.js +1 -0
  8. package/web/assets/AutomationBuilder-sxWdUa0L.js +1 -0
  9. package/web/assets/CalendarConfigView-cCfo_EvZ.js +1 -0
  10. package/web/assets/CalendarView-wgLapctk.js +1 -0
  11. package/web/assets/CapabilityMenu-BQBsM638.js +1 -0
  12. package/web/assets/CapabilityMenu-CTIzmTJB.css +1 -0
  13. package/web/assets/ChatView-BIUk0OJd.css +1 -0
  14. package/web/assets/ChatView-C-jCJnyS.js +47 -0
  15. package/web/assets/CheckboxInput-BsaoUHZ0.js +1 -0
  16. package/web/assets/Chrome-CwFiDmre.js +1 -0
  17. package/web/assets/CodeView-j065KtVh.js +15 -0
  18. package/web/assets/DancingScript-Bold-latin-CWNX0RqN.woff2 +0 -0
  19. package/web/assets/DashboardGridView-Ck3LKkOb.css +1 -0
  20. package/web/assets/DashboardGridView-DXqe0vPd.js +17 -0
  21. package/web/assets/EventCard-BmDQkEj9.js +1 -0
  22. package/web/assets/ExcalidrawCanvas-4uYrLYin.css +1 -0
  23. package/web/assets/ExcalidrawCanvas-C3egkikA.js +1 -0
  24. package/web/assets/FloatingToc-CENybkAA.js +1 -0
  25. package/web/assets/HomepageView-BNabJQfP.css +1 -0
  26. package/web/assets/HomepageView-CRdhjLXu.js +1 -0
  27. package/web/assets/ImageStudioPanels-Dke7xf8E.js +3 -0
  28. package/web/assets/ImageStudioView-g38V8gaj.js +1 -0
  29. package/web/assets/InlineFiles-C_hjvn3u.js +1 -0
  30. package/web/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  31. package/web/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  32. package/web/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  33. package/web/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  34. package/web/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  35. package/web/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  36. package/web/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  37. package/web/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  38. package/web/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  39. package/web/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  40. package/web/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  41. package/web/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  42. package/web/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  43. package/web/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  44. package/web/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  45. package/web/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  46. package/web/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  47. package/web/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  48. package/web/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  49. package/web/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  50. package/web/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  51. package/web/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  52. package/web/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  53. package/web/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  54. package/web/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  55. package/web/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  56. package/web/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  57. package/web/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  58. package/web/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  59. package/web/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  60. package/web/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  61. package/web/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  62. package/web/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  63. package/web/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  64. package/web/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  65. package/web/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  66. package/web/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  67. package/web/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  68. package/web/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  69. package/web/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  70. package/web/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  71. package/web/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  72. package/web/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  73. package/web/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  74. package/web/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  75. package/web/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  76. package/web/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  77. package/web/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  78. package/web/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  79. package/web/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  80. package/web/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  81. package/web/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  82. package/web/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  83. package/web/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  84. package/web/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  85. package/web/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  86. package/web/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  87. package/web/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  88. package/web/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  89. package/web/assets/MarkdownBlock-DIjYEhTK.js +56 -0
  90. package/web/assets/ModelPill-BPlgovPo.js +1 -0
  91. package/web/assets/ModelPill-CzdNh7Mt.css +1 -0
  92. package/web/assets/MuseLibraryView-CenyTTim.js +2 -0
  93. package/web/assets/MuseView-d-iBk3sc.js +6 -0
  94. package/web/assets/PageHistoryPanel-CR-k1AM7.js +2 -0
  95. package/web/assets/PageHistoryPanel-DFjh0pWs.css +1 -0
  96. package/web/assets/PdfAnnotator-CGzC_o1Q.css +1 -0
  97. package/web/assets/PdfAnnotator-D79ip27w.js +560 -0
  98. package/web/assets/ProductView-u2aezVsl.js +1 -0
  99. package/web/assets/RightPanel-C3OJTIqT.js +4 -0
  100. package/web/assets/RunLocationPicker-BNcZ7KKF.css +1 -0
  101. package/web/assets/RunLocationPicker-CTYXUH2z.js +34 -0
  102. package/web/assets/SidebarRow-BuSkKH5q.js +9 -0
  103. package/web/assets/SidebarRow-CsWEqPKX.css +1 -0
  104. package/web/assets/SketchCard-D87GADyG.js +437 -0
  105. package/web/assets/StudioGuestSurface-BijU_EEb.js +1 -0
  106. package/web/assets/TodoListView-DPPVpPUn.js +1 -0
  107. package/web/assets/Tooltip-DY4ISA-e.js +1 -0
  108. package/web/assets/UnifiedPage-CKNtVD_n.js +57 -0
  109. package/web/assets/UnifiedPage-DX_sTpyZ.css +1 -0
  110. package/web/assets/amadeus-manual.en-DWaN2fPs.js +3515 -0
  111. package/web/assets/amadeus-manual.zh--7D5TS8X.js +3515 -0
  112. package/web/assets/apl-B4CMkyY2.js +1 -0
  113. package/web/assets/appStore-Dg9WALEA.js +3080 -0
  114. package/web/assets/appStore-Di8LXuJ9.css +1 -0
  115. package/web/assets/approvalText-Cy2UAUAQ.js +2 -0
  116. package/web/assets/arrow-up-right-CpQs92mu.js +1 -0
  117. package/web/assets/artificial-BzLFkChP.css +1 -0
  118. package/web/assets/asciiarmor-Df11BRmG.js +1 -0
  119. package/web/assets/asn1-EdZsLKOL.js +1 -0
  120. package/web/assets/asterisk-B-8jnY81.js +1 -0
  121. package/web/assets/astryxBridge-BZhaZPs4.js +70 -0
  122. package/web/assets/astryxBridge-CF_hpqC2.css +1 -0
  123. package/web/assets/automationListSource-DP5xZBxo.js +1 -0
  124. package/web/assets/brainfuck-C4LP7Hcl.js +1 -0
  125. package/web/assets/calendarNavStore-C7fGRpoH.js +1 -0
  126. package/web/assets/canvasPrefs-BeG4oEgP.js +1 -0
  127. package/web/assets/chatBoxSurface-zvcyfrxE.js +1 -0
  128. package/web/assets/circle-question-mark-WL3vbp-Z.js +1 -0
  129. package/web/assets/circle-x-D7s-M5sB.js +1 -0
  130. package/web/assets/client-BSKpsyAw.js +9 -0
  131. package/web/assets/clike-B9uivgTg.js +1 -0
  132. package/web/assets/clojure-BMjYHr_A.js +1 -0
  133. package/web/assets/cmake-BQqOBYOt.js +1 -0
  134. package/web/assets/cobol-CWcv1MsR.js +1 -0
  135. package/web/assets/code-xml-BALV9u_c.js +1 -0
  136. package/web/assets/codeStudioStore-C2mWfm32.js +22 -0
  137. package/web/assets/coffeescript-S37ZYGWr.js +1 -0
  138. package/web/assets/commonlisp-DBKNyK5s.js +1 -0
  139. package/web/assets/create-4xUyKtAF.js +14 -0
  140. package/web/assets/create-BgE3edmZ.css +1 -0
  141. package/web/assets/crystal-SjHAIU92.js +1 -0
  142. package/web/assets/css-BnMrqG3P.js +1 -0
  143. package/web/assets/cursor-editorTextHighlight-kG3uUOwL.svg +8 -0
  144. package/web/assets/cypher-C_CwsFkJ.js +1 -0
  145. package/web/assets/d-pRatUO7H.js +1 -0
  146. package/web/assets/dashboardSurface-CFTH5z4c.js +1 -0
  147. package/web/assets/deskCapture-Df701U8L.js +1 -0
  148. package/web/assets/diff-DbItnlRl.js +1 -0
  149. package/web/assets/diff2html-BV-zCH4d.js +111 -0
  150. package/web/assets/dockerfile-BKs6k2Af.js +1 -0
  151. package/web/assets/docx-preview-DW4IyU_Q.js +22 -0
  152. package/web/assets/dtd-DF_7sFjM.js +1 -0
  153. package/web/assets/dylan-DwRh75JA.js +1 -0
  154. package/web/assets/ebnf-CDyGwa7X.js +1 -0
  155. package/web/assets/ecl-Cabwm37j.js +1 -0
  156. package/web/assets/eiffel-CnydiIhH.js +1 -0
  157. package/web/assets/ellipsis-r1EcXsFq.js +1 -0
  158. package/web/assets/elm-vLlmbW-K.js +1 -0
  159. package/web/assets/emoji-DGaxpCIu.js +1 -0
  160. package/web/assets/erlang-BNw1qcRV.js +1 -0
  161. package/web/assets/factor-kuTfRLto.js +1 -0
  162. package/web/assets/fcl-Kvtd6kyn.js +1 -0
  163. package/web/assets/floatingTocSurface-C6RJ6i41.js +1 -0
  164. package/web/assets/foldActions-B7KByFdN.js +1 -0
  165. package/web/assets/folder-DlxnPmWY.js +1 -0
  166. package/web/assets/folder-plus-D1TDb7k9.js +1 -0
  167. package/web/assets/forsion-logo-dark-DnB9JTdv.svg +5 -0
  168. package/web/assets/forsion-logo-light-DhkEeB4V.svg +11 -0
  169. package/web/assets/forth-Ffai-XNe.js +1 -0
  170. package/web/assets/fortran-DYz_wnZ1.js +1 -0
  171. package/web/assets/frame-_xBVYe3P.js +1 -0
  172. package/web/assets/gas-Bneqetm1.js +1 -0
  173. package/web/assets/gestures-CkW1Kfs9.js +1 -0
  174. package/web/assets/gherkin-heZmZLOM.js +1 -0
  175. package/web/assets/groovy-D9Dt4D0W.js +1 -0
  176. package/web/assets/hack2gate-dark-Dx2RtDRI.jpg +0 -0
  177. package/web/assets/hack2gate-light-DRKq9tyS.jpg +0 -0
  178. package/web/assets/hand-Crrw-nSn.js +1 -0
  179. package/web/assets/hard-drive-BbyVSbfP.js +1 -0
  180. package/web/assets/haskell-Cw1EW3IL.js +1 -0
  181. package/web/assets/haxe-H-WmDvRZ.js +1 -0
  182. package/web/assets/http-DBlCnlav.js +1 -0
  183. package/web/assets/i18n-D-eU58uw.css +1 -0
  184. package/web/assets/i18n.generated-Bbsz16cl.js +15 -0
  185. package/web/assets/idl-BEugSyMb.js +1 -0
  186. package/web/assets/imageStudio-BqbNOvpu.css +1 -0
  187. package/web/assets/imageStudio-C_Rs630L.js +2 -0
  188. package/web/assets/index--drOLtq7.js +1 -0
  189. package/web/assets/index-BCZZVJ_w.js +1 -0
  190. package/web/assets/index-BCubCwdT.js +1 -0
  191. package/web/assets/index-BRW82CsP.js +6 -0
  192. package/web/assets/index-BYsdKR_1.js +1 -0
  193. package/web/assets/index-Brik2pf9.js +1 -0
  194. package/web/assets/index-C6GJulug.js +13 -0
  195. package/web/assets/index-C7U6T-k8.js +1 -0
  196. package/web/assets/index-CF4RV4mh.js +298 -0
  197. package/web/assets/index-CflzrdSt.js +1 -0
  198. package/web/assets/index-Cmr7gVZQ.js +1 -0
  199. package/web/assets/index-CqyM6tQ0.js +1 -0
  200. package/web/assets/index-CzM-C2Sd.js +1 -0
  201. package/web/assets/index-Czu_bbDM.js +1 -0
  202. package/web/assets/index-D1f_JwPH.js +1 -0
  203. package/web/assets/index-DKhyDkGB.js +7 -0
  204. package/web/assets/index-DUWR2nZi.js +1 -0
  205. package/web/assets/index-DZfZTksa.js +1 -0
  206. package/web/assets/index-Dg9oixs4.js +1 -0
  207. package/web/assets/index-DjzSBM0U.js +2 -0
  208. package/web/assets/index-KL5Rj9kP.js +1 -0
  209. package/web/assets/index-OHi69jDq.js +3 -0
  210. package/web/assets/index-SZ5waGAq.js +1 -0
  211. package/web/assets/index-gPSbFSUn.js +1 -0
  212. package/web/assets/index-tAXBa_fN.js +1 -0
  213. package/web/assets/invitePage-lLQ-e0pj.js +19 -0
  214. package/web/assets/ipc-DQOD2UKk.js +1 -0
  215. package/web/assets/javascript-iXu5QeM3.js +1 -0
  216. package/web/assets/jszip.min-DZxV9uZ_.js +2 -0
  217. package/web/assets/julia-DuME0IfC.js +1 -0
  218. package/web/assets/layout-grid-B_pjJwz4.js +1 -0
  219. package/web/assets/linkFollow-C0_3k_PC.js +8 -0
  220. package/web/assets/list-tree-DkAJYEXd.js +1 -0
  221. package/web/assets/listFold-BsOVn9UZ.js +1 -0
  222. package/web/assets/livescript-BwQOo05w.js +1 -0
  223. package/web/assets/lock-BnGHxjeE.js +1 -0
  224. package/web/assets/log-out-DBuMeqik.js +1 -0
  225. package/web/assets/lua-VAEuO923.js +1 -0
  226. package/web/assets/main-Dki8NlsT.js +21 -0
  227. package/web/assets/main-NgUPPqDn.css +1 -0
  228. package/web/assets/markdownEditorSurface-B4PeUzed.js +3 -0
  229. package/web/assets/markdownEditorSurface-Bql20IAf.css +1 -0
  230. package/web/assets/mathematica-DTrFuWx2.js +1 -0
  231. package/web/assets/mbox-CNhZ1qSd.js +1 -0
  232. package/web/assets/mdMarkStore-CsKl7C8O.js +2 -0
  233. package/web/assets/mdMarks-Bq7Hl-4C.js +1 -0
  234. package/web/assets/message-square-plus-BiAZAvcw.js +1 -0
  235. package/web/assets/messages-BH5MfQdZ.js +1 -0
  236. package/web/assets/minus-Cyv1YzOU.js +1 -0
  237. package/web/assets/mirc-CjQqDB4T.js +1 -0
  238. package/web/assets/mllike-CXdrOF99.js +1 -0
  239. package/web/assets/mobileEntry-Bd_nKr0D.js +13 -0
  240. package/web/assets/mobileEntry-DS1vohuL.css +1 -0
  241. package/web/assets/modelica-Dc1JOy9r.js +1 -0
  242. package/web/assets/mscgen-BA5vi2Kp.js +1 -0
  243. package/web/assets/mumps-BT43cFF4.js +1 -0
  244. package/web/assets/nativeDownload-D-f1_L2S.js +1 -0
  245. package/web/assets/nginx-DdIZxoE0.js +1 -0
  246. package/web/assets/nsis-LdVXkNf5.js +1 -0
  247. package/web/assets/ntriples-BfvgReVJ.js +1 -0
  248. package/web/assets/octave-Ck1zUtKM.js +1 -0
  249. package/web/assets/oz-BzwKVEFT.js +1 -0
  250. package/web/assets/pageChrome-C9_azUYW.js +1 -0
  251. package/web/assets/pageChrome-xLNdFaSg.css +1 -0
  252. package/web/assets/pageTree-CZH2J6cc.js +7 -0
  253. package/web/assets/panel-left-rOc8As0s.js +1 -0
  254. package/web/assets/pascal--L3eBynH.js +1 -0
  255. package/web/assets/pdf-C2_sJa3b.js +57 -0
  256. package/web/assets/pdf.worker.min-CGb3BKV9.js +1 -0
  257. package/web/assets/pdf.worker.min-Dr1KORA9.mjs +31 -0
  258. package/web/assets/pen-line-m6_HvWZ9.js +1 -0
  259. package/web/assets/pen-tool-lkmBqliH.js +1 -0
  260. package/web/assets/pencil-Cvk91P_Z.js +1 -0
  261. package/web/assets/perl-CdXCOZ3F.js +1 -0
  262. package/web/assets/pig-CevX1Tat.js +1 -0
  263. package/web/assets/pluginExt-Byb64tQO.js +1 -0
  264. package/web/assets/powershell-CFHJl5sT.js +1 -0
  265. package/web/assets/properties-C78fOPTZ.js +1 -0
  266. package/web/assets/protobuf-ChK-085T.js +1 -0
  267. package/web/assets/pug-DeIclll2.js +1 -0
  268. package/web/assets/puppet-DMA9R1ak.js +1 -0
  269. package/web/assets/python-BuPzkPfP.js +1 -0
  270. package/web/assets/q-pXgVlZs6.js +1 -0
  271. package/web/assets/r-B6wPVr8A.js +1 -0
  272. package/web/assets/redo-2-DSi54z4e.js +1 -0
  273. package/web/assets/rotate-ccw-CUlnplr0.js +1 -0
  274. package/web/assets/rpm-CTu-6PCP.js +1 -0
  275. package/web/assets/ruby-B2Rjki9n.js +1 -0
  276. package/web/assets/sas-B4kiWyti.js +1 -0
  277. package/web/assets/scheme-C41bIUwD.js +1 -0
  278. package/web/assets/sharePage-MM6UpPJ9.js +2 -0
  279. package/web/assets/shareViewer-CDZ8lTdy.js +345 -0
  280. package/web/assets/shareViewer-DLVrwanO.css +1 -0
  281. package/web/assets/shell-CjFT_Tl9.js +1 -0
  282. package/web/assets/sieve-C3Gn_uJK.js +1 -0
  283. package/web/assets/simple-mode-GW_nhZxv.js +1 -0
  284. package/web/assets/smalltalk-CnHTOXQT.js +1 -0
  285. package/web/assets/solr-DehyRSwq.js +1 -0
  286. package/web/assets/sparql-DkYu6x3z.js +1 -0
  287. package/web/assets/spreadsheet-BCZA_wO0.js +1 -0
  288. package/web/assets/sql-D0XecflT.js +1 -0
  289. package/web/assets/star-CwDiGyUW.js +1 -0
  290. package/web/assets/stex-C3f8Ysf7.js +1 -0
  291. package/web/assets/sticky-note-BIuPUSOU.js +1 -0
  292. package/web/assets/stylus-B533Al4x.js +1 -0
  293. package/web/assets/swift-BzpIVaGY.js +1 -0
  294. package/web/assets/tableSurface-CDNa0QFp.css +1 -0
  295. package/web/assets/tableSurface-Y_JBQsuz.js +1 -0
  296. package/web/assets/tcl-DVfN8rqt.js +1 -0
  297. package/web/assets/terminal-DIXogYJY.js +1 -0
  298. package/web/assets/terminalView-B3aZSsrQ.js +12 -0
  299. package/web/assets/terminalView-DFuMZ0ql.css +1 -0
  300. package/web/assets/textile-CnDTJFAw.js +1 -0
  301. package/web/assets/theme-DfEi_DND.css +1 -0
  302. package/web/assets/theme-OMpAfNto.css +1 -0
  303. package/web/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  304. package/web/assets/tiki-DGYXhP31.js +1 -0
  305. package/web/assets/toml-Bm5Em-hy.js +1 -0
  306. package/web/assets/troff-wAsdV37c.js +1 -0
  307. package/web/assets/ttcn-CfJYG6tj.js +1 -0
  308. package/web/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  309. package/web/assets/turtle-B1tBg_DP.js +1 -0
  310. package/web/assets/type-Cqoabh7H.js +1 -0
  311. package/web/assets/undo-2-tUKCv5Gs.js +1 -0
  312. package/web/assets/unitAccount-D8lVwaaT.js +1 -0
  313. package/web/assets/unitBridge-D547ublk.js +1 -0
  314. package/web/assets/unitCloudTransport-BVF6lVp4.js +1 -0
  315. package/web/assets/unitOwnerAccess-BfnEjsZb.js +1 -0
  316. package/web/assets/unitShim-DxetRgmP.js +5 -0
  317. package/web/assets/upload-BbeAsMuD.js +1 -0
  318. package/web/assets/userSpaces-DyyAn7vj.js +1 -0
  319. package/web/assets/vb-CmGdzxic.js +1 -0
  320. package/web/assets/vbscript-BuJXcnF6.js +1 -0
  321. package/web/assets/velocity-D8B20fx6.js +1 -0
  322. package/web/assets/verilog-C6RDOZhf.js +1 -0
  323. package/web/assets/vhdl-lSbBsy5d.js +1 -0
  324. package/web/assets/viewportLock-C4SX-9PO.js +103 -0
  325. package/web/assets/viewportLock-DYSe7Jsn.css +1 -0
  326. package/web/assets/waves-horizontal-B8ZpHQ5H.js +1 -0
  327. package/web/assets/webidl-ZXfAyPTL.js +1 -0
  328. package/web/assets/workflow-DuoVRSSX.js +1 -0
  329. package/web/assets/xlsx-CNerDvZX.js +105 -0
  330. package/web/assets/xquery-DzFWVndE.js +1 -0
  331. package/web/assets/yacas-BJ4BC0dw.js +1 -0
  332. package/web/assets/z80-Hz9HOZM7.js +1 -0
  333. package/web/assets/zoom-in-hr5bRpDL.js +1 -0
  334. package/web/excalidraw/excalidraw.css +1 -0
  335. package/web/excalidraw/excalidraw.js +579 -0
  336. package/web/excalidraw/fonts/Assistant/Assistant-Bold.woff2 +0 -0
  337. package/web/excalidraw/fonts/Assistant/Assistant-Medium.woff2 +0 -0
  338. package/web/excalidraw/fonts/Assistant/Assistant-Regular.woff2 +0 -0
  339. package/web/excalidraw/fonts/Assistant/Assistant-SemiBold.woff2 +0 -0
  340. package/web/excalidraw/fonts/Cascadia/CascadiaCode-Regular.woff2 +0 -0
  341. package/web/excalidraw/fonts/ComicShanns/ComicShanns-Regular-279a7b317d12eb88de06167bd672b4b4.woff2 +0 -0
  342. package/web/excalidraw/fonts/ComicShanns/ComicShanns-Regular-6e066e8de2ac57ea9283adb9c24d7f0c.woff2 +0 -0
  343. package/web/excalidraw/fonts/ComicShanns/ComicShanns-Regular-dc6a8806fa96795d7b3be5026f989a17.woff2 +0 -0
  344. package/web/excalidraw/fonts/ComicShanns/ComicShanns-Regular-fcb0fc02dcbee4c9846b3e2508668039.woff2 +0 -0
  345. package/web/excalidraw/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 +0 -0
  346. package/web/excalidraw/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 +0 -0
  347. package/web/excalidraw/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 +0 -0
  348. package/web/excalidraw/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 +0 -0
  349. package/web/excalidraw/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 +0 -0
  350. package/web/excalidraw/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 +0 -0
  351. package/web/excalidraw/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 +0 -0
  352. package/web/excalidraw/fonts/Liberation/LiberationSans-Regular.woff2 +0 -0
  353. package/web/excalidraw/fonts/Lilita/Lilita-Regular-i7dPIFZ9Zz-WBtRtedDbYE98RXi4EwSsbg.woff2 +0 -0
  354. package/web/excalidraw/fonts/Lilita/Lilita-Regular-i7dPIFZ9Zz-WBtRtedDbYEF8RXi4EwQ.woff2 +0 -0
  355. package/web/excalidraw/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTA3j6zbXWjgevT5.woff2 +0 -0
  356. package/web/excalidraw/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTQ3j6zbXWjgeg.woff2 +0 -0
  357. package/web/excalidraw/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTk3j6zbXWjgevT5.woff2 +0 -0
  358. package/web/excalidraw/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTo3j6zbXWjgevT5.woff2 +0 -0
  359. package/web/excalidraw/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTs3j6zbXWjgevT5.woff2 +0 -0
  360. package/web/excalidraw/fonts/Virgil/Virgil-Regular.woff2 +0 -0
  361. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-019d66dcad46dc156b162d267f981c20.woff2 +0 -0
  362. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-04b718e5623574919c8b0dea5f301444.woff2 +0 -0
  363. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-069e77aac84590e2e991d0a0176d34f2.woff2 +0 -0
  364. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-06c77b8c66e51ed6c63ccb502dd8b8af.woff2 +0 -0
  365. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-08e0dc436ad0ad61ba5558db0674d762.woff2 +0 -0
  366. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-093b9ef39a46ceae95a1df18a0a3a326.woff2 +0 -0
  367. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-095c169f3314805276f603a362766abd.woff2 +0 -0
  368. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-09850c4077f3fffe707905872e0e2460.woff2 +0 -0
  369. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-0986d134c05864f5025962eef9f994a0.woff2 +0 -0
  370. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-0b5d723fdc4e249c140f0909e87d03b4.woff2 +0 -0
  371. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-0f626226ba1272e832aea87bafd9720e.woff2 +0 -0
  372. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-0f7fb1e0d5015bb1371343153ecf7ce3.woff2 +0 -0
  373. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-0fa55a080fcd0f9dc2e0b0058b793df8.woff2 +0 -0
  374. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-0facdf1ea213ba40261022f5d5ed4493.woff2 +0 -0
  375. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-10a7ae9a371830a80c3d844acf1c02d7.woff2 +0 -0
  376. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-112c051027b2d766c19a519f6ee1f4f7.woff2 +0 -0
  377. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-11c345711937f0ba4b8f7b6b919c8440.woff2 +0 -0
  378. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-12b52b58eb3df36804b9a654ec9ee194.woff2 +0 -0
  379. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-13ae07ed2e272d26d59bc0691cd7117a.woff2 +0 -0
  380. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-13d2887ec8ee73c43acdabc52a05af7b.woff2 +0 -0
  381. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-145aa02cdd91946e67dc934e1acffe75.woff2 +0 -0
  382. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-15dc6d811c9cd078f9086a740d5a1038.woff2 +0 -0
  383. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-173945821411c09f70c95f98d590e697.woff2 +0 -0
  384. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-1b611157cd46bb184d4fa4dae2d6a2b8.woff2 +0 -0
  385. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-1e6fd68f1f3902ce48ce8c69df385622.woff2 +0 -0
  386. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-1ee544f0f1dac422545c505baa788992.woff2 +0 -0
  387. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-1fdc0c67ed57263a80fd108c1f6ccf24.woff2 +0 -0
  388. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-203b0e569e3b14aac86a003dc3fa523e.woff2 +0 -0
  389. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-20cc1bbf50e7efb442756cb605672c1f.woff2 +0 -0
  390. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-20e7bf72fa05de9adf7dbcc7bf51dde6.woff2 +0 -0
  391. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-21430ee05a1248901da8d0de08744d47.woff2 +0 -0
  392. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-23686f7f29da6e8008c36dd3a80c83d6.woff2 +0 -0
  393. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-23ad2d71b280f00b1363b95b7bea94eb.woff2 +0 -0
  394. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-23f228f3999c01983860012330e4be08.woff2 +0 -0
  395. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-24476a126f129212beb33f66853ea151.woff2 +0 -0
  396. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-24a21c1e4449222e8d1898d69ff3a404.woff2 +0 -0
  397. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-25b7f38e18f035f96cb5e547bd2bd08c.woff2 +0 -0
  398. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-29cec36cd205b211da97acabaa62f055.woff2 +0 -0
  399. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-2a26d20a23b00898ce82f09d2ee47c3f.woff2 +0 -0
  400. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-2adbc89c11e65905393d3dfc468b9d5b.woff2 +0 -0
  401. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-2b7441d46298788ac94e610ffcc709b6.woff2 +0 -0
  402. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-2b77e8ebfb2367ab2662396a60e7d320.woff2 +0 -0
  403. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-2cf96d082d35ea3d8106851223ad0d16.woff2 +0 -0
  404. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-2d43040e86ff03ba677f6f9c04cd0805.woff2 +0 -0
  405. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-2e33e8dc771ef5e1d9127d60a6b73679.woff2 +0 -0
  406. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-33432927cd87d40cfe393c7482bf221f.woff2 +0 -0
  407. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-353f33792a8f60dc69323ddf635a269e.woff2 +0 -0
  408. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-36925dfe329a45086cbb7fc5c20d45ac.woff2 +0 -0
  409. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-3717077e38f98d89eae729b6c14e56dc.woff2 +0 -0
  410. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-3756e81d3e149cf6099163ee79944fec.woff2 +0 -0
  411. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-395c35dd584b56b0789f58a0559beaf1.woff2 +0 -0
  412. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-3c9de2ae0ea4bc91a510942dfa4be8d2.woff2 +0 -0
  413. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-3cc70dbb64df5b21f1326cc24dee2195.woff2 +0 -0
  414. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-3e1f8f654357353bf0e04ba5c34b5f7f.woff2 +0 -0
  415. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-3e63ed8162808a9e425ed80a8bc79114.woff2 +0 -0
  416. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-3eaa538115d76932653c21d8dc28f207.woff2 +0 -0
  417. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4095eb84ef3874e2600247bee0b04026.woff2 +0 -0
  418. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-41521fade99856108931b4768b1b2648.woff2 +0 -0
  419. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-450da755d5bcb70906e1295e559b9602.woff2 +0 -0
  420. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-452225341522a7942f0f6aab1a5c91a3.woff2 +0 -0
  421. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4535823663ad81405188a528d8f2b1a2.woff2 +0 -0
  422. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4806e761d750087c2d734fc64596eaff.woff2 +0 -0
  423. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4a0fdb40036e87b40aa08dd30584cb85.woff2 +0 -0
  424. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4a38cc3e9cf104e69ba246d37f8cf135.woff2 +0 -0
  425. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4aca6a43e59aceee2166b0c7e4e85ef1.woff2 +0 -0
  426. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4bfaa8ffa64c5ee560aa2daba7c9cbd3.woff2 +0 -0
  427. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4dc6d5f188d5c96d44815cd1e81aa885.woff2 +0 -0
  428. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4ddc14ed3eb0c3e46364317dfc0144a3.woff2 +0 -0
  429. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4ee10ae43505e2e0bc62656ced49c0fa.woff2 +0 -0
  430. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-4f50e5136e136527280bc902c5817561.woff2 +0 -0
  431. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-51502f1206be09c565f1547c406e9558.woff2 +0 -0
  432. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-51a0e808bbc8361236ac521a119758a3.woff2 +0 -0
  433. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-52a84a22fd1369bffeaf21da2d6158dc.woff2 +0 -0
  434. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-5330a2119a716e4e7224ed108b085dac.woff2 +0 -0
  435. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-543fa46ace099a7099dad69123399400.woff2 +0 -0
  436. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-544fc28abe2c5c30e62383fd4dac255f.woff2 +0 -0
  437. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-54acdfc2166ad7fcbd074f75fd4a56ba.woff2 +0 -0
  438. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-5572b3513ba8df57a3d5d7303ee6b11b.woff2 +0 -0
  439. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-56467a5c8840c4d23a60b2f935114848.woff2 +0 -0
  440. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-56a32a7689abd0326e57c10c6c069bb4.woff2 +0 -0
  441. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-57862b464a55b18c7bf234ce22907d73.woff2 +0 -0
  442. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-583d166e56ba0de4b77eabb47ef67839.woff2 +0 -0
  443. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-5882ffa04f32584d26109137e2da4352.woff2 +0 -0
  444. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-58fd02350d0bc52cf1ca3bb32ce9766e.woff2 +0 -0
  445. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-5935a5775af3d5c6307ac667bd9ae74e.woff2 +0 -0
  446. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-59e9ff77b0efaf684bc09274fb6908c9.woff2 +0 -0
  447. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-5a1ce3117cfe90c48e8fb4a9a00f694d.woff2 +0 -0
  448. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-5a45d991244d4c7140217e1e5f5ca4f4.woff2 +0 -0
  449. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-5a7fac4b8b23a6e4e5ba0c9bf1756c91.woff2 +0 -0
  450. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-5b0ed6971aaab9c8ad563230bd5471a7.woff2 +0 -0
  451. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-5d2898fbc097a7e24c6f38d80587621e.woff2 +0 -0
  452. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-603aefd23e350ba7eb124273e3c9bcf1.woff2 +0 -0
  453. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-60a3089806700d379f11827ee9843b6b.woff2 +0 -0
  454. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-60a41c7e1c68f22424e6d22df544bc82.woff2 +0 -0
  455. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-642b26e2e5f5fb780b51b593dbc8c851.woff2 +0 -0
  456. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-66493ba5a8367f2928812f446f47b56a.woff2 +0 -0
  457. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-670ba603758d94268e8606f240a42e12.woff2 +0 -0
  458. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-671a2c20b1eb9e4ef8a192833940e319.woff2 +0 -0
  459. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-684d65f1793cac449dde5d59cb3c47fb.woff2 +0 -0
  460. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-69c09cc5fa3e55c74fc4821f76909cc3.woff2 +0 -0
  461. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-6ae5b42180ad70b971c91e7eefb8eba2.woff2 +0 -0
  462. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-6e092f71c1e634059ada0e52abadce67.woff2 +0 -0
  463. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-6f3256af8454371776bc46670d33cc65.woff2 +0 -0
  464. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-6fe5c5973cc06f74b2387a631ea36b88.woff2 +0 -0
  465. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-70c2eb8d64e71a42a834eb857ea9df51.woff2 +0 -0
  466. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-70e811fd7994e61f408c923de6ddd078.woff2 +0 -0
  467. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7197d6fda6cba7c3874c53d6381ca239.woff2 +0 -0
  468. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-72252d73220fa3cd856677888cee1635.woff2 +0 -0
  469. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-72536a3d71b694a0d53dd90ddceae41e.woff2 +0 -0
  470. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-726303e0774b4e678bff8c2deb6ca603.woff2 +0 -0
  471. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-733171b4ffcd17ea1fe1c0ba627173bf.woff2 +0 -0
  472. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-739bc1a567439c7cffcd1614644593d2.woff2 +0 -0
  473. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-73e309718fd16cea44b4d54a33581811.woff2 +0 -0
  474. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7494dc504ae00ee9cd0505f990f88c5d.woff2 +0 -0
  475. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-74e2263a91439c25b91d5132ce9f4d62.woff2 +0 -0
  476. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-761d05e3cd968cf574166867998ef06a.woff2 +0 -0
  477. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7718fe60986d8b42b1be9c5ace5ccf25.woff2 +0 -0
  478. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-774d4f764a1299da5d28ec2f2ffe0d69.woff2 +0 -0
  479. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-79d494361ae093b69e74ee9dbe65bfd4.woff2 +0 -0
  480. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-79f007c1c6d07557120982951ea67998.woff2 +0 -0
  481. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7a07ddc0f0c0f5f4a9bad6ee3dda66b5.woff2 +0 -0
  482. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7ab2bed91166a9dca83a5ebfbe2a7f38.woff2 +0 -0
  483. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7ccce86603f80a099ddb0cb21d4ae3e3.woff2 +0 -0
  484. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7e4bde7e9c7f84cd34d8a845e384c746.woff2 +0 -0
  485. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7e929f262f30c8ee78bf398150b1a7cd.woff2 +0 -0
  486. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7eb9fffd1aa890d07d0f88cc82e6cfe4.woff2 +0 -0
  487. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-7f855356ab893b0d2b9c1c83b8116f0e.woff2 +0 -0
  488. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-829615148e6357d826b9242eb7fbbd1e.woff2 +0 -0
  489. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-866fa7613df6b3fd272bcfd4530c0bb9.woff2 +0 -0
  490. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-87599f94b6cc129d505b375798d0d751.woff2 +0 -0
  491. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-8c2f33cee3993174f7e87c28e4bf42ee.woff2 +0 -0
  492. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-8d3bcabb847b56243b16afe62adaaf21.woff2 +0 -0
  493. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-8de5b863cb50dfefdd07cb11c774d579.woff2 +0 -0
  494. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-8e9f97f01034820170065b2921b4fb5e.woff2 +0 -0
  495. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-8f476c4c99813d57cbe6eca4727388ad.woff2 +0 -0
  496. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-903bb6865f3452e2fda42e3a25547bc5.woff2 +0 -0
  497. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-91ddb2969bf2d31ba02ad82998d1314c.woff2 +0 -0
  498. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-938d90c10ff8c20386af7f242c05d6b0.woff2 +0 -0
  499. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-93fc8f28a33234bcadf1527cafabd502.woff2 +0 -0
  500. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-95429962233afd82db1c27df1500a28c.woff2 +0 -0
  501. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-9544732d2e62d1a429674f8ee41b5d3a.woff2 +0 -0
  502. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-9592bfc861f07bcb8d75c196b370e548.woff2 +0 -0
  503. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-95bfd249da4902577b4b7d76ebdd0b44.woff2 +0 -0
  504. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-968cffdc8ee679da094e77ebf50f58ef.woff2 +0 -0
  505. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-97f7f48ce90c9429bf32ae51469db74d.woff2 +0 -0
  506. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-982b630266d87db93d2539affb1275c6.woff2 +0 -0
  507. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-98f2ad84457de7f3740d9920b8fa8667.woff2 +0 -0
  508. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-99a16ef6a64934d5781933dbd9c46b2e.woff2 +0 -0
  509. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-9cfb2a77a4e45025105ad29a1748b90d.woff2 +0 -0
  510. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-9d81066dd2b337c938df6e90380a00dc.woff2 +0 -0
  511. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-9eb5a99df4e76ac3363453ac9ca288b1.woff2 +0 -0
  512. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-a004ddfcb26e67bd6e678c8ed19e25ce.woff2 +0 -0
  513. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-a0ca5df4258213d7fc9fce80f65ce760.woff2 +0 -0
  514. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-a1f916d6039285c4ffb900cd654e418f.woff2 +0 -0
  515. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-a203b91dad570bf05a58c3c3ddb529bf.woff2 +0 -0
  516. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-a365e82ed54697a52f27adcea1315fe8.woff2 +0 -0
  517. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-a4c34be6d42152e64b0df90bc4607f64.woff2 +0 -0
  518. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-a7accba310e821da5505f71c03b76bdb.woff2 +0 -0
  519. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-aa0d470430e6391eca720c7cfa44446f.woff2 +0 -0
  520. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-aa5c9ca6cf4fba00433b7aa3fa10671a.woff2 +0 -0
  521. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-ac9ceb44437becc3e9c4dbfebab7fc2d.woff2 +0 -0
  522. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-b1220a3c61f85cc0408deedb4c5f57a2.woff2 +0 -0
  523. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-b358f7a51ece39a3247942b1feabdb29.woff2 +0 -0
  524. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-b57aaedfd8ebdf3931f25119dc6a5eb2.woff2 +0 -0
  525. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-b5c1596551c256e0e9cf02028595b092.woff2 +0 -0
  526. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-b6d128682ee29e471486354d486a1b90.woff2 +0 -0
  527. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-b6fd38ca30869792244804b04bc058da.woff2 +0 -0
  528. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-b7d203b051eff504ff59ddca7576b6a9.woff2 +0 -0
  529. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-b96d9226ce77ec94ceca043d712182e6.woff2 +0 -0
  530. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-ba3de316d63c7e339987b16f41a0b879.woff2 +0 -0
  531. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-bafff7a14c27403dcc6cf1432e8ea836.woff2 +0 -0
  532. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-bd77e3c7f9e0b072d96af37f73d1aa32.woff2 +0 -0
  533. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-be549ab72f0719d606a5c01e2c0219b6.woff2 +0 -0
  534. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-c16ed9740b85badf16e86ea782a3062f.woff2 +0 -0
  535. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-c1f94158256bb1f3bf665b053d895af9.woff2 +0 -0
  536. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-c40533fdf4cc57177b12803598af7e59.woff2 +0 -0
  537. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-c4a687ac4f0c2766eefc9f77ed99cddf.woff2 +0 -0
  538. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-c69f61a4ab18d0488c8d1fc12e7028e8.woff2 +0 -0
  539. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-c8b71798409ccc126ee264a00aadcf21.woff2 +0 -0
  540. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-c99eda15fc26a2941579560f76c3a5cf.woff2 +0 -0
  541. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-cb17fc3db95f6d139afc9d31a8e93293.woff2 +0 -0
  542. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-cbaaefaaf326668277aa24dfa93c4d28.woff2 +0 -0
  543. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-cd145ce4a0ea18469358df53c207bc1b.woff2 +0 -0
  544. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-cdbce89e82cc1ab53a2decbf5819278f.woff2 +0 -0
  545. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-ce4884f96f11589608b76b726a755803.woff2 +0 -0
  546. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-cf2cc71752631e579e35b0e423bf2638.woff2 +0 -0
  547. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-cf6ff4e0f491ca0cf3038187a997b9b4.woff2 +0 -0
  548. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-cfb211578629b7e8153b37240de6a9d5.woff2 +0 -0
  549. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-d0cf73942fea1c74edbdf0b3011f4656.woff2 +0 -0
  550. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-d2666cbed13462c5dc36fa2f15c202ca.woff2 +0 -0
  551. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-d3716376641d615e2995605b29bca7b6.woff2 +0 -0
  552. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-dac48066b5883d8b4551fc584f0c2a3e.woff2 +0 -0
  553. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-dbea1af6dcd9860be40c3d18254338f5.woff2 +0 -0
  554. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-e11567fd2accf9957cd0d3c2be937d87.woff2 +0 -0
  555. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-e2ead7ea7da0437f085f42ffc05f8d13.woff2 +0 -0
  556. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-e3fcf5180fd466c8915c4e8069491054.woff2 +0 -0
  557. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-e480d9c614742d05f0e78f274f1e69e6.woff2 +0 -0
  558. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-e4bca6cfa53e499cae0a6be4894a90e9.woff2 +0 -0
  559. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-e51ef413167c6e14e0c0fdcc585f2fc9.woff2 +0 -0
  560. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-e5f453bb04da18eed01675eeebd88bf8.woff2 +0 -0
  561. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-e656f091b9dc4709722c9f4b84d3c797.woff2 +0 -0
  562. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-ec181b795ac1fb5a50d700b6e996d745.woff2 +0 -0
  563. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-ee8bae97908d5147b423f77ad0d3c1bb.woff2 +0 -0
  564. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-f0f13b5c60e0af5553bd359f5513be1b.woff2 +0 -0
  565. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-f2b54d4e7be0eaefe1c2c56836fa5368.woff2 +0 -0
  566. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-f56414bf9bced67990def8660e306759.woff2 +0 -0
  567. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-f5d079153c99a25b9be5b8583c4cc8a7.woff2 +0 -0
  568. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-f6032fc06eb20480f096199713f70885.woff2 +0 -0
  569. package/web/excalidraw/fonts/Xiaolai/Xiaolai-Regular-f8ee5d36068a42b51d0e4a1116cfcec1.woff2 +0 -0
  570. package/web/fonts/LICENSE-_fontsource-variable_inter.txt +93 -0
  571. package/web/fonts/LICENSE-_fontsource-variable_jetbrains-mono.txt +93 -0
  572. package/web/fonts/LICENSE-_fontsource_lxgw-wenkai.txt +94 -0
  573. package/web/fonts/LICENSE-_fontsource_noto-sans-sc.txt +93 -0
  574. package/web/fonts/files/inter-cyrillic-ext-wght-normal.woff2 +0 -0
  575. package/web/fonts/files/inter-cyrillic-wght-normal.woff2 +0 -0
  576. package/web/fonts/files/inter-greek-ext-wght-normal.woff2 +0 -0
  577. package/web/fonts/files/inter-greek-wght-normal.woff2 +0 -0
  578. package/web/fonts/files/inter-latin-ext-wght-normal.woff2 +0 -0
  579. package/web/fonts/files/inter-latin-wght-normal.woff2 +0 -0
  580. package/web/fonts/files/inter-vietnamese-wght-normal.woff2 +0 -0
  581. package/web/fonts/files/jetbrains-mono-cyrillic-ext-wght-normal.woff2 +0 -0
  582. package/web/fonts/files/jetbrains-mono-cyrillic-wght-normal.woff2 +0 -0
  583. package/web/fonts/files/jetbrains-mono-greek-wght-normal.woff2 +0 -0
  584. package/web/fonts/files/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
  585. package/web/fonts/files/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  586. package/web/fonts/files/jetbrains-mono-vietnamese-wght-normal.woff2 +0 -0
  587. package/web/fonts/files/lxgw-wenkai-latin-500-normal.woff2 +0 -0
  588. package/web/fonts/files/noto-sans-sc-100-400-normal.woff2 +0 -0
  589. package/web/fonts/files/noto-sans-sc-100-700-normal.woff2 +0 -0
  590. package/web/fonts/files/noto-sans-sc-101-400-normal.woff2 +0 -0
  591. package/web/fonts/files/noto-sans-sc-101-700-normal.woff2 +0 -0
  592. package/web/fonts/files/noto-sans-sc-102-400-normal.woff2 +0 -0
  593. package/web/fonts/files/noto-sans-sc-102-700-normal.woff2 +0 -0
  594. package/web/fonts/files/noto-sans-sc-103-400-normal.woff2 +0 -0
  595. package/web/fonts/files/noto-sans-sc-103-700-normal.woff2 +0 -0
  596. package/web/fonts/files/noto-sans-sc-104-400-normal.woff2 +0 -0
  597. package/web/fonts/files/noto-sans-sc-104-700-normal.woff2 +0 -0
  598. package/web/fonts/files/noto-sans-sc-105-400-normal.woff2 +0 -0
  599. package/web/fonts/files/noto-sans-sc-105-700-normal.woff2 +0 -0
  600. package/web/fonts/files/noto-sans-sc-106-400-normal.woff2 +0 -0
  601. package/web/fonts/files/noto-sans-sc-106-700-normal.woff2 +0 -0
  602. package/web/fonts/files/noto-sans-sc-107-400-normal.woff2 +0 -0
  603. package/web/fonts/files/noto-sans-sc-107-700-normal.woff2 +0 -0
  604. package/web/fonts/files/noto-sans-sc-108-400-normal.woff2 +0 -0
  605. package/web/fonts/files/noto-sans-sc-108-700-normal.woff2 +0 -0
  606. package/web/fonts/files/noto-sans-sc-109-400-normal.woff2 +0 -0
  607. package/web/fonts/files/noto-sans-sc-109-700-normal.woff2 +0 -0
  608. package/web/fonts/files/noto-sans-sc-110-400-normal.woff2 +0 -0
  609. package/web/fonts/files/noto-sans-sc-110-700-normal.woff2 +0 -0
  610. package/web/fonts/files/noto-sans-sc-111-400-normal.woff2 +0 -0
  611. package/web/fonts/files/noto-sans-sc-111-700-normal.woff2 +0 -0
  612. package/web/fonts/files/noto-sans-sc-112-400-normal.woff2 +0 -0
  613. package/web/fonts/files/noto-sans-sc-112-700-normal.woff2 +0 -0
  614. package/web/fonts/files/noto-sans-sc-113-400-normal.woff2 +0 -0
  615. package/web/fonts/files/noto-sans-sc-113-700-normal.woff2 +0 -0
  616. package/web/fonts/files/noto-sans-sc-114-400-normal.woff2 +0 -0
  617. package/web/fonts/files/noto-sans-sc-114-700-normal.woff2 +0 -0
  618. package/web/fonts/files/noto-sans-sc-115-400-normal.woff2 +0 -0
  619. package/web/fonts/files/noto-sans-sc-115-700-normal.woff2 +0 -0
  620. package/web/fonts/files/noto-sans-sc-116-400-normal.woff2 +0 -0
  621. package/web/fonts/files/noto-sans-sc-116-700-normal.woff2 +0 -0
  622. package/web/fonts/files/noto-sans-sc-117-400-normal.woff2 +0 -0
  623. package/web/fonts/files/noto-sans-sc-117-700-normal.woff2 +0 -0
  624. package/web/fonts/files/noto-sans-sc-118-400-normal.woff2 +0 -0
  625. package/web/fonts/files/noto-sans-sc-118-700-normal.woff2 +0 -0
  626. package/web/fonts/files/noto-sans-sc-119-400-normal.woff2 +0 -0
  627. package/web/fonts/files/noto-sans-sc-119-700-normal.woff2 +0 -0
  628. package/web/fonts/files/noto-sans-sc-21-400-normal.woff2 +0 -0
  629. package/web/fonts/files/noto-sans-sc-21-700-normal.woff2 +0 -0
  630. package/web/fonts/files/noto-sans-sc-22-400-normal.woff2 +0 -0
  631. package/web/fonts/files/noto-sans-sc-22-700-normal.woff2 +0 -0
  632. package/web/fonts/files/noto-sans-sc-23-400-normal.woff2 +0 -0
  633. package/web/fonts/files/noto-sans-sc-23-700-normal.woff2 +0 -0
  634. package/web/fonts/files/noto-sans-sc-24-400-normal.woff2 +0 -0
  635. package/web/fonts/files/noto-sans-sc-24-700-normal.woff2 +0 -0
  636. package/web/fonts/files/noto-sans-sc-25-400-normal.woff2 +0 -0
  637. package/web/fonts/files/noto-sans-sc-25-700-normal.woff2 +0 -0
  638. package/web/fonts/files/noto-sans-sc-26-400-normal.woff2 +0 -0
  639. package/web/fonts/files/noto-sans-sc-26-700-normal.woff2 +0 -0
  640. package/web/fonts/files/noto-sans-sc-27-400-normal.woff2 +0 -0
  641. package/web/fonts/files/noto-sans-sc-27-700-normal.woff2 +0 -0
  642. package/web/fonts/files/noto-sans-sc-28-400-normal.woff2 +0 -0
  643. package/web/fonts/files/noto-sans-sc-28-700-normal.woff2 +0 -0
  644. package/web/fonts/files/noto-sans-sc-29-400-normal.woff2 +0 -0
  645. package/web/fonts/files/noto-sans-sc-29-700-normal.woff2 +0 -0
  646. package/web/fonts/files/noto-sans-sc-30-400-normal.woff2 +0 -0
  647. package/web/fonts/files/noto-sans-sc-30-700-normal.woff2 +0 -0
  648. package/web/fonts/files/noto-sans-sc-31-400-normal.woff2 +0 -0
  649. package/web/fonts/files/noto-sans-sc-31-700-normal.woff2 +0 -0
  650. package/web/fonts/files/noto-sans-sc-32-400-normal.woff2 +0 -0
  651. package/web/fonts/files/noto-sans-sc-32-700-normal.woff2 +0 -0
  652. package/web/fonts/files/noto-sans-sc-33-400-normal.woff2 +0 -0
  653. package/web/fonts/files/noto-sans-sc-33-700-normal.woff2 +0 -0
  654. package/web/fonts/files/noto-sans-sc-34-400-normal.woff2 +0 -0
  655. package/web/fonts/files/noto-sans-sc-34-700-normal.woff2 +0 -0
  656. package/web/fonts/files/noto-sans-sc-35-400-normal.woff2 +0 -0
  657. package/web/fonts/files/noto-sans-sc-35-700-normal.woff2 +0 -0
  658. package/web/fonts/files/noto-sans-sc-36-400-normal.woff2 +0 -0
  659. package/web/fonts/files/noto-sans-sc-36-700-normal.woff2 +0 -0
  660. package/web/fonts/files/noto-sans-sc-37-400-normal.woff2 +0 -0
  661. package/web/fonts/files/noto-sans-sc-37-700-normal.woff2 +0 -0
  662. package/web/fonts/files/noto-sans-sc-38-400-normal.woff2 +0 -0
  663. package/web/fonts/files/noto-sans-sc-38-700-normal.woff2 +0 -0
  664. package/web/fonts/files/noto-sans-sc-39-400-normal.woff2 +0 -0
  665. package/web/fonts/files/noto-sans-sc-39-700-normal.woff2 +0 -0
  666. package/web/fonts/files/noto-sans-sc-4-400-normal.woff2 +0 -0
  667. package/web/fonts/files/noto-sans-sc-4-700-normal.woff2 +0 -0
  668. package/web/fonts/files/noto-sans-sc-40-400-normal.woff2 +0 -0
  669. package/web/fonts/files/noto-sans-sc-40-700-normal.woff2 +0 -0
  670. package/web/fonts/files/noto-sans-sc-41-400-normal.woff2 +0 -0
  671. package/web/fonts/files/noto-sans-sc-41-700-normal.woff2 +0 -0
  672. package/web/fonts/files/noto-sans-sc-42-400-normal.woff2 +0 -0
  673. package/web/fonts/files/noto-sans-sc-42-700-normal.woff2 +0 -0
  674. package/web/fonts/files/noto-sans-sc-43-400-normal.woff2 +0 -0
  675. package/web/fonts/files/noto-sans-sc-43-700-normal.woff2 +0 -0
  676. package/web/fonts/files/noto-sans-sc-44-400-normal.woff2 +0 -0
  677. package/web/fonts/files/noto-sans-sc-44-700-normal.woff2 +0 -0
  678. package/web/fonts/files/noto-sans-sc-45-400-normal.woff2 +0 -0
  679. package/web/fonts/files/noto-sans-sc-45-700-normal.woff2 +0 -0
  680. package/web/fonts/files/noto-sans-sc-46-400-normal.woff2 +0 -0
  681. package/web/fonts/files/noto-sans-sc-46-700-normal.woff2 +0 -0
  682. package/web/fonts/files/noto-sans-sc-47-400-normal.woff2 +0 -0
  683. package/web/fonts/files/noto-sans-sc-47-700-normal.woff2 +0 -0
  684. package/web/fonts/files/noto-sans-sc-48-400-normal.woff2 +0 -0
  685. package/web/fonts/files/noto-sans-sc-48-700-normal.woff2 +0 -0
  686. package/web/fonts/files/noto-sans-sc-49-400-normal.woff2 +0 -0
  687. package/web/fonts/files/noto-sans-sc-49-700-normal.woff2 +0 -0
  688. package/web/fonts/files/noto-sans-sc-5-400-normal.woff2 +0 -0
  689. package/web/fonts/files/noto-sans-sc-5-700-normal.woff2 +0 -0
  690. package/web/fonts/files/noto-sans-sc-50-400-normal.woff2 +0 -0
  691. package/web/fonts/files/noto-sans-sc-50-700-normal.woff2 +0 -0
  692. package/web/fonts/files/noto-sans-sc-51-400-normal.woff2 +0 -0
  693. package/web/fonts/files/noto-sans-sc-51-700-normal.woff2 +0 -0
  694. package/web/fonts/files/noto-sans-sc-52-400-normal.woff2 +0 -0
  695. package/web/fonts/files/noto-sans-sc-52-700-normal.woff2 +0 -0
  696. package/web/fonts/files/noto-sans-sc-53-400-normal.woff2 +0 -0
  697. package/web/fonts/files/noto-sans-sc-53-700-normal.woff2 +0 -0
  698. package/web/fonts/files/noto-sans-sc-54-400-normal.woff2 +0 -0
  699. package/web/fonts/files/noto-sans-sc-54-700-normal.woff2 +0 -0
  700. package/web/fonts/files/noto-sans-sc-55-400-normal.woff2 +0 -0
  701. package/web/fonts/files/noto-sans-sc-55-700-normal.woff2 +0 -0
  702. package/web/fonts/files/noto-sans-sc-56-400-normal.woff2 +0 -0
  703. package/web/fonts/files/noto-sans-sc-56-700-normal.woff2 +0 -0
  704. package/web/fonts/files/noto-sans-sc-57-400-normal.woff2 +0 -0
  705. package/web/fonts/files/noto-sans-sc-57-700-normal.woff2 +0 -0
  706. package/web/fonts/files/noto-sans-sc-58-400-normal.woff2 +0 -0
  707. package/web/fonts/files/noto-sans-sc-58-700-normal.woff2 +0 -0
  708. package/web/fonts/files/noto-sans-sc-59-400-normal.woff2 +0 -0
  709. package/web/fonts/files/noto-sans-sc-59-700-normal.woff2 +0 -0
  710. package/web/fonts/files/noto-sans-sc-6-400-normal.woff2 +0 -0
  711. package/web/fonts/files/noto-sans-sc-6-700-normal.woff2 +0 -0
  712. package/web/fonts/files/noto-sans-sc-60-400-normal.woff2 +0 -0
  713. package/web/fonts/files/noto-sans-sc-60-700-normal.woff2 +0 -0
  714. package/web/fonts/files/noto-sans-sc-61-400-normal.woff2 +0 -0
  715. package/web/fonts/files/noto-sans-sc-61-700-normal.woff2 +0 -0
  716. package/web/fonts/files/noto-sans-sc-62-400-normal.woff2 +0 -0
  717. package/web/fonts/files/noto-sans-sc-62-700-normal.woff2 +0 -0
  718. package/web/fonts/files/noto-sans-sc-63-400-normal.woff2 +0 -0
  719. package/web/fonts/files/noto-sans-sc-63-700-normal.woff2 +0 -0
  720. package/web/fonts/files/noto-sans-sc-64-400-normal.woff2 +0 -0
  721. package/web/fonts/files/noto-sans-sc-64-700-normal.woff2 +0 -0
  722. package/web/fonts/files/noto-sans-sc-65-400-normal.woff2 +0 -0
  723. package/web/fonts/files/noto-sans-sc-65-700-normal.woff2 +0 -0
  724. package/web/fonts/files/noto-sans-sc-66-400-normal.woff2 +0 -0
  725. package/web/fonts/files/noto-sans-sc-66-700-normal.woff2 +0 -0
  726. package/web/fonts/files/noto-sans-sc-67-400-normal.woff2 +0 -0
  727. package/web/fonts/files/noto-sans-sc-67-700-normal.woff2 +0 -0
  728. package/web/fonts/files/noto-sans-sc-68-400-normal.woff2 +0 -0
  729. package/web/fonts/files/noto-sans-sc-68-700-normal.woff2 +0 -0
  730. package/web/fonts/files/noto-sans-sc-69-400-normal.woff2 +0 -0
  731. package/web/fonts/files/noto-sans-sc-69-700-normal.woff2 +0 -0
  732. package/web/fonts/files/noto-sans-sc-70-400-normal.woff2 +0 -0
  733. package/web/fonts/files/noto-sans-sc-70-700-normal.woff2 +0 -0
  734. package/web/fonts/files/noto-sans-sc-71-400-normal.woff2 +0 -0
  735. package/web/fonts/files/noto-sans-sc-71-700-normal.woff2 +0 -0
  736. package/web/fonts/files/noto-sans-sc-72-400-normal.woff2 +0 -0
  737. package/web/fonts/files/noto-sans-sc-72-700-normal.woff2 +0 -0
  738. package/web/fonts/files/noto-sans-sc-73-400-normal.woff2 +0 -0
  739. package/web/fonts/files/noto-sans-sc-73-700-normal.woff2 +0 -0
  740. package/web/fonts/files/noto-sans-sc-74-400-normal.woff2 +0 -0
  741. package/web/fonts/files/noto-sans-sc-74-700-normal.woff2 +0 -0
  742. package/web/fonts/files/noto-sans-sc-75-400-normal.woff2 +0 -0
  743. package/web/fonts/files/noto-sans-sc-75-700-normal.woff2 +0 -0
  744. package/web/fonts/files/noto-sans-sc-76-400-normal.woff2 +0 -0
  745. package/web/fonts/files/noto-sans-sc-76-700-normal.woff2 +0 -0
  746. package/web/fonts/files/noto-sans-sc-77-400-normal.woff2 +0 -0
  747. package/web/fonts/files/noto-sans-sc-77-700-normal.woff2 +0 -0
  748. package/web/fonts/files/noto-sans-sc-78-400-normal.woff2 +0 -0
  749. package/web/fonts/files/noto-sans-sc-78-700-normal.woff2 +0 -0
  750. package/web/fonts/files/noto-sans-sc-79-400-normal.woff2 +0 -0
  751. package/web/fonts/files/noto-sans-sc-79-700-normal.woff2 +0 -0
  752. package/web/fonts/files/noto-sans-sc-80-400-normal.woff2 +0 -0
  753. package/web/fonts/files/noto-sans-sc-80-700-normal.woff2 +0 -0
  754. package/web/fonts/files/noto-sans-sc-81-400-normal.woff2 +0 -0
  755. package/web/fonts/files/noto-sans-sc-81-700-normal.woff2 +0 -0
  756. package/web/fonts/files/noto-sans-sc-82-400-normal.woff2 +0 -0
  757. package/web/fonts/files/noto-sans-sc-82-700-normal.woff2 +0 -0
  758. package/web/fonts/files/noto-sans-sc-83-400-normal.woff2 +0 -0
  759. package/web/fonts/files/noto-sans-sc-83-700-normal.woff2 +0 -0
  760. package/web/fonts/files/noto-sans-sc-84-400-normal.woff2 +0 -0
  761. package/web/fonts/files/noto-sans-sc-84-700-normal.woff2 +0 -0
  762. package/web/fonts/files/noto-sans-sc-85-400-normal.woff2 +0 -0
  763. package/web/fonts/files/noto-sans-sc-85-700-normal.woff2 +0 -0
  764. package/web/fonts/files/noto-sans-sc-86-400-normal.woff2 +0 -0
  765. package/web/fonts/files/noto-sans-sc-86-700-normal.woff2 +0 -0
  766. package/web/fonts/files/noto-sans-sc-87-400-normal.woff2 +0 -0
  767. package/web/fonts/files/noto-sans-sc-87-700-normal.woff2 +0 -0
  768. package/web/fonts/files/noto-sans-sc-88-400-normal.woff2 +0 -0
  769. package/web/fonts/files/noto-sans-sc-88-700-normal.woff2 +0 -0
  770. package/web/fonts/files/noto-sans-sc-89-400-normal.woff2 +0 -0
  771. package/web/fonts/files/noto-sans-sc-89-700-normal.woff2 +0 -0
  772. package/web/fonts/files/noto-sans-sc-90-400-normal.woff2 +0 -0
  773. package/web/fonts/files/noto-sans-sc-90-700-normal.woff2 +0 -0
  774. package/web/fonts/files/noto-sans-sc-91-400-normal.woff2 +0 -0
  775. package/web/fonts/files/noto-sans-sc-91-700-normal.woff2 +0 -0
  776. package/web/fonts/files/noto-sans-sc-97-400-normal.woff2 +0 -0
  777. package/web/fonts/files/noto-sans-sc-97-700-normal.woff2 +0 -0
  778. package/web/fonts/files/noto-sans-sc-98-400-normal.woff2 +0 -0
  779. package/web/fonts/files/noto-sans-sc-98-700-normal.woff2 +0 -0
  780. package/web/fonts/files/noto-sans-sc-99-400-normal.woff2 +0 -0
  781. package/web/fonts/files/noto-sans-sc-99-700-normal.woff2 +0 -0
  782. package/web/fonts/files/noto-sans-sc-cyrillic-400-normal.woff2 +0 -0
  783. package/web/fonts/files/noto-sans-sc-cyrillic-700-normal.woff2 +0 -0
  784. package/web/fonts/files/noto-sans-sc-latin-400-normal.woff2 +0 -0
  785. package/web/fonts/files/noto-sans-sc-latin-700-normal.woff2 +0 -0
  786. package/web/fonts/files/noto-sans-sc-latin-ext-400-normal.woff2 +0 -0
  787. package/web/fonts/files/noto-sans-sc-latin-ext-700-normal.woff2 +0 -0
  788. package/web/fonts/files/noto-sans-sc-vietnamese-400-normal.woff2 +0 -0
  789. package/web/fonts/files/noto-sans-sc-vietnamese-700-normal.woff2 +0 -0
  790. package/web/fonts/fonts.css +2163 -0
  791. package/web/index.html +266 -0
package/LICENSE ADDED
@@ -0,0 +1,223 @@
1
+ # Open Source License
2
+
3
+ Forsion Genesis is licensed under a modified version of the Apache License 2.0, with the following additional conditions:
4
+
5
+ 1. Forsion Genesis may be used commercially, including as a backend service for other applications, as an application development platform, or as the foundation for enterprise deployments. Should any of the conditions below apply, a commercial license must be obtained from the producer:
6
+
7
+ a. Multi-tenant service: unless explicitly authorized by Forsion in writing, you may not use the Forsion Genesis source code — including the `tangu-agent` engine, the `lcl` framework, and the `desktop` / `web` / `mobile` applications in this repository — to operate a multi-tenant environment.
8
+ - Tenant Definition: within the context of Forsion Genesis, one tenant corresponds to one workspace or one user account. A workspace/account provides a separated area for that tenant's data and configuration.
9
+
10
+ b. LOGO and copyright information: when using Forsion Genesis's frontend applications (`desktop/`, `web/`, or `mobile/`), you may not remove or modify the LOGO, product name, or copyright information shown in the application UI. This restriction does not apply to uses of Forsion Genesis that do not involve these frontends — for example, using the `tangu-agent` engine purely as a headless backend or library.
11
+
12
+ 2. As a contributor, you agree that:
13
+
14
+ a. The producer may adjust this license to be more strict or more permissive as it deems necessary.
15
+ b. Your contributed code may be used for commercial purposes by the producer, including but not limited to its own cloud/hosted operations.
16
+
17
+ Apart from the conditions above, all other rights and restrictions follow the Apache License 2.0. The full text of the Apache License 2.0 is reproduced below and is also available at http://www.apache.org/licenses/LICENSE-2.0.
18
+
19
+ Copyright © 2026 Hangzhou Niangshishan Technology Co., Ltd. (杭州酿诗山科技有限责任公司)
20
+
21
+ ---
22
+
23
+ Apache License
24
+ Version 2.0, January 2004
25
+ http://www.apache.org/licenses/
26
+
27
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
28
+
29
+ 1. Definitions.
30
+
31
+ "License" shall mean the terms and conditions for use, reproduction,
32
+ and distribution as defined by Sections 1 through 9 of this document.
33
+
34
+ "Licensor" shall mean the copyright owner or entity authorized by
35
+ the copyright owner that is granting the License.
36
+
37
+ "Legal Entity" shall mean the union of the acting entity and all
38
+ other entities that control, are controlled by, or are under common
39
+ control with that entity. For the purposes of this definition,
40
+ "control" means (i) the power, direct or indirect, to cause the
41
+ direction or management of such entity, whether by contract or
42
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
43
+ outstanding shares, or (iii) beneficial ownership of such entity.
44
+
45
+ "You" (or "Your") shall mean an individual or Legal Entity
46
+ exercising permissions granted by this License.
47
+
48
+ "Source" form shall mean the preferred form for making modifications,
49
+ including but not limited to software source code, documentation
50
+ source, and configuration files.
51
+
52
+ "Object" form shall mean any form resulting from mechanical
53
+ transformation or translation of a Source form, including but
54
+ not limited to compiled object code, generated documentation,
55
+ and conversions to other media types.
56
+
57
+ "Work" shall mean the work of authorship, whether in Source or
58
+ Object form, made available under the License, as indicated by a
59
+ copyright notice that is included in or attached to the work
60
+ (an example is provided in the Appendix below).
61
+
62
+ "Derivative Works" shall mean any work, whether in Source or Object
63
+ form, that is based on (or derived from) the Work and for which the
64
+ editorial revisions, annotations, elaborations, or other modifications
65
+ represent, as a whole, an original work of authorship. For the purposes
66
+ of this License, Derivative Works shall not include works that remain
67
+ separable from, or merely link (or bind by name) to the interfaces of,
68
+ the Work and Derivative Works thereof.
69
+
70
+ "Contribution" shall mean any work of authorship, including
71
+ the original version of the Work and any modifications or additions
72
+ to that Work or Derivative Works thereof, that is intentionally
73
+ submitted to Licensor for inclusion in the Work by the copyright owner
74
+ or by an individual or Legal Entity authorized to submit on behalf of
75
+ the copyright owner. For the purposes of this definition, "submitted"
76
+ means any form of electronic, verbal, or written communication sent
77
+ to the Licensor or its representatives, including but not limited to
78
+ communication on electronic mailing lists, source code control systems,
79
+ and issue tracking systems that are managed by, or on behalf of, the
80
+ Licensor for the purpose of discussing and improving the Work, but
81
+ excluding communication that is conspicuously marked or otherwise
82
+ designated in writing by the copyright owner as "Not a Contribution."
83
+
84
+ "Contributor" shall mean Licensor and any individual or Legal Entity
85
+ on behalf of whom a Contribution has been received by Licensor and
86
+ subsequently incorporated within the Work.
87
+
88
+ 2. Grant of Copyright License. Subject to the terms and conditions of
89
+ this License, each Contributor hereby grants to You a perpetual,
90
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
91
+ copyright license to reproduce, prepare Derivative Works of,
92
+ publicly display, publicly perform, sublicense, and distribute the
93
+ Work and such Derivative Works in Source or Object form.
94
+
95
+ 3. Grant of Patent License. Subject to the terms and conditions of
96
+ this License, each Contributor hereby grants to You a perpetual,
97
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
98
+ (except as stated in this section) patent license to make, have made,
99
+ use, offer to sell, sell, import, and otherwise transfer the Work,
100
+ where such license applies only to those patent claims licensable
101
+ by such Contributor that are necessarily infringed by their
102
+ Contribution(s) alone or by combination of their Contribution(s)
103
+ with the Work to which such Contribution(s) was submitted. If You
104
+ institute patent litigation against any entity (including a
105
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
106
+ or a Contribution incorporated within the Work constitutes direct
107
+ or contributory patent infringement, then any patent licenses
108
+ granted to You under this License for that Work shall terminate
109
+ as of the date such litigation is filed.
110
+
111
+ 4. Redistribution. You may reproduce and distribute copies of the
112
+ Work or Derivative Works thereof in any medium, with or without
113
+ modifications, and in Source or Object form, provided that You
114
+ meet the following conditions:
115
+
116
+ (a) You must give any other recipients of the Work or
117
+ Derivative Works a copy of this License; and
118
+
119
+ (b) You must cause any modified files to carry prominent notices
120
+ stating that You changed the files; and
121
+
122
+ (c) You must retain, in the Source form of any Derivative Works
123
+ that You distribute, all copyright, patent, trademark, and
124
+ attribution notices from the Source form of the Work,
125
+ excluding those notices that do not pertain to any part of
126
+ the Derivative Works; and
127
+
128
+ (d) If the Work includes a "NOTICE" text file as part of its
129
+ distribution, then any Derivative Works that You distribute must
130
+ include a readable copy of the attribution notices contained
131
+ within such NOTICE file, excluding those notices that do not
132
+ pertain to any part of the Derivative Works, in at least one
133
+ of the following places: within a NOTICE text file distributed
134
+ as part of the Derivative Works; within the Source form or
135
+ documentation, if provided along with the Derivative Works; or,
136
+ within a display generated by the Derivative Works, if and
137
+ wherever such third-party notices normally appear. The contents
138
+ of the NOTICE file are for informational purposes only and
139
+ do not modify the License. You may add Your own attribution
140
+ notices within Derivative Works that You distribute, alongside
141
+ or as an addendum to the NOTICE text from the Work, provided
142
+ that such additional attribution notices cannot be construed
143
+ as modifying the License.
144
+
145
+ You may add Your own copyright statement to Your modifications and
146
+ may provide additional or different license terms and conditions
147
+ for use, reproduction, or distribution of Your modifications, or
148
+ for any such Derivative Works as a whole, provided Your use,
149
+ reproduction, and distribution of the Work otherwise complies with
150
+ the conditions stated in this License.
151
+
152
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
153
+ any Contribution intentionally submitted for inclusion in the Work
154
+ by You to the Licensor shall be under the terms and conditions of
155
+ this License, without any additional terms or conditions.
156
+ Notwithstanding the above, nothing herein shall supersede or modify
157
+ the terms of any separate license agreement you may have executed
158
+ with Licensor regarding such Contributions.
159
+
160
+ 6. Trademarks. This License does not grant permission to use the trade
161
+ names, trademarks, service marks, or product names of the Licensor,
162
+ except as required for reasonable and customary use in describing the
163
+ origin of the Work and reproducing the content of the NOTICE file.
164
+
165
+ 7. Disclaimer of Warranty. Unless required by applicable law or
166
+ agreed to in writing, Licensor provides the Work (and each
167
+ Contributor provides its Contributions) on an "AS IS" BASIS,
168
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
169
+ implied, including, without limitation, any warranties or conditions
170
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
171
+ PARTICULAR PURPOSE. You are solely responsible for determining the
172
+ appropriateness of using or redistributing the Work and assume any
173
+ risks associated with Your exercise of permissions under this License.
174
+
175
+ 8. Limitation of Liability. In no event and under no legal theory,
176
+ whether in tort (including negligence), contract, or otherwise,
177
+ unless required by applicable law (such as deliberate and grossly
178
+ negligent acts) or agreed to in writing, shall any Contributor be
179
+ liable to You for damages, including any direct, indirect, special,
180
+ incidental, or consequential damages of any character arising as a
181
+ result of this License or out of the use or inability to use the
182
+ Work (including but not limited to damages for loss of goodwill,
183
+ work stoppage, computer failure or malfunction, or any and all
184
+ other commercial damages or losses), even if such Contributor
185
+ has been advised of the possibility of such damages.
186
+
187
+ 9. Accepting Warranty or Additional Liability. While redistributing
188
+ the Work or Derivative Works thereof, You may choose to offer,
189
+ and charge a fee for, acceptance of support, warranty, indemnity,
190
+ or other liability obligations and/or rights consistent with this
191
+ License. However, in accepting such obligations, You may act only
192
+ on Your own behalf and on Your sole responsibility, not on behalf
193
+ of any other Contributor, and only if You agree to indemnify,
194
+ defend, and hold each Contributor harmless for any liability
195
+ incurred by, or claims asserted against, such Contributor by reason
196
+ of your accepting any such warranty or additional liability.
197
+
198
+ END OF TERMS AND CONDITIONS
199
+
200
+ APPENDIX: How to apply the Apache License to your work.
201
+
202
+ To apply the Apache License to your work, attach the following
203
+ boilerplate notice, with the fields enclosed by brackets "[]"
204
+ replaced with your own identifying information. (Don't include
205
+ the brackets!) The text should be enclosed in the appropriate
206
+ comment syntax for the file format. We also recommend that a
207
+ file or class name and description of purpose be included on the
208
+ same "printed page" as the copyright notice for easier
209
+ identification within third-party archives.
210
+
211
+ Copyright [yyyy] [name of copyright owner]
212
+
213
+ Licensed under the Apache License, Version 2.0 (the "License");
214
+ you may not use this file except in compliance with the License.
215
+ You may obtain a copy of the License at
216
+
217
+ http://www.apache.org/licenses/LICENSE-2.0
218
+
219
+ Unless required by applicable law or agreed to in writing, software
220
+ distributed under the License is distributed on an "AS IS" BASIS,
221
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
222
+ See the License for the specific language governing permissions and
223
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # Forsion Unit
2
+
3
+ Unit 是独立运行的 Forsion 基础框架,复用 Genesis Desktop 的界面、笔记处理器与 Tangu 引擎。它提供插件宿主和 Web UI;已安装的插件决定业务功能。本分支与独立发行包不包含商业 Forsion Server、Admin 管理界面或商业部署组合,相关产品在独立仓库装配。
4
+
5
+ Unit is the independently runnable Forsion framework, sharing the Genesis Desktop renderer, note handlers and Tangu engine. It provides the plugin host and Web UI; installed plugins supply business capabilities. This branch and its standalone releases exclude the commercial Forsion Server, its Admin UI and commercial deployment compositions. Those products are assembled in separate repositories.
6
+
7
+ ## Desktop 同步 / Desktop synchronization
8
+
9
+ Desktop 基线不再手工维护:构建时由 git 推导,取检出历史里最新的 `v*` 稳定版标签作基线,距它的提交数作 Unit 修订号。同步方向为 Desktop → Unit;共享功能复用源码,Unit 维护宿主适配。本分支不向 Desktop 主线自动回合,也不从商业 Server 仓库同步代码。
10
+
11
+ The Desktop baseline is no longer hand-maintained: the build derives it from git, taking the newest `v*` stable tag contained in the checkout as the baseline and the number of commits since it as the Unit revision. Synchronization flows from Desktop into Unit. Shared features reuse source code; Unit maintains its host adapters. This branch does not automatically merge back into Desktop or import the commercial Server repository.
12
+
13
+ ```sh
14
+ # Refresh upstream refs, then inspect drift without changing source.
15
+ git fetch origin main --tags
16
+ node unit/check-sync.mjs
17
+ ```
18
+
19
+ 发现新稳定版后,合并对应标签并处理冲突,运行类型、插件、账号和本地安装验收,再构建发行。尤其检查已抽取的共享处理器是否接到了上游修复。构建前的检查只拦一种情况:仓里已有比当前检出更新的稳定版标签而它不在 HEAD 历史里(在旧检出上打包)。不是恰好在稳定版标签提交上的构建(有后续提交,或 package.json 版本已越过标签)都记为预发布,写进 `release.json` 而不报错;package.json 版本低于基线标签则拒绝。检查基于已获取的标签;它不会自行联网或自动合并。
20
+
21
+ When a new stable release is available, merge its tag, resolve conflicts, and run type, plugin, account and local installation checks before building. Verify that fixes in extracted shared handlers are carried forward. The pre-build check refuses exactly one situation: a newer stable tag exists in the repository but not in HEAD's history (packaging from a stale checkout). Any build that is not exactly the tagged commit (later commits, or a package version already bumped past the tag) is recorded in `release.json` as a pre-release rather than refused; a package version behind the baseline tag is refused. It checks fetched tags and does not fetch or merge automatically.
22
+
23
+ `.github/workflows/check-unit.yml` 提供分支检查和手动构建;发行包中的 `release.json` 记录 Desktop 基线标签与提交、Unit 修订号、是否预发布及源码提交。检查本身不发布版本。
24
+
25
+ `.github/workflows/check-unit.yml` provides branch validation and manual builds. Each distribution contains `release.json` with its Desktop baseline tag and commit, Unit revision, pre-release flag and source commit. Validation does not publish a release.
26
+
27
+ ## 构建与安装 / Build and install
28
+
29
+ ```sh
30
+ # Framework + Web UI only.
31
+ node unit/build.mjs --package
32
+ # Framework + Web UI + optional local business plugin packages.
33
+ node unit/build.mjs --package --local-plugins
34
+ ```
35
+
36
+ 构建使用全新的暂存目录,通过检查后替换 `unit/dist`,不会继承旧发行目录中的额外插件。构建失败保留上一份完整发行。依赖安装后可直接构建,无需商业后端源码、数据库或凭据。Node 20+ 可运行框架;插件的原生依赖须匹配目标系统、CPU 和 Node ABI。
37
+
38
+ Builds use a fresh staging directory and replace `unit/dist` after validation, preventing leftover plugins from entering the next release. Failed builds preserve the previous distribution. Once dependencies are installed, building requires no commercial backend source, database or credentials. The framework runs on Node 20+; native plugin dependencies must match the target OS, CPU and Node ABI.
39
+
40
+ 复制整个 `unit/dist` 到设备后,在发行目录中执行:
41
+
42
+ Copy the entire `unit/dist` directory to the device, then run from that directory:
43
+
44
+ ```sh
45
+ node main.mjs init /absolute/path/my-unit --mode local --port 3002 --base /web/
46
+ node main.mjs install /absolute/path/my-unit/unit.json ./plugins/amadeus
47
+ node main.mjs install /absolute/path/my-unit/unit.json ./plugins/tangu
48
+ node main.mjs install /absolute/path/my-unit/unit.json ./plugins/calendar
49
+ node main.mjs run /absolute/path/my-unit/unit.json
50
+ # From another terminal, get this device owner's browser access link.
51
+ node main.mjs access /absolute/path/my-unit/unit.json
52
+ ```
53
+
54
+ `--local-plugins` 提供 Amadeus、Tangu、Calendar、Automation、Public 的安装包,安装哪些由设备所有者决定。Amadeus 和 Tangu 包含本地运行实现;`unit/plugins` 中的源 manifest 仅为前端声明,不等于完整本地运行包。
55
+
56
+ `--local-plugins` supplies Amadeus, Tangu, Calendar, Automation and Public packages for the owner to choose from. Amadeus and Tangu include local runtimes. Source manifests in `unit/plugins` are frontend declarations, not complete local runtime packages.
57
+
58
+ 默认仅监听回环地址。设备所有者密钥保存在私有数据目录;访问链接用 fragment 传递密钥,网页消费后移除,仅保留在当前标签会话。实例数据目录应在发行目录外,更新代码不会覆盖数据。`init` 拒绝覆盖已有配置。
59
+
60
+ The default listener is loopback-only. The owner key stays in private instance data; the browser consumes it from the URL fragment, removes it and retains it only for that tab session. Keep instance data outside the release directory so code updates preserve data. `init` refuses to overwrite existing configuration.
61
+
62
+ ## 插件与生命周期 / Plugins and lifecycle
63
+
64
+ ```sh
65
+ node main.mjs status /absolute/path/my-unit/unit.json
66
+ node main.mjs disable /absolute/path/my-unit/unit.json calendar
67
+ node main.mjs enable /absolute/path/my-unit/unit.json calendar
68
+ node main.mjs restart /absolute/path/my-unit/unit.json tangu
69
+ node main.mjs install /absolute/path/my-unit/unit.json /absolute/path/new-plugin-package
70
+ ```
71
+
72
+ 相同 ID 的新包是更新;已运行的插件可在线替换,激活失败恢复旧版本。依赖按顺序启停,不能先停用仍被其他活跃插件依赖的包。安装全新插件前停止 Unit。迁移命令 `migrate <config> <plugin-id>` 仅用于提供迁移能力且未激活的插件。控制通道仅对本机所有者开放,独立于网页访问者。
73
+
74
+ Installing a new package with the same ID updates it. Running plugins can be replaced live, with rollback on activation failure. Dependencies determine lifecycle order; a dependency cannot be disabled while its dependents are active. Stop Unit before adding a new plugin. `migrate <config> <plugin-id>` applies only to inactive plugins that provide migrations. The local owner control channel is separate from browser visitor access.
75
+
76
+ 插件继续使用 Forsion 的 `main`、Space 配方和插件 API。可选 `frontend.features` 激活共享界面中的 Amadeus、Tangu、Calendar、Automation、Public 功能;新增界面实现仍需更新 Unit。可信插件可声明 `runtime` 提供设备能力,或声明 `backend` 提供 HTTP 服务。接口分别见 `runtimeTypes.ts` 和 `backendTypes.ts`;支持这些通用接口不代表预装任何商业实现。
77
+
78
+ Plugins use Forsion's existing `main`, Space recipes and plugin API. Optional `frontend.features` activates Amadeus, Tangu, Calendar, Automation or Public in the shared renderer; new UI implementations still require a Unit update. Trusted plugins can declare `runtime` for device capabilities or `backend` for HTTP services, as defined in `runtimeTypes.ts` and `backendTypes.ts`. Supporting these generic contracts does not bundle a commercial implementation.
79
+
80
+ Unit 拥有投射端口,后端插件通过 worker 和进程内流接入;Tangu 的本地引擎由插件单独托管。未安装对应插件时不创建业务笔记库或启动引擎。账号身份可由外部插件提供,浏览器访问者的配置与插件数据按已验证身份隔离。公开投射与本地所有者模式必须显式选择,服务不可用不会回落到设备数据。
81
+
82
+ Unit owns the projection port and dispatches backend plugin requests through workers and in-process streams. The Tangu plugin manages its own local engine. Without the relevant plugin, Unit creates no business vault or engine. External plugins may provide account identities; visitor preferences and plugin data are scoped to verified identities. Public projection and local owner mode are explicit choices; service failure never falls back to device data.
83
+
84
+ 本地运行时和后端插件采用可信代码模型,具有宿主用户权限;worker 提供生命周期隔离,不提供恶意代码沙箱。本地 Tangu 可使用直接配置的模型供应商,无需商业 Server;生成内容仍需要可用模型。
85
+
86
+ Local runtimes and backend plugins are trusted code with the host user's permissions. Workers isolate lifecycle, not malicious code. Local Tangu can use directly configured model providers without the commercial Server; generation still requires an available model.
87
+
88
+ ## 验证 / Verification
89
+
90
+ ```sh
91
+ node unit/check-sync.mjs
92
+ node --test unit/*.test.mjs
93
+ cd desktop
94
+ npm run typecheck
95
+ npm run check:parity
96
+ npx vitest run electron/unit*.test.ts electron/backendRunner.test.ts electron/basicUnit.test.ts
97
+ ```
98
+
99
+ `node unit/verify-local.mjs --qbird /absolute/path/bluebird` 使用已构建的发行包,在临时目录验证安装、真实本地笔记、插件和引擎生命周期、重启持久化;不需要商业后端或数据库。`--serve` 可保留独立预览。必须使用与发行包原生模块匹配的 Node;构建时可用 `UNIT_SQLITE_PACKAGE` 指向同版本、目标 ABI 的 SQLite 包。
100
+
101
+ `node unit/verify-local.mjs --qbird /absolute/path/bluebird` verifies the built release in a temporary directory, including installation, real local notes, plugin and engine lifecycle, and restart persistence. It needs no commercial backend or database. `--serve` retains an isolated preview. Use a Node runtime matching the package's native modules; `UNIT_SQLITE_PACKAGE` can select the same locked SQLite version built for the target ABI.
@@ -0,0 +1,273 @@
1
+ // unit/backendWorker.ts
2
+ import http from "node:http";
3
+ import net from "node:net";
4
+ import { pathToFileURL } from "node:url";
5
+ import { format } from "node:util";
6
+ import { parentPort, workerData } from "node:worker_threads";
7
+
8
+ // unit/portDuplex.ts
9
+ import { Duplex } from "node:stream";
10
+ var PortDuplex = class extends Duplex {
11
+ constructor(port, metadata = {}, options = {}) {
12
+ super({ allowHalfOpen: true, ...options });
13
+ this.port = port;
14
+ Object.assign(this, metadata);
15
+ this.on("error", () => {
16
+ });
17
+ port.on("message", (packet) => {
18
+ if (this.destroyed) return;
19
+ this.touch();
20
+ if (packet.type === "data") {
21
+ if (this.push(Buffer.from(packet.bytes))) this.send({ type: "ack" });
22
+ else this.awaitingRead = true;
23
+ } else if (packet.type === "ack") {
24
+ const callback = this.pendingWrite;
25
+ this.pendingWrite = void 0;
26
+ callback?.();
27
+ } else if (packet.type === "end") {
28
+ this.receivedEnd = true;
29
+ this.push(null);
30
+ } else if (packet.type === "close") {
31
+ this.destroy();
32
+ }
33
+ });
34
+ port.on("messageerror", () => this.destroy(new Error("Invalid backend connection message")));
35
+ port.on("close", () => {
36
+ if (!this.destroyed) this.destroy(this.receivedEnd ? void 0 : new Error("Backend connection closed"));
37
+ });
38
+ }
39
+ connecting = false;
40
+ pending = false;
41
+ remoteAddress;
42
+ remotePort;
43
+ remoteFamily;
44
+ localAddress;
45
+ localPort;
46
+ encrypted;
47
+ pendingWrite;
48
+ awaitingRead = false;
49
+ receivedEnd = false;
50
+ timeoutMs = 0;
51
+ timeoutTimer;
52
+ send(packet) {
53
+ try {
54
+ this.port.postMessage(packet);
55
+ } catch {
56
+ this.destroy(new Error("Backend connection unavailable"));
57
+ }
58
+ }
59
+ touch() {
60
+ if (!this.timeoutMs) return;
61
+ if (this.timeoutTimer) clearTimeout(this.timeoutTimer);
62
+ this.timeoutTimer = setTimeout(() => this.emit("timeout"), this.timeoutMs);
63
+ this.timeoutTimer.unref();
64
+ }
65
+ _read() {
66
+ if (this.awaitingRead) {
67
+ this.awaitingRead = false;
68
+ this.send({ type: "ack" });
69
+ }
70
+ }
71
+ _write(chunk, encoding, callback) {
72
+ this.touch();
73
+ this.pendingWrite = callback;
74
+ this.send({ type: "data", bytes: typeof chunk === "string" ? Buffer.from(chunk, encoding) : chunk });
75
+ }
76
+ _final(callback) {
77
+ this.send({ type: "end" });
78
+ callback();
79
+ }
80
+ _destroy(error, callback) {
81
+ if (this.timeoutTimer) clearTimeout(this.timeoutTimer);
82
+ const pending = this.pendingWrite;
83
+ this.pendingWrite = void 0;
84
+ pending?.(error ?? new Error("Backend connection closed"));
85
+ try {
86
+ this.port.postMessage({ type: "close" });
87
+ } catch {
88
+ }
89
+ this.port.close();
90
+ callback(error);
91
+ }
92
+ setTimeout(milliseconds, callback) {
93
+ if (callback) this.once("timeout", callback);
94
+ this.timeoutMs = milliseconds;
95
+ if (this.timeoutTimer) clearTimeout(this.timeoutTimer);
96
+ this.timeoutTimer = void 0;
97
+ this.touch();
98
+ return this;
99
+ }
100
+ setNoDelay() {
101
+ return this;
102
+ }
103
+ setKeepAlive() {
104
+ return this;
105
+ }
106
+ ref() {
107
+ this.port.ref();
108
+ return this;
109
+ }
110
+ unref() {
111
+ this.port.unref();
112
+ this.timeoutTimer?.unref();
113
+ return this;
114
+ }
115
+ address() {
116
+ return { address: this.localAddress ?? "", family: this.remoteFamily ?? "IPv4", port: this.localPort ?? 0 };
117
+ }
118
+ };
119
+
120
+ // unit/backendWorker.ts
121
+ if (!parentPort) throw new Error("Backend worker requires a parent Unit");
122
+ var parent = parentPort;
123
+ var data = workerData;
124
+ var controller = new AbortController();
125
+ var connections = /* @__PURE__ */ new Set();
126
+ var accountCalls = /* @__PURE__ */ new Map();
127
+ var plugin;
128
+ var server;
129
+ var stopping;
130
+ var creating;
131
+ var activeHook;
132
+ var ready = false;
133
+ net.Server.prototype.listen = function() {
134
+ throw new Error("Backend plugins must use the Unit HTTP listener");
135
+ };
136
+ function send(event) {
137
+ parent.postMessage(event);
138
+ }
139
+ async function shutdown() {
140
+ if (stopping) return stopping;
141
+ stopping = (async () => {
142
+ ready = false;
143
+ controller.abort();
144
+ for (const call of accountCalls.values()) call.abort();
145
+ for (const connection of connections) connection.destroy();
146
+ connections.clear();
147
+ server?.closeAllConnections();
148
+ await new Promise((resolve) => setImmediate(resolve));
149
+ await creating?.catch(() => {
150
+ });
151
+ try {
152
+ await plugin?.stop?.();
153
+ } finally {
154
+ await activeHook?.catch(() => {
155
+ });
156
+ }
157
+ })();
158
+ return stopping;
159
+ }
160
+ async function fail(error) {
161
+ const cause = error instanceof Error ? error : new Error(String(error));
162
+ try {
163
+ await shutdown();
164
+ } catch {
165
+ }
166
+ send({ type: "failure", message: cause.message, stack: cause.stack });
167
+ }
168
+ parent.on("message", (command) => {
169
+ if (command.type === "stop") {
170
+ void shutdown().then(() => send({ type: "stopped" }), fail);
171
+ return;
172
+ }
173
+ if (command.type === "account-cancel") {
174
+ accountCalls.get(command.requestId)?.abort();
175
+ return;
176
+ }
177
+ if (command.type === "account-resolve") {
178
+ void resolveAccount(command);
179
+ return;
180
+ }
181
+ if (command.type !== "connection") return;
182
+ if (!ready || !server) {
183
+ command.port.close();
184
+ return;
185
+ }
186
+ const connection = new PortDuplex(command.port, command.socket);
187
+ connections.add(connection);
188
+ connection.once("close", () => connections.delete(connection));
189
+ server.emit("connection", connection);
190
+ });
191
+ function identityFields(value) {
192
+ if (value === null) return null;
193
+ if (!value || typeof value !== "object") throw new Error("Invalid account identity");
194
+ const identity = {};
195
+ for (const field of ["userId", "username", "role", "tenantId", "workspaceId", "nickname", "avatar"]) {
196
+ const input = value[field];
197
+ if (input === void 0 && !["userId", "username", "role"].includes(field)) continue;
198
+ const limit = field === "avatar" ? 1024 * 1024 : 512;
199
+ if (typeof input !== "string" || input.length > limit || /[\x00-\x1f\x7f]/.test(input) || ["userId", "username", "role", "tenantId", "workspaceId"].includes(field) && !input.trim()) {
200
+ throw new Error("Invalid account identity");
201
+ }
202
+ identity[field] = input;
203
+ }
204
+ return identity;
205
+ }
206
+ async function resolveAccount(command) {
207
+ if (!ready || !plugin?.account || accountCalls.size >= 256 || accountCalls.has(command.requestId) || typeof command.token !== "string" || !command.token || command.token.length > 16384) {
208
+ send({ type: "account-error", requestId: command.requestId });
209
+ return;
210
+ }
211
+ const call = new AbortController();
212
+ accountCalls.set(command.requestId, call);
213
+ try {
214
+ const result = await plugin.account.resolve(command.token, { signal: call.signal });
215
+ if (!call.signal.aborted && ready) send({ type: "account-result", requestId: command.requestId, identity: identityFields(result) });
216
+ } catch {
217
+ if (!call.signal.aborted && ready) send({ type: "account-error", requestId: command.requestId });
218
+ } finally {
219
+ accountCalls.delete(command.requestId);
220
+ }
221
+ }
222
+ async function boot() {
223
+ const entry = await import(pathToFileURL(data.entry).href);
224
+ if (controller.signal.aborted) return;
225
+ const factory = entry.default;
226
+ if (typeof factory !== "function") throw new Error("Backend entry must default-export a factory");
227
+ creating = (async () => {
228
+ plugin = await factory({
229
+ packageDir: data.packageDir,
230
+ dataDir: data.dataDir,
231
+ config: data.config,
232
+ signal: controller.signal,
233
+ log: (...messages) => send({ type: "log", message: format(...messages) }),
234
+ requestRestart: () => send({ type: "restart" })
235
+ });
236
+ })();
237
+ await creating;
238
+ if (controller.signal.aborted) return;
239
+ if (!plugin || typeof plugin.handle !== "function" || !Array.isArray(plugin.mounts) || plugin.mounts.some((mount) => typeof mount !== "string" || !mount.startsWith("/") || /[?#\r\n]/.test(mount))) {
240
+ throw new Error("Backend factory must provide a handler and absolute mounts");
241
+ }
242
+ if (plugin.account !== void 0 && typeof plugin.account?.resolve !== "function") {
243
+ throw new Error("Backend account provider must provide resolve");
244
+ }
245
+ const metadata = plugin.account?.metadata;
246
+ if (metadata && [metadata.apiBase, metadata.loginPath].some((value) => typeof value !== "string" || !value.startsWith("/") || value.startsWith("//") || /[\\\s?#]/.test(value) || value.split("/").some((part) => part === "." || part === ".."))) {
247
+ throw new Error("Account endpoints must be absolute same-origin paths");
248
+ }
249
+ if (data.mode === "migrate") {
250
+ activeHook = Promise.resolve().then(() => plugin.migrate?.());
251
+ await activeHook;
252
+ if (controller.signal.aborted) return;
253
+ await shutdown();
254
+ send({ type: "migrated" });
255
+ return;
256
+ }
257
+ activeHook = Promise.resolve().then(() => plugin.start?.());
258
+ await activeHook;
259
+ if (controller.signal.aborted) return;
260
+ server = http.createServer(plugin.handle);
261
+ if (plugin.upgrade) server.on("upgrade", plugin.upgrade);
262
+ server.requestTimeout = 0;
263
+ server.headersTimeout = 0;
264
+ server.timeout = 0;
265
+ ready = true;
266
+ send({
267
+ type: "ready",
268
+ mounts: plugin.mounts,
269
+ hasAccount: Boolean(plugin.account),
270
+ accountMetadata: metadata ? { apiBase: metadata.apiBase, loginPath: metadata.loginPath } : void 0
271
+ });
272
+ }
273
+ void boot().catch(fail);