@openleaf-editor/ui 0.1.0-beta.0 → 0.1.0-beta.2
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/dist/content-css.d.ts +13 -0
- package/dist/content-css.d.ts.map +1 -0
- package/dist/content-css.js +57 -0
- package/dist/content-css.js.map +1 -0
- package/dist/dialog.d.ts +87 -2
- package/dist/dialog.d.ts.map +1 -1
- package/dist/dialog.js +358 -68
- package/dist/dialog.js.map +1 -1
- package/dist/floating.d.ts +25 -0
- package/dist/floating.d.ts.map +1 -0
- package/dist/floating.js +82 -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 +73 -0
- package/dist/help.js.map +1 -0
- package/dist/i18n.d.ts +31 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +89 -0
- package/dist/i18n.js.map +1 -0
- package/dist/icons.d.ts +1 -1
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +17 -1
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/items.d.ts +2 -0
- package/dist/items.d.ts.map +1 -1
- package/dist/items.js +81 -4
- package/dist/items.js.map +1 -1
- package/dist/menu.d.ts +56 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +360 -0
- package/dist/menu.js.map +1 -0
- package/dist/openleaf.css +216 -0
- package/dist/overflow.d.ts +17 -0
- package/dist/overflow.d.ts.map +1 -0
- package/dist/overflow.js +138 -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 +49 -8
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +14 -0
- package/dist/registry.js.map +1 -1
- package/dist/styles.d.ts +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +216 -0
- package/dist/styles.js.map +1 -1
- package/dist/toolbar.d.ts +20 -0
- package/dist/toolbar.d.ts.map +1 -1
- package/dist/toolbar.js +181 -21
- package/dist/toolbar.js.map +1 -1
- package/dist/upload.d.ts +95 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +104 -0
- package/dist/upload.js.map +1 -0
- package/package.json +2 -2
package/dist/floating.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Floating toolbars: one for a non-empty selection, one for an empty block
|
|
3
|
+
* that is waiting to be filled.
|
|
4
|
+
*
|
|
5
|
+
* They reuse the same `Toolbar` class as the main bar so the keyboard model,
|
|
6
|
+
* live region and item registry stay in one place. Positioning is the only
|
|
7
|
+
* extra job, and it is deliberately pointer-driven: a keyboard user already
|
|
8
|
+
* has Alt+F10 for the main toolbar, and a second bar that jumps around under
|
|
9
|
+
* arrow keys is a focus trap waiting to happen.
|
|
10
|
+
*/
|
|
11
|
+
import { Toolbar } from './toolbar.js';
|
|
12
|
+
export const DEFAULT_SELECTION_LAYOUT = 'bold italic underline | link';
|
|
13
|
+
export const DEFAULT_INSERT_LAYOUT = 'link image horizontalRule';
|
|
14
|
+
export class FloatingToolbars {
|
|
15
|
+
#host;
|
|
16
|
+
#doc;
|
|
17
|
+
#view = null;
|
|
18
|
+
#selection;
|
|
19
|
+
#insert;
|
|
20
|
+
constructor(host, doc, options) {
|
|
21
|
+
this.#host = host;
|
|
22
|
+
this.#doc = doc;
|
|
23
|
+
this.#selection = options.selectionLayout
|
|
24
|
+
? new Toolbar(host, doc, { layout: options.selectionLayout, label: 'Selection formatting' })
|
|
25
|
+
: null;
|
|
26
|
+
this.#insert = options.insertLayout
|
|
27
|
+
? new Toolbar(host, doc, { layout: options.insertLayout, label: 'Insert' })
|
|
28
|
+
: null;
|
|
29
|
+
if (this.#selection) {
|
|
30
|
+
this.#selection.el.classList.add('ol-floating');
|
|
31
|
+
this.#selection.el.hidden = true;
|
|
32
|
+
host.appendChild(this.#selection.el);
|
|
33
|
+
}
|
|
34
|
+
if (this.#insert) {
|
|
35
|
+
this.#insert.el.classList.add('ol-floating');
|
|
36
|
+
this.#insert.el.hidden = true;
|
|
37
|
+
host.appendChild(this.#insert.el);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
mount(view) {
|
|
41
|
+
this.#view = view;
|
|
42
|
+
this.#selection?.mount(view);
|
|
43
|
+
this.#insert?.mount(view);
|
|
44
|
+
}
|
|
45
|
+
update(state) {
|
|
46
|
+
this.#selection?.update(state);
|
|
47
|
+
this.#insert?.update(state);
|
|
48
|
+
this.#position(state);
|
|
49
|
+
}
|
|
50
|
+
destroy() {
|
|
51
|
+
this.#selection?.destroy();
|
|
52
|
+
this.#insert?.destroy();
|
|
53
|
+
this.#selection?.el.remove();
|
|
54
|
+
this.#insert?.el.remove();
|
|
55
|
+
}
|
|
56
|
+
#position(state) {
|
|
57
|
+
const view = this.#view;
|
|
58
|
+
if (!view)
|
|
59
|
+
return;
|
|
60
|
+
const empty = state.selection.empty;
|
|
61
|
+
if (this.#selection) {
|
|
62
|
+
this.#selection.el.hidden = empty;
|
|
63
|
+
if (!empty)
|
|
64
|
+
this.#place(this.#selection.el, view, state.selection.from);
|
|
65
|
+
}
|
|
66
|
+
if (this.#insert) {
|
|
67
|
+
const $from = state.selection.$from;
|
|
68
|
+
const showInsert = empty && $from.parent.isTextblock && $from.parent.content.size === 0;
|
|
69
|
+
this.#insert.el.hidden = !showInsert;
|
|
70
|
+
if (showInsert)
|
|
71
|
+
this.#place(this.#insert.el, view, state.selection.from);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
#place(el, view, pos) {
|
|
75
|
+
const coords = view.coordsAtPos(pos);
|
|
76
|
+
const hostBox = this.#host.getBoundingClientRect();
|
|
77
|
+
el.style.left = `${coords.left - hostBox.left}px`;
|
|
78
|
+
el.style.top = `${coords.bottom - hostBox.top + 8}px`;
|
|
79
|
+
void this.#doc;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=floating.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floating.js","sourceRoot":"","sources":["../src/floating.ts"],"names":[],"mappings":"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"}
|
package/dist/help.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-editor help: the shortcut table plus the chrome controls that have no
|
|
3
|
+
* key of their own.
|
|
4
|
+
*
|
|
5
|
+
* The shortcut list is the same array `buildKeymap` reads. A hand-maintained
|
|
6
|
+
* help page that drifted from the keymap would be worse than no help at all.
|
|
7
|
+
*/
|
|
8
|
+
export declare function promptHelp(doc: Document): void;
|
|
9
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CA2D9C"}
|
package/dist/help.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-editor help: the shortcut table plus the chrome controls that have no
|
|
3
|
+
* key of their own.
|
|
4
|
+
*
|
|
5
|
+
* The shortcut list is the same array `buildKeymap` reads. A hand-maintained
|
|
6
|
+
* help page that drifted from the keymap would be worse than no help at all.
|
|
7
|
+
*/
|
|
8
|
+
import { shortcutFor, shortcuts } from '@openleaf-editor/core';
|
|
9
|
+
import { ensureDialogStyles } from './dialog.js';
|
|
10
|
+
import { t } from './i18n.js';
|
|
11
|
+
import { ensureStyles } from './styles.js';
|
|
12
|
+
const HELP_CHROME = [
|
|
13
|
+
['Alt+F10', 'Move focus to the formatting toolbar'],
|
|
14
|
+
['Escape', 'Return focus to the document'],
|
|
15
|
+
['F1', 'Open this help dialog'],
|
|
16
|
+
];
|
|
17
|
+
export function promptHelp(doc) {
|
|
18
|
+
ensureStyles(doc);
|
|
19
|
+
ensureDialogStyles(doc);
|
|
20
|
+
const previouslyFocused = doc.activeElement;
|
|
21
|
+
const dialog = doc.createElement('dialog');
|
|
22
|
+
dialog.className = 'ol-dialog ol-help';
|
|
23
|
+
dialog.setAttribute('aria-labelledby', 'ol-help-title');
|
|
24
|
+
const form = doc.createElement('form');
|
|
25
|
+
form.method = 'dialog';
|
|
26
|
+
const heading = doc.createElement('h2');
|
|
27
|
+
heading.id = 'ol-help-title';
|
|
28
|
+
heading.textContent = t('Keyboard shortcuts');
|
|
29
|
+
form.appendChild(heading);
|
|
30
|
+
const table = doc.createElement('table');
|
|
31
|
+
table.className = 'ol-help-table';
|
|
32
|
+
const body = doc.createElement('tbody');
|
|
33
|
+
for (const shortcut of shortcuts) {
|
|
34
|
+
const row = doc.createElement('tr');
|
|
35
|
+
const keys = doc.createElement('th');
|
|
36
|
+
keys.scope = 'row';
|
|
37
|
+
keys.textContent = shortcutFor(shortcut.label) ?? shortcut.keys;
|
|
38
|
+
const label = doc.createElement('td');
|
|
39
|
+
label.textContent = t(shortcut.label);
|
|
40
|
+
row.appendChild(keys);
|
|
41
|
+
row.appendChild(label);
|
|
42
|
+
body.appendChild(row);
|
|
43
|
+
}
|
|
44
|
+
for (const [keys, label] of HELP_CHROME) {
|
|
45
|
+
const row = doc.createElement('tr');
|
|
46
|
+
const keyCell = doc.createElement('th');
|
|
47
|
+
keyCell.scope = 'row';
|
|
48
|
+
keyCell.textContent = keys;
|
|
49
|
+
const labelCell = doc.createElement('td');
|
|
50
|
+
labelCell.textContent = t(label);
|
|
51
|
+
row.appendChild(keyCell);
|
|
52
|
+
row.appendChild(labelCell);
|
|
53
|
+
body.appendChild(row);
|
|
54
|
+
}
|
|
55
|
+
table.appendChild(body);
|
|
56
|
+
form.appendChild(table);
|
|
57
|
+
const actions = doc.createElement('div');
|
|
58
|
+
actions.className = 'ol-actions';
|
|
59
|
+
const close = doc.createElement('button');
|
|
60
|
+
close.type = 'submit';
|
|
61
|
+
close.value = 'ok';
|
|
62
|
+
close.textContent = t('Close');
|
|
63
|
+
actions.appendChild(close);
|
|
64
|
+
form.appendChild(actions);
|
|
65
|
+
dialog.appendChild(form);
|
|
66
|
+
doc.body.appendChild(dialog);
|
|
67
|
+
dialog.addEventListener('close', () => {
|
|
68
|
+
dialog.remove();
|
|
69
|
+
previouslyFocused?.focus();
|
|
70
|
+
});
|
|
71
|
+
dialog.showModal();
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=help.js.map
|
package/dist/help.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI strings.
|
|
3
|
+
*
|
|
4
|
+
* English source text is the lookup key, so a missing translation still shows
|
|
5
|
+
* something an author can read, and a new button does not require a coordinated
|
|
6
|
+
* catalog bump before it can ship. `registerTranslations` overlays a locale;
|
|
7
|
+
* last registration for a key wins, which is how a host replaces one phrase
|
|
8
|
+
* without forking the catalog.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Run `render` with `forLocale` in force, then put the previous one back.
|
|
12
|
+
*
|
|
13
|
+
* Each editor carries its own `lang`, and the document-wide locale cannot serve
|
|
14
|
+
* that: two editors with different languages on one page would both end up in
|
|
15
|
+
* whichever built last. Threading a locale argument through every label in every
|
|
16
|
+
* component would say the same thing far more loudly, so the scope is a
|
|
17
|
+
* synchronous one instead -- labels produced while rendering see their own
|
|
18
|
+
* editor's locale.
|
|
19
|
+
*
|
|
20
|
+
* Synchronous is the constraint worth knowing: a label built later, outside any
|
|
21
|
+
* render, falls back to the document locale.
|
|
22
|
+
*/
|
|
23
|
+
export declare function withLocale<T>(forLocale: string | null | undefined, render: () => T): T;
|
|
24
|
+
export declare function onLocaleChange(listener: () => void): () => void;
|
|
25
|
+
/** The document-wide locale. Inside `withLocale` the scoped one wins. */
|
|
26
|
+
export declare function uiLocale(): string;
|
|
27
|
+
export declare function setUiLocale(next: string): void;
|
|
28
|
+
export declare function registerTranslations(forLocale: string, messages: Record<string, string>): void;
|
|
29
|
+
/** Translate a source string. Falls back to the string itself. */
|
|
30
|
+
export declare function t(source: string): string;
|
|
31
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAStF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAK/D;AAYD,yEAAyE;AACzE,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAK9C;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQ9F;AAED,kEAAkE;AAClE,wBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUxC"}
|
package/dist/i18n.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI strings.
|
|
3
|
+
*
|
|
4
|
+
* English source text is the lookup key, so a missing translation still shows
|
|
5
|
+
* something an author can read, and a new button does not require a coordinated
|
|
6
|
+
* catalog bump before it can ship. `registerTranslations` overlays a locale;
|
|
7
|
+
* last registration for a key wins, which is how a host replaces one phrase
|
|
8
|
+
* without forking the catalog.
|
|
9
|
+
*/
|
|
10
|
+
const catalogs = new Map();
|
|
11
|
+
const listeners = new Set();
|
|
12
|
+
let locale = 'en';
|
|
13
|
+
let scoped = null;
|
|
14
|
+
/**
|
|
15
|
+
* Run `render` with `forLocale` in force, then put the previous one back.
|
|
16
|
+
*
|
|
17
|
+
* Each editor carries its own `lang`, and the document-wide locale cannot serve
|
|
18
|
+
* that: two editors with different languages on one page would both end up in
|
|
19
|
+
* whichever built last. Threading a locale argument through every label in every
|
|
20
|
+
* component would say the same thing far more loudly, so the scope is a
|
|
21
|
+
* synchronous one instead -- labels produced while rendering see their own
|
|
22
|
+
* editor's locale.
|
|
23
|
+
*
|
|
24
|
+
* Synchronous is the constraint worth knowing: a label built later, outside any
|
|
25
|
+
* render, falls back to the document locale.
|
|
26
|
+
*/
|
|
27
|
+
export function withLocale(forLocale, render) {
|
|
28
|
+
if (!forLocale)
|
|
29
|
+
return render();
|
|
30
|
+
const previous = scoped;
|
|
31
|
+
scoped = forLocale;
|
|
32
|
+
try {
|
|
33
|
+
return render();
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
scoped = previous;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function onLocaleChange(listener) {
|
|
40
|
+
listeners.add(listener);
|
|
41
|
+
return () => {
|
|
42
|
+
listeners.delete(listener);
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function notify() {
|
|
46
|
+
for (const listener of listeners) {
|
|
47
|
+
try {
|
|
48
|
+
listener();
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error('@openleaf-editor/ui: a locale listener threw', error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** The document-wide locale. Inside `withLocale` the scoped one wins. */
|
|
56
|
+
export function uiLocale() {
|
|
57
|
+
return scoped ?? locale;
|
|
58
|
+
}
|
|
59
|
+
export function setUiLocale(next) {
|
|
60
|
+
const value = next.trim() || 'en';
|
|
61
|
+
if (value === locale)
|
|
62
|
+
return;
|
|
63
|
+
locale = value;
|
|
64
|
+
notify();
|
|
65
|
+
}
|
|
66
|
+
export function registerTranslations(forLocale, messages) {
|
|
67
|
+
const existing = catalogs.get(forLocale) ?? {};
|
|
68
|
+
catalogs.set(forLocale, { ...existing, ...messages });
|
|
69
|
+
// Notified whatever locale this is for. Each editor now carries its own, so
|
|
70
|
+
// "does this match the document locale" no longer answers "does anybody care":
|
|
71
|
+
// a catalog registered after the editors were built -- the ordinary case for a
|
|
72
|
+
// script tag -- would otherwise never reach the editor it was meant for.
|
|
73
|
+
notify();
|
|
74
|
+
}
|
|
75
|
+
/** Translate a source string. Falls back to the string itself. */
|
|
76
|
+
export function t(source) {
|
|
77
|
+
const current = scoped ?? locale;
|
|
78
|
+
const exact = catalogs.get(current)?.[source];
|
|
79
|
+
if (exact)
|
|
80
|
+
return exact;
|
|
81
|
+
const language = current.split('-')[0];
|
|
82
|
+
if (language && language !== current) {
|
|
83
|
+
const regional = catalogs.get(language)?.[source];
|
|
84
|
+
if (regional)
|
|
85
|
+
return regional;
|
|
86
|
+
}
|
|
87
|
+
return catalogs.get('en')?.[source] ?? source;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=i18n.js.map
|
package/dist/i18n.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkC,CAAA;AAC1D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAA;AACvC,IAAI,MAAM,GAAG,IAAI,CAAA;AACjB,IAAI,MAAM,GAAkB,IAAI,CAAA;AAEhC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAI,SAAoC,EAAE,MAAe;IACjF,IAAI,CAAC,SAAS;QAAE,OAAO,MAAM,EAAE,CAAA;IAC/B,MAAM,QAAQ,GAAG,MAAM,CAAA;IACvB,MAAM,GAAG,SAAS,CAAA;IAClB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAA;IACjB,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,QAAQ,CAAA;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAoB;IACjD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC5B,CAAC,CAAA;AACH,CAAC;AAED,SAAS,MAAM;IACb,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,QAAQ,EAAE,CAAA;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,QAAQ;IACtB,OAAO,MAAM,IAAI,MAAM,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;IACjC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAM;IAC5B,MAAM,GAAG,KAAK,CAAA;IACd,MAAM,EAAE,CAAA;AACV,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,QAAgC;IACtF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;IAC9C,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;IACrD,4EAA4E;IAC5E,+EAA+E;IAC/E,+EAA+E;IAC/E,yEAAyE;IACzE,MAAM,EAAE,CAAA;AACV,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,CAAC,CAAC,MAAc;IAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,MAAM,CAAA;IAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;IAC7C,IAAI,KAAK;QAAE,OAAO,KAAK,CAAA;IACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,IAAI,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;QACjD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;IAC/B,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,MAAM,CAAA;AAC/C,CAAC"}
|
package/dist/icons.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* is *gras* in French, *fett* in German; a "B" icon is a
|
|
13
13
|
* translation bug wearing a costume.
|
|
14
14
|
*
|
|
15
|
-
* All
|
|
15
|
+
* All 20 icons are a 24x24 viewBox with `stroke="currentColor"`, so they inherit
|
|
16
16
|
* text colour for free and need no separate dark-mode set. Roughly 2 KB raw,
|
|
17
17
|
* under 1 KB gzipped.
|
|
18
18
|
*
|
package/dist/icons.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAoCH;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AA2B7B,wBAAgB,SAAS,IAAI,QAAQ,EAAE,CAEtC;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAgBjF;AAKD,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAchD;AAiBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,aAAa,CAYxE"}
|
package/dist/icons.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* is *gras* in French, *fett* in German; a "B" icon is a
|
|
13
13
|
* translation bug wearing a costume.
|
|
14
14
|
*
|
|
15
|
-
* All
|
|
15
|
+
* All 20 icons are a 24x24 viewBox with `stroke="currentColor"`, so they inherit
|
|
16
16
|
* text colour for free and need no separate dark-mode set. Roughly 2 KB raw,
|
|
17
17
|
* under 1 KB gzipped.
|
|
18
18
|
*
|
|
@@ -43,9 +43,17 @@ const PATHS = {
|
|
|
43
43
|
unlink: 'M18.84 12.25l1.72-1.71a5 5 0 0 0-7.07-7.07l-1.72 1.71M5.17 11.75l-1.71 1.71a5 5 0 0 0 7.07 7.07l1.71-1.71M2 2l20 20',
|
|
44
44
|
image: 'M3 3h18v18H3zM8.5 9.5a1.5 1.5 0 1 0 .01 0M21 15l-5-5L5 21',
|
|
45
45
|
horizontalRule: 'M4 12h16',
|
|
46
|
+
alignLeft: 'M3 6h18M3 12h10M3 18h14',
|
|
47
|
+
alignCenter: 'M3 6h18M7 12h10M5 18h14',
|
|
48
|
+
alignRight: 'M3 6h18M11 12h10M7 18h14',
|
|
49
|
+
alignJustify: 'M3 6h18M3 12h18M3 18h18',
|
|
46
50
|
undo: 'M3 7v6h6M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13',
|
|
47
51
|
redo: 'M21 7v6h-6M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3L21 13',
|
|
48
52
|
source: 'M18 16l4-4-4-4M6 8l-4 4 4 4M14.5 4l-5 16',
|
|
53
|
+
more: 'M6 12h.01M12 12h.01M18 12h.01',
|
|
54
|
+
fullscreen: 'M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5',
|
|
55
|
+
help: 'M12 18h.01M9.1 9a3 3 0 1 1 5.8 1c0 2-3 2-3 4',
|
|
56
|
+
visualAids: 'M2 12s4-7 10-7 10 7 10 7-4 7-10 7S2 12 2 12zM12 12a2 2 0 1 0 .01 0',
|
|
49
57
|
};
|
|
50
58
|
/**
|
|
51
59
|
* Icons whose meaning depends on reading direction, and which must therefore be
|
|
@@ -62,6 +70,14 @@ const DIRECTIONAL = new Set([
|
|
|
62
70
|
'bulletList',
|
|
63
71
|
'orderedList',
|
|
64
72
|
]);
|
|
73
|
+
/*
|
|
74
|
+
* The alignment icons are deliberately absent from that set, and it is the
|
|
75
|
+
* counter-intuitive case. They look like the mirroring candidates -- a glyph of
|
|
76
|
+
* short lines ragged on the left -- but `text-align: left` means the left edge in
|
|
77
|
+
* an RTL document too. Mirroring them would show a right-ragged icon on the
|
|
78
|
+
* button that aligns text left, which is not localisation, it is a lie about
|
|
79
|
+
* what the control does.
|
|
80
|
+
*/
|
|
65
81
|
export function iconNames() {
|
|
66
82
|
return Object.keys(PATHS);
|
|
67
83
|
}
|
package/dist/icons.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;GAMG;AACH,MAAM,KAAK,GAA2B;IACpC,IAAI,EAAE,iDAAiD;IACvD,MAAM,EAAE,4BAA4B;IACpC,SAAS,EAAE,iCAAiC;IAC5C,aAAa,EAAE,wDAAwD;IACvE,IAAI,EAAE,6BAA6B;IACnC,UAAU,EAAE,mDAAmD;IAC/D,WAAW,EAAE,6EAA6E;IAC1F,UAAU,EAAE,+BAA+B;IAC3C,SAAS,EAAE,2CAA2C;IACtD,IAAI,EAAE,yHAAyH;IAC/H,MAAM,EAAE,qHAAqH;IAC7H,KAAK,EAAE,2DAA2D;IAClE,cAAc,EAAE,UAAU;IAC1B,IAAI,EAAE,mDAAmD;IACzD,IAAI,EAAE,qDAAqD;IAC3D,MAAM,EAAE,0CAA0C;
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
export { Toolbar, type ToolbarOptions } from './toolbar.js';
|
|
2
|
-
export { DEFAULT_LAYOUT, allToolbarItems, clearToolbarItems, getToolbarItem, onRegistryChange, registerToolbarItem, type ToolbarContext, type ToolbarItemSpec, } from './registry.js';
|
|
3
|
-
export { SOURCE_TOGGLE_EVENT, registerDefaultItems } from './items.js';
|
|
2
|
+
export { DEFAULT_LAYOUT, LAYOUT_WITH_COLOUR, allToolbarItems, clearToolbarItems, getToolbarItem, onRegistryChange, registerToolbarItem, type ToolbarContext, type ToolbarControl, type ToolbarItemSpec, } from './registry.js';
|
|
3
|
+
export { SOURCE_TOGGLE_EVENT, FULLSCREEN_TOGGLE_EVENT, VISUAL_AIDS_TOGGLE_EVENT, registerDefaultItems } from './items.js';
|
|
4
|
+
export { t, setUiLocale, uiLocale, registerTranslations, onLocaleChange, withLocale, } from './i18n.js';
|
|
5
|
+
export { MenuBar, PopupMenu, DEFAULT_MENUBAR, selectMenus, LINK_CONTEXT_ITEMS, IMAGE_CONTEXT_ITEMS, TABLE_CONTEXT_ITEMS, type MenuSpec, type MenuEntry, } from './menu.js';
|
|
6
|
+
export { promptHelp } from './help.js';
|
|
7
|
+
export { FloatingToolbars, DEFAULT_SELECTION_LAYOUT, DEFAULT_INSERT_LAYOUT, } from './floating.js';
|
|
8
|
+
export { loadContentCss, contentCssUrls, scopeContentCss } from './content-css.js';
|
|
4
9
|
export { CSS, ensureStyles, markStylesExternal, registerStyles } from './styles.js';
|
|
5
10
|
export { ensureSprite, iconElement, iconNames, registerIcons, type IconName } from './icons.js';
|
|
6
|
-
export { promptForImage, promptForLink, type ImageResult, type LinkResult } from './dialog.js';
|
|
11
|
+
export { promptFields, promptForImage, promptForLink, type FieldOption, type FieldSpec, type ImagePromptOptions, type ImageResult, type LinkResult, type PromptFormOptions, } from './dialog.js';
|
|
12
|
+
export { filePickerFor, listedImageClasses, listedImages, listedLinks, registerFilePicker, registerImageClasses, registerImageList, registerLinkList, type FilePicker, type FilePickerKind, type ListedResource, type PickedResource, } from './pickers.js';
|
|
13
|
+
export { IMAGE_ACCEPT, canUploadImages, imageFilesFrom, imageUploaderFor, isUploadableImage, registerImageUploader, runUploader, type ImageUploadResult, type ImageUploader, } from './upload.js';
|
|
7
14
|
export { BUILT_IN_SKINS, applyColourScheme, applySkin, availableSkins, ensureSkins, registerSkin, type ColourScheme, type Skin, } from './skins.js';
|
|
8
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACzH,OAAO,EACL,CAAC,EACD,WAAW,EACX,QAAQ,EACR,oBAAoB,EACpB,cAAc,EACd,UAAU,GACX,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,OAAO,EACP,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,QAAQ,EACb,KAAK,SAAS,GACf,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/F,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,WAAW,EACX,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,IAAI,GACV,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
export { Toolbar } from './toolbar.js';
|
|
2
|
-
export { DEFAULT_LAYOUT, allToolbarItems, clearToolbarItems, getToolbarItem, onRegistryChange, registerToolbarItem, } from './registry.js';
|
|
3
|
-
export { SOURCE_TOGGLE_EVENT, registerDefaultItems } from './items.js';
|
|
2
|
+
export { DEFAULT_LAYOUT, LAYOUT_WITH_COLOUR, allToolbarItems, clearToolbarItems, getToolbarItem, onRegistryChange, registerToolbarItem, } from './registry.js';
|
|
3
|
+
export { SOURCE_TOGGLE_EVENT, FULLSCREEN_TOGGLE_EVENT, VISUAL_AIDS_TOGGLE_EVENT, registerDefaultItems } from './items.js';
|
|
4
|
+
export { t, setUiLocale, uiLocale, registerTranslations, onLocaleChange, withLocale, } from './i18n.js';
|
|
5
|
+
export { MenuBar, PopupMenu, DEFAULT_MENUBAR, selectMenus, LINK_CONTEXT_ITEMS, IMAGE_CONTEXT_ITEMS, TABLE_CONTEXT_ITEMS, } from './menu.js';
|
|
6
|
+
export { promptHelp } from './help.js';
|
|
7
|
+
export { FloatingToolbars, DEFAULT_SELECTION_LAYOUT, DEFAULT_INSERT_LAYOUT, } from './floating.js';
|
|
8
|
+
export { loadContentCss, contentCssUrls, scopeContentCss } from './content-css.js';
|
|
4
9
|
export { CSS, ensureStyles, markStylesExternal, registerStyles } from './styles.js';
|
|
5
10
|
export { ensureSprite, iconElement, iconNames, registerIcons } from './icons.js';
|
|
6
|
-
export { promptForImage, promptForLink } from './dialog.js';
|
|
11
|
+
export { promptFields, promptForImage, promptForLink, } from './dialog.js';
|
|
12
|
+
export { filePickerFor, listedImageClasses, listedImages, listedLinks, registerFilePicker, registerImageClasses, registerImageList, registerLinkList, } from './pickers.js';
|
|
13
|
+
export { IMAGE_ACCEPT, canUploadImages, imageFilesFrom, imageUploaderFor, isUploadableImage, registerImageUploader, runUploader, } from './upload.js';
|
|
7
14
|
export { BUILT_IN_SKINS, applyColourScheme, applySkin, availableSkins, ensureSkins, registerSkin, } from './skins.js';
|
|
8
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAA;AAC3D,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAA;AAC3D,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GAIpB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACzH,OAAO,EACL,CAAC,EACD,WAAW,EACX,QAAQ,EACR,oBAAoB,EACpB,cAAc,EACd,UAAU,GACX,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,OAAO,EACP,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GAGpB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAA;AAC/F,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,GAOd,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GAKjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,GAGZ,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,WAAW,EACX,YAAY,GAGb,MAAM,YAAY,CAAA"}
|
package/dist/items.d.ts
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
/** Event the host listens for to switch between rich and source views. */
|
|
10
10
|
export declare const SOURCE_TOGGLE_EVENT = "openleaf:toggle-source";
|
|
11
|
+
export declare const FULLSCREEN_TOGGLE_EVENT = "openleaf:toggle-fullscreen";
|
|
12
|
+
export declare const VISUAL_AIDS_TOGGLE_EVENT = "openleaf:toggle-visual-aids";
|
|
11
13
|
/** Register the built-in items. Idempotent. */
|
|
12
14
|
export declare function registerDefaultItems(): void;
|
|
13
15
|
//# sourceMappingURL=items.d.ts.map
|
package/dist/items.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../src/items.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../src/items.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgCH,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,2BAA2B,CAAA;AAC3D,eAAO,MAAM,uBAAuB,+BAA+B,CAAA;AACnE,eAAO,MAAM,wBAAwB,gCAAgC,CAAA;AAIrE,+CAA+C;AAC/C,wBAAgB,oBAAoB,IAAI,IAAI,CAuR3C"}
|
package/dist/items.js
CHANGED
|
@@ -6,11 +6,15 @@
|
|
|
6
6
|
* document, that knowledge belongs in `@openleaf-editor/core` where a keyboard
|
|
7
7
|
* shortcut and a test can reach it too.
|
|
8
8
|
*/
|
|
9
|
-
import { activeLink, insertHorizontalRule, insertImage, isMarkActive, isNodeActive, redo, setLink, toggleBlockquote, toggleBold, toggleBulletList, toggleCodeBlock, toggleInlineCode, toggleItalic, toggleOrderedList, toggleStrike, toggleUnderline, undo, unsetLink, } from '@openleaf-editor/core';
|
|
9
|
+
import { activeLink, activeTextAlign, insertHorizontalRule, insertImage, isMarkActive, isNodeActive, redo, setLink, toggleBlockquote, toggleBold, toggleBulletList, toggleCodeBlock, toggleInlineCode, toggleItalic, toggleOrderedList, toggleStrike, toggleTextAlign, toggleUnderline, undo, unsetLink, } from '@openleaf-editor/core';
|
|
10
10
|
import { promptForImage, promptForLink } from './dialog.js';
|
|
11
|
+
import { promptHelp } from './help.js';
|
|
11
12
|
import { registerToolbarItem } from './registry.js';
|
|
13
|
+
import { imageUploaderFor, runUploader } from './upload.js';
|
|
12
14
|
/** Event the host listens for to switch between rich and source views. */
|
|
13
15
|
export const SOURCE_TOGGLE_EVENT = 'openleaf:toggle-source';
|
|
16
|
+
export const FULLSCREEN_TOGGLE_EVENT = 'openleaf:toggle-fullscreen';
|
|
17
|
+
export const VISUAL_AIDS_TOGGLE_EVENT = 'openleaf:toggle-visual-aids';
|
|
14
18
|
let registered = false;
|
|
15
19
|
/** Register the built-in items. Idempotent. */
|
|
16
20
|
export function registerDefaultItems() {
|
|
@@ -111,6 +115,30 @@ export function registerDefaultItems() {
|
|
|
111
115
|
isActive: (state) => isNodeActive(state, 'code_block'),
|
|
112
116
|
shortcut: 'Code block',
|
|
113
117
|
});
|
|
118
|
+
/* ---- alignment ----
|
|
119
|
+
Toggles, not actions, and the pressed state is the EXPLICIT alignment only.
|
|
120
|
+
A paragraph nobody has aligned follows the document's reading direction, so
|
|
121
|
+
lighting up the left button for it would be wrong in Arabic and Hebrew --
|
|
122
|
+
and `aria-pressed="true"` on a paragraph that is not left-aligned is a lie
|
|
123
|
+
a screen reader repeats. See activeTextAlign in core. */
|
|
124
|
+
const alignItems = [
|
|
125
|
+
{ id: 'alignLeft', label: 'Align left', icon: 'alignLeft', align: 'left' },
|
|
126
|
+
{ id: 'alignCenter', label: 'Align centre', icon: 'alignCenter', align: 'center' },
|
|
127
|
+
{ id: 'alignRight', label: 'Align right', icon: 'alignRight', align: 'right' },
|
|
128
|
+
{ id: 'alignJustify', label: 'Justify', icon: 'alignJustify', align: 'justify' },
|
|
129
|
+
];
|
|
130
|
+
for (const item of alignItems) {
|
|
131
|
+
registerToolbarItem({
|
|
132
|
+
id: item.id,
|
|
133
|
+
type: 'button',
|
|
134
|
+
kind: 'toggle',
|
|
135
|
+
label: item.label,
|
|
136
|
+
icon: item.icon,
|
|
137
|
+
command: toggleTextAlign(item.align),
|
|
138
|
+
isActive: (state) => activeTextAlign(state) === item.align,
|
|
139
|
+
shortcut: item.label,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
114
142
|
/* ---- insertions ---- */
|
|
115
143
|
registerToolbarItem({
|
|
116
144
|
id: 'link',
|
|
@@ -126,8 +154,9 @@ export function registerDefaultItems() {
|
|
|
126
154
|
const existing = activeLink(view.state);
|
|
127
155
|
void promptForLink(host.ownerDocument, {
|
|
128
156
|
href: existing?.['href'] ?? '',
|
|
157
|
+
title: existing?.['title'] ?? null,
|
|
129
158
|
target: existing?.['target'] ?? null,
|
|
130
|
-
}).then((result) => {
|
|
159
|
+
}, host).then((result) => {
|
|
131
160
|
if (!result) {
|
|
132
161
|
view.focus();
|
|
133
162
|
return;
|
|
@@ -152,12 +181,28 @@ export function registerDefaultItems() {
|
|
|
152
181
|
label: 'Insert image',
|
|
153
182
|
icon: 'image',
|
|
154
183
|
run: ({ view, host }) => {
|
|
155
|
-
|
|
184
|
+
// One item, two dialogs, decided by whether this page can upload. A file
|
|
185
|
+
// picker that appears and then fails because no uploader was registered is
|
|
186
|
+
// worse than no picker: the author has already chosen the file.
|
|
187
|
+
const uploader = imageUploaderFor(host);
|
|
188
|
+
const options = uploader
|
|
189
|
+
? { upload: (file) => runUploader(uploader, file, host), host }
|
|
190
|
+
: { host };
|
|
191
|
+
void promptForImage(host.ownerDocument, options).then((result) => {
|
|
156
192
|
if (!result) {
|
|
157
193
|
view.focus();
|
|
158
194
|
return;
|
|
159
195
|
}
|
|
160
|
-
insertImage({
|
|
196
|
+
insertImage({
|
|
197
|
+
src: result.src,
|
|
198
|
+
alt: result.alt,
|
|
199
|
+
title: result.title,
|
|
200
|
+
width: result.width,
|
|
201
|
+
height: result.height,
|
|
202
|
+
align: result.align,
|
|
203
|
+
className: result.className,
|
|
204
|
+
...(result.caption ? { caption: result.caption } : {}),
|
|
205
|
+
})(view.state, view.dispatch, view);
|
|
161
206
|
view.focus();
|
|
162
207
|
});
|
|
163
208
|
},
|
|
@@ -186,5 +231,37 @@ export function registerDefaultItems() {
|
|
|
186
231
|
host.dispatchEvent(new CustomEvent(SOURCE_TOGGLE_EVENT, { bubbles: true }));
|
|
187
232
|
},
|
|
188
233
|
});
|
|
234
|
+
registerToolbarItem({
|
|
235
|
+
id: 'fullscreen',
|
|
236
|
+
type: 'button',
|
|
237
|
+
kind: 'toggle',
|
|
238
|
+
label: 'Fullscreen',
|
|
239
|
+
icon: 'fullscreen',
|
|
240
|
+
isActive: () => false,
|
|
241
|
+
run: ({ host }) => {
|
|
242
|
+
host.dispatchEvent(new CustomEvent(FULLSCREEN_TOGGLE_EVENT, { bubbles: true }));
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
registerToolbarItem({
|
|
246
|
+
id: 'visualAids',
|
|
247
|
+
type: 'button',
|
|
248
|
+
kind: 'toggle',
|
|
249
|
+
label: 'Visual aids',
|
|
250
|
+
icon: 'visualAids',
|
|
251
|
+
isActive: () => false,
|
|
252
|
+
run: ({ host }) => {
|
|
253
|
+
host.dispatchEvent(new CustomEvent(VISUAL_AIDS_TOGGLE_EVENT, { bubbles: true }));
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
registerToolbarItem({
|
|
257
|
+
id: 'help',
|
|
258
|
+
type: 'button',
|
|
259
|
+
kind: 'action',
|
|
260
|
+
label: 'Help',
|
|
261
|
+
icon: 'help',
|
|
262
|
+
run: ({ host }) => {
|
|
263
|
+
promptHelp(host.ownerDocument);
|
|
264
|
+
},
|
|
265
|
+
});
|
|
189
266
|
}
|
|
190
267
|
//# sourceMappingURL=items.js.map
|
package/dist/items.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"items.js","sourceRoot":"","sources":["../src/items.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,IAAI,EACJ,SAAS,
|
|
1
|
+
{"version":3,"file":"items.js","sourceRoot":"","sources":["../src/items.ts"],"names":[],"mappings":"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"}
|