@ecodev/natural-editor 1.1.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 +42 -0
- package/bundles/ecodev-natural-editor.umd.js +858 -0
- package/bundles/ecodev-natural-editor.umd.js.map +1 -0
- package/ecodev-natural-editor.d.ts +5 -0
- package/esm2015/ecodev-natural-editor.js +5 -0
- package/esm2015/lib/editor.component.js +161 -0
- package/esm2015/lib/editor.module.js +72 -0
- package/esm2015/lib/link-dialog/link-dialog.component.js +43 -0
- package/esm2015/lib/menu.js +220 -0
- package/esm2015/lib/schema.js +21 -0
- package/esm2015/public-api.js +8 -0
- package/fesm2015/ecodev-natural-editor.js +508 -0
- package/fesm2015/ecodev-natural-editor.js.map +1 -0
- package/lib/editor.component.d.ts +47 -0
- package/lib/editor.module.d.ts +19 -0
- package/lib/link-dialog/link-dialog.component.d.ts +18 -0
- package/lib/menu.d.ts +39 -0
- package/lib/schema.d.ts +2 -0
- package/package.json +37 -0
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { blockTypeItem, joinUpItem, liftItem, redoItem, selectParentNodeItem, undoItem, wrapItem, } from 'prosemirror-menu';
|
|
2
|
+
import { toggleMark } from 'prosemirror-commands';
|
|
3
|
+
import { wrapInList } from 'prosemirror-schema-list';
|
|
4
|
+
import { LinkDialogComponent } from './link-dialog/link-dialog.component';
|
|
5
|
+
/**
|
|
6
|
+
* One item of the menu.
|
|
7
|
+
*
|
|
8
|
+
* This is the equivalent of `MenuItem` but without all the rendering logic since we use Angular
|
|
9
|
+
* templates for rendering. Also it caches the state of the item everytime the editor state changes,
|
|
10
|
+
* so Angular can query the state as often as needed without performance hit.
|
|
11
|
+
*/
|
|
12
|
+
export class Item {
|
|
13
|
+
constructor(spec) {
|
|
14
|
+
this.spec = spec;
|
|
15
|
+
/**
|
|
16
|
+
* Whether the item is 'active' (for example, the item for toggling the strong mark might be active when the cursor is in strong text).
|
|
17
|
+
*/
|
|
18
|
+
this.active = false;
|
|
19
|
+
/**
|
|
20
|
+
* Button is shown but disabled, because the item cannot be (un-)applied
|
|
21
|
+
*/
|
|
22
|
+
this.disabled = false;
|
|
23
|
+
/**
|
|
24
|
+
* Whether the item is shown at the moment
|
|
25
|
+
*/
|
|
26
|
+
this.show = true;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Update the item state according to the editor state
|
|
30
|
+
*/
|
|
31
|
+
update(view, state) {
|
|
32
|
+
if (this.spec.active) {
|
|
33
|
+
this.active = this.spec.active(state);
|
|
34
|
+
}
|
|
35
|
+
if (this.spec.enable) {
|
|
36
|
+
this.disabled = !this.spec.enable(state);
|
|
37
|
+
}
|
|
38
|
+
if (this.spec.select) {
|
|
39
|
+
this.show = this.spec.select(state);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Convert built-in `MenuItem` into our Angular specific `Item`
|
|
45
|
+
*/
|
|
46
|
+
function toItem(item) {
|
|
47
|
+
return new Item(item.spec);
|
|
48
|
+
}
|
|
49
|
+
function canInsert(state, nodeType) {
|
|
50
|
+
const $from = state.selection.$from;
|
|
51
|
+
for (let d = $from.depth; d >= 0; d--) {
|
|
52
|
+
const index = $from.index(d);
|
|
53
|
+
if ($from.node(d).canReplaceWith(index, index, nodeType)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
// function insertImageItem(nodeType: NodeType) {
|
|
60
|
+
// return new MenuItem({
|
|
61
|
+
// enable(state): boolean {
|
|
62
|
+
// return canInsert(state, nodeType);
|
|
63
|
+
// },
|
|
64
|
+
// run(state, _, view) {
|
|
65
|
+
// let {from, to} = state.selection,
|
|
66
|
+
// attrs = null;
|
|
67
|
+
// if (state.selection instanceof NodeSelection && state.selection.node.type == nodeType) {
|
|
68
|
+
// attrs = state.selection.node.attrs;
|
|
69
|
+
// }
|
|
70
|
+
// openPrompt({
|
|
71
|
+
// title: 'Insert image',
|
|
72
|
+
// fields: {
|
|
73
|
+
// src: new TextField({label: 'Location', required: true, value: attrs && attrs.src}),
|
|
74
|
+
// title: new TextField({label: 'Title', value: attrs && attrs.title}),
|
|
75
|
+
// alt: new TextField({
|
|
76
|
+
// label: 'Description',
|
|
77
|
+
// value: attrs ? attrs.alt : state.doc.textBetween(from, to, ' '),
|
|
78
|
+
// }),
|
|
79
|
+
// },
|
|
80
|
+
// callback(attrs) {
|
|
81
|
+
// view.dispatch(view.state.tr.replaceSelectionWith(nodeType.createAndFill(attrs)));
|
|
82
|
+
// view.focus();
|
|
83
|
+
// },
|
|
84
|
+
// });
|
|
85
|
+
// },
|
|
86
|
+
// });
|
|
87
|
+
// }
|
|
88
|
+
function cmdItem(cmd, options = {}, useEnable = false) {
|
|
89
|
+
const passedOptions = Object.assign({ run: cmd }, options);
|
|
90
|
+
if ((!options.enable || useEnable) && !options.select) {
|
|
91
|
+
passedOptions[options.enable ? 'enable' : 'select'] = (state) => cmd(state);
|
|
92
|
+
}
|
|
93
|
+
return new Item(passedOptions);
|
|
94
|
+
}
|
|
95
|
+
function markActive(state, type) {
|
|
96
|
+
const { from, $from, to, empty } = state.selection;
|
|
97
|
+
if (empty) {
|
|
98
|
+
return !!type.isInSet(state.storedMarks || $from.marks());
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return state.doc.rangeHasMark(from, to, type);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function markItem(markType, options = {}) {
|
|
105
|
+
const passedOptions = Object.assign({ active(state) {
|
|
106
|
+
return markActive(state, markType);
|
|
107
|
+
} }, options);
|
|
108
|
+
return cmdItem(toggleMark(markType), passedOptions, true);
|
|
109
|
+
}
|
|
110
|
+
function linkItem(markType, dialog) {
|
|
111
|
+
return new Item({
|
|
112
|
+
active(state) {
|
|
113
|
+
return markActive(state, markType);
|
|
114
|
+
},
|
|
115
|
+
enable(state) {
|
|
116
|
+
return !state.selection.empty;
|
|
117
|
+
},
|
|
118
|
+
run(state, dispatch, view) {
|
|
119
|
+
if (markActive(state, markType)) {
|
|
120
|
+
toggleMark(markType)(state, dispatch);
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
dialog
|
|
124
|
+
.open(LinkDialogComponent, {
|
|
125
|
+
data: {
|
|
126
|
+
href: '',
|
|
127
|
+
title: '',
|
|
128
|
+
},
|
|
129
|
+
})
|
|
130
|
+
.afterClosed()
|
|
131
|
+
.subscribe(result => {
|
|
132
|
+
if (result && !result.title) {
|
|
133
|
+
delete result.title;
|
|
134
|
+
}
|
|
135
|
+
toggleMark(markType, result)(view.state, view.dispatch);
|
|
136
|
+
view.focus();
|
|
137
|
+
});
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
function wrapListItem(nodeType) {
|
|
142
|
+
return cmdItem(wrapInList(nodeType));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Given a schema, look for default mark and node types in it and
|
|
146
|
+
* return an object with relevant menu items relating to those marks:
|
|
147
|
+
*/
|
|
148
|
+
export function buildMenuItems(schema, dialog) {
|
|
149
|
+
const r = {
|
|
150
|
+
joinUp: toItem(joinUpItem),
|
|
151
|
+
lift: toItem(liftItem),
|
|
152
|
+
selectParentNode: toItem(selectParentNodeItem),
|
|
153
|
+
undo: toItem(undoItem),
|
|
154
|
+
redo: toItem(redoItem),
|
|
155
|
+
};
|
|
156
|
+
let type;
|
|
157
|
+
type = schema.marks.strong;
|
|
158
|
+
if (type) {
|
|
159
|
+
r.toggleStrong = markItem(type);
|
|
160
|
+
}
|
|
161
|
+
type = schema.marks.em;
|
|
162
|
+
if (type) {
|
|
163
|
+
r.toggleEm = markItem(type);
|
|
164
|
+
}
|
|
165
|
+
type = schema.marks.code;
|
|
166
|
+
if (type) {
|
|
167
|
+
r.toggleCode = markItem(type);
|
|
168
|
+
}
|
|
169
|
+
type = schema.marks.link;
|
|
170
|
+
if (type) {
|
|
171
|
+
r.toggleLink = linkItem(type, dialog);
|
|
172
|
+
}
|
|
173
|
+
type = schema.nodes.image;
|
|
174
|
+
if (type) {
|
|
175
|
+
// r.insertImage = insertImageItem(type);
|
|
176
|
+
}
|
|
177
|
+
type = schema.nodes.bullet_list;
|
|
178
|
+
if (type) {
|
|
179
|
+
r.wrapBulletList = wrapListItem(type);
|
|
180
|
+
}
|
|
181
|
+
type = schema.nodes.ordered_list;
|
|
182
|
+
if (type) {
|
|
183
|
+
r.wrapOrderedList = wrapListItem(type);
|
|
184
|
+
}
|
|
185
|
+
type = schema.nodes.blockquote;
|
|
186
|
+
if (type) {
|
|
187
|
+
r.wrapBlockQuote = toItem(wrapItem(type, {}));
|
|
188
|
+
}
|
|
189
|
+
type = schema.nodes.paragraph;
|
|
190
|
+
if (type) {
|
|
191
|
+
r.makeParagraph = toItem(blockTypeItem(type, {}));
|
|
192
|
+
}
|
|
193
|
+
type = schema.nodes.code_block;
|
|
194
|
+
if (type) {
|
|
195
|
+
r.makeCodeBlock = toItem(blockTypeItem(type, {}));
|
|
196
|
+
}
|
|
197
|
+
type = schema.nodes.heading;
|
|
198
|
+
if (type) {
|
|
199
|
+
r.makeHead1 = toItem(blockTypeItem(type, { attrs: { level: 1 } }));
|
|
200
|
+
r.makeHead2 = toItem(blockTypeItem(type, { attrs: { level: 2 } }));
|
|
201
|
+
r.makeHead3 = toItem(blockTypeItem(type, { attrs: { level: 3 } }));
|
|
202
|
+
r.makeHead4 = toItem(blockTypeItem(type, { attrs: { level: 4 } }));
|
|
203
|
+
r.makeHead5 = toItem(blockTypeItem(type, { attrs: { level: 5 } }));
|
|
204
|
+
r.makeHead6 = toItem(blockTypeItem(type, { attrs: { level: 6 } }));
|
|
205
|
+
}
|
|
206
|
+
type = schema.nodes.horizontal_rule;
|
|
207
|
+
if (type) {
|
|
208
|
+
const hr = type;
|
|
209
|
+
r.insertHorizontalRule = new Item({
|
|
210
|
+
enable(state) {
|
|
211
|
+
return canInsert(state, hr);
|
|
212
|
+
},
|
|
213
|
+
run(state, dispatch) {
|
|
214
|
+
dispatch(state.tr.replaceSelectionWith(hr.create()));
|
|
215
|
+
},
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return r;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsYUFBYSxFQUNiLFVBQVUsRUFDVixRQUFRLEVBR1IsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixRQUFRLEVBQ1IsUUFBUSxHQUNYLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUFVLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsbUJBQW1CLEVBQWlCLE1BQU0scUNBQXFDLENBQUM7QUFHeEY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLElBQUk7SUFnQmIsWUFBNEIsSUFBa0I7UUFBbEIsU0FBSSxHQUFKLElBQUksQ0FBYztRQWY5Qzs7V0FFRztRQUNJLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFdEI7O1dBRUc7UUFDSSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXhCOztXQUVHO1FBQ0ksU0FBSSxHQUFHLElBQUksQ0FBQztJQUU4QixDQUFDO0lBRWxEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLElBQWdCLEVBQUUsS0FBa0I7UUFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lB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QUFvQixDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekQsQ0FBQztTQUNKLENBQUMsQ0FBQztLQUNOO0lBRUQsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBibG9ja1R5cGVJdGVtLFxuICAgIGpvaW5VcEl0ZW0sXG4gICAgbGlmdEl0ZW0sXG4gICAgTWVudUl0ZW0sXG4gICAgTWVudUl0ZW1TcGVjLFxuICAgIHJlZG9JdGVtLFxuICAgIHNlbGVjdFBhcmVudE5vZGVJdGVtLFxuICAgIHVuZG9JdGVtLFxuICAgIHdyYXBJdGVtLFxufSBmcm9tICdwcm9zZW1pcnJvci1tZW51JztcbmltcG9ydCB7RWRpdG9yU3RhdGUsIFRyYW5zYWN0aW9ufSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQge0NvbW1hbmQsIHRvZ2dsZU1hcmt9IGZyb20gJ3Byb3NlbWlycm9yLWNvbW1hbmRzJztcbmltcG9ydCB7d3JhcEluTGlzdH0gZnJvbSAncHJvc2VtaXJyb3Itc2NoZW1hLWxpc3QnO1xuaW1wb3J0IHtNYXJrVHlwZSwgTm9kZVR5cGUsIFNjaGVtYX0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0xpbmtEaWFsb2dDb21wb25lbnQsIExpbmtEaWFsb2dEYXRhfSBmcm9tICcuL2xpbmstZGlhbG9nL2xpbmstZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQge0VkaXRvclZpZXd9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xuXG4vKipcbiAqIE9uZSBpdGVtIG9mIHRoZSBtZW51LlxuICpcbiAqIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgYE1lbnVJdGVtYCBidXQgd2l0aG91dCBhbGwgdGhlIHJlbmRlcmluZyBsb2dpYyBzaW5jZSB3ZSB1c2UgQW5ndWxhclxuICogdGVtcGxhdGVzIGZvciByZW5kZXJpbmcuIEFsc28gaXQgY2FjaGVzIHRoZSBzdGF0ZSBvZiB0aGUgaXRlbSBldmVyeXRpbWUgdGhlIGVkaXRvciBzdGF0ZSBjaGFuZ2VzLFxuICogc28gQW5ndWxhciBjYW4gcXVlcnkgdGhlIHN0YXRlIGFzIG9mdGVuIGFzIG5lZWRlZCB3aXRob3V0IHBlcmZvcm1hbmNlIGhpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEl0ZW0ge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGl0ZW0gaXMgJ2FjdGl2ZScgKGZvciBleGFtcGxlLCB0aGUgaXRlbSBmb3IgdG9nZ2xpbmcgdGhlIHN0cm9uZyBtYXJrIG1pZ2h0IGJlIGFjdGl2ZSB3aGVuIHRoZSBjdXJzb3IgaXMgaW4gc3Ryb25nIHRleHQpLlxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEJ1dHRvbiBpcyBzaG93biBidXQgZGlzYWJsZWQsIGJlY2F1c2UgdGhlIGl0ZW0gY2Fubm90IGJlICh1bi0pYXBwbGllZFxuICAgICAqL1xuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgaXRlbSBpcyBzaG93biBhdCB0aGUgbW9tZW50XG4gICAgICovXG4gICAgcHVibGljIHNob3cgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNwZWM6IE1lbnVJdGVtU3BlYykge31cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgaXRlbSBzdGF0ZSBhY2NvcmRpbmcgdG8gdGhlIGVkaXRvciBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUodmlldzogRWRpdG9yVmlldywgc3RhdGU6IEVkaXRvclN0YXRlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNwZWMuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRoaXMuc3BlYy5hY3RpdmUoc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3BlYy5lbmFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSAhdGhpcy5zcGVjLmVuYWJsZShzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zcGVjLnNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gdGhpcy5zcGVjLnNlbGVjdChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQ29udmVydCBidWlsdC1pbiBgTWVudUl0ZW1gIGludG8gb3VyIEFuZ3VsYXIgc3BlY2lmaWMgYEl0ZW1gXG4gKi9cbmZ1bmN0aW9uIHRvSXRlbShpdGVtOiBNZW51SXRlbSk6IEl0ZW0ge1xuICAgIHJldHVybiBuZXcgSXRlbShpdGVtLnNwZWMpO1xufVxuXG5mdW5jdGlvbiBjYW5JbnNlcnQoc3RhdGU6IEVkaXRvclN0YXRlLCBub2RlVHlwZTogTm9kZVR5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCAkZnJvbSA9IHN0YXRlLnNlbGVjdGlvbi4kZnJvbTtcbiAgICBmb3IgKGxldCBkID0gJGZyb20uZGVwdGg7IGQgPj0gMDsgZC0tKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gJGZyb20uaW5kZXgoZCk7XG4gICAgICAgIGlmICgkZnJvbS5ub2RlKGQpLmNhblJlcGxhY2VXaXRoKGluZGV4LCBpbmRleCwgbm9kZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gZnVuY3Rpb24gaW5zZXJ0SW1hZ2VJdGVtKG5vZGVUeXBlOiBOb2RlVHlwZSkge1xuLy8gICAgIHJldHVybiBuZXcgTWVudUl0ZW0oe1xuLy8gICAgICAgICBlbmFibGUoc3RhdGUpOiBib29sZWFuIHtcbi8vICAgICAgICAgICAgIHJldHVybiBjYW5JbnNlcnQoc3RhdGUsIG5vZGVUeXBlKTtcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAgcnVuKHN0YXRlLCBfLCB2aWV3KSB7XG4vLyAgICAgICAgICAgICBsZXQge2Zyb20sIHRvfSA9IHN0YXRlLnNlbGVjdGlvbixcbi8vICAgICAgICAgICAgICAgICBhdHRycyA9IG51bGw7XG4vLyAgICAgICAgICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbiAmJiBzdGF0ZS5zZWxlY3Rpb24ubm9kZS50eXBlID09IG5vZGVUeXBlKSB7XG4vLyAgICAgICAgICAgICAgICAgYXR0cnMgPSBzdGF0ZS5zZWxlY3Rpb24ubm9kZS5hdHRycztcbi8vICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgIG9wZW5Qcm9tcHQoe1xuLy8gICAgICAgICAgICAgICAgIHRpdGxlOiAnSW5zZXJ0IGltYWdlJyxcbi8vICAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbi8vICAgICAgICAgICAgICAgICAgICAgc3JjOiBuZXcgVGV4dEZpZWxkKHtsYWJlbDogJ0xvY2F0aW9uJywgcmVxdWlyZWQ6IHRydWUsIHZhbHVlOiBhdHRycyAmJiBhdHRycy5zcmN9KSxcbi8vICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG5ldyBUZXh0RmllbGQoe2xhYmVsOiAnVGl0bGUnLCB2YWx1ZTogYXR0cnMgJiYgYXR0cnMudGl0bGV9KSxcbi8vICAgICAgICAgICAgICAgICAgICAgYWx0OiBuZXcgVGV4dEZpZWxkKHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnRGVzY3JpcHRpb24nLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGF0dHJzID8gYXR0cnMuYWx0IDogc3RhdGUuZG9jLnRleHRCZXR3ZWVuKGZyb20sIHRvLCAnICcpLFxuLy8gICAgICAgICAgICAgICAgICAgICB9KSxcbi8vICAgICAgICAgICAgICAgICB9LFxuLy8gICAgICAgICAgICAgICAgIGNhbGxiYWNrKGF0dHJzKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgIHZpZXcuZGlzcGF0Y2godmlldy5zdGF0ZS50ci5yZXBsYWNlU2VsZWN0aW9uV2l0aChub2RlVHlwZS5jcmVhdGVBbmRGaWxsKGF0dHJzKSkpO1xuLy8gICAgICAgICAgICAgICAgICAgICB2aWV3LmZvY3VzKCk7XG4vLyAgICAgICAgICAgICAgICAgfSxcbi8vICAgICAgICAgICAgIH0pO1xuLy8gICAgICAgICB9LFxuLy8gICAgIH0pO1xuLy8gfVxuXG5mdW5jdGlvbiBjbWRJdGVtKGNtZDogQ29tbWFuZCwgb3B0aW9uczogUGFydGlhbDxNZW51SXRlbVNwZWM+ID0ge30sIHVzZUVuYWJsZSA9IGZhbHNlKTogSXRlbSB7XG4gICAgY29uc3QgcGFzc2VkT3B0aW9uczogTWVudUl0ZW1TcGVjID0ge1xuICAgICAgICBydW46IGNtZCxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgaWYgKCghb3B0aW9ucy5lbmFibGUgfHwgdXNlRW5hYmxlKSAmJiAhb3B0aW9ucy5zZWxlY3QpIHtcbiAgICAgICAgcGFzc2VkT3B0aW9uc1tvcHRpb25zLmVuYWJsZSA/ICdlbmFibGUnIDogJ3NlbGVjdCddID0gKHN0YXRlOiBFZGl0b3JTdGF0ZSkgPT4gY21kKHN0YXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEl0ZW0ocGFzc2VkT3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIG1hcmtBY3RpdmUoc3RhdGU6IEVkaXRvclN0YXRlLCB0eXBlOiBNYXJrVHlwZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtmcm9tLCAkZnJvbSwgdG8sIGVtcHR5fSA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgICAgcmV0dXJuICEhdHlwZS5pc0luU2V0KHN0YXRlLnN0b3JlZE1hcmtzIHx8ICRmcm9tLm1hcmtzKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5kb2MucmFuZ2VIYXNNYXJrKGZyb20sIHRvLCB0eXBlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtJdGVtKG1hcmtUeXBlOiBNYXJrVHlwZSwgb3B0aW9uczogUGFydGlhbDxNZW51SXRlbVNwZWM+ID0ge30pOiBJdGVtIHtcbiAgICBjb25zdCBwYXNzZWRPcHRpb25zOiBQYXJ0aWFsPE1lbnVJdGVtU3BlYz4gPSB7XG4gICAgICAgIGFjdGl2ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgICAgIHJldHVybiBtYXJrQWN0aXZlKHN0YXRlLCBtYXJrVHlwZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBjbWRJdGVtKHRvZ2dsZU1hcmsobWFya1R5cGUpLCBwYXNzZWRPcHRpb25zLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gbGlua0l0ZW0obWFya1R5cGU6IE1hcmtUeXBlLCBkaWFsb2c6IE1hdERpYWxvZyk6IEl0ZW0ge1xuICAgIHJldHVybiBuZXcgSXRlbSh7XG4gICAgICAgIGFjdGl2ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgICAgIHJldHVybiBtYXJrQWN0aXZlKHN0YXRlLCBtYXJrVHlwZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgICAgIHJldHVybiAhc3RhdGUuc2VsZWN0aW9uLmVtcHR5O1xuICAgICAgICB9LFxuICAgICAgICBydW4oc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaDogKHA6IFRyYW5zYWN0aW9uKSA9PiB2b2lkLCB2aWV3OiBFZGl0b3JWaWV3KTogYm9vbGVhbiB8IHZvaWQge1xuICAgICAgICAgICAgaWYgKG1hcmtBY3RpdmUoc3RhdGUsIG1hcmtUeXBlKSkge1xuICAgICAgICAgICAgICAgIHRvZ2dsZU1hcmsobWFya1R5cGUpKHN0YXRlLCBkaXNwYXRjaCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpYWxvZ1xuICAgICAgICAgICAgICAgIC5vcGVuPExpbmtEaWFsb2dDb21wb25lbnQsIExpbmtEaWFsb2dEYXRhLCBMaW5rRGlhbG9nRGF0YT4oTGlua0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmICFyZXN1bHQudGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHQudGl0bGU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVNYXJrKG1hcmtUeXBlLCByZXN1bHQpKHZpZXcuc3RhdGUsIHZpZXcuZGlzcGF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICB2aWV3LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHdyYXBMaXN0SXRlbShub2RlVHlwZTogTm9kZVR5cGUpOiBJdGVtIHtcbiAgICByZXR1cm4gY21kSXRlbSh3cmFwSW5MaXN0KG5vZGVUeXBlKSk7XG59XG5cbmV4cG9ydCB0eXBlIEtleSA9XG4gICAgfCAndG9nZ2xlU3Ryb25nJ1xuICAgIHwgJ3RvZ2dsZUVtJ1xuICAgIHwgJ3RvZ2dsZUNvZGUnXG4gICAgfCAndG9nZ2xlTGluaydcbiAgICB8ICdpbnNlcnRJbWFnZSdcbiAgICB8ICd3cmFwQnVsbGV0TGlzdCdcbiAgICB8ICd3cmFwT3JkZXJlZExpc3QnXG4gICAgfCAnd3JhcEJsb2NrUXVvdGUnXG4gICAgfCAnbWFrZVBhcmFncmFwaCdcbiAgICB8ICdtYWtlQ29kZUJsb2NrJ1xuICAgIHwgJ21ha2VIZWFkMSdcbiAgICB8ICdtYWtlSGVhZDInXG4gICAgfCAnbWFrZUhlYWQzJ1xuICAgIHwgJ21ha2VIZWFkNCdcbiAgICB8ICdtYWtlSGVhZDUnXG4gICAgfCAnbWFrZUhlYWQ2J1xuICAgIHwgJ2luc2VydEhvcml6b250YWxSdWxlJ1xuICAgIHwgJ2pvaW5VcCdcbiAgICB8ICdsaWZ0J1xuICAgIHwgJ3NlbGVjdFBhcmVudE5vZGUnXG4gICAgfCAndW5kbydcbiAgICB8ICdyZWRvJztcblxuZXhwb3J0IHR5cGUgTWVudUl0ZW1zID0gUGFydGlhbDxSZWNvcmQ8S2V5LCBJdGVtPj47XG5cbi8qKlxuICogR2l2ZW4gYSBzY2hlbWEsIGxvb2sgZm9yIGRlZmF1bHQgbWFyayBhbmQgbm9kZSB0eXBlcyBpbiBpdCBhbmRcbiAqIHJldHVybiBhbiBvYmplY3Qgd2l0aCByZWxldmFudCBtZW51IGl0ZW1zIHJlbGF0aW5nIHRvIHRob3NlIG1hcmtzOlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRNZW51SXRlbXMoc2NoZW1hOiBTY2hlbWEsIGRpYWxvZzogTWF0RGlhbG9nKTogTWVudUl0ZW1zIHtcbiAgICBjb25zdCByOiBNZW51SXRlbXMgPSB7XG4gICAgICAgIGpvaW5VcDogdG9JdGVtKGpvaW5VcEl0ZW0pLFxuICAgICAgICBsaWZ0OiB0b0l0ZW0obGlmdEl0ZW0pLFxuICAgICAgICBzZWxlY3RQYXJlbnROb2RlOiB0b0l0ZW0oc2VsZWN0UGFyZW50Tm9kZUl0ZW0pLFxuICAgICAgICB1bmRvOiB0b0l0ZW0odW5kb0l0ZW0gYXMgdW5rbm93biBhcyBNZW51SXRlbSksIC8vIFR5cGluZyBpcyBpbmNvcnJlY3QsIHNvIHdlIGZvcmNlIGl0XG4gICAgICAgIHJlZG86IHRvSXRlbShyZWRvSXRlbSBhcyB1bmtub3duIGFzIE1lbnVJdGVtKSxcbiAgICB9O1xuXG4gICAgbGV0IHR5cGU6IE1hcmtUeXBlIHwgTm9kZVR5cGUgfCB1bmRlZmluZWQ7XG4gICAgdHlwZSA9IHNjaGVtYS5tYXJrcy5zdHJvbmc7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgci50b2dnbGVTdHJvbmcgPSBtYXJrSXRlbSh0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm1hcmtzLmVtO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIudG9nZ2xlRW0gPSBtYXJrSXRlbSh0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm1hcmtzLmNvZGU7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgci50b2dnbGVDb2RlID0gbWFya0l0ZW0odHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5tYXJrcy5saW5rO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIudG9nZ2xlTGluayA9IGxpbmtJdGVtKHR5cGUsIGRpYWxvZyk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5pbWFnZTtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICAvLyByLmluc2VydEltYWdlID0gaW5zZXJ0SW1hZ2VJdGVtKHR5cGUpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuYnVsbGV0X2xpc3Q7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgci53cmFwQnVsbGV0TGlzdCA9IHdyYXBMaXN0SXRlbSh0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm5vZGVzLm9yZGVyZWRfbGlzdDtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLndyYXBPcmRlcmVkTGlzdCA9IHdyYXBMaXN0SXRlbSh0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm5vZGVzLmJsb2NrcXVvdGU7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgci53cmFwQmxvY2tRdW90ZSA9IHRvSXRlbSh3cmFwSXRlbSh0eXBlLCB7fSkpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMucGFyYWdyYXBoO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIubWFrZVBhcmFncmFwaCA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHt9KSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5jb2RlX2Jsb2NrO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIubWFrZUNvZGVCbG9jayA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHt9KSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5oZWFkaW5nO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIubWFrZUhlYWQxID0gdG9JdGVtKGJsb2NrVHlwZUl0ZW0odHlwZSwge2F0dHJzOiB7bGV2ZWw6IDF9fSkpO1xuICAgICAgICByLm1ha2VIZWFkMiA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHthdHRyczoge2xldmVsOiAyfX0pKTtcbiAgICAgICAgci5tYWtlSGVhZDMgPSB0b0l0ZW0oYmxvY2tUeXBlSXRlbSh0eXBlLCB7YXR0cnM6IHtsZXZlbDogM319KSk7XG4gICAgICAgIHIubWFrZUhlYWQ0ID0gdG9JdGVtKGJsb2NrVHlwZUl0ZW0odHlwZSwge2F0dHJzOiB7bGV2ZWw6IDR9fSkpO1xuICAgICAgICByLm1ha2VIZWFkNSA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHthdHRyczoge2xldmVsOiA1fX0pKTtcbiAgICAgICAgci5tYWtlSGVhZDYgPSB0b0l0ZW0oYmxvY2tUeXBlSXRlbSh0eXBlLCB7YXR0cnM6IHtsZXZlbDogNn19KSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5ob3Jpem9udGFsX3J1bGU7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgY29uc3QgaHIgPSB0eXBlO1xuICAgICAgICByLmluc2VydEhvcml6b250YWxSdWxlID0gbmV3IEl0ZW0oe1xuICAgICAgICAgICAgZW5hYmxlKHN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbkluc2VydChzdGF0ZSwgaHIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bihzdGF0ZSwgZGlzcGF0Y2gpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChzdGF0ZS50ci5yZXBsYWNlU2VsZWN0aW9uV2l0aChoci5jcmVhdGUoKSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { marks, nodes } from 'prosemirror-schema-basic';
|
|
2
|
+
import { addListNodes } from 'prosemirror-schema-list';
|
|
3
|
+
import { Schema } from 'prosemirror-model';
|
|
4
|
+
const myNodes = {
|
|
5
|
+
heading: nodes.heading,
|
|
6
|
+
doc: nodes.doc,
|
|
7
|
+
paragraph: nodes.paragraph,
|
|
8
|
+
text: nodes.text,
|
|
9
|
+
hard_break: nodes.hard_break,
|
|
10
|
+
};
|
|
11
|
+
const myMarks = {
|
|
12
|
+
link: marks.link,
|
|
13
|
+
em: marks.em,
|
|
14
|
+
strong: marks.strong,
|
|
15
|
+
};
|
|
16
|
+
const basicSchema = new Schema({ nodes: myNodes, marks: myMarks });
|
|
17
|
+
export const schema = new Schema({
|
|
18
|
+
nodes: addListNodes(basicSchema.spec.nodes, 'paragraph block*', 'block'),
|
|
19
|
+
marks: basicSchema.spec.marks,
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSXpDLE1BQU0sT0FBTyxHQUFlO0lBQ3hCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztJQUN0QixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7SUFDZCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7SUFDMUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0lBQ2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtDQUMvQixDQUFDO0FBR0YsTUFBTSxPQUFPLEdBQWU7SUFDeEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0lBQ2hCLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtJQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtDQUN2QixDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQztJQUM3QixLQUFLLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBWSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQztJQUMvRSxLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLO0NBQ2hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWFya3MsIG5vZGVzfSBmcm9tICdwcm9zZW1pcnJvci1zY2hlbWEtYmFzaWMnO1xuaW1wb3J0IHthZGRMaXN0Tm9kZXN9IGZyb20gJ3Byb3NlbWlycm9yLXNjaGVtYS1saXN0JztcbmltcG9ydCB7U2NoZW1hfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5cbi8vIEtlZXAgb25seSBiYXNpYyBlbGVtZW50c1xudHlwZSBCYXNpY05vZGVzID0gT21pdDx0eXBlb2Ygbm9kZXMsICdpbWFnZScgfCAnY29kZV9ibG9jaycgfCAnYmxvY2txdW90ZScgfCAnaG9yaXpvbnRhbF9ydWxlJz47XG5jb25zdCBteU5vZGVzOiBCYXNpY05vZGVzID0ge1xuICAgIGhlYWRpbmc6IG5vZGVzLmhlYWRpbmcsXG4gICAgZG9jOiBub2Rlcy5kb2MsXG4gICAgcGFyYWdyYXBoOiBub2Rlcy5wYXJhZ3JhcGgsXG4gICAgdGV4dDogbm9kZXMudGV4dCxcbiAgICBoYXJkX2JyZWFrOiBub2Rlcy5oYXJkX2JyZWFrLFxufTtcblxudHlwZSBCYXNpY01hcmtzID0gT21pdDx0eXBlb2YgbWFya3MsICdjb2RlJz47XG5jb25zdCBteU1hcmtzOiBCYXNpY01hcmtzID0ge1xuICAgIGxpbms6IG1hcmtzLmxpbmssXG4gICAgZW06IG1hcmtzLmVtLFxuICAgIHN0cm9uZzogbWFya3Muc3Ryb25nLFxufTtcblxuY29uc3QgYmFzaWNTY2hlbWEgPSBuZXcgU2NoZW1hKHtub2RlczogbXlOb2RlcywgbWFya3M6IG15TWFya3N9KTtcblxuZXhwb3J0IGNvbnN0IHNjaGVtYSA9IG5ldyBTY2hlbWEoe1xuICAgIG5vZGVzOiBhZGRMaXN0Tm9kZXMoYmFzaWNTY2hlbWEuc3BlYy5ub2RlcyBhcyBhbnksICdwYXJhZ3JhcGggYmxvY2sqJywgJ2Jsb2NrJyksXG4gICAgbWFya3M6IGJhc2ljU2NoZW1hLnNwZWMubWFya3MsXG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Load `$localize` onto the global scope - to be able to use that function to translate strings in components/services.
|
|
2
|
+
import '@angular/localize/init';
|
|
3
|
+
/*
|
|
4
|
+
* Public API Surface of natural-editor
|
|
5
|
+
*/
|
|
6
|
+
export { NaturalEditorComponent } from './lib/editor.component';
|
|
7
|
+
export { NaturalEditorModule } from './lib/editor.module';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdIQUF3SDtBQUN4SCxPQUFPLHdCQUF3QixDQUFDO0FBR2hDOztHQUVHO0FBRUgsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBMb2FkIGAkbG9jYWxpemVgIG9udG8gdGhlIGdsb2JhbCBzY29wZSAtIHRvIGJlIGFibGUgdG8gdXNlIHRoYXQgZnVuY3Rpb24gdG8gdHJhbnNsYXRlIHN0cmluZ3MgaW4gY29tcG9uZW50cy9zZXJ2aWNlcy5cbmltcG9ydCAnQGFuZ3VsYXIvbG9jYWxpemUvaW5pdCc7XG5pbXBvcnQge05hdHVyYWxFZGl0b3JDb21wb25lbnR9IGZyb20gJy4vbGliL2VkaXRvci5jb21wb25lbnQnO1xuXG4vKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5hdHVyYWwtZWRpdG9yXG4gKi9cblxuZXhwb3J0IHtOYXR1cmFsRWRpdG9yQ29tcG9uZW50fSBmcm9tICcuL2xpYi9lZGl0b3IuY29tcG9uZW50JztcbmV4cG9ydCB7TmF0dXJhbEVkaXRvck1vZHVsZX0gZnJvbSAnLi9saWIvZWRpdG9yLm1vZHVsZSc7XG4iXX0=
|