@react-x11/components 0.8.0 → 0.9.0
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/README.md +95 -34
- package/dist/charts/node.d.ts +1 -1
- package/dist/charts/node.d.ts.map +1 -1
- package/dist/charts/node.js +6 -2
- package/dist/charts/node.js.map +1 -1
- package/dist/embed/client.d.ts +48 -3
- package/dist/embed/client.d.ts.map +1 -1
- package/dist/embed/client.js +79 -5
- package/dist/embed/client.js.map +1 -1
- package/dist/embed/index.d.ts +1 -1
- package/dist/embed/index.d.ts.map +1 -1
- package/dist/embed/index.js +1 -1
- package/dist/embed/index.js.map +1 -1
- package/dist/html/node.d.ts +3 -1
- package/dist/html/node.d.ts.map +1 -1
- package/dist/html/node.js +7 -5
- package/dist/html/node.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{markdown → internal/markdown}/ast.d.ts +12 -0
- package/dist/internal/markdown/ast.d.ts.map +1 -0
- package/dist/internal/markdown/ast.js +22 -0
- package/dist/internal/markdown/ast.js.map +1 -0
- package/dist/internal/markdown/parse.d.ts.map +1 -0
- package/dist/{markdown → internal/markdown}/parse.js +112 -22
- package/dist/internal/markdown/parse.js.map +1 -0
- package/dist/internal/markdown/stringify.d.ts +4 -0
- package/dist/internal/markdown/stringify.d.ts.map +1 -0
- package/dist/internal/markdown/stringify.js +684 -0
- package/dist/internal/markdown/stringify.js.map +1 -0
- package/dist/internal/markdown/tags.d.ts.map +1 -0
- package/dist/internal/markdown/tags.js.map +1 -0
- package/dist/internal/scroll.d.ts +3 -2
- package/dist/internal/scroll.d.ts.map +1 -1
- package/dist/internal/scroll.js +1 -0
- package/dist/internal/scroll.js.map +1 -1
- package/dist/maps/anchors.d.ts +98 -0
- package/dist/maps/anchors.d.ts.map +1 -0
- package/dist/maps/anchors.js +531 -0
- package/dist/maps/anchors.js.map +1 -0
- package/dist/maps/controller.d.ts +283 -0
- package/dist/maps/controller.d.ts.map +1 -0
- package/dist/maps/controller.js +743 -0
- package/dist/maps/controller.js.map +1 -0
- package/dist/maps/gl/buckets.d.ts +95 -0
- package/dist/maps/gl/buckets.d.ts.map +1 -0
- package/dist/maps/gl/buckets.js +362 -0
- package/dist/maps/gl/buckets.js.map +1 -0
- package/dist/maps/gl/build-worker.d.ts +13 -0
- package/dist/maps/gl/build-worker.d.ts.map +1 -0
- package/dist/maps/gl/build-worker.js +44 -0
- package/dist/maps/gl/build-worker.js.map +1 -0
- package/dist/maps/gl/color.d.ts +8 -0
- package/dist/maps/gl/color.d.ts.map +1 -0
- package/dist/maps/gl/color.js +57 -0
- package/dist/maps/gl/color.js.map +1 -0
- package/dist/maps/gl/cover.d.ts +51 -0
- package/dist/maps/gl/cover.d.ts.map +1 -0
- package/dist/maps/gl/cover.js +124 -0
- package/dist/maps/gl/cover.js.map +1 -0
- package/dist/maps/gl/index.d.ts +3 -0
- package/dist/maps/gl/index.d.ts.map +1 -0
- package/dist/maps/gl/index.js +20 -0
- package/dist/maps/gl/index.js.map +1 -0
- package/dist/maps/gl/markers.d.ts +28 -0
- package/dist/maps/gl/markers.d.ts.map +1 -0
- package/dist/maps/gl/markers.js +60 -0
- package/dist/maps/gl/markers.js.map +1 -0
- package/dist/maps/gl/overlays.d.ts +68 -0
- package/dist/maps/gl/overlays.d.ts.map +1 -0
- package/dist/maps/gl/overlays.js +300 -0
- package/dist/maps/gl/overlays.js.map +1 -0
- package/dist/maps/gl/pane.d.ts +12 -0
- package/dist/maps/gl/pane.d.ts.map +1 -0
- package/dist/maps/gl/pane.js +37 -0
- package/dist/maps/gl/pane.js.map +1 -0
- package/dist/maps/gl/placement.d.ts +111 -0
- package/dist/maps/gl/placement.d.ts.map +1 -0
- package/dist/maps/gl/placement.js +567 -0
- package/dist/maps/gl/placement.js.map +1 -0
- package/dist/maps/gl/renderer.d.ts +352 -0
- package/dist/maps/gl/renderer.d.ts.map +1 -0
- package/dist/maps/gl/renderer.js +1127 -0
- package/dist/maps/gl/renderer.js.map +1 -0
- package/dist/maps/gl/shaders.d.ts +120 -0
- package/dist/maps/gl/shaders.d.ts.map +1 -0
- package/dist/maps/gl/shaders.js +451 -0
- package/dist/maps/gl/shaders.js.map +1 -0
- package/dist/maps/gl/store.d.ts +115 -0
- package/dist/maps/gl/store.d.ts.map +1 -0
- package/dist/maps/gl/store.js +469 -0
- package/dist/maps/gl/store.js.map +1 -0
- package/dist/maps/gl/text.d.ts +154 -0
- package/dist/maps/gl/text.d.ts.map +1 -0
- package/dist/maps/gl/text.js +382 -0
- package/dist/maps/gl/text.js.map +1 -0
- package/dist/maps/gl/view.d.ts +54 -0
- package/dist/maps/gl/view.d.ts.map +1 -0
- package/dist/maps/gl/view.js +974 -0
- package/dist/maps/gl/view.js.map +1 -0
- package/dist/maps/index.d.ts +1 -1
- package/dist/maps/index.d.ts.map +1 -1
- package/dist/maps/index.js +216 -52
- package/dist/maps/index.js.map +1 -1
- package/dist/maps/labels.d.ts +37 -16
- package/dist/maps/labels.d.ts.map +1 -1
- package/dist/maps/labels.js +188 -119
- package/dist/maps/labels.js.map +1 -1
- package/dist/maps/node.d.ts +162 -56
- package/dist/maps/node.d.ts.map +1 -1
- package/dist/maps/node.js +607 -515
- package/dist/maps/node.js.map +1 -1
- package/dist/maps/overlay.d.ts +72 -9
- package/dist/maps/overlay.d.ts.map +1 -1
- package/dist/maps/overlay.js +108 -28
- package/dist/maps/overlay.js.map +1 -1
- package/dist/maps/paint.d.ts +3 -0
- package/dist/maps/paint.d.ts.map +1 -1
- package/dist/maps/paint.js.map +1 -1
- package/dist/maps/proj.d.ts +14 -0
- package/dist/maps/proj.d.ts.map +1 -1
- package/dist/maps/proj.js +28 -0
- package/dist/maps/proj.js.map +1 -1
- package/dist/maps/renderer.d.ts +69 -0
- package/dist/maps/renderer.d.ts.map +1 -0
- package/dist/maps/renderer.js +66 -0
- package/dist/maps/renderer.js.map +1 -0
- package/dist/maps/sources.d.ts +25 -3
- package/dist/maps/sources.d.ts.map +1 -1
- package/dist/maps/sources.js +17 -0
- package/dist/maps/sources.js.map +1 -1
- package/dist/maps/theme.d.ts +19 -0
- package/dist/maps/theme.d.ts.map +1 -0
- package/dist/maps/theme.js +44 -0
- package/dist/maps/theme.js.map +1 -0
- package/dist/maps/tiles.d.ts +117 -17
- package/dist/maps/tiles.d.ts.map +1 -1
- package/dist/maps/tiles.js +163 -30
- package/dist/maps/tiles.js.map +1 -1
- package/dist/maps/types.d.ts +188 -20
- package/dist/maps/types.d.ts.map +1 -1
- package/dist/markdown/expressions.d.ts +1 -1
- package/dist/markdown/expressions.d.ts.map +1 -1
- package/dist/markdown/expressions.js.map +1 -1
- package/dist/markdown/index.d.ts +7 -6
- package/dist/markdown/index.d.ts.map +1 -1
- package/dist/markdown/index.js +9 -7
- package/dist/markdown/index.js.map +1 -1
- package/dist/markdown/spans.d.ts +1 -1
- package/dist/markdown/spans.d.ts.map +1 -1
- package/dist/media-player/index.d.ts +11 -3
- package/dist/media-player/index.d.ts.map +1 -1
- package/dist/media-player/index.js +13 -2
- package/dist/media-player/index.js.map +1 -1
- package/dist/rich-text-editor/clipboard.d.ts +23 -0
- package/dist/rich-text-editor/clipboard.d.ts.map +1 -0
- package/dist/rich-text-editor/clipboard.js +307 -0
- package/dist/rich-text-editor/clipboard.js.map +1 -0
- package/dist/rich-text-editor/collab.d.ts +32 -0
- package/dist/rich-text-editor/collab.d.ts.map +1 -0
- package/dist/rich-text-editor/collab.js +55 -0
- package/dist/rich-text-editor/collab.js.map +1 -0
- package/dist/rich-text-editor/commands.d.ts +50 -0
- package/dist/rich-text-editor/commands.d.ts.map +1 -0
- package/dist/rich-text-editor/commands.js +376 -0
- package/dist/rich-text-editor/commands.js.map +1 -0
- package/dist/rich-text-editor/drag.d.ts +68 -0
- package/dist/rich-text-editor/drag.d.ts.map +1 -0
- package/dist/rich-text-editor/drag.js +148 -0
- package/dist/rich-text-editor/drag.js.map +1 -0
- package/dist/rich-text-editor/html.d.ts +145 -0
- package/dist/rich-text-editor/html.d.ts.map +1 -0
- package/dist/rich-text-editor/html.js +516 -0
- package/dist/rich-text-editor/html.js.map +1 -0
- package/dist/rich-text-editor/index.d.ts +263 -0
- package/dist/rich-text-editor/index.d.ts.map +1 -0
- package/dist/rich-text-editor/index.js +822 -0
- package/dist/rich-text-editor/index.js.map +1 -0
- package/dist/rich-text-editor/inline.d.ts +94 -0
- package/dist/rich-text-editor/inline.d.ts.map +1 -0
- package/dist/rich-text-editor/inline.js +252 -0
- package/dist/rich-text-editor/inline.js.map +1 -0
- package/dist/rich-text-editor/keymap.d.ts +71 -0
- package/dist/rich-text-editor/keymap.d.ts.map +1 -0
- package/dist/rich-text-editor/keymap.js +393 -0
- package/dist/rich-text-editor/keymap.js.map +1 -0
- package/dist/rich-text-editor/keys.d.ts +29 -0
- package/dist/rich-text-editor/keys.d.ts.map +1 -0
- package/dist/rich-text-editor/keys.js +93 -0
- package/dist/rich-text-editor/keys.js.map +1 -0
- package/dist/rich-text-editor/look.d.ts +71 -0
- package/dist/rich-text-editor/look.d.ts.map +1 -0
- package/dist/rich-text-editor/look.js +342 -0
- package/dist/rich-text-editor/look.js.map +1 -0
- package/dist/rich-text-editor/markdown.d.ts +18 -0
- package/dist/rich-text-editor/markdown.d.ts.map +1 -0
- package/dist/rich-text-editor/markdown.js +496 -0
- package/dist/rich-text-editor/markdown.js.map +1 -0
- package/dist/rich-text-editor/nodes.d.ts +135 -0
- package/dist/rich-text-editor/nodes.d.ts.map +1 -0
- package/dist/rich-text-editor/nodes.js +397 -0
- package/dist/rich-text-editor/nodes.js.map +1 -0
- package/dist/rich-text-editor/render.d.ts +68 -0
- package/dist/rich-text-editor/render.d.ts.map +1 -0
- package/dist/rich-text-editor/render.js +500 -0
- package/dist/rich-text-editor/render.js.map +1 -0
- package/dist/rich-text-editor/schema.d.ts +16 -0
- package/dist/rich-text-editor/schema.d.ts.map +1 -0
- package/dist/rich-text-editor/schema.js +386 -0
- package/dist/rich-text-editor/schema.js.map +1 -0
- package/dist/rich-text-editor/store.d.ts +11 -0
- package/dist/rich-text-editor/store.d.ts.map +1 -0
- package/dist/rich-text-editor/store.js +43 -0
- package/dist/rich-text-editor/store.js.map +1 -0
- package/dist/rich-text-editor/suggest.d.ts +127 -0
- package/dist/rich-text-editor/suggest.d.ts.map +1 -0
- package/dist/rich-text-editor/suggest.js +0 -0
- package/dist/rich-text-editor/suggest.js.map +1 -0
- package/dist/rich-text-editor/tables.d.ts +41 -0
- package/dist/rich-text-editor/tables.d.ts.map +1 -0
- package/dist/rich-text-editor/tables.js +204 -0
- package/dist/rich-text-editor/tables.js.map +1 -0
- package/dist/rich-text-editor/toolbar.d.ts +58 -0
- package/dist/rich-text-editor/toolbar.d.ts.map +1 -0
- package/dist/rich-text-editor/toolbar.js +548 -0
- package/dist/rich-text-editor/toolbar.js.map +1 -0
- package/dist/rich-text-editor/view.d.ts +368 -0
- package/dist/rich-text-editor/view.d.ts.map +1 -0
- package/dist/rich-text-editor/view.js +1968 -0
- package/dist/rich-text-editor/view.js.map +1 -0
- package/dist/rich-text-editor/virtual.d.ts +54 -0
- package/dist/rich-text-editor/virtual.d.ts.map +1 -0
- package/dist/rich-text-editor/virtual.js +262 -0
- package/dist/rich-text-editor/virtual.js.map +1 -0
- package/dist/richtext/node.d.ts +25 -2
- package/dist/richtext/node.d.ts.map +1 -1
- package/dist/richtext/node.js +46 -24
- package/dist/richtext/node.js.map +1 -1
- package/dist/terminal/backends.d.ts +4 -1
- package/dist/terminal/backends.d.ts.map +1 -1
- package/dist/terminal/backends.js.map +1 -1
- package/dist/terminal/index.d.ts +18 -7
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/index.js +28 -11
- package/dist/terminal/index.js.map +1 -1
- package/package.json +23 -4
- package/src/charts/node.ts +6 -2
- package/src/embed/client.ts +102 -8
- package/src/embed/index.ts +2 -0
- package/src/html/node.ts +7 -5
- package/src/index.ts +2 -0
- package/src/{markdown → internal/markdown}/ast.ts +24 -7
- package/src/{markdown → internal/markdown}/parse.ts +134 -24
- package/src/internal/markdown/stringify.ts +772 -0
- package/src/internal/scroll.ts +5 -3
- package/src/maps/anchors.ts +607 -0
- package/src/maps/controller.ts +999 -0
- package/src/maps/gl/buckets.ts +457 -0
- package/src/maps/gl/build-worker.ts +55 -0
- package/src/maps/gl/color.ts +62 -0
- package/src/maps/gl/cover.ts +170 -0
- package/src/maps/gl/index.ts +23 -0
- package/src/maps/gl/markers.ts +83 -0
- package/src/maps/gl/overlays.ts +379 -0
- package/src/maps/gl/pane.ts +42 -0
- package/src/maps/gl/placement.ts +816 -0
- package/src/maps/gl/renderer.ts +1576 -0
- package/src/maps/gl/shaders.ts +486 -0
- package/src/maps/gl/store.ts +566 -0
- package/src/maps/gl/text.ts +495 -0
- package/src/maps/gl/view.ts +1224 -0
- package/src/maps/index.ts +270 -81
- package/src/maps/labels.ts +214 -121
- package/src/maps/node.ts +763 -629
- package/src/maps/overlay.ts +148 -43
- package/src/maps/paint.ts +3 -0
- package/src/maps/proj.ts +31 -0
- package/src/maps/renderer.ts +155 -0
- package/src/maps/sources.ts +38 -3
- package/src/maps/theme.ts +51 -0
- package/src/maps/tiles.ts +191 -33
- package/src/maps/types.ts +188 -20
- package/src/markdown/expressions.ts +5 -1
- package/src/markdown/index.ts +14 -11
- package/src/markdown/spans.ts +1 -1
- package/src/media-player/index.ts +18 -4
- package/src/rich-text-editor/clipboard.ts +439 -0
- package/src/rich-text-editor/collab.ts +91 -0
- package/src/rich-text-editor/commands.ts +448 -0
- package/src/rich-text-editor/dom-globals.d.ts +23 -0
- package/src/rich-text-editor/drag.ts +211 -0
- package/src/rich-text-editor/html.ts +619 -0
- package/src/rich-text-editor/index.ts +1331 -0
- package/src/rich-text-editor/inline.ts +345 -0
- package/src/rich-text-editor/keymap.ts +510 -0
- package/src/rich-text-editor/keys.ts +119 -0
- package/src/rich-text-editor/look.ts +427 -0
- package/src/rich-text-editor/markdown.ts +653 -0
- package/src/rich-text-editor/nodes.ts +497 -0
- package/src/rich-text-editor/render.ts +800 -0
- package/src/rich-text-editor/schema.ts +431 -0
- package/src/rich-text-editor/store.ts +39 -0
- package/src/rich-text-editor/suggest.ts +597 -0
- package/src/rich-text-editor/tables.ts +272 -0
- package/src/rich-text-editor/toolbar.ts +724 -0
- package/src/rich-text-editor/view.ts +2287 -0
- package/src/rich-text-editor/virtual.ts +347 -0
- package/src/richtext/node.ts +59 -30
- package/src/terminal/backends.ts +4 -1
- package/src/terminal/index.ts +43 -15
- package/dist/markdown/ast.d.ts.map +0 -1
- package/dist/markdown/ast.js +0 -17
- package/dist/markdown/ast.js.map +0 -1
- package/dist/markdown/parse.d.ts.map +0 -1
- package/dist/markdown/parse.js.map +0 -1
- package/dist/markdown/tags.d.ts.map +0 -1
- package/dist/markdown/tags.js.map +0 -1
- /package/dist/{markdown → internal/markdown}/parse.d.ts +0 -0
- /package/dist/{markdown → internal/markdown}/tags.d.ts +0 -0
- /package/dist/{markdown → internal/markdown}/tags.js +0 -0
- /package/src/{markdown → internal/markdown}/tags.ts +0 -0
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
// Commands for the default document — what the toolbar's buttons run, what
|
|
2
|
+
// the keymap binds, and what an app's own toolbar reaches for.
|
|
3
|
+
//
|
|
4
|
+
// Every one is an ordinary ProseMirror `Command` — `(state, dispatch?, view?)
|
|
5
|
+
// => boolean` — so it composes with prosemirror-commands' own, runs from
|
|
6
|
+
// `handle.run(cmd)`, and answers "could I?" when called without `dispatch`,
|
|
7
|
+
// which is how a toolbar greys a button out. The queries beside them
|
|
8
|
+
// (`isMarkActive`, `isBlockActive`) are how it lights one up.
|
|
9
|
+
import { lift, setBlockType, wrapIn } from 'prosemirror-commands';
|
|
10
|
+
import { liftListItem, splitListItem, wrapInList, } from 'prosemirror-schema-list';
|
|
11
|
+
import { TextSelection } from 'prosemirror-state';
|
|
12
|
+
// --- queries -------------------------------------------------------------------
|
|
13
|
+
/** Whether `type` is on the selection — or, with a bare caret, on what the
|
|
14
|
+
* next character typed would get. */
|
|
15
|
+
export function isMarkActive(state, type) {
|
|
16
|
+
const { from, $from, to, empty } = state.selection;
|
|
17
|
+
if (empty)
|
|
18
|
+
return !!type.isInSet(state.storedMarks ?? $from.marks());
|
|
19
|
+
return state.doc.rangeHasMark(from, to, type);
|
|
20
|
+
}
|
|
21
|
+
/** The attributes of the `type` mark on the selection, if it has one. */
|
|
22
|
+
export function markAttrs(state, type) {
|
|
23
|
+
const { from, to, empty, $from } = state.selection;
|
|
24
|
+
if (empty)
|
|
25
|
+
return type.isInSet(state.storedMarks ?? $from.marks())?.attrs ?? null;
|
|
26
|
+
let found = null;
|
|
27
|
+
state.doc.nodesBetween(from, to, (node) => {
|
|
28
|
+
if (found)
|
|
29
|
+
return false;
|
|
30
|
+
found = type.isInSet(node.marks)?.attrs ?? null;
|
|
31
|
+
return true;
|
|
32
|
+
});
|
|
33
|
+
return found;
|
|
34
|
+
}
|
|
35
|
+
function attrsMatch(node, attrs) {
|
|
36
|
+
if (!attrs)
|
|
37
|
+
return true;
|
|
38
|
+
for (const [k, v] of Object.entries(attrs))
|
|
39
|
+
if (node.attrs[k] !== v)
|
|
40
|
+
return false;
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
/** Whether the selection sits in a `type` node (with `attrs`, when given) —
|
|
44
|
+
* the textblock it is in, or any block around it. */
|
|
45
|
+
export function isBlockActive(state, type, attrs) {
|
|
46
|
+
const { $from, to } = state.selection;
|
|
47
|
+
for (let d = $from.depth; d >= 0; d--) {
|
|
48
|
+
const node = $from.node(d);
|
|
49
|
+
if (node.type === type && attrsMatch(node, attrs) && to <= $from.end(d))
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
/** A list is a node whose content is items: `list_item+`, `listItem+`. */
|
|
55
|
+
function isList(type) {
|
|
56
|
+
const item = type.contentMatch.defaultType;
|
|
57
|
+
return !!item && /item$/i.test(item.name);
|
|
58
|
+
}
|
|
59
|
+
/** The innermost list around the selection, if any. */
|
|
60
|
+
function listAround(state) {
|
|
61
|
+
const { $from } = state.selection;
|
|
62
|
+
for (let d = $from.depth; d > 0; d--) {
|
|
63
|
+
const node = $from.node(d);
|
|
64
|
+
if (isList(node.type))
|
|
65
|
+
return { node, pos: $from.before(d) };
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
// --- blocks --------------------------------------------------------------------
|
|
70
|
+
/** `type` with `attrs` — or back to a paragraph when the selection already
|
|
71
|
+
* is one: how a "Heading 2" button toggles. */
|
|
72
|
+
export function toggleBlockType(type, attrs, fallback) {
|
|
73
|
+
return (state, dispatch, view) => {
|
|
74
|
+
const back = fallback ?? state.schema.nodes.paragraph;
|
|
75
|
+
if (isBlockActive(state, type, attrs) && back) {
|
|
76
|
+
return setBlockType(back)(state, dispatch, view);
|
|
77
|
+
}
|
|
78
|
+
return setBlockType(type, attrs)(state, dispatch, view);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Into a blockquote (or any wrapper), or out of the one the selection is in. */
|
|
82
|
+
export function toggleWrap(type, attrs) {
|
|
83
|
+
return (state, dispatch, view) => isBlockActive(state, type)
|
|
84
|
+
? lift(state, dispatch)
|
|
85
|
+
: wrapIn(type, attrs)(state, dispatch, view);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* A list of `listType`: out of it when the selection is already in one,
|
|
89
|
+
* across to it when it is in a list of another kind (a bullet list becomes
|
|
90
|
+
* numbered and keeps its items), into it otherwise.
|
|
91
|
+
*/
|
|
92
|
+
export function toggleList(listType, itemType) {
|
|
93
|
+
return (state, dispatch, view) => {
|
|
94
|
+
const around = listAround(state);
|
|
95
|
+
if (around && around.node.type === listType) {
|
|
96
|
+
return liftListItem(itemType)(state, dispatch, view);
|
|
97
|
+
}
|
|
98
|
+
if (around && listType.validContent(around.node.content)) {
|
|
99
|
+
dispatch?.(state.tr.setNodeMarkup(around.pos, listType).scrollIntoView());
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
return wrapInList(listType)(state, dispatch, view);
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/** The list items the selection touches. */
|
|
106
|
+
function itemsIn(state, item) {
|
|
107
|
+
const { from, to } = state.selection;
|
|
108
|
+
const out = [];
|
|
109
|
+
state.doc.nodesBetween(from, to, (node, pos) => {
|
|
110
|
+
if (node.type === item)
|
|
111
|
+
out.push({ pos, node });
|
|
112
|
+
return true;
|
|
113
|
+
});
|
|
114
|
+
return out;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Tasks: the selected list items become checkable, or plain again when all of
|
|
118
|
+
* them already are. Outside a list, a new list of unchecked tasks.
|
|
119
|
+
*/
|
|
120
|
+
export function toggleTaskList(schema) {
|
|
121
|
+
const item = schema.nodes.list_item;
|
|
122
|
+
const list = schema.nodes.bullet_list;
|
|
123
|
+
return (state, dispatch, view) => {
|
|
124
|
+
if (!item || !list || !('checked' in (item.spec.attrs ?? {})))
|
|
125
|
+
return false;
|
|
126
|
+
const items = itemsIn(state, item);
|
|
127
|
+
if (items.length === 0) {
|
|
128
|
+
return wrapInList(list)(state, dispatch &&
|
|
129
|
+
((tr) => {
|
|
130
|
+
const from = tr.mapping.map(state.selection.from);
|
|
131
|
+
const to = tr.mapping.map(state.selection.to);
|
|
132
|
+
tr.doc.nodesBetween(from, to, (node, pos) => {
|
|
133
|
+
if (node.type === item) {
|
|
134
|
+
tr.setNodeMarkup(pos, undefined, {
|
|
135
|
+
...node.attrs,
|
|
136
|
+
checked: false,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return true;
|
|
140
|
+
});
|
|
141
|
+
dispatch(tr.scrollIntoView());
|
|
142
|
+
}), view);
|
|
143
|
+
}
|
|
144
|
+
if (dispatch) {
|
|
145
|
+
const allTasks = items.every((i) => i.node.attrs.checked != null);
|
|
146
|
+
const tr = state.tr;
|
|
147
|
+
for (const { pos, node } of items) {
|
|
148
|
+
tr.setNodeMarkup(pos, undefined, {
|
|
149
|
+
...node.attrs,
|
|
150
|
+
checked: allTasks ? null : (node.attrs.checked ?? false),
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
dispatch(tr.scrollIntoView());
|
|
154
|
+
}
|
|
155
|
+
return true;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/** Check or uncheck the task item at `pos` — what clicking its box does. */
|
|
159
|
+
export function setTaskChecked(pos, checked) {
|
|
160
|
+
return (state, dispatch) => {
|
|
161
|
+
const node = state.doc.nodeAt(pos);
|
|
162
|
+
if (!node || !('checked' in node.attrs))
|
|
163
|
+
return false;
|
|
164
|
+
dispatch?.(state.tr.setNodeMarkup(pos, undefined, { ...node.attrs, checked }));
|
|
165
|
+
return true;
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/** Enter in a list item: a new item — an unchecked one, if this is a task. */
|
|
169
|
+
export function splitItem(itemType) {
|
|
170
|
+
return (state, dispatch, view) => {
|
|
171
|
+
const { $from } = state.selection;
|
|
172
|
+
let attrs;
|
|
173
|
+
for (let d = $from.depth; d > 0; d--) {
|
|
174
|
+
const node = $from.node(d);
|
|
175
|
+
if (node.type === itemType) {
|
|
176
|
+
if (node.attrs.checked != null)
|
|
177
|
+
attrs = { ...node.attrs, checked: false };
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return splitListItem(itemType, attrs)(state, dispatch, view);
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/** A rule where the selection is — and a paragraph after it, when nothing
|
|
185
|
+
* that takes a caret would follow. */
|
|
186
|
+
export function insertHorizontalRule(type) {
|
|
187
|
+
return (state, dispatch) => {
|
|
188
|
+
if (!dispatch)
|
|
189
|
+
return true;
|
|
190
|
+
const tr = state.tr.replaceSelectionWith(type.create());
|
|
191
|
+
const $after = tr.selection.$from;
|
|
192
|
+
const para = state.schema.nodes.paragraph;
|
|
193
|
+
if (para && !$after.parent.inlineContent && !$after.nodeAfter) {
|
|
194
|
+
tr.insert($after.pos, para.create());
|
|
195
|
+
tr.setSelection(TextSelection.create(tr.doc, $after.pos + 1));
|
|
196
|
+
}
|
|
197
|
+
dispatch(tr.scrollIntoView());
|
|
198
|
+
return true;
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
// --- code ----------------------------------------------------------------------
|
|
202
|
+
const INDENT = ' ';
|
|
203
|
+
function inCode(state) {
|
|
204
|
+
const { $from, $to } = state.selection;
|
|
205
|
+
return !!$from.parent.type.spec.code && $from.sameParent($to);
|
|
206
|
+
}
|
|
207
|
+
/** Line starts, as positions, of every line the selection touches in the
|
|
208
|
+
* code block it is in. */
|
|
209
|
+
function codeLines(state) {
|
|
210
|
+
const { $from, from, to } = state.selection;
|
|
211
|
+
const start = $from.start();
|
|
212
|
+
const text = $from.parent.textContent;
|
|
213
|
+
const out = [];
|
|
214
|
+
let line = text.lastIndexOf('\n', from - start - 1) + 1;
|
|
215
|
+
for (;;) {
|
|
216
|
+
out.push(start + line);
|
|
217
|
+
const next = text.indexOf('\n', line);
|
|
218
|
+
if (next === -1 || start + next >= to)
|
|
219
|
+
break;
|
|
220
|
+
line = next + 1;
|
|
221
|
+
}
|
|
222
|
+
return out;
|
|
223
|
+
}
|
|
224
|
+
/** Tab inside a code block: two spaces, or every selected line indented. */
|
|
225
|
+
export const indentCode = (state, dispatch) => {
|
|
226
|
+
if (!inCode(state))
|
|
227
|
+
return false;
|
|
228
|
+
if (!dispatch)
|
|
229
|
+
return true;
|
|
230
|
+
if (state.selection.empty) {
|
|
231
|
+
dispatch(state.tr.insertText(INDENT).scrollIntoView());
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
const tr = state.tr;
|
|
235
|
+
const lines = codeLines(state);
|
|
236
|
+
for (let i = lines.length - 1; i >= 0; i--)
|
|
237
|
+
tr.insertText(INDENT, lines[i]);
|
|
238
|
+
dispatch(tr.scrollIntoView());
|
|
239
|
+
return true;
|
|
240
|
+
};
|
|
241
|
+
/** Shift+Tab inside a code block: up to two spaces off each selected line.
|
|
242
|
+
* Consumed even when there is nothing to take off — Shift+Tab in code
|
|
243
|
+
* should not leave the editor while the user is indenting. */
|
|
244
|
+
export const dedentCode = (state, dispatch) => {
|
|
245
|
+
if (!inCode(state))
|
|
246
|
+
return false;
|
|
247
|
+
if (!dispatch)
|
|
248
|
+
return true;
|
|
249
|
+
const { doc } = state;
|
|
250
|
+
const tr = state.tr;
|
|
251
|
+
const lines = codeLines(state);
|
|
252
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
253
|
+
let n = 0;
|
|
254
|
+
while (n < INDENT.length &&
|
|
255
|
+
doc.textBetween(lines[i] + n, lines[i] + n + 1) === ' ')
|
|
256
|
+
n++;
|
|
257
|
+
if (n)
|
|
258
|
+
tr.delete(lines[i], lines[i] + n);
|
|
259
|
+
}
|
|
260
|
+
if (tr.docChanged)
|
|
261
|
+
dispatch(tr.scrollIntoView());
|
|
262
|
+
return true;
|
|
263
|
+
};
|
|
264
|
+
// --- tables --------------------------------------------------------------------
|
|
265
|
+
/** Tab / Shift+Tab in a table: the next or the previous cell, its text
|
|
266
|
+
* selected. Tab in the last cell adds a row. */
|
|
267
|
+
export function goToCell(dir) {
|
|
268
|
+
return (state, dispatch) => {
|
|
269
|
+
const { $head } = state.selection;
|
|
270
|
+
let d = $head.depth;
|
|
271
|
+
const role = (depth) => $head.node(depth).type.spec.tableRole;
|
|
272
|
+
while (d > 0 && role(d) !== 'cell' && role(d) !== 'header_cell')
|
|
273
|
+
d--;
|
|
274
|
+
if (d < 2 || role(d - 2) !== 'table')
|
|
275
|
+
return false;
|
|
276
|
+
const table = $head.node(d - 2);
|
|
277
|
+
const tableStart = $head.start(d - 2);
|
|
278
|
+
const cells = [];
|
|
279
|
+
table.forEach((row, rowOffset) => {
|
|
280
|
+
row.forEach((_cell, cellOffset) => cells.push(tableStart + rowOffset + 1 + cellOffset));
|
|
281
|
+
});
|
|
282
|
+
const next = cells.indexOf($head.before(d)) + dir;
|
|
283
|
+
if (next < 0)
|
|
284
|
+
return true;
|
|
285
|
+
if (!dispatch)
|
|
286
|
+
return true;
|
|
287
|
+
if (next >= cells.length) {
|
|
288
|
+
const lastRow = table.lastChild;
|
|
289
|
+
const cellType = state.schema.nodes.table_cell ?? lastRow.firstChild.type;
|
|
290
|
+
const row = lastRow.type.create(null, Array.from({ length: lastRow.childCount }, (_, i) => cellType.createAndFill({
|
|
291
|
+
align: lastRow.child(i).attrs.align ?? null,
|
|
292
|
+
}) ?? cellType.createAndFill()));
|
|
293
|
+
const at = tableStart + table.content.size;
|
|
294
|
+
const tr = state.tr.insert(at, row);
|
|
295
|
+
dispatch(tr.setSelection(TextSelection.create(tr.doc, at + 2)).scrollIntoView());
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
const cell = state.doc.nodeAt(cells[next]);
|
|
299
|
+
const from = cells[next] + 1;
|
|
300
|
+
dispatch(state.tr
|
|
301
|
+
.setSelection(TextSelection.create(state.doc, from, from + cell.content.size))
|
|
302
|
+
.scrollIntoView());
|
|
303
|
+
return true;
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
// --- links ---------------------------------------------------------------------
|
|
307
|
+
/** The extent, in offsets inside `parent`, of the `type` mark around
|
|
308
|
+
* `offset` — the whole link a caret is in. */
|
|
309
|
+
function markRange(parent, offset, type) {
|
|
310
|
+
let index = -1;
|
|
311
|
+
let childStart = 0;
|
|
312
|
+
parent.forEach((child, childOffset, i) => {
|
|
313
|
+
if (index === -1 &&
|
|
314
|
+
childOffset <= offset &&
|
|
315
|
+
offset <= childOffset + child.nodeSize &&
|
|
316
|
+
type.isInSet(child.marks)) {
|
|
317
|
+
index = i;
|
|
318
|
+
childStart = childOffset;
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
if (index === -1)
|
|
322
|
+
return null;
|
|
323
|
+
const mark = type.isInSet(parent.child(index).marks);
|
|
324
|
+
let from = childStart;
|
|
325
|
+
let to = childStart + parent.child(index).nodeSize;
|
|
326
|
+
for (let i = index - 1; i >= 0 && mark.isInSet(parent.child(i).marks); i--) {
|
|
327
|
+
from -= parent.child(i).nodeSize;
|
|
328
|
+
}
|
|
329
|
+
for (let i = index + 1; i < parent.childCount && mark.isInSet(parent.child(i).marks); i++) {
|
|
330
|
+
to += parent.child(i).nodeSize;
|
|
331
|
+
}
|
|
332
|
+
return { from, to };
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* A link on the selection. On a bare caret inside a link, that whole link
|
|
336
|
+
* gets the new target; on a bare caret anywhere else, `text` (or the href
|
|
337
|
+
* itself) is inserted as a link. `href: null` takes the link off — off the
|
|
338
|
+
* selection, or off the whole link the caret is in.
|
|
339
|
+
*/
|
|
340
|
+
export function setLink(href, title, text) {
|
|
341
|
+
return (state, dispatch) => {
|
|
342
|
+
const type = state.schema.marks.link;
|
|
343
|
+
if (!type)
|
|
344
|
+
return false;
|
|
345
|
+
if (!dispatch)
|
|
346
|
+
return true;
|
|
347
|
+
const { from, to, empty, $from } = state.selection;
|
|
348
|
+
const around = empty
|
|
349
|
+
? markRange($from.parent, $from.parentOffset, type)
|
|
350
|
+
: null;
|
|
351
|
+
const start = $from.start();
|
|
352
|
+
if (href === null) {
|
|
353
|
+
if (!empty)
|
|
354
|
+
dispatch(state.tr.removeMark(from, to, type).scrollIntoView());
|
|
355
|
+
else if (around)
|
|
356
|
+
dispatch(state.tr.removeMark(start + around.from, start + around.to, type));
|
|
357
|
+
return true;
|
|
358
|
+
}
|
|
359
|
+
const mark = type.create({ href, title: title ?? null });
|
|
360
|
+
if (!empty) {
|
|
361
|
+
dispatch(state.tr.addMark(from, to, mark).scrollIntoView());
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
if (around && !text) {
|
|
365
|
+
dispatch(state.tr
|
|
366
|
+
.removeMark(start + around.from, start + around.to, type)
|
|
367
|
+
.addMark(start + around.from, start + around.to, mark));
|
|
368
|
+
return true;
|
|
369
|
+
}
|
|
370
|
+
const marks = $from.marks().filter((m) => m.type !== type);
|
|
371
|
+
const tr = state.tr.insert(from, state.schema.text(text || href, [...marks, mark]));
|
|
372
|
+
dispatch(tr.scrollIntoView());
|
|
373
|
+
return true;
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/rich-text-editor/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Slice } from 'prosemirror-model';
|
|
2
|
+
import type { ResolvedPos, Schema } from 'prosemirror-model';
|
|
3
|
+
import type { EditorState, Transaction } from 'prosemirror-state';
|
|
4
|
+
import type { EditorProps } from 'prosemirror-view';
|
|
5
|
+
/** The in-app payload: the slice a drag out of an editor carries. */
|
|
6
|
+
export declare const SLICE_TYPE = "application/x-react-x11-richtext-slice";
|
|
7
|
+
/** What `SLICE_TYPE` carries: the slice, and the view it came out of. */
|
|
8
|
+
export interface DragPayload {
|
|
9
|
+
readonly slice: Slice;
|
|
10
|
+
readonly view: unknown;
|
|
11
|
+
/** The copy modifier, as the drag's source last saw it: an in-app
|
|
12
|
+
* drop has none of its own. */
|
|
13
|
+
readonly copy?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** What the editor takes a drop of: an editor's slice, HTML, text, links
|
|
16
|
+
* and files — core's names and groups (react-x11 `DropAccept`). */
|
|
17
|
+
export declare const DROP_TYPES: string[];
|
|
18
|
+
/** A dropped file or link: a URI, and a local path when it is a file. */
|
|
19
|
+
export interface DroppedFile {
|
|
20
|
+
uri: string;
|
|
21
|
+
path?: string;
|
|
22
|
+
}
|
|
23
|
+
/** The part of core's `DropEvent` a drop is read from. */
|
|
24
|
+
export interface DropLike {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
types: string[];
|
|
28
|
+
files: DroppedFile[];
|
|
29
|
+
text?: string;
|
|
30
|
+
items?: Record<string, unknown>;
|
|
31
|
+
getData(type: string): Promise<Uint8Array | string>;
|
|
32
|
+
shiftKey: boolean;
|
|
33
|
+
ctrlKey: boolean;
|
|
34
|
+
altKey: boolean;
|
|
35
|
+
metaKey: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** What a drop tells its source it did, or null for a drop not taken. */
|
|
38
|
+
export type DropAnswer = 'move' | 'copy' | null;
|
|
39
|
+
/** What a drop's `getData` answered, as text. `TextDecoder` is reached
|
|
40
|
+
* through `globalThis`, the way src/maps/mvt.ts reaches it: `src/`
|
|
41
|
+
* compiles with no runtime's types (`types: []`), and every runtime
|
|
42
|
+
* react-x11 runs on has one. */
|
|
43
|
+
export declare function textOf(data: Uint8Array | string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Files, or links, dropped from another application, as content: an image
|
|
46
|
+
* as an image node — drawn by `renderImage` when there is one; the editor
|
|
47
|
+
* fetches nothing — and anything else as its name linked to it, a space
|
|
48
|
+
* between them. A schema without images or links says the name plainly.
|
|
49
|
+
*/
|
|
50
|
+
export declare function filesSlice(schema: Schema, files: readonly DroppedFile[], $at: ResolvedPos): Slice;
|
|
51
|
+
/**
|
|
52
|
+
* prosemirror-view's drop, as a transaction: `slice` put in where it fits
|
|
53
|
+
* nearest `at` — after, for a move, the selection it was dragged out of is
|
|
54
|
+
* taken out — and the selection set around what went in, or on it, when it
|
|
55
|
+
* is one node that can be selected. Null when nothing would change.
|
|
56
|
+
*/
|
|
57
|
+
export declare function dropTransaction(state: EditorState, slice: Slice, at: number, move: boolean): Transaction | null;
|
|
58
|
+
type DomDragEvent = Parameters<NonNullable<EditorProps['handleDrop']>>[1];
|
|
59
|
+
/**
|
|
60
|
+
* The DOM-shaped drop a `handleDrop` prop is handed: `clientX`/`clientY`
|
|
61
|
+
* (logical window pixels, as `posAtCoords` takes them), the modifiers, and a
|
|
62
|
+
* `dataTransfer` whose `getData` answers what was read — HTML, text, the
|
|
63
|
+
* URI list — and whose `files` are the dropped `{ name, path, uri }`: paths
|
|
64
|
+
* to read, not the DOM's `File`s.
|
|
65
|
+
*/
|
|
66
|
+
export declare function domDrop(ev: DropLike, html: string | null, text: string | null): DomDragEvent;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=drag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag.d.ts","sourceRoot":"","sources":["../../src/rich-text-editor/drag.ts"],"names":[],"mappings":"AAaA,OAAO,EAAY,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qEAAqE;AACrE,eAAO,MAAM,UAAU,2CAA2C,CAAC;AAEnE,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;oCACgC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;oEACoE;AACpE,eAAO,MAAM,UAAU,EAAE,MAAM,EAM9B,CAAC;AAEF,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,0DAA0D;AAC1D,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,yEAAyE;AACzE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAEhD;;;iCAGiC;AACjC,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAUxD;AAgBD;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,GAAG,EAAE,WAAW,GACf,KAAK,CAoBP;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,GACZ,WAAW,GAAG,IAAI,CAgCpB;AAED,KAAK,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1E;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,IAAI,EAAE,MAAM,GAAG,IAAI,GAClB,YAAY,CAwBd"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// Drag and drop: the document's half — what a drag out of the editor
|
|
2
|
+
// carries, what a drop of files becomes, and where a drop goes in.
|
|
3
|
+
//
|
|
4
|
+
// The gesture is core's (react-x11 docs/dnd.md): the editor's root element is
|
|
5
|
+
// a drag source and a drop target, and `./view.ts` answers its events. A drag
|
|
6
|
+
// out of the editor carries what a copy carries — HTML and text, for another
|
|
7
|
+
// application — and, for a drop in this app, the slice itself, live, under
|
|
8
|
+
// `SLICE_TYPE`: another editor, or this one, takes it whole, with no trip
|
|
9
|
+
// through HTML. A drop from anywhere else is read the way a paste is
|
|
10
|
+
// (./clipboard.ts). Either way it goes in where prosemirror-transform's
|
|
11
|
+
// `dropPoint` says it fits, and a move out of this same editor comes out of
|
|
12
|
+
// where it was first — `dropTransaction`, which is prosemirror-view's own
|
|
13
|
+
// drop, step for step.
|
|
14
|
+
import { Fragment, Slice } from 'prosemirror-model';
|
|
15
|
+
import { NodeSelection, TextSelection } from 'prosemirror-state';
|
|
16
|
+
import { dropPoint } from 'prosemirror-transform';
|
|
17
|
+
/** The in-app payload: the slice a drag out of an editor carries. */
|
|
18
|
+
export const SLICE_TYPE = 'application/x-react-x11-richtext-slice';
|
|
19
|
+
/** What the editor takes a drop of: an editor's slice, HTML, text, links
|
|
20
|
+
* and files — core's names and groups (react-x11 `DropAccept`). */
|
|
21
|
+
export const DROP_TYPES = [
|
|
22
|
+
SLICE_TYPE,
|
|
23
|
+
'text/html',
|
|
24
|
+
'text',
|
|
25
|
+
'uris',
|
|
26
|
+
'files',
|
|
27
|
+
];
|
|
28
|
+
/** What a drop's `getData` answered, as text. `TextDecoder` is reached
|
|
29
|
+
* through `globalThis`, the way src/maps/mvt.ts reaches it: `src/`
|
|
30
|
+
* compiles with no runtime's types (`types: []`), and every runtime
|
|
31
|
+
* react-x11 runs on has one. */
|
|
32
|
+
export function textOf(data) {
|
|
33
|
+
if (typeof data === 'string')
|
|
34
|
+
return data;
|
|
35
|
+
const g = globalThis;
|
|
36
|
+
return g.TextDecoder
|
|
37
|
+
? new g.TextDecoder('utf-8').decode(data)
|
|
38
|
+
: String.fromCharCode(...data);
|
|
39
|
+
}
|
|
40
|
+
const IMAGE = /\.(png|jpe?g|gif|webp|bmp|svg|avif)$/i;
|
|
41
|
+
/** What a dropped file is called: the last part of its path, or of a
|
|
42
|
+
* `file:` URI; a link to anywhere else is its URI. */
|
|
43
|
+
function nameOf(file) {
|
|
44
|
+
if (!file.path && !file.uri.startsWith('file:'))
|
|
45
|
+
return file.uri;
|
|
46
|
+
const tail = (file.path ?? file.uri).split(/[\\/]/).pop() || file.uri;
|
|
47
|
+
try {
|
|
48
|
+
return decodeURIComponent(tail);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return tail;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Files, or links, dropped from another application, as content: an image
|
|
56
|
+
* as an image node — drawn by `renderImage` when there is one; the editor
|
|
57
|
+
* fetches nothing — and anything else as its name linked to it, a space
|
|
58
|
+
* between them. A schema without images or links says the name plainly.
|
|
59
|
+
*/
|
|
60
|
+
export function filesSlice(schema, files, $at) {
|
|
61
|
+
const { image } = schema.nodes;
|
|
62
|
+
const { link } = schema.marks;
|
|
63
|
+
const marks = $at.marks().filter((m) => m.type !== link);
|
|
64
|
+
const nodes = [];
|
|
65
|
+
files.forEach((file, i) => {
|
|
66
|
+
const name = nameOf(file);
|
|
67
|
+
if (i > 0)
|
|
68
|
+
nodes.push(schema.text(' ', marks));
|
|
69
|
+
if (image && IMAGE.test(name)) {
|
|
70
|
+
nodes.push(image.create({ src: file.uri, alt: name }));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
nodes.push(schema.text(name, link ? [...marks, link.create({ href: file.uri })] : marks));
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return new Slice(Fragment.from(nodes), 0, 0);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* prosemirror-view's drop, as a transaction: `slice` put in where it fits
|
|
80
|
+
* nearest `at` — after, for a move, the selection it was dragged out of is
|
|
81
|
+
* taken out — and the selection set around what went in, or on it, when it
|
|
82
|
+
* is one node that can be selected. Null when nothing would change.
|
|
83
|
+
*/
|
|
84
|
+
export function dropTransaction(state, slice, at, move) {
|
|
85
|
+
const insertAt = dropPoint(state.doc, at, slice) ?? at;
|
|
86
|
+
const tr = state.tr;
|
|
87
|
+
if (move)
|
|
88
|
+
tr.deleteSelection();
|
|
89
|
+
const pos = tr.mapping.map(insertAt);
|
|
90
|
+
const node = slice.openStart === 0 &&
|
|
91
|
+
slice.openEnd === 0 &&
|
|
92
|
+
slice.content.childCount === 1
|
|
93
|
+
? slice.content.firstChild
|
|
94
|
+
: null;
|
|
95
|
+
const before = tr.doc;
|
|
96
|
+
if (node)
|
|
97
|
+
tr.replaceRangeWith(pos, pos, node);
|
|
98
|
+
else
|
|
99
|
+
tr.replaceRange(pos, pos, slice);
|
|
100
|
+
if (tr.doc.eq(before))
|
|
101
|
+
return null;
|
|
102
|
+
const $pos = tr.doc.resolve(pos);
|
|
103
|
+
if (node &&
|
|
104
|
+
NodeSelection.isSelectable(node) &&
|
|
105
|
+
$pos.nodeAfter?.sameMarkup(node)) {
|
|
106
|
+
tr.setSelection(new NodeSelection($pos));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
let end = tr.mapping.map(insertAt);
|
|
110
|
+
tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => {
|
|
111
|
+
end = newTo;
|
|
112
|
+
});
|
|
113
|
+
tr.setSelection(TextSelection.between($pos, tr.doc.resolve(end)));
|
|
114
|
+
}
|
|
115
|
+
return tr.setMeta('uiEvent', 'drop');
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The DOM-shaped drop a `handleDrop` prop is handed: `clientX`/`clientY`
|
|
119
|
+
* (logical window pixels, as `posAtCoords` takes them), the modifiers, and a
|
|
120
|
+
* `dataTransfer` whose `getData` answers what was read — HTML, text, the
|
|
121
|
+
* URI list — and whose `files` are the dropped `{ name, path, uri }`: paths
|
|
122
|
+
* to read, not the DOM's `File`s.
|
|
123
|
+
*/
|
|
124
|
+
export function domDrop(ev, html, text) {
|
|
125
|
+
const uris = ev.files.map((f) => f.uri).join('\r\n');
|
|
126
|
+
return {
|
|
127
|
+
clientX: ev.x,
|
|
128
|
+
clientY: ev.y,
|
|
129
|
+
shiftKey: ev.shiftKey,
|
|
130
|
+
ctrlKey: ev.ctrlKey,
|
|
131
|
+
altKey: ev.altKey,
|
|
132
|
+
metaKey: ev.metaKey,
|
|
133
|
+
dataTransfer: {
|
|
134
|
+
types: [...ev.types],
|
|
135
|
+
files: ev.files.map((f) => ({ name: nameOf(f), ...f })),
|
|
136
|
+
getData: (type) => type === 'text/html'
|
|
137
|
+
? (html ?? '')
|
|
138
|
+
: type === 'text/uri-list'
|
|
139
|
+
? uris
|
|
140
|
+
: type === 'text/plain' || type === 'text'
|
|
141
|
+
? (text ?? '')
|
|
142
|
+
: '',
|
|
143
|
+
},
|
|
144
|
+
preventDefault() { },
|
|
145
|
+
stopPropagation() { },
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=drag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag.js","sourceRoot":"","sources":["../../src/rich-text-editor/drag.ts"],"names":[],"mappings":"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"}
|