@ecodev/natural-editor 41.3.0 → 42.0.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.
Files changed (31) hide show
  1. package/{esm2015/ecodev-natural-editor.js → esm2020/ecodev-natural-editor.mjs} +0 -0
  2. package/esm2020/lib/editor/editor.component.mjs +213 -0
  3. package/{esm2015/lib/editor.module.js → esm2020/lib/editor.module.mjs} +4 -4
  4. package/{esm2015/lib/link-dialog/link-dialog.component.js → esm2020/lib/link-dialog/link-dialog.component.mjs} +5 -8
  5. package/esm2020/lib/utils/image.mjs +81 -0
  6. package/{esm2015/lib/utils/inputrules.js → esm2020/lib/utils/inputrules.mjs} +0 -0
  7. package/{esm2015/lib/utils/item.js → esm2020/lib/utils/item.mjs} +1 -1
  8. package/esm2020/lib/utils/keymap.mjs +115 -0
  9. package/esm2020/lib/utils/menu.mjs +184 -0
  10. package/esm2020/lib/utils/paragraph-with-alignment.mjs +43 -0
  11. package/esm2020/lib/utils/schema.mjs +51 -0
  12. package/{esm2015/lib/utils/table.js → esm2020/lib/utils/table.mjs} +2 -2
  13. package/esm2020/lib/utils/text-align-item.mjs +81 -0
  14. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  15. package/fesm2015/{ecodev-natural-editor.js → ecodev-natural-editor.mjs} +39 -41
  16. package/fesm2015/ecodev-natural-editor.mjs.map +1 -0
  17. package/fesm2020/ecodev-natural-editor.mjs +1001 -0
  18. package/fesm2020/ecodev-natural-editor.mjs.map +1 -0
  19. package/package.json +22 -8
  20. package/src/lib/editor/_editor.theme.scss +1 -1
  21. package/theming/_natural-editor.theme.scss +1 -1
  22. package/bundles/ecodev-natural-editor.umd.js +0 -1351
  23. package/bundles/ecodev-natural-editor.umd.js.map +0 -1
  24. package/esm2015/lib/editor/editor.component.js +0 -219
  25. package/esm2015/lib/utils/image.js +0 -81
  26. package/esm2015/lib/utils/keymap.js +0 -115
  27. package/esm2015/lib/utils/menu.js +0 -178
  28. package/esm2015/lib/utils/paragraph-with-alignment.js +0 -43
  29. package/esm2015/lib/utils/schema.js +0 -47
  30. package/esm2015/lib/utils/text-align-item.js +0 -78
  31. package/fesm2015/ecodev-natural-editor.js.map +0 -1
@@ -1,178 +0,0 @@
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
- import { addColumnAfter, addColumnBefore, addRowAfter, addRowBefore, deleteColumn, deleteRow, deleteTable, mergeCells, splitCell, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, } from 'prosemirror-tables';
6
- import { addTable } from './table';
7
- import { Item } from './item';
8
- import { paragraphWithAlignment } from './paragraph-with-alignment';
9
- import { TextAlignItem } from './text-align-item';
10
- /**
11
- * Convert built-in `MenuItem` into our Angular specific `Item`
12
- */
13
- function toItem(item) {
14
- return new Item(item.spec);
15
- }
16
- function canInsert(state, nodeType) {
17
- const $from = state.selection.$from;
18
- for (let d = $from.depth; d >= 0; d--) {
19
- const index = $from.index(d);
20
- if ($from.node(d).canReplaceWith(index, index, nodeType)) {
21
- return true;
22
- }
23
- }
24
- return false;
25
- }
26
- function cmdItem(cmd, options = {}, useEnable = false) {
27
- const passedOptions = Object.assign({ run: cmd }, options);
28
- if ((!options.enable || useEnable) && !options.select) {
29
- passedOptions[options.enable ? 'enable' : 'select'] = (state) => cmd(state);
30
- }
31
- return new Item(passedOptions);
32
- }
33
- function markActive(state, type) {
34
- const { from, $from, to, empty } = state.selection;
35
- if (empty) {
36
- return !!type.isInSet(state.storedMarks || $from.marks());
37
- }
38
- else {
39
- return state.doc.rangeHasMark(from, to, type);
40
- }
41
- }
42
- function markItem(markType, options = {}) {
43
- const passedOptions = Object.assign({ active(state) {
44
- return markActive(state, markType);
45
- } }, options);
46
- return cmdItem(toggleMark(markType), passedOptions, true);
47
- }
48
- function linkItem(markType, dialog) {
49
- return new Item({
50
- active(state) {
51
- return markActive(state, markType);
52
- },
53
- enable(state) {
54
- return !state.selection.empty;
55
- },
56
- run(state, dispatch, view) {
57
- if (markActive(state, markType)) {
58
- toggleMark(markType)(state, dispatch);
59
- return true;
60
- }
61
- dialog
62
- .open(LinkDialogComponent, {
63
- data: {
64
- href: '',
65
- title: '',
66
- },
67
- })
68
- .afterClosed()
69
- .subscribe(result => {
70
- if (result) {
71
- if (!result.title) {
72
- delete result.title;
73
- }
74
- toggleMark(markType, result)(view.state, view.dispatch);
75
- }
76
- view.focus();
77
- });
78
- },
79
- });
80
- }
81
- function wrapListItem(nodeType) {
82
- return cmdItem(wrapInList(nodeType));
83
- }
84
- /**
85
- * Given a schema, look for default mark and node types in it and
86
- * return an object with relevant menu items relating to those marks:
87
- */
88
- export function buildMenuItems(schema, dialog) {
89
- const r = {
90
- joinUp: toItem(joinUpItem),
91
- lift: toItem(liftItem),
92
- selectParentNode: toItem(selectParentNodeItem),
93
- undo: toItem(undoItem),
94
- redo: toItem(redoItem),
95
- };
96
- let type;
97
- type = schema.marks.strong;
98
- if (type) {
99
- r.toggleStrong = markItem(type);
100
- }
101
- type = schema.marks.em;
102
- if (type) {
103
- r.toggleEm = markItem(type);
104
- }
105
- type = schema.marks.code;
106
- if (type) {
107
- r.toggleCode = markItem(type);
108
- }
109
- type = schema.marks.link;
110
- if (type) {
111
- r.toggleLink = linkItem(type, dialog);
112
- }
113
- type = schema.nodes.bullet_list;
114
- if (type) {
115
- r.wrapBulletList = wrapListItem(type);
116
- }
117
- type = schema.nodes.ordered_list;
118
- if (type) {
119
- r.wrapOrderedList = wrapListItem(type);
120
- }
121
- type = schema.nodes.blockquote;
122
- if (type) {
123
- r.wrapBlockQuote = toItem(wrapItem(type, {}));
124
- }
125
- type = schema.nodes.paragraph;
126
- if (type) {
127
- r.makeParagraph = toItem(blockTypeItem(type, {}));
128
- if (type.spec === paragraphWithAlignment) {
129
- r.alignLeft = new TextAlignItem('left');
130
- r.alignRight = new TextAlignItem('right');
131
- r.alignCenter = new TextAlignItem('center');
132
- r.alignJustify = new TextAlignItem('justify');
133
- }
134
- }
135
- type = schema.nodes.code_block;
136
- if (type) {
137
- r.makeCodeBlock = toItem(blockTypeItem(type, {}));
138
- }
139
- type = schema.nodes.heading;
140
- if (type) {
141
- r.makeHead1 = toItem(blockTypeItem(type, { attrs: { level: 1 } }));
142
- r.makeHead2 = toItem(blockTypeItem(type, { attrs: { level: 2 } }));
143
- r.makeHead3 = toItem(blockTypeItem(type, { attrs: { level: 3 } }));
144
- r.makeHead4 = toItem(blockTypeItem(type, { attrs: { level: 4 } }));
145
- r.makeHead5 = toItem(blockTypeItem(type, { attrs: { level: 5 } }));
146
- r.makeHead6 = toItem(blockTypeItem(type, { attrs: { level: 6 } }));
147
- }
148
- type = schema.nodes.horizontal_rule;
149
- if (type) {
150
- const hr = type;
151
- r.insertHorizontalRule = new Item({
152
- enable(state) {
153
- return canInsert(state, hr);
154
- },
155
- run(state, dispatch) {
156
- dispatch(state.tr.replaceSelectionWith(hr.create()));
157
- },
158
- });
159
- }
160
- type = schema.nodes.table;
161
- if (type) {
162
- r.insertTable = new Item({ run: (e, tr) => addTable(e, tr) });
163
- r.addColumnBefore = new Item({ run: addColumnBefore });
164
- r.addColumnAfter = new Item({ run: addColumnAfter });
165
- r.deleteColumn = new Item({ run: deleteColumn });
166
- r.addRowBefore = new Item({ run: addRowBefore });
167
- r.addRowAfter = new Item({ run: addRowAfter });
168
- r.deleteRow = new Item({ run: deleteRow });
169
- r.deleteTable = new Item({ run: deleteTable });
170
- r.mergeCells = new Item({ run: mergeCells });
171
- r.splitCell = new Item({ run: splitCell });
172
- r.toggleHeaderColumn = new Item({ run: toggleHeaderColumn });
173
- r.toggleHeaderRow = new Item({ run: toggleHeaderRow });
174
- r.toggleHeaderCell = new Item({ run: toggleHeaderCell });
175
- }
176
- return r;
177
- }
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvdXRpbHMvbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsYUFBYSxFQUNiLFVBQVUsRUFDVixRQUFRLEVBR1IsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixRQUFRLEVBQ1IsUUFBUSxHQUNYLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUFVLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsbUJBQW1CLEVBQWlCLE1BQU0sc0NBQXNDLENBQUM7QUFFekYsT0FBTyxFQUNILGNBQWMsRUFDZCxlQUFlLEVBQ2YsV0FBVyxFQUNYLFlBQVksRUFDWixZQUFZLEVBQ1osU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEVBQ1YsU0FBUyxFQUNULGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxHQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQ7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxJQUFjO0lBQzFCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFrQixFQUFFLFFBQWtCO0lBQ3JELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lB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LENBQUMsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLElBQUksSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsZUFBZSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLGVBQWUsRUFBQyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQztLQUMxRDtJQUVELE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgYmxvY2tUeXBlSXRlbSxcbiAgICBqb2luVXBJdGVtLFxuICAgIGxpZnRJdGVtLFxuICAgIE1lbnVJdGVtLFxuICAgIE1lbnVJdGVtU3BlYyxcbiAgICByZWRvSXRlbSxcbiAgICBzZWxlY3RQYXJlbnROb2RlSXRlbSxcbiAgICB1bmRvSXRlbSxcbiAgICB3cmFwSXRlbSxcbn0gZnJvbSAncHJvc2VtaXJyb3ItbWVudSc7XG5pbXBvcnQge0VkaXRvclN0YXRlLCBUcmFuc2FjdGlvbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHtDb21tYW5kLCB0b2dnbGVNYXJrfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5pbXBvcnQge3dyYXBJbkxpc3R9IGZyb20gJ3Byb3NlbWlycm9yLXNjaGVtYS1saXN0JztcbmltcG9ydCB7TWFya1R5cGUsIE5vZGVUeXBlLCBTY2hlbWF9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtMaW5rRGlhbG9nQ29tcG9uZW50LCBMaW5rRGlhbG9nRGF0YX0gZnJvbSAnLi4vbGluay1kaWFsb2cvbGluay1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7RWRpdG9yVmlld30gZnJvbSAncHJvc2VtaXJyb3Itdmlldyc7XG5pbXBvcnQge1xuICAgIGFkZENvbHVtbkFmdGVyLFxuICAgIGFkZENvbHVtbkJlZm9yZSxcbiAgICBhZGRSb3dBZnRlcixcbiAgICBhZGRSb3dCZWZvcmUsXG4gICAgZGVsZXRlQ29sdW1uLFxuICAgIGRlbGV0ZVJvdyxcbiAgICBkZWxldGVUYWJsZSxcbiAgICBtZXJnZUNlbGxzLFxuICAgIHNwbGl0Q2VsbCxcbiAgICB0b2dnbGVIZWFkZXJDZWxsLFxuICAgIHRvZ2dsZUhlYWRlckNvbHVtbixcbiAgICB0b2dnbGVIZWFkZXJSb3csXG59IGZyb20gJ3Byb3NlbWlycm9yLXRhYmxlcyc7XG5pbXBvcnQge2FkZFRhYmxlfSBmcm9tICcuL3RhYmxlJztcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi9pdGVtJztcbmltcG9ydCB7cGFyYWdyYXBoV2l0aEFsaWdubWVudH0gZnJvbSAnLi9wYXJhZ3JhcGgtd2l0aC1hbGlnbm1lbnQnO1xuaW1wb3J0IHtUZXh0QWxpZ25JdGVtfSBmcm9tICcuL3RleHQtYWxpZ24taXRlbSc7XG5cbi8qKlxuICogQ29udmVydCBidWlsdC1pbiBgTWVudUl0ZW1gIGludG8gb3VyIEFuZ3VsYXIgc3BlY2lmaWMgYEl0ZW1gXG4gKi9cbmZ1bmN0aW9uIHRvSXRlbShpdGVtOiBNZW51SXRlbSk6IEl0ZW0ge1xuICAgIHJldHVybiBuZXcgSXRlbShpdGVtLnNwZWMpO1xufVxuXG5mdW5jdGlvbiBjYW5JbnNlcnQoc3RhdGU6IEVkaXRvclN0YXRlLCBub2RlVHlwZTogTm9kZVR5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCAkZnJvbSA9IHN0YXRlLnNlbGVjdGlvbi4kZnJvbTtcbiAgICBmb3IgKGxldCBkID0gJGZyb20uZGVwdGg7IGQgPj0gMDsgZC0tKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gJGZyb20uaW5kZXgoZCk7XG4gICAgICAgIGlmICgkZnJvbS5ub2RlKGQpLmNhblJlcGxhY2VXaXRoKGluZGV4LCBpbmRleCwgbm9kZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY21kSXRlbShjbWQ6IENvbW1hbmQsIG9wdGlvbnM6IFBhcnRpYWw8TWVudUl0ZW1TcGVjPiA9IHt9LCB1c2VFbmFibGUgPSBmYWxzZSk6IEl0ZW0ge1xuICAgIGNvbnN0IHBhc3NlZE9wdGlvbnM6IE1lbnVJdGVtU3BlYyA9IHtcbiAgICAgICAgcnVuOiBjbWQsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIGlmICgoIW9wdGlvbnMuZW5hYmxlIHx8IHVzZUVuYWJsZSkgJiYgIW9wdGlvbnMuc2VsZWN0KSB7XG4gICAgICAgIHBhc3NlZE9wdGlvbnNbb3B0aW9ucy5lbmFibGUgPyAnZW5hYmxlJyA6ICdzZWxlY3QnXSA9IChzdGF0ZTogRWRpdG9yU3RhdGUpID0+IGNtZChzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJdGVtKHBhc3NlZE9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBtYXJrQWN0aXZlKHN0YXRlOiBFZGl0b3JTdGF0ZSwgdHlwZTogTWFya1R5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCB7ZnJvbSwgJGZyb20sIHRvLCBlbXB0eX0gPSBzdGF0ZS5zZWxlY3Rpb247XG4gICAgaWYgKGVtcHR5KSB7XG4gICAgICAgIHJldHVybiAhIXR5cGUuaXNJblNldChzdGF0ZS5zdG9yZWRNYXJrcyB8fCAkZnJvbS5tYXJrcygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RhdGUuZG9jLnJhbmdlSGFzTWFyayhmcm9tLCB0bywgdHlwZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYXJrSXRlbShtYXJrVHlwZTogTWFya1R5cGUsIG9wdGlvbnM6IFBhcnRpYWw8TWVudUl0ZW1TcGVjPiA9IHt9KTogSXRlbSB7XG4gICAgY29uc3QgcGFzc2VkT3B0aW9uczogUGFydGlhbDxNZW51SXRlbVNwZWM+ID0ge1xuICAgICAgICBhY3RpdmUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gbWFya0FjdGl2ZShzdGF0ZSwgbWFya1R5cGUpO1xuICAgICAgICB9LFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICByZXR1cm4gY21kSXRlbSh0b2dnbGVNYXJrKG1hcmtUeXBlKSwgcGFzc2VkT3B0aW9ucywgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGxpbmtJdGVtKG1hcmtUeXBlOiBNYXJrVHlwZSwgZGlhbG9nOiBNYXREaWFsb2cpOiBJdGVtIHtcbiAgICByZXR1cm4gbmV3IEl0ZW0oe1xuICAgICAgICBhY3RpdmUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gbWFya0FjdGl2ZShzdGF0ZSwgbWFya1R5cGUpO1xuICAgICAgICB9LFxuICAgICAgICBlbmFibGUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gIXN0YXRlLnNlbGVjdGlvbi5lbXB0eTtcbiAgICAgICAgfSxcbiAgICAgICAgcnVuKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGlzcGF0Y2g6IChwOiBUcmFuc2FjdGlvbikgPT4gdm9pZCwgdmlldzogRWRpdG9yVmlldyk6IGJvb2xlYW4gfCB2b2lkIHtcbiAgICAgICAgICAgIGlmIChtYXJrQWN0aXZlKHN0YXRlLCBtYXJrVHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0b2dnbGVNYXJrKG1hcmtUeXBlKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgICAgICAub3BlbjxMaW5rRGlhbG9nQ29tcG9uZW50LCBMaW5rRGlhbG9nRGF0YSwgTGlua0RpYWxvZ0RhdGE+KExpbmtEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQudGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0LnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVNYXJrKG1hcmtUeXBlLCByZXN1bHQpKHZpZXcuc3RhdGUsIHZpZXcuZGlzcGF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmlldy5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB3cmFwTGlzdEl0ZW0obm9kZVR5cGU6IE5vZGVUeXBlKTogSXRlbSB7XG4gICAgcmV0dXJuIGNtZEl0ZW0od3JhcEluTGlzdChub2RlVHlwZSkpO1xufVxuXG5leHBvcnQgdHlwZSBLZXkgPVxuICAgIHwgJ3RvZ2dsZVN0cm9uZydcbiAgICB8ICd0b2dnbGVFbSdcbiAgICB8ICd0b2dnbGVDb2RlJ1xuICAgIHwgJ3RvZ2dsZUxpbmsnXG4gICAgfCAnd3JhcEJ1bGxldExpc3QnXG4gICAgfCAnd3JhcE9yZGVyZWRMaXN0J1xuICAgIHwgJ3dyYXBCbG9ja1F1b3RlJ1xuICAgIHwgJ21ha2VQYXJhZ3JhcGgnXG4gICAgfCAnbWFrZUNvZGVCbG9jaydcbiAgICB8ICdtYWtlSGVhZDEnXG4gICAgfCAnbWFrZUhlYWQyJ1xuICAgIHwgJ21ha2VIZWFkMydcbiAgICB8ICdtYWtlSGVhZDQnXG4gICAgfCAnbWFrZUhlYWQ1J1xuICAgIHwgJ21ha2VIZWFkNidcbiAgICB8ICdhbGlnbkxlZnQnXG4gICAgfCAnYWxpZ25SaWdodCdcbiAgICB8ICdhbGlnbkNlbnRlcidcbiAgICB8ICdhbGlnbkp1c3RpZnknXG4gICAgfCAnaW5zZXJ0SG9yaXpvbnRhbFJ1bGUnXG4gICAgfCAnam9pblVwJ1xuICAgIHwgJ2xpZnQnXG4gICAgfCAnc2VsZWN0UGFyZW50Tm9kZSdcbiAgICB8ICd1bmRvJ1xuICAgIHwgJ3JlZG8nXG4gICAgfCAnaW5zZXJ0VGFibGUnXG4gICAgfCAnYWRkQ29sdW1uQmVmb3JlJ1xuICAgIHwgJ2FkZENvbHVtbkFmdGVyJ1xuICAgIHwgJ2RlbGV0ZUNvbHVtbidcbiAgICB8ICdhZGRSb3dCZWZvcmUnXG4gICAgfCAnYWRkUm93QWZ0ZXInXG4gICAgfCAnZGVsZXRlUm93J1xuICAgIHwgJ2RlbGV0ZVRhYmxlJ1xuICAgIHwgJ21lcmdlQ2VsbHMnXG4gICAgfCAnc3BsaXRDZWxsJ1xuICAgIHwgJ3RvZ2dsZUhlYWRlckNvbHVtbidcbiAgICB8ICd0b2dnbGVIZWFkZXJSb3cnXG4gICAgfCAndG9nZ2xlSGVhZGVyQ2VsbCc7XG5cbmV4cG9ydCB0eXBlIE1lbnVJdGVtcyA9IFBhcnRpYWw8UmVjb3JkPEtleSwgSXRlbT4+O1xuXG4vKipcbiAqIEdpdmVuIGEgc2NoZW1hLCBsb29rIGZvciBkZWZhdWx0IG1hcmsgYW5kIG5vZGUgdHlwZXMgaW4gaXQgYW5kXG4gKiByZXR1cm4gYW4gb2JqZWN0IHdpdGggcmVsZXZhbnQgbWVudSBpdGVtcyByZWxhdGluZyB0byB0aG9zZSBtYXJrczpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWVudUl0ZW1zKHNjaGVtYTogU2NoZW1hLCBkaWFsb2c6IE1hdERpYWxvZyk6IE1lbnVJdGVtcyB7XG4gICAgY29uc3QgcjogTWVudUl0ZW1zID0ge1xuICAgICAgICBqb2luVXA6IHRvSXRlbShqb2luVXBJdGVtKSxcbiAgICAgICAgbGlmdDogdG9JdGVtKGxpZnRJdGVtKSxcbiAgICAgICAgc2VsZWN0UGFyZW50Tm9kZTogdG9JdGVtKHNlbGVjdFBhcmVudE5vZGVJdGVtKSxcbiAgICAgICAgdW5kbzogdG9JdGVtKHVuZG9JdGVtIGFzIHVua25vd24gYXMgTWVudUl0ZW0pLCAvLyBUeXBpbmcgaXMgaW5jb3JyZWN0LCBzbyB3ZSBmb3JjZSBpdFxuICAgICAgICByZWRvOiB0b0l0ZW0ocmVkb0l0ZW0gYXMgdW5rbm93biBhcyBNZW51SXRlbSksXG4gICAgfTtcblxuICAgIGxldCB0eXBlOiBNYXJrVHlwZSB8IE5vZGVUeXBlIHwgdW5kZWZpbmVkO1xuICAgIHR5cGUgPSBzY2hlbWEubWFya3Muc3Ryb25nO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIudG9nZ2xlU3Ryb25nID0gbWFya0l0ZW0odHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5tYXJrcy5lbTtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLnRvZ2dsZUVtID0gbWFya0l0ZW0odHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5tYXJrcy5jb2RlO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIudG9nZ2xlQ29kZSA9IG1hcmtJdGVtKHR5cGUpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubWFya3MubGluaztcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLnRvZ2dsZUxpbmsgPSBsaW5rSXRlbSh0eXBlLCBkaWFsb2cpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuYnVsbGV0X2xpc3Q7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgci53cmFwQnVsbGV0TGlzdCA9IHdyYXBMaXN0SXRlbSh0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm5vZGVzLm9yZGVyZWRfbGlzdDtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLndyYXBPcmRlcmVkTGlzdCA9IHdyYXBMaXN0SXRlbSh0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm5vZGVzLmJsb2NrcXVvdGU7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgci53cmFwQmxvY2tRdW90ZSA9IHRvSXRlbSh3cmFwSXRlbSh0eXBlLCB7fSkpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMucGFyYWdyYXBoO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIubWFrZVBhcmFncmFwaCA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHt9KSk7XG5cbiAgICAgICAgaWYgKHR5cGUuc3BlYyA9PT0gcGFyYWdyYXBoV2l0aEFsaWdubWVudCkge1xuICAgICAgICAgICAgci5hbGlnbkxlZnQgPSBuZXcgVGV4dEFsaWduSXRlbSgnbGVmdCcpO1xuICAgICAgICAgICAgci5hbGlnblJpZ2h0ID0gbmV3IFRleHRBbGlnbkl0ZW0oJ3JpZ2h0Jyk7XG4gICAgICAgICAgICByLmFsaWduQ2VudGVyID0gbmV3IFRleHRBbGlnbkl0ZW0oJ2NlbnRlcicpO1xuICAgICAgICAgICAgci5hbGlnbkp1c3RpZnkgPSBuZXcgVGV4dEFsaWduSXRlbSgnanVzdGlmeScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5jb2RlX2Jsb2NrO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIubWFrZUNvZGVCbG9jayA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHt9KSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5oZWFkaW5nO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIubWFrZUhlYWQxID0gdG9JdGVtKGJsb2NrVHlwZUl0ZW0odHlwZSwge2F0dHJzOiB7bGV2ZWw6IDF9fSkpO1xuICAgICAgICByLm1ha2VIZWFkMiA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHthdHRyczoge2xldmVsOiAyfX0pKTtcbiAgICAgICAgci5tYWtlSGVhZDMgPSB0b0l0ZW0oYmxvY2tUeXBlSXRlbSh0eXBlLCB7YXR0cnM6IHtsZXZlbDogM319KSk7XG4gICAgICAgIHIubWFrZUhlYWQ0ID0gdG9JdGVtKGJsb2NrVHlwZUl0ZW0odHlwZSwge2F0dHJzOiB7bGV2ZWw6IDR9fSkpO1xuICAgICAgICByLm1ha2VIZWFkNSA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHthdHRyczoge2xldmVsOiA1fX0pKTtcbiAgICAgICAgci5tYWtlSGVhZDYgPSB0b0l0ZW0oYmxvY2tUeXBlSXRlbSh0eXBlLCB7YXR0cnM6IHtsZXZlbDogNn19KSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5ob3Jpem9udGFsX3J1bGU7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgY29uc3QgaHIgPSB0eXBlO1xuICAgICAgICByLmluc2VydEhvcml6b250YWxSdWxlID0gbmV3IEl0ZW0oe1xuICAgICAgICAgICAgZW5hYmxlKHN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbkluc2VydChzdGF0ZSwgaHIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bihzdGF0ZSwgZGlzcGF0Y2gpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChzdGF0ZS50ci5yZXBsYWNlU2VsZWN0aW9uV2l0aChoci5jcmVhdGUoKSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy50YWJsZTtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLmluc2VydFRhYmxlID0gbmV3IEl0ZW0oe3J1bjogKGUsIHRyKSA9PiBhZGRUYWJsZShlLCB0cil9KTtcbiAgICAgICAgci5hZGRDb2x1bW5CZWZvcmUgPSBuZXcgSXRlbSh7cnVuOiBhZGRDb2x1bW5CZWZvcmV9KTtcbiAgICAgICAgci5hZGRDb2x1bW5BZnRlciA9IG5ldyBJdGVtKHtydW46IGFkZENvbHVtbkFmdGVyfSk7XG4gICAgICAgIHIuZGVsZXRlQ29sdW1uID0gbmV3IEl0ZW0oe3J1bjogZGVsZXRlQ29sdW1ufSk7XG4gICAgICAgIHIuYWRkUm93QmVmb3JlID0gbmV3IEl0ZW0oe3J1bjogYWRkUm93QmVmb3JlfSk7XG4gICAgICAgIHIuYWRkUm93QWZ0ZXIgPSBuZXcgSXRlbSh7cnVuOiBhZGRSb3dBZnRlcn0pO1xuICAgICAgICByLmRlbGV0ZVJvdyA9IG5ldyBJdGVtKHtydW46IGRlbGV0ZVJvd30pO1xuICAgICAgICByLmRlbGV0ZVRhYmxlID0gbmV3IEl0ZW0oe3J1bjogZGVsZXRlVGFibGV9KTtcbiAgICAgICAgci5tZXJnZUNlbGxzID0gbmV3IEl0ZW0oe3J1bjogbWVyZ2VDZWxsc30pO1xuICAgICAgICByLnNwbGl0Q2VsbCA9IG5ldyBJdGVtKHtydW46IHNwbGl0Q2VsbH0pO1xuICAgICAgICByLnRvZ2dsZUhlYWRlckNvbHVtbiA9IG5ldyBJdGVtKHtydW46IHRvZ2dsZUhlYWRlckNvbHVtbn0pO1xuICAgICAgICByLnRvZ2dsZUhlYWRlclJvdyA9IG5ldyBJdGVtKHtydW46IHRvZ2dsZUhlYWRlclJvd30pO1xuICAgICAgICByLnRvZ2dsZUhlYWRlckNlbGwgPSBuZXcgSXRlbSh7cnVuOiB0b2dnbGVIZWFkZXJDZWxsfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG59XG4iXX0=
@@ -1,43 +0,0 @@
1
- const ALIGN_PATTERN = /(left|right|center|justify)/;
2
- // https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js
3
- // :: NodeSpec A plain paragraph textblock. Represented in the DOM
4
- // as a `<p>` element.
5
- export const paragraphWithAlignment = {
6
- attrs: {
7
- align: { default: null },
8
- id: { default: null },
9
- },
10
- content: 'inline*',
11
- group: 'block',
12
- parseDOM: [
13
- {
14
- tag: 'p',
15
- getAttrs: dom => {
16
- if (!(dom instanceof HTMLElement)) {
17
- return;
18
- }
19
- const { textAlign } = dom.style;
20
- let align = dom.getAttribute('align') || textAlign || '';
21
- align = ALIGN_PATTERN.test(align) ? align : null;
22
- const id = dom.getAttribute('id') || '';
23
- return { align, id };
24
- },
25
- },
26
- ],
27
- toDOM: node => {
28
- const { align, id } = node.attrs;
29
- const attrs = {};
30
- let style = '';
31
- if (align && align !== 'left') {
32
- style += `text-align: ${align};`;
33
- }
34
- if (style) {
35
- attrs.style = style;
36
- }
37
- if (id) {
38
- attrs.id = id;
39
- }
40
- return ['p', attrs, 0];
41
- },
42
- };
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWdyYXBoLXdpdGgtYWxpZ25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi91dGlscy9wYXJhZ3JhcGgtd2l0aC1hbGlnbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxhQUFhLEdBQUcsNkJBQTZCLENBQUM7QUFFcEQsMEZBQTBGO0FBQzFGLGtFQUFrRTtBQUNsRSxzQkFBc0I7QUFDdEIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQWE7SUFDNUMsS0FBSyxFQUFFO1FBQ0gsS0FBSyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQztRQUN0QixFQUFFLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDO0tBQ3RCO0lBQ0QsT0FBTyxFQUFFLFNBQVM7SUFDbEIsS0FBSyxFQUFFLE9BQU87SUFDZCxRQUFRLEVBQUU7UUFDTjtZQUNJLEdBQUcsRUFBRSxHQUFHO1lBQ1IsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNaLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxXQUFXLENBQUMsRUFBRTtvQkFDL0IsT0FBTztpQkFDVjtnQkFFRCxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFFOUIsSUFBSSxLQUFLLEdBQWtCLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FBQztnQkFDeEUsS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUVqRCxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFeEMsT0FBTyxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQztZQUN2QixDQUFDO1NBQ0o7S0FDSjtJQUNELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtRQUNWLE1BQU0sRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBeUIsRUFBRSxDQUFDO1FBRXZDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7WUFDM0IsS0FBSyxJQUFJLGVBQWUsS0FBSyxHQUFHLENBQUM7U0FDcEM7UUFFRCxJQUFJLEtBQUssRUFBRTtZQUNQLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxFQUFFLEVBQUU7WUFDSixLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUNqQjtRQUVELE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOb2RlU3BlY30gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuXG5jb25zdCBBTElHTl9QQVRURVJOID0gLyhsZWZ0fHJpZ2h0fGNlbnRlcnxqdXN0aWZ5KS87XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9zZU1pcnJvci9wcm9zZW1pcnJvci1zY2hlbWEtYmFzaWMvYmxvYi9tYXN0ZXIvc3JjL3NjaGVtYS1iYXNpYy5qc1xuLy8gOjogTm9kZVNwZWMgQSBwbGFpbiBwYXJhZ3JhcGggdGV4dGJsb2NrLiBSZXByZXNlbnRlZCBpbiB0aGUgRE9NXG4vLyBhcyBhIGA8cD5gIGVsZW1lbnQuXG5leHBvcnQgY29uc3QgcGFyYWdyYXBoV2l0aEFsaWdubWVudDogTm9kZVNwZWMgPSB7XG4gICAgYXR0cnM6IHtcbiAgICAgICAgYWxpZ246IHtkZWZhdWx0OiBudWxsfSxcbiAgICAgICAgaWQ6IHtkZWZhdWx0OiBudWxsfSxcbiAgICB9LFxuICAgIGNvbnRlbnQ6ICdpbmxpbmUqJyxcbiAgICBncm91cDogJ2Jsb2NrJyxcbiAgICBwYXJzZURPTTogW1xuICAgICAgICB7XG4gICAgICAgICAgICB0YWc6ICdwJyxcbiAgICAgICAgICAgIGdldEF0dHJzOiBkb20gPT4ge1xuICAgICAgICAgICAgICAgIGlmICghKGRvbSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qge3RleHRBbGlnbn0gPSBkb20uc3R5bGU7XG5cbiAgICAgICAgICAgICAgICBsZXQgYWxpZ246IHN0cmluZyB8IG51bGwgPSBkb20uZ2V0QXR0cmlidXRlKCdhbGlnbicpIHx8IHRleHRBbGlnbiB8fCAnJztcbiAgICAgICAgICAgICAgICBhbGlnbiA9IEFMSUdOX1BBVFRFUk4udGVzdChhbGlnbikgPyBhbGlnbiA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGRvbS5nZXRBdHRyaWJ1dGUoJ2lkJykgfHwgJyc7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge2FsaWduLCBpZH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgdG9ET006IG5vZGUgPT4ge1xuICAgICAgICBjb25zdCB7YWxpZ24sIGlkfSA9IG5vZGUuYXR0cnM7XG4gICAgICAgIGNvbnN0IGF0dHJzOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuXG4gICAgICAgIGxldCBzdHlsZSA9ICcnO1xuICAgICAgICBpZiAoYWxpZ24gJiYgYWxpZ24gIT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgc3R5bGUgKz0gYHRleHQtYWxpZ246ICR7YWxpZ259O2A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUpIHtcbiAgICAgICAgICAgIGF0dHJzLnN0eWxlID0gc3R5bGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGF0dHJzLmlkID0gaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWydwJywgYXR0cnMsIDBdO1xuICAgIH0sXG59O1xuIl19
@@ -1,47 +0,0 @@
1
- import { marks, nodes } from 'prosemirror-schema-basic';
2
- import { addListNodes } from 'prosemirror-schema-list';
3
- import { Schema } from 'prosemirror-model';
4
- import { tableNodes } from 'prosemirror-tables';
5
- import { paragraphWithAlignment } from './paragraph-with-alignment';
6
- const basicNodes = {
7
- heading: nodes.heading,
8
- doc: nodes.doc,
9
- paragraph: nodes.paragraph,
10
- text: nodes.text,
11
- hard_break: nodes.hard_break,
12
- };
13
- const basicMarks = {
14
- link: marks.link,
15
- em: marks.em,
16
- strong: marks.strong,
17
- };
18
- const tmpSchema = new Schema({ nodes: basicNodes, marks: basicMarks });
19
- export const basicSchema = new Schema({
20
- nodes: addListNodes(tmpSchema.spec.nodes, 'paragraph block*', 'block'),
21
- marks: tmpSchema.spec.marks,
22
- });
23
- const tmpSchema2 = new Schema({
24
- nodes: Object.assign(Object.assign(Object.assign({}, nodes), tableNodes({
25
- tableGroup: 'block',
26
- cellContent: 'block+',
27
- cellAttributes: {
28
- background: {
29
- default: null,
30
- getFromDOM(dom) {
31
- return dom.style.backgroundColor || null;
32
- },
33
- setDOMAttr(value, attrs) {
34
- if (value) {
35
- attrs.style = (attrs.style || '') + `background-color: ${value};`;
36
- }
37
- },
38
- },
39
- },
40
- })), { paragraph: paragraphWithAlignment }),
41
- marks: basicMarks,
42
- });
43
- export const advancedSchema = new Schema({
44
- nodes: addListNodes(tmpSchema2.spec.nodes, 'paragraph block*', 'block'),
45
- marks: basicMarks,
46
- });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi91dGlscy9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUlsRSxNQUFNLFVBQVUsR0FBZTtJQUMzQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87SUFDdEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO0lBQ2QsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0lBQzFCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtJQUNoQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7Q0FDL0IsQ0FBQztBQUdGLE1BQU0sVUFBVSxHQUFlO0lBQzNCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtJQUNoQixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7SUFDWixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07Q0FDdkIsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLENBQUM7SUFDbEMsS0FBSyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxPQUFPLENBQUM7SUFDdEUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSztDQUM5QixDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQztJQUMxQixLQUFLLGdEQUNFLEtBQUssR0FDTCxVQUFVLENBQUM7UUFDVixVQUFVLEVBQUUsT0FBTztRQUNuQixXQUFXLEVBQUUsUUFBUTtRQUNyQixjQUFjLEVBQUU7WUFDWixVQUFVLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsVUFBVSxDQUFDLEdBQVk7b0JBQ25CLE9BQVEsR0FBbUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQztnQkFDOUQsQ0FBQztnQkFDRCxVQUFVLENBQUMsS0FBVSxFQUFFLEtBQVU7b0JBQzdCLElBQUksS0FBSyxFQUFFO3dCQUNQLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxHQUFHLHFCQUFxQixLQUFLLEdBQUcsQ0FBQztxQkFDckU7Z0JBQ0wsQ0FBQzthQUNKO1NBQ0o7S0FDSixDQUFDLEtBQ0YsU0FBUyxFQUFFLHNCQUFzQixHQUNwQztJQUNELEtBQUssRUFBRSxVQUFVO0NBQ3BCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQztJQUNyQyxLQUFLLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQztJQUN2RSxLQUFLLEVBQUUsVUFBVTtDQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge21hcmtzLCBub2Rlc30gZnJvbSAncHJvc2VtaXJyb3Itc2NoZW1hLWJhc2ljJztcbmltcG9ydCB7YWRkTGlzdE5vZGVzfSBmcm9tICdwcm9zZW1pcnJvci1zY2hlbWEtbGlzdCc7XG5pbXBvcnQge1NjaGVtYX0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHt0YWJsZU5vZGVzfSBmcm9tICdwcm9zZW1pcnJvci10YWJsZXMnO1xuaW1wb3J0IHtwYXJhZ3JhcGhXaXRoQWxpZ25tZW50fSBmcm9tICcuL3BhcmFncmFwaC13aXRoLWFsaWdubWVudCc7XG5cbi8vIEtlZXAgb25seSBiYXNpYyBlbGVtZW50c1xudHlwZSBCYXNpY05vZGVzID0gT21pdDx0eXBlb2Ygbm9kZXMsICdpbWFnZScgfCAnY29kZV9ibG9jaycgfCAnYmxvY2txdW90ZScgfCAnaG9yaXpvbnRhbF9ydWxlJz47XG5jb25zdCBiYXNpY05vZGVzOiBCYXNpY05vZGVzID0ge1xuICAgIGhlYWRpbmc6IG5vZGVzLmhlYWRpbmcsXG4gICAgZG9jOiBub2Rlcy5kb2MsXG4gICAgcGFyYWdyYXBoOiBub2Rlcy5wYXJhZ3JhcGgsXG4gICAgdGV4dDogbm9kZXMudGV4dCxcbiAgICBoYXJkX2JyZWFrOiBub2Rlcy5oYXJkX2JyZWFrLFxufTtcblxudHlwZSBCYXNpY01hcmtzID0gT21pdDx0eXBlb2YgbWFya3MsICdjb2RlJz47XG5jb25zdCBiYXNpY01hcmtzOiBCYXNpY01hcmtzID0ge1xuICAgIGxpbms6IG1hcmtzLmxpbmssXG4gICAgZW06IG1hcmtzLmVtLFxuICAgIHN0cm9uZzogbWFya3Muc3Ryb25nLFxufTtcblxuY29uc3QgdG1wU2NoZW1hID0gbmV3IFNjaGVtYSh7bm9kZXM6IGJhc2ljTm9kZXMsIG1hcmtzOiBiYXNpY01hcmtzfSk7XG5cbmV4cG9ydCBjb25zdCBiYXNpY1NjaGVtYSA9IG5ldyBTY2hlbWEoe1xuICAgIG5vZGVzOiBhZGRMaXN0Tm9kZXModG1wU2NoZW1hLnNwZWMubm9kZXMsICdwYXJhZ3JhcGggYmxvY2sqJywgJ2Jsb2NrJyksXG4gICAgbWFya3M6IHRtcFNjaGVtYS5zcGVjLm1hcmtzLFxufSk7XG5cbmNvbnN0IHRtcFNjaGVtYTIgPSBuZXcgU2NoZW1hKHtcbiAgICBub2Rlczoge1xuICAgICAgICAuLi5ub2RlcyxcbiAgICAgICAgLi4udGFibGVOb2Rlcyh7XG4gICAgICAgICAgICB0YWJsZUdyb3VwOiAnYmxvY2snLFxuICAgICAgICAgICAgY2VsbENvbnRlbnQ6ICdibG9jaysnLFxuICAgICAgICAgICAgY2VsbEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGdldEZyb21ET00oZG9tOiBFbGVtZW50KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGRvbSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuYmFja2dyb3VuZENvbG9yIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNldERPTUF0dHIodmFsdWU6IGFueSwgYXR0cnM6IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMuc3R5bGUgPSAoYXR0cnMuc3R5bGUgfHwgJycpICsgYGJhY2tncm91bmQtY29sb3I6ICR7dmFsdWV9O2A7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBwYXJhZ3JhcGg6IHBhcmFncmFwaFdpdGhBbGlnbm1lbnQsXG4gICAgfSxcbiAgICBtYXJrczogYmFzaWNNYXJrcyxcbn0pO1xuXG5leHBvcnQgY29uc3QgYWR2YW5jZWRTY2hlbWEgPSBuZXcgU2NoZW1hKHtcbiAgICBub2RlczogYWRkTGlzdE5vZGVzKHRtcFNjaGVtYTIuc3BlYy5ub2RlcywgJ3BhcmFncmFwaCBibG9jayonLCAnYmxvY2snKSxcbiAgICBtYXJrczogYmFzaWNNYXJrcyxcbn0pO1xuIl19
@@ -1,78 +0,0 @@
1
- import { AllSelection, TextSelection } from 'prosemirror-state';
2
- import { Item } from './item';
3
- function setTextAlign(tr, schema, alignment) {
4
- console.log('setTextAlign', alignment);
5
- const { selection, doc } = tr;
6
- if (!selection || !doc) {
7
- return tr;
8
- }
9
- const { from, to } = selection;
10
- const { nodes } = schema;
11
- const tasks = [];
12
- alignment = alignment || null;
13
- const allowedNodeTypes = new Set([
14
- nodes.paragraph,
15
- // nodes['blockquote'],
16
- // nodes['listItem'],
17
- // nodes['heading'],
18
- ]);
19
- doc.nodesBetween(from, to, (node, pos) => {
20
- const nodeType = node.type;
21
- const align = node.attrs.align || null;
22
- if (align !== alignment && allowedNodeTypes.has(nodeType)) {
23
- tasks.push({
24
- node,
25
- pos,
26
- nodeType,
27
- });
28
- }
29
- return true;
30
- });
31
- if (!tasks.length) {
32
- return tr;
33
- }
34
- tasks.forEach(job => {
35
- const { node, pos, nodeType } = job;
36
- const newAttrs = Object.assign(Object.assign({}, node.attrs), { align: alignment ? alignment : null });
37
- console.log('newAttrs', newAttrs);
38
- tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);
39
- });
40
- return tr;
41
- }
42
- export class TextAlignItem extends Item {
43
- constructor(alignment) {
44
- super({
45
- active: state => {
46
- const { selection, doc } = state;
47
- const { from, to } = selection;
48
- let keepLooking = true;
49
- let active = false;
50
- doc.nodesBetween(from, to, node => {
51
- if (keepLooking && node.attrs.align === alignment) {
52
- keepLooking = false;
53
- active = true;
54
- }
55
- return keepLooking;
56
- });
57
- return active;
58
- },
59
- enable: state => {
60
- const { selection } = state;
61
- return selection instanceof TextSelection || selection instanceof AllSelection;
62
- },
63
- run: (state, dispatch) => {
64
- const { schema, selection } = state;
65
- console.log(this);
66
- const tr = setTextAlign(state.tr.setSelection(selection), schema, this.active ? null : alignment);
67
- if (tr.docChanged) {
68
- dispatch === null || dispatch === void 0 ? void 0 : dispatch(tr);
69
- return true;
70
- }
71
- else {
72
- return false;
73
- }
74
- },
75
- });
76
- }
77
- }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1hbGlnbi1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi91dGlscy90ZXh0LWFsaWduLWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBSTVCLFNBQVMsWUFBWSxDQUFDLEVBQWUsRUFBRSxNQUFjLEVBQUUsU0FBMkI7SUFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsTUFBTSxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUMsR0FBRyxFQUFFLENBQUM7SUFDNUIsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNwQixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QsTUFBTSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsR0FBRyxTQUFTLENBQUM7SUFDN0IsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV2QixNQUFNLEtBQUssR0FJTCxFQUFFLENBQUM7SUFFVCxTQUFTLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQztJQUU5QixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDO1FBQzdCLEtBQUssQ0FBQyxTQUFTO1FBQ2YsdUJBQXVCO1FBQ3ZCLHFCQUFxQjtRQUNyQixvQkFBb0I7S0FDdkIsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOb2RlLCBOb2RlVHlwZSwgU2NoZW1hfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQge0FsbFNlbGVjdGlvbiwgVGV4dFNlbGVjdGlvbiwgVHJhbnNhY3Rpb259IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi9pdGVtJztcblxudHlwZSBBbGlnbm1lbnQgPSAnbGVmdCcgfCAncmlnaHQnIHwgJ2NlbnRlcicgfCAnanVzdGlmeSc7XG5cbmZ1bmN0aW9uIHNldFRleHRBbGlnbih0cjogVHJhbnNhY3Rpb24sIHNjaGVtYTogU2NoZW1hLCBhbGlnbm1lbnQ6IG51bGwgfCBBbGlnbm1lbnQpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc29sZS5sb2coJ3NldFRleHRBbGlnbicsIGFsaWdubWVudCk7XG4gICAgY29uc3Qge3NlbGVjdGlvbiwgZG9jfSA9IHRyO1xuICAgIGlmICghc2VsZWN0aW9uIHx8ICFkb2MpIHtcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cbiAgICBjb25zdCB7ZnJvbSwgdG99ID0gc2VsZWN0aW9uO1xuICAgIGNvbnN0IHtub2Rlc30gPSBzY2hlbWE7XG5cbiAgICBjb25zdCB0YXNrczoge1xuICAgICAgICBub2RlOiBOb2RlO1xuICAgICAgICBwb3M6IG51bWJlcjtcbiAgICAgICAgbm9kZVR5cGU6IE5vZGVUeXBlO1xuICAgIH1bXSA9IFtdO1xuXG4gICAgYWxpZ25tZW50ID0gYWxpZ25tZW50IHx8IG51bGw7XG5cbiAgICBjb25zdCBhbGxvd2VkTm9kZVR5cGVzID0gbmV3IFNldChbXG4gICAgICAgIG5vZGVzLnBhcmFncmFwaCxcbiAgICAgICAgLy8gbm9kZXNbJ2Jsb2NrcXVvdGUnXSxcbiAgICAgICAgLy8gbm9kZXNbJ2xpc3RJdGVtJ10sXG4gICAgICAgIC8vIG5vZGVzWydoZWFkaW5nJ10sXG4gICAgXSk7XG5cbiAgICBkb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVUeXBlID0gbm9kZS50eXBlO1xuICAgICAgICBjb25zdCBhbGlnbiA9IG5vZGUuYXR0cnMuYWxpZ24gfHwgbnVsbDtcbiAgICAgICAgaWYgKGFsaWduICE9PSBhbGlnbm1lbnQgJiYgYWxsb3dlZE5vZGVUeXBlcy5oYXMobm9kZVR5cGUpKSB7XG4gICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cblxuICAgIHRhc2tzLmZvckVhY2goam9iID0+IHtcbiAgICAgICAgY29uc3Qge25vZGUsIHBvcywgbm9kZVR5cGV9ID0gam9iO1xuICAgICAgICBjb25zdCBuZXdBdHRycyA9IHtcbiAgICAgICAgICAgIC4uLm5vZGUuYXR0cnMsXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25tZW50ID8gYWxpZ25tZW50IDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc29sZS5sb2coJ25ld0F0dHJzJywgbmV3QXR0cnMpO1xuICAgICAgICB0ciA9IHRyLnNldE5vZGVNYXJrdXAocG9zLCBub2RlVHlwZSwgbmV3QXR0cnMsIG5vZGUubWFya3MpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dEFsaWduSXRlbSBleHRlbmRzIEl0ZW0ge1xuICAgIGNvbnN0cnVjdG9yKGFsaWdubWVudDogQWxpZ25tZW50KSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFjdGl2ZTogc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtzZWxlY3Rpb24sIGRvY30gPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB7ZnJvbSwgdG99ID0gc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIGxldCBrZWVwTG9va2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGV0IGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGRvYy5ub2Rlc0JldHdlZW4oZnJvbSwgdG8sIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2VlcExvb2tpbmcgJiYgbm9kZS5hdHRycy5hbGlnbiA9PT0gYWxpZ25tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZWVwTG9va2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2VlcExvb2tpbmc7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aXZlO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZW5hYmxlOiBzdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3NlbGVjdGlvbn0gPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uIGluc3RhbmNlb2YgVGV4dFNlbGVjdGlvbiB8fCBzZWxlY3Rpb24gaW5zdGFuY2VvZiBBbGxTZWxlY3Rpb247XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBydW46IChzdGF0ZSwgZGlzcGF0Y2gpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7c2NoZW1hLCBzZWxlY3Rpb259ID0gc3RhdGU7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ciA9IHNldFRleHRBbGlnbihzdGF0ZS50ci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKSwgc2NoZW1hLCB0aGlzLmFjdGl2ZSA/IG51bGwgOiBhbGlnbm1lbnQpO1xuICAgICAgICAgICAgICAgIGlmICh0ci5kb2NDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoPy4odHIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"ecodev-natural-editor.js","sources":["../../../projects/natural-editor/src/lib/utils/image.ts","../../../projects/natural-editor/src/lib/utils/paragraph-with-alignment.ts","../../../projects/natural-editor/src/lib/utils/schema.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.ts","../../../projects/natural-editor/src/lib/link-dialog/link-dialog.component.html","../../../projects/natural-editor/src/lib/utils/table.ts","../../../projects/natural-editor/src/lib/utils/item.ts","../../../projects/natural-editor/src/lib/utils/text-align-item.ts","../../../projects/natural-editor/src/lib/utils/menu.ts","../../../projects/natural-editor/src/lib/utils/inputrules.ts","../../../projects/natural-editor/src/lib/utils/keymap.ts","../../../projects/natural-editor/src/lib/editor/editor.component.ts","../../../projects/natural-editor/src/lib/editor/editor.component.html","../../../projects/natural-editor/src/lib/editor.module.ts","../../../projects/natural-editor/src/public-api.ts","../../../projects/natural-editor/src/ecodev-natural-editor.ts"],"sourcesContent":["import {Decoration, DecorationSet, EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin} from 'prosemirror-state';\nimport {Observable} from 'rxjs';\nimport {Schema} from 'prosemirror-model';\nimport {Inject, Injectable} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nexport type ImageUploader = (file: File) => Observable<string>;\n\n@Injectable()\nexport class ImagePlugin {\n public readonly plugin: Plugin<DecorationSet>;\n\n constructor(@Inject(DOCUMENT) private readonly document: Document) {\n this.plugin = new Plugin<DecorationSet>({\n state: {\n init(): DecorationSet {\n return DecorationSet.empty;\n },\n apply(tr, set): DecorationSet {\n // Adjust decoration positions to changes made by the transaction\n set = set.map(tr.mapping, tr.doc);\n\n // See if the transaction adds or removes any placeholders\n const action = tr.getMeta(this);\n if (action && action.add) {\n const widget = document.createElement('placeholder');\n const deco = Decoration.widget(action.add.pos, widget, {id: action.add.id});\n set = set.add(tr.doc, [deco]);\n } else if (action && action.remove) {\n set = set.remove(set.find(undefined, undefined, spec => spec.id === action.remove.id));\n }\n\n return set;\n },\n },\n props: {\n decorations(state): DecorationSet {\n return this.getState(state);\n },\n },\n });\n }\n\n private findPlaceholder(state: EditorState, id: {}): number | null {\n const decorators = this.plugin.getState(state);\n const found = decorators.find(undefined, undefined, spec => spec.id === id);\n return found.length ? found[0].from : null;\n }\n\n public startImageUpload(view: EditorView, file: File, uploader: ImageUploader, schema: Schema): void {\n // A fresh object to act as the ID for this upload\n const id = {};\n\n // Replace the selection with a placeholder\n const tr = view.state.tr;\n if (!tr.selection.empty) {\n tr.deleteSelection();\n }\n\n tr.setMeta(this.plugin, {add: {id, pos: tr.selection.from}});\n view.dispatch(tr);\n\n uploader(file).subscribe({\n next: url => {\n const pos = this.findPlaceholder(view.state, id);\n // If the content around the placeholder has been deleted, drop\n // the image\n if (pos === null) {\n return;\n }\n\n // Otherwise, insert it at the placeholder's position, and remove\n // the placeholder\n view.dispatch(\n view.state.tr\n .replaceWith(pos, pos, schema.nodes.image.create({src: url}))\n .setMeta(this.plugin, {remove: {id}}),\n );\n },\n error: () => {\n // On failure, just clean up the placeholder\n view?.dispatch(tr.setMeta(this.plugin, {remove: {id}}));\n },\n });\n }\n}\n","import {NodeSpec} from 'prosemirror-model';\n\nconst ALIGN_PATTERN = /(left|right|center|justify)/;\n\n// https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js\n// :: NodeSpec A plain paragraph textblock. Represented in the DOM\n// as a `<p>` element.\nexport const paragraphWithAlignment: NodeSpec = {\n attrs: {\n align: {default: null},\n id: {default: null},\n },\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: 'p',\n getAttrs: dom => {\n if (!(dom instanceof HTMLElement)) {\n return;\n }\n\n const {textAlign} = dom.style;\n\n let align: string | null = dom.getAttribute('align') || textAlign || '';\n align = ALIGN_PATTERN.test(align) ? align : null;\n\n const id = dom.getAttribute('id') || '';\n\n return {align, id};\n },\n },\n ],\n toDOM: node => {\n const {align, id} = node.attrs;\n const attrs: {[key: string]: any} = {};\n\n let style = '';\n if (align && align !== 'left') {\n style += `text-align: ${align};`;\n }\n\n if (style) {\n attrs.style = style;\n }\n\n if (id) {\n attrs.id = id;\n }\n\n return ['p', attrs, 0];\n },\n};\n","import {marks, nodes} from 'prosemirror-schema-basic';\nimport {addListNodes} from 'prosemirror-schema-list';\nimport {Schema} from 'prosemirror-model';\nimport {tableNodes} from 'prosemirror-tables';\nimport {paragraphWithAlignment} from './paragraph-with-alignment';\n\n// Keep only basic elements\ntype BasicNodes = Omit<typeof nodes, 'image' | 'code_block' | 'blockquote' | 'horizontal_rule'>;\nconst basicNodes: BasicNodes = {\n heading: nodes.heading,\n doc: nodes.doc,\n paragraph: nodes.paragraph,\n text: nodes.text,\n hard_break: nodes.hard_break,\n};\n\ntype BasicMarks = Omit<typeof marks, 'code'>;\nconst basicMarks: BasicMarks = {\n link: marks.link,\n em: marks.em,\n strong: marks.strong,\n};\n\nconst tmpSchema = new Schema({nodes: basicNodes, marks: basicMarks});\n\nexport const basicSchema = new Schema({\n nodes: addListNodes(tmpSchema.spec.nodes, 'paragraph block*', 'block'),\n marks: tmpSchema.spec.marks,\n});\n\nconst tmpSchema2 = new Schema({\n nodes: {\n ...nodes,\n ...tableNodes({\n tableGroup: 'block',\n cellContent: 'block+',\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom: Element): string | null {\n return (dom as HTMLElement).style.backgroundColor || null;\n },\n setDOMAttr(value: any, attrs: any): void {\n if (value) {\n attrs.style = (attrs.style || '') + `background-color: ${value};`;\n }\n },\n },\n },\n }),\n paragraph: paragraphWithAlignment,\n },\n marks: basicMarks,\n});\n\nexport const advancedSchema = new Schema({\n nodes: addListNodes(tmpSchema2.spec.nodes, 'paragraph block*', 'block'),\n marks: basicMarks,\n});\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ifValid} from '@ecodev/natural';\n\nexport interface LinkDialogData {\n href: string;\n title?: string;\n}\n\n@Component({\n templateUrl: './link-dialog.component.html',\n styleUrls: ['./link-dialog.component.scss'],\n})\nexport class LinkDialogComponent {\n public readonly hrefControl = new FormControl('', Validators.required);\n public readonly titleControl = new FormControl('');\n public readonly form = new FormGroup({\n href: this.hrefControl,\n title: this.titleControl,\n });\n\n constructor(\n @Inject(MAT_DIALOG_DATA) data: LinkDialogData,\n private dialogRef: MatDialogRef<LinkDialogComponent, LinkDialogData>,\n ) {\n this.form.setValue(data);\n }\n\n public maybeConfirm(): void {\n ifValid(this.form).subscribe(() => this.confirm());\n }\n\n private confirm(): void {\n this.dialogRef.close(this.form.value);\n }\n}\n","<h2 i18n mat-dialog-title>Insérer un lien</h2>\n\n<mat-dialog-content [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n>URL</mat-label>\n <input matInput [formControl]=\"hrefControl\" (keydown.enter)=\"maybeConfirm()\" />\n <mat-error *ngIf=\"hrefControl.hasError('required')\" i18n>Ce champ est requis</mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label i18n>Titre</mat-label>\n <input matInput [formControl]=\"titleControl\" (keydown.enter)=\"maybeConfirm()\" />\n </mat-form-field>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button mat-button [mat-dialog-close] i18n>Annuler</button>\n <button mat-stroked-button (click)=\"maybeConfirm()\" [disabled]=\"!form.valid\"><span i18n>Valider</span></button>\n</mat-dialog-actions>\n","import {EditorState, TextSelection, Transaction} from 'prosemirror-state';\nimport {Fragment, Node as ProsemirrorNode, NodeType} from 'prosemirror-model';\nimport {tableNodeTypes} from 'prosemirror-tables';\n\nfunction createCell(\n cellType: NodeType,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode<any> | null | undefined {\n return cellContent ? cellType.createChecked(null, cellContent) : cellType.createAndFill();\n}\n\nfunction createTable(\n state: EditorState,\n rowsCount: number,\n colsCount: number,\n withHeaderRow: boolean,\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>,\n): ProsemirrorNode {\n const types = tableNodeTypes(state.schema);\n const headerCells = [];\n const cells = [];\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent);\n\n if (cell) {\n cells.push(cell);\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent);\n\n if (headerCell) {\n headerCells.push(headerCell);\n }\n }\n }\n\n const rows = [];\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));\n }\n\n return types.table.createChecked(null, rows);\n}\n\nexport function addTable(\n state: EditorState,\n dispatch?: (tr: Transaction) => void,\n {\n rowsCount = 3,\n colsCount = 3,\n withHeaderRow = true,\n cellContent,\n }: {\n rowsCount?: number;\n colsCount?: number;\n withHeaderRow?: boolean;\n cellContent?: Fragment | ProsemirrorNode | Array<ProsemirrorNode>;\n } = {},\n): void {\n const offset = state.tr.selection.anchor + 1;\n\n const nodes = createTable(state, rowsCount, colsCount, withHeaderRow, cellContent);\n const tr = state.tr.replaceSelectionWith(nodes).scrollIntoView();\n const resolvedPos = tr.doc.resolve(offset);\n\n // move cursor into table\n tr.setSelection(TextSelection.near(resolvedPos));\n\n dispatch?.(tr);\n}\n","import {MenuItemSpec} from 'prosemirror-menu';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\n/**\n * One item of the menu.\n *\n * This is the equivalent of `MenuItem` but without all the rendering logic since we use Angular\n * templates for rendering. Also it caches the state of the item everytime the editor state changes,\n * so Angular can query the state as often as needed without performance hit.\n */\nexport class Item {\n /**\n * Whether the item is 'active' (for example, the item for toggling the strong mark might be active when the cursor is in strong text).\n */\n public active = false;\n\n /**\n * Button is shown but disabled, because the item cannot be (un-)applied\n */\n public disabled = false;\n\n /**\n * Whether the item is shown at the moment\n */\n public show = true;\n\n constructor(public readonly spec: MenuItemSpec) {}\n\n /**\n * Update the item state according to the editor state\n */\n public update(view: EditorView, state: EditorState): void {\n if (this.spec.active) {\n this.active = this.spec.active(state);\n }\n\n if (this.spec.enable) {\n this.disabled = !this.spec.enable(state);\n }\n\n if (this.spec.select) {\n this.show = this.spec.select(state);\n }\n }\n}\n","import {Node, NodeType, Schema} from 'prosemirror-model';\nimport {AllSelection, TextSelection, Transaction} from 'prosemirror-state';\nimport {Item} from './item';\n\ntype Alignment = 'left' | 'right' | 'center' | 'justify';\n\nfunction setTextAlign(tr: Transaction, schema: Schema, alignment: null | Alignment): Transaction {\n console.log('setTextAlign', alignment);\n const {selection, doc} = tr;\n if (!selection || !doc) {\n return tr;\n }\n const {from, to} = selection;\n const {nodes} = schema;\n\n const tasks: {\n node: Node;\n pos: number;\n nodeType: NodeType;\n }[] = [];\n\n alignment = alignment || null;\n\n const allowedNodeTypes = new Set([\n nodes.paragraph,\n // nodes['blockquote'],\n // nodes['listItem'],\n // nodes['heading'],\n ]);\n\n doc.nodesBetween(from, to, (node, pos) => {\n const nodeType = node.type;\n const align = node.attrs.align || null;\n if (align !== alignment && allowedNodeTypes.has(nodeType)) {\n tasks.push({\n node,\n pos,\n nodeType,\n });\n }\n return true;\n });\n\n if (!tasks.length) {\n return tr;\n }\n\n tasks.forEach(job => {\n const {node, pos, nodeType} = job;\n const newAttrs = {\n ...node.attrs,\n align: alignment ? alignment : null,\n };\n console.log('newAttrs', newAttrs);\n tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);\n });\n\n return tr;\n}\n\nexport class TextAlignItem extends Item {\n constructor(alignment: Alignment) {\n super({\n active: state => {\n const {selection, doc} = state;\n const {from, to} = selection;\n let keepLooking = true;\n let active = false;\n doc.nodesBetween(from, to, node => {\n if (keepLooking && node.attrs.align === alignment) {\n keepLooking = false;\n active = true;\n }\n return keepLooking;\n });\n\n return active;\n },\n\n enable: state => {\n const {selection} = state;\n return selection instanceof TextSelection || selection instanceof AllSelection;\n },\n\n run: (state, dispatch): boolean => {\n const {schema, selection} = state;\n\n console.log(this);\n const tr = setTextAlign(state.tr.setSelection(selection), schema, this.active ? null : alignment);\n if (tr.docChanged) {\n dispatch?.(tr);\n return true;\n } else {\n return false;\n }\n },\n });\n }\n}\n","import {\n blockTypeItem,\n joinUpItem,\n liftItem,\n MenuItem,\n MenuItemSpec,\n redoItem,\n selectParentNodeItem,\n undoItem,\n wrapItem,\n} from 'prosemirror-menu';\nimport {EditorState, Transaction} from 'prosemirror-state';\nimport {Command, toggleMark} from 'prosemirror-commands';\nimport {wrapInList} from 'prosemirror-schema-list';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\nimport {MatDialog} from '@angular/material/dialog';\nimport {LinkDialogComponent, LinkDialogData} from '../link-dialog/link-dialog.component';\nimport {EditorView} from 'prosemirror-view';\nimport {\n addColumnAfter,\n addColumnBefore,\n addRowAfter,\n addRowBefore,\n deleteColumn,\n deleteRow,\n deleteTable,\n mergeCells,\n splitCell,\n toggleHeaderCell,\n toggleHeaderColumn,\n toggleHeaderRow,\n} from 'prosemirror-tables';\nimport {addTable} from './table';\nimport {Item} from './item';\nimport {paragraphWithAlignment} from './paragraph-with-alignment';\nimport {TextAlignItem} from './text-align-item';\n\n/**\n * Convert built-in `MenuItem` into our Angular specific `Item`\n */\nfunction toItem(item: MenuItem): Item {\n return new Item(item.spec);\n}\n\nfunction canInsert(state: EditorState, nodeType: NodeType): boolean {\n const $from = state.selection.$from;\n for (let d = $from.depth; d >= 0; d--) {\n const index = $from.index(d);\n if ($from.node(d).canReplaceWith(index, index, nodeType)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction cmdItem(cmd: Command, options: Partial<MenuItemSpec> = {}, useEnable = false): Item {\n const passedOptions: MenuItemSpec = {\n run: cmd,\n ...options,\n };\n\n if ((!options.enable || useEnable) && !options.select) {\n passedOptions[options.enable ? 'enable' : 'select'] = (state: EditorState) => cmd(state);\n }\n\n return new Item(passedOptions);\n}\n\nfunction markActive(state: EditorState, type: MarkType): boolean {\n const {from, $from, to, empty} = state.selection;\n if (empty) {\n return !!type.isInSet(state.storedMarks || $from.marks());\n } else {\n return state.doc.rangeHasMark(from, to, type);\n }\n}\n\nfunction markItem(markType: MarkType, options: Partial<MenuItemSpec> = {}): Item {\n const passedOptions: Partial<MenuItemSpec> = {\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n ...options,\n };\n\n return cmdItem(toggleMark(markType), passedOptions, true);\n}\n\nfunction linkItem(markType: MarkType, dialog: MatDialog): Item {\n return new Item({\n active(state: EditorState): boolean {\n return markActive(state, markType);\n },\n enable(state: EditorState): boolean {\n return !state.selection.empty;\n },\n run(state: EditorState, dispatch: (p: Transaction) => void, view: EditorView): boolean | void {\n if (markActive(state, markType)) {\n toggleMark(markType)(state, dispatch);\n return true;\n }\n\n dialog\n .open<LinkDialogComponent, LinkDialogData, LinkDialogData>(LinkDialogComponent, {\n data: {\n href: '',\n title: '',\n },\n })\n .afterClosed()\n .subscribe(result => {\n if (result) {\n if (!result.title) {\n delete result.title;\n }\n\n toggleMark(markType, result)(view.state, view.dispatch);\n }\n\n view.focus();\n });\n },\n });\n}\n\nfunction wrapListItem(nodeType: NodeType): Item {\n return cmdItem(wrapInList(nodeType));\n}\n\nexport type Key =\n | 'toggleStrong'\n | 'toggleEm'\n | 'toggleCode'\n | 'toggleLink'\n | 'wrapBulletList'\n | 'wrapOrderedList'\n | 'wrapBlockQuote'\n | 'makeParagraph'\n | 'makeCodeBlock'\n | 'makeHead1'\n | 'makeHead2'\n | 'makeHead3'\n | 'makeHead4'\n | 'makeHead5'\n | 'makeHead6'\n | 'alignLeft'\n | 'alignRight'\n | 'alignCenter'\n | 'alignJustify'\n | 'insertHorizontalRule'\n | 'joinUp'\n | 'lift'\n | 'selectParentNode'\n | 'undo'\n | 'redo'\n | 'insertTable'\n | 'addColumnBefore'\n | 'addColumnAfter'\n | 'deleteColumn'\n | 'addRowBefore'\n | 'addRowAfter'\n | 'deleteRow'\n | 'deleteTable'\n | 'mergeCells'\n | 'splitCell'\n | 'toggleHeaderColumn'\n | 'toggleHeaderRow'\n | 'toggleHeaderCell';\n\nexport type MenuItems = Partial<Record<Key, Item>>;\n\n/**\n * Given a schema, look for default mark and node types in it and\n * return an object with relevant menu items relating to those marks:\n */\nexport function buildMenuItems(schema: Schema, dialog: MatDialog): MenuItems {\n const r: MenuItems = {\n joinUp: toItem(joinUpItem),\n lift: toItem(liftItem),\n selectParentNode: toItem(selectParentNodeItem),\n undo: toItem(undoItem as unknown as MenuItem), // Typing is incorrect, so we force it\n redo: toItem(redoItem as unknown as MenuItem),\n };\n\n let type: MarkType | NodeType | undefined;\n type = schema.marks.strong;\n if (type) {\n r.toggleStrong = markItem(type);\n }\n\n type = schema.marks.em;\n if (type) {\n r.toggleEm = markItem(type);\n }\n\n type = schema.marks.code;\n if (type) {\n r.toggleCode = markItem(type);\n }\n\n type = schema.marks.link;\n if (type) {\n r.toggleLink = linkItem(type, dialog);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n r.wrapBulletList = wrapListItem(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n r.wrapOrderedList = wrapListItem(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n r.wrapBlockQuote = toItem(wrapItem(type, {}));\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n r.makeParagraph = toItem(blockTypeItem(type, {}));\n\n if (type.spec === paragraphWithAlignment) {\n r.alignLeft = new TextAlignItem('left');\n r.alignRight = new TextAlignItem('right');\n r.alignCenter = new TextAlignItem('center');\n r.alignJustify = new TextAlignItem('justify');\n }\n }\n\n type = schema.nodes.code_block;\n if (type) {\n r.makeCodeBlock = toItem(blockTypeItem(type, {}));\n }\n\n type = schema.nodes.heading;\n if (type) {\n r.makeHead1 = toItem(blockTypeItem(type, {attrs: {level: 1}}));\n r.makeHead2 = toItem(blockTypeItem(type, {attrs: {level: 2}}));\n r.makeHead3 = toItem(blockTypeItem(type, {attrs: {level: 3}}));\n r.makeHead4 = toItem(blockTypeItem(type, {attrs: {level: 4}}));\n r.makeHead5 = toItem(blockTypeItem(type, {attrs: {level: 5}}));\n r.makeHead6 = toItem(blockTypeItem(type, {attrs: {level: 6}}));\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n const hr = type;\n r.insertHorizontalRule = new Item({\n enable(state): boolean {\n return canInsert(state, hr);\n },\n run(state, dispatch): void {\n dispatch(state.tr.replaceSelectionWith(hr.create()));\n },\n });\n }\n\n type = schema.nodes.table;\n if (type) {\n r.insertTable = new Item({run: (e, tr) => addTable(e, tr)});\n r.addColumnBefore = new Item({run: addColumnBefore});\n r.addColumnAfter = new Item({run: addColumnAfter});\n r.deleteColumn = new Item({run: deleteColumn});\n r.addRowBefore = new Item({run: addRowBefore});\n r.addRowAfter = new Item({run: addRowAfter});\n r.deleteRow = new Item({run: deleteRow});\n r.deleteTable = new Item({run: deleteTable});\n r.mergeCells = new Item({run: mergeCells});\n r.splitCell = new Item({run: splitCell});\n r.toggleHeaderColumn = new Item({run: toggleHeaderColumn});\n r.toggleHeaderRow = new Item({run: toggleHeaderRow});\n r.toggleHeaderCell = new Item({run: toggleHeaderCell});\n }\n\n return r;\n}\n","import {\n ellipsis,\n emDash,\n InputRule,\n inputRules,\n textblockTypeInputRule,\n wrappingInputRule,\n} from 'prosemirror-inputrules';\nimport {NodeType, Schema} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\n\n/**\n * Given a blockquote node type, returns an input rule that turns `\"> \"`\n * at the start of a textblock into a blockquote.\n */\nfunction blockQuoteRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n}\n\n/**\n * Given a list node type, returns an input rule that turns a number\n * followed by a dot at the start of a textblock into an ordered list.\n */\nfunction orderedListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n nodeType,\n match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs.order === +match[1],\n );\n}\n\n/**\n * Given a list node type, returns an input rule that turns a bullet\n * (dash, plush, or asterisk) at the start of a textblock into a\n * bullet list.\n */\nfunction bulletListRule(nodeType: NodeType): InputRule {\n return wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType);\n}\n\n/**\n * Given a code block node type, returns an input rule that turns a\n * textblock starting with three backticks into a code block.\n */\nfunction codeBlockRule(nodeType: NodeType): InputRule {\n return textblockTypeInputRule(/^```$/, nodeType);\n}\n\n/**\n * Given a node type and a maximum level, creates an input rule that\n * turns up to that number of `#` characters followed by a space at\n * the start of a textblock into a heading whose level corresponds to\n * the number of `#` signs.\n */\nfunction headingRule(nodeType: NodeType, maxLevel: number): InputRule {\n return textblockTypeInputRule(new RegExp('^(#{1,' + maxLevel + '})\\\\s$'), nodeType, match => ({\n level: match[1].length,\n }));\n}\n\n/**\n * A set of input rules for creating the basic block quotes, lists,\n * code blocks, and heading.\n */\nexport function buildInputRules(schema: Schema): Plugin {\n const rules = [ellipsis, emDash];\n\n let type = schema.nodes.blockquote;\n if (type) {\n rules.push(blockQuoteRule(type));\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n rules.push(orderedListRule(type));\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n rules.push(bulletListRule(type));\n }\n\n type = schema.nodes.code_block;\n if (type) {\n rules.push(codeBlockRule(type));\n }\n\n type = schema.nodes.heading;\n if (type) {\n rules.push(headingRule(type, 6));\n }\n\n return inputRules({rules});\n}\n","import {\n chainCommands,\n exitCode,\n joinDown,\n joinUp,\n Keymap,\n lift,\n selectParentNode,\n setBlockType,\n toggleMark,\n wrapIn,\n} from 'prosemirror-commands';\nimport {liftListItem, sinkListItem, splitListItem, wrapInList} from 'prosemirror-schema-list';\nimport {redo, undo} from 'prosemirror-history';\nimport {undoInputRule} from 'prosemirror-inputrules';\nimport {MarkType, NodeType, Schema} from 'prosemirror-model';\n\n/**\n * Inspect the given schema looking for marks and nodes from the\n * basic schema, and if found, add key bindings related to them.\n * This will add:\n *\n * * **Mod-b** for toggling [strong](#schema-basic.StrongMark)\n * * **Mod-i** for toggling [emphasis](#schema-basic.EmMark)\n * * **Mod-`** for toggling [code font](#schema-basic.CodeMark)\n * * **Ctrl-Shift-0** for making the current textblock a paragraph\n * * **Ctrl-Shift-1** to **Ctrl-Shift-Digit6** for making the current\n * textblock a heading of the corresponding level\n * * **Ctrl-Shift-Backslash** to make the current textblock a code block\n * * **Ctrl-Shift-8** to wrap the selection in an ordered list\n * * **Ctrl-Shift-9** to wrap the selection in a bullet list\n * * **Ctrl->** to wrap the selection in a block quote\n * * **Enter** to split a non-empty textblock in a list item while at\n * the same time splitting the list item\n * * **Mod-Enter** to insert a hard break\n * * **Mod-_** to insert a horizontal rule\n * * **Backspace** to undo an input rule\n * * **Alt-ArrowUp** to `joinUp`\n * * **Alt-ArrowDown** to `joinDown`\n * * **Mod-BracketLeft** to `lift`\n * * **Escape** to `selectParentNode`\n *\n * You can suppress or map these bindings by passing a `mapKeys`\n * argument, which maps key names (say `\"Mod-B\"` to either `false`, to\n * remove the binding, or a new key name string.\n */\nexport function buildKeymap(schema: Schema, isMac: boolean): Keymap {\n const keys: Keymap = {};\n\n keys['Mod-z'] = undo;\n keys['Shift-Mod-z'] = redo;\n keys['Backspace'] = undoInputRule;\n if (!isMac) {\n keys['Mod-y'] = redo;\n }\n\n keys['Alt-ArrowUp'] = joinUp;\n keys['Alt-ArrowDown'] = joinDown;\n keys['Mod-BracketLeft'] = lift;\n keys['Escape'] = selectParentNode;\n\n let type: MarkType | NodeType = schema.marks.strong;\n if (type) {\n keys['Mod-b'] = toggleMark(type);\n keys['Mod-B'] = toggleMark(type);\n }\n\n type = schema.marks.em;\n if (type) {\n keys['Mod-i'] = toggleMark(type);\n keys['Mod-I'] = toggleMark(type);\n }\n\n type = schema.marks.code;\n if (type) {\n keys['Mod-`'] = toggleMark(type);\n }\n\n type = schema.nodes.bullet_list;\n if (type) {\n keys['Shift-Ctrl-8'] = wrapInList(type);\n }\n\n type = schema.nodes.ordered_list;\n if (type) {\n keys['Shift-Ctrl-9'] = wrapInList(type);\n }\n\n type = schema.nodes.blockquote;\n if (type) {\n keys['Ctrl->'] = wrapIn(type);\n }\n\n type = schema.nodes.hard_break;\n if (type) {\n const br = type;\n const cmd = chainCommands(exitCode, (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n keys['Mod-Enter'] = cmd;\n keys['Shift-Enter'] = cmd;\n if (isMac) {\n keys['Ctrl-Enter'] = cmd;\n }\n }\n\n type = schema.nodes.list_item;\n if (type) {\n keys['Enter'] = splitListItem(type);\n keys['Mod-['] = liftListItem(type);\n keys['Mod-]'] = sinkListItem(type);\n }\n\n type = schema.nodes.paragraph;\n if (type) {\n keys['Shift-Ctrl-0'] = setBlockType(type);\n }\n\n type = schema.nodes.code_block;\n if (type) {\n keys['Shift-Ctrl-\\\\'] = setBlockType(type);\n }\n\n type = schema.nodes.heading;\n if (type) {\n for (let i = 1; i <= 6; i++) {\n keys['Shift-Ctrl-' + i] = setBlockType(type, {level: i});\n }\n }\n\n type = schema.nodes.horizontal_rule;\n if (type) {\n const hr = type;\n keys['Mod-_'] = (state, dispatch) => {\n dispatch?.(state.tr.replaceSelectionWith(hr.create()).scrollIntoView());\n return true;\n };\n }\n\n return keys;\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n} from '@angular/core';\nimport {ControlValueAccessor, NgControl} from '@angular/forms';\nimport {EditorView} from 'prosemirror-view';\nimport {EditorState, Plugin, Transaction} from 'prosemirror-state';\nimport {DOMParser, DOMSerializer, Schema} from 'prosemirror-model';\nimport {DOCUMENT} from '@angular/common';\nimport {MatDialog} from '@angular/material/dialog';\nimport {columnResizing, goToNextCell, tableEditing} from 'prosemirror-tables';\nimport {keymap} from 'prosemirror-keymap';\nimport {ImagePlugin, ImageUploader} from '../utils/image';\nimport {advancedSchema, basicSchema} from '../utils/schema';\nimport {buildMenuItems, Key, MenuItems} from '../utils/menu';\nimport {history} from 'prosemirror-history';\nimport {baseKeymap} from 'prosemirror-commands';\nimport {dropCursor} from 'prosemirror-dropcursor';\nimport {gapCursor} from 'prosemirror-gapcursor';\nimport {buildInputRules} from '../utils/inputrules';\nimport {buildKeymap} from '../utils/keymap';\n\n/**\n * Prosemirror component\n *\n * Usage :\n *\n * ```html\n * <natural-editor [(ngModel)]=\"htmlString\"></natural-editor>\n * ```\n */\n// @dynamic\n@Component({\n selector: 'natural-editor',\n templateUrl: './editor.component.html',\n styleUrls: ['./editor.component.scss'],\n providers: [ImagePlugin],\n})\nexport class NaturalEditorComponent implements OnInit, OnDestroy, ControlValueAccessor {\n private view: EditorView | null = null;\n\n @ViewChild('editor', {read: ElementRef, static: true}) private editor!: ElementRef;\n\n @Output() public readonly contentChange = new EventEmitter<string>();\n\n /**\n * Callback to upload an image.\n *\n * If given it will enable advanced schema, including image and tables.\n * It must be given on initialization and cannot be changed later on.\n */\n @Input() public imageUploader: ImageUploader | null = null;\n\n private schema: Schema = basicSchema;\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n private onChange?: (value: string | null) => void;\n\n /**\n * HTML string\n */\n private content = '';\n\n public menu: MenuItems | null = null;\n\n /**\n * If subscribed to, then the save button will be shown and click events forwarded\n */\n @Output() public readonly save = new EventEmitter<void>();\n\n constructor(\n @Optional() @Self() public readonly ngControl: NgControl,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly dialog: MatDialog,\n private readonly imagePlugin: ImagePlugin,\n ) {\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n this.schema = this.imageUploader ? advancedSchema : basicSchema;\n this.menu = buildMenuItems(this.schema, this.dialog);\n const serializer = DOMSerializer.fromSchema(this.schema);\n const state = this.createState();\n\n this.view = new EditorView(this.editor.nativeElement, {\n state: state,\n dispatchTransaction: (transaction: Transaction) => {\n if (!this.view) {\n return;\n }\n\n const newState = this.view.state.apply(transaction);\n this.view.updateState(newState);\n\n // Transform doc into HTML string\n const dom = serializer.serializeFragment(this.view.state.doc as any);\n const el = this.document.createElement('_');\n el.appendChild(dom);\n\n const newContent = el.innerHTML;\n if (this.content === newContent) {\n return;\n }\n\n this.content = el.innerHTML;\n\n if (this.onChange) {\n this.onChange(this.content);\n }\n this.contentChange.emit(this.content);\n },\n });\n this.update();\n }\n\n public writeValue(val: string | undefined): void {\n if (typeof val === 'string' && val !== this.content) {\n this.content = val;\n }\n\n if (this.view !== null) {\n const state = this.createState();\n this.view.updateState(state);\n }\n }\n\n private createState(): EditorState {\n const template = this.document.createElement('_');\n template.innerHTML = '<div>' + this.content + '</div>';\n if (!template.firstChild) {\n throw new Error('child of template element could not be created');\n }\n\n const parser = DOMParser.fromSchema(this.schema);\n const doc = parser.parse(template.firstChild);\n\n return EditorState.create({\n doc: doc,\n plugins: this.createPlugins(),\n });\n }\n\n private createPlugins(): Plugin[] {\n const isMac = !!this.document.defaultView?.navigator.platform.match(/Mac/);\n\n const plugins = [\n buildInputRules(this.schema),\n keymap(buildKeymap(this.schema, isMac)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor(),\n history(),\n new Plugin({\n props: {\n attributes: {class: 'ProseMirror-example-setup-style'},\n },\n }),\n new Plugin({\n view: () => this,\n }),\n ];\n\n if (this.schema === advancedSchema) {\n plugins.push(\n this.imagePlugin.plugin,\n columnResizing(undefined as any),\n tableEditing(),\n keymap({\n Tab: goToNextCell(1),\n 'Shift-Tab': goToNextCell(-1),\n }),\n );\n }\n\n return plugins;\n }\n\n /**\n * Called by Prosemirror whenever the editor state changes. So we update our menu states.\n */\n public update(): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n for (const item of Object.values(this.menu)) {\n item.update(this.view, this.view.state);\n }\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n\n public setDisabledState(isDisabled: boolean): void {\n // TODO disable editor ?\n }\n\n public ngOnDestroy(): void {\n if (this.view) {\n this.view.destroy();\n this.view = null;\n }\n }\n\n public run(event: Event, key: Key): void {\n if (!this.view || !this.menu) {\n return;\n }\n\n const item = this.menu[key];\n if (!item || item.disabled || !item.show) {\n return;\n }\n\n item.spec.run(this.view.state, this.view.dispatch, this.view, event);\n this.view.focus();\n }\n\n public upload(file: File): void {\n if (!this.view || !this.imageUploader) {\n return;\n }\n\n if (this.view.state.selection.$from.parent.inlineContent) {\n this.imagePlugin.startImageUpload(this.view, file, this.imageUploader, this.schema);\n }\n\n this.view.focus();\n }\n}\n","<div class=\"menu-container\" *ngIf=\"menu\">\n <div class=\"menu\">\n <button mat-button *ngIf=\"save.observed\" (click)=\"save.emit()\" i18n-matTooltip matTooltip=\"Enregistrer\">\n <mat-icon>save</mat-icon>\n </button>\n\n <mat-button-toggle-group multiple>\n <mat-button-toggle\n *ngIf=\"menu.toggleStrong\"\n [disabled]=\"menu.toggleStrong.disabled\"\n [checked]=\"menu.toggleStrong.active\"\n (click)=\"run($event, 'toggleStrong')\"\n i18n-matTooltip\n matTooltip=\"Gras\"\n >\n <mat-icon>format_bold</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.toggleEm\"\n [disabled]=\"menu.toggleEm.disabled\"\n [checked]=\"menu.toggleEm.active\"\n (click)=\"run($event, 'toggleEm')\"\n i18n-matTooltip\n matTooltip=\"Italique\"\n >\n <mat-icon>format_italic</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.toggleCode\"\n [disabled]=\"menu.toggleCode.disabled\"\n [checked]=\"menu.toggleCode.active\"\n (click)=\"run($event, 'toggleCode')\"\n i18n-matTooltip\n matTooltip=\"Code\"\n >\n <mat-icon>code</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.toggleLink\"\n [disabled]=\"menu.toggleLink.disabled\"\n [checked]=\"menu.toggleLink.active\"\n (click)=\"run($event, 'toggleLink')\"\n i18n-matTooltip\n matTooltip=\"Insérer un lien...\"\n >\n <mat-icon>insert_link</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n\n <button mat-button [matMenuTriggerFor]=\"blockMenu\">\n <span i18n>Type</span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n\n <mat-menu #blockMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngIf=\"menu.makeParagraph\"\n [disabled]=\"menu.makeParagraph.disabled\"\n (click)=\"run($event, 'makeParagraph')\"\n i18n\n >Paragraphe\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeCodeBlock\"\n [disabled]=\"menu.makeCodeBlock.disabled\"\n (click)=\"run($event, 'makeCodeBlock')\"\n i18n\n >Code\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead1\"\n [disabled]=\"menu.makeHead1.disabled\"\n (click)=\"run($event, 'makeHead1')\"\n i18n\n >Titre 1\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead2\"\n [disabled]=\"menu.makeHead2.disabled\"\n (click)=\"run($event, 'makeHead2')\"\n i18n\n >Titre 2\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead3\"\n [disabled]=\"menu.makeHead3.disabled\"\n (click)=\"run($event, 'makeHead3')\"\n i18n\n >Titre 3\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead4\"\n [disabled]=\"menu.makeHead4.disabled\"\n (click)=\"run($event, 'makeHead4')\"\n i18n\n >Titre 4\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead5\"\n [disabled]=\"menu.makeHead5.disabled\"\n (click)=\"run($event, 'makeHead5')\"\n i18n\n >Titre 5\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead6\"\n [disabled]=\"menu.makeHead6.disabled\"\n (click)=\"run($event, 'makeHead6')\"\n i18n\n >Titre 6\n </button>\n </mat-menu>\n\n <button mat-button [matMenuTriggerFor]=\"tableMenu\" *ngIf=\"menu.addColumnBefore\">\n <span i18n>Tableau</span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n\n <mat-menu #tableMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngIf=\"menu.insertTable\"\n [disabled]=\"menu.insertTable.disabled\"\n (click)=\"run($event, 'insertTable')\"\n i18n\n >Insérer un tableau\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.deleteTable\"\n [disabled]=\"menu.deleteTable.disabled\"\n (click)=\"run($event, 'deleteTable')\"\n i18n\n >Supprimer le tableau\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.mergeCells\"\n [disabled]=\"menu.mergeCells.disabled\"\n (click)=\"run($event, 'mergeCells')\"\n i18n\n >Fusionner les cellules\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.splitCell\"\n [disabled]=\"menu.splitCell.disabled\"\n (click)=\"run($event, 'splitCell')\"\n i18n\n >Scinder les cellules\n </button>\n\n <mat-divider></mat-divider>\n\n <button\n mat-menu-item\n *ngIf=\"menu.addColumnBefore\"\n [disabled]=\"menu.addColumnBefore.disabled\"\n (click)=\"run($event, 'addColumnBefore')\"\n i18n\n >Insérer une colonne avant\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.addColumnAfter\"\n [disabled]=\"menu.addColumnAfter.disabled\"\n (click)=\"run($event, 'addColumnAfter')\"\n i18n\n >Insérer une colonne après\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.deleteColumn\"\n [disabled]=\"menu.deleteColumn.disabled\"\n (click)=\"run($event, 'deleteColumn')\"\n i18n\n >Supprimer la colonne\n </button>\n\n <mat-divider></mat-divider>\n\n <button\n mat-menu-item\n *ngIf=\"menu.addRowBefore\"\n [disabled]=\"menu.addRowBefore.disabled\"\n (click)=\"run($event, 'addRowBefore')\"\n i18n\n >Insérer une ligne avant\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.addRowAfter\"\n [disabled]=\"menu.addRowAfter.disabled\"\n (click)=\"run($event, 'addRowAfter')\"\n i18n\n >Insérer une ligne après\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.deleteRow\"\n [disabled]=\"menu.deleteRow.disabled\"\n (click)=\"run($event, 'deleteRow')\"\n i18n\n >Supprimer la ligne\n </button>\n\n <mat-divider></mat-divider>\n\n <button\n mat-menu-item\n *ngIf=\"menu.toggleHeaderColumn\"\n [disabled]=\"menu.toggleHeaderColumn.disabled\"\n (click)=\"run($event, 'toggleHeaderColumn')\"\n i18n\n >Entête de colonne\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.toggleHeaderRow\"\n [disabled]=\"menu.toggleHeaderRow.disabled\"\n (click)=\"run($event, 'toggleHeaderRow')\"\n i18n\n >Entête de ligne\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.toggleHeaderCell\"\n [disabled]=\"menu.toggleHeaderCell.disabled\"\n (click)=\"run($event, 'toggleHeaderCell')\"\n i18n\n >Entête de cellule\n </button>\n </mat-menu>\n\n <button\n mat-button\n *ngIf=\"imageUploader\"\n naturalFileDrop\n [selectable]=\"true\"\n [broadcast]=\"false\"\n i18n-matTooltip\n matTooltip=\"Insérer une image\"\n (fileChange)=\"upload($event)\"\n >\n <mat-icon>insert_photo</mat-icon>\n </button>\n\n <mat-button-toggle-group *ngIf=\"menu.alignLeft\">\n <mat-button-toggle\n *ngIf=\"menu.alignLeft\"\n [disabled]=\"menu.alignLeft.disabled\"\n [checked]=\"menu.alignLeft.active\"\n (click)=\"run($event, 'alignLeft')\"\n i18n-matTooltip\n matTooltip=\"Aligner gauche\"\n >\n <mat-icon>format_align_left</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.alignCenter\"\n [disabled]=\"menu.alignCenter.disabled\"\n [checked]=\"menu.alignCenter.active\"\n (click)=\"run($event, 'alignCenter')\"\n i18n-matTooltip\n matTooltip=\"Centrer\"\n >\n <mat-icon>format_align_center</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.alignRight\"\n [disabled]=\"menu.alignRight.disabled\"\n [checked]=\"menu.alignRight.active\"\n (click)=\"run($event, 'alignRight')\"\n i18n-matTooltip\n matTooltip=\"Aligner droite\"\n >\n <mat-icon>format_align_right</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.alignJustify\"\n [disabled]=\"menu.alignJustify.disabled\"\n [checked]=\"menu.alignJustify.active\"\n (click)=\"run($event, 'alignJustify')\"\n i18n-matTooltip\n matTooltip=\"Justifier\"\n >\n <mat-icon>format_align_justify</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n\n <button\n mat-button\n *ngIf=\"menu.undo\"\n [disabled]=\"menu.undo.disabled\"\n (click)=\"run($event, 'undo')\"\n i18n-matTooltip\n matTooltip=\"Annuler\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.redo\"\n [disabled]=\"menu.redo.disabled\"\n (click)=\"run($event, 'redo')\"\n i18n-matTooltip\n matTooltip=\"Refaire\"\n >\n <mat-icon>redo</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.wrapBulletList && menu.wrapBulletList.show\"\n [disabled]=\"menu.wrapBulletList.disabled\"\n (click)=\"run($event, 'wrapBulletList')\"\n i18n-matTooltip\n matTooltip=\"Liste à puce\"\n >\n <mat-icon>format_list_bulleted</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.wrapOrderedList && menu.wrapOrderedList.show\"\n [disabled]=\"menu.wrapOrderedList.disabled\"\n (click)=\"run($event, 'wrapOrderedList')\"\n i18n-matTooltip\n matTooltip=\"Liste à numéro\"\n >\n <mat-icon>format_list_numbered</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.wrapBlockQuote && menu.wrapBlockQuote.show\"\n [disabled]=\"menu.wrapBlockQuote.disabled\"\n (click)=\"run($event, 'wrapBlockQuote')\"\n i18n-matTooltip\n matTooltip=\"Citation\"\n >\n <mat-icon>format_quote</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.joinUp && menu.joinUp.show\"\n [disabled]=\"menu.joinUp.disabled\"\n (click)=\"run($event, 'joinUp')\"\n i18n-matTooltip\n matTooltip=\"Fusionner avec l'élément du haut\"\n >\n <mat-icon>move_up</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.lift && menu.lift.show\"\n [disabled]=\"menu.lift.disabled\"\n (click)=\"run($event, 'lift')\"\n i18n-matTooltip\n matTooltip=\"Désindenter\"\n >\n <mat-icon>format_indent_decrease</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.selectParentNode && menu.selectParentNode.show\"\n [disabled]=\"menu.selectParentNode.disabled\"\n (click)=\"run($event, 'selectParentNode')\"\n i18n-matTooltip\n matTooltip=\"Sélectionner l'élément parent\"\n >\n <mat-icon>select_all</mat-icon>\n </button>\n </div>\n</div>\n<div #editor></div>\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {NaturalEditorComponent} from './editor/editor.component';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {MatToolbarModule} from '@angular/material/toolbar';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {LinkDialogComponent} from './link-dialog/link-dialog.component';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {NaturalFileModule} from '@ecodev/natural';\nimport {MatDividerModule} from '@angular/material/divider';\n\nconst imports = [\n CommonModule,\n MatButtonModule,\n MatButtonToggleModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatMenuModule,\n MatToolbarModule,\n MatTooltipModule,\n ReactiveFormsModule,\n NaturalFileModule,\n MatDividerModule,\n];\n\n@NgModule({\n declarations: [NaturalEditorComponent, LinkDialogComponent],\n imports: [...imports],\n exports: [...imports, NaturalEditorComponent],\n})\nexport class NaturalEditorModule {}\n","// Load `$localize` onto the global scope - to be able to use that function to translate strings in components/services.\nimport '@angular/localize/init';\n\n/*\n * Public API Surface of natural-editor\n */\n\nexport {NaturalEditorComponent} from './lib/editor/editor.component';\nexport {NaturalEditorModule} from './lib/editor.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}