@dxos/react-ui-editor 0.4.5-main.f8d6c4e → 0.4.5

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 (58) hide show
  1. package/dist/lib/browser/index.mjs +464 -572
  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 +7 -5
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +2 -0
  7. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/automerge.stories.d.ts +2 -0
  9. package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/TextEditor/hooks.stories.d.ts +2 -0
  11. package/dist/types/src/components/TextEditor/hooks.stories.d.ts.map +1 -1
  12. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  13. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +2 -0
  14. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  15. package/dist/types/src/extensions/cursor-line-margin.d.ts +8 -0
  16. package/dist/types/src/extensions/cursor-line-margin.d.ts.map +1 -0
  17. package/dist/types/src/extensions/index.d.ts +1 -0
  18. package/dist/types/src/extensions/index.d.ts.map +1 -1
  19. package/dist/types/src/extensions/markdown/decorate.d.ts +5 -0
  20. package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -0
  21. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  22. package/dist/types/src/extensions/markdown/index.d.ts +1 -4
  23. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -1
  24. package/dist/types/src/extensions/markdown/link.d.ts +1 -11
  25. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
  26. package/dist/types/src/index.d.ts +2 -0
  27. package/dist/types/src/index.d.ts.map +1 -1
  28. package/dist/types/src/styles/layout.d.ts +2 -2
  29. package/dist/types/src/styles/layout.d.ts.map +1 -1
  30. package/dist/types/src/translations.d.ts +2 -0
  31. package/dist/types/src/translations.d.ts.map +1 -1
  32. package/package.json +29 -26
  33. package/src/components/TextEditor/MarkdownEditor.stories.tsx +29 -37
  34. package/src/components/TextEditor/hooks.stories.tsx +5 -17
  35. package/src/components/Toolbar/Toolbar.stories.tsx +4 -7
  36. package/src/components/Toolbar/Toolbar.tsx +79 -47
  37. package/src/extensions/cursor-line-margin.ts +92 -0
  38. package/src/extensions/index.ts +1 -0
  39. package/src/extensions/markdown/decorate.ts +301 -0
  40. package/src/extensions/markdown/formatting.test.ts +17 -0
  41. package/src/extensions/markdown/formatting.ts +67 -76
  42. package/src/extensions/markdown/index.ts +1 -4
  43. package/src/extensions/markdown/link.ts +23 -185
  44. package/src/index.ts +2 -0
  45. package/src/styles/layout.ts +3 -2
  46. package/src/translations.ts +5 -3
  47. package/dist/types/src/extensions/markdown/code.d.ts +0 -2
  48. package/dist/types/src/extensions/markdown/code.d.ts.map +0 -1
  49. package/dist/types/src/extensions/markdown/heading.d.ts +0 -6
  50. package/dist/types/src/extensions/markdown/heading.d.ts.map +0 -1
  51. package/dist/types/src/extensions/markdown/hr.d.ts +0 -2
  52. package/dist/types/src/extensions/markdown/hr.d.ts.map +0 -1
  53. package/dist/types/src/extensions/markdown/tasklist.d.ts +0 -3
  54. package/dist/types/src/extensions/markdown/tasklist.d.ts.map +0 -1
  55. package/src/extensions/markdown/code.ts +0 -162
  56. package/src/extensions/markdown/heading.ts +0 -59
  57. package/src/extensions/markdown/hr.ts +0 -71
  58. package/src/extensions/markdown/tasklist.ts +0 -110
@@ -1,110 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { syntaxTree } from '@codemirror/language';
6
- import { RangeSetBuilder } from '@codemirror/state';
7
- import { EditorView, Decoration, WidgetType, ViewPlugin, type DecorationSet, type ViewUpdate } from '@codemirror/view';
8
-
9
- import { getToken } from '../../styles';
10
-
11
- // TODO(burdon): Reconcile with theme.
12
- const styles = EditorView.baseTheme({
13
- '& .cm-task': {
14
- color: getToken('extend.colors.blue.500'),
15
- },
16
- '& .cm-task-checkbox': {
17
- marginLeft: '4px',
18
- marginRight: '4px',
19
- },
20
- });
21
-
22
- class CheckboxWidget extends WidgetType {
23
- constructor(private _checked: boolean) {
24
- super();
25
- }
26
-
27
- override eq(other: this) {
28
- return this._checked === other._checked;
29
- }
30
-
31
- override toDOM(view: EditorView) {
32
- const input = document.createElement('input');
33
- input.className = 'cm-task-checkbox';
34
- input.type = 'checkbox';
35
- input.checked = this._checked;
36
- if (view.state.readOnly) {
37
- input.setAttribute('disabled', 'true');
38
- } else {
39
- input.onmousedown = (event: Event) => {
40
- const pos = view.posAtDOM(input);
41
- const text = view.state.sliceDoc(pos, pos + 3);
42
- if (text === (this._checked ? '[x]' : '[ ]')) {
43
- view.dispatch({
44
- changes: { from: pos + 1, to: pos + 2, insert: this._checked ? ' ' : 'x' },
45
- });
46
- event.preventDefault();
47
- }
48
- };
49
- }
50
-
51
- return input;
52
- }
53
-
54
- override ignoreEvent() {
55
- return false;
56
- }
57
- }
58
-
59
- const checkedDecoration = Decoration.replace({ widget: new CheckboxWidget(true) });
60
- const uncheckedDecoration = Decoration.replace({ widget: new CheckboxWidget(false) });
61
-
62
- const buildDecorations = (view: EditorView): DecorationSet => {
63
- const builder = new RangeSetBuilder<Decoration>();
64
- const { state } = view;
65
- const cursor = state.selection.main.head;
66
-
67
- for (const { from, to } of view.visibleRanges) {
68
- syntaxTree(state).iterate({
69
- enter: (node) => {
70
- if (node.name === 'TaskMarker') {
71
- // Check if cursor is inside text.
72
- if (cursor < node.from || cursor > node.to) {
73
- const checked = state.doc.sliceString(node.from + 1, node.to - 1) === 'x';
74
- builder.add(node.from - 2, node.from - 1, Decoration.mark({ class: 'cm-task' }));
75
- builder.add(node.from, node.to, checked ? checkedDecoration : uncheckedDecoration);
76
- }
77
- }
78
- },
79
- from,
80
- to,
81
- });
82
- }
83
-
84
- return builder.finish();
85
- };
86
-
87
- export type TasklistOptions = {};
88
-
89
- export const tasklist = (options: TasklistOptions = {}) => {
90
- return [
91
- ViewPlugin.fromClass(
92
- class {
93
- decorations: DecorationSet;
94
- constructor(view: EditorView) {
95
- this.decorations = buildDecorations(view);
96
- }
97
-
98
- update(update: ViewUpdate) {
99
- if (update.docChanged || update.viewportChanged || update.selectionSet) {
100
- this.decorations = buildDecorations(update.view);
101
- }
102
- }
103
- },
104
- {
105
- decorations: (value) => value.decorations,
106
- },
107
- ),
108
- styles,
109
- ];
110
- };