@dxos/react-ui-editor 0.3.11-main.baa8c4d → 0.3.11-main.bc6b68b
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 +1882 -1531
- 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/extensions/code.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/hr.d.ts.map +1 -0
- package/dist/types/src/extensions/image.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor/extensions → extensions}/index.d.ts +4 -2
- package/dist/types/src/extensions/index.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor/extensions → extensions}/link.d.ts +1 -0
- package/dist/types/src/extensions/link.d.ts.map +1 -0
- package/dist/types/src/extensions/listener.d.ts +10 -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/highlight.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/index.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/table.d.ts.map +1 -0
- package/dist/types/src/extensions/tasklist.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 +86 -91
- package/src/components/TextEditor/TextEditor.stories.tsx +13 -34
- package/src/components/TextEditor/TextEditor.tsx +124 -95
- 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/{components/TextEditor/extensions → extensions}/code.ts +28 -23
- package/src/extensions/comments.ts +428 -0
- package/src/extensions/cursor.ts +50 -0
- package/src/extensions/hr.ts +72 -0
- package/src/extensions/image.ts +87 -0
- package/src/{components/TextEditor/extensions → extensions}/index.ts +4 -2
- package/src/{components/TextEditor/extensions → extensions}/link.ts +116 -62
- 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/highlight.ts +4 -13
- package/src/{components/TextEditor/extensions → extensions}/mention.ts +9 -2
- package/src/extensions/outliner.ts +12 -0
- package/src/{components/TextEditor/extensions → extensions}/table.ts +10 -4
- package/src/extensions/tasklist.ts +111 -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.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 +0 -9
- 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.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 -388
- 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 -23
- 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}/code.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/hr.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/image.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/index.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}/table.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/tasklist.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/{components/TextEditor/extensions → extensions}/markdown/index.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.bc6b68b",
|
|
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/
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/
|
|
52
|
-
"@dxos/text-model": "0.3.11-main.baa8c4d",
|
|
53
|
-
"@dxos/util": "0.3.11-main.baa8c4d"
|
|
38
|
+
"@dxos/async": "0.3.11-main.bc6b68b",
|
|
39
|
+
"@dxos/automerge": "0.3.11-main.bc6b68b",
|
|
40
|
+
"@dxos/context": "0.3.11-main.bc6b68b",
|
|
41
|
+
"@dxos/debug": "0.3.11-main.bc6b68b",
|
|
42
|
+
"@dxos/echo-schema": "0.3.11-main.bc6b68b",
|
|
43
|
+
"@dxos/display-name": "0.3.11-main.bc6b68b",
|
|
44
|
+
"@dxos/invariant": "0.3.11-main.bc6b68b",
|
|
45
|
+
"@dxos/protocols": "0.3.11-main.bc6b68b",
|
|
46
|
+
"@dxos/react-async": "0.3.11-main.bc6b68b",
|
|
47
|
+
"@dxos/react-ui": "0.3.11-main.bc6b68b",
|
|
48
|
+
"@dxos/react-ui-theme": "0.3.11-main.bc6b68b",
|
|
49
|
+
"@dxos/log": "0.3.11-main.bc6b68b",
|
|
50
|
+
"@dxos/text-model": "0.3.11-main.bc6b68b",
|
|
51
|
+
"@dxos/util": "0.3.11-main.bc6b68b"
|
|
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/config": "0.3.11-main.
|
|
70
|
-
"@dxos/echo-signals": "0.3.11-main.
|
|
71
|
-
"@dxos/
|
|
72
|
-
"@dxos/react-client": "0.3.11-main.
|
|
73
|
-
"@dxos/
|
|
74
|
-
"@dxos/
|
|
67
|
+
"@dxos/config": "0.3.11-main.bc6b68b",
|
|
68
|
+
"@dxos/echo-signals": "0.3.11-main.bc6b68b",
|
|
69
|
+
"@dxos/keyboard": "0.3.11-main.bc6b68b",
|
|
70
|
+
"@dxos/react-client": "0.3.11-main.bc6b68b",
|
|
71
|
+
"@dxos/storybook-utils": "0.3.11-main.bc6b68b",
|
|
72
|
+
"@dxos/echo-typegen": "0.3.11-main.bc6b68b",
|
|
73
|
+
"@dxos/react-ui": "0.3.11-main.bc6b68b"
|
|
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.bc6b68b"
|
|
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,16 @@ 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
|
-
} from '
|
|
40
|
-
import { type
|
|
36
|
+
useComments,
|
|
37
|
+
} from '../../extensions';
|
|
38
|
+
import { type Comment, useTextModel } from '../../hooks';
|
|
41
39
|
|
|
42
40
|
// Extensions:
|
|
43
41
|
// TODO(burdon): Table of contents.
|
|
@@ -57,8 +55,8 @@ const text = {
|
|
|
57
55
|
'- [x] decorator',
|
|
58
56
|
'- [ ] checkbox',
|
|
59
57
|
' - [ ] state',
|
|
60
|
-
'
|
|
61
|
-
'
|
|
58
|
+
' - [ ] indent',
|
|
59
|
+
' - [x] style',
|
|
62
60
|
'',
|
|
63
61
|
),
|
|
64
62
|
|
|
@@ -125,8 +123,6 @@ const text = {
|
|
|
125
123
|
|
|
126
124
|
paragraphs: str(...faker.helpers.multiple(() => [faker.lorem.paragraph(), ''], { count: 3 }).flat()),
|
|
127
125
|
|
|
128
|
-
mermaid: str('```mermaid', 'graph TD;', 'A-->B;', 'A-->C;', 'B-->D;', 'C-->D;', '```'),
|
|
129
|
-
|
|
130
126
|
footer: str('', '', '', '', '')
|
|
131
127
|
};
|
|
132
128
|
|
|
@@ -166,10 +162,12 @@ const links = [
|
|
|
166
162
|
{ label: 'StackEdit', apply: '[StackEdit](https://stackedit.io/app)' },
|
|
167
163
|
];
|
|
168
164
|
|
|
165
|
+
const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
|
|
166
|
+
|
|
169
167
|
const hover =
|
|
170
168
|
'rounded-sm text-base text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200';
|
|
171
169
|
|
|
172
|
-
const
|
|
170
|
+
const onHoverLinkTooltip: LinkOptions['onHover'] = (el, url) => {
|
|
173
171
|
const web = new URL(url);
|
|
174
172
|
createRoot(el).render(
|
|
175
173
|
<StrictMode>
|
|
@@ -187,26 +185,26 @@ const Key: FC<{ char: string }> = ({ char }) => (
|
|
|
187
185
|
</span>
|
|
188
186
|
);
|
|
189
187
|
|
|
190
|
-
const onCommentsHover: CommentsOptions['onHover'] = (el) => {
|
|
188
|
+
const onCommentsHover: CommentsOptions['onHover'] = (el, shortcut) => {
|
|
191
189
|
createRoot(el).render(
|
|
192
190
|
<StrictMode>
|
|
193
191
|
<div className='flex items-center gap-2 px-2 py-2 bg-neutral-700 text-white text-xs rounded'>
|
|
194
192
|
<div>Create comment</div>
|
|
195
|
-
{/* TODO(burdon): Unify shortcuts. */}
|
|
196
193
|
<div className='flex gap-1'>
|
|
197
|
-
|
|
198
|
-
|
|
194
|
+
{keySymbols(parseShortcut(shortcut)).map((char) => (
|
|
195
|
+
<Key key={char} char={char} />
|
|
196
|
+
))}
|
|
199
197
|
</div>
|
|
200
198
|
</div>
|
|
201
199
|
</StrictMode>,
|
|
202
200
|
);
|
|
203
201
|
};
|
|
204
202
|
|
|
205
|
-
const
|
|
203
|
+
const onRenderLink: LinkOptions['onRender'] = (el, url) => {
|
|
206
204
|
createRoot(el).render(
|
|
207
205
|
<StrictMode>
|
|
208
206
|
<a href={url} target='_blank' rel='noreferrer' className={hover}>
|
|
209
|
-
<ArrowSquareOut weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 mb-
|
|
207
|
+
<ArrowSquareOut weight='bold' className={mx(getSize(4), 'inline-block leading-none mis-1 mb-[2px]')} />
|
|
210
208
|
</a>
|
|
211
209
|
</StrictMode>,
|
|
212
210
|
);
|
|
@@ -214,23 +212,24 @@ const onLinkRender: LinkOptions['onRender'] = (el, url) => {
|
|
|
214
212
|
|
|
215
213
|
type StoryProps = {
|
|
216
214
|
text?: string;
|
|
215
|
+
comments?: Comment[];
|
|
217
216
|
automerge?: boolean;
|
|
218
|
-
} & Pick<TextEditorProps, '
|
|
217
|
+
} & Pick<TextEditorProps, 'readonly' | 'placeholder' | 'slots' | 'extensions'>;
|
|
219
218
|
|
|
220
|
-
const Story = ({ text, automerge, ...props }: StoryProps) => {
|
|
221
|
-
const ref = useRef<TextEditorRef>(null);
|
|
219
|
+
const Story = ({ text, comments, automerge, placeholder = 'New document.', ...props }: StoryProps) => {
|
|
222
220
|
const [item] = useState({ text: new TextObject(text, undefined, undefined, { automerge }) });
|
|
221
|
+
const view = useRef<EditorView>(null);
|
|
223
222
|
const model = useTextModel({ text: item.text });
|
|
223
|
+
useComments(view.current, comments);
|
|
224
224
|
if (!model) {
|
|
225
225
|
return null;
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
return (
|
|
229
229
|
<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>
|
|
230
|
+
<div className='flex h-full justify-center'>
|
|
231
|
+
<div className='flex flex-col h-full w-[800px]'>
|
|
232
|
+
<MarkdownEditor ref={view} model={model} placeholder={placeholder} {...props} />
|
|
234
233
|
</div>
|
|
235
234
|
</div>
|
|
236
235
|
</div>
|
|
@@ -244,83 +243,85 @@ export default {
|
|
|
244
243
|
render: Story,
|
|
245
244
|
};
|
|
246
245
|
|
|
247
|
-
const
|
|
246
|
+
const defaults = [
|
|
248
247
|
autocomplete({
|
|
249
248
|
onSearch: (text) => links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase())),
|
|
250
249
|
}),
|
|
251
250
|
code(),
|
|
252
251
|
hr(),
|
|
253
252
|
image(),
|
|
254
|
-
link({ onRender:
|
|
253
|
+
link({ onRender: onRenderLink, onHover: onHoverLinkTooltip }),
|
|
254
|
+
// mention({
|
|
255
|
+
// onSearch: (text) => names.filter((name) => name.toLowerCase().startsWith(text.toLowerCase())),
|
|
256
|
+
// }),
|
|
255
257
|
table(),
|
|
256
258
|
tasklist(),
|
|
257
|
-
tooltip({ onHover: onTooltipHover }),
|
|
258
259
|
];
|
|
259
260
|
|
|
260
261
|
export const Default = {
|
|
261
|
-
render: () => <Story text={document} extensions={
|
|
262
|
+
render: () => <Story text={document} extensions={defaults} />,
|
|
262
263
|
};
|
|
263
264
|
|
|
264
265
|
export const Readonly = {
|
|
265
|
-
render: () => <Story text={document} extensions={
|
|
266
|
+
render: () => <Story text={document} extensions={defaults} readonly />,
|
|
266
267
|
};
|
|
267
268
|
|
|
268
269
|
export const NoExtensions = {
|
|
269
270
|
render: () => <Story text={document} />,
|
|
270
271
|
};
|
|
271
272
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
text={str('# Horizontal Rule', '', text.paragraphs, '---', '', text.paragraphs, '---', '', text.paragraphs)}
|
|
277
|
-
extensions={[hr()]}
|
|
278
|
-
/>
|
|
279
|
-
),
|
|
273
|
+
const large = faker.helpers.multiple(() => faker.lorem.paragraph({ min: 8, max: 16 }), { count: 20 }).join('\n\n');
|
|
274
|
+
|
|
275
|
+
export const Empty = {
|
|
276
|
+
render: () => <Story />,
|
|
280
277
|
};
|
|
281
278
|
|
|
282
|
-
export const
|
|
283
|
-
render: () => <Story text={str(
|
|
279
|
+
export const Scrolling = {
|
|
280
|
+
render: () => <Story text={str('# Large Document', '', large)} extensions={[]} />,
|
|
284
281
|
};
|
|
285
282
|
|
|
286
283
|
export const Links = {
|
|
287
|
-
render: () =>
|
|
284
|
+
render: () => (
|
|
285
|
+
<Story
|
|
286
|
+
text={str(text.links, text.footer)}
|
|
287
|
+
extensions={[link({ onHover: onHoverLinkTooltip, onRender: onRenderLink })]}
|
|
288
|
+
/>
|
|
289
|
+
),
|
|
288
290
|
};
|
|
289
291
|
|
|
290
292
|
export const Code = {
|
|
291
293
|
render: () => <Story text={str(text.code, text.footer)} extensions={[code()]} readonly />,
|
|
292
294
|
};
|
|
293
295
|
|
|
294
|
-
export const Table = {
|
|
295
|
-
render: () => <Story text={str(text.table, text.footer)} extensions={[table()]} />,
|
|
296
|
-
};
|
|
297
|
-
|
|
298
296
|
export const Image = {
|
|
299
297
|
render: () => <Story text={str(text.image, text.footer)} readonly extensions={[image()]} />,
|
|
300
298
|
};
|
|
301
299
|
|
|
302
|
-
export const
|
|
300
|
+
export const Lists = {
|
|
303
301
|
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
|
-
/>
|
|
302
|
+
<Story text={str(text.tasks, '', text.list, '', text.numbered, text.footer)} extensions={[tasklist()]} />
|
|
315
303
|
),
|
|
316
304
|
};
|
|
317
305
|
|
|
306
|
+
export const Table = {
|
|
307
|
+
render: () => <Story text={str(text.table, text.footer)} extensions={[table()]} />,
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
// export const Outliner = {
|
|
311
|
+
// render: () => (
|
|
312
|
+
// <Story
|
|
313
|
+
// text={str('# Outliner', '', 'Block', ': this is a block', ': with multiple lines', text.footer)}
|
|
314
|
+
// extensions={[outliner()]}
|
|
315
|
+
// />
|
|
316
|
+
// ),
|
|
317
|
+
// };
|
|
318
|
+
|
|
318
319
|
export const Autocomplete = {
|
|
319
320
|
render: () => (
|
|
320
321
|
<Story
|
|
321
|
-
text={str('# Autocomplete', '', 'Press
|
|
322
|
+
text={str('# Autocomplete', '', 'Press Ctrl-Space...', text.footer)}
|
|
322
323
|
extensions={[
|
|
323
|
-
link({ onRender:
|
|
324
|
+
link({ onRender: onRenderLink }),
|
|
324
325
|
autocomplete({
|
|
325
326
|
onSearch: (text) => links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase())),
|
|
326
327
|
}),
|
|
@@ -329,8 +330,6 @@ export const Autocomplete = {
|
|
|
329
330
|
),
|
|
330
331
|
};
|
|
331
332
|
|
|
332
|
-
const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
|
|
333
|
-
|
|
334
333
|
export const Mention = {
|
|
335
334
|
render: () => (
|
|
336
335
|
<Story
|
|
@@ -344,24 +343,20 @@ export const Mention = {
|
|
|
344
343
|
),
|
|
345
344
|
};
|
|
346
345
|
|
|
347
|
-
export const Mermaid = {
|
|
348
|
-
render: () => <Story text={str('# Mermaid', '', text.mermaid, text.footer)} extensions={[code(), mermaid()]} />,
|
|
349
|
-
};
|
|
350
|
-
|
|
351
346
|
export const Comments = {
|
|
352
347
|
render: () => {
|
|
353
|
-
const [
|
|
348
|
+
const [commentRanges, setCommentRanges] = useState<Comment[]>([]);
|
|
354
349
|
|
|
355
350
|
return (
|
|
356
351
|
<Story
|
|
357
352
|
text={str('# Comments', '', text.paragraphs, text.footer)}
|
|
358
|
-
comments={
|
|
353
|
+
comments={commentRanges}
|
|
359
354
|
extensions={[
|
|
360
355
|
comments({
|
|
361
356
|
onHover: onCommentsHover,
|
|
362
|
-
onCreate: (
|
|
357
|
+
onCreate: (range) => {
|
|
363
358
|
const id = PublicKey.random().toHex();
|
|
364
|
-
|
|
359
|
+
setCommentRanges((commentRanges) => [...commentRanges, { id, cursor: range }]);
|
|
365
360
|
return id;
|
|
366
361
|
},
|
|
367
362
|
onSelect: (state) => {
|
|
@@ -370,9 +365,9 @@ export const Comments = {
|
|
|
370
365
|
console.log(
|
|
371
366
|
'update',
|
|
372
367
|
JSON.stringify({
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
368
|
+
comments: state.comments.length,
|
|
369
|
+
active: state.selection.current?.slice(0, 8),
|
|
370
|
+
closest: state.selection.closest?.slice(0, 8),
|
|
376
371
|
}),
|
|
377
372
|
);
|
|
378
373
|
}
|
|
@@ -384,8 +379,24 @@ export const Comments = {
|
|
|
384
379
|
},
|
|
385
380
|
};
|
|
386
381
|
|
|
382
|
+
export const HorizontalRule = {
|
|
383
|
+
render: () => (
|
|
384
|
+
<Story
|
|
385
|
+
text={str('# Horizontal Rule', '', text.paragraphs, '---', text.paragraphs, '---', text.paragraphs)}
|
|
386
|
+
extensions={[hr()]}
|
|
387
|
+
/>
|
|
388
|
+
),
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
const typewriterItems = localStorage.getItem('dxos.org/plugin/markdown/typewriter')?.split(',');
|
|
392
|
+
|
|
387
393
|
export const Typewriter = {
|
|
388
|
-
render: () =>
|
|
394
|
+
render: () => (
|
|
395
|
+
<Story
|
|
396
|
+
text={str('# Typewriter', '', text.paragraphs, text.footer)}
|
|
397
|
+
extensions={[typewriter({ items: typewriterItems })]}
|
|
398
|
+
/>
|
|
399
|
+
),
|
|
389
400
|
};
|
|
390
401
|
|
|
391
402
|
export const Blast = {
|
|
@@ -393,9 +404,7 @@ export const Blast = {
|
|
|
393
404
|
<Story
|
|
394
405
|
text={str('# Blast', '', text.paragraphs, text.code, text.paragraphs)}
|
|
395
406
|
extensions={[
|
|
396
|
-
typewriter({
|
|
397
|
-
items: localStorage.getItem('dxos.composer.extension.demo')?.split(','),
|
|
398
|
-
}),
|
|
407
|
+
typewriter({ items: typewriterItems }),
|
|
399
408
|
blast(
|
|
400
409
|
defaultsDeep(
|
|
401
410
|
{
|
|
@@ -412,17 +421,3 @@ export const Blast = {
|
|
|
412
421
|
/>
|
|
413
422
|
),
|
|
414
423
|
};
|
|
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
|
};
|