@opensumi/ide-editor 2.12.1-next-079c1930

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 (298) hide show
  1. package/README.md +565 -0
  2. package/lib/browser/breadcrumb/default.d.ts +28 -0
  3. package/lib/browser/breadcrumb/default.d.ts.map +1 -0
  4. package/lib/browser/breadcrumb/default.js +283 -0
  5. package/lib/browser/breadcrumb/default.js.map +1 -0
  6. package/lib/browser/breadcrumb/document-symbol.d.ts +36 -0
  7. package/lib/browser/breadcrumb/document-symbol.d.ts.map +1 -0
  8. package/lib/browser/breadcrumb/document-symbol.js +161 -0
  9. package/lib/browser/breadcrumb/document-symbol.js.map +1 -0
  10. package/lib/browser/breadcrumb/index.d.ts +20 -0
  11. package/lib/browser/breadcrumb/index.d.ts.map +1 -0
  12. package/lib/browser/breadcrumb/index.js +90 -0
  13. package/lib/browser/breadcrumb/index.js.map +1 -0
  14. package/lib/browser/component/scroll/scroll.d.ts +66 -0
  15. package/lib/browser/component/scroll/scroll.d.ts.map +1 -0
  16. package/lib/browser/component/scroll/scroll.js +263 -0
  17. package/lib/browser/component/scroll/scroll.js.map +1 -0
  18. package/lib/browser/component/scroll/scroll.module.less +83 -0
  19. package/lib/browser/component.d.ts +23 -0
  20. package/lib/browser/component.d.ts.map +1 -0
  21. package/lib/browser/component.js +165 -0
  22. package/lib/browser/component.js.map +1 -0
  23. package/lib/browser/decoration-applier.d.ts +25 -0
  24. package/lib/browser/decoration-applier.d.ts.map +1 -0
  25. package/lib/browser/decoration-applier.js +224 -0
  26. package/lib/browser/decoration-applier.js.map +1 -0
  27. package/lib/browser/diff/compare.d.ts +14 -0
  28. package/lib/browser/diff/compare.d.ts.map +1 -0
  29. package/lib/browser/diff/compare.js +94 -0
  30. package/lib/browser/diff/compare.js.map +1 -0
  31. package/lib/browser/diff/index.d.ts +19 -0
  32. package/lib/browser/diff/index.d.ts.map +1 -0
  33. package/lib/browser/diff/index.js +92 -0
  34. package/lib/browser/diff/index.js.map +1 -0
  35. package/lib/browser/doc-cache/empty-doc-cache.d.ts +12 -0
  36. package/lib/browser/doc-cache/empty-doc-cache.d.ts.map +1 -0
  37. package/lib/browser/doc-cache/empty-doc-cache.js +27 -0
  38. package/lib/browser/doc-cache/empty-doc-cache.js.map +1 -0
  39. package/lib/browser/doc-cache/index.d.ts +3 -0
  40. package/lib/browser/doc-cache/index.d.ts.map +1 -0
  41. package/lib/browser/doc-cache/index.js +6 -0
  42. package/lib/browser/doc-cache/index.js.map +1 -0
  43. package/lib/browser/doc-cache/local-storage-cache.d.ts +32 -0
  44. package/lib/browser/doc-cache/local-storage-cache.d.ts.map +1 -0
  45. package/lib/browser/doc-cache/local-storage-cache.js +69 -0
  46. package/lib/browser/doc-cache/local-storage-cache.js.map +1 -0
  47. package/lib/browser/doc-model/editor-document-error.d.ts +7 -0
  48. package/lib/browser/doc-model/editor-document-error.d.ts.map +1 -0
  49. package/lib/browser/doc-model/editor-document-error.js +15 -0
  50. package/lib/browser/doc-model/editor-document-error.js.map +1 -0
  51. package/lib/browser/doc-model/editor-document-model-service.d.ts +40 -0
  52. package/lib/browser/doc-model/editor-document-model-service.d.ts.map +1 -0
  53. package/lib/browser/doc-model/editor-document-model-service.js +276 -0
  54. package/lib/browser/doc-model/editor-document-model-service.js.map +1 -0
  55. package/lib/browser/doc-model/editor-document-model.d.ts +85 -0
  56. package/lib/browser/doc-model/editor-document-model.d.ts.map +1 -0
  57. package/lib/browser/doc-model/editor-document-model.js +463 -0
  58. package/lib/browser/doc-model/editor-document-model.js.map +1 -0
  59. package/lib/browser/doc-model/editor-document-registry.d.ts +15 -0
  60. package/lib/browser/doc-model/editor-document-registry.d.ts.map +1 -0
  61. package/lib/browser/doc-model/editor-document-registry.js +110 -0
  62. package/lib/browser/doc-model/editor-document-registry.js.map +1 -0
  63. package/lib/browser/doc-model/editor-is-fn.d.ts +4 -0
  64. package/lib/browser/doc-model/editor-is-fn.d.ts.map +1 -0
  65. package/lib/browser/doc-model/editor-is-fn.js +12 -0
  66. package/lib/browser/doc-model/editor-is-fn.js.map +1 -0
  67. package/lib/browser/doc-model/main.d.ts +5 -0
  68. package/lib/browser/doc-model/main.d.ts.map +1 -0
  69. package/lib/browser/doc-model/main.js +8 -0
  70. package/lib/browser/doc-model/main.js.map +1 -0
  71. package/lib/browser/doc-model/override.d.ts +12 -0
  72. package/lib/browser/doc-model/override.d.ts.map +1 -0
  73. package/lib/browser/doc-model/override.js +46 -0
  74. package/lib/browser/doc-model/override.js.map +1 -0
  75. package/lib/browser/doc-model/save-task.d.ts +19 -0
  76. package/lib/browser/doc-model/save-task.d.ts.map +1 -0
  77. package/lib/browser/doc-model/save-task.js +34 -0
  78. package/lib/browser/doc-model/save-task.js.map +1 -0
  79. package/lib/browser/doc-model/saveParticipants.d.ts +21 -0
  80. package/lib/browser/doc-model/saveParticipants.d.ts.map +1 -0
  81. package/lib/browser/doc-model/saveParticipants.js +133 -0
  82. package/lib/browser/doc-model/saveParticipants.js.map +1 -0
  83. package/lib/browser/doc-model/types.d.ts +253 -0
  84. package/lib/browser/doc-model/types.d.ts.map +1 -0
  85. package/lib/browser/doc-model/types.js +31 -0
  86. package/lib/browser/doc-model/types.js.map +1 -0
  87. package/lib/browser/editor-collection.service.d.ts +137 -0
  88. package/lib/browser/editor-collection.service.d.ts.map +1 -0
  89. package/lib/browser/editor-collection.service.js +607 -0
  90. package/lib/browser/editor-collection.service.js.map +1 -0
  91. package/lib/browser/editor-opener.d.ts +10 -0
  92. package/lib/browser/editor-opener.d.ts.map +1 -0
  93. package/lib/browser/editor-opener.js +51 -0
  94. package/lib/browser/editor-opener.js.map +1 -0
  95. package/lib/browser/editor.contribution.d.ts +54 -0
  96. package/lib/browser/editor.contribution.d.ts.map +1 -0
  97. package/lib/browser/editor.contribution.js +1059 -0
  98. package/lib/browser/editor.contribution.js.map +1 -0
  99. package/lib/browser/editor.decoration.service.d.ts +28 -0
  100. package/lib/browser/editor.decoration.service.d.ts.map +1 -0
  101. package/lib/browser/editor.decoration.service.js +216 -0
  102. package/lib/browser/editor.decoration.service.js.map +1 -0
  103. package/lib/browser/editor.less +4 -0
  104. package/lib/browser/editor.module.less +493 -0
  105. package/lib/browser/editor.override.d.ts +24 -0
  106. package/lib/browser/editor.override.d.ts.map +1 -0
  107. package/lib/browser/editor.override.js +85 -0
  108. package/lib/browser/editor.override.js.map +1 -0
  109. package/lib/browser/editor.status-bar.service.d.ts +12 -0
  110. package/lib/browser/editor.status-bar.service.d.ts.map +1 -0
  111. package/lib/browser/editor.status-bar.service.js +114 -0
  112. package/lib/browser/editor.status-bar.service.js.map +1 -0
  113. package/lib/browser/editor.view.d.ts +33 -0
  114. package/lib/browser/editor.view.d.ts.map +1 -0
  115. package/lib/browser/editor.view.js +411 -0
  116. package/lib/browser/editor.view.js.map +1 -0
  117. package/lib/browser/error.d.ts +14 -0
  118. package/lib/browser/error.d.ts.map +1 -0
  119. package/lib/browser/error.js +19 -0
  120. package/lib/browser/error.js.map +1 -0
  121. package/lib/browser/feature.d.ts +14 -0
  122. package/lib/browser/feature.d.ts.map +1 -0
  123. package/lib/browser/feature.js +56 -0
  124. package/lib/browser/feature.js.map +1 -0
  125. package/lib/browser/format/formatterSelect.d.ts +11 -0
  126. package/lib/browser/format/formatterSelect.d.ts.map +1 -0
  127. package/lib/browser/format/formatterSelect.js +61 -0
  128. package/lib/browser/format/formatterSelect.js.map +1 -0
  129. package/lib/browser/fs-resource/file-tree-set.d.ts +31 -0
  130. package/lib/browser/fs-resource/file-tree-set.d.ts.map +1 -0
  131. package/lib/browser/fs-resource/file-tree-set.js +123 -0
  132. package/lib/browser/fs-resource/file-tree-set.js.map +1 -0
  133. package/lib/browser/fs-resource/fs-editor-doc.d.ts +47 -0
  134. package/lib/browser/fs-resource/fs-editor-doc.d.ts.map +1 -0
  135. package/lib/browser/fs-resource/fs-editor-doc.js +148 -0
  136. package/lib/browser/fs-resource/fs-editor-doc.js.map +1 -0
  137. package/lib/browser/fs-resource/fs-resource.d.ts +25 -0
  138. package/lib/browser/fs-resource/fs-resource.d.ts.map +1 -0
  139. package/lib/browser/fs-resource/fs-resource.js +211 -0
  140. package/lib/browser/fs-resource/fs-resource.js.map +1 -0
  141. package/lib/browser/fs-resource/index.d.ts +12 -0
  142. package/lib/browser/fs-resource/index.d.ts.map +1 -0
  143. package/lib/browser/fs-resource/index.js +30 -0
  144. package/lib/browser/fs-resource/index.js.map +1 -0
  145. package/lib/browser/grid/grid.service.d.ts +44 -0
  146. package/lib/browser/grid/grid.service.d.ts.map +1 -0
  147. package/lib/browser/grid/grid.service.js +255 -0
  148. package/lib/browser/grid/grid.service.js.map +1 -0
  149. package/lib/browser/history/index.d.ts +31 -0
  150. package/lib/browser/history/index.d.ts.map +1 -0
  151. package/lib/browser/history/index.js +164 -0
  152. package/lib/browser/history/index.js.map +1 -0
  153. package/lib/browser/index.d.ts +33 -0
  154. package/lib/browser/index.d.ts.map +1 -0
  155. package/lib/browser/index.js +212 -0
  156. package/lib/browser/index.js.map +1 -0
  157. package/lib/browser/language/diagnostic-collection.d.ts +28 -0
  158. package/lib/browser/language/diagnostic-collection.d.ts.map +1 -0
  159. package/lib/browser/language/diagnostic-collection.js +72 -0
  160. package/lib/browser/language/diagnostic-collection.js.map +1 -0
  161. package/lib/browser/language/language.service.d.ts +19 -0
  162. package/lib/browser/language/language.service.d.ts.map +1 -0
  163. package/lib/browser/language/language.service.js +146 -0
  164. package/lib/browser/language/language.service.js.map +1 -0
  165. package/lib/browser/language/workspace-symbol-quickopen.d.ts +43 -0
  166. package/lib/browser/language/workspace-symbol-quickopen.d.ts.map +1 -0
  167. package/lib/browser/language/workspace-symbol-quickopen.js +231 -0
  168. package/lib/browser/language/workspace-symbol-quickopen.js.map +1 -0
  169. package/lib/browser/menu/editor.context.d.ts +20 -0
  170. package/lib/browser/menu/editor.context.d.ts.map +1 -0
  171. package/lib/browser/menu/editor.context.js +139 -0
  172. package/lib/browser/menu/editor.context.js.map +1 -0
  173. package/lib/browser/menu/editor.menu.d.ts +13 -0
  174. package/lib/browser/menu/editor.menu.d.ts.map +1 -0
  175. package/lib/browser/menu/editor.menu.js +48 -0
  176. package/lib/browser/menu/editor.menu.js.map +1 -0
  177. package/lib/browser/menu/title-context.menu.d.ts +13 -0
  178. package/lib/browser/menu/title-context.menu.d.ts.map +1 -0
  179. package/lib/browser/menu/title-context.menu.js +55 -0
  180. package/lib/browser/menu/title-context.menu.js.map +1 -0
  181. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.d.ts +20 -0
  182. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.d.ts.map +1 -0
  183. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.js +64 -0
  184. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.js.map +1 -0
  185. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.d.ts +35 -0
  186. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.d.ts.map +1 -0
  187. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.js +144 -0
  188. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.js.map +1 -0
  189. package/lib/browser/monaco-contrib/command/command.service.d.ts +141 -0
  190. package/lib/browser/monaco-contrib/command/command.service.d.ts.map +1 -0
  191. package/lib/browser/monaco-contrib/command/command.service.js +370 -0
  192. package/lib/browser/monaco-contrib/command/command.service.js.map +1 -0
  193. package/lib/browser/monaco-contrib/index.d.ts +3 -0
  194. package/lib/browser/monaco-contrib/index.d.ts.map +1 -0
  195. package/lib/browser/monaco-contrib/index.js +6 -0
  196. package/lib/browser/monaco-contrib/index.js.map +1 -0
  197. package/lib/browser/monaco-contrib/tokenizer/textmate-registry.d.ts +46 -0
  198. package/lib/browser/monaco-contrib/tokenizer/textmate-registry.d.ts.map +1 -0
  199. package/lib/browser/monaco-contrib/tokenizer/textmate-registry.js +79 -0
  200. package/lib/browser/monaco-contrib/tokenizer/textmate-registry.js.map +1 -0
  201. package/lib/browser/monaco-contrib/tokenizer/textmate-tokenizer.d.ts +58 -0
  202. package/lib/browser/monaco-contrib/tokenizer/textmate-tokenizer.d.ts.map +1 -0
  203. package/lib/browser/monaco-contrib/tokenizer/textmate-tokenizer.js +75 -0
  204. package/lib/browser/monaco-contrib/tokenizer/textmate-tokenizer.js.map +1 -0
  205. package/lib/browser/monaco-contrib/tokenizer/textmate.service.d.ts +54 -0
  206. package/lib/browser/monaco-contrib/tokenizer/textmate.service.d.ts.map +1 -0
  207. package/lib/browser/monaco-contrib/tokenizer/textmate.service.js +596 -0
  208. package/lib/browser/monaco-contrib/tokenizer/textmate.service.js.map +1 -0
  209. package/lib/browser/navigation.module.less +86 -0
  210. package/lib/browser/navigation.view.d.ts +29 -0
  211. package/lib/browser/navigation.view.d.ts.map +1 -0
  212. package/lib/browser/navigation.view.js +183 -0
  213. package/lib/browser/navigation.view.js.map +1 -0
  214. package/lib/browser/preference/contribution.d.ts +5 -0
  215. package/lib/browser/preference/contribution.d.ts.map +1 -0
  216. package/lib/browser/preference/contribution.js +16 -0
  217. package/lib/browser/preference/contribution.js.map +1 -0
  218. package/lib/browser/preference/converter.d.ts +34 -0
  219. package/lib/browser/preference/converter.d.ts.map +1 -0
  220. package/lib/browser/preference/converter.js +632 -0
  221. package/lib/browser/preference/converter.js.map +1 -0
  222. package/lib/browser/preference/schema.d.ts +230 -0
  223. package/lib/browser/preference/schema.d.ts.map +1 -0
  224. package/lib/browser/preference/schema.js +1453 -0
  225. package/lib/browser/preference/schema.js.map +1 -0
  226. package/lib/browser/preference/util.d.ts +4 -0
  227. package/lib/browser/preference/util.d.ts.map +1 -0
  228. package/lib/browser/preference/util.js +13 -0
  229. package/lib/browser/preference/util.js.map +1 -0
  230. package/lib/browser/resource.service.d.ts +32 -0
  231. package/lib/browser/resource.service.d.ts.map +1 -0
  232. package/lib/browser/resource.service.js +219 -0
  233. package/lib/browser/resource.service.js.map +1 -0
  234. package/lib/browser/tab.view.d.ts +12 -0
  235. package/lib/browser/tab.view.d.ts.map +1 -0
  236. package/lib/browser/tab.view.js +330 -0
  237. package/lib/browser/tab.view.js.map +1 -0
  238. package/lib/browser/types.d.ts +344 -0
  239. package/lib/browser/types.d.ts.map +1 -0
  240. package/lib/browser/types.js +94 -0
  241. package/lib/browser/types.js.map +1 -0
  242. package/lib/browser/untitled-resource.d.ts +33 -0
  243. package/lib/browser/untitled-resource.d.ts.map +1 -0
  244. package/lib/browser/untitled-resource.js +114 -0
  245. package/lib/browser/untitled-resource.js.map +1 -0
  246. package/lib/browser/view/editor.react.d.ts +10 -0
  247. package/lib/browser/view/editor.react.d.ts.map +1 -0
  248. package/lib/browser/view/editor.react.js +69 -0
  249. package/lib/browser/view/editor.react.js.map +1 -0
  250. package/lib/browser/view/react-hook.d.ts +3 -0
  251. package/lib/browser/view/react-hook.d.ts.map +1 -0
  252. package/lib/browser/view/react-hook.js +9 -0
  253. package/lib/browser/view/react-hook.js.map +1 -0
  254. package/lib/browser/view/suggest-widget.d.ts +8 -0
  255. package/lib/browser/view/suggest-widget.d.ts.map +1 -0
  256. package/lib/browser/view/suggest-widget.js +51 -0
  257. package/lib/browser/view/suggest-widget.js.map +1 -0
  258. package/lib/browser/view/topPadding.d.ts +6 -0
  259. package/lib/browser/view/topPadding.d.ts.map +1 -0
  260. package/lib/browser/view/topPadding.js +18 -0
  261. package/lib/browser/view/topPadding.js.map +1 -0
  262. package/lib/browser/workbench-editor.service.d.ts +244 -0
  263. package/lib/browser/workbench-editor.service.d.ts.map +1 -0
  264. package/lib/browser/workbench-editor.service.js +1689 -0
  265. package/lib/browser/workbench-editor.service.js.map +1 -0
  266. package/lib/common/doc-cache.d.ts +80 -0
  267. package/lib/common/doc-cache.d.ts.map +1 -0
  268. package/lib/common/doc-cache.js +39 -0
  269. package/lib/common/doc-cache.js.map +1 -0
  270. package/lib/common/editor.d.ts +571 -0
  271. package/lib/common/editor.d.ts.map +1 -0
  272. package/lib/common/editor.js +125 -0
  273. package/lib/common/editor.js.map +1 -0
  274. package/lib/common/index.d.ts +6 -0
  275. package/lib/common/index.d.ts.map +1 -0
  276. package/lib/common/index.js +9 -0
  277. package/lib/common/index.js.map +1 -0
  278. package/lib/common/language.d.ts +108 -0
  279. package/lib/common/language.d.ts.map +1 -0
  280. package/lib/common/language.js +72 -0
  281. package/lib/common/language.js.map +1 -0
  282. package/lib/common/mocks/workbench-editor.service.d.ts +21 -0
  283. package/lib/common/mocks/workbench-editor.service.d.ts.map +1 -0
  284. package/lib/common/mocks/workbench-editor.service.js +48 -0
  285. package/lib/common/mocks/workbench-editor.service.js.map +1 -0
  286. package/lib/common/resource.d.ts +94 -0
  287. package/lib/common/resource.d.ts.map +1 -0
  288. package/lib/common/resource.js +31 -0
  289. package/lib/common/resource.js.map +1 -0
  290. package/lib/common/utils.d.ts +3 -0
  291. package/lib/common/utils.d.ts.map +1 -0
  292. package/lib/common/utils.js +14 -0
  293. package/lib/common/utils.js.map +1 -0
  294. package/lib/index.d.ts +2 -0
  295. package/lib/index.d.ts.map +1 -0
  296. package/lib/index.js +5 -0
  297. package/lib/index.js.map +1 -0
  298. package/package.json +33 -0
package/README.md ADDED
@@ -0,0 +1,565 @@
1
+ ---
2
+ id: editor
3
+ title: 编辑器模块
4
+ ---
5
+
6
+ # 编辑器结构和概念
7
+
8
+ #### 打开一个 tab 的过程
9
+
10
+ ![](https://cdn.nlark.com/yuque/0/2021/png/201640/1617938693844-e954f3ea-2888-48e2-8527-683603b15b39.png)
11
+
12
+ 1. 在整个 IDE 全局中,拥有一个唯一的 WorkbenchEditorService 实例,它是全局的编辑器管理服务。我们在打开一个编辑器时,首先要调用它的 open 方法,传入一个对应的uri,如 file://path/to/fileToOpen.ts
13
+
14
+ 2. 为了打开这个 uri, 我们需要将其转换为一个在编辑器中可打开的 IResource, 它会拥有更多必要的对编辑器的信息。 这些信息由提前注册的 `IResourceProvider` 提供。
15
+ ````typescript
16
+ /**
17
+ * Resource
18
+ * 一个资源代表了一个能够在编辑器区域被打开的东西
19
+ */
20
+ export interface IResource<MetaData = any> {
21
+ /**
22
+ * 是否允许刷新后恢复
23
+ */
24
+ supportsRevive?: boolean;
25
+
26
+ // 资源名称
27
+ name: string;
28
+ // 资源URI
29
+ uri: URI;
30
+ // 资源icon的class
31
+ icon: string;
32
+ // 资源的额外信息
33
+ metadata?: MetaData;
34
+ // 资源已被删除
35
+ deleted?: any;
36
+ }
37
+ ````
38
+ 3. 获得 IResource 之后,就可以在 tab 上创建新 tab, 展示对应的名称和 icon 了。
39
+ 4. 为了能在编辑器中展示内容,还需要知道如何把这个 IResource 打开。开天的编辑器模块支持一个资源拥有多种打开方式,如 md 文件拥有代码和实时预览的方式。一个打开方式可以是代码编辑器、diff编辑器,或者是一个编辑器富组件(React组件)。这些打开方式和富组件都需要提前在 `EditorComponentRegistry` 中进行注册
40
+ ````typescript
41
+ // 定义一个resource如何被打开
42
+ export interface IEditorOpenType {
43
+
44
+ type: 'code' | 'diff' | 'component';
45
+
46
+ componentId?: string;
47
+
48
+ title?: string;
49
+
50
+ readonly?: boolean;
51
+
52
+ // 默认0, 大的排在前面
53
+ weight?: number;
54
+
55
+ }
56
+ ````
57
+ 5. 获得对应的打开方式后,根据用户选择的类型将对应的内容展现在编辑器的主体中,这样就完成了一个 tab 的打开过程。
58
+
59
+ # 贡献点
60
+
61
+ ## Contribution Providers
62
+
63
+ 模块定义的用于其他模块贡献的贡献点。
64
+
65
+ ### BrowserEditorContribution
66
+
67
+ 所有向编辑器模块贡献功能的贡献点统一使用 `BrowserEditorContribution`
68
+
69
+ **registerResource**
70
+
71
+ 用来在合适的时机向 `ResourceService` 注册可以在编辑器内打开的资源。
72
+
73
+ 为了让一个 uri 能够在编辑器中被打开,首先需要向 `ResourceService` 注册一个用于解析 uri 至一个编辑器资源(`IResource`) 的 `IResourceProvider`。它的主要职责是在这个 uri 在编辑器标签 Tab 上显示时提供它的名称、图标、是否被编辑等状态,以及相应这个 tab 被关闭时的回调等等。
74
+
75
+ **registerEditorComponent**
76
+
77
+ 用来在合适的时机向 `EditorComponentRegistry` 注册编辑器组件、打开方式等功能。
78
+
79
+ 一个 uri 对应的编辑器资源 (`IResource`) 需要能够在编辑器中展示,还需要为它注册对应的一个或者多个打开方式,以及对应打开方式使用的 React 组件。
80
+
81
+ **onDidRestoreState**
82
+
83
+ 当进入 IDE 时,编辑器会尝试恢复上一次打开的编辑器组和组内打开的文件
84
+ 完成后会执行 onDidRestoreState 这个 hook
85
+
86
+ **registerEditorFeature**
87
+
88
+ 用来在合适的时机向 `IEditorFeatureRegistry` 注册 `EditorFeatureContribution`,以通过这种方式增强 monaco 编辑器的能力。
89
+
90
+ #### Example
91
+
92
+ 示例1: 为 example_scheme://exampleTitle 这样的 Uri 注册一个编辑器组件,使得它能在编辑器内被打开。
93
+
94
+ ```tsx
95
+
96
+
97
+ const ExampleEditorComponent = () => {
98
+ return <div>
99
+ 示例组件内容
100
+ </div>
101
+ }
102
+
103
+
104
+ @Domain(BrowserEditorContribution)
105
+ export class ExampleEditorContribution implements BrowserEditorContribution {
106
+
107
+ registerResource(resourceService: ResourceService): void {
108
+
109
+ // 注册example_scheme 可以在编辑器打开,并且设定对应的tab icon 和 名字
110
+ resourceService.registerResourceProvider({
111
+ scheme: 'example_scheme',
112
+ provideResource: async (uri: URI): Promise<IResource<IWelcomeMetaData>> => {
113
+ return {
114
+ uri,
115
+ name: '示例编辑器组件',
116
+ icon: 'example-icon-class'
117
+ };
118
+ },
119
+ });
120
+ }
121
+
122
+ registerEditorComponent(registry: EditorComponentRegistry) {
123
+
124
+ // 将组件进行注册
125
+ registry.registerEditorComponent({
126
+ component: ExampleEditorComponent,
127
+ uid: 'example_scheme_component',
128
+ scheme: 'example_scheme',
129
+ });
130
+
131
+ // 将这个组件设置为这个 example_scheme 的 resource 的默认打开方式
132
+ registry.registerEditorComponentResolver('example_scheme', (resource, results) => {
133
+ results.push([
134
+ {
135
+ type: 'component',
136
+ componentId: 'example_scheme_component',
137
+ },
138
+ ]);
139
+ });
140
+ }
141
+
142
+ }
143
+
144
+ ```
145
+
146
+ 示例2: 为 monaco 编辑器提供额外的能力
147
+
148
+ ```` ts
149
+
150
+ @Domain(BrowserEditorContribution)
151
+ export class ExampleEditorContribution implements BrowserEditorContribution {
152
+
153
+ registerEditorFeature(registry: IEditorFeatureRegistry) {
154
+ registry.registerEditorFeatureContribution({
155
+ contribute: (editor: IEditor) => {
156
+ // 在编辑器被创建时,会调用 contribute 这个函数,此时可以添加功能
157
+ // 需要返回一个 disposer,在编辑器实例被销毁的时候调用
158
+ return editor.monacoEditor.onDidChangeModel((e) => {
159
+ console.log(e.oldModelUrl?.toString());
160
+ })
161
+ },
162
+ }
163
+ }
164
+
165
+ ````
166
+
167
+
168
+ ## Contributions
169
+
170
+ 模块注册的贡献点。
171
+
172
+ ### Command
173
+
174
+ * `file.new.untitled`: 在编辑器创建一个新文件
175
+ * `editor.undo`: 撤销 (编辑器时)
176
+ * `editor.redo`: 重做 (编辑器时)
177
+ * `editor.componentUndo`: 撤销 (富组件时)
178
+ * `editor.componentRedo`: 撤销 (富组件时)
179
+ * `editor.selectAll`: 全选
180
+ * `editor.openUri`: 打开一个 uri
181
+ * `editor.openUris`: 打开多个 uri
182
+ * `editor.saveUri`: 保存某个 uri 指定的文件
183
+ * `editor.compare`: 将两个 uri 进行比较
184
+ * `editor.close`: 关闭当前打开的 tab
185
+ * `editor.closeAllInGroup`: 关闭一组 tab
186
+ * `editor.closeOtherEditorsInGroup`: 在一组tab中关闭除目标以外的其他tab
187
+ * `editor.closeAll`: 关闭全部tab
188
+ * `editor.closeSaved`: 关闭已保存的tab
189
+ * `editor.closeToRight`: 关闭右侧的tab
190
+ * `editor.getCurrent`: 获取当前的 tab 的 uri
191
+ * `editor.getCurrentResource`: 获取当前的 tab 的 resource
192
+ * `editor.splitToLeft`: 向左拆分编辑器组
193
+ * `editor.splitToRight`: 向右拆分编辑器组
194
+ * `editor.splitToTop`: 向上拆分编辑器组
195
+ * `editor.splitToBottom`: 向上拆分编辑器组
196
+ * `editor.changeLanguage`: 修改当前编辑器的语言
197
+ * `editor.changeEol`: 修改当前编辑器的 eol
198
+ * `editor.navigateLeft`: 将光标移到到左边的编辑器组
199
+ * `editor.navigateRight`: 将光标移到到右边的编辑器组
200
+ * `editor.navigateUp`: 将光标移到到上边的编辑器组
201
+ * `editor.navigateDown`: 将光标移到到下边的编辑器组
202
+ * `editor.navigatePrevious`: 将光标移到到上一个编辑器组
203
+ * `editor.navigateNext`: 将光标移到到下一个编辑器组
204
+ * `editor.goToGroup`: 将光标移到指定的编辑器组
205
+ * `editor.previous`: 移动到前一个 tab (如果是组里面第一个,则会移动到上一组)
206
+ * `editor.next`: 移动到后一个 tab (如果是组里面最后一个,则会移动到下一组)
207
+ * `editor.previousInGroup`: 移动到当前编辑器组内前一个 tab
208
+ * `editor.nextInGroup`: 移动到当前编辑器组内后一个 tab
209
+ * `editor.closeOtherGroup`: 关闭其他编辑器组
210
+ * `editor.openEditorAtIndex`: 打开当前编辑器组第 x 个 tab 页
211
+ * `editor.evenEditorGroups`: 重置编辑器组大小
212
+ * `editor.document.revert`: 还原当前 tab 的文档
213
+ * `editor.revertAndClose`: 还原当前 tab 的文档,并关闭当前tab
214
+ * `editor.goForward`: 前进到下一个编辑器光标的历史位置
215
+ * `editor.goBack`: 回到上一个编辑器光标的历史位置
216
+ * `editor.pinCurrent`: 将当前 tab 固定(取消 preview模式)
217
+ * `editor.copyCurrentPath`: 复制当前 tab 的路径 (文件路径)
218
+ * `editor.moveGroup`: 将当前的 tab 移到另外一个编辑器组
219
+ * `editor.reopenClosed`: 重新打开刚刚关闭的 tab
220
+ * `editor.focus`: 编辑器获取焦点
221
+ * `editor.autoSave`: 切换自动保存
222
+ ### Preference
223
+
224
+ editor模块中将所有 monaco 的 options 变成了对应含有 `editor.` 前缀的 preference
225
+ 详见 src/browser/preference/schema.ts
226
+
227
+ 其他的 preferences:
228
+
229
+ * `editor.readonlyFiles`: 只读的文件列表
230
+ * `editor.previewMode`: 是否开启预览模式
231
+ * `editor.tokenColorCustomizations`: 自定义 token 颜色的配置
232
+ * `editor.askIfDiff`: 保存文件时,如果磁盘文件较新,是否弹出提示
233
+ * `editor.showActionWhenGroupEmpty`: 在编辑器组没有tab时,是否显示右上角的 editor/title 菜单
234
+ * `editor.autoSave`: 自动保存的模式
235
+ * `editor.autoSaveDelay`: 当自动保存是 afterDelay 时,保存的延时时长
236
+ * `editor.preferredFormatter`: 针对各个语言的格式化方式选择的配置
237
+ * `editor.forceReadOnly`: 是否强制所有编辑器变成 readOnly
238
+ * `editor.languageFeatureEnabledMaxSize`: 会启用languageFeature的最大文件尺寸
239
+ * `editor.docExtHostSyncMaxSize`: 会同步到extHost的最大文件尺寸
240
+ * `editor.formatOnSave`: 是否在保存时自动格式化
241
+ * `editor.formatOnSaveTimeout`: 保存时自动格式化的最大执行时间
242
+ * `editor.largeFile`: 对于 '大文件' 的大小定义, 单位 B
243
+ * `editor.modelDisposeTime`: 编辑器 tab 关闭后, 没有被引用的文档会被 dispose 的延时
244
+ ### KeyBinding
245
+
246
+ * `ctrlcmd+s`: 保存文件
247
+ * `ctrlcmd+w` **Electron**: 关闭当前 tab
248
+ * `alt+shift+w` **Web**: 关闭当前 tab
249
+ * `alt+cmd+left` **Electron**: 前一个tab
250
+ * `ctrlcmd+pageup` **Electron**: 前一个tab
251
+ * `ctrl+shift+tab` **Electron**: 前一个tab
252
+ * `ctrlcmd+shift+[` **Electron** **Mac**: 前一个tab
253
+ * `ctrlcmd+ctrl+left` **Web**: 前一个tab
254
+ * `alt+pageup` **Web**: 前一个tab
255
+ * `alt+cmd+right` **Electron**: 后一个tab
256
+ * `ctrlcmd+pagedown` **Electron**: 后一个tab
257
+ * `ctrl+tab` **Electron**: 后一个tab
258
+ * `ctrlcmd+shift+]` **Electron** **Mac**: 后一个tab
259
+ * `ctrlcmd+ctrl+right` **Web**: 后一个tab
260
+ * `alt+pagedown` **Web**: 后一个tab
261
+ * `alt+right` **Windows** : 下一个光标位置
262
+ * `ctrl+shift+-` **Mac** : 下一个光标位置
263
+ * `alt+left` **Windows** : 上一个光标位置
264
+ * `ctrl+-` **Mac** : 上一个光标位置
265
+ * `ctrlcmd+k m`: 修改当前打开的文件的语言
266
+ * `ctrlcmd+\`: 向右拆分
267
+ * `ctrlcmd+k ctrlcmd+right`: 下一个编辑器组
268
+ * `ctrlcmd+k ctrlcmd+left`: 上一个编辑器组
269
+ * `alt+ctrlcmd+s`:保存全部文件
270
+ * `ctrlcmd+k w`: 关闭全部
271
+ * `ctrlcmd+k enter`: 让当前 tab 退出 preview 状态
272
+ * `ctrlcmd+k p`: 复制当前 tab 路径
273
+ * `ctrlcmd+shift+t` **Electron**: 重新打开已关闭的文件
274
+ * `alt+shift+t` **Web**: 重新打开已关闭的文件
275
+ * `ctrlcmd+n` **Electron**: 创建一个新文件 tab
276
+ * `alt+n` **Web**: 创建一个新文件 tab
277
+ * `ctrlcmd+t` **Electron**: 搜索 workspace symbol
278
+ * `ctrlcmd+o` **Web**: 搜索 workspace symbol
279
+ * `ctrlcmd+1` : 去到第 1 个编辑器组
280
+ * `ctrlcmd+2` : 去到第 2 个编辑器组
281
+ * `ctrlcmd+3` : 去到第 3 个编辑器组
282
+ * `ctrlcmd+4` : 去到第 4 个编辑器组
283
+ * `ctrlcmd+5` : 去到第 5 个编辑器组
284
+ * `ctrlcmd+6` : 去到第 6 个编辑器组
285
+ * `ctrlcmd+7` : 去到第 7 个编辑器组
286
+ * `ctrlcmd+8` : 去到第 8 个编辑器组
287
+ * `ctrlcmd+9` : 去到第 9 个编辑器组
288
+ * `ctrlcmd+k up`: 将当前tab移动到上方编辑器组
289
+ * `ctrlcmd+k left`: 将当前tab移动到左方编辑器组
290
+ * `ctrlcmd+k right`: 将当前tab移动到右方编辑器组
291
+ * `ctrlcmd+k down`: 将当前tab移动到下方编辑器组
292
+ ### Menu
293
+
294
+ #### MenuIds
295
+ * `editor/title`: 每组编辑器右上角的动作按钮
296
+ * `editor/title/context`: 在 tab 上右键出现的菜单
297
+ * `editor/context`: 在编辑器内 (必须是monaco编辑器内) 右键出现的菜单
298
+ # 类
299
+
300
+ ### WorkbenchEditorService
301
+
302
+ 外部模块调用编辑器主要通过这个 class 进行对应的操作
303
+
304
+ ````typescript
305
+ export abstract class WorkbenchEditorService {
306
+
307
+ /**
308
+ * 当前 resource 发生变更
309
+ */
310
+ onActiveResourceChange: Event<MaybeNull<IResource>>;
311
+
312
+ /**
313
+ * 当前编辑器内鼠标
314
+ */
315
+ onCursorChange: Event<CursorStatus>;
316
+
317
+ /**
318
+ * 编辑器组发生改变时的事件
319
+ */
320
+ onDidEditorGroupsChanged: Event<void>;
321
+
322
+ /**
323
+ * 当前 editorGroup 发生改变的事件
324
+ */
325
+ onDidCurrentEditorGroupChanged: Event<IEditorGroup>;
326
+
327
+ /**
328
+ * 所有的编辑器组
329
+ */
330
+ editorGroups: IEditorGroup[];
331
+
332
+ /**
333
+ *
334
+ */
335
+ sortedEditorGroups: IEditorGroup[];
336
+
337
+ /**
338
+ * 当前的编辑器对象
339
+ */
340
+ currentEditor: IEditor | null;
341
+
342
+ /**
343
+ * 当前焦点的编辑器资源
344
+ */
345
+ currentResource: MaybeNull<IResource>;
346
+
347
+ /**
348
+ * 当前的编辑器组
349
+ */
350
+ currentEditorGroup: IEditorGroup;
351
+
352
+ /**
353
+ * 关闭全部
354
+ * @param uri 只关闭指定的 uri
355
+ * @param force 不进行关闭前提醒(不执行 shouldCloseResource)
356
+ */
357
+ abstract async closeAll(uri?: URI, force?: boolean): Promise<void>;
358
+
359
+ /**
360
+ * 打开指定的 uri
361
+ * @param uri
362
+ * @param options 打开的选项
363
+ */
364
+ abstract async open(uri: URI, options?: IResourceOpenOptions): Promise<IOpenResourceResult>;
365
+
366
+ /**
367
+ * 打开多个 uri
368
+ * @param uri
369
+ */
370
+ abstract async openUris(uri: URI[]): Promise<void>;
371
+
372
+ /**
373
+ * 保存全部
374
+ * @param includeUntitled 是否对新文件进行保存询问, 默认false
375
+ */
376
+ abstract saveAll(includeUntitled?: boolean): Promise<void>;
377
+
378
+ /**
379
+ * 关闭指定的 uri, 等同于 closeAll 带 uri 参数
380
+ * @param uri
381
+ * @param force
382
+ */
383
+ abstract async close(uri: any, force?: boolean): Promise<void>;
384
+
385
+ /**
386
+ * 获得当前打开的 uri
387
+ */
388
+ abstract getAllOpenedUris(): URI[];
389
+
390
+ /**
391
+ * 创建一个带待存的资源
392
+ * @param options
393
+ */
394
+ abstract createUntitledResource(options?: IUntitledOptions): Promise<IOpenResourceResult>;
395
+ }
396
+ ````
397
+
398
+ ### IEditor
399
+
400
+ monaco 编辑器的包裹概念
401
+
402
+ ````typescript
403
+ /**
404
+ * 一个IEditor代表了一个最小的编辑器单元,可以是CodeEditor中的一个,也可以是DiffEditor中的两个
405
+ */
406
+ export interface IEditor {
407
+
408
+ /**
409
+ * 获得当前编辑器
410
+ */
411
+ getId(): string;
412
+
413
+ /**
414
+ * 获得编辑器的类型
415
+ */
416
+ getType(): EditorType;
417
+
418
+ /**
419
+ * editor中打开的documentModel
420
+ */
421
+
422
+ currentDocumentModel: IEditorDocumentModel | null;
423
+
424
+ /**
425
+ * 当前的uri
426
+ */
427
+ currentUri: URI | null;
428
+
429
+ /**
430
+ * 插入代码片段
431
+ * @param template
432
+ * @param ranges
433
+ * @param opts
434
+ */
435
+ insertSnippet(template: string, ranges: readonly IRange[], opts: IUndoStopOptions);
436
+
437
+ /**
438
+ * 应用装饰器
439
+ * @param key
440
+ * @param options
441
+ */
442
+ applyDecoration(key: string, options: IDecorationApplyOptions[]);
443
+
444
+
445
+ getSelections(): ISelection[] | null;
446
+ onSelectionsChanged: Event<{ selections: ISelection[], source: string }>;
447
+
448
+ onVisibleRangesChanged: Event<IRange[]>;
449
+
450
+ onConfigurationChanged: Event<void>;
451
+
452
+ setSelections(selection: IRange[] | ISelection[]);
453
+
454
+ setSelection(selection: IRange | ISelection);
455
+
456
+ updateOptions(editorOptions?: IEditorOptions, modelOptions?: ITextModelUpdateOptions);
457
+
458
+ save(): Promise<void>;
459
+
460
+ /**
461
+ * 获得包裹的 monaco 编辑器
462
+ */
463
+ monacoEditor: editor.ICodeEditor;
464
+
465
+ onDispose: Event<void>;
466
+ }
467
+ ````
468
+
469
+
470
+ ### IEditorGroup
471
+
472
+ ````typescript
473
+ /**
474
+ * 编辑器组
475
+ * 是一组tab和一个展示编辑器或者编辑器富组件的单元,主要用来管理 tab 的生命周期,以及控制编辑器主体的展示。
476
+ * 一个 workbenchEditorService 会拥有多个(至少一个)编辑器组,它会在类似 “向右拆分” 这样的功能被使用时创建,在该组tab完全关闭时销毁。
477
+ */
478
+ export interface IEditorGroup {
479
+
480
+ /**
481
+ * 当前 editorGroup 在 workbenchEditorService.sortedEditorGroups 中的 index
482
+ */
483
+ index: number;
484
+
485
+ /**
486
+ * 当前 editorGroup 的名称,唯一,可视作 id
487
+ */
488
+ name: string;
489
+
490
+ /**
491
+ * 每个编辑器组拥有一个代码编辑器和一个diff编辑器实例
492
+ * 当前group的代码编辑器
493
+ */
494
+ codeEditor: ICodeEditor;
495
+
496
+ /**
497
+ * 当前group的diff编辑器实例
498
+ */
499
+ diffEditor: IDiffEditor;
500
+
501
+ /**
502
+ * 当前的编辑器 (如果当前是富组件,则返回 null)
503
+ */
504
+ currentEditor: IEditor | null;
505
+
506
+ /**
507
+ * 和currentEditor不同,对于diffEditor来说会取确实在focus的Editor
508
+ */
509
+ currentFocusedEditor: IEditor | undefined;
510
+
511
+ /**
512
+ * 所有当前编辑器租的 tab 的资源
513
+ */
514
+ resources: IResource[];
515
+
516
+ /**
517
+ * 当前的 tab 对应的资源
518
+ */
519
+ currentResource: MaybeNull<IResource>;
520
+
521
+ /**
522
+ * 当前的打开方式
523
+ */
524
+ currentOpenType: MaybeNull<IEditorOpenType>;
525
+
526
+ onDidEditorGroupContentLoading: Event<IResource>;
527
+
528
+ resourceStatus: Map<IResource, Promise<void>>;
529
+
530
+ open(uri: URI, options?: IResourceOpenOptions): Promise<IOpenResourceResult>;
531
+
532
+ /**
533
+ * 取消指定 uri 的 tab 的 preview模式(斜体模式),如果它是的话
534
+ * @param uri
535
+ */
536
+ pin(uri: URI): Promise<void>;
537
+
538
+ /**
539
+ * 关闭指定的 uri 的 tab, 如果存在的话
540
+ * @param uri
541
+ */
542
+ close(uri: URI): Promise<void>;
543
+
544
+ getState(): IEditorGroupState;
545
+
546
+ restoreState(IEditorGroupState): Promise<void>;
547
+
548
+ saveAll(): Promise<void>;
549
+
550
+ closeAll(): Promise<void>;
551
+
552
+ /**
553
+ * 保存当前的 tab 的文件 (如果它能被保存的话)
554
+ */
555
+ saveCurrent(reason?: SaveReason): Promise<void>;
556
+
557
+ /**
558
+ * 保存某个 resource
559
+ * @param resource
560
+ * @param reason
561
+ */
562
+ saveResource(resource: IResource, reason: SaveReason): Promise<void>;
563
+ }
564
+
565
+ ````
@@ -0,0 +1,28 @@
1
+ import { CommandService, Event, IPosition, MaybeNull, URI, WithEventBus } from '@opensumi/ide-core-browser';
2
+ import { LabelService } from '@opensumi/ide-core-browser/lib/services';
3
+ import { IFileServiceClient } from '@opensumi/ide-file-service/lib/common/file-service-client';
4
+ import { IWorkspaceService } from '@opensumi/ide-workspace';
5
+ import { IEditor } from '../../common';
6
+ import { EditorSelectionChangeEvent, IBreadCrumbPart, IBreadCrumbProvider } from '../types';
7
+ import { DocumentSymbolChangedEvent, DocumentSymbolStore, INormalizedDocumentSymbol } from './document-symbol';
8
+ export declare class DefaultBreadCrumbProvider extends WithEventBus implements IBreadCrumbProvider {
9
+ private _onDidUpdateBreadCrumb;
10
+ onDidUpdateBreadCrumb: Event<URI>;
11
+ fileServiceClient: IFileServiceClient;
12
+ workspaceService: IWorkspaceService;
13
+ labelService: LabelService;
14
+ commandService: CommandService;
15
+ documentSymbolStore: DocumentSymbolStore;
16
+ private debouncedFireUriEvent;
17
+ handlesUri(uri: URI): boolean;
18
+ provideBreadCrumbForUri(uri: URI, editor: MaybeNull<IEditor>): IBreadCrumbPart[];
19
+ private getFileParts;
20
+ private createFilePartBreadCrumbUri;
21
+ private getDocumentSymbolParts;
22
+ private createFromDocumentSymbol;
23
+ onDocumentSymbolChangedEvent(e: DocumentSymbolChangedEvent): void;
24
+ onEditorSelectionChangeEvent(e: EditorSelectionChangeEvent): void;
25
+ private notifyUpdate;
26
+ }
27
+ export declare function findCurrentDocumentSymbol(documentSymbols: INormalizedDocumentSymbol[], position: MaybeNull<IPosition>): INormalizedDocumentSymbol[];
28
+ //# sourceMappingURL=default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../src/browser/breadcrumb/default.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAmB,KAAK,EAA0B,SAAS,EAAU,SAAS,EAAW,GAAG,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACtK,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2DAA2D,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE/G,qBACa,yBAA0B,SAAQ,YAAa,YAAW,mBAAmB;IAExF,OAAO,CAAC,sBAAsB,CAAsB;IAC7C,qBAAqB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAqC;IAG7E,iBAAiB,EAAE,kBAAkB,CAAC;IAGtC,gBAAgB,EAAE,iBAAiB,CAAC;IAGpC,YAAY,EAAE,YAAY,CAAC;IAG3B,cAAc,EAAE,cAAc,CAAC;IAG/B,mBAAmB,EAAE,mBAAmB,CAAC;IAEzC,OAAO,CAAC,qBAAqB,CAAgC;IAE7D,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;IAI7B,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,eAAe,EAAE;IAIhF,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,2BAA2B;IA8CnC,OAAO,CAAC,sBAAsB;IA6B9B,OAAO,CAAC,wBAAwB;IAoChC,4BAA4B,CAAC,CAAC,EAAE,0BAA0B;IAK1D,4BAA4B,CAAC,CAAC,EAAE,0BAA0B;IAI1D,OAAO,CAAC,YAAY;CAQrB;AAED,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,yBAAyB,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,yBAAyB,EAAE,CAqBnJ"}