@dxos/react-ui-editor 0.3.10 → 0.3.11-main.bd26370

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 (82) hide show
  1. package/dist/lib/browser/index.mjs +1928 -1717
  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 +16 -9
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +2 -1
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/extensions/code.d.ts.map +1 -1
  9. package/dist/types/src/components/TextEditor/extensions/comments.d.ts +38 -8
  10. package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +1 -1
  11. package/dist/types/src/components/TextEditor/extensions/hr.d.ts +2 -0
  12. package/dist/types/src/components/TextEditor/extensions/hr.d.ts.map +1 -0
  13. package/dist/types/src/components/TextEditor/extensions/index.d.ts +3 -2
  14. package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +1 -1
  15. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts +0 -1
  16. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +1 -1
  17. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts +3 -0
  18. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts.map +1 -0
  19. package/dist/types/src/components/TextEditor/extensions/table.d.ts.map +1 -1
  20. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts.map +1 -1
  21. package/dist/types/src/components/TextEditor/extensions/{demo.d.ts → typewriter.d.ts} +2 -3
  22. package/dist/types/src/components/TextEditor/extensions/typewriter.d.ts.map +1 -0
  23. package/dist/types/src/components/TextEditor/extensions/util.d.ts +5 -0
  24. package/dist/types/src/components/TextEditor/extensions/util.d.ts.map +1 -0
  25. package/dist/types/src/components/TextEditor/themes/default.d.ts +5 -13
  26. package/dist/types/src/components/TextEditor/themes/default.d.ts.map +1 -1
  27. package/dist/types/src/hooks/automerge/automerge.stories.d.ts +2 -3
  28. package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +1 -1
  29. package/dist/types/src/hooks/automerge/plugin.d.ts.map +1 -1
  30. package/dist/types/src/hooks/automerge/{PatchSemaphore.d.ts → semaphore.d.ts} +1 -1
  31. package/dist/types/src/hooks/automerge/semaphore.d.ts.map +1 -0
  32. package/dist/types/src/hooks/automerge/update-automerge.d.ts +6 -0
  33. package/dist/types/src/hooks/automerge/update-automerge.d.ts.map +1 -0
  34. package/dist/types/src/hooks/automerge/update-codemirror.d.ts +5 -0
  35. package/dist/types/src/hooks/automerge/update-codemirror.d.ts.map +1 -0
  36. package/dist/types/src/hooks/useTextModel.d.ts +14 -6
  37. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  38. package/dist/types/src/hooks/yjs/yjs.test.d.ts +2 -0
  39. package/dist/types/src/hooks/yjs/yjs.test.d.ts.map +1 -0
  40. package/dist/types/src/index.d.ts +1 -0
  41. package/dist/types/src/index.d.ts.map +1 -1
  42. package/dist/types/src/testing/replicator.d.ts.map +1 -1
  43. package/package.json +24 -20
  44. package/src/components/TextEditor/MarkdownEditor.stories.tsx +128 -67
  45. package/src/components/TextEditor/TextEditor.stories.tsx +1 -1
  46. package/src/components/TextEditor/TextEditor.tsx +26 -22
  47. package/src/components/TextEditor/extensions/code.ts +12 -12
  48. package/src/components/TextEditor/extensions/comments.ts +307 -92
  49. package/src/components/TextEditor/extensions/hr.ts +74 -0
  50. package/src/components/TextEditor/extensions/image.ts +3 -1
  51. package/src/components/TextEditor/extensions/index.ts +3 -2
  52. package/src/components/TextEditor/extensions/markdown/highlight.ts +5 -8
  53. package/src/components/TextEditor/extensions/mermaid.ts +11 -0
  54. package/src/components/TextEditor/extensions/table.ts +14 -1
  55. package/src/components/TextEditor/extensions/{tooltip.tsx → tooltip.ts} +1 -1
  56. package/src/components/TextEditor/extensions/{demo.ts → typewriter.ts} +1 -2
  57. package/src/components/TextEditor/extensions/util.ts +18 -0
  58. package/src/components/TextEditor/themes/default.ts +61 -38
  59. package/src/hooks/automerge/automerge.stories.tsx +2 -3
  60. package/src/hooks/automerge/plugin.ts +1 -1
  61. package/src/hooks/automerge/{PatchSemaphore.ts → semaphore.ts} +4 -3
  62. package/src/hooks/automerge/{translation/codemirror-to-automerge.ts → update-automerge.ts} +3 -3
  63. package/src/hooks/automerge/{translation/automerge-to-codemirror.ts → update-codemirror.ts} +2 -7
  64. package/src/hooks/useTextModel.ts +59 -22
  65. package/src/hooks/yjs/yjs.test.ts +59 -0
  66. package/src/index.ts +1 -0
  67. package/src/testing/replicator.ts +0 -1
  68. package/dist/types/src/components/TextEditor/extensions/demo.d.ts.map +0 -1
  69. package/dist/types/src/components/TextEditor/extensions/experimental.d.ts +0 -10
  70. package/dist/types/src/components/TextEditor/extensions/experimental.d.ts.map +0 -1
  71. package/dist/types/src/components/TextEditor/extensions/highlight.d.ts +0 -24
  72. package/dist/types/src/components/TextEditor/extensions/highlight.d.ts.map +0 -1
  73. package/dist/types/src/hooks/automerge/PatchSemaphore.d.ts.map +0 -1
  74. package/dist/types/src/hooks/automerge/translation/automerge-to-codemirror.d.ts +0 -5
  75. package/dist/types/src/hooks/automerge/translation/automerge-to-codemirror.d.ts.map +0 -1
  76. package/dist/types/src/hooks/automerge/translation/codemirror-to-automerge.d.ts +0 -6
  77. package/dist/types/src/hooks/automerge/translation/codemirror-to-automerge.d.ts.map +0 -1
  78. package/dist/types/src/hooks/automerge/translation/index.d.ts +0 -3
  79. package/dist/types/src/hooks/automerge/translation/index.d.ts.map +0 -1
  80. package/src/components/TextEditor/extensions/experimental.tsx +0 -114
  81. package/src/components/TextEditor/extensions/highlight.ts +0 -128
  82. package/src/hooks/automerge/translation/index.ts +0 -6
@@ -1 +0,0 @@
1
- {"version":3,"file":"codemirror-to-automerge.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/automerge/translation/codemirror-to-automerge.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,WAAW,EAAa,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElF,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,eAAO,MAAM,qBAAqB,yBAExB,UAAU,gBACJ,WAAW,EAAE,SACpB,WAAW,KACjB,KAAK,GAAG,SAyBV,CAAC"}
@@ -1,3 +0,0 @@
1
- export * from './automerge-to-codemirror';
2
- export * from './codemirror-to-automerge';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/automerge/translation/index.ts"],"names":[],"mappings":"AAIA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC"}
@@ -1,114 +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
- // TODO(burdon): Reconcile with theme.
17
- export const styles = EditorView.baseTheme({
18
- '.cm-hyperlink-label': {
19
- cursor: 'pointer',
20
- textDecoration: 'underline',
21
- },
22
- '.cm-hyperlink-bracket': {
23
- opacity: 0.2,
24
- },
25
- '.cm-hyperlink-url': {
26
- opacity: 0.5,
27
- fontFamily: 'monospace',
28
- },
29
- });
30
-
31
- const markdownLinkRegexp = /\[([^\]]+)]\(([^)]+)\)(!?)/gi;
32
-
33
- /**
34
- * Custom link decorator.
35
- * NOTE: The default markdown extension formats links by default.
36
- * @deprecated
37
- */
38
- const linkDecorator = () =>
39
- new MatchDecorator({
40
- regexp: markdownLinkRegexp,
41
- decorate: (add, from, to, match, view) => {
42
- const [_, label, url] = match;
43
- const p0 = {
44
- start: from,
45
- end: from + 1,
46
- };
47
-
48
- const p1 = {
49
- start: from + 1,
50
- end: from + 1 + label.length,
51
- };
52
-
53
- const p2 = {
54
- start: p1.end,
55
- end: p1.end + 1,
56
- };
57
-
58
- const p3 = {
59
- start: p1.end + 1,
60
- end: p1.end + 1 + url.length + 2,
61
- };
62
-
63
- add(
64
- p0.start,
65
- p0.end,
66
- Decoration.mark({ class: 'cm-hyperlink-bracket', _attributes: { style: 'display: none' } }),
67
- );
68
- add(p1.start, p1.end, Decoration.mark({ class: 'cm-hyperlink-label' }));
69
- add(
70
- p2.start,
71
- p2.end,
72
- Decoration.mark({ class: 'cm-hyperlink-bracket', _attributes: { style: 'display: none' } }),
73
- );
74
- add(p3.start, p3.end, Decoration.mark({ class: 'cm-hyperlink-url', _attributes: { style: 'display: none' } }));
75
- },
76
- });
77
-
78
- export function hyperLinkExtension() {
79
- return ViewPlugin.fromClass(
80
- class HyperLinkView {
81
- readonly decorator: MatchDecorator;
82
- decorations: DecorationSet;
83
- constructor(view: EditorView) {
84
- this.decorator = linkDecorator();
85
- this.decorations = this.decorator.createDeco(view);
86
- }
87
-
88
- update(update: ViewUpdate) {
89
- if (update.docChanged || update.viewportChanged) {
90
- this.decorations = this.decorator.updateDeco(update, this.decorations);
91
- }
92
- }
93
- },
94
- {
95
- decorations: (value) => value.decorations,
96
- eventHandlers: {
97
- // TODO(burdon): CLick to expand link.
98
- // https://discuss.codemirror.net/t/decorator-iteration-on-click-event/4226/2
99
- mousedown: function (event, view) {
100
- const pos = view.posAtDOM(event.target as Node);
101
- if (pos !== 0) {
102
- console.log(this);
103
- }
104
- },
105
- // TODO(burdon): Hide when cursor moves away.
106
- keydown: (event, view) => {
107
- view.update([]);
108
- },
109
- },
110
- },
111
- );
112
- }
113
-
114
- export const hyperlinkWidget: Extension = [hyperLinkExtension(), styles];
@@ -1,128 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { type Extension, StateEffect, StateField } from '@codemirror/state';
6
- import { Decoration, EditorView } from '@codemirror/view';
7
- import sortBy from 'lodash.sortby';
8
- import { useEffect } from 'react';
9
-
10
- import { type DocumentRange } from '../../../hooks';
11
-
12
- // TODO(burdon): Detect click, or cursor proximity.
13
-
14
- // TODO(burdon): Reconcile with theme.
15
- const styles = EditorView.baseTheme({
16
- '& .cm-highlight': {
17
- backgroundColor: 'yellow', // TODO(burdon): Reconcile with tailwind theme.
18
- },
19
- '& .cm-highlight::before': {
20
- content: ']',
21
- },
22
- '& .cm-highlight-active': {
23
- backgroundColor: 'lime',
24
- },
25
- });
26
-
27
- const marks = {
28
- highlight: Decoration.mark({ class: 'cm-highlight' }),
29
- HighlightActive: Decoration.mark({ class: 'cm-highlight-active' }),
30
- };
31
-
32
- type HighlightRange = DocumentRange & { active?: boolean };
33
-
34
- // TODO(burdon): Make configurable to support multiple layers.
35
- const setHighlights = StateEffect.define<HighlightRange[]>();
36
-
37
- /**
38
- * Update field set.
39
- */
40
- // TODO(burdon): Reconcile range from data model, vs. in-markdown characters.
41
- export const useHighlights = (view: EditorView | undefined, ranges: HighlightRange[] = []) => {
42
- useEffect(() => {
43
- view?.dispatch({
44
- effects: setHighlights.of(ranges),
45
- });
46
- }, [view, ranges]);
47
- };
48
-
49
- /**
50
- * State field that tracks highlight ranges.
51
- */
52
- export const highlightStateField = StateField.define<HighlightRange[]>({
53
- create: () => [],
54
- update: (threads, tr) => {
55
- for (const effect of tr.effects) {
56
- if (effect.is(setHighlights)) {
57
- return effect.value;
58
- }
59
- }
60
-
61
- return threads;
62
- },
63
- });
64
-
65
- /**
66
- * Decorate ranges.
67
- */
68
- // TODO(burdon): Pass in field to make reusable (e.g., comments, search).
69
- export const highlightDecorations = EditorView.decorations.compute([highlightStateField], (state) => {
70
- const selectionRanges = state.field(highlightStateField);
71
- const decorations =
72
- sortBy(selectionRanges ?? [], (selection) => selection.from)?.flatMap((selection) => {
73
- const range = { from: selection.from, to: selection.to + 1 };
74
- if (selection.to > selection.from) {
75
- if (selection.active) {
76
- return marks.HighlightActive.range(range.from, range.to);
77
- } else {
78
- return marks.highlight.range(range.from, range.to);
79
- }
80
- } else {
81
- return [];
82
- }
83
- }) ?? [];
84
-
85
- return Decoration.set(decorations);
86
- });
87
-
88
- // TODO(burdon): Use current range to create comment.
89
- // TODO(burdon): Allow/prevent overlapping?
90
-
91
- /**
92
- * Track cursor entering and existing ranges.
93
- */
94
- const listener = (options: HighlightOptions) => {
95
- return EditorView.updateListener.of((update) => {
96
- const { view, state } = update;
97
- const { /* from, to, */ head } = state.selection.main;
98
- const ranges = state.field(highlightStateField);
99
-
100
- // TODO(burdon): Modify range if editing.
101
- // console.log('::::', update);
102
-
103
- // Set active.
104
- let mod = false;
105
- const newRanges = ranges.map((range) => {
106
- const active = head >= range.from && head <= range.to;
107
- if (active !== range.active) {
108
- mod = true;
109
- return { ...range, active };
110
- } else {
111
- return range;
112
- }
113
- });
114
-
115
- if (mod) {
116
- view.dispatch({ effects: setHighlights.of(newRanges) });
117
- options?.onChange?.(newRanges.find((range) => range.active)?.id);
118
- }
119
- });
120
- };
121
-
122
- export type HighlightOptions = {
123
- onChange?: (active?: string) => {};
124
- };
125
-
126
- export const highlight = (options: HighlightOptions = {}): Extension => {
127
- return [highlightStateField, highlightDecorations, listener(options), styles];
128
- };
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './automerge-to-codemirror';
6
- export * from './codemirror-to-automerge';