@openleaf-editor/ui 0.1.0-beta.1 → 0.1.0-beta.3
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 +85 -0
- package/dist/block-type.d.ts +5 -0
- package/dist/block-type.d.ts.map +1 -0
- package/dist/block-type.js +133 -0
- package/dist/block-type.js.map +1 -0
- package/dist/content-css.d.ts +31 -0
- package/dist/content-css.d.ts.map +1 -0
- package/dist/content-css.js +272 -0
- package/dist/content-css.js.map +1 -0
- package/dist/css.d.ts +23 -0
- package/dist/css.d.ts.map +1 -0
- package/dist/css.js +813 -0
- package/dist/css.js.map +1 -0
- package/dist/dialog.d.ts +158 -18
- package/dist/dialog.d.ts.map +1 -1
- package/dist/dialog.js +605 -130
- package/dist/dialog.js.map +1 -1
- package/dist/floating.d.ts +29 -0
- package/dist/floating.d.ts.map +1 -0
- package/dist/floating.js +130 -0
- package/dist/floating.js.map +1 -0
- package/dist/help.d.ts +9 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +97 -0
- package/dist/help.js.map +1 -0
- package/dist/i18n.d.ts +39 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +114 -0
- package/dist/i18n.js.map +1 -0
- package/dist/icons.d.ts +7 -1
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +10 -2
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +15 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/dist/items.d.ts +2 -1
- package/dist/items.d.ts.map +1 -1
- package/dist/items.js +263 -17
- package/dist/items.js.map +1 -1
- package/dist/live.d.ts +42 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +83 -0
- package/dist/live.js.map +1 -0
- package/dist/menu.d.ts +85 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +500 -0
- package/dist/menu.js.map +1 -0
- package/dist/openleaf.css +325 -7
- package/dist/overflow.d.ts +44 -0
- package/dist/overflow.d.ts.map +1 -0
- package/dist/overflow.js +323 -0
- package/dist/overflow.js.map +1 -0
- package/dist/pickers.d.ts +43 -0
- package/dist/pickers.d.ts.map +1 -0
- package/dist/pickers.js +52 -0
- package/dist/pickers.js.map +1 -0
- package/dist/registry.d.ts +72 -18
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +7 -6
- package/dist/registry.js.map +1 -1
- package/dist/skins.d.ts.map +1 -1
- package/dist/skins.js +48 -14
- package/dist/skins.js.map +1 -1
- package/dist/styles.d.ts +61 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +77 -421
- package/dist/styles.js.map +1 -1
- package/dist/testing.d.ts +3 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +3 -0
- package/dist/testing.js.map +1 -0
- package/dist/toolbar.d.ts +91 -12
- package/dist/toolbar.d.ts.map +1 -1
- package/dist/toolbar.js +459 -127
- package/dist/toolbar.js.map +1 -1
- package/dist/upload.d.ts +11 -0
- package/dist/upload.d.ts.map +1 -1
- package/dist/upload.js +15 -1
- package/dist/upload.js.map +1 -1
- package/package.json +17 -3
package/dist/toolbar.d.ts
CHANGED
|
@@ -13,13 +13,16 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Two details that are easy to get wrong and both matter:
|
|
15
15
|
*
|
|
16
|
-
* 1. **Arrow-key roving
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
16
|
+
* 1. **Arrow-key roving covers the `<select>` controls too.** The default bar has
|
|
17
|
+
* four of them -- paragraph style, font family, font size, line height -- and
|
|
18
|
+
* when focus is on one, Left/Right have two competing owners: the roving
|
|
19
|
+
* handler wants to move to the next item, the select natively wants to change
|
|
20
|
+
* its value. Leaving them out was the earlier resolution, and it cost more
|
|
21
|
+
* than it saved: ArrowRight from Redo jumped past four controls to Bold, and
|
|
22
|
+
* each select became its own tab stop, making the default bar five tab stops
|
|
23
|
+
* instead of one. The APG resolution is the one used here -- the toolbar takes
|
|
24
|
+
* Left/Right, and Up/Down, Home/End and typeahead are left to the select, so
|
|
25
|
+
* it is still fully operable and Alt+Down still opens its list.
|
|
23
26
|
*
|
|
24
27
|
* 2. **Escape returns focus and the selection to the content.** Preventing mouse
|
|
25
28
|
* clicks from stealing focus solves the mouse case and leaves the keyboard
|
|
@@ -28,6 +31,7 @@
|
|
|
28
31
|
* is blind-Tabbing through the rest of the host's form. `Alt+F10` enters,
|
|
29
32
|
* Escape leaves, matching TinyMCE and CKEditor 5 so muscle memory transfers.
|
|
30
33
|
*/
|
|
34
|
+
import { type FormatSpec } from '@openleaf-editor/core';
|
|
31
35
|
import type { EditorState, Transaction } from 'prosemirror-state';
|
|
32
36
|
import type { EditorView } from 'prosemirror-view';
|
|
33
37
|
export interface ToolbarOptions {
|
|
@@ -35,23 +39,98 @@ export interface ToolbarOptions {
|
|
|
35
39
|
label?: string;
|
|
36
40
|
/** Space-separated item ids, `|` for a separator. */
|
|
37
41
|
layout?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Collapse groups that do not fit into a More menu. Off by default: wrapping
|
|
44
|
+
* keeps every control visible, which is the safer accessibility default.
|
|
45
|
+
*/
|
|
46
|
+
overflow?: boolean;
|
|
47
|
+
/** Extra block formats, typically classes from the host's content CSS. */
|
|
48
|
+
formats?: readonly FormatSpec[];
|
|
49
|
+
/**
|
|
50
|
+
* Language for this toolbar's labels, independent of every other editor's.
|
|
51
|
+
* Absent means the document-wide locale.
|
|
52
|
+
*/
|
|
53
|
+
locale?: string | null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* What a host or a plugin actually needs from a toolbar.
|
|
57
|
+
*
|
|
58
|
+
* Published instead of the `Toolbar` class itself. The documented need is
|
|
59
|
+
* `setItemState` -- pushing state no predicate can derive, such as an upload in
|
|
60
|
+
* flight -- and the keyboard entry point; exposing the class froze its whole
|
|
61
|
+
* surface, private fields and rendering internals included, into the public API
|
|
62
|
+
* before 1.0.
|
|
63
|
+
*/
|
|
64
|
+
export interface ToolbarHandle {
|
|
65
|
+
/** Force a control's state, overriding its `isActive`/`isEnabled` predicate. */
|
|
66
|
+
setItemState(id: string, state: {
|
|
67
|
+
active?: boolean;
|
|
68
|
+
enabled?: boolean;
|
|
69
|
+
}): void;
|
|
70
|
+
/** Move focus into the bar, as Alt+F10 does. */
|
|
71
|
+
focusToolbar(): void;
|
|
38
72
|
}
|
|
39
73
|
export declare class Toolbar {
|
|
40
74
|
#private;
|
|
41
75
|
readonly el: HTMLDivElement;
|
|
42
76
|
constructor(host: HTMLElement, doc: Document, options?: ToolbarOptions);
|
|
77
|
+
/**
|
|
78
|
+
* Change this toolbar's language and rebuild its labels.
|
|
79
|
+
*
|
|
80
|
+
* Per toolbar rather than per document, so one editor switching language does
|
|
81
|
+
* not relabel every other editor on the page.
|
|
82
|
+
*/
|
|
83
|
+
setLocale(next: string | null): void;
|
|
84
|
+
/**
|
|
85
|
+
* Enter or leave source view.
|
|
86
|
+
*
|
|
87
|
+
* Every control except the one that leaves again goes unavailable. In source
|
|
88
|
+
* mode a formatting command ran against the hidden document and the textarea
|
|
89
|
+
* was then reparsed over the top of it, so pressing Bold silently discarded
|
|
90
|
+
* the edit -- a button that does nothing is better than a button that
|
|
91
|
+
* destroys work, and a button that says it is unavailable is better still.
|
|
92
|
+
*/
|
|
93
|
+
setSourceMode(active: boolean): void;
|
|
43
94
|
/** Attach to a view and build the controls. */
|
|
44
95
|
mount(view: EditorView): void;
|
|
96
|
+
/**
|
|
97
|
+
* Detach the toolbar AND take its DOM with it.
|
|
98
|
+
*
|
|
99
|
+
* Removing the nodes is part of the contract, not tidiness. The host appends
|
|
100
|
+
* `el` into the editor element and reads that element's
|
|
101
|
+
* `innerHTML` back as document content when it rebuilds -- so a toolbar left
|
|
102
|
+
* behind by `destroy()` becomes the author's document on the next build, and
|
|
103
|
+
* then gets posted to the server.
|
|
104
|
+
*
|
|
105
|
+
* Idempotent: `.remove()` on a detached node is a no-op.
|
|
106
|
+
*/
|
|
45
107
|
destroy(): void;
|
|
46
|
-
/**
|
|
108
|
+
/**
|
|
109
|
+
* The editor's live region.
|
|
110
|
+
*
|
|
111
|
+
* One per host, shared by every bar on it, and already mounted -- so a host
|
|
112
|
+
* that appends this is moving a node it already owns rather than adopting a
|
|
113
|
+
* detached one. Kept on the class because integrations reach for it.
|
|
114
|
+
*/
|
|
47
115
|
get liveRegion(): HTMLDivElement;
|
|
48
116
|
/**
|
|
49
117
|
* Reflect the editor state onto the controls.
|
|
50
118
|
*
|
|
51
|
-
* Deliberately synchronous, not batched into an animation frame
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
119
|
+
* Deliberately synchronous, not batched into an animation frame: batching
|
|
120
|
+
* would put a perceptible frame of lag between pressing Bold and the button
|
|
121
|
+
* lighting up.
|
|
122
|
+
*
|
|
123
|
+
* This used to claim the predicates were "sub-millisecond work" and that the
|
|
124
|
+
* performance problem "does not exist". It did. Every control without an
|
|
125
|
+
* `isEnabled` is probed by dry-running its command, each of which walks the
|
|
126
|
+
* selection, and a page routinely carries four bars over one editor -- so a
|
|
127
|
+
* Select-All on a hundred-page document measured 1.4 ms per bar and about
|
|
128
|
+
* 3 ms per pointermove during a selection drag, inside `dispatchTransaction`.
|
|
129
|
+
* What makes synchronous affordable is the three guards below it: skipping
|
|
130
|
+
* transactions that cannot have changed an answer, caching each answer per
|
|
131
|
+
* state so the four bars share one computation, and giving the alignment items
|
|
132
|
+
* an explicit `isEnabled` so they stop dry-running a command that walks the
|
|
133
|
+
* selection twice.
|
|
55
134
|
*
|
|
56
135
|
* `tr` is passed so announcements can be gated on a real formatting change.
|
|
57
136
|
*/
|
package/dist/toolbar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../src/toolbar.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../src/toolbar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAclD,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9E,gDAAgD;IAChD,YAAY,IAAI,IAAI,CAAA;CACrB;AAmHD,qBAAa,OAAO;;IAClB,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;gBAmCf,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,GAAE,cAAmB;IAoC1E;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAOpC;;;;;;;;OAQG;IACH,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAMpC,+CAA+C;IAC/C,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAc7B;;;;;;;;;;OAUG;IACH,OAAO,IAAI,IAAI;IA+Bf;;;;;;OAMG;IACH,IAAI,UAAU,IAAI,cAAc,CAE/B;IAyTD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,WAAW,GAAG,IAAI;IAgOlD;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IA0G9E,iEAAiE;IACjE,YAAY,IAAI,IAAI;IAYpB,mEAAmE;IACnE,oBAAoB,IAAI,IAAI;CAG7B"}
|