@krainovsd/markdown-editor 0.0.4 → 0.1.0

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 (253) hide show
  1. package/lib/cjs/index-Byjf17iv.js +501 -0
  2. package/lib/cjs/index-Byjf17iv.js.map +1 -0
  3. package/lib/cjs/index-lPo-3QDL.js +1374 -0
  4. package/lib/cjs/index-lPo-3QDL.js.map +1 -0
  5. package/lib/cjs/index.js +14 -1
  6. package/lib/cjs/index.js.map +1 -1
  7. package/lib/esm/extensions/compartments/index.js +8 -0
  8. package/lib/esm/extensions/compartments/index.js.map +1 -0
  9. package/lib/esm/extensions/init-extensions.js +45 -0
  10. package/lib/esm/extensions/init-extensions.js.map +1 -0
  11. package/lib/esm/extensions/keymaps/init-key-map.js +91 -0
  12. package/lib/esm/extensions/keymaps/init-key-map.js.map +1 -0
  13. package/lib/esm/extensions/listeners/get-change-event.js +14 -0
  14. package/lib/esm/extensions/listeners/get-change-event.js.map +1 -0
  15. package/lib/esm/extensions/listeners/get-focus-event.js +16 -0
  16. package/lib/esm/extensions/listeners/get-focus-event.js.map +1 -0
  17. package/lib/esm/extensions/listeners/init-listeners.js +9 -0
  18. package/lib/esm/extensions/listeners/init-listeners.js.map +1 -0
  19. package/lib/esm/extensions/markdown/blockquote/blockquote-constants.js +6 -0
  20. package/lib/esm/extensions/markdown/blockquote/blockquote-constants.js.map +1 -0
  21. package/lib/esm/extensions/markdown/blockquote/blockquote-decoration.js +99 -0
  22. package/lib/esm/extensions/markdown/blockquote/blockquote-decoration.js.map +1 -0
  23. package/lib/esm/extensions/markdown/blockquote/blockquote-widget.js +25 -0
  24. package/lib/esm/extensions/markdown/blockquote/blockquote-widget.js.map +1 -0
  25. package/lib/esm/extensions/markdown/bold/bold-constants.js +5 -0
  26. package/lib/esm/extensions/markdown/bold/bold-constants.js.map +1 -0
  27. package/lib/esm/extensions/markdown/bold/bold-decoration.js +41 -0
  28. package/lib/esm/extensions/markdown/bold/bold-decoration.js.map +1 -0
  29. package/lib/esm/extensions/markdown/code/code-constants.js +6 -0
  30. package/lib/esm/extensions/markdown/code/code-constants.js.map +1 -0
  31. package/lib/esm/extensions/markdown/code/code-decoration.js +109 -0
  32. package/lib/esm/extensions/markdown/code/code-decoration.js.map +1 -0
  33. package/lib/esm/extensions/markdown/code/code-widget.js +83 -0
  34. package/lib/esm/extensions/markdown/code/code-widget.js.map +1 -0
  35. package/lib/esm/extensions/markdown/header/header-constants.js +6 -0
  36. package/lib/esm/extensions/markdown/header/header-constants.js.map +1 -0
  37. package/lib/esm/extensions/markdown/header/header-decoration.js +64 -0
  38. package/lib/esm/extensions/markdown/header/header-decoration.js.map +1 -0
  39. package/lib/esm/extensions/markdown/horizontal/horizontal-constants.js +4 -0
  40. package/lib/esm/extensions/markdown/horizontal/horizontal-constants.js.map +1 -0
  41. package/lib/esm/extensions/markdown/horizontal/horizontal-decoration.js +31 -0
  42. package/lib/esm/extensions/markdown/horizontal/horizontal-decoration.js.map +1 -0
  43. package/lib/esm/extensions/markdown/image/image-constants.js +8 -0
  44. package/lib/esm/extensions/markdown/image/image-constants.js.map +1 -0
  45. package/lib/esm/extensions/markdown/image/image-decoration.js +75 -0
  46. package/lib/esm/extensions/markdown/image/image-decoration.js.map +1 -0
  47. package/lib/esm/extensions/markdown/image/image-widget.js +184 -0
  48. package/lib/esm/extensions/markdown/image/image-widget.js.map +1 -0
  49. package/lib/esm/extensions/markdown/index.js +2 -0
  50. package/lib/esm/extensions/markdown/index.js.map +1 -0
  51. package/lib/esm/extensions/markdown/init-markdown.js +18 -0
  52. package/lib/esm/extensions/markdown/init-markdown.js.map +1 -0
  53. package/lib/esm/extensions/markdown/italic/italic-constants.js +5 -0
  54. package/lib/esm/extensions/markdown/italic/italic-constants.js.map +1 -0
  55. package/lib/esm/extensions/markdown/italic/italic-decoration.js +77 -0
  56. package/lib/esm/extensions/markdown/italic/italic-decoration.js.map +1 -0
  57. package/lib/esm/extensions/markdown/link/auto-link-decoration.js +24 -0
  58. package/lib/esm/extensions/markdown/link/auto-link-decoration.js.map +1 -0
  59. package/lib/esm/extensions/markdown/link/link-constants.js +10 -0
  60. package/lib/esm/extensions/markdown/link/link-constants.js.map +1 -0
  61. package/lib/esm/extensions/markdown/link/link-decoration.js +51 -0
  62. package/lib/esm/extensions/markdown/link/link-decoration.js.map +1 -0
  63. package/lib/esm/extensions/markdown/link/link-label-decoration.js +22 -0
  64. package/lib/esm/extensions/markdown/link/link-label-decoration.js.map +1 -0
  65. package/lib/esm/extensions/markdown/link/link-widget.js +144 -0
  66. package/lib/esm/extensions/markdown/link/link-widget.js.map +1 -0
  67. package/lib/esm/extensions/markdown/list/list-constants.js +7 -0
  68. package/lib/esm/extensions/markdown/list/list-constants.js.map +1 -0
  69. package/lib/esm/extensions/markdown/list/list-decoration.js +38 -0
  70. package/lib/esm/extensions/markdown/list/list-decoration.js.map +1 -0
  71. package/lib/esm/extensions/markdown/list/list-widget.js +33 -0
  72. package/lib/esm/extensions/markdown/list/list-widget.js.map +1 -0
  73. package/lib/esm/extensions/markdown/markdown-decoration.js +105 -0
  74. package/lib/esm/extensions/markdown/markdown-decoration.js.map +1 -0
  75. package/lib/esm/extensions/markdown/markdown-parser.js +6 -0
  76. package/lib/esm/extensions/markdown/markdown-parser.js.map +1 -0
  77. package/lib/esm/extensions/markdown/mention/mention-constants.js +6 -0
  78. package/lib/esm/extensions/markdown/mention/mention-constants.js.map +1 -0
  79. package/lib/esm/extensions/markdown/mention/mention-decoration.js +37 -0
  80. package/lib/esm/extensions/markdown/mention/mention-decoration.js.map +1 -0
  81. package/lib/esm/extensions/markdown/mention/mention-parser.js +25 -0
  82. package/lib/esm/extensions/markdown/mention/mention-parser.js.map +1 -0
  83. package/lib/esm/extensions/markdown/strike-through/strike-through-constants.js +4 -0
  84. package/lib/esm/extensions/markdown/strike-through/strike-through-constants.js.map +1 -0
  85. package/lib/esm/extensions/markdown/strike-through/strike-through-decoration.js +32 -0
  86. package/lib/esm/extensions/markdown/strike-through/strike-through-decoration.js.map +1 -0
  87. package/lib/esm/extensions/markdown/styles.module.scss.js +8 -0
  88. package/lib/esm/extensions/markdown/styles.module.scss.js.map +1 -0
  89. package/lib/esm/extensions/markdown/todo/todo-constants.js +6 -0
  90. package/lib/esm/extensions/markdown/todo/todo-constants.js.map +1 -0
  91. package/lib/esm/extensions/markdown/todo/todo-decoration.js +35 -0
  92. package/lib/esm/extensions/markdown/todo/todo-decoration.js.map +1 -0
  93. package/lib/esm/extensions/markdown/todo/todo-widget.js +51 -0
  94. package/lib/esm/extensions/markdown/todo/todo-widget.js.map +1 -0
  95. package/lib/esm/extensions/settings/init-settings.js +19 -0
  96. package/lib/esm/extensions/settings/init-settings.js.map +1 -0
  97. package/lib/esm/extensions/theme/init-theme.js +15 -0
  98. package/lib/esm/extensions/theme/init-theme.js.map +1 -0
  99. package/lib/esm/extensions/theme/theme-constants.js +17 -0
  100. package/lib/esm/extensions/theme/theme-constants.js.map +1 -0
  101. package/lib/esm/extensions/theme/themes/get-dark-theme.js +40 -0
  102. package/lib/esm/extensions/theme/themes/get-dark-theme.js.map +1 -0
  103. package/lib/esm/extensions/theme/themes/get-highlight-template.js +35 -0
  104. package/lib/esm/extensions/theme/themes/get-highlight-template.js.map +1 -0
  105. package/lib/esm/extensions/theme/themes/get-light-theme.js +40 -0
  106. package/lib/esm/extensions/theme/themes/get-light-theme.js.map +1 -0
  107. package/lib/esm/extensions/theme/themes/get-theme-template.js +69 -0
  108. package/lib/esm/extensions/theme/themes/get-theme-template.js.map +1 -0
  109. package/lib/esm/index.js +1 -1
  110. package/lib/esm/lib/utils/copy-to-clipboard.js +35 -0
  111. package/lib/esm/lib/utils/copy-to-clipboard.js.map +1 -0
  112. package/lib/esm/lib/utils/get-decoration.js +24 -0
  113. package/lib/esm/lib/utils/get-decoration.js.map +1 -0
  114. package/lib/esm/lib/utils/is-in-range.js +8 -0
  115. package/lib/esm/lib/utils/is-in-range.js.map +1 -0
  116. package/lib/esm/lib/utils/is-range-overlap.js +6 -0
  117. package/lib/esm/lib/utils/is-range-overlap.js.map +1 -0
  118. package/lib/esm/lib/utils/tick.js +22 -0
  119. package/lib/esm/lib/utils/tick.js.map +1 -0
  120. package/lib/esm/module/Editor/Editor.js +91 -0
  121. package/lib/esm/module/Editor/Editor.js.map +1 -0
  122. package/lib/esm/module/Editor/lib/init-editor-provider.js +32 -0
  123. package/lib/esm/module/Editor/lib/init-editor-provider.js.map +1 -0
  124. package/lib/esm/module/Editor/lib/init-editor-state.js +18 -0
  125. package/lib/esm/module/Editor/lib/init-editor-state.js.map +1 -0
  126. package/lib/esm/module/Editor/lib/init-editor.js +27 -0
  127. package/lib/esm/module/Editor/lib/init-editor.js.map +1 -0
  128. package/lib/esm/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js +29 -0
  129. package/lib/esm/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js.map +1 -0
  130. package/lib/index.d.ts +137 -0
  131. package/package.json +30 -23
  132. package/lib/cjs/editor-qKPDa91b.js +0 -2
  133. package/lib/cjs/editor-qKPDa91b.js.map +0 -1
  134. package/lib/cjs/markdown_plugin-IXFRDWyN.js +0 -2
  135. package/lib/cjs/markdown_plugin-IXFRDWyN.js.map +0 -1
  136. package/lib/cjs/vendor_vim-BHa51_r7.js +0 -2
  137. package/lib/cjs/vendor_vim-BHa51_r7.js.map +0 -1
  138. package/lib/cjs/vendor_y.next-CVyX1ZQB.js +0 -2
  139. package/lib/cjs/vendor_y.next-CVyX1ZQB.js.map +0 -1
  140. package/lib/cjs/vendor_y.websocket-Dr9ojjFR.js +0 -2
  141. package/lib/cjs/vendor_y.websocket-Dr9ojjFR.js.map +0 -1
  142. package/lib/cjs/vendor_yjs-DXWp84x5.js +0 -2
  143. package/lib/cjs/vendor_yjs-DXWp84x5.js.map +0 -1
  144. package/lib/esm/editor-CLyV23xt.js +0 -2
  145. package/lib/esm/editor-CLyV23xt.js.map +0 -1
  146. package/lib/esm/markdown_plugin-DdBeaig8.js +0 -2
  147. package/lib/esm/markdown_plugin-DdBeaig8.js.map +0 -1
  148. package/lib/esm/vendor_vim-PF2jWG0J.js +0 -2
  149. package/lib/esm/vendor_vim-PF2jWG0J.js.map +0 -1
  150. package/lib/esm/vendor_y.next-B9hhKe5T.js +0 -2
  151. package/lib/esm/vendor_y.next-B9hhKe5T.js.map +0 -1
  152. package/lib/esm/vendor_y.websocket-gIpX3Cmo.js +0 -2
  153. package/lib/esm/vendor_y.websocket-gIpX3Cmo.js.map +0 -1
  154. package/lib/esm/vendor_yjs-otxZW90b.js +0 -2
  155. package/lib/esm/vendor_yjs-otxZW90b.js.map +0 -1
  156. package/tmp/app/helpers/common-test.d.ts +0 -1
  157. package/tmp/app/helpers/full-example.d.ts +0 -1
  158. package/tmp/app/helpers/index.d.ts +0 -5
  159. package/tmp/app/helpers/random-color.d.ts +0 -1
  160. package/tmp/app/helpers/random-string.d.ts +0 -1
  161. package/tmp/app/helpers/stress-test.d.ts +0 -1
  162. package/tmp/app/index.d.ts +0 -1
  163. package/tmp/extensions/compartments/index.d.ts +0 -4
  164. package/tmp/extensions/index.d.ts +0 -8
  165. package/tmp/extensions/init-extensions.d.ts +0 -14
  166. package/tmp/extensions/keymaps/bold-keymap.d.ts +0 -2
  167. package/tmp/extensions/keymaps/index.d.ts +0 -1
  168. package/tmp/extensions/keymaps/init-key-map.d.ts +0 -23
  169. package/tmp/extensions/keymaps/italic-key-map.d.ts +0 -2
  170. package/tmp/extensions/keymaps/line-through-key-map.d.ts +0 -2
  171. package/tmp/extensions/keymaps/underline-key-map.d.ts +0 -2
  172. package/tmp/extensions/listeners/get-change-event.d.ts +0 -6
  173. package/tmp/extensions/listeners/get-focus-event.d.ts +0 -8
  174. package/tmp/extensions/listeners/index.d.ts +0 -3
  175. package/tmp/extensions/listeners/init-listeners.d.ts +0 -4
  176. package/tmp/extensions/markdown/blockquote/blockquote-constants.d.ts +0 -3
  177. package/tmp/extensions/markdown/blockquote/blockquote-decoration.d.ts +0 -2
  178. package/tmp/extensions/markdown/blockquote/blockquote-widget.d.ts +0 -6
  179. package/tmp/extensions/markdown/blockquote/index.d.ts +0 -1
  180. package/tmp/extensions/markdown/bold/bold-constants.d.ts +0 -2
  181. package/tmp/extensions/markdown/bold/bold-decoration.d.ts +0 -2
  182. package/tmp/extensions/markdown/bold/index.d.ts +0 -1
  183. package/tmp/extensions/markdown/code/code-constants.d.ts +0 -3
  184. package/tmp/extensions/markdown/code/code-decoration.d.ts +0 -2
  185. package/tmp/extensions/markdown/code/code-widget.d.ts +0 -13
  186. package/tmp/extensions/markdown/code/index.d.ts +0 -1
  187. package/tmp/extensions/markdown/header/header-constants.d.ts +0 -3
  188. package/tmp/extensions/markdown/header/header-decoration.d.ts +0 -2
  189. package/tmp/extensions/markdown/header/index.d.ts +0 -1
  190. package/tmp/extensions/markdown/horizontal/horizontal-constants.d.ts +0 -1
  191. package/tmp/extensions/markdown/horizontal/horizontal-decoration.d.ts +0 -2
  192. package/tmp/extensions/markdown/horizontal/index.d.ts +0 -1
  193. package/tmp/extensions/markdown/image/image-constants.d.ts +0 -5
  194. package/tmp/extensions/markdown/image/image-decoration.d.ts +0 -2
  195. package/tmp/extensions/markdown/image/image-widget.d.ts +0 -14
  196. package/tmp/extensions/markdown/image/index.d.ts +0 -1
  197. package/tmp/extensions/markdown/index.d.ts +0 -2
  198. package/tmp/extensions/markdown/init-markdown.d.ts +0 -3
  199. package/tmp/extensions/markdown/italic/index.d.ts +0 -1
  200. package/tmp/extensions/markdown/italic/italic-constants.d.ts +0 -2
  201. package/tmp/extensions/markdown/italic/italic-decoration.d.ts +0 -2
  202. package/tmp/extensions/markdown/link/auto-link-decoration.d.ts +0 -2
  203. package/tmp/extensions/markdown/link/index.d.ts +0 -2
  204. package/tmp/extensions/markdown/link/link-constants.d.ts +0 -7
  205. package/tmp/extensions/markdown/link/link-decoration.d.ts +0 -2
  206. package/tmp/extensions/markdown/link/link-label-decoration.d.ts +0 -2
  207. package/tmp/extensions/markdown/link/link-widget.d.ts +0 -17
  208. package/tmp/extensions/markdown/list/index.d.ts +0 -1
  209. package/tmp/extensions/markdown/list/list-constants.d.ts +0 -4
  210. package/tmp/extensions/markdown/list/list-decoration.d.ts +0 -2
  211. package/tmp/extensions/markdown/list/list-widget.d.ts +0 -7
  212. package/tmp/extensions/markdown/markdown-decoration.d.ts +0 -5
  213. package/tmp/extensions/markdown/markdown-parser.d.ts +0 -2
  214. package/tmp/extensions/markdown/markdown-types.d.ts +0 -24
  215. package/tmp/extensions/markdown/mention/index.d.ts +0 -1
  216. package/tmp/extensions/markdown/mention/mention-constants.d.ts +0 -3
  217. package/tmp/extensions/markdown/mention/mention-decoration.d.ts +0 -2
  218. package/tmp/extensions/markdown/mention/mention-parser.d.ts +0 -2
  219. package/tmp/extensions/markdown/strike-through/index.d.ts +0 -1
  220. package/tmp/extensions/markdown/strike-through/strike-through-constants.d.ts +0 -1
  221. package/tmp/extensions/markdown/strike-through/strike-through-decoration.d.ts +0 -2
  222. package/tmp/extensions/markdown/todo/index.d.ts +0 -1
  223. package/tmp/extensions/markdown/todo/todo-constants.d.ts +0 -3
  224. package/tmp/extensions/markdown/todo/todo-decoration.d.ts +0 -2
  225. package/tmp/extensions/markdown/todo/todo-widget.d.ts +0 -11
  226. package/tmp/extensions/settings/index.d.ts +0 -1
  227. package/tmp/extensions/settings/init-settings.d.ts +0 -6
  228. package/tmp/extensions/theme/index.d.ts +0 -4
  229. package/tmp/extensions/theme/init-theme.d.ts +0 -3
  230. package/tmp/extensions/theme/theme-constants.d.ts +0 -14
  231. package/tmp/extensions/theme/theme-types.d.ts +0 -39
  232. package/tmp/extensions/theme/themes/get-dark-theme.d.ts +0 -2
  233. package/tmp/extensions/theme/themes/get-highlight-template.d.ts +0 -6
  234. package/tmp/extensions/theme/themes/get-light-theme.d.ts +0 -2
  235. package/tmp/extensions/theme/themes/get-theme-template.d.ts +0 -2
  236. package/tmp/extensions/theme/themes/index.d.ts +0 -2
  237. package/tmp/index.d.ts +0 -3
  238. package/tmp/lib/index.d.ts +0 -1
  239. package/tmp/lib/utils/copy-to-clipboard.d.ts +0 -1
  240. package/tmp/lib/utils/get-decoration.d.ts +0 -26
  241. package/tmp/lib/utils/index.d.ts +0 -6
  242. package/tmp/lib/utils/is-in-range.d.ts +0 -2
  243. package/tmp/lib/utils/is-range-overlap.d.ts +0 -1
  244. package/tmp/lib/utils/random-string.d.ts +0 -1
  245. package/tmp/lib/utils/tick.d.ts +0 -10
  246. package/tmp/module/Editor/Editor.d.ts +0 -18
  247. package/tmp/module/Editor/Editor.types.d.ts +0 -13
  248. package/tmp/module/Editor/index.d.ts +0 -3
  249. package/tmp/module/Editor/lib/index.d.ts +0 -1
  250. package/tmp/module/Editor/lib/init-editor-provider.d.ts +0 -9
  251. package/tmp/module/Editor/lib/init-editor-state.d.ts +0 -7
  252. package/tmp/module/Editor/lib/init-editor.d.ts +0 -7
  253. package/tmp/module/index.d.ts +0 -1
@@ -0,0 +1,51 @@
1
+ import { WidgetType } from '@codemirror/view';
2
+ import styles from '../styles.module.scss.js';
3
+
4
+ class TodoWidget extends WidgetType {
5
+ checked;
6
+ position;
7
+ view;
8
+ constructor(checked, position) {
9
+ super();
10
+ this.checked = checked;
11
+ this.position = position;
12
+ }
13
+ onClick(event) {
14
+ if (!this.view)
15
+ return;
16
+ event.stopPropagation();
17
+ event.preventDefault();
18
+ const target = event.target;
19
+ const change = {
20
+ from: this.position,
21
+ to: this.position + 1,
22
+ insert: this.checked ? " " : "x",
23
+ };
24
+ this.view.dispatch(this.view.state.update({ changes: change }));
25
+ this.checked = !this.checked;
26
+ target.checked = this.checked;
27
+ }
28
+ onBlock(event) {
29
+ event.stopPropagation();
30
+ event.preventDefault();
31
+ }
32
+ toDOM(view) {
33
+ const span = document.createElement("span");
34
+ span.classList.add(styles.todo);
35
+ this.view = view;
36
+ const checkbox = document.createElement("input");
37
+ checkbox.type = "checkbox";
38
+ checkbox.checked = this.checked;
39
+ checkbox.addEventListener("click", this.onBlock.bind(this));
40
+ checkbox.addEventListener("mousedown", this.onClick.bind(this));
41
+ span.appendChild(checkbox);
42
+ return span;
43
+ }
44
+ destroy(dom) {
45
+ dom.removeEventListener("click", this.onBlock.bind(this));
46
+ dom.removeEventListener("mousedown", this.onClick.bind(this));
47
+ }
48
+ }
49
+
50
+ export { TodoWidget };
51
+ //# sourceMappingURL=todo-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-widget.js","sources":["../../../../../src/extensions/markdown/todo/todo-widget.ts"],"sourcesContent":["import { type ChangeSpec } from \"@codemirror/state\";\nimport { type EditorView, WidgetType } from \"@codemirror/view\";\nimport styles from \"../styles.module.scss\";\n\nexport class TodoWidget extends WidgetType {\n view: EditorView | undefined;\n\n constructor(\n public checked: boolean,\n private readonly position: number,\n ) {\n super();\n }\n\n onClick(event: MouseEvent) {\n if (!this.view) return;\n event.stopPropagation();\n event.preventDefault();\n\n const target = event.target as HTMLInputElement;\n const change: ChangeSpec = {\n from: this.position,\n to: this.position + 1,\n insert: this.checked ? \" \" : \"x\",\n };\n\n this.view.dispatch(this.view.state.update({ changes: change }));\n\n this.checked = !this.checked;\n target.checked = this.checked;\n }\n\n onBlock(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n toDOM(view: EditorView): HTMLElement {\n const span = document.createElement(\"span\");\n span.classList.add(styles.todo);\n this.view = view;\n\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"checkbox\";\n checkbox.checked = this.checked;\n\n checkbox.addEventListener(\"click\", this.onBlock.bind(this));\n checkbox.addEventListener(\"mousedown\", this.onClick.bind(this));\n\n span.appendChild(checkbox);\n\n return span;\n }\n\n destroy(dom: HTMLElement): void {\n dom.removeEventListener(\"click\", this.onBlock.bind(this));\n dom.removeEventListener(\"mousedown\", this.onClick.bind(this));\n }\n}\n"],"names":[],"mappings":";;;AAIM,MAAO,UAAW,SAAQ,UAAU,CAAA;AAI/B,IAAA,OAAA;AACU,IAAA,QAAA;AAJnB,IAAA,IAAI;IAEJ,WACS,CAAA,OAAgB,EACN,QAAgB,EAAA;AAEjC,QAAA,KAAK,EAAE;QAHA,IAAO,CAAA,OAAA,GAAP,OAAO;QACG,IAAQ,CAAA,QAAA,GAAR,QAAQ;;AAK3B,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;QAChB,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,MAAM,MAAM,GAAe;YACzB,IAAI,EAAE,IAAI,CAAC,QAAQ;AACnB,YAAA,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,GAAG;SACjC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAE/D,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;AAC5B,QAAA,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;;AAG/B,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;;AAGxB,IAAA,KAAK,CAAC,IAAgB,EAAA;QACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAEhB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAChD,QAAA,QAAQ,CAAC,IAAI,GAAG,UAAU;AAC1B,QAAA,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAE/B,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE/D,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAE1B,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,CAAC,GAAgB,EAAA;AACtB,QAAA,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,QAAA,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAEhE;;;;"}
@@ -0,0 +1,19 @@
1
+ import { history } from '@codemirror/commands';
2
+ import { drawSelection, EditorView } from '@codemirror/view';
3
+ import { ReadonlyCompartment, VimModeCompartment } from '../compartments/index.js';
4
+
5
+ async function InitSettings({ readonly, vimMode, }) {
6
+ let vimExtension = [];
7
+ if (vimMode) {
8
+ const { vim } = await import('@replit/codemirror-vim');
9
+ vimExtension = [vim({ status: true }), drawSelection()];
10
+ }
11
+ return [
12
+ ReadonlyCompartment.of(EditorView.editable.of(!readonly)),
13
+ VimModeCompartment.of(vimExtension),
14
+ history(),
15
+ ];
16
+ }
17
+
18
+ export { InitSettings };
19
+ //# sourceMappingURL=init-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-settings.js","sources":["../../../../src/extensions/settings/init-settings.ts"],"sourcesContent":["import { history } from \"@codemirror/commands\";\nimport { type Extension } from \"@codemirror/state\";\nimport { EditorView, drawSelection } from \"@codemirror/view\";\nimport { ReadonlyCompartment, VimModeCompartment } from \"../compartments\";\n\nexport type InitSettingsOptions = {\n readonly?: boolean;\n vimMode?: boolean;\n};\n\nexport async function InitSettings({\n readonly,\n vimMode,\n}: InitSettingsOptions): Promise<Extension[]> {\n let vimExtension: Extension = [];\n if (vimMode) {\n const { vim } = await import(\"@replit/codemirror-vim\");\n vimExtension = [vim({ status: true }), drawSelection()];\n }\n\n return [\n ReadonlyCompartment.of(EditorView.editable.of(!readonly)),\n VimModeCompartment.of(vimExtension),\n history(),\n ];\n}\n"],"names":[],"mappings":";;;;AAUO,eAAe,YAAY,CAAC,EACjC,QAAQ,EACR,OAAO,GACa,EAAA;IACpB,IAAI,YAAY,GAAc,EAAE;IAChC,IAAI,OAAO,EAAE;QACX,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,wBAAwB,CAAC;AACtD,QAAA,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC;;IAGzD,OAAO;AACL,QAAA,mBAAmB,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,kBAAkB,CAAC,EAAE,CAAC,YAAY,CAAC;AACnC,QAAA,OAAO,EAAE;KACV;AACH;;;;"}
@@ -0,0 +1,15 @@
1
+ import { EditorView } from '@codemirror/view';
2
+ import { ThemeCompartment } from '../compartments/index.js';
3
+ import { getDarkTheme } from './themes/get-dark-theme.js';
4
+ import { getLightTheme } from './themes/get-light-theme.js';
5
+
6
+ const initTheme = (options) => {
7
+ const extensions = [
8
+ EditorView.lineWrapping,
9
+ ThemeCompartment.of(options.theme === "dark" ? getDarkTheme(options) : getLightTheme(options)),
10
+ ];
11
+ return extensions;
12
+ };
13
+
14
+ export { initTheme };
15
+ //# sourceMappingURL=init-theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-theme.js","sources":["../../../../src/extensions/theme/init-theme.ts"],"sourcesContent":["import type { Extension } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { ThemeCompartment } from \"../compartments\";\nimport type { InitThemeOptions } from \"./theme-types\";\nimport { getDarkTheme, getLightTheme } from \"./themes\";\n\nexport const initTheme = (options: InitThemeOptions): Extension => {\n const extensions: Extension[] = [\n EditorView.lineWrapping,\n ThemeCompartment.of(options.theme === \"dark\" ? getDarkTheme(options) : getLightTheme(options)),\n ];\n\n return extensions;\n};\n"],"names":[],"mappings":";;;;;AAMa,MAAA,SAAS,GAAG,CAAC,OAAyB,KAAe;AAChE,IAAA,MAAM,UAAU,GAAgB;AAC9B,QAAA,UAAU,CAAC,YAAY;QACvB,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;KAC/F;AAED,IAAA,OAAO,UAAU;AACnB;;;;"}
@@ -0,0 +1,17 @@
1
+ const CLASSES = {
2
+ listCommon: "cm-list-common",
3
+ code: "cm-code",
4
+ codeButton: "cm-code-button",
5
+ codeButtonSuccess: "cm-code-button-success",
6
+ codeButtonFail: "cm-code-button-fail",
7
+ codeButtonPending: "cm-code-button-pending",
8
+ codeButtonSpan: "cm-code-span",
9
+ horizontal: "cm-horizontal",
10
+ blockquote: "cm-blockquote",
11
+ blockquoteInner: "cm-blockquote-inner",
12
+ link: "cm-link",
13
+ mention: "cm-mention",
14
+ };
15
+
16
+ export { CLASSES };
17
+ //# sourceMappingURL=theme-constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-constants.js","sources":["../../../../src/extensions/theme/theme-constants.ts"],"sourcesContent":["export const CLASSES = {\n listCommon: \"cm-list-common\",\n code: \"cm-code\",\n codeButton: \"cm-code-button\",\n codeButtonSuccess: \"cm-code-button-success\",\n codeButtonFail: \"cm-code-button-fail\",\n codeButtonPending: \"cm-code-button-pending\",\n codeButtonSpan: \"cm-code-span\",\n horizontal: \"cm-horizontal\",\n blockquote: \"cm-blockquote\",\n blockquoteInner: \"cm-blockquote-inner\",\n link: \"cm-link\",\n mention: \"cm-mention\",\n};\n"],"names":[],"mappings":"AAAa,MAAA,OAAO,GAAG;AACrB,IAAA,UAAU,EAAE,gBAAgB;AAC5B,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,UAAU,EAAE,gBAAgB;AAC5B,IAAA,iBAAiB,EAAE,wBAAwB;AAC3C,IAAA,cAAc,EAAE,qBAAqB;AACrC,IAAA,iBAAiB,EAAE,wBAAwB;AAC3C,IAAA,cAAc,EAAE,cAAc;AAC9B,IAAA,UAAU,EAAE,eAAe;AAC3B,IAAA,UAAU,EAAE,eAAe;AAC3B,IAAA,eAAe,EAAE,qBAAqB;AACtC,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,OAAO,EAAE,YAAY;;;;;"}
@@ -0,0 +1,40 @@
1
+ import { getHighlightTemplate } from './get-highlight-template.js';
2
+ import { getThemeTemplate } from './get-theme-template.js';
3
+
4
+ const HIGHLIGHT_CONFIG = {
5
+ keyword: "#f97583",
6
+ variable: "#ffab70",
7
+ function: "#79b8ff",
8
+ string: "#9ecbff",
9
+ constant: "#79b8ff",
10
+ type: "#79b8ff",
11
+ class: "#b392f0",
12
+ number: "#79b8ff",
13
+ comment: "#6a737d",
14
+ heading: "#79b8ff",
15
+ invalid: "#f97583",
16
+ regexp: "#9ecbff",
17
+ };
18
+ const THEME_CONFIG = {
19
+ background: "#2E3235",
20
+ blockquoteColor: "#8A5CF5", // #6A8695
21
+ codeBackground: "#24292e",
22
+ codeButtonBackground: "#434C54FF",
23
+ codeButtonColor: "#DDDDDD",
24
+ codeColor: "#DDDDDD",
25
+ color: "#DDDDDD",
26
+ fontFamily: "Montserrat",
27
+ horizontalColor: "#DDDDDD",
28
+ linkColor: "#8A5CF5",
29
+ mentionColor: "#8A5CF5",
30
+ vimSelection: "#1A1919FF",
31
+ vimSelectionFocused: "#2E4B4BFF",
32
+ };
33
+ function getDarkTheme({ dark }) {
34
+ const highlightConfig = { ...HIGHLIGHT_CONFIG, ...(dark?.highlightConfig || {}) };
35
+ const themeConfig = { ...THEME_CONFIG, ...(dark?.themeConfig || {}) };
36
+ return [getThemeTemplate(true, themeConfig), getHighlightTemplate(highlightConfig)];
37
+ }
38
+
39
+ export { getDarkTheme };
40
+ //# sourceMappingURL=get-dark-theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-dark-theme.js","sources":["../../../../../src/extensions/theme/themes/get-dark-theme.ts"],"sourcesContent":["import { type HighlightConfig, type InitThemeOptions, type ThemeConfig } from \"../theme-types\";\nimport { getHighlightTemplate } from \"./get-highlight-template\";\nimport { getThemeTemplate } from \"./get-theme-template\";\n\nconst HIGHLIGHT_CONFIG: Required<HighlightConfig> = {\n keyword: \"#f97583\",\n variable: \"#ffab70\",\n function: \"#79b8ff\",\n string: \"#9ecbff\",\n constant: \"#79b8ff\",\n type: \"#79b8ff\",\n class: \"#b392f0\",\n number: \"#79b8ff\",\n comment: \"#6a737d\",\n heading: \"#79b8ff\",\n invalid: \"#f97583\",\n regexp: \"#9ecbff\",\n};\n\nconst THEME_CONFIG: Required<ThemeConfig> = {\n background: \"#2E3235\",\n blockquoteColor: \"#8A5CF5\", // #6A8695\n codeBackground: \"#24292e\",\n codeButtonBackground: \"#434C54FF\",\n codeButtonColor: \"#DDDDDD\",\n codeColor: \"#DDDDDD\",\n color: \"#DDDDDD\",\n fontFamily: \"Montserrat\",\n horizontalColor: \"#DDDDDD\",\n linkColor: \"#8A5CF5\",\n mentionColor: \"#8A5CF5\",\n vimSelection: \"#1A1919FF\",\n vimSelectionFocused: \"#2E4B4BFF\",\n};\n\nexport function getDarkTheme({ dark }: InitThemeOptions) {\n const highlightConfig = { ...HIGHLIGHT_CONFIG, ...(dark?.highlightConfig || {}) };\n const themeConfig = { ...THEME_CONFIG, ...(dark?.themeConfig || {}) };\n\n return [getThemeTemplate(true, themeConfig), getHighlightTemplate(highlightConfig)];\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,gBAAgB,GAA8B;AAClD,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE,SAAS;CAClB;AAED,MAAM,YAAY,GAA0B;AAC1C,IAAA,UAAU,EAAE,SAAS;IACrB,eAAe,EAAE,SAAS;AAC1B,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,oBAAoB,EAAE,WAAW;AACjC,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,YAAY,EAAE,WAAW;AACzB,IAAA,mBAAmB,EAAE,WAAW;CACjC;AAEe,SAAA,YAAY,CAAC,EAAE,IAAI,EAAoB,EAAA;AACrD,IAAA,MAAM,eAAe,GAAG,EAAE,GAAG,gBAAgB,EAAE,IAAI,IAAI,EAAE,eAAe,IAAI,EAAE,CAAC,EAAE;AACjF,IAAA,MAAM,WAAW,GAAG,EAAE,GAAG,YAAY,EAAE,IAAI,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,EAAE;AAErE,IAAA,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC;AACrF;;;;"}
@@ -0,0 +1,35 @@
1
+ import { syntaxHighlighting, HighlightStyle } from '@codemirror/language';
2
+ import { tags } from '@lezer/highlight';
3
+
4
+ /**
5
+ * t.processingInstruction, t.meta - # () []
6
+ * t.url, t.link - links
7
+ */
8
+ function getHighlightTemplate(config) {
9
+ return syntaxHighlighting(HighlightStyle.define([
10
+ { tag: tags.keyword, color: config.keyword },
11
+ { tag: [tags.name, tags.deleted, tags.character, tags.macroName], color: config.variable },
12
+ { tag: [tags.propertyName], color: config.function },
13
+ {
14
+ tag: [tags.string, tags.inserted, tags.special(tags.string)],
15
+ color: config.string,
16
+ },
17
+ { tag: [tags.function(tags.variableName), tags.labelName], color: config.function },
18
+ { tag: [tags.color, tags.constant(tags.name), tags.standard(tags.name)], color: config.constant },
19
+ { tag: [tags.definition(tags.name), tags.separator], color: config.variable },
20
+ { tag: [tags.className], color: config.class },
21
+ {
22
+ tag: [tags.number, tags.changed, tags.annotation, tags.modifier, tags.self, tags.namespace],
23
+ color: config.number,
24
+ },
25
+ { tag: [tags.typeName], color: config.type, fontStyle: config.type },
26
+ { tag: [tags.operator, tags.operatorKeyword], color: config.keyword },
27
+ { tag: [tags.escape, tags.regexp], color: config.regexp },
28
+ { tag: [tags.comment], color: config.comment },
29
+ { tag: [tags.atom, tags.bool, tags.special(tags.variableName)], color: config.variable },
30
+ { tag: tags.invalid, color: config.invalid },
31
+ ]));
32
+ }
33
+
34
+ export { getHighlightTemplate };
35
+ //# sourceMappingURL=get-highlight-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-highlight-template.js","sources":["../../../../../src/extensions/theme/themes/get-highlight-template.ts"],"sourcesContent":["import { HighlightStyle, syntaxHighlighting } from \"@codemirror/language\";\nimport { tags as t } from \"@lezer/highlight\";\nimport type { HighlightConfig } from \"../theme-types\";\n\n/**\n * t.processingInstruction, t.meta - # () []\n * t.url, t.link - links\n */\n\nexport function getHighlightTemplate(config: Required<HighlightConfig>) {\n return syntaxHighlighting(\n HighlightStyle.define([\n { tag: t.keyword, color: config.keyword },\n { tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable },\n { tag: [t.propertyName], color: config.function },\n {\n tag: [t.string, t.inserted, t.special(t.string)],\n color: config.string,\n },\n { tag: [t.function(t.variableName), t.labelName], color: config.function },\n { tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant },\n { tag: [t.definition(t.name), t.separator], color: config.variable },\n { tag: [t.className], color: config.class },\n {\n tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace],\n color: config.number,\n },\n { tag: [t.typeName], color: config.type, fontStyle: config.type },\n { tag: [t.operator, t.operatorKeyword], color: config.keyword },\n { tag: [t.escape, t.regexp], color: config.regexp },\n { tag: [t.comment], color: config.comment },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable },\n { tag: t.invalid, color: config.invalid },\n ]),\n );\n}\n"],"names":["t"],"mappings":";;;AAIA;;;AAGG;AAEG,SAAU,oBAAoB,CAAC,MAAiC,EAAA;AACpE,IAAA,OAAO,kBAAkB,CACvB,cAAc,CAAC,MAAM,CAAC;QACpB,EAAE,GAAG,EAAEA,IAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;QACzC,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,IAAI,EAAEA,IAAC,CAAC,OAAO,EAAEA,IAAC,CAAC,SAAS,EAAEA,IAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;AAC9E,QAAA,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;AACjD,QAAA;AACE,YAAA,GAAG,EAAE,CAACA,IAAC,CAAC,MAAM,EAAEA,IAAC,CAAC,QAAQ,EAAEA,IAAC,CAAC,OAAO,CAACA,IAAC,CAAC,MAAM,CAAC,CAAC;YAChD,KAAK,EAAE,MAAM,CAAC,MAAM;AACrB,SAAA;QACD,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,QAAQ,CAACA,IAAC,CAAC,YAAY,CAAC,EAAEA,IAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;AAC1E,QAAA,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,KAAK,EAAEA,IAAC,CAAC,QAAQ,CAACA,IAAC,CAAC,IAAI,CAAC,EAAEA,IAAC,CAAC,QAAQ,CAACA,IAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;QAClF,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,UAAU,CAACA,IAAC,CAAC,IAAI,CAAC,EAAEA,IAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;AACpE,QAAA,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;AAC3C,QAAA;YACE,GAAG,EAAE,CAACA,IAAC,CAAC,MAAM,EAAEA,IAAC,CAAC,OAAO,EAAEA,IAAC,CAAC,UAAU,EAAEA,IAAC,CAAC,QAAQ,EAAEA,IAAC,CAAC,IAAI,EAAEA,IAAC,CAAC,SAAS,CAAC;YACzE,KAAK,EAAE,MAAM,CAAC,MAAM;AACrB,SAAA;AACD,QAAA,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE;AACjE,QAAA,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,QAAQ,EAAEA,IAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;AAC/D,QAAA,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,MAAM,EAAEA,IAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;AACnD,QAAA,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;QAC3C,EAAE,GAAG,EAAE,CAACA,IAAC,CAAC,IAAI,EAAEA,IAAC,CAAC,IAAI,EAAEA,IAAC,CAAC,OAAO,CAACA,IAAC,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;QAC5E,EAAE,GAAG,EAAEA,IAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;AAC1C,KAAA,CAAC,CACH;AACH;;;;"}
@@ -0,0 +1,40 @@
1
+ import { getHighlightTemplate } from './get-highlight-template.js';
2
+ import { getThemeTemplate } from './get-theme-template.js';
3
+
4
+ const HIGHLIGHT_CONFIG = {
5
+ keyword: "#9854f1",
6
+ variable: "#3760bf",
7
+ function: "#2e7de9",
8
+ string: "#587539",
9
+ constant: "#9854f1",
10
+ type: "#07879d",
11
+ class: "#3760bf",
12
+ number: "#b15c00",
13
+ comment: "#9da3c2",
14
+ heading: "#006a83",
15
+ invalid: "#ff3e64",
16
+ regexp: "#2e5857",
17
+ };
18
+ const THEME_CONFIG = {
19
+ background: "transparent",
20
+ blockquoteColor: "#8A5CF5", // #6A8695
21
+ codeBackground: "#e1e2e7",
22
+ codeButtonBackground: "#CCCCCDFF",
23
+ codeButtonColor: "#000000",
24
+ codeColor: "#000000",
25
+ color: "#000000",
26
+ fontFamily: "Montserrat",
27
+ horizontalColor: "#000000",
28
+ linkColor: "#8A5CF5",
29
+ mentionColor: "#8A5CF5",
30
+ vimSelection: "#d9d9d9",
31
+ vimSelectionFocused: "#d7d4f0",
32
+ };
33
+ function getLightTheme({ light }) {
34
+ const highlightConfig = { ...HIGHLIGHT_CONFIG, ...(light?.highlightConfig || {}) };
35
+ const themeConfig = { ...THEME_CONFIG, ...(light?.themeConfig || {}) };
36
+ return [getThemeTemplate(false, themeConfig), getHighlightTemplate(highlightConfig)];
37
+ }
38
+
39
+ export { getLightTheme };
40
+ //# sourceMappingURL=get-light-theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-light-theme.js","sources":["../../../../../src/extensions/theme/themes/get-light-theme.ts"],"sourcesContent":["import { type HighlightConfig, type InitThemeOptions, type ThemeConfig } from \"../theme-types\";\nimport { getHighlightTemplate } from \"./get-highlight-template\";\nimport { getThemeTemplate } from \"./get-theme-template\";\n\nconst HIGHLIGHT_CONFIG: Required<HighlightConfig> = {\n keyword: \"#9854f1\",\n variable: \"#3760bf\",\n function: \"#2e7de9\",\n string: \"#587539\",\n constant: \"#9854f1\",\n type: \"#07879d\",\n class: \"#3760bf\",\n number: \"#b15c00\",\n comment: \"#9da3c2\",\n heading: \"#006a83\",\n invalid: \"#ff3e64\",\n regexp: \"#2e5857\",\n};\n\nconst THEME_CONFIG: Required<ThemeConfig> = {\n background: \"transparent\",\n blockquoteColor: \"#8A5CF5\", // #6A8695\n codeBackground: \"#e1e2e7\",\n codeButtonBackground: \"#CCCCCDFF\",\n codeButtonColor: \"#000000\",\n codeColor: \"#000000\",\n color: \"#000000\",\n fontFamily: \"Montserrat\",\n horizontalColor: \"#000000\",\n linkColor: \"#8A5CF5\",\n mentionColor: \"#8A5CF5\",\n vimSelection: \"#d9d9d9\",\n vimSelectionFocused: \"#d7d4f0\",\n};\n\nexport function getLightTheme({ light }: InitThemeOptions) {\n const highlightConfig = { ...HIGHLIGHT_CONFIG, ...(light?.highlightConfig || {}) };\n const themeConfig = { ...THEME_CONFIG, ...(light?.themeConfig || {}) };\n\n return [getThemeTemplate(false, themeConfig), getHighlightTemplate(highlightConfig)];\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,gBAAgB,GAA8B;AAClD,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE,SAAS;CAClB;AAED,MAAM,YAAY,GAA0B;AAC1C,IAAA,UAAU,EAAE,aAAa;IACzB,eAAe,EAAE,SAAS;AAC1B,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,oBAAoB,EAAE,WAAW;AACjC,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,mBAAmB,EAAE,SAAS;CAC/B;AAEe,SAAA,aAAa,CAAC,EAAE,KAAK,EAAoB,EAAA;AACvD,IAAA,MAAM,eAAe,GAAG,EAAE,GAAG,gBAAgB,EAAE,IAAI,KAAK,EAAE,eAAe,IAAI,EAAE,CAAC,EAAE;AAClF,IAAA,MAAM,WAAW,GAAG,EAAE,GAAG,YAAY,EAAE,IAAI,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC,EAAE;AAEtE,IAAA,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC;AACtF;;;;"}
@@ -0,0 +1,69 @@
1
+ import { EditorView } from '@codemirror/view';
2
+ import { CLASSES } from '../theme-constants.js';
3
+
4
+ function getThemeTemplate(dark, config) {
5
+ return EditorView.theme({
6
+ "&": {
7
+ color: config.color,
8
+ backgroundColor: config.background,
9
+ },
10
+ ".cm-content": {
11
+ fontFamily: config.fontFamily || "Montserrat",
12
+ },
13
+ "&.cm-focused > .cm-scroller > .cm-selectionLayer > .cm-selectionBackground": {
14
+ background: config.vimSelectionFocused,
15
+ },
16
+ "& .cm-selectionBackground": {
17
+ background: config.vimSelection,
18
+ },
19
+ "&.cm-editor.cm-focused": { outline: "none" },
20
+ "&.cm-editor": {
21
+ height: "100%",
22
+ width: "100%",
23
+ },
24
+ [`.${CLASSES.listCommon}:after`]: {
25
+ background: config.color,
26
+ },
27
+ [`.${CLASSES.code}`]: {
28
+ background: config.codeBackground,
29
+ color: config.codeColor,
30
+ },
31
+ [`.${CLASSES.horizontal}`]: {
32
+ borderBottomColor: config.horizontalColor,
33
+ },
34
+ [`.${CLASSES.link}`]: {
35
+ color: config.linkColor,
36
+ },
37
+ [`.${CLASSES.blockquote}`]: {
38
+ borderLeftColor: config.blockquoteColor,
39
+ },
40
+ [`.${CLASSES.blockquoteInner}:before`]: {
41
+ borderLeftColor: config.blockquoteColor,
42
+ },
43
+ [`.${CLASSES.codeButton}`]: {
44
+ color: config.codeButtonColor,
45
+ },
46
+ [`.${CLASSES.codeButton}:hover`]: {
47
+ background: config.codeButtonBackground,
48
+ },
49
+ [`.${CLASSES.codeButtonSuccess}:after`]: {
50
+ borderColor: config.codeButtonColor,
51
+ },
52
+ [`.${CLASSES.codeButtonFail}:after`]: {
53
+ background: config.codeButtonColor,
54
+ },
55
+ [`.${CLASSES.codeButtonFail}:before`]: {
56
+ background: config.codeButtonColor,
57
+ },
58
+ [`.${CLASSES.codeButtonPending}:before`]: {
59
+ borderColor: config.codeBackground,
60
+ borderTopColor: config.codeButtonColor,
61
+ },
62
+ [`.${CLASSES.mention}`]: {
63
+ color: config.mentionColor,
64
+ },
65
+ }, { dark });
66
+ }
67
+
68
+ export { getThemeTemplate };
69
+ //# sourceMappingURL=get-theme-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-theme-template.js","sources":["../../../../../src/extensions/theme/themes/get-theme-template.ts"],"sourcesContent":["import { EditorView } from \"@codemirror/view\";\nimport { CLASSES } from \"../theme-constants\";\nimport type { ThemeConfig } from \"../theme-types\";\n\nexport function getThemeTemplate(dark: boolean, config: Required<ThemeConfig>) {\n return EditorView.theme(\n {\n \"&\": {\n color: config.color,\n backgroundColor: config.background,\n },\n \".cm-content\": {\n fontFamily: config.fontFamily || \"Montserrat\",\n },\n \"&.cm-focused > .cm-scroller > .cm-selectionLayer > .cm-selectionBackground\": {\n background: config.vimSelectionFocused,\n },\n \"& .cm-selectionBackground\": {\n background: config.vimSelection,\n },\n \"&.cm-editor.cm-focused\": { outline: \"none\" },\n \"&.cm-editor\": {\n height: \"100%\",\n width: \"100%\",\n },\n [`.${CLASSES.listCommon}:after`]: {\n background: config.color,\n },\n [`.${CLASSES.code}`]: {\n background: config.codeBackground,\n color: config.codeColor,\n },\n [`.${CLASSES.horizontal}`]: {\n borderBottomColor: config.horizontalColor,\n },\n [`.${CLASSES.link}`]: {\n color: config.linkColor,\n },\n [`.${CLASSES.blockquote}`]: {\n borderLeftColor: config.blockquoteColor,\n },\n [`.${CLASSES.blockquoteInner}:before`]: {\n borderLeftColor: config.blockquoteColor,\n },\n [`.${CLASSES.codeButton}`]: {\n color: config.codeButtonColor,\n },\n [`.${CLASSES.codeButton}:hover`]: {\n background: config.codeButtonBackground,\n },\n [`.${CLASSES.codeButtonSuccess}:after`]: {\n borderColor: config.codeButtonColor,\n },\n [`.${CLASSES.codeButtonFail}:after`]: {\n background: config.codeButtonColor,\n },\n [`.${CLASSES.codeButtonFail}:before`]: {\n background: config.codeButtonColor,\n },\n [`.${CLASSES.codeButtonPending}:before`]: {\n borderColor: config.codeBackground,\n borderTopColor: config.codeButtonColor,\n },\n [`.${CLASSES.mention}`]: {\n color: config.mentionColor,\n },\n },\n { dark },\n );\n}\n"],"names":[],"mappings":";;;AAIgB,SAAA,gBAAgB,CAAC,IAAa,EAAE,MAA6B,EAAA;IAC3E,OAAO,UAAU,CAAC,KAAK,CACrB;AACE,QAAA,GAAG,EAAE;YACH,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,eAAe,EAAE,MAAM,CAAC,UAAU;AACnC,SAAA;AACD,QAAA,aAAa,EAAE;AACb,YAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,YAAY;AAC9C,SAAA;AACD,QAAA,4EAA4E,EAAE;YAC5E,UAAU,EAAE,MAAM,CAAC,mBAAmB;AACvC,SAAA;AACD,QAAA,2BAA2B,EAAE;YAC3B,UAAU,EAAE,MAAM,CAAC,YAAY;AAChC,SAAA;AACD,QAAA,wBAAwB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AAC7C,QAAA,aAAa,EAAE;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,MAAM;AACd,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,UAAU,CAAA,MAAA,CAAQ,GAAG;YAChC,UAAU,EAAE,MAAM,CAAC,KAAK;AACzB,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,IAAI,CAAA,CAAE,GAAG;YACpB,UAAU,EAAE,MAAM,CAAC,cAAc;YACjC,KAAK,EAAE,MAAM,CAAC,SAAS;AACxB,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,UAAU,CAAA,CAAE,GAAG;YAC1B,iBAAiB,EAAE,MAAM,CAAC,eAAe;AAC1C,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,IAAI,CAAA,CAAE,GAAG;YACpB,KAAK,EAAE,MAAM,CAAC,SAAS;AACxB,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,UAAU,CAAA,CAAE,GAAG;YAC1B,eAAe,EAAE,MAAM,CAAC,eAAe;AACxC,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,eAAe,CAAA,OAAA,CAAS,GAAG;YACtC,eAAe,EAAE,MAAM,CAAC,eAAe;AACxC,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,UAAU,CAAA,CAAE,GAAG;YAC1B,KAAK,EAAE,MAAM,CAAC,eAAe;AAC9B,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,UAAU,CAAA,MAAA,CAAQ,GAAG;YAChC,UAAU,EAAE,MAAM,CAAC,oBAAoB;AACxC,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAA,MAAA,CAAQ,GAAG;YACvC,WAAW,EAAE,MAAM,CAAC,eAAe;AACpC,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,cAAc,CAAA,MAAA,CAAQ,GAAG;YACpC,UAAU,EAAE,MAAM,CAAC,eAAe;AACnC,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,cAAc,CAAA,OAAA,CAAS,GAAG;YACrC,UAAU,EAAE,MAAM,CAAC,eAAe;AACnC,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAA,OAAA,CAAS,GAAG;YACxC,WAAW,EAAE,MAAM,CAAC,cAAc;YAClC,cAAc,EAAE,MAAM,CAAC,eAAe;AACvC,SAAA;AACD,QAAA,CAAC,IAAI,OAAO,CAAC,OAAO,CAAA,CAAE,GAAG;YACvB,KAAK,EAAE,MAAM,CAAC,YAAY;AAC3B,SAAA;AACF,KAAA,EACD,EAAE,IAAI,EAAE,CACT;AACH;;;;"}
package/lib/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{ai as Editor}from"./editor-CLyV23xt.js";
1
+ export { Editor } from './module/Editor/Editor.js';
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,35 @@
1
+ function copyToClipboard(content) {
2
+ if (navigator.clipboard && window.isSecureContext) {
3
+ return navigator.clipboard.writeText(content);
4
+ }
5
+ return fallbackCopyTextToClipboard(content);
6
+ }
7
+ function fallbackCopyTextToClipboard(content) {
8
+ const textArea = document.createElement("textarea");
9
+ textArea.value = content;
10
+ textArea.style.top = "0";
11
+ textArea.style.left = "0";
12
+ textArea.style.opacity = "0";
13
+ textArea.style.position = "fixed";
14
+ document.body.appendChild(textArea);
15
+ textArea.focus();
16
+ textArea.select();
17
+ return new Promise((resolve, reject) => {
18
+ try {
19
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
20
+ if (document.execCommand("copy"))
21
+ resolve();
22
+ else
23
+ reject();
24
+ }
25
+ catch {
26
+ reject();
27
+ }
28
+ finally {
29
+ document.body.removeChild(textArea);
30
+ }
31
+ });
32
+ }
33
+
34
+ export { copyToClipboard };
35
+ //# sourceMappingURL=copy-to-clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-to-clipboard.js","sources":["../../../../src/lib/utils/copy-to-clipboard.ts"],"sourcesContent":["export function copyToClipboard(content: string): Promise<void> {\n if (navigator.clipboard && window.isSecureContext) {\n return navigator.clipboard.writeText(content);\n }\n\n return fallbackCopyTextToClipboard(content);\n}\n\nfunction fallbackCopyTextToClipboard(content: string) {\n const textArea = document.createElement(\"textarea\");\n textArea.value = content;\n\n textArea.style.top = \"0\";\n textArea.style.left = \"0\";\n textArea.style.opacity = \"0\";\n textArea.style.position = \"fixed\";\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n return new Promise<void>((resolve, reject) => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (document.execCommand(\"copy\")) resolve();\n else reject();\n } catch {\n reject();\n } finally {\n document.body.removeChild(textArea);\n }\n });\n}\n"],"names":[],"mappings":"AAAM,SAAU,eAAe,CAAC,OAAe,EAAA;IAC7C,IAAI,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,eAAe,EAAE;QACjD,OAAO,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;;AAG/C,IAAA,OAAO,2BAA2B,CAAC,OAAO,CAAC;AAC7C;AAEA,SAAS,2BAA2B,CAAC,OAAe,EAAA;IAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,IAAA,QAAQ,CAAC,KAAK,GAAG,OAAO;AAExB,IAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;AACxB,IAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;AACzB,IAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AAC5B,IAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAEjC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE;IAChB,QAAQ,CAAC,MAAM,EAAE;IAEjB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,QAAA,IAAI;;AAEF,YAAA,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,EAAE;;AACtC,gBAAA,MAAM,EAAE;;AACb,QAAA,MAAM;AACN,YAAA,MAAM,EAAE;;gBACA;AACR,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;;AAEvC,KAAC,CAAC;AACJ;;;;"}
@@ -0,0 +1,24 @@
1
+ import { Decoration } from '@codemirror/view';
2
+
3
+ function getLineDecoration({ style, range }) {
4
+ return Decoration.line({
5
+ class: style,
6
+ }).range(range[0], range[1]);
7
+ }
8
+ function getMarkDecoration({ range, style }) {
9
+ return Decoration.mark({
10
+ class: style,
11
+ }).range(range[0], range[1]);
12
+ }
13
+ function getHideDecoration({ range }) {
14
+ return Decoration.replace({}).range(range[0], range[1]);
15
+ }
16
+ function getReplaceDecoration({ range, widget }) {
17
+ return Decoration.replace({ widget }).range(range[0], range[1]);
18
+ }
19
+ function getWidgetDecorationOptions({ widget, range }) {
20
+ return Decoration.widget({ widget, side: 1 }).range(range[0], range[1]);
21
+ }
22
+
23
+ export { getHideDecoration, getLineDecoration, getMarkDecoration, getReplaceDecoration, getWidgetDecorationOptions };
24
+ //# sourceMappingURL=get-decoration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-decoration.js","sources":["../../../../src/lib/utils/get-decoration.ts"],"sourcesContent":["import { Decoration, type WidgetType } from \"@codemirror/view\";\n\ntype GetLineDecorationOptions = {\n style: string;\n range: [number, number?];\n};\nexport function getLineDecoration({ style, range }: GetLineDecorationOptions) {\n return Decoration.line({\n class: style,\n }).range(range[0], range[1]);\n}\n\ntype GetMarkDecorationOptions = {\n style: string;\n range: [number, number];\n};\nexport function getMarkDecoration({ range, style }: GetMarkDecorationOptions) {\n return Decoration.mark({\n class: style,\n }).range(range[0], range[1]);\n}\n\ntype GetHideDecorationOptions = {\n range: [number, number];\n};\nexport function getHideDecoration({ range }: GetHideDecorationOptions) {\n return Decoration.replace({}).range(range[0], range[1]);\n}\n\ntype GetReplaceDecorationOptions = {\n range: [number, number?];\n widget: WidgetType;\n};\nexport function getReplaceDecoration({ range, widget }: GetReplaceDecorationOptions) {\n return Decoration.replace({ widget }).range(range[0], range[1]);\n}\n\ntype GetWidgetDecorationOptions = {\n widget: WidgetType;\n range: [number, number?];\n};\nexport function getWidgetDecorationOptions({ widget, range }: GetWidgetDecorationOptions) {\n return Decoration.widget({ widget, side: 1 }).range(range[0], range[1]);\n}\n"],"names":[],"mappings":";;SAMgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,EAA4B,EAAA;IAC1E,OAAO,UAAU,CAAC,IAAI,CAAC;AACrB,QAAA,KAAK,EAAE,KAAK;AACb,KAAA,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B;SAMgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,EAA4B,EAAA;IAC1E,OAAO,UAAU,CAAC,IAAI,CAAC;AACrB,QAAA,KAAK,EAAE,KAAK;AACb,KAAA,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B;AAKgB,SAAA,iBAAiB,CAAC,EAAE,KAAK,EAA4B,EAAA;AACnE,IAAA,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD;SAMgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,EAA+B,EAAA;IACjF,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE;SAMgB,0BAA0B,CAAC,EAAE,MAAM,EAAE,KAAK,EAA8B,EAAA;IACtF,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE;;;;"}
@@ -0,0 +1,8 @@
1
+ import { isRangeOverlap } from './is-range-overlap.js';
2
+
3
+ function isInRange(ranges, text) {
4
+ return ranges.some((range) => isRangeOverlap([range.from, range.to], text));
5
+ }
6
+
7
+ export { isInRange };
8
+ //# sourceMappingURL=is-in-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-in-range.js","sources":["../../../../src/lib/utils/is-in-range.ts"],"sourcesContent":["import type { SelectionRange } from \"@codemirror/state\";\nimport { isRangeOverlap } from \"./is-range-overlap\";\n\nexport function isInRange(ranges: readonly SelectionRange[], text: [number, number]) {\n return ranges.some((range) => isRangeOverlap([range.from, range.to], text));\n}\n"],"names":[],"mappings":";;AAGgB,SAAA,SAAS,CAAC,MAAiC,EAAE,IAAsB,EAAA;IACjF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7E;;;;"}
@@ -0,0 +1,6 @@
1
+ function isRangeOverlap(range, text) {
2
+ return range[0] <= text[1] && text[0] <= range[1];
3
+ }
4
+
5
+ export { isRangeOverlap };
6
+ //# sourceMappingURL=is-range-overlap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-range-overlap.js","sources":["../../../../src/lib/utils/is-range-overlap.ts"],"sourcesContent":["export function isRangeOverlap(range: [number, number], text: [number, number]) {\n return range[0] <= text[1] && text[0] <= range[1];\n}\n"],"names":[],"mappings":"AAAgB,SAAA,cAAc,CAAC,KAAuB,EAAE,IAAsB,EAAA;AAC5E,IAAA,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AACnD;;;;"}
@@ -0,0 +1,22 @@
1
+ function tick({ deep = 1, maxDeep = 1, delay = 0, recursiveCondition, delayGetter, type = "macro", }) {
2
+ return new Promise((resolve) => {
3
+ if (type === "micro") {
4
+ if (deep >= maxDeep || !recursiveCondition || recursiveCondition())
5
+ resolve(1);
6
+ else
7
+ void tick({ deep: deep + 1, maxDeep, delay, recursiveCondition, type, delayGetter }).then(() => resolve(1));
8
+ }
9
+ if (type === "macro") {
10
+ const currentDelay = delayGetter ? delayGetter(deep) : delay;
11
+ setTimeout(() => {
12
+ if (deep >= maxDeep || !recursiveCondition || recursiveCondition())
13
+ resolve(1);
14
+ else
15
+ void tick({ deep: deep + 1, maxDeep, delay, recursiveCondition, type, delayGetter }).then(() => resolve(1));
16
+ }, currentDelay);
17
+ }
18
+ });
19
+ }
20
+
21
+ export { tick };
22
+ //# sourceMappingURL=tick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick.js","sources":["../../../../src/lib/utils/tick.ts"],"sourcesContent":["type TickOptions = {\n type?: \"micro\" | \"macro\";\n delay?: number;\n deep?: number;\n maxDeep?: number;\n recursiveCondition?: () => boolean;\n delayGetter?: (deep: number) => number;\n};\n\nexport function tick({\n deep = 1,\n maxDeep = 1,\n delay = 0,\n recursiveCondition,\n delayGetter,\n type = \"macro\",\n}: TickOptions) {\n return new Promise((resolve) => {\n if (type === \"micro\") {\n if (deep >= maxDeep || !recursiveCondition || recursiveCondition()) resolve(1);\n else\n void tick({ deep: deep + 1, maxDeep, delay, recursiveCondition, type, delayGetter }).then(\n () => resolve(1),\n );\n }\n if (type === \"macro\") {\n const currentDelay = delayGetter ? delayGetter(deep) : delay;\n\n setTimeout(() => {\n if (deep >= maxDeep || !recursiveCondition || recursiveCondition()) resolve(1);\n else\n void tick({ deep: deep + 1, maxDeep, delay, recursiveCondition, type, delayGetter }).then(\n () => resolve(1),\n );\n }, currentDelay);\n }\n });\n}\n"],"names":[],"mappings":"AASM,SAAU,IAAI,CAAC,EACnB,IAAI,GAAG,CAAC,EACR,OAAO,GAAG,CAAC,EACX,KAAK,GAAG,CAAC,EACT,kBAAkB,EAClB,WAAW,EACX,IAAI,GAAG,OAAO,GACF,EAAA;AACZ,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,EAAE;gBAAE,OAAO,CAAC,CAAC,CAAC;;AAE5E,gBAAA,KAAK,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CACvF,MAAM,OAAO,CAAC,CAAC,CAAC,CACjB;;AAEL,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,YAAA,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK;YAE5D,UAAU,CAAC,MAAK;gBACd,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,EAAE;oBAAE,OAAO,CAAC,CAAC,CAAC;;AAE5E,oBAAA,KAAK,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CACvF,MAAM,OAAO,CAAC,CAAC,CAAC,CACjB;aACJ,EAAE,YAAY,CAAC;;AAEpB,KAAC,CAAC;AACJ;;;;"}
@@ -0,0 +1,91 @@
1
+ import { EditorView, drawSelection } from '@codemirror/view';
2
+ import { ReadonlyCompartment, ThemeCompartment, VimModeCompartment } from '../../extensions/compartments/index.js';
3
+ import '@codemirror/commands';
4
+ import { getDarkTheme } from '../../extensions/theme/themes/get-dark-theme.js';
5
+ import { getLightTheme } from '../../extensions/theme/themes/get-light-theme.js';
6
+ import { initEditor } from './lib/init-editor.js';
7
+
8
+ class Editor {
9
+ view;
10
+ provider;
11
+ arguments;
12
+ constructor(options) {
13
+ void initEditor(options).then((editor) => {
14
+ this.view = editor.view;
15
+ this.provider = editor.provider;
16
+ });
17
+ this.arguments = options;
18
+ }
19
+ focus = () => {
20
+ if (!this.view)
21
+ return;
22
+ this.view.focus();
23
+ };
24
+ getContent = () => {
25
+ if (!this.view)
26
+ return;
27
+ return this.view.state.doc.toString();
28
+ };
29
+ setContent = (content, position) => {
30
+ if (!this.view)
31
+ return;
32
+ if (position == undefined) {
33
+ const cursor = this.view.state.selection.main.head;
34
+ position = cursor;
35
+ }
36
+ const transaction = this.view.state.update({
37
+ changes: {
38
+ from: position,
39
+ insert: content,
40
+ },
41
+ });
42
+ this.view.dispatch(transaction);
43
+ };
44
+ setReadonly = (readonly) => {
45
+ if (!this.view)
46
+ return;
47
+ this.view.dispatch({
48
+ effects: ReadonlyCompartment.reconfigure(EditorView.editable.of(!readonly)),
49
+ });
50
+ };
51
+ setTheme = (theme) => {
52
+ if (!this.view)
53
+ return;
54
+ this.view.dispatch({
55
+ effects: ThemeCompartment.reconfigure(theme === "dark"
56
+ ? getDarkTheme({
57
+ dark: this.arguments.dark,
58
+ light: this.arguments.light,
59
+ theme,
60
+ })
61
+ : getLightTheme({
62
+ dark: this.arguments.dark,
63
+ light: this.arguments.light,
64
+ theme,
65
+ })),
66
+ });
67
+ };
68
+ setVimMode = async (mode) => {
69
+ if (!this.view)
70
+ return;
71
+ const { vim } = await import('@replit/codemirror-vim');
72
+ this.view.dispatch({
73
+ effects: VimModeCompartment.reconfigure(mode ? [vim({ status: true }), drawSelection()] : []),
74
+ });
75
+ };
76
+ setUserProvider = (name = "Anonymous", color = "#000000") => {
77
+ if (!this.provider)
78
+ return;
79
+ this.provider.awareness.setLocalStateField("user", { name, color });
80
+ };
81
+ destroy = () => {
82
+ if (!this.view)
83
+ return;
84
+ this.view.destroy();
85
+ if (this.provider)
86
+ this.provider.destroy();
87
+ };
88
+ }
89
+
90
+ export { Editor };
91
+ //# sourceMappingURL=Editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Editor.js","sources":["../../../../src/module/Editor/Editor.ts"],"sourcesContent":["import { EditorView, drawSelection } from \"@codemirror/view\";\nimport type { WebsocketProvider } from \"y-websocket\";\nimport {\n type EditorTheme,\n ReadonlyCompartment,\n ThemeCompartment,\n VimModeCompartment,\n getDarkTheme,\n getLightTheme,\n} from \"@/extensions\";\nimport { type EditorArguments } from \"./Editor.types\";\nimport { initEditor } from \"./lib\";\n\nexport class Editor {\n view: EditorView | undefined;\n\n provider: WebsocketProvider | undefined;\n\n arguments: EditorArguments;\n\n constructor(options: EditorArguments) {\n void initEditor(options).then((editor) => {\n this.view = editor.view;\n this.provider = editor.provider;\n });\n\n this.arguments = options;\n }\n\n focus = () => {\n if (!this.view) return;\n\n this.view.focus();\n };\n\n getContent = () => {\n if (!this.view) return;\n\n return this.view.state.doc.toString();\n };\n\n setContent = (content: string, position?: number) => {\n if (!this.view) return;\n\n if (position == undefined) {\n const cursor = this.view.state.selection.main.head;\n position = cursor;\n }\n\n const transaction = this.view.state.update({\n changes: {\n from: position,\n insert: content,\n },\n });\n this.view.dispatch(transaction);\n };\n\n setReadonly = (readonly: boolean) => {\n if (!this.view) return;\n\n this.view.dispatch({\n effects: ReadonlyCompartment.reconfigure(EditorView.editable.of(!readonly)),\n });\n };\n\n setTheme = (theme?: EditorTheme) => {\n if (!this.view) return;\n\n this.view.dispatch({\n effects: ThemeCompartment.reconfigure(\n theme === \"dark\"\n ? getDarkTheme({\n dark: this.arguments.dark,\n light: this.arguments.light,\n theme,\n })\n : getLightTheme({\n dark: this.arguments.dark,\n light: this.arguments.light,\n theme,\n }),\n ),\n });\n };\n\n setVimMode = async (mode: boolean) => {\n if (!this.view) return;\n\n const { vim } = await import(\"@replit/codemirror-vim\");\n\n this.view.dispatch({\n effects: VimModeCompartment.reconfigure(mode ? [vim({ status: true }), drawSelection()] : []),\n });\n };\n\n setUserProvider = (name: string = \"Anonymous\", color: string = \"#000000\") => {\n if (!this.provider) return;\n\n this.provider.awareness.setLocalStateField(\"user\", { name, color });\n };\n\n destroy = () => {\n if (!this.view) return;\n\n this.view.destroy();\n if (this.provider) this.provider.destroy();\n };\n}\n\nexport type EditorInterface = typeof Editor;\n"],"names":[],"mappings":";;;;;;;MAaa,MAAM,CAAA;AACjB,IAAA,IAAI;AAEJ,IAAA,QAAQ;AAER,IAAA,SAAS;AAET,IAAA,WAAA,CAAY,OAAwB,EAAA;QAClC,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACvC,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AACjC,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO;;IAG1B,KAAK,GAAG,MAAK;QACX,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,KAAC;IAED,UAAU,GAAG,MAAK;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;QAEhB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;AACvC,KAAC;AAED,IAAA,UAAU,GAAG,CAAC,OAAe,EAAE,QAAiB,KAAI;QAClD,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAEhB,QAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;AACzB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;YAClD,QAAQ,GAAG,MAAM;;QAGnB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACzC,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,MAAM,EAAE,OAAO;AAChB,aAAA;AACF,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AACjC,KAAC;AAED,IAAA,WAAW,GAAG,CAAC,QAAiB,KAAI;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjB,YAAA,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5E,SAAA,CAAC;AACJ,KAAC;AAED,IAAA,QAAQ,GAAG,CAAC,KAAmB,KAAI;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjB,YAAA,OAAO,EAAE,gBAAgB,CAAC,WAAW,CACnC,KAAK,KAAK;kBACN,YAAY,CAAC;AACX,oBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;AACzB,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;oBAC3B,KAAK;iBACN;kBACD,aAAa,CAAC;AACZ,oBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;AACzB,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;oBAC3B,KAAK;AACN,iBAAA,CAAC,CACP;AACF,SAAA,CAAC;AACJ,KAAC;AAED,IAAA,UAAU,GAAG,OAAO,IAAa,KAAI;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;QAEhB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,wBAAwB,CAAC;AAEtD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjB,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC;AAC9F,SAAA,CAAC;AACJ,KAAC;IAED,eAAe,GAAG,CAAC,IAAe,GAAA,WAAW,EAAE,KAAgB,GAAA,SAAS,KAAI;QAC1E,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACrE,KAAC;IAED,OAAO,GAAG,MAAK;QACb,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QACnB,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC5C,KAAC;AACF;;;;"}
@@ -0,0 +1,32 @@
1
+ async function initEditorProvider({ roomId, url, userName = "Anonymous", userColor, initialText, onStartProvider, }) {
2
+ const { Doc } = await import('yjs');
3
+ const { WebsocketProvider } = await import('y-websocket');
4
+ const multiCursorDocument = new Doc();
5
+ const multiCursorText = multiCursorDocument.getText(roomId);
6
+ if (!userColor || !userColor.startsWith("#")) {
7
+ // eslint-disable-next-line no-console
8
+ console.warn("user color must be hex!");
9
+ userColor = "#30bced";
10
+ }
11
+ const userColorLight = `${userColor.substring(0, 7)}33`;
12
+ const provider = new WebsocketProvider(url, roomId, multiCursorDocument);
13
+ provider.awareness.setLocalStateField("user", {
14
+ name: userName,
15
+ color: userColor,
16
+ colorLight: userColorLight,
17
+ });
18
+ if (onStartProvider)
19
+ provider.on("status", (event) => {
20
+ onStartProvider(event?.status);
21
+ });
22
+ if (provider && multiCursorText)
23
+ provider.on("sync", (isSynced) => {
24
+ if (isSynced && !multiCursorText.length && initialText) {
25
+ multiCursorText.insert(0, initialText);
26
+ }
27
+ });
28
+ return { provider, multiCursorText };
29
+ }
30
+
31
+ export { initEditorProvider };
32
+ //# sourceMappingURL=init-editor-provider.js.map