@dxos/react-ui-editor 0.3.11-main.668f0ff → 0.3.11-main.674a7f9
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.
- package/dist/lib/browser/index.mjs +2031 -1641
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +14 -14
- package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/TextEditor.d.ts +20 -17
- package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +6 -3
- package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
- package/dist/types/src/{hooks/automerge → components/TextEditor}/automerge.stories.d.ts +6 -1
- package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +1 -0
- package/dist/types/src/components/TextEditor/comments.stories.d.ts +26 -0
- package/dist/types/src/components/TextEditor/comments.stories.d.ts.map +1 -0
- package/dist/types/src/components/TextEditor/index.d.ts +0 -2
- package/dist/types/src/components/TextEditor/index.d.ts.map +1 -1
- package/dist/types/src/extensions/autocomplete.d.ts.map +1 -0
- package/dist/types/src/extensions/automerge/automerge.d.ts +9 -0
- package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -0
- package/dist/types/src/extensions/automerge/cursor.d.ts +5 -0
- package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -0
- package/dist/types/src/extensions/automerge/defs.d.ts +24 -0
- package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -0
- package/dist/types/src/extensions/automerge/index.d.ts +3 -0
- package/dist/types/src/extensions/automerge/index.d.ts.map +1 -0
- package/dist/types/src/extensions/automerge/semaphore.d.ts +14 -0
- package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -0
- package/dist/types/src/extensions/automerge/update-automerge.d.ts +5 -0
- package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -0
- package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +1 -0
- package/dist/types/src/extensions/awareness.d.ts +46 -0
- package/dist/types/src/extensions/awareness.d.ts.map +1 -0
- package/dist/types/src/extensions/basic.d.ts +8 -0
- package/dist/types/src/extensions/basic.d.ts.map +1 -0
- package/dist/types/src/extensions/blast.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor/extensions → extensions}/comments.d.ts +33 -18
- package/dist/types/src/extensions/comments.d.ts.map +1 -0
- package/dist/types/src/extensions/cursor.d.ts +25 -0
- package/dist/types/src/extensions/cursor.d.ts.map +1 -0
- package/dist/types/src/extensions/index.d.ts +13 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -0
- package/dist/types/src/extensions/listener.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/bundle.d.ts +2 -5
- package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/code.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/heading.d.ts +6 -0
- package/dist/types/src/extensions/markdown/heading.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/hr.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/image.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/index.d.ts +10 -0
- package/dist/types/src/extensions/markdown/index.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/link.d.ts +1 -0
- package/dist/types/src/extensions/markdown/link.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/table.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/tasklist.d.ts.map +1 -0
- package/dist/types/src/extensions/mention.d.ts.map +1 -0
- package/dist/types/src/extensions/outliner.d.ts +4 -0
- package/dist/types/src/extensions/outliner.d.ts.map +1 -0
- package/dist/types/src/extensions/typewriter.d.ts.map +1 -0
- package/dist/types/src/hooks/awareness-provider.d.ts +31 -0
- package/dist/types/src/hooks/awareness-provider.d.ts.map +1 -0
- package/dist/types/src/hooks/defs.d.ts +25 -0
- package/dist/types/src/hooks/defs.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +3 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useTextEditor.d.ts +17 -0
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -0
- package/dist/types/src/hooks/useTextModel.d.ts +2 -31
- package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +5 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/styles/cursors.d.ts.map +1 -0
- package/dist/types/src/styles/index.d.ts +1 -0
- package/dist/types/src/styles/index.d.ts.map +1 -1
- package/dist/types/src/styles/markdown.d.ts.map +1 -1
- package/dist/types/src/styles/tokens.d.ts +1 -0
- package/dist/types/src/styles/tokens.d.ts.map +1 -1
- package/dist/types/src/{components/TextEditor/themes → themes}/default.d.ts +1 -1
- package/dist/types/src/themes/default.d.ts.map +1 -0
- package/dist/types/src/themes/index.d.ts.map +1 -0
- package/dist/types/src/util.d.ts +7 -0
- package/dist/types/src/util.d.ts.map +1 -0
- package/package.json +33 -34
- package/src/components/TextEditor/MarkdownEditor.stories.tsx +88 -91
- package/src/components/TextEditor/TextEditor.stories.tsx +13 -34
- package/src/components/TextEditor/TextEditor.tsx +123 -94
- package/src/{hooks/automerge → components/TextEditor}/automerge.stories.tsx +66 -6
- package/src/components/TextEditor/comments.stories.tsx +357 -0
- package/src/components/TextEditor/index.ts +0 -3
- package/src/{components/TextEditor/extensions → extensions}/autocomplete.ts +23 -19
- package/src/extensions/automerge/automerge.ts +88 -0
- package/src/extensions/automerge/cursor.ts +52 -0
- package/src/extensions/automerge/defs.ts +41 -0
- package/src/extensions/automerge/index.ts +6 -0
- package/src/{hooks → extensions}/automerge/semaphore.ts +34 -29
- package/src/{hooks → extensions}/automerge/update-automerge.ts +5 -6
- package/src/{hooks → extensions}/automerge/update-codemirror.ts +13 -5
- package/src/extensions/awareness.ts +310 -0
- package/src/extensions/basic.ts +37 -0
- package/src/extensions/comments.ts +428 -0
- package/src/extensions/cursor.ts +50 -0
- package/src/{components/TextEditor/extensions → extensions}/index.ts +4 -8
- package/src/extensions/listener.ts +35 -0
- package/src/{components/TextEditor/extensions → extensions}/markdown/bundle.ts +18 -24
- package/src/{components/TextEditor/extensions → extensions/markdown}/code.ts +28 -23
- package/src/extensions/markdown/heading.ts +60 -0
- package/src/{components/TextEditor/extensions → extensions}/markdown/highlight.ts +4 -13
- package/src/extensions/markdown/hr.ts +72 -0
- package/src/extensions/markdown/image.ts +87 -0
- package/src/extensions/markdown/index.ts +13 -0
- package/src/{components/TextEditor/extensions → extensions/markdown}/link.ts +116 -62
- package/src/{components/TextEditor/extensions → extensions/markdown}/table.ts +10 -4
- package/src/extensions/markdown/tasklist.ts +111 -0
- package/src/{components/TextEditor/extensions → extensions}/mention.ts +9 -2
- package/src/extensions/outliner.ts +12 -0
- package/src/{components/TextEditor/extensions → extensions}/typewriter.ts +1 -1
- package/src/hooks/awareness-provider.ts +124 -0
- package/src/hooks/defs.ts +42 -0
- package/src/hooks/index.ts +4 -1
- package/src/hooks/useTextEditor.ts +29 -0
- package/src/hooks/useTextModel.ts +30 -115
- package/src/index.ts +5 -0
- package/src/styles/index.ts +1 -0
- package/src/styles/markdown.ts +0 -2
- package/src/styles/tokens.ts +3 -0
- package/src/{components/TextEditor/themes → themes}/default.ts +52 -79
- package/src/util.ts +41 -0
- package/dist/types/src/components/TextEditor/codemirror.stories.d.ts +0 -12
- package/dist/types/src/components/TextEditor/codemirror.stories.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/basic.d.ts +0 -9
- package/dist/types/src/components/TextEditor/extensions/basic.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/blast.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/code.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/hr.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/image.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/index.d.ts +0 -17
- package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/link.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/listener.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts +0 -3
- package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/mention.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts +0 -3
- package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/table.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts +0 -12
- package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/typewriter.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/util.d.ts +0 -5
- package/dist/types/src/components/TextEditor/extensions/util.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/themes/default.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/themes/index.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/handle.d.ts +0 -9
- package/dist/types/src/hooks/automerge/handle.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/index.d.ts +0 -3
- package/dist/types/src/hooks/automerge/index.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/plugin.d.ts +0 -26
- package/dist/types/src/hooks/automerge/plugin.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/semaphore.d.ts +0 -19
- package/dist/types/src/hooks/automerge/semaphore.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/update-automerge.d.ts +0 -6
- package/dist/types/src/hooks/automerge/update-automerge.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/update-codemirror.d.ts.map +0 -1
- package/dist/types/src/hooks/yjs/cursors.d.ts.map +0 -1
- package/dist/types/src/hooks/yjs/index.d.ts +0 -3
- package/dist/types/src/hooks/yjs/index.d.ts.map +0 -1
- package/dist/types/src/hooks/yjs/space-provider.d.ts +0 -27
- package/dist/types/src/hooks/yjs/space-provider.d.ts.map +0 -1
- package/dist/types/src/hooks/yjs/yjs.stories.d.ts +0 -12
- package/dist/types/src/hooks/yjs/yjs.stories.d.ts.map +0 -1
- package/dist/types/src/hooks/yjs/yjs.test.d.ts +0 -2
- package/dist/types/src/hooks/yjs/yjs.test.d.ts.map +0 -1
- package/dist/types/src/testing/index.d.ts +0 -3
- package/dist/types/src/testing/index.d.ts.map +0 -1
- package/dist/types/src/testing/proto/gen/schema.d.ts +0 -15
- package/dist/types/src/testing/proto/gen/schema.d.ts.map +0 -1
- package/dist/types/src/testing/proto/index.d.ts +0 -2
- package/dist/types/src/testing/proto/index.d.ts.map +0 -1
- package/dist/types/src/testing/replicator.d.ts +0 -45
- package/dist/types/src/testing/replicator.d.ts.map +0 -1
- package/src/components/TextEditor/codemirror.stories.ts +0 -114
- package/src/components/TextEditor/extensions/basic.ts +0 -32
- package/src/components/TextEditor/extensions/comments.ts +0 -389
- package/src/components/TextEditor/extensions/hr.ts +0 -74
- package/src/components/TextEditor/extensions/image.ts +0 -69
- package/src/components/TextEditor/extensions/listener.ts +0 -39
- package/src/components/TextEditor/extensions/markdown/index.ts +0 -6
- package/src/components/TextEditor/extensions/mermaid.ts +0 -11
- package/src/components/TextEditor/extensions/tasklist.ts +0 -121
- package/src/components/TextEditor/extensions/tooltip.ts +0 -61
- package/src/components/TextEditor/extensions/util.ts +0 -18
- package/src/hooks/automerge/handle.ts +0 -14
- package/src/hooks/automerge/index.ts +0 -6
- package/src/hooks/automerge/plugin.ts +0 -134
- package/src/hooks/yjs/index.ts +0 -6
- package/src/hooks/yjs/space-provider.ts +0 -126
- package/src/hooks/yjs/yjs.stories.tsx +0 -56
- package/src/hooks/yjs/yjs.test.ts +0 -59
- package/src/testing/index.ts +0 -6
- package/src/testing/proto/gen/schema.ts +0 -49
- package/src/testing/proto/index.ts +0 -5
- package/src/testing/proto/schema.proto +0 -15
- package/src/testing/replicator.ts +0 -189
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/autocomplete.d.ts +0 -0
- /package/dist/types/src/{hooks → extensions}/automerge/update-codemirror.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/blast.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/listener.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/code.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/highlight.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/hr.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/image.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/table.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/tasklist.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/mention.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/typewriter.d.ts +0 -0
- /package/dist/types/src/{hooks/yjs → styles}/cursors.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/themes → themes}/index.d.ts +0 -0
- /package/src/{components/TextEditor/extensions → extensions}/blast.ts +0 -0
- /package/src/{hooks/yjs → styles}/cursors.ts +0 -0
- /package/src/{components/TextEditor/themes → themes}/index.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/react-ui-editor",
|
|
3
|
-
"version": "0.3.11-main.
|
|
3
|
+
"version": "0.3.11-main.674a7f9",
|
|
4
4
|
"description": "Document editing experience within a DXOS shell.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -13,20 +13,20 @@
|
|
|
13
13
|
"src"
|
|
14
14
|
],
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@codemirror/autocomplete": "^6.
|
|
17
|
-
"@codemirror/commands": "^6.3.
|
|
18
|
-
"@codemirror/lang-markdown": "^6.2.
|
|
19
|
-
"@codemirror/language": "^6.
|
|
16
|
+
"@codemirror/autocomplete": "^6.12.0",
|
|
17
|
+
"@codemirror/commands": "^6.3.3",
|
|
18
|
+
"@codemirror/lang-markdown": "^6.2.4",
|
|
19
|
+
"@codemirror/language": "^6.10.0",
|
|
20
20
|
"@codemirror/language-data": "^6.3.1",
|
|
21
21
|
"@codemirror/lint": "^6.4.2",
|
|
22
22
|
"@codemirror/search": "^6.5.5",
|
|
23
|
-
"@codemirror/state": "^6.
|
|
23
|
+
"@codemirror/state": "^6.4.0",
|
|
24
24
|
"@codemirror/theme-one-dark": "^6.1.2",
|
|
25
|
-
"@codemirror/view": "^6.
|
|
25
|
+
"@codemirror/view": "^6.23.0",
|
|
26
26
|
"@fluentui/react-tabster": "^9.16.1",
|
|
27
|
-
"@lezer/common": "^1.
|
|
27
|
+
"@lezer/common": "^1.2.1",
|
|
28
28
|
"@lezer/highlight": "^1.2.0",
|
|
29
|
-
"@lezer/markdown": "^1.
|
|
29
|
+
"@lezer/markdown": "^1.2.0",
|
|
30
30
|
"@replit/codemirror-vim": "^6.0.14",
|
|
31
31
|
"codemirror": "6.0.1",
|
|
32
32
|
"lib0": "^0.2.65",
|
|
@@ -35,26 +35,24 @@
|
|
|
35
35
|
"lodash.pick": "^4.4.0",
|
|
36
36
|
"lodash.sortby": "^4.7.0",
|
|
37
37
|
"style-mod": "^4.1.0",
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"@dxos/
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/react-
|
|
49
|
-
"@dxos/react-ui": "0.3.11-main.
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/
|
|
52
|
-
"@dxos/util": "0.3.11-main.668f0ff",
|
|
53
|
-
"@dxos/log": "0.3.11-main.668f0ff"
|
|
38
|
+
"@dxos/async": "0.3.11-main.674a7f9",
|
|
39
|
+
"@dxos/automerge": "0.3.11-main.674a7f9",
|
|
40
|
+
"@dxos/debug": "0.3.11-main.674a7f9",
|
|
41
|
+
"@dxos/context": "0.3.11-main.674a7f9",
|
|
42
|
+
"@dxos/display-name": "0.3.11-main.674a7f9",
|
|
43
|
+
"@dxos/echo-schema": "0.3.11-main.674a7f9",
|
|
44
|
+
"@dxos/invariant": "0.3.11-main.674a7f9",
|
|
45
|
+
"@dxos/log": "0.3.11-main.674a7f9",
|
|
46
|
+
"@dxos/protocols": "0.3.11-main.674a7f9",
|
|
47
|
+
"@dxos/react-async": "0.3.11-main.674a7f9",
|
|
48
|
+
"@dxos/react-ui": "0.3.11-main.674a7f9",
|
|
49
|
+
"@dxos/react-ui-theme": "0.3.11-main.674a7f9",
|
|
50
|
+
"@dxos/util": "0.3.11-main.674a7f9",
|
|
51
|
+
"@dxos/text-model": "0.3.11-main.674a7f9"
|
|
54
52
|
},
|
|
55
53
|
"devDependencies": {
|
|
56
54
|
"@automerge/automerge-repo-network-broadcastchannel": "^1.0.19",
|
|
57
|
-
"@faker-js/faker": "^8.
|
|
55
|
+
"@faker-js/faker": "^8.3.1",
|
|
58
56
|
"@phosphor-icons/react": "^2.0.5",
|
|
59
57
|
"@preact/signals-react": "^1.3.6",
|
|
60
58
|
"@types/lodash.defaultsdeep": "^4.6.6",
|
|
@@ -66,23 +64,24 @@
|
|
|
66
64
|
"deepsignal": "1.4.0-shallow.0",
|
|
67
65
|
"react": "^18.2.0",
|
|
68
66
|
"react-dom": "^18.2.0",
|
|
69
|
-
"@dxos/
|
|
70
|
-
"@dxos/
|
|
71
|
-
"@dxos/
|
|
72
|
-
"@dxos/
|
|
73
|
-
"@dxos/react-
|
|
74
|
-
"@dxos/storybook-utils": "0.3.11-main.
|
|
67
|
+
"@dxos/echo-signals": "0.3.11-main.674a7f9",
|
|
68
|
+
"@dxos/config": "0.3.11-main.674a7f9",
|
|
69
|
+
"@dxos/echo-typegen": "0.3.11-main.674a7f9",
|
|
70
|
+
"@dxos/keyboard": "0.3.11-main.674a7f9",
|
|
71
|
+
"@dxos/react-client": "0.3.11-main.674a7f9",
|
|
72
|
+
"@dxos/storybook-utils": "0.3.11-main.674a7f9",
|
|
73
|
+
"@dxos/react-ui": "0.3.11-main.674a7f9"
|
|
75
74
|
},
|
|
76
75
|
"peerDependencies": {
|
|
77
76
|
"@phosphor-icons/react": "^2.0.5",
|
|
78
77
|
"react": "^18.2.0",
|
|
79
78
|
"react-dom": "^18.2.0",
|
|
80
|
-
"@dxos/react-client": "0.3.11-main.
|
|
79
|
+
"@dxos/react-client": "0.3.11-main.674a7f9"
|
|
81
80
|
},
|
|
82
81
|
"publishConfig": {
|
|
83
82
|
"access": "public"
|
|
84
83
|
},
|
|
85
84
|
"scripts": {
|
|
86
|
-
"
|
|
85
|
+
"test": "true"
|
|
87
86
|
}
|
|
88
87
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import '@dxosTheme';
|
|
6
6
|
|
|
7
|
-
import { EditorView } from '@codemirror/view';
|
|
7
|
+
import { type EditorView } from '@codemirror/view';
|
|
8
8
|
import { faker } from '@faker-js/faker';
|
|
9
9
|
import { ArrowSquareOut } from '@phosphor-icons/react';
|
|
10
10
|
import defaultsDeep from 'lodash.defaultsdeep';
|
|
@@ -12,11 +12,12 @@ import React, { type FC, StrictMode, useRef, useState } from 'react';
|
|
|
12
12
|
import { createRoot } from 'react-dom/client';
|
|
13
13
|
|
|
14
14
|
import { TextObject } from '@dxos/echo-schema';
|
|
15
|
+
import { keySymbols, parseShortcut } from '@dxos/keyboard';
|
|
15
16
|
import { PublicKey } from '@dxos/keys';
|
|
16
17
|
import { fixedInsetFlexLayout, getSize, groupSurface, mx } from '@dxos/react-ui-theme';
|
|
17
18
|
import { withTheme } from '@dxos/storybook-utils';
|
|
18
19
|
|
|
19
|
-
import { MarkdownEditor, type TextEditorProps
|
|
20
|
+
import { MarkdownEditor, type TextEditorProps } from './TextEditor';
|
|
20
21
|
import {
|
|
21
22
|
autocomplete,
|
|
22
23
|
blast,
|
|
@@ -25,19 +26,17 @@ import {
|
|
|
25
26
|
defaultOptions,
|
|
26
27
|
hr,
|
|
27
28
|
image,
|
|
28
|
-
listener,
|
|
29
29
|
link,
|
|
30
30
|
mention,
|
|
31
31
|
table,
|
|
32
32
|
tasklist,
|
|
33
|
-
tooltip,
|
|
34
33
|
typewriter,
|
|
35
34
|
type CommentsOptions,
|
|
36
|
-
type TooltipOptions,
|
|
37
35
|
type LinkOptions,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
useComments,
|
|
37
|
+
heading,
|
|
38
|
+
} from '../../extensions';
|
|
39
|
+
import { type Comment, useTextModel } from '../../hooks';
|
|
41
40
|
|
|
42
41
|
// Extensions:
|
|
43
42
|
// TODO(burdon): Table of contents.
|
|
@@ -57,8 +56,8 @@ const text = {
|
|
|
57
56
|
'- [x] decorator',
|
|
58
57
|
'- [ ] checkbox',
|
|
59
58
|
' - [ ] state',
|
|
60
|
-
'
|
|
61
|
-
'
|
|
59
|
+
' - [ ] indent',
|
|
60
|
+
' - [x] style',
|
|
62
61
|
'',
|
|
63
62
|
),
|
|
64
63
|
|
|
@@ -125,8 +124,6 @@ const text = {
|
|
|
125
124
|
|
|
126
125
|
paragraphs: str(...faker.helpers.multiple(() => [faker.lorem.paragraph(), ''], { count: 3 }).flat()),
|
|
127
126
|
|
|
128
|
-
mermaid: str('```mermaid', 'graph TD;', 'A-->B;', 'A-->C;', 'B-->D;', 'C-->D;', '```'),
|
|
129
|
-
|
|
130
127
|
footer: str('', '', '', '', '')
|
|
131
128
|
};
|
|
132
129
|
|
|
@@ -166,10 +163,12 @@ const links = [
|
|
|
166
163
|
{ label: 'StackEdit', apply: '[StackEdit](https://stackedit.io/app)' },
|
|
167
164
|
];
|
|
168
165
|
|
|
166
|
+
const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
|
|
167
|
+
|
|
169
168
|
const hover =
|
|
170
169
|
'rounded-sm text-base text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200';
|
|
171
170
|
|
|
172
|
-
const
|
|
171
|
+
const onHoverLinkTooltip: LinkOptions['onHover'] = (el, url) => {
|
|
173
172
|
const web = new URL(url);
|
|
174
173
|
createRoot(el).render(
|
|
175
174
|
<StrictMode>
|
|
@@ -187,26 +186,26 @@ const Key: FC<{ char: string }> = ({ char }) => (
|
|
|
187
186
|
</span>
|
|
188
187
|
);
|
|
189
188
|
|
|
190
|
-
const onCommentsHover: CommentsOptions['onHover'] = (el) => {
|
|
189
|
+
const onCommentsHover: CommentsOptions['onHover'] = (el, shortcut) => {
|
|
191
190
|
createRoot(el).render(
|
|
192
191
|
<StrictMode>
|
|
193
192
|
<div className='flex items-center gap-2 px-2 py-2 bg-neutral-700 text-white text-xs rounded'>
|
|
194
193
|
<div>Create comment</div>
|
|
195
|
-
{/* TODO(burdon): Unify shortcuts. */}
|
|
196
194
|
<div className='flex gap-1'>
|
|
197
|
-
|
|
198
|
-
|
|
195
|
+
{keySymbols(parseShortcut(shortcut)).map((char) => (
|
|
196
|
+
<Key key={char} char={char} />
|
|
197
|
+
))}
|
|
199
198
|
</div>
|
|
200
199
|
</div>
|
|
201
200
|
</StrictMode>,
|
|
202
201
|
);
|
|
203
202
|
};
|
|
204
203
|
|
|
205
|
-
const
|
|
204
|
+
const onRenderLink: LinkOptions['onRender'] = (el, url) => {
|
|
206
205
|
createRoot(el).render(
|
|
207
206
|
<StrictMode>
|
|
208
207
|
<a href={url} target='_blank' rel='noreferrer' className={hover}>
|
|
209
|
-
<ArrowSquareOut weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 mb-
|
|
208
|
+
<ArrowSquareOut weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 mb-[2px]')} />
|
|
210
209
|
</a>
|
|
211
210
|
</StrictMode>,
|
|
212
211
|
);
|
|
@@ -214,23 +213,24 @@ const onLinkRender: LinkOptions['onRender'] = (el, url) => {
|
|
|
214
213
|
|
|
215
214
|
type StoryProps = {
|
|
216
215
|
text?: string;
|
|
216
|
+
comments?: Comment[];
|
|
217
217
|
automerge?: boolean;
|
|
218
|
-
} & Pick<TextEditorProps, '
|
|
218
|
+
} & Pick<TextEditorProps, 'readonly' | 'placeholder' | 'slots' | 'extensions'>;
|
|
219
219
|
|
|
220
|
-
const Story = ({ text, automerge, ...props }: StoryProps) => {
|
|
221
|
-
const ref = useRef<TextEditorRef>(null);
|
|
220
|
+
const Story = ({ text, comments, automerge, placeholder = 'New document.', ...props }: StoryProps) => {
|
|
222
221
|
const [item] = useState({ text: new TextObject(text, undefined, undefined, { automerge }) });
|
|
222
|
+
const view = useRef<EditorView>(null);
|
|
223
223
|
const model = useTextModel({ text: item.text });
|
|
224
|
+
useComments(view.current, comments);
|
|
224
225
|
if (!model) {
|
|
225
226
|
return null;
|
|
226
227
|
}
|
|
227
228
|
|
|
228
229
|
return (
|
|
229
230
|
<div className={mx(fixedInsetFlexLayout, groupSurface)}>
|
|
230
|
-
<div className='flex justify-center
|
|
231
|
-
<div className='flex flex-col w-[800px]
|
|
232
|
-
<MarkdownEditor ref={
|
|
233
|
-
<div className='flex shrink-0 h-[300px]'></div>
|
|
231
|
+
<div className='flex h-full justify-center'>
|
|
232
|
+
<div className='flex flex-col h-full w-[800px]'>
|
|
233
|
+
<MarkdownEditor ref={view} model={model} placeholder={placeholder} {...props} />
|
|
234
234
|
</div>
|
|
235
235
|
</div>
|
|
236
236
|
</div>
|
|
@@ -244,83 +244,86 @@ export default {
|
|
|
244
244
|
render: Story,
|
|
245
245
|
};
|
|
246
246
|
|
|
247
|
-
const
|
|
247
|
+
const defaults = [
|
|
248
248
|
autocomplete({
|
|
249
249
|
onSearch: (text) => links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase())),
|
|
250
250
|
}),
|
|
251
251
|
code(),
|
|
252
|
+
heading(),
|
|
252
253
|
hr(),
|
|
253
254
|
image(),
|
|
254
|
-
link({ onRender:
|
|
255
|
+
link({ onRender: onRenderLink, onHover: onHoverLinkTooltip }),
|
|
256
|
+
// mention({
|
|
257
|
+
// onSearch: (text) => names.filter((name) => name.toLowerCase().startsWith(text.toLowerCase())),
|
|
258
|
+
// }),
|
|
255
259
|
table(),
|
|
256
260
|
tasklist(),
|
|
257
|
-
tooltip({ onHover: onTooltipHover }),
|
|
258
261
|
];
|
|
259
262
|
|
|
260
263
|
export const Default = {
|
|
261
|
-
render: () => <Story text={document} extensions={
|
|
264
|
+
render: () => <Story text={document} extensions={defaults} />,
|
|
262
265
|
};
|
|
263
266
|
|
|
264
267
|
export const Readonly = {
|
|
265
|
-
render: () => <Story text={document} extensions={
|
|
268
|
+
render: () => <Story text={document} extensions={defaults} readonly />,
|
|
266
269
|
};
|
|
267
270
|
|
|
268
271
|
export const NoExtensions = {
|
|
269
272
|
render: () => <Story text={document} />,
|
|
270
273
|
};
|
|
271
274
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
text={str('# Horizontal Rule', '', text.paragraphs, '---', '', text.paragraphs, '---', '', text.paragraphs)}
|
|
277
|
-
extensions={[hr()]}
|
|
278
|
-
/>
|
|
279
|
-
),
|
|
275
|
+
const large = faker.helpers.multiple(() => faker.lorem.paragraph({ min: 8, max: 16 }), { count: 20 }).join('\n\n');
|
|
276
|
+
|
|
277
|
+
export const Empty = {
|
|
278
|
+
render: () => <Story />,
|
|
280
279
|
};
|
|
281
280
|
|
|
282
|
-
export const
|
|
283
|
-
render: () => <Story text={str(
|
|
281
|
+
export const Scrolling = {
|
|
282
|
+
render: () => <Story text={str('# Large Document', '', large)} extensions={[]} />,
|
|
284
283
|
};
|
|
285
284
|
|
|
286
285
|
export const Links = {
|
|
287
|
-
render: () =>
|
|
286
|
+
render: () => (
|
|
287
|
+
<Story
|
|
288
|
+
text={str(text.links, text.footer)}
|
|
289
|
+
extensions={[link({ onHover: onHoverLinkTooltip, onRender: onRenderLink })]}
|
|
290
|
+
/>
|
|
291
|
+
),
|
|
288
292
|
};
|
|
289
293
|
|
|
290
294
|
export const Code = {
|
|
291
295
|
render: () => <Story text={str(text.code, text.footer)} extensions={[code()]} readonly />,
|
|
292
296
|
};
|
|
293
297
|
|
|
294
|
-
export const Table = {
|
|
295
|
-
render: () => <Story text={str(text.table, text.footer)} extensions={[table()]} />,
|
|
296
|
-
};
|
|
297
|
-
|
|
298
298
|
export const Image = {
|
|
299
299
|
render: () => <Story text={str(text.image, text.footer)} readonly extensions={[image()]} />,
|
|
300
300
|
};
|
|
301
301
|
|
|
302
|
-
export const
|
|
302
|
+
export const Lists = {
|
|
303
303
|
render: () => (
|
|
304
|
-
<Story
|
|
305
|
-
text={str(text.tasks, '', text.list, text.footer)}
|
|
306
|
-
extensions={[
|
|
307
|
-
tasklist(),
|
|
308
|
-
listener({
|
|
309
|
-
onChange: (text) => {
|
|
310
|
-
console.log(text);
|
|
311
|
-
},
|
|
312
|
-
}),
|
|
313
|
-
]}
|
|
314
|
-
/>
|
|
304
|
+
<Story text={str(text.tasks, '', text.list, '', text.numbered, text.footer)} extensions={[tasklist()]} />
|
|
315
305
|
),
|
|
316
306
|
};
|
|
317
307
|
|
|
308
|
+
export const Table = {
|
|
309
|
+
render: () => <Story text={str(text.table, text.footer)} extensions={[table()]} />,
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
// export const Outliner = {
|
|
313
|
+
// render: () => (
|
|
314
|
+
// <Story
|
|
315
|
+
// text={str('# Outliner', '', 'Block', ': this is a block', ': with multiple lines', text.footer)}
|
|
316
|
+
// extensions={[outliner()]}
|
|
317
|
+
// />
|
|
318
|
+
// ),
|
|
319
|
+
// };
|
|
320
|
+
|
|
318
321
|
export const Autocomplete = {
|
|
319
322
|
render: () => (
|
|
320
323
|
<Story
|
|
321
|
-
text={str('# Autocomplete', '', 'Press
|
|
324
|
+
text={str('# Autocomplete', '', 'Press Ctrl-Space...', text.footer)}
|
|
322
325
|
extensions={[
|
|
323
|
-
link({ onRender:
|
|
326
|
+
link({ onRender: onRenderLink }),
|
|
324
327
|
autocomplete({
|
|
325
328
|
onSearch: (text) => links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase())),
|
|
326
329
|
}),
|
|
@@ -329,8 +332,6 @@ export const Autocomplete = {
|
|
|
329
332
|
),
|
|
330
333
|
};
|
|
331
334
|
|
|
332
|
-
const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
|
|
333
|
-
|
|
334
335
|
export const Mention = {
|
|
335
336
|
render: () => (
|
|
336
337
|
<Story
|
|
@@ -344,24 +345,20 @@ export const Mention = {
|
|
|
344
345
|
),
|
|
345
346
|
};
|
|
346
347
|
|
|
347
|
-
export const Mermaid = {
|
|
348
|
-
render: () => <Story text={str('# Mermaid', '', text.mermaid, text.footer)} extensions={[code(), mermaid()]} />,
|
|
349
|
-
};
|
|
350
|
-
|
|
351
348
|
export const Comments = {
|
|
352
349
|
render: () => {
|
|
353
|
-
const [
|
|
350
|
+
const [commentRanges, setCommentRanges] = useState<Comment[]>([]);
|
|
354
351
|
|
|
355
352
|
return (
|
|
356
353
|
<Story
|
|
357
354
|
text={str('# Comments', '', text.paragraphs, text.footer)}
|
|
358
|
-
comments={
|
|
355
|
+
comments={commentRanges}
|
|
359
356
|
extensions={[
|
|
360
357
|
comments({
|
|
361
358
|
onHover: onCommentsHover,
|
|
362
|
-
onCreate: (
|
|
359
|
+
onCreate: (range) => {
|
|
363
360
|
const id = PublicKey.random().toHex();
|
|
364
|
-
|
|
361
|
+
setCommentRanges((commentRanges) => [...commentRanges, { id, cursor: range }]);
|
|
365
362
|
return id;
|
|
366
363
|
},
|
|
367
364
|
onSelect: (state) => {
|
|
@@ -370,9 +367,9 @@ export const Comments = {
|
|
|
370
367
|
console.log(
|
|
371
368
|
'update',
|
|
372
369
|
JSON.stringify({
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
370
|
+
comments: state.comments.length,
|
|
371
|
+
active: state.selection.current?.slice(0, 8),
|
|
372
|
+
closest: state.selection.closest?.slice(0, 8),
|
|
376
373
|
}),
|
|
377
374
|
);
|
|
378
375
|
}
|
|
@@ -384,8 +381,24 @@ export const Comments = {
|
|
|
384
381
|
},
|
|
385
382
|
};
|
|
386
383
|
|
|
384
|
+
export const HorizontalRule = {
|
|
385
|
+
render: () => (
|
|
386
|
+
<Story
|
|
387
|
+
text={str('# Horizontal Rule', '', text.paragraphs, '---', text.paragraphs, '---', text.paragraphs)}
|
|
388
|
+
extensions={[hr()]}
|
|
389
|
+
/>
|
|
390
|
+
),
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
const typewriterItems = localStorage.getItem('dxos.org/plugin/markdown/typewriter')?.split(',');
|
|
394
|
+
|
|
387
395
|
export const Typewriter = {
|
|
388
|
-
render: () =>
|
|
396
|
+
render: () => (
|
|
397
|
+
<Story
|
|
398
|
+
text={str('# Typewriter', '', text.paragraphs, text.footer)}
|
|
399
|
+
extensions={[typewriter({ items: typewriterItems })]}
|
|
400
|
+
/>
|
|
401
|
+
),
|
|
389
402
|
};
|
|
390
403
|
|
|
391
404
|
export const Blast = {
|
|
@@ -393,9 +406,7 @@ export const Blast = {
|
|
|
393
406
|
<Story
|
|
394
407
|
text={str('# Blast', '', text.paragraphs, text.code, text.paragraphs)}
|
|
395
408
|
extensions={[
|
|
396
|
-
typewriter({
|
|
397
|
-
items: localStorage.getItem('dxos.composer.extension.demo')?.split(','),
|
|
398
|
-
}),
|
|
409
|
+
typewriter({ items: typewriterItems }),
|
|
399
410
|
blast(
|
|
400
411
|
defaultsDeep(
|
|
401
412
|
{
|
|
@@ -412,17 +423,3 @@ export const Blast = {
|
|
|
412
423
|
/>
|
|
413
424
|
),
|
|
414
425
|
};
|
|
415
|
-
|
|
416
|
-
export const Diagnostics = {
|
|
417
|
-
render: () => (
|
|
418
|
-
<Story
|
|
419
|
-
text={document}
|
|
420
|
-
extensions={[
|
|
421
|
-
// Cursor moved.
|
|
422
|
-
EditorView.updateListener.of((update) => {
|
|
423
|
-
console.log('update', update.view.state.selection.main.head);
|
|
424
|
-
}),
|
|
425
|
-
]}
|
|
426
|
-
/>
|
|
427
|
-
),
|
|
428
|
-
};
|
|
@@ -4,15 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
import '@dxosTheme';
|
|
6
6
|
|
|
7
|
-
import
|
|
8
|
-
import React, { useRef, useState } from 'react';
|
|
7
|
+
import React, { useState } from 'react';
|
|
9
8
|
|
|
10
9
|
import { TextObject } from '@dxos/echo-schema';
|
|
11
10
|
import { fixedInsetFlexLayout, groupSurface, mx } from '@dxos/react-ui-theme';
|
|
12
11
|
import { withTheme } from '@dxos/storybook-utils';
|
|
13
12
|
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
13
|
+
import { TextEditor, type TextEditorProps } from './TextEditor';
|
|
14
|
+
import { listener } from '../../extensions';
|
|
16
15
|
import { useTextModel } from '../../hooks';
|
|
17
16
|
|
|
18
17
|
const initialText = [
|
|
@@ -29,8 +28,7 @@ const Story = ({
|
|
|
29
28
|
text,
|
|
30
29
|
automerge,
|
|
31
30
|
...props
|
|
32
|
-
}: { text?: string; automerge?: boolean } & Pick<TextEditorProps, 'extensions' | 'slots'>) => {
|
|
33
|
-
const ref = useRef<TextEditorRef>(null);
|
|
31
|
+
}: { text?: string; automerge?: boolean } & Pick<TextEditorProps, 'extensions' | 'placeholder' | 'slots'>) => {
|
|
34
32
|
const [item] = useState({ text: new TextObject(text, undefined, undefined, { automerge }) });
|
|
35
33
|
const model = useTextModel({ text: item.text });
|
|
36
34
|
if (!model) {
|
|
@@ -39,10 +37,9 @@ const Story = ({
|
|
|
39
37
|
|
|
40
38
|
return (
|
|
41
39
|
<div className={mx(fixedInsetFlexLayout, groupSurface)}>
|
|
42
|
-
<div className='flex justify-center
|
|
40
|
+
<div className='flex justify-center'>
|
|
43
41
|
<div className='flex flex-col w-[800px] py-16'>
|
|
44
|
-
<TextEditor
|
|
45
|
-
<div className='flex shrink-0 h-[300px]'></div>
|
|
42
|
+
<TextEditor model={model} {...props} />
|
|
46
43
|
</div>
|
|
47
44
|
</div>
|
|
48
45
|
</div>
|
|
@@ -57,37 +54,19 @@ export default {
|
|
|
57
54
|
};
|
|
58
55
|
|
|
59
56
|
export const Default = {
|
|
60
|
-
render: () =>
|
|
61
|
-
<Story
|
|
62
|
-
slots={defaultsDeep(
|
|
63
|
-
{ editor: { theme: textTheme, placeholder: 'Enter text...' } } satisfies TextEditorSlots,
|
|
64
|
-
defaultSlots,
|
|
65
|
-
)}
|
|
66
|
-
/>
|
|
67
|
-
),
|
|
57
|
+
render: () => <Story placeholder='Enter text...' />,
|
|
68
58
|
};
|
|
69
59
|
|
|
70
60
|
export const Text = {
|
|
71
|
-
render: () =>
|
|
72
|
-
<Story
|
|
73
|
-
text={initialText}
|
|
74
|
-
slots={defaultsDeep(
|
|
75
|
-
{ editor: { theme: textTheme, placeholder: 'Enter text...' } } satisfies TextEditorSlots,
|
|
76
|
-
defaultSlots,
|
|
77
|
-
)}
|
|
78
|
-
/>
|
|
79
|
-
),
|
|
61
|
+
render: () => <Story text={initialText} placeholder='Enter text...' />,
|
|
80
62
|
};
|
|
81
63
|
|
|
82
64
|
export const Automerge = {
|
|
65
|
+
render: () => <Story text={initialText} placeholder='Enter text...' automerge />,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export const Listener = {
|
|
83
69
|
render: () => (
|
|
84
|
-
<Story
|
|
85
|
-
automerge
|
|
86
|
-
text={initialText}
|
|
87
|
-
slots={defaultsDeep(
|
|
88
|
-
{ editor: { theme: textTheme, placeholder: 'Enter text...' } } satisfies TextEditorSlots,
|
|
89
|
-
defaultSlots,
|
|
90
|
-
)}
|
|
91
|
-
/>
|
|
70
|
+
<Story placeholder='Enter text...' extensions={[listener({ onChange: (text) => console.log(text) })]} />
|
|
92
71
|
),
|
|
93
72
|
};
|