@dxos/react-ui-editor 0.3.10-next.ef70620 → 0.3.11-main.1caa3af

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 (161) hide show
  1. package/dist/lib/browser/index.mjs +2174 -935
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +66 -0
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -0
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +9 -4
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +12 -4
  9. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts +10 -0
  11. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts.map +1 -0
  12. package/dist/types/src/components/TextEditor/extensions/{basic/bundle.d.ts → basic.d.ts} +3 -2
  13. package/dist/types/src/components/TextEditor/extensions/basic.d.ts.map +1 -0
  14. package/dist/types/src/components/TextEditor/extensions/blast.d.ts +25 -0
  15. package/dist/types/src/components/TextEditor/extensions/blast.d.ts.map +1 -0
  16. package/dist/types/src/components/TextEditor/extensions/code.d.ts +2 -0
  17. package/dist/types/src/components/TextEditor/extensions/code.d.ts.map +1 -0
  18. package/dist/types/src/components/TextEditor/extensions/comments.d.ts +48 -0
  19. package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +1 -0
  20. package/dist/types/src/components/TextEditor/extensions/hr.d.ts +2 -0
  21. package/dist/types/src/components/TextEditor/extensions/hr.d.ts.map +1 -0
  22. package/dist/types/src/components/TextEditor/extensions/image.d.ts +4 -0
  23. package/dist/types/src/components/TextEditor/extensions/image.d.ts.map +1 -0
  24. package/dist/types/src/components/TextEditor/extensions/index.d.ts +14 -2
  25. package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +1 -1
  26. package/dist/types/src/components/TextEditor/extensions/link.d.ts +11 -0
  27. package/dist/types/src/components/TextEditor/extensions/link.d.ts.map +1 -0
  28. package/dist/types/src/components/TextEditor/extensions/listener.d.ts +9 -0
  29. package/dist/types/src/components/TextEditor/extensions/listener.d.ts.map +1 -0
  30. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts +10 -1
  31. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts.map +1 -1
  32. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts +36 -0
  33. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +1 -0
  34. package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts +1 -1
  35. package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts.map +1 -1
  36. package/dist/types/src/components/TextEditor/extensions/mention.d.ts +6 -0
  37. package/dist/types/src/components/TextEditor/extensions/mention.d.ts.map +1 -0
  38. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts +3 -0
  39. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts.map +1 -0
  40. package/dist/types/src/components/TextEditor/extensions/table.d.ts +8 -0
  41. package/dist/types/src/components/TextEditor/extensions/table.d.ts.map +1 -0
  42. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts +3 -0
  43. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts.map +1 -0
  44. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts +12 -0
  45. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts.map +1 -0
  46. package/dist/types/src/components/TextEditor/extensions/typewriter.d.ts +10 -0
  47. package/dist/types/src/components/TextEditor/extensions/typewriter.d.ts.map +1 -0
  48. package/dist/types/src/components/TextEditor/extensions/util.d.ts +5 -0
  49. package/dist/types/src/components/TextEditor/extensions/util.d.ts.map +1 -0
  50. package/dist/types/src/components/TextEditor/index.d.ts +2 -0
  51. package/dist/types/src/components/TextEditor/index.d.ts.map +1 -1
  52. package/dist/types/src/components/TextEditor/themes/default.d.ts +17 -0
  53. package/dist/types/src/components/TextEditor/themes/default.d.ts.map +1 -0
  54. package/dist/types/src/components/TextEditor/themes/index.d.ts +2 -0
  55. package/dist/types/src/components/TextEditor/themes/index.d.ts.map +1 -0
  56. package/dist/types/src/hooks/automerge/automerge.stories.d.ts +15 -0
  57. package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +1 -0
  58. package/dist/types/src/hooks/automerge/handle.d.ts.map +1 -0
  59. package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/index.d.ts +1 -1
  60. package/dist/types/src/hooks/automerge/index.d.ts.map +1 -0
  61. package/dist/types/src/hooks/automerge/plugin.d.ts.map +1 -0
  62. package/dist/types/src/{automerge/automerge-plugin/PatchSemaphore.d.ts → hooks/automerge/semaphore.d.ts} +4 -1
  63. package/dist/types/src/hooks/automerge/semaphore.d.ts.map +1 -0
  64. package/dist/types/src/{automerge/automerge-plugin/codeMirrorToAm.d.ts → hooks/automerge/update-automerge.d.ts} +2 -3
  65. package/dist/types/src/hooks/automerge/update-automerge.d.ts.map +1 -0
  66. package/dist/types/src/hooks/automerge/update-codemirror.d.ts +5 -0
  67. package/dist/types/src/hooks/automerge/update-codemirror.d.ts.map +1 -0
  68. package/dist/types/src/hooks/index.d.ts +0 -1
  69. package/dist/types/src/hooks/index.d.ts.map +1 -1
  70. package/dist/types/src/hooks/useTextModel.d.ts +19 -5
  71. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  72. package/dist/types/src/{components/TextEditor → hooks/yjs}/yjs.stories.d.ts +2 -1
  73. package/dist/types/src/hooks/yjs/yjs.stories.d.ts.map +1 -0
  74. package/dist/types/src/hooks/yjs/yjs.test.d.ts +2 -0
  75. package/dist/types/src/hooks/yjs/yjs.test.d.ts.map +1 -0
  76. package/dist/types/src/index.d.ts +1 -0
  77. package/dist/types/src/index.d.ts.map +1 -1
  78. package/dist/types/src/styles/markdown.d.ts +14 -11
  79. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  80. package/dist/types/src/testing/replicator.d.ts.map +1 -1
  81. package/package.json +28 -33
  82. package/src/components/TextEditor/MarkdownEditor.stories.tsx +428 -0
  83. package/src/components/TextEditor/TextEditor.stories.tsx +57 -43
  84. package/src/components/TextEditor/TextEditor.tsx +98 -52
  85. package/src/components/TextEditor/extensions/autocomplete.ts +59 -0
  86. package/src/components/TextEditor/extensions/{basic/bundle.ts → basic.ts} +8 -4
  87. package/src/components/TextEditor/extensions/blast.ts +373 -0
  88. package/src/components/TextEditor/extensions/code.ts +99 -0
  89. package/src/components/TextEditor/extensions/comments.ts +388 -0
  90. package/src/components/TextEditor/extensions/hr.ts +74 -0
  91. package/src/components/TextEditor/extensions/image.ts +69 -0
  92. package/src/components/TextEditor/extensions/index.ts +14 -2
  93. package/src/components/TextEditor/extensions/{hyperlink/hyperlinkDecoration.ts → link.ts} +75 -38
  94. package/src/components/TextEditor/extensions/{change.ts → listener.ts} +5 -4
  95. package/src/components/TextEditor/extensions/markdown/bundle.ts +56 -49
  96. package/src/components/TextEditor/extensions/markdown/highlight.ts +204 -0
  97. package/src/components/TextEditor/extensions/markdown/index.ts +1 -1
  98. package/src/components/TextEditor/extensions/mention.ts +31 -0
  99. package/src/components/TextEditor/extensions/mermaid.ts +11 -0
  100. package/src/components/TextEditor/extensions/table.ts +132 -0
  101. package/src/components/TextEditor/extensions/tasklist.ts +121 -0
  102. package/src/components/TextEditor/extensions/{hyperlink/hyperlinkTooltip.tsx → tooltip.ts} +9 -9
  103. package/src/components/TextEditor/extensions/typewriter.ts +68 -0
  104. package/src/components/TextEditor/extensions/util.ts +18 -0
  105. package/src/components/TextEditor/index.ts +3 -0
  106. package/src/components/TextEditor/themes/default.ts +302 -0
  107. package/src/components/TextEditor/themes/index.ts +5 -0
  108. package/src/{automerge → hooks/automerge}/automerge.stories.tsx +7 -5
  109. package/src/{automerge/automerge-plugin → hooks/automerge}/plugin.ts +2 -1
  110. package/src/{automerge/automerge-plugin/PatchSemaphore.ts → hooks/automerge/semaphore.ts} +13 -9
  111. package/src/{automerge/automerge-plugin/codeMirrorToAm.ts → hooks/automerge/update-automerge.ts} +5 -2
  112. package/src/{automerge/automerge-plugin/amToCodemirror.ts → hooks/automerge/update-codemirror.ts} +4 -1
  113. package/src/hooks/index.ts +0 -1
  114. package/src/hooks/useTextModel.ts +101 -42
  115. package/src/{components/TextEditor → hooks/yjs}/yjs.stories.tsx +2 -1
  116. package/src/hooks/yjs/yjs.test.ts +59 -0
  117. package/src/index.ts +1 -0
  118. package/src/styles/markdown.ts +33 -24
  119. package/src/testing/replicator.ts +6 -6
  120. package/dist/types/src/automerge/automerge-plugin/PatchSemaphore.d.ts.map +0 -1
  121. package/dist/types/src/automerge/automerge-plugin/amToCodemirror.d.ts +0 -6
  122. package/dist/types/src/automerge/automerge-plugin/amToCodemirror.d.ts.map +0 -1
  123. package/dist/types/src/automerge/automerge-plugin/codeMirrorToAm.d.ts.map +0 -1
  124. package/dist/types/src/automerge/automerge-plugin/handle.d.ts.map +0 -1
  125. package/dist/types/src/automerge/automerge-plugin/index.d.ts.map +0 -1
  126. package/dist/types/src/automerge/automerge-plugin/plugin.d.ts.map +0 -1
  127. package/dist/types/src/automerge/automerge.stories.d.ts +0 -9
  128. package/dist/types/src/automerge/automerge.stories.d.ts.map +0 -1
  129. package/dist/types/src/components/TextEditor/extensions/basic/bundle.d.ts.map +0 -1
  130. package/dist/types/src/components/TextEditor/extensions/basic/index.d.ts +0 -3
  131. package/dist/types/src/components/TextEditor/extensions/basic/index.d.ts.map +0 -1
  132. package/dist/types/src/components/TextEditor/extensions/basic/theme.d.ts +0 -10
  133. package/dist/types/src/components/TextEditor/extensions/basic/theme.d.ts.map +0 -1
  134. package/dist/types/src/components/TextEditor/extensions/change.d.ts +0 -7
  135. package/dist/types/src/components/TextEditor/extensions/change.d.ts.map +0 -1
  136. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkDecoration.d.ts +0 -11
  137. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkDecoration.d.ts.map +0 -1
  138. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkTooltip.d.ts +0 -8
  139. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkTooltip.d.ts.map +0 -1
  140. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkWidget.d.ts +0 -10
  141. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkWidget.d.ts.map +0 -1
  142. package/dist/types/src/components/TextEditor/extensions/hyperlink/index.d.ts +0 -4
  143. package/dist/types/src/components/TextEditor/extensions/hyperlink/index.d.ts.map +0 -1
  144. package/dist/types/src/components/TextEditor/extensions/markdown/tags.d.ts +0 -17
  145. package/dist/types/src/components/TextEditor/extensions/markdown/tags.d.ts.map +0 -1
  146. package/dist/types/src/components/TextEditor/extensions/markdown/theme.d.ts +0 -21
  147. package/dist/types/src/components/TextEditor/extensions/markdown/theme.d.ts.map +0 -1
  148. package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +0 -1
  149. package/dist/types/src/hooks/useCollaboration.d.ts +0 -9
  150. package/dist/types/src/hooks/useCollaboration.d.ts.map +0 -1
  151. package/src/components/TextEditor/extensions/basic/index.ts +0 -6
  152. package/src/components/TextEditor/extensions/basic/theme.ts +0 -49
  153. package/src/components/TextEditor/extensions/hyperlink/hyperlinkWidget.tsx +0 -119
  154. package/src/components/TextEditor/extensions/hyperlink/index.ts +0 -7
  155. package/src/components/TextEditor/extensions/markdown/tags.ts +0 -38
  156. package/src/components/TextEditor/extensions/markdown/theme.ts +0 -265
  157. package/src/hooks/useCollaboration.ts +0 -45
  158. package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/handle.d.ts +0 -0
  159. package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/plugin.d.ts +0 -0
  160. package/src/{automerge/automerge-plugin → hooks/automerge}/handle.ts +0 -0
  161. package/src/{automerge/automerge-plugin → hooks/automerge}/index.ts +1 -1
@@ -1,11 +0,0 @@
1
- import { type RangeSet, StateField } from '@codemirror/state';
2
- type HyperlinkDecorationConfig = {
3
- link?: boolean;
4
- };
5
- /**
6
- * Creates a state field to replace AST elements with a hyperlink widget.
7
- * https://codemirror.net/docs/ref/#state.StateField
8
- */
9
- export declare const hyperlinkDecoration: ({ link }?: HyperlinkDecorationConfig) => StateField<RangeSet<any>>;
10
- export {};
11
- //# sourceMappingURL=hyperlinkDecoration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hyperlinkDecoration.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/TextEditor/extensions/hyperlink/hyperlinkDecoration.ts"],"names":[],"mappings":"AAMA,OAAO,EAAoB,KAAK,QAAQ,EAAmB,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AA6CnH,KAAK,yBAAyB,GAAG;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,cAAc,yBAAyB,8BAMtE,CAAC"}
@@ -1,8 +0,0 @@
1
- export type OnHyperlinkHover = (el: Element, url: string) => void;
2
- /**
3
- * https://codemirror.net/examples/tooltip
4
- * https://codemirror.net/docs/ref/#view.hoverTooltip
5
- * https://github.com/codemirror/view/blob/main/src/tooltip.ts
6
- */
7
- export declare const createHyperlinkTooltip: (onHover: OnHyperlinkHover, regexp?: RegExp) => import("@codemirror/state").Extension;
8
- //# sourceMappingURL=hyperlinkTooltip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hyperlinkTooltip.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/TextEditor/extensions/hyperlink/hyperlinkTooltip.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAElE;;;;GAIG;AAEH,eAAO,MAAM,sBAAsB,YAAa,gBAAgB,2DA0C5D,CAAC"}
@@ -1,10 +0,0 @@
1
- import { type Extension } from '@codemirror/state';
2
- import { type DecorationSet, MatchDecorator, ViewPlugin, type ViewUpdate } from '@codemirror/view';
3
- export declare function hyperLinkExtension(): ViewPlugin<{
4
- readonly decorator: MatchDecorator;
5
- decorations: DecorationSet;
6
- update(update: ViewUpdate): void;
7
- }>;
8
- export declare const hyperlinkStyle: Extension;
9
- export declare const hyperlinkWidget: Extension;
10
- //# sourceMappingURL=hyperlinkWidget.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hyperlinkWidget.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/TextEditor/extensions/hyperlink/hyperlinkWidget.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAEL,KAAK,aAAa,EAElB,cAAc,EACd,UAAU,EACV,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAuD1B,wBAAgB,kBAAkB;wBAGR,cAAc;;mBAOnB,UAAU;GAwB9B;AAED,eAAO,MAAM,cAAc,WAYzB,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,SAAkD,CAAC"}
@@ -1,4 +0,0 @@
1
- export * from './hyperlinkDecoration';
2
- export * from './hyperlinkTooltip';
3
- export * from './hyperlinkWidget';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/TextEditor/extensions/hyperlink/index.ts"],"names":[],"mappings":"AAIA,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
@@ -1,17 +0,0 @@
1
- import { Tag } from '@lezer/highlight';
2
- import { type MarkdownConfig } from '@lezer/markdown';
3
- export declare const markdownTags: {
4
- headingMark: Tag;
5
- quoteMark: Tag;
6
- listMark: Tag;
7
- linkMark: Tag;
8
- emphasisMark: Tag;
9
- codeMark: Tag;
10
- codeText: Tag;
11
- inlineCode: Tag;
12
- url: Tag;
13
- linkReference: Tag;
14
- linkLabel: Tag;
15
- };
16
- export declare const markdownTagsExtension: MarkdownConfig;
17
- //# sourceMappingURL=tags.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/TextEditor/extensions/markdown/tags.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,eAAO,MAAM,YAAY;;;;;;;;;;;;CAYxB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,cAgBnC,CAAC"}
@@ -1,21 +0,0 @@
1
- import { HighlightStyle } from '@codemirror/language';
2
- import { type ThemeStyles } from '../../../../styles';
3
- export declare const chalky = "#e5c07b";
4
- export declare const coral = "#e06c75";
5
- export declare const cyan = "#56b6c2";
6
- export declare const invalid = "#ffffff";
7
- export declare const ivory = "#abb2bf";
8
- export declare const stone = "#7d8799";
9
- export declare const malibu = "#61afef";
10
- export declare const sage = "#98c379";
11
- export declare const whiskey = "#d19a66";
12
- export declare const violet = "#c678dd";
13
- export declare const highlightBackground = "#2c313a";
14
- export declare const tooltipBackground = "#353a42";
15
- /**
16
- * NOTE: The '&' prefix denotes the CM editor root.
17
- * https://codemirror.net/examples/styling
18
- */
19
- export declare const markdownTheme: ThemeStyles;
20
- export declare const markdownHighlightStyle: HighlightStyle;
21
- //# sourceMappingURL=theme.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/TextEditor/extensions/markdown/theme.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKtD,OAAO,EAAsD,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG1G,eAAO,MAAM,MAAM,YAAY,CAAC;AAChC,eAAO,MAAM,KAAK,YAAY,CAAC;AAC/B,eAAO,MAAM,IAAI,YAAY,CAAC;AAC9B,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,eAAO,MAAM,KAAK,YAAY,CAAC;AAC/B,eAAO,MAAM,KAAK,YAAY,CAAC;AAC/B,eAAO,MAAM,MAAM,YAAY,CAAC;AAChC,eAAO,MAAM,IAAI,YAAY,CAAC;AAC9B,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,eAAO,MAAM,MAAM,YAAY,CAAC;AAEhC,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAK3C;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,WAsJ3B,CAAC;AAEF,eAAO,MAAM,sBAAsB,gBA6ElC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"yjs.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/TextEditor/yjs.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,YAAY,CAAC;AAEpB,OAAO,KAAmB,MAAM,OAAO,CAAC;;;;;AAWxC,wBAGE;AA+BF,eAAO,MAAM,OAAO;;CAGnB,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { Extension } from '@codemirror/state';
2
- import type { ThemeMode } from '@dxos/react-ui';
3
- import type { EditorModel } from './useTextModel';
4
- /**
5
- * Replication and awareness (incl. remote selection).
6
- * https://codemirror.net/docs/ref/#collab
7
- */
8
- export declare const useCollaboration: (model: EditorModel, themeMode: ThemeMode) => Extension | undefined;
9
- //# sourceMappingURL=useCollaboration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCollaboration.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useCollaboration.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,UAAW,WAAW,aAAa,SAAS,KAAG,SAAS,GAAG,SAuBvF,CAAC"}
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './bundle';
6
- export * from './theme';
@@ -1,49 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import get from 'lodash.get';
6
- import { type StyleSpec } from 'style-mod';
7
-
8
- import { tokens } from '../../../../styles';
9
-
10
- /**
11
- * Minimal styles.
12
- * NOTE: The '&' prefix denotes the CM editor root.
13
- * https://codemirror.net/examples/styling
14
- */
15
- // TODO(burdon): Remove?
16
- export const basicTheme: {
17
- [selector: string]: StyleSpec;
18
- } = {
19
- '&.cm-focused': {
20
- outline: 'none',
21
- },
22
- '& .cm-line': {
23
- paddingInline: 0,
24
- lineHeight: 1.6,
25
- minBlockSize: '1.6em',
26
- },
27
- '& .cm-line *': {
28
- lineHeight: 1.6,
29
- },
30
- '& .cm-scroller': {
31
- fontFamily: get(tokens, 'fontFamily.body', []).join(','),
32
- overflow: 'visible',
33
- },
34
- '& .cm-content': {
35
- padding: 0,
36
- caretColor: 'black',
37
- },
38
- '.dark & .cm-content': {
39
- caretColor: 'white',
40
- },
41
- '& .cm-tooltip': {
42
- backgroundColor: 'transparent',
43
- border: 'none',
44
- },
45
- '& .cm-link': {
46
- color: get(tokens, 'extend.colors.primary.500'),
47
- textDecoration: 'underline',
48
- },
49
- };
@@ -1,119 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- // Adapted from: https://github.com/uiwjs/react-codemirror/blob/master/extensions/hyper-link/src/index.ts
4
- //
5
-
6
- import { type Extension } from '@codemirror/state';
7
- import {
8
- Decoration,
9
- type DecorationSet,
10
- EditorView,
11
- MatchDecorator,
12
- ViewPlugin,
13
- type ViewUpdate,
14
- } from '@codemirror/view';
15
-
16
- // Notes: Can't edit widget content (or cursor nav through them).
17
- // - https://discuss.codemirror.net/t/focusing-inputs-within-widgets/5178/7
18
- // Widgets intentionally always get set to contenteditable=false,
19
- // or they would become part of CodeMirror’s editable content element.
20
- // You should be able to introduce new contenteditable=true child elements inside of them.
21
-
22
- const markdownLinkRegexp = /\[([^\]]+)]\(([^)]+)\)(!?)/gi;
23
-
24
- /**
25
- * Custom link decorator.
26
- * NOTE: The default markdown extension formats links by default.
27
- * @deprecated
28
- */
29
- const linkDecorator = () =>
30
- new MatchDecorator({
31
- regexp: markdownLinkRegexp,
32
- decorate: (add, from, to, match, view) => {
33
- const [_, label, url] = match;
34
- const p0 = {
35
- start: from,
36
- end: from + 1,
37
- };
38
-
39
- const p1 = {
40
- start: from + 1,
41
- end: from + 1 + label.length,
42
- };
43
-
44
- const p2 = {
45
- start: p1.end,
46
- end: p1.end + 1,
47
- };
48
-
49
- const p3 = {
50
- start: p1.end + 1,
51
- end: p1.end + 1 + url.length + 2,
52
- };
53
-
54
- add(
55
- p0.start,
56
- p0.end,
57
- Decoration.mark({ class: 'cm-hyperlink-bracket', _attributes: { style: 'display: none' } }),
58
- );
59
- add(p1.start, p1.end, Decoration.mark({ class: 'cm-hyperlink-label' }));
60
- add(
61
- p2.start,
62
- p2.end,
63
- Decoration.mark({ class: 'cm-hyperlink-bracket', _attributes: { style: 'display: none' } }),
64
- );
65
- add(p3.start, p3.end, Decoration.mark({ class: 'cm-hyperlink-url', _attributes: { style: 'display: none' } }));
66
- },
67
- });
68
-
69
- export function hyperLinkExtension() {
70
- return ViewPlugin.fromClass(
71
- class HyperLinkView {
72
- readonly decorator: MatchDecorator;
73
- decorations: DecorationSet;
74
- constructor(view: EditorView) {
75
- this.decorator = linkDecorator();
76
- this.decorations = this.decorator.createDeco(view);
77
- }
78
-
79
- update(update: ViewUpdate) {
80
- if (update.docChanged || update.viewportChanged) {
81
- this.decorations = this.decorator.updateDeco(update, this.decorations);
82
- }
83
- }
84
- },
85
- {
86
- decorations: (view) => view.decorations,
87
- eventHandlers: {
88
- // TODO(burdon): CLick to expand link.
89
- // https://discuss.codemirror.net/t/decorator-iteration-on-click-event/4226/2
90
- mousedown: function (event, view) {
91
- const pos = view.posAtDOM(event.target as Node);
92
- if (pos !== 0) {
93
- console.log(this);
94
- }
95
- },
96
- // TODO(burdon): Hide when cursor moves away.
97
- keydown: (event, view) => {
98
- view.update([]);
99
- },
100
- },
101
- },
102
- );
103
- }
104
-
105
- export const hyperlinkStyle = EditorView.baseTheme({
106
- '.cm-hyperlink-label': {
107
- cursor: 'pointer',
108
- textDecoration: 'underline',
109
- },
110
- '.cm-hyperlink-bracket': {
111
- opacity: 0.2,
112
- },
113
- '.cm-hyperlink-url': {
114
- opacity: 0.5,
115
- fontFamily: 'monospace',
116
- },
117
- });
118
-
119
- export const hyperlinkWidget: Extension = [hyperLinkExtension(), hyperlinkStyle];
@@ -1,7 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './hyperlinkDecoration';
6
- export * from './hyperlinkTooltip';
7
- export * from './hyperlinkWidget';
@@ -1,38 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { styleTags, Tag } from '@lezer/highlight';
6
- import { type MarkdownConfig } from '@lezer/markdown';
7
-
8
- export const markdownTags = {
9
- headingMark: Tag.define(),
10
- quoteMark: Tag.define(),
11
- listMark: Tag.define(),
12
- linkMark: Tag.define(),
13
- emphasisMark: Tag.define(),
14
- codeMark: Tag.define(),
15
- codeText: Tag.define(),
16
- inlineCode: Tag.define(),
17
- url: Tag.define(),
18
- linkReference: Tag.define(),
19
- linkLabel: Tag.define(),
20
- };
21
-
22
- export const markdownTagsExtension: MarkdownConfig = {
23
- props: [
24
- styleTags({
25
- HeaderMark: markdownTags.headingMark,
26
- QuoteMark: markdownTags.quoteMark,
27
- ListMark: markdownTags.listMark,
28
- LinkMark: markdownTags.linkMark,
29
- EmphasisMark: markdownTags.emphasisMark,
30
- CodeMark: markdownTags.codeMark,
31
- CodeText: markdownTags.codeText,
32
- InlineCode: markdownTags.inlineCode,
33
- URL: markdownTags.url,
34
- LinkReference: markdownTags.linkReference,
35
- LinkLabel: markdownTags.linkLabel,
36
- }),
37
- ],
38
- };
@@ -1,265 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { markdownLanguage } from '@codemirror/lang-markdown';
6
- import { HighlightStyle } from '@codemirror/language';
7
- import { tags } from '@lezer/highlight';
8
- import get from 'lodash.get';
9
-
10
- import { markdownTags } from './tags';
11
- import { bold, heading, italic, mark, strikethrough, tokens, type ThemeStyles } from '../../../../styles';
12
-
13
- // TODO(burdon): Rationalize theme/colors. Hoist onto single property object.
14
- export const chalky = '#e5c07b';
15
- export const coral = '#e06c75';
16
- export const cyan = '#56b6c2';
17
- export const invalid = '#ffffff';
18
- export const ivory = '#abb2bf';
19
- export const stone = '#7d8799';
20
- export const malibu = '#61afef';
21
- export const sage = '#98c379';
22
- export const whiskey = '#d19a66';
23
- export const violet = '#c678dd';
24
- const _darkBackground = '#21252b';
25
- export const highlightBackground = '#2c313a';
26
- const _background = '#282c34';
27
- export const tooltipBackground = '#353a42';
28
- const _selection = '#3E4451';
29
-
30
- const monospace = get(tokens, 'fontFamily.mono', ['monospace']).join(',');
31
-
32
- /**
33
- * NOTE: The '&' prefix denotes the CM editor root.
34
- * https://codemirror.net/examples/styling
35
- */
36
- export const markdownTheme: ThemeStyles = {
37
- // TODO(thure): Consider whether these commented-out rules from one-dark-theme should be integrated.
38
- // '&': {
39
- // color: ivory,
40
- // backgroundColor: background
41
- // },
42
- // '.cm-cursor, .cm-dropCursor': { borderLeftColor: cursor },
43
- // '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
44
- // backgroundColor: selection
45
- // },
46
- // '.cm-panels': { backgroundColor: darkBackground, color: ivory },
47
- // '.cm-panels.cm-panels-top': { borderBottom: '2px solid black' },
48
- // '.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' },
49
- // '.cm-searchMatch': {
50
- // backgroundColor: '#72a1ff59',
51
- // outline: '1px solid #457dff'
52
- // },
53
- // '.cm-searchMatch.cm-searchMatch-selected': {
54
- // backgroundColor: '#6199ff2f'
55
- // },
56
- // '.cm-activeLine': { backgroundColor: '#6699ff0b' },
57
- // '.cm-selectionMatch': { backgroundColor: '#aafe661a' },
58
- // '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': {
59
- // backgroundColor: '#bad0f847'
60
- // },
61
- // '.cm-gutters': {
62
- // backgroundColor: background,
63
- // color: stone,
64
- // border: 'none'
65
- // },
66
- // '.cm-activeLineGutter': {
67
- // backgroundColor: highlightBackground
68
- // },
69
- // '.cm-foldPlaceholder': {
70
- // backgroundColor: 'transparent',
71
- // border: 'none',
72
- // color: '#ddd'
73
- // },
74
-
75
- '& .cm-tooltip': {
76
- backgroundColor: 'transparent',
77
- border: 'none',
78
- },
79
- // '.dark & .cm-tooltip': {
80
- // border: 'none',
81
- // backgroundColor: tooltipBackground,
82
- // },
83
- // '.dark & .cm-tooltip .cm-tooltip-arrow:before': {
84
- // borderTopColor: 'transparent',
85
- // borderBottomColor: 'transparent',
86
- // },
87
- // '.dark & .cm-tooltip .cm-tooltip-arrow:after': {
88
- // borderTopColor: tooltipBackground,
89
- // borderBottomColor: tooltipBackground,
90
- // },
91
- // '.dark & .cm-tooltip-autocomplete': {
92
- // '& > ul > li[aria-selected]': {
93
- // backgroundColor: highlightBackground,
94
- // color: ivory,
95
- // },
96
- // },
97
- '&.cm-focused': {
98
- outline: 'none',
99
- },
100
- '& .cm-line': {
101
- paddingInline: 0,
102
- lineHeight: 1.6,
103
- minBlockSize: '1.6em',
104
- },
105
- '& .cm-line *': {
106
- lineHeight: 1.6,
107
- },
108
- '&.cm-focused .cm-selectionBackground, & .cm-selectionBackground': {
109
- background: get(tokens, 'extend.colors.primary.150', '#00ffff'),
110
- },
111
- '.dark & .cm-selectionBackground, .dark &.cm-focused .cm-selectionBackground': {
112
- background: get(tokens, 'extend.colors.primary.850', '#00ffff'),
113
- },
114
- '& .cm-selectionMatch': {
115
- background: get(tokens, 'extend.colors.primary.250', '#00ffff') + '44',
116
- },
117
- '.dark & .cm-selectionMatch': {
118
- background: get(tokens, 'extend.colors.primary.600', '#00ffff') + '44',
119
- },
120
- '& .cm-content': {
121
- padding: 0,
122
- caretColor: 'black',
123
- },
124
- '.dark & .cm-content': {
125
- caretColor: 'white',
126
- },
127
- '& .cm-cursor': {
128
- borderLeftColor: 'black',
129
- },
130
- '.dark & .cm-cursor': {
131
- borderLeftColor: 'white',
132
- },
133
- '.cm-placeholder': {
134
- fontFamily: get(tokens, 'fontFamily.body', []).join(','),
135
- },
136
- '& .cm-scroller': {
137
- fontFamily: get(tokens, 'fontFamily.mono', []).join(','),
138
- overflow: 'visible',
139
- },
140
- '& .cm-activeLine': {
141
- backgroundColor: 'transparent',
142
- },
143
- '.dark & .cm-activeLine': {
144
- backgroundColor: 'transparent',
145
- },
146
- '& .cm-ySelectionInfo': {
147
- fontFamily: get(tokens, 'fontFamily.body', []).join(','),
148
- padding: '2px 4px',
149
- marginBlockStart: '-4px',
150
- },
151
- '& .cm-ySelection, & .cm-selectionMatch': {
152
- paddingBlockStart: '.15em',
153
- paddingBlockEnd: '.15em',
154
- },
155
- '& .cm-ySelection, & .cm-yLineSelection': {
156
- mixBlendMode: 'multiply',
157
- },
158
- '.dark & .cm-ySelection, .dark & .cm-yLineSelection': {
159
- mixBlendMode: 'screen',
160
- },
161
- '& .cm-ySelectionCaret': {
162
- display: 'inline-block',
163
- insetBlockStart: '.1em',
164
- blockSize: '1.4em',
165
- verticalAlign: 'top',
166
- },
167
- '& .cm-yLineSelection': {
168
- margin: '0',
169
- },
170
- '.cm-link': {
171
- color: 'rgb(20 89 208)', // TODO(burdon): Rationalize.
172
- textDecorationLine: 'underline',
173
- textDecorationThickness: '1px',
174
- textUnderlineOffset: '2px',
175
- borderRadius: '.125rem',
176
- },
177
- // TODO(burdon): Document.
178
- ...Object.keys(get(tokens, 'extend.fontSize', {})).reduce((acc: Record<string, any>, fontSize) => {
179
- const height = get(tokens, ['extend', 'fontSize', fontSize, 1, 'lineHeight']);
180
- // TODO(thure): This appears to be the best or only way to set selection caret heights, but it's far more verbose than it needs to be.
181
- acc[`& .text-${fontSize} + .cm-ySelectionCaret`] = { height };
182
- acc[`& .text-${fontSize} + .cm-ySelection + .cm-ySelectionCaret`] = { height };
183
- acc[`& .text-${fontSize} + .cm-widgetBuffer + .cm-ySelectionCaret`] = { height };
184
- return acc;
185
- }, {}),
186
- };
187
-
188
- export const markdownHighlightStyle = HighlightStyle.define(
189
- [
190
- {
191
- tag: [
192
- tags.keyword,
193
- tags.name,
194
- tags.deleted,
195
- tags.character,
196
- tags.propertyName,
197
- tags.macroName,
198
- tags.color,
199
- tags.constant(tags.name),
200
- tags.standard(tags.name),
201
- tags.definition(tags.name),
202
- tags.separator,
203
- tags.typeName,
204
- tags.className,
205
- tags.number,
206
- tags.changed,
207
- tags.annotation,
208
- tags.modifier,
209
- tags.self,
210
- tags.namespace,
211
- tags.operator,
212
- tags.operatorKeyword,
213
- tags.escape,
214
- tags.regexp,
215
- tags.special(tags.string),
216
- tags.meta,
217
- tags.comment,
218
- tags.atom,
219
- tags.bool,
220
- tags.special(tags.variableName),
221
- tags.processingInstruction,
222
- tags.string,
223
- tags.inserted,
224
- tags.invalid,
225
- ],
226
- color: 'inherit !important',
227
- },
228
- {
229
- tag: [tags.link, tags.url],
230
- color: 'inherit !important',
231
- textDecoration: 'none !important',
232
- },
233
- {
234
- tag: [tags.function(tags.variableName), tags.labelName],
235
- color: malibu,
236
- fontFamily: monospace,
237
- },
238
- {
239
- tag: [
240
- markdownTags.codeMark,
241
- markdownTags.emphasisMark,
242
- markdownTags.headingMark,
243
- markdownTags.linkLabel,
244
- markdownTags.linkReference,
245
- markdownTags.listMark,
246
- markdownTags.quoteMark,
247
- markdownTags.url,
248
- tags.meta,
249
- tags.processingInstruction,
250
- ],
251
- class: mark,
252
- },
253
- { tag: [markdownTags.codeText, markdownTags.inlineCode], class: 'font-mono' },
254
- { tag: tags.emphasis, class: italic },
255
- { tag: tags.heading1, class: heading[1] },
256
- { tag: tags.heading2, class: heading[2] },
257
- { tag: tags.heading3, class: heading[3] },
258
- { tag: tags.heading4, class: heading[4] },
259
- { tag: tags.heading5, class: heading[5] },
260
- { tag: tags.heading6, class: heading[6] },
261
- { tag: tags.strikethrough, class: strikethrough },
262
- { tag: tags.strong, class: bold },
263
- ],
264
- { scope: markdownLanguage, all: { fontFamily: get(tokens, 'fontFamily.body', []).join(',') } },
265
- );
@@ -1,45 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import type { Extension } from '@codemirror/state';
6
- import { useEffect, useMemo } from 'react';
7
- import { yCollab } from 'y-codemirror.next';
8
-
9
- import { generateName } from '@dxos/display-name';
10
- import { isDocAccessor } from '@dxos/echo-schema';
11
- import type { ThemeMode } from '@dxos/react-ui';
12
- import { getColorForValue } from '@dxos/react-ui-theme';
13
- import { YText } from '@dxos/text-model';
14
-
15
- import type { EditorModel } from './useTextModel';
16
- import { automergePlugin } from '../automerge/automerge-plugin';
17
-
18
- /**
19
- * Replication and awareness (incl. remote selection).
20
- * https://codemirror.net/docs/ref/#collab
21
- */
22
- export const useCollaboration = (model: EditorModel, themeMode: ThemeMode): Extension | undefined => {
23
- const { provider, peer, content } = model;
24
- const extension = useMemo(() => {
25
- if (content instanceof YText) {
26
- return yCollab(content, provider?.awareness);
27
- } else if (isDocAccessor(content)) {
28
- return automergePlugin(content.handle, content.path);
29
- } else {
30
- return undefined;
31
- }
32
- }, []);
33
-
34
- useEffect(() => {
35
- if (provider && peer) {
36
- provider.awareness.setLocalStateField('user', {
37
- name: peer.name ?? generateName(peer.id),
38
- color: getColorForValue({ value: peer.id, type: 'color' }),
39
- colorLight: getColorForValue({ value: peer.id, themeMode, type: 'highlight' }),
40
- });
41
- }
42
- }, [provider, peer, themeMode]);
43
-
44
- return extension;
45
- };
@@ -2,5 +2,5 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { automergePlugin, type AutomergePlugin } from './plugin';
6
5
  export { type IDocHandle } from './handle';
6
+ export { automergePlugin, type AutomergePlugin } from './plugin';