@domternal/vue 0.14.0 → 0.15.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/dist/index.d.ts +19 -2
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -1
- package/package.json +10 -12
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { ShallowRef, Ref, ComputedRef, InjectionKey, Component, PropType, VNode, AppContext } from 'vue';
|
|
3
|
-
import { AnyExtension, Content, FocusPosition, Editor, JSONContent, IconSet, ToolbarLayoutEntry, BubbleMenuOptions, FloatingMenuOptions, FloatingMenuItemsOverride, FloatingMenuKeymap } from '@domternal/core';
|
|
3
|
+
import { AnyExtension, Content, EditorPreset, FocusPosition, Editor, JSONContent, IconSet, ToolbarLayoutEntry, BubbleMenuOptions, FloatingMenuOptions, FloatingMenuItemsOverride, FloatingMenuKeymap } from '@domternal/core';
|
|
4
4
|
export { AnyExtension, Content, Editor, FocusPosition, GenerateHTMLOptions, GenerateJSONOptions, GenerateTextOptions, JSONContent, generateHTML, generateJSON, generateText } from '@domternal/core';
|
|
5
5
|
import * as prosemirror_state from 'prosemirror-state';
|
|
6
6
|
import * as prosemirror_view from 'prosemirror-view';
|
|
@@ -19,6 +19,12 @@ interface UseEditorOptions {
|
|
|
19
19
|
content?: Content;
|
|
20
20
|
/** Whether the editor is editable. @default true */
|
|
21
21
|
editable?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Editing experience preset. `'notion'` paints `dm-notion-mode` on the
|
|
24
|
+
* `.dm-editor` wrapper and switches preset-aware extensions to their
|
|
25
|
+
* Notion behavior, replacing the hand-written class. Create-time only.
|
|
26
|
+
*/
|
|
27
|
+
preset?: EditorPreset;
|
|
22
28
|
/** Where to autofocus on mount. @default false */
|
|
23
29
|
autofocus?: FocusPosition;
|
|
24
30
|
/** Output format for content comparison. @default 'html' */
|
|
@@ -169,6 +175,8 @@ interface DomternalEditorProps {
|
|
|
169
175
|
extensions?: AnyExtension[];
|
|
170
176
|
content?: Content;
|
|
171
177
|
editable?: boolean;
|
|
178
|
+
/** Editing experience preset; 'notion' paints dm-notion-mode on the wrapper. Create-time only. */
|
|
179
|
+
preset?: EditorPreset;
|
|
172
180
|
autofocus?: FocusPosition;
|
|
173
181
|
immediatelyRender?: boolean;
|
|
174
182
|
outputFormat?: 'html' | 'json';
|
|
@@ -231,6 +239,10 @@ declare const DomternalEditor: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
231
239
|
type: BooleanConstructor;
|
|
232
240
|
default: boolean;
|
|
233
241
|
};
|
|
242
|
+
preset: {
|
|
243
|
+
type: PropType<EditorPreset>;
|
|
244
|
+
default: undefined;
|
|
245
|
+
};
|
|
234
246
|
autofocus: {
|
|
235
247
|
type: PropType<FocusPosition>;
|
|
236
248
|
default: boolean;
|
|
@@ -304,6 +316,10 @@ declare const DomternalEditor: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
304
316
|
type: BooleanConstructor;
|
|
305
317
|
default: boolean;
|
|
306
318
|
};
|
|
319
|
+
preset: {
|
|
320
|
+
type: PropType<EditorPreset>;
|
|
321
|
+
default: undefined;
|
|
322
|
+
};
|
|
307
323
|
autofocus: {
|
|
308
324
|
type: PropType<FocusPosition>;
|
|
309
325
|
default: boolean;
|
|
@@ -376,11 +392,12 @@ declare const DomternalEditor: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
376
392
|
onDestroy: () => void;
|
|
377
393
|
content: Content;
|
|
378
394
|
class: string;
|
|
379
|
-
|
|
395
|
+
preset: EditorPreset;
|
|
380
396
|
onSelectionChange: (props: {
|
|
381
397
|
editor: Editor;
|
|
382
398
|
}) => void;
|
|
383
399
|
extensions: AnyExtension[];
|
|
400
|
+
editable: boolean;
|
|
384
401
|
autofocus: FocusPosition;
|
|
385
402
|
outputFormat: "html" | "json";
|
|
386
403
|
immediatelyRender: boolean;
|
package/dist/index.js
CHANGED
|
@@ -33,7 +33,8 @@ function useEditor(options = {}) {
|
|
|
33
33
|
extensions: [...defaults, ...extensions],
|
|
34
34
|
content: initialContent,
|
|
35
35
|
editable,
|
|
36
|
-
autofocus: focus
|
|
36
|
+
autofocus: focus,
|
|
37
|
+
...options.preset ? { preset: options.preset } : {}
|
|
37
38
|
});
|
|
38
39
|
markRaw(ed);
|
|
39
40
|
wireEvents(ed);
|
|
@@ -69,6 +70,7 @@ function useEditor(options = {}) {
|
|
|
69
70
|
const mount = editorRef.value;
|
|
70
71
|
if (mount && ed.view.dom.parentElement !== mount) {
|
|
71
72
|
mount.appendChild(ed.view.dom);
|
|
73
|
+
ed.adoptPresetClass();
|
|
72
74
|
}
|
|
73
75
|
return;
|
|
74
76
|
}
|
|
@@ -279,6 +281,7 @@ function useToolbarController(editor, layout) {
|
|
|
279
281
|
const toolbarRef = ref();
|
|
280
282
|
let cleanupFloating = null;
|
|
281
283
|
let clickOutsideHandler = null;
|
|
284
|
+
let escapeHandler = null;
|
|
282
285
|
let dismissOverlayHandler = null;
|
|
283
286
|
let editorEl = null;
|
|
284
287
|
let syncStateRaf = 0;
|
|
@@ -315,6 +318,17 @@ function useToolbarController(editor, layout) {
|
|
|
315
318
|
}
|
|
316
319
|
};
|
|
317
320
|
document.addEventListener("mousedown", clickOutsideHandler);
|
|
321
|
+
escapeHandler = (e) => {
|
|
322
|
+
if (!controller?.openDropdown) return;
|
|
323
|
+
if (e.key !== "Escape") return;
|
|
324
|
+
if (toolbarRef.value?.contains(document.activeElement)) return;
|
|
325
|
+
cleanupFloating?.();
|
|
326
|
+
cleanupFloating = null;
|
|
327
|
+
controller.closeDropdown();
|
|
328
|
+
syncState();
|
|
329
|
+
e.preventDefault();
|
|
330
|
+
};
|
|
331
|
+
document.addEventListener("keydown", escapeHandler);
|
|
318
332
|
editorEl = ed.view.dom.closest(".dm-editor");
|
|
319
333
|
if (editorEl) {
|
|
320
334
|
dismissOverlayHandler = () => {
|
|
@@ -338,6 +352,10 @@ function useToolbarController(editor, layout) {
|
|
|
338
352
|
document.removeEventListener("mousedown", clickOutsideHandler);
|
|
339
353
|
clickOutsideHandler = null;
|
|
340
354
|
}
|
|
355
|
+
if (escapeHandler) {
|
|
356
|
+
document.removeEventListener("keydown", escapeHandler);
|
|
357
|
+
escapeHandler = null;
|
|
358
|
+
}
|
|
341
359
|
if (dismissOverlayHandler && editorEl) {
|
|
342
360
|
editorEl.removeEventListener("dm:dismiss-overlays", dismissOverlayHandler);
|
|
343
361
|
dismissOverlayHandler = null;
|
|
@@ -1212,7 +1230,8 @@ function useBubbleMenu(options) {
|
|
|
1212
1230
|
}
|
|
1213
1231
|
trailing.value = {
|
|
1214
1232
|
isNodeSelection: isNode,
|
|
1215
|
-
|
|
1233
|
+
// Hidden without a live notionColorOpen listener: the trigger would be dead.
|
|
1234
|
+
showColorPickerButton: hasNotionColorPicker && currentEd.listenerCount("notionColorOpen") > 0,
|
|
1216
1235
|
showBlockMenuButton: hasBlockContextMenu,
|
|
1217
1236
|
blockMenuButtonDisabled: blockMenuDisabled,
|
|
1218
1237
|
currentTextColorVar: textVar,
|
|
@@ -2198,6 +2217,7 @@ var Domternal = defineComponent({
|
|
|
2198
2217
|
extensions: { type: Array, default: void 0 },
|
|
2199
2218
|
content: { type: [String, Object], default: "" },
|
|
2200
2219
|
editable: { type: Boolean, default: true },
|
|
2220
|
+
preset: { type: String, default: void 0 },
|
|
2201
2221
|
autofocus: { type: [Boolean, String, Number], default: false },
|
|
2202
2222
|
outputFormat: { type: String, default: "html" },
|
|
2203
2223
|
immediatelyRender: { type: Boolean, default: false },
|
|
@@ -2213,6 +2233,7 @@ var Domternal = defineComponent({
|
|
|
2213
2233
|
...props.extensions && { extensions: props.extensions },
|
|
2214
2234
|
content: props.content,
|
|
2215
2235
|
editable: props.editable,
|
|
2236
|
+
...props.preset && { preset: props.preset },
|
|
2216
2237
|
autofocus: props.autofocus,
|
|
2217
2238
|
outputFormat: props.outputFormat,
|
|
2218
2239
|
immediatelyRender: props.immediatelyRender,
|
|
@@ -2249,6 +2270,7 @@ var DomternalContent = defineComponent({
|
|
|
2249
2270
|
const editorDom = ed.view.dom;
|
|
2250
2271
|
if (editorDom.parentElement !== container) {
|
|
2251
2272
|
container.appendChild(editorDom);
|
|
2273
|
+
ed.adoptPresetClass();
|
|
2252
2274
|
}
|
|
2253
2275
|
});
|
|
2254
2276
|
return () => {
|
|
@@ -2276,6 +2298,7 @@ var DomternalEditor = defineComponent({
|
|
|
2276
2298
|
extensions: { type: Array, default: void 0 },
|
|
2277
2299
|
content: { type: [String, Object], default: void 0 },
|
|
2278
2300
|
editable: { type: Boolean, default: true },
|
|
2301
|
+
preset: { type: String, default: void 0 },
|
|
2279
2302
|
autofocus: { type: [Boolean, String, Number], default: false },
|
|
2280
2303
|
immediatelyRender: { type: Boolean, default: false },
|
|
2281
2304
|
outputFormat: { type: String, default: "html" },
|
|
@@ -2296,6 +2319,7 @@ var DomternalEditor = defineComponent({
|
|
|
2296
2319
|
...props.extensions && { extensions: props.extensions },
|
|
2297
2320
|
content: props.modelValue ?? props.content ?? "",
|
|
2298
2321
|
editable: props.editable,
|
|
2322
|
+
...props.preset && { preset: props.preset },
|
|
2299
2323
|
autofocus: props.autofocus,
|
|
2300
2324
|
immediatelyRender: props.immediatelyRender,
|
|
2301
2325
|
outputFormat: props.outputFormat,
|
|
@@ -2385,6 +2409,7 @@ var EditorContent = defineComponent({
|
|
|
2385
2409
|
const editorDom = editor.view.dom;
|
|
2386
2410
|
if (editorDom.parentElement !== container) {
|
|
2387
2411
|
container.appendChild(editorDom);
|
|
2412
|
+
editor.adoptPresetClass();
|
|
2388
2413
|
}
|
|
2389
2414
|
});
|
|
2390
2415
|
return () => h("div", {
|