@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,393 @@
|
|
|
1
|
+
// Keys, across the one seam ProseMirror's ecosystem is written against: a
|
|
2
|
+
// DOM `KeyboardEvent`.
|
|
3
|
+
//
|
|
4
|
+
// A keymap plugin — prosemirror-keymap's, TipTap's, anyone's — reads
|
|
5
|
+
// `event.key`, `event.keyCode` and four modifier flags and nothing else, so a
|
|
6
|
+
// react-x11 key event is translated into exactly that and handed to
|
|
7
|
+
// `handleKeyDown` as if a browser had sent it. Two details decide whether a
|
|
8
|
+
// binding like `Mod-b` fires:
|
|
9
|
+
//
|
|
10
|
+
// - **The Latin key, under any layout.** With a modifier held, `key` is the
|
|
11
|
+
// character of `ev.keysym` — which react-x11 already resolves to the Latin
|
|
12
|
+
// key of the physical key — and `keyCode` is that key's DOM code, which is
|
|
13
|
+
// also what prosemirror-keymap falls back to. So Ctrl+B bolds while the
|
|
14
|
+
// user is typing Russian, as it does in every toolkit.
|
|
15
|
+
// - **Which modifier is Mod.** prosemirror-keymap decides at load time, from
|
|
16
|
+
// `navigator.platform`, that Mod is Cmd on a Mac and Ctrl anywhere else —
|
|
17
|
+
// a fact about the *host*. The answer here is the *backend's*: an X11
|
|
18
|
+
// application uses Ctrl even under XQuartz on a Mac (and the suite's
|
|
19
|
+
// in-process server is X11 on every host), while react-x11's native macOS
|
|
20
|
+
// backend uses Cmd, even on a Node old enough to have no `navigator`, where
|
|
21
|
+
// prosemirror-keymap guesses Ctrl. When the two disagree, Ctrl and Meta
|
|
22
|
+
// trade places in the event a plugin is shown, so the backend's primary
|
|
23
|
+
// modifier always arrives as prosemirror-keymap's Mod.
|
|
24
|
+
//
|
|
25
|
+
// Below that: the editing behaviour the default schema ships with — the
|
|
26
|
+
// plugins `defaultPlugins` assembles, in the order they have to be in.
|
|
27
|
+
import { baseKeymap, chainCommands, exitCode, setBlockType, toggleMark, wrapIn, } from 'prosemirror-commands';
|
|
28
|
+
import { history, redo, undo } from 'prosemirror-history';
|
|
29
|
+
import { InputRule, ellipsis, emDash, inputRules, smartQuotes, textblockTypeInputRule, undoInputRule, wrappingInputRule, } from 'prosemirror-inputrules';
|
|
30
|
+
import { keymap } from 'prosemirror-keymap';
|
|
31
|
+
import { Fragment } from 'prosemirror-model';
|
|
32
|
+
import { liftListItem, sinkListItem, wrapInList, } from 'prosemirror-schema-list';
|
|
33
|
+
import { TextSelection } from 'prosemirror-state';
|
|
34
|
+
import { findWrapping } from 'prosemirror-transform';
|
|
35
|
+
import { dedentCode, goToCell, indentCode, insertHorizontalRule, splitItem, toggleTaskList, } from './commands.js';
|
|
36
|
+
import { hasTables, tableRepair } from './tables.js';
|
|
37
|
+
/**
|
|
38
|
+
* Which modifier this app's backend uses for shortcuts. react-x11's native
|
|
39
|
+
* macOS application is the one carrying a bezel store (`nativeBezels`, its
|
|
40
|
+
* Cocoa-only view of the window chrome); nothing on the X11 backend or the
|
|
41
|
+
* headless mock has one.
|
|
42
|
+
*/
|
|
43
|
+
export function primaryModifierOf(app) {
|
|
44
|
+
return app !== null && typeof app === 'object' && 'nativeBezels' in app
|
|
45
|
+
? 'meta'
|
|
46
|
+
: 'ctrl';
|
|
47
|
+
}
|
|
48
|
+
const nav = globalThis.navigator;
|
|
49
|
+
/** prosemirror-keymap's own answer, reproduced: is its Mod the Meta key? */
|
|
50
|
+
const MOD_IS_META = !!nav && /Mac|iP(hone|[oa]d)/.test(nav.platform ?? '');
|
|
51
|
+
/** X keysym → DOM key name and legacy key code, for the keys with names. */
|
|
52
|
+
const NAMED = new Map([
|
|
53
|
+
[0xff0d, ['Enter', 13]],
|
|
54
|
+
[0xff8d, ['Enter', 13]], // KP_Enter
|
|
55
|
+
[0xff08, ['Backspace', 8]],
|
|
56
|
+
[0xffff, ['Delete', 46]],
|
|
57
|
+
[0xff9f, ['Delete', 46]], // KP_Delete
|
|
58
|
+
[0xff09, ['Tab', 9]],
|
|
59
|
+
[0xfe20, ['Tab', 9]], // ISO_Left_Tab — what Shift+Tab sends
|
|
60
|
+
[0xff1b, ['Escape', 27]],
|
|
61
|
+
[0xff51, ['ArrowLeft', 37]],
|
|
62
|
+
[0xff52, ['ArrowUp', 38]],
|
|
63
|
+
[0xff53, ['ArrowRight', 39]],
|
|
64
|
+
[0xff54, ['ArrowDown', 40]],
|
|
65
|
+
[0xff96, ['ArrowLeft', 37]],
|
|
66
|
+
[0xff97, ['ArrowUp', 38]],
|
|
67
|
+
[0xff98, ['ArrowRight', 39]],
|
|
68
|
+
[0xff99, ['ArrowDown', 40]],
|
|
69
|
+
[0xff50, ['Home', 36]],
|
|
70
|
+
[0xff95, ['Home', 36]],
|
|
71
|
+
[0xff57, ['End', 35]],
|
|
72
|
+
[0xff9c, ['End', 35]],
|
|
73
|
+
[0xff55, ['PageUp', 33]],
|
|
74
|
+
[0xff9a, ['PageUp', 33]],
|
|
75
|
+
[0xff56, ['PageDown', 34]],
|
|
76
|
+
[0xff9b, ['PageDown', 34]],
|
|
77
|
+
[0xff63, ['Insert', 45]],
|
|
78
|
+
[0xff9e, ['Insert', 45]],
|
|
79
|
+
[0x20, [' ', 32]],
|
|
80
|
+
]);
|
|
81
|
+
for (let i = 0; i < 12; i++)
|
|
82
|
+
NAMED.set(0xffbe + i, [`F${i + 1}`, 112 + i]);
|
|
83
|
+
/** The US-layout key a character is on, as a DOM key code. */
|
|
84
|
+
const PUNCT_CODES = {
|
|
85
|
+
';': 186,
|
|
86
|
+
':': 186,
|
|
87
|
+
'=': 187,
|
|
88
|
+
'+': 187,
|
|
89
|
+
',': 188,
|
|
90
|
+
'<': 188,
|
|
91
|
+
'-': 189,
|
|
92
|
+
_: 189,
|
|
93
|
+
'.': 190,
|
|
94
|
+
'>': 190,
|
|
95
|
+
'/': 191,
|
|
96
|
+
'?': 191,
|
|
97
|
+
'`': 192,
|
|
98
|
+
'~': 192,
|
|
99
|
+
'[': 219,
|
|
100
|
+
'{': 219,
|
|
101
|
+
'\\': 220,
|
|
102
|
+
'|': 220,
|
|
103
|
+
']': 221,
|
|
104
|
+
'}': 221,
|
|
105
|
+
"'": 222,
|
|
106
|
+
'"': 222,
|
|
107
|
+
')': 48,
|
|
108
|
+
'!': 49,
|
|
109
|
+
'@': 50,
|
|
110
|
+
'#': 51,
|
|
111
|
+
$: 52,
|
|
112
|
+
'%': 53,
|
|
113
|
+
'^': 54,
|
|
114
|
+
'&': 55,
|
|
115
|
+
'*': 56,
|
|
116
|
+
'(': 57,
|
|
117
|
+
};
|
|
118
|
+
function codeOf(ch) {
|
|
119
|
+
if (/^[a-z]$/i.test(ch))
|
|
120
|
+
return ch.toUpperCase().charCodeAt(0);
|
|
121
|
+
if (/^[0-9]$/.test(ch))
|
|
122
|
+
return ch.charCodeAt(0);
|
|
123
|
+
return PUNCT_CODES[ch] ?? 0;
|
|
124
|
+
}
|
|
125
|
+
/** A react-x11 key event as the DOM keydown a keymap expects. */
|
|
126
|
+
export function toDomKeyEvent(ev, primary) {
|
|
127
|
+
let ctrlKey = !!ev.ctrlKey;
|
|
128
|
+
let metaKey = !!ev.metaKey;
|
|
129
|
+
if ((primary === 'meta') !== MOD_IS_META)
|
|
130
|
+
[ctrlKey, metaKey] = [metaKey, ctrlKey];
|
|
131
|
+
const named = ev.keysym !== undefined ? NAMED.get(ev.keysym) : undefined;
|
|
132
|
+
let key;
|
|
133
|
+
let keyCode;
|
|
134
|
+
if (named) {
|
|
135
|
+
[key, keyCode] = named;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const latin = ev.keysym !== undefined && ev.keysym > 0x20 && ev.keysym < 0x7f
|
|
139
|
+
? String.fromCharCode(ev.keysym)
|
|
140
|
+
: '';
|
|
141
|
+
const chord = ctrlKey || metaKey || !!ev.altKey;
|
|
142
|
+
key = (chord && latin) || ev.key || latin || 'Unidentified';
|
|
143
|
+
keyCode = codeOf(latin || key);
|
|
144
|
+
}
|
|
145
|
+
let prevented = false;
|
|
146
|
+
const shiftKey = !!ev.shiftKey;
|
|
147
|
+
const altKey = !!ev.altKey;
|
|
148
|
+
return {
|
|
149
|
+
type: 'keydown',
|
|
150
|
+
key,
|
|
151
|
+
code: '',
|
|
152
|
+
keyCode,
|
|
153
|
+
which: keyCode,
|
|
154
|
+
charCode: 0,
|
|
155
|
+
shiftKey,
|
|
156
|
+
ctrlKey,
|
|
157
|
+
altKey,
|
|
158
|
+
metaKey,
|
|
159
|
+
repeat: false,
|
|
160
|
+
isComposing: !!ev.composing,
|
|
161
|
+
get defaultPrevented() {
|
|
162
|
+
return prevented;
|
|
163
|
+
},
|
|
164
|
+
preventDefault() {
|
|
165
|
+
prevented = true;
|
|
166
|
+
},
|
|
167
|
+
stopPropagation() { },
|
|
168
|
+
getModifierState(name) {
|
|
169
|
+
switch (name) {
|
|
170
|
+
case 'Shift':
|
|
171
|
+
return shiftKey;
|
|
172
|
+
case 'Control':
|
|
173
|
+
return ctrlKey;
|
|
174
|
+
case 'Alt':
|
|
175
|
+
return altKey;
|
|
176
|
+
case 'Meta':
|
|
177
|
+
return metaKey;
|
|
178
|
+
default:
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* The plugins the default editor runs, in the order they have to be in:
|
|
186
|
+
* input rules, the formatting keymap (its Enter splits list items before the
|
|
187
|
+
* base keymap's Enter splits blocks), history, and prosemirror-commands'
|
|
188
|
+
* base keymap last. `<RichTextEditor>` puts these in its state; an app that
|
|
189
|
+
* owns the state (`state` + `dispatchTransaction`) builds them in itself.
|
|
190
|
+
*/
|
|
191
|
+
export function defaultPlugins(schema, options = {}) {
|
|
192
|
+
const out = [];
|
|
193
|
+
const markdown = options.inputRules !== false;
|
|
194
|
+
if (markdown || options.typography) {
|
|
195
|
+
out.push(markdownInputRules(schema, {
|
|
196
|
+
markdown,
|
|
197
|
+
typography: !!options.typography,
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
if (options.keymap !== false)
|
|
201
|
+
out.push(keymap(editingKeymap(schema)));
|
|
202
|
+
if (options.history !== false) {
|
|
203
|
+
out.push(history(), keymap({ 'Mod-z': undo, 'Shift-Mod-z': redo, 'Mod-y': redo }));
|
|
204
|
+
}
|
|
205
|
+
// every table kept rectangular, so the table commands can reason about it
|
|
206
|
+
if (hasTables(schema))
|
|
207
|
+
out.push(tableRepair());
|
|
208
|
+
out.push(keymap(baseKeymap));
|
|
209
|
+
return out;
|
|
210
|
+
}
|
|
211
|
+
/** The formatting shortcuts, for whatever of them the schema can do. */
|
|
212
|
+
export function editingKeymap(schema) {
|
|
213
|
+
const keys = {};
|
|
214
|
+
const bind = (key, cmd) => {
|
|
215
|
+
keys[key] = keys[key] ? chainCommands(keys[key], cmd) : cmd;
|
|
216
|
+
};
|
|
217
|
+
const { marks, nodes } = schema;
|
|
218
|
+
bind('Backspace', undoInputRule);
|
|
219
|
+
if (marks.strong)
|
|
220
|
+
bind('Mod-b', toggleMark(marks.strong));
|
|
221
|
+
if (marks.em)
|
|
222
|
+
bind('Mod-i', toggleMark(marks.em));
|
|
223
|
+
if (marks.code)
|
|
224
|
+
bind('Mod-`', toggleMark(marks.code));
|
|
225
|
+
if (marks.strike)
|
|
226
|
+
bind('Shift-Mod-x', toggleMark(marks.strike));
|
|
227
|
+
if (nodes.code_block) {
|
|
228
|
+
// inside a fence, Tab is indentation — and Escape-then-Tab still leaves
|
|
229
|
+
bind('Tab', indentCode);
|
|
230
|
+
bind('Shift-Tab', dedentCode);
|
|
231
|
+
}
|
|
232
|
+
if (nodes.table) {
|
|
233
|
+
bind('Tab', goToCell(1));
|
|
234
|
+
bind('Shift-Tab', goToCell(-1));
|
|
235
|
+
}
|
|
236
|
+
const item = nodes.list_item;
|
|
237
|
+
if (item) {
|
|
238
|
+
bind('Enter', splitItem(item));
|
|
239
|
+
bind('Mod-[', liftListItem(item));
|
|
240
|
+
bind('Mod-]', sinkListItem(item));
|
|
241
|
+
bind('Tab', sinkListItem(item));
|
|
242
|
+
bind('Shift-Tab', liftListItem(item));
|
|
243
|
+
}
|
|
244
|
+
if (nodes.bullet_list)
|
|
245
|
+
bind('Shift-Mod-8', wrapInList(nodes.bullet_list));
|
|
246
|
+
if (nodes.ordered_list)
|
|
247
|
+
bind('Shift-Mod-7', wrapInList(nodes.ordered_list));
|
|
248
|
+
if (item && nodes.bullet_list && 'checked' in (item.spec.attrs ?? {})) {
|
|
249
|
+
bind('Shift-Mod-9', toggleTaskList(schema));
|
|
250
|
+
}
|
|
251
|
+
if (nodes.blockquote)
|
|
252
|
+
bind('Ctrl->', wrapIn(nodes.blockquote));
|
|
253
|
+
const br = nodes.hard_break;
|
|
254
|
+
if (br) {
|
|
255
|
+
const hardBreak = chainCommands(exitCode, (state, dispatch) => {
|
|
256
|
+
dispatch?.(state.tr.replaceSelectionWith(br.create()).scrollIntoView());
|
|
257
|
+
return true;
|
|
258
|
+
});
|
|
259
|
+
bind('Mod-Enter', hardBreak);
|
|
260
|
+
bind('Shift-Enter', hardBreak);
|
|
261
|
+
}
|
|
262
|
+
if (nodes.paragraph)
|
|
263
|
+
bind('Mod-Alt-0', setBlockType(nodes.paragraph));
|
|
264
|
+
if (nodes.code_block)
|
|
265
|
+
bind('Mod-Alt-c', setBlockType(nodes.code_block));
|
|
266
|
+
if (nodes.heading) {
|
|
267
|
+
for (let level = 1; level <= 6; level++) {
|
|
268
|
+
bind(`Mod-Alt-${level}`, setBlockType(nodes.heading, { level }));
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (nodes.horizontal_rule)
|
|
272
|
+
bind('Mod-_', insertHorizontalRule(nodes.horizontal_rule));
|
|
273
|
+
return keys;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* An input rule for a delimited mark: when the closing delimiter is typed,
|
|
277
|
+
* the delimiters go and what they held takes the mark. `match[1]` is the
|
|
278
|
+
* delimited run, `match[2]` what is inside it. The typed character is the
|
|
279
|
+
* last of the closing delimiter and is simply never inserted; the rest of
|
|
280
|
+
* that delimiter is in the document and is deleted. Undoable, like every
|
|
281
|
+
* input rule: Backspace straight after gives the characters back.
|
|
282
|
+
*/
|
|
283
|
+
function markRule(pattern, type) {
|
|
284
|
+
return new InputRule(pattern, (state, match, start, end) => {
|
|
285
|
+
const whole = match[1];
|
|
286
|
+
const inner = match[2];
|
|
287
|
+
const from = start + match[0].length - whole.length;
|
|
288
|
+
const textStart = from + whole.indexOf(inner);
|
|
289
|
+
const textEnd = textStart + inner.length;
|
|
290
|
+
const tr = state.tr;
|
|
291
|
+
if (end > textEnd)
|
|
292
|
+
tr.delete(textEnd, end);
|
|
293
|
+
tr.delete(from, textStart);
|
|
294
|
+
tr.addMark(from, from + inner.length, type.create());
|
|
295
|
+
tr.removeStoredMark(type);
|
|
296
|
+
return tr;
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
/** `---` (or `***`/`___` and a space) alone in a paragraph: a rule, and a
|
|
300
|
+
* fresh paragraph after it to go on typing in. */
|
|
301
|
+
function ruleRule(rule) {
|
|
302
|
+
return new InputRule(/^(?:---|___\s|\*\*\*\s)$/, (state, _match, start) => {
|
|
303
|
+
const $start = state.doc.resolve(start);
|
|
304
|
+
const para = $start.parent;
|
|
305
|
+
if (!para.isTextblock || $start.parentOffset !== 0 || $start.depth < 1)
|
|
306
|
+
return null;
|
|
307
|
+
const parent = $start.node(-1);
|
|
308
|
+
const index = $start.index(-1);
|
|
309
|
+
const content = Fragment.from([rule.create(), para.type.create()]);
|
|
310
|
+
if (!parent.canReplace(index, index + 1, content))
|
|
311
|
+
return null;
|
|
312
|
+
const pos = $start.before();
|
|
313
|
+
const tr = state.tr.replaceWith(pos, pos + para.nodeSize, content);
|
|
314
|
+
return tr.setSelection(TextSelection.near(tr.doc.resolve(pos + 2)));
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
/** `[ ] ` or `[x] ` at the start of a paragraph — or of a list item's first
|
|
318
|
+
* paragraph — makes it a task. */
|
|
319
|
+
function taskRule(schema) {
|
|
320
|
+
const { list_item: item, bullet_list: list, paragraph } = schema.nodes;
|
|
321
|
+
if (!item || !list || !paragraph || !('checked' in (item.spec.attrs ?? {})))
|
|
322
|
+
return null;
|
|
323
|
+
return new InputRule(/^\[( |x|X)?\]\s$/, (state, match, start, end) => {
|
|
324
|
+
const checked = (match[1] ?? ' ').toLowerCase() === 'x';
|
|
325
|
+
const $start = state.doc.resolve(start);
|
|
326
|
+
if ($start.parentOffset !== 0 || $start.parent.type !== paragraph)
|
|
327
|
+
return null;
|
|
328
|
+
const tr = state.tr.delete(start, end);
|
|
329
|
+
const d = $start.depth - 1;
|
|
330
|
+
if (d > 0 && $start.node(d).type === item && $start.index(d) === 0) {
|
|
331
|
+
return tr.setNodeMarkup($start.before(d), undefined, {
|
|
332
|
+
...$start.node(d).attrs,
|
|
333
|
+
checked,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
const range = tr.doc.resolve(start).blockRange();
|
|
337
|
+
const wrapping = range && findWrapping(range, list);
|
|
338
|
+
if (!range || !wrapping)
|
|
339
|
+
return null;
|
|
340
|
+
tr.wrap(range, wrapping);
|
|
341
|
+
// the item the wrap just made sits two positions before the paragraph
|
|
342
|
+
const itemPos = range.start + 1;
|
|
343
|
+
const made = tr.doc.nodeAt(itemPos);
|
|
344
|
+
if (made?.type === item)
|
|
345
|
+
tr.setNodeMarkup(itemPos, undefined, { ...made.attrs, checked });
|
|
346
|
+
return tr;
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
/** Markdown shortcuts, for whatever of them the schema can hold. */
|
|
350
|
+
export function markdownInputRules(schema, options = {}) {
|
|
351
|
+
const rules = [];
|
|
352
|
+
const { nodes, marks } = schema;
|
|
353
|
+
if (options.typography)
|
|
354
|
+
rules.push(...smartQuotes, ellipsis, emDash);
|
|
355
|
+
if (options.markdown !== false) {
|
|
356
|
+
if (nodes.blockquote)
|
|
357
|
+
rules.push(wrappingInputRule(/^\s*>\s$/, nodes.blockquote));
|
|
358
|
+
if (nodes.ordered_list) {
|
|
359
|
+
rules.push(wrappingInputRule(/^(\d+)\.\s$/, nodes.ordered_list, (match) => ({ order: Number(match[1]) }), (match, node) => node.childCount + Number(node.attrs.order) === Number(match[1])));
|
|
360
|
+
}
|
|
361
|
+
const task = taskRule(schema);
|
|
362
|
+
if (task)
|
|
363
|
+
rules.push(task);
|
|
364
|
+
if (nodes.bullet_list)
|
|
365
|
+
rules.push(wrappingInputRule(/^\s*([-+*])\s$/, nodes.bullet_list));
|
|
366
|
+
if (nodes.code_block) {
|
|
367
|
+
rules.push(textblockTypeInputRule(/^```([^\s`]*)\s$/, nodes.code_block, (match) => ({
|
|
368
|
+
params: match[1] ?? '',
|
|
369
|
+
})));
|
|
370
|
+
}
|
|
371
|
+
if (nodes.heading) {
|
|
372
|
+
rules.push(textblockTypeInputRule(/^(#{1,6})\s$/, nodes.heading, (match) => ({
|
|
373
|
+
level: match[1].length,
|
|
374
|
+
})));
|
|
375
|
+
}
|
|
376
|
+
if (nodes.horizontal_rule)
|
|
377
|
+
rules.push(ruleRule(nodes.horizontal_rule));
|
|
378
|
+
// strong before em: `**x*` must not become italic on its way to bold
|
|
379
|
+
if (marks.strong) {
|
|
380
|
+
rules.push(markRule(/(?:^|[^*\\])(\*\*(?!\s)([^*]+?)(?<!\s)\*\*)$/, marks.strong), markRule(/(?:^|[^_\\\p{L}\p{N}])(__(?!\s)([^_]+?)(?<!\s)__)$/u, marks.strong));
|
|
381
|
+
}
|
|
382
|
+
if (marks.em) {
|
|
383
|
+
rules.push(markRule(/(?:^|[^*\\])(\*(?!\s)([^*]+?)(?<!\s)\*)$/, marks.em), markRule(/(?:^|[^_\\\p{L}\p{N}])(_(?!\s)([^_]+?)(?<!\s)_)$/u, marks.em));
|
|
384
|
+
}
|
|
385
|
+
if (marks.code)
|
|
386
|
+
rules.push(markRule(/(?:^|[^`\\])(`([^`]+)`)$/, marks.code));
|
|
387
|
+
if (marks.strike) {
|
|
388
|
+
rules.push(markRule(/(?:^|[^~\\])(~~(?!\s)([^~]+?)(?<!\s)~~)$/, marks.strike));
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return inputRules({ rules });
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=keymap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keymap.js","sourceRoot":"","sources":["../../src/rich-text-editor/keymap.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,uBAAuB;AACvB,EAAE;AACF,qEAAqE;AACrE,8EAA8E;AAC9E,oEAAoE;AACpE,4EAA4E;AAC5E,8BAA8B;AAC9B,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,0EAA0E;AAC1E,yDAAyD;AACzD,6EAA6E;AAC7E,4EAA4E;AAC5E,wEAAwE;AACxE,uEAAuE;AACvE,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,yDAAyD;AACzD,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,OAAO,EACL,UAAU,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,MAAM,GACP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,UAAU,EACV,WAAW,EACX,sBAAsB,EACtB,aAAa,EACb,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EACL,UAAU,EACV,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAOrD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,cAAc,IAAI,GAAG;QACrE,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,CAAC;AACb,CAAC;AAED,MAAM,GAAG,GAAI,UAAoD,CAAC,SAAS,CAAC;AAC5E,4EAA4E;AAC5E,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;AAkC3E,4EAA4E;AAC5E,MAAM,KAAK,GAAG,IAAI,GAAG,CAA2B;IAC9C,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvB,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW;IACpC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY;IACtC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,sCAAsC;IAC5D,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrB,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;CAClB,CAAC,CAAC;AACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;IAAE,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3E,8DAA8D;AAC9D,MAAM,WAAW,GAA2B;IAC1C,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,CAAC,EAAE,GAAG;IACN,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,CAAC,EAAE,EAAE;IACL,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;CACR,CAAC;AAEF,SAAS,MAAM,CAAC,EAAU;IACxB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,aAAa,CAC3B,EAAW,EACX,OAAwB;IAExB,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;IAC3B,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;IAC3B,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,WAAW;QACtC,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,IAAI,GAAW,CAAC;IAChB,IAAI,OAAe,CAAC;IACpB,IAAI,KAAK,EAAE,CAAC;QACV,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GACT,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI;YAC7D,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC;YAChC,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,OAAO,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;QAChD,GAAG,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,cAAc,CAAC;QAC5D,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;IAC3B,OAAO;QACL,IAAI,EAAE,SAAS;QACf,GAAG;QACH,IAAI,EAAE,EAAE;QACR,OAAO;QACP,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,CAAC;QACX,QAAQ;QACR,OAAO;QACP,MAAM;QACN,OAAO;QACP,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS;QAC3B,IAAI,gBAAgB;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,cAAc;YACZ,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,eAAe,KAAI,CAAC;QACpB,gBAAgB,CAAC,IAAY;YAC3B,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,OAAO;oBACV,OAAO,QAAQ,CAAC;gBAClB,KAAK,SAAS;oBACZ,OAAO,OAAO,CAAC;gBACjB,KAAK,KAAK;oBACR,OAAO,MAAM,CAAC;gBAChB,KAAK,MAAM;oBACT,OAAO,OAAO,CAAC;gBACjB;oBACE,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAiBD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,OAAO,GAAyB,EAAE;IAElC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC;IAC9C,IAAI,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACnC,GAAG,CAAC,IAAI,CACN,kBAAkB,CAAC,MAAM,EAAE;YACzB,QAAQ;YACR,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU;SACjC,CAAC,CACH,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CACN,OAAO,EAAE,EACT,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAC9D,CAAC;IACJ,CAAC;IACD,0EAA0E;IAC1E,IAAI,SAAS,CAAC,MAAM,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,GAAY,EAAQ,EAAE;QAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9D,CAAC,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAEhC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM;QAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,IAAI;QAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,MAAM;QAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,wEAAwE;QACxE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7B,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,WAAW;QAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,YAAY;QAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5E,IAAI,IAAI,IAAI,KAAK,CAAC,WAAW,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,KAAK,CAAC,UAAU;QAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAE/D,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;IAC5B,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC5D,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,CAAC,SAAS;QAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,UAAU;QAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,WAAW,KAAK,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,eAAe;QACvB,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,QAAQ,CAAC,OAAe,EAAE,IAAc;IAC/C,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;QACzC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,GAAG,OAAO;YAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3C,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3B,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;mDACmD;AACnD,SAAS,QAAQ,CAAC,IAAc;IAC9B,OAAO,IAAI,SAAS,CAAC,0BAA0B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;QACxE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnE,OAAO,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;mCACmC;AACnC,SAAS,QAAQ,CAAC,MAAc;IAC9B,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;IACvE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,OAAO,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACpE,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;QACxD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;YAC/D,OAAO,IAAI,CAAC;QACd,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE;gBACnD,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;gBACvB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,KAAK,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QACrC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzB,sEAAsE;QACtE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI;YACrB,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,OAAO,GAAiD,EAAE;IAE1D,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAChC,IAAI,OAAO,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,UAAU;YAClB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CACR,iBAAiB,CACf,aAAa,EACb,KAAK,CAAC,YAAY,EAClB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACxC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CACd,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAClE,CACF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,KAAK,CAAC,WAAW;YACnB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACrE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CACR,sBAAsB,CACpB,kBAAkB,EAClB,KAAK,CAAC,UAAU,EAChB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACV,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;aACvB,CAAC,CACH,CACF,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CACR,sBAAsB,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAChE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;aACvB,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,eAAe;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QACvE,qEAAqE;QACrE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,8CAA8C,EAAE,KAAK,CAAC,MAAM,CAAC,EACtE,QAAQ,CACN,qDAAqD,EACrD,KAAK,CAAC,MAAM,CACb,CACF,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,0CAA0C,EAAE,KAAK,CAAC,EAAE,CAAC,EAC9D,QAAQ,CAAC,mDAAmD,EAAE,KAAK,CAAC,EAAE,CAAC,CACxE,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,IAAI;YACZ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,0CAA0C,EAAE,KAAK,CAAC,MAAM,CAAC,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Node as PMNode } from 'prosemirror-model';
|
|
2
|
+
import type { Mappable } from 'prosemirror-transform';
|
|
3
|
+
export declare class BlockKeys {
|
|
4
|
+
private counter;
|
|
5
|
+
/** Block start position → key, for the current document. */
|
|
6
|
+
private byPos;
|
|
7
|
+
private posByKey;
|
|
8
|
+
private nodeByKey;
|
|
9
|
+
constructor(doc: PMNode);
|
|
10
|
+
/** How many blocks the document has — every non-inline node but the
|
|
11
|
+
* document itself. */
|
|
12
|
+
get size(): number;
|
|
13
|
+
/** The key of the block that starts at `pos`, if one does. */
|
|
14
|
+
keyAt(pos: number): string | undefined;
|
|
15
|
+
/** Where the block under `key` starts now. */
|
|
16
|
+
posOf(key: string): number | undefined;
|
|
17
|
+
/** The node the block under `key` is now. */
|
|
18
|
+
nodeOf(key: string): PMNode | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Re-key for a new document. `mapping` is the transaction (or the run of
|
|
21
|
+
* transactions) that produced it from the one the keys were last built
|
|
22
|
+
* for; null when nothing knows how the two relate.
|
|
23
|
+
*
|
|
24
|
+
* O(blocks), which is the right order: 10,000 paragraphs is a millisecond,
|
|
25
|
+
* and the render that follows touches only the blocks whose node changed.
|
|
26
|
+
*/
|
|
27
|
+
update(doc: PMNode, mapping: Mappable | null): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/rich-text-editor/keys.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAK;IACpB,4DAA4D;IAC5D,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,SAAS,CAA6B;IAE9C,YAAY,GAAG,EAAE,MAAM,EAEtB;IAED;2BACuB;IACvB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,8DAA8D;IAC9D,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErC;IAED,8CAA8C;IAC9C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErC;IAED,6CAA6C;IAC7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEtC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAiDlD;CACF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export class BlockKeys {
|
|
2
|
+
counter = 0;
|
|
3
|
+
/** Block start position → key, for the current document. */
|
|
4
|
+
byPos = new Map();
|
|
5
|
+
posByKey = new Map();
|
|
6
|
+
nodeByKey = new Map();
|
|
7
|
+
constructor(doc) {
|
|
8
|
+
this.update(doc, null);
|
|
9
|
+
}
|
|
10
|
+
/** How many blocks the document has — every non-inline node but the
|
|
11
|
+
* document itself. */
|
|
12
|
+
get size() {
|
|
13
|
+
return this.byPos.size;
|
|
14
|
+
}
|
|
15
|
+
/** The key of the block that starts at `pos`, if one does. */
|
|
16
|
+
keyAt(pos) {
|
|
17
|
+
return this.byPos.get(pos);
|
|
18
|
+
}
|
|
19
|
+
/** Where the block under `key` starts now. */
|
|
20
|
+
posOf(key) {
|
|
21
|
+
return this.posByKey.get(key);
|
|
22
|
+
}
|
|
23
|
+
/** The node the block under `key` is now. */
|
|
24
|
+
nodeOf(key) {
|
|
25
|
+
return this.nodeByKey.get(key);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Re-key for a new document. `mapping` is the transaction (or the run of
|
|
29
|
+
* transactions) that produced it from the one the keys were last built
|
|
30
|
+
* for; null when nothing knows how the two relate.
|
|
31
|
+
*
|
|
32
|
+
* O(blocks), which is the right order: 10,000 paragraphs is a millisecond,
|
|
33
|
+
* and the render that follows touches only the blocks whose node changed.
|
|
34
|
+
*/
|
|
35
|
+
update(doc, mapping) {
|
|
36
|
+
// 1. Where each old block's start went.
|
|
37
|
+
const carried = new Map();
|
|
38
|
+
if (mapping) {
|
|
39
|
+
for (const [pos, key] of this.byPos) {
|
|
40
|
+
const result = mapping.mapResult(pos, 1);
|
|
41
|
+
// the token after the start is the block's own opening — gone means
|
|
42
|
+
// the block is gone, merged into whatever preceded it
|
|
43
|
+
if (result.deletedAfter)
|
|
44
|
+
continue;
|
|
45
|
+
if (!carried.has(result.pos))
|
|
46
|
+
carried.set(result.pos, key);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// 2. Which old node objects are still here, for when nothing mapped.
|
|
50
|
+
const byNode = new Map();
|
|
51
|
+
const carriedKeys = new Set(carried.values());
|
|
52
|
+
for (const [key, node] of this.nodeByKey) {
|
|
53
|
+
if (carriedKeys.has(key))
|
|
54
|
+
continue;
|
|
55
|
+
const list = byNode.get(node);
|
|
56
|
+
if (list)
|
|
57
|
+
list.push(key);
|
|
58
|
+
else
|
|
59
|
+
byNode.set(node, [key]);
|
|
60
|
+
}
|
|
61
|
+
const byPos = new Map();
|
|
62
|
+
const posByKey = new Map();
|
|
63
|
+
const nodeByKey = new Map();
|
|
64
|
+
doc.descendants((node, pos) => {
|
|
65
|
+
if (node.isInline)
|
|
66
|
+
return false;
|
|
67
|
+
let key = carried.get(pos);
|
|
68
|
+
if (key !== undefined && posByKey.has(key))
|
|
69
|
+
key = undefined;
|
|
70
|
+
if (key === undefined) {
|
|
71
|
+
const list = byNode.get(node);
|
|
72
|
+
while (list && list.length > 0) {
|
|
73
|
+
const candidate = list.shift();
|
|
74
|
+
if (!posByKey.has(candidate)) {
|
|
75
|
+
key = candidate;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (key === undefined)
|
|
81
|
+
key = `b${(this.counter++).toString(36)}`;
|
|
82
|
+
byPos.set(pos, key);
|
|
83
|
+
posByKey.set(key, pos);
|
|
84
|
+
nodeByKey.set(key, node);
|
|
85
|
+
// a textblock's children are inline: nothing below it has a key
|
|
86
|
+
return !node.isTextblock;
|
|
87
|
+
});
|
|
88
|
+
this.byPos = byPos;
|
|
89
|
+
this.posByKey = posByKey;
|
|
90
|
+
this.nodeByKey = nodeByKey;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/rich-text-editor/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Mark, Node as PMNode } from 'prosemirror-model';
|
|
2
|
+
import type { CodeBlockLook } from '../codeblock/index.js';
|
|
3
|
+
import type { Language } from '../code-language/index.js';
|
|
4
|
+
import type { InlineLook, RunStyle } from './inline.js';
|
|
5
|
+
/** How a mark looks: a fixed style, or one worked out from what it covers. */
|
|
6
|
+
export type MarkStyle = RunStyle | ((mark: Mark, under: RunStyle) => RunStyle);
|
|
7
|
+
export interface LookOptions {
|
|
8
|
+
fontSize?: number;
|
|
9
|
+
fontFamily?: string;
|
|
10
|
+
monoFamily?: string;
|
|
11
|
+
markStyles?: Readonly<Record<string, MarkStyle>>;
|
|
12
|
+
resolveLanguage?: (tag: string) => Language | null;
|
|
13
|
+
highlight?: boolean;
|
|
14
|
+
/** A disabled editor: the document is set in the muted ink. (react-x11
|
|
15
|
+
* styles have no opacity to fade a subtree with.) */
|
|
16
|
+
dim?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Where a textblock sits, as far as its look is concerned. */
|
|
19
|
+
export interface BlockContext {
|
|
20
|
+
/** Inside a blockquote: set in the muted ink, as `<Markdown>` sets it. */
|
|
21
|
+
quote: boolean;
|
|
22
|
+
/** A table's header row. */
|
|
23
|
+
header: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface EditorLook {
|
|
26
|
+
size: number;
|
|
27
|
+
family: string;
|
|
28
|
+
mono: string;
|
|
29
|
+
text: string;
|
|
30
|
+
muted: string;
|
|
31
|
+
link: string;
|
|
32
|
+
accent: string;
|
|
33
|
+
accentText: string;
|
|
34
|
+
border: string;
|
|
35
|
+
background: string;
|
|
36
|
+
surface: string;
|
|
37
|
+
selection: string;
|
|
38
|
+
/** The selection while focus is elsewhere — still there, but quieter. */
|
|
39
|
+
selectionBlurred: string;
|
|
40
|
+
caret: string;
|
|
41
|
+
codeBg: string;
|
|
42
|
+
headerBg: string;
|
|
43
|
+
highlight: string;
|
|
44
|
+
radius: number;
|
|
45
|
+
blockGap: number;
|
|
46
|
+
headingScales: readonly number[];
|
|
47
|
+
code: CodeBlockLook;
|
|
48
|
+
/** Two looks with the same key draw identically — the render cache's epoch. */
|
|
49
|
+
key: string;
|
|
50
|
+
/** A textblock's inline look. Cached: the same node type in the same
|
|
51
|
+
* context is the same object, which is what lets a block that did not
|
|
52
|
+
* change skip its layout. */
|
|
53
|
+
inline(node: PMNode, context: BlockContext): InlineLook;
|
|
54
|
+
}
|
|
55
|
+
/** The tag and attributes a node's or mark's `toDOM` writes, if it writes an
|
|
56
|
+
* array — the one shape readable without a DOM. */
|
|
57
|
+
export declare function domTagOf(spec: {
|
|
58
|
+
toDOM?: unknown;
|
|
59
|
+
} | undefined, value: unknown): {
|
|
60
|
+
tag: string;
|
|
61
|
+
attrs: Record<string, unknown>;
|
|
62
|
+
} | null;
|
|
63
|
+
/**
|
|
64
|
+
* The part of a CSS declaration block text can carry — colour, background,
|
|
65
|
+
* weight, style, decoration, family, pixel size. What a decoration's
|
|
66
|
+
* `style` attribute and an unknown mark's `toDOM` attributes are read
|
|
67
|
+
* through; everything else in them is ignored.
|
|
68
|
+
*/
|
|
69
|
+
export declare function styleFromCSS(css: string, under: RunStyle): RunStyle;
|
|
70
|
+
export declare function deriveLook(theme: Record<string, unknown>, options: LookOptions): EditorLook;
|
|
71
|
+
//# sourceMappingURL=look.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"look.d.ts","sourceRoot":"","sources":["../../src/rich-text-editor/look.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExD,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAE/E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;0DACsD;IACtD,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,KAAK,EAAE,OAAO,CAAC;IACf,4BAA4B;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ;;kCAE8B;IAC9B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,CAAC;CACzD;AA0CD;oDACoD;AACpD,wBAAgB,QAAQ,CACtB,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,EACrC,KAAK,EAAE,OAAO,GACb;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,CAiBxD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CA8CnE;AA+BD,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,WAAW,GACnB,UAAU,CAsMZ"}
|