@limetech/lime-elements 37.18.0 → 37.19.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/CHANGELOG.md +8 -0
- package/dist/cjs/limel-text-editor.cjs.entry.js +88 -4
- package/dist/cjs/limel-text-editor.cjs.entry.js.map +1 -1
- package/dist/collection/components/text-editor/menu/{default-menu.js → full-menu.js} +4 -4
- package/dist/collection/components/text-editor/menu/full-menu.js.map +1 -0
- package/dist/collection/components/text-editor/menu/menu-filter.js +83 -0
- package/dist/collection/components/text-editor/menu/menu-filter.js.map +1 -0
- package/dist/collection/components/text-editor/menu/types.js +2 -0
- package/dist/collection/components/text-editor/menu/types.js.map +1 -0
- package/dist/collection/components/text-editor/text-editor.js +5 -2
- package/dist/collection/components/text-editor/text-editor.js.map +1 -1
- package/dist/esm/limel-text-editor.entry.js +88 -4
- package/dist/esm/limel-text-editor.entry.js.map +1 -1
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/{p-7968bfa0.entry.js → p-10edf8b8.entry.js} +2 -2
- package/dist/lime-elements/p-10edf8b8.entry.js.map +1 -0
- package/dist/types/components/text-editor/menu/{default-menu.d.ts → full-menu.d.ts} +3 -3
- package/dist/types/components/text-editor/menu/menu-filter.d.ts +11 -0
- package/dist/types/components/text-editor/menu/types.d.ts +35 -0
- package/package.json +2 -2
- package/dist/collection/components/text-editor/menu/default-menu.js.map +0 -1
- package/dist/lime-elements/p-7968bfa0.entry.js.map +0 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { Dropdown, MenuItem } from 'prosemirror-menu';
|
|
2
2
|
import { buildMenuItems } from 'prosemirror-example-setup';
|
|
3
3
|
/**
|
|
4
|
-
* Creates the
|
|
4
|
+
* Creates the full menu for the text editor
|
|
5
5
|
* based on the default menu already in prosemirror-example-setup
|
|
6
6
|
* @param schema - the schema to use for the menu
|
|
7
7
|
*
|
|
8
8
|
* @returns the default menu for the text editor
|
|
9
9
|
*/
|
|
10
|
-
export const
|
|
10
|
+
export const buildFullMenu = (schema) => {
|
|
11
11
|
const menuItems = buildMenuItems(schema);
|
|
12
12
|
const { inlineMenu, insertHorizontalRule } = menuItems;
|
|
13
13
|
const typeMenu = getNewMenu(menuItems.typeMenu);
|
|
14
|
-
const newHorizontalRule = new MenuItem(Object.assign(Object.assign({}, insertHorizontalRule.spec), { label: 'hr' }));
|
|
14
|
+
const newHorizontalRule = new MenuItem(Object.assign(Object.assign({}, insertHorizontalRule.spec), { title: 'hr', label: 'hr' }));
|
|
15
15
|
const historyButtons = menuItems.fullMenu[2];
|
|
16
16
|
const blockMenu = getBlockMenu(menuItems.blockMenu);
|
|
17
17
|
return [
|
|
@@ -32,4 +32,4 @@ const getBlockMenu = (blockMenu) => {
|
|
|
32
32
|
// eslint-disable-next-line no-magic-numbers
|
|
33
33
|
return [...blockMenu[0].slice(0, 5)];
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=
|
|
35
|
+
//# sourceMappingURL=full-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-menu.js","sourceRoot":"","sources":["../../../../src/components/text-editor/menu/full-menu.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,EAAmB,EAAE;EAC7D,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAQtC,CAAC;EACF,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,GAAG,SAAS,CAAC;EACvD,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;EAChD,MAAM,iBAAiB,GAAG,IAAI,QAAQ,iCAC/B,oBAAoB,CAAC,IAAI,KAC5B,KAAK,EAAE,IAAI,EACX,KAAK,EAAE,IAAI,IACb,CAAC;EACH,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;EAEpD,OAAO;IACH,UAAU,CAAC,CAAC,CAAC;IACb,CAAC,iBAAiB,CAAC;IACnB,GAAG,QAAQ;IACX,cAAc;IACd,SAAS;GACZ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACf,QAA+C,EAChC,EAAE;EACjB,MAAM,eAAe,GAAa,IAAI,QAAQ,CACzC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAyC,CAAC,OAAO,EACpE;IACI,KAAK,EAAE,GAAG;GACb,CACJ,CAAC;EAEF,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,SAA0B,EAAiB,EAAE;EAC/D,4CAA4C;EAC5C,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC","sourcesContent":["import { Schema } from 'prosemirror-model';\nimport { MenuElement, Dropdown, MenuItem } from 'prosemirror-menu';\nimport { buildMenuItems } from 'prosemirror-example-setup';\n\n/**\n * Creates the full menu for the text editor\n * based on the default menu already in prosemirror-example-setup\n * @param schema - the schema to use for the menu\n *\n * @returns the default menu for the text editor\n */\nexport const buildFullMenu = (schema: Schema): MenuElement[][] => {\n const menuItems = buildMenuItems(schema) as unknown as {\n blockMenu: MenuElement[][];\n fullMenu: MenuElement[][];\n inlineMenu: MenuElement[][];\n insertHorizontalRule: MenuItem;\n typeMenu: Dropdown & {\n content: MenuElement[];\n };\n };\n const { inlineMenu, insertHorizontalRule } = menuItems;\n const typeMenu = getNewMenu(menuItems.typeMenu);\n const newHorizontalRule = new MenuItem({\n ...insertHorizontalRule.spec,\n title: 'hr',\n label: 'hr',\n });\n const historyButtons = menuItems.fullMenu[2];\n const blockMenu = getBlockMenu(menuItems.blockMenu);\n\n return [\n inlineMenu[0],\n [newHorizontalRule],\n ...typeMenu,\n historyButtons,\n blockMenu,\n ];\n};\n\nconst getNewMenu = (\n typeMenu: Dropdown & { content: MenuElement[] },\n): MenuElement[][] => {\n const headingDropdown: Dropdown = new Dropdown(\n (typeMenu.content[2] as Partial<{ content: MenuElement[] }>).content,\n {\n label: 'H',\n },\n );\n\n return [[typeMenu.content[0], typeMenu.content[1]], [headingDropdown]];\n};\n\nconst getBlockMenu = (blockMenu: MenuElement[][]): MenuElement[] => {\n // eslint-disable-next-line no-magic-numbers\n return [...blockMenu[0].slice(0, 5)];\n};\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Dropdown } from 'prosemirror-menu';
|
|
2
|
+
/**
|
|
3
|
+
* The available items for the editor toolbar
|
|
4
|
+
* The values must match the titles of the menuItem
|
|
5
|
+
*
|
|
6
|
+
* {@link MenuItem.spec}
|
|
7
|
+
*/
|
|
8
|
+
const allItems = {
|
|
9
|
+
strong: 'Toggle strong style',
|
|
10
|
+
emphasis: 'Toggle emphasis',
|
|
11
|
+
code: 'Toggle code font',
|
|
12
|
+
link: 'Add or remove link',
|
|
13
|
+
'horizontal rule': 'hr',
|
|
14
|
+
paragraph: 'Change to paragraph',
|
|
15
|
+
'code block': 'Change to code block',
|
|
16
|
+
'heading 1': 'Change to heading 1',
|
|
17
|
+
'heading 2': 'Change to heading 2',
|
|
18
|
+
'heading 3': 'Change to heading 3',
|
|
19
|
+
'heading 4': 'Change to heading 4',
|
|
20
|
+
'heading 5': 'Change to heading 5',
|
|
21
|
+
'heading 6': 'Change to heading 6',
|
|
22
|
+
undo: 'Undo last change',
|
|
23
|
+
redo: 'Redo last undone change',
|
|
24
|
+
'bullet list': 'Wrap in bullet list',
|
|
25
|
+
'ordered list': 'Wrap in ordered list',
|
|
26
|
+
'block quote': 'Wrap in block quote',
|
|
27
|
+
'join above': 'Join with above block',
|
|
28
|
+
'lift out': 'Lift out of enclosing block',
|
|
29
|
+
};
|
|
30
|
+
const defaultItems = [
|
|
31
|
+
'strong',
|
|
32
|
+
'emphasis',
|
|
33
|
+
'link',
|
|
34
|
+
'heading 1',
|
|
35
|
+
'heading 2',
|
|
36
|
+
'heading 3',
|
|
37
|
+
'heading 4',
|
|
38
|
+
'heading 5',
|
|
39
|
+
'heading 6',
|
|
40
|
+
'block quote',
|
|
41
|
+
'bullet list',
|
|
42
|
+
'ordered list',
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* Filters the full menu recursively based on the items provided
|
|
46
|
+
*
|
|
47
|
+
* @param menu - The menu to filter
|
|
48
|
+
* @param items - The menu items to display. If undefined, all items will be displayed
|
|
49
|
+
* @returns The filtered menu
|
|
50
|
+
*/
|
|
51
|
+
export const getFilteredMenu = (menu, items) => {
|
|
52
|
+
let menuItems = defaultItems.map((item) => allItems[item]);
|
|
53
|
+
if (items !== undefined) {
|
|
54
|
+
menuItems = menuItems.concat(items.map((item) => allItems[item]));
|
|
55
|
+
}
|
|
56
|
+
return menu
|
|
57
|
+
.filter((item) => {
|
|
58
|
+
if (isMenuItem(item)) {
|
|
59
|
+
return Object.values(menuItems).includes(item.spec.title);
|
|
60
|
+
}
|
|
61
|
+
else if (isDropdown(item)) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
})
|
|
66
|
+
.filter(Boolean)
|
|
67
|
+
.map(createFilteredDropdown(items));
|
|
68
|
+
};
|
|
69
|
+
const createFilteredDropdown = (items) => (item) => {
|
|
70
|
+
if (isDropdown(item)) {
|
|
71
|
+
return new Dropdown(getFilteredMenu(item.content, items), {
|
|
72
|
+
label: item.label,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return item;
|
|
76
|
+
};
|
|
77
|
+
const isMenuItem = (item) => {
|
|
78
|
+
return item.spec !== undefined;
|
|
79
|
+
};
|
|
80
|
+
const isDropdown = (item) => {
|
|
81
|
+
return item.content !== undefined;
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=menu-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-filter.js","sourceRoot":"","sources":["../../../../src/components/text-editor/menu/menu-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAyB,MAAM,kBAAkB,CAAC;AAGnE;;;;;GAKG;AACH,MAAM,QAAQ,GAAiC;EAC3C,MAAM,EAAE,qBAAqB;EAC7B,QAAQ,EAAE,iBAAiB;EAC3B,IAAI,EAAE,kBAAkB;EACxB,IAAI,EAAE,oBAAoB;EAC1B,iBAAiB,EAAE,IAAI;EACvB,SAAS,EAAE,qBAAqB;EAChC,YAAY,EAAE,sBAAsB;EACpC,WAAW,EAAE,qBAAqB;EAClC,WAAW,EAAE,qBAAqB;EAClC,WAAW,EAAE,qBAAqB;EAClC,WAAW,EAAE,qBAAqB;EAClC,WAAW,EAAE,qBAAqB;EAClC,WAAW,EAAE,qBAAqB;EAClC,IAAI,EAAE,kBAAkB;EACxB,IAAI,EAAE,yBAAyB;EAC/B,aAAa,EAAE,qBAAqB;EACpC,cAAc,EAAE,sBAAsB;EACtC,aAAa,EAAE,qBAAqB;EACpC,YAAY,EAAE,uBAAuB;EACrC,UAAU,EAAE,6BAA6B;CAC5C,CAAC;AAEF,MAAM,YAAY,GAAmB;EACjC,QAAQ;EACR,UAAU;EACV,MAAM;EACN,WAAW;EACX,WAAW;EACX,WAAW;EACX,WAAW;EACX,WAAW;EACX,WAAW;EACX,aAAa;EACb,aAAa;EACb,cAAc;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC3B,IAAmB,EACnB,KAAuC,EAC1B,EAAE;EACf,IAAI,SAAS,GAAa,YAAY,CAAC,GAAG,CACtC,CAAC,IAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACzC,CAAC;EAEF,IAAI,KAAK,KAAK,SAAS,EAAE;IACrB,SAAS,GAAG,SAAS,CAAC,MAAM,CACxB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACpD,CAAC;GACL;EAED,OAAO,IAAI;KACN,MAAM,CAAC,CAAC,IAAiB,EAAE,EAAE;IAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;MAClB,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CACpC,IAAI,CAAC,IAAI,CAAC,KAAe,CAC5B,CAAC;KACL;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;MACzB,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAK,CAAC;EACjB,CAAC,CAAC;KACD,MAAM,CAAC,OAAO,CAAC;KACf,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,sBAAsB,GACxB,CAAC,KAA2B,EAAE,EAAE,CAAC,CAAC,IAAiB,EAAE,EAAE;EACnD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;IAClB,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;MACtD,KAAK,EAAE,IAAI,CAAC,KAAK;KACpB,CAAC,CAAC;GACN;EAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEN,MAAM,UAAU,GAAG,CAAC,IAAS,EAAoB,EAAE;EAC/C,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACf,IAAS,EACgD,EAAE;EAC3D,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;AACtC,CAAC,CAAC","sourcesContent":["import { Dropdown, MenuElement, MenuItem } from 'prosemirror-menu';\nimport { EditorButton, EditorPluginButton } from './types';\n\n/**\n * The available items for the editor toolbar\n * The values must match the titles of the menuItem\n *\n * {@link MenuItem.spec}\n */\nconst allItems: Record<EditorButton, string> = {\n strong: 'Toggle strong style',\n emphasis: 'Toggle emphasis',\n code: 'Toggle code font',\n link: 'Add or remove link',\n 'horizontal rule': 'hr',\n paragraph: 'Change to paragraph',\n 'code block': 'Change to code block',\n 'heading 1': 'Change to heading 1',\n 'heading 2': 'Change to heading 2',\n 'heading 3': 'Change to heading 3',\n 'heading 4': 'Change to heading 4',\n 'heading 5': 'Change to heading 5',\n 'heading 6': 'Change to heading 6',\n undo: 'Undo last change',\n redo: 'Redo last undone change',\n 'bullet list': 'Wrap in bullet list',\n 'ordered list': 'Wrap in ordered list',\n 'block quote': 'Wrap in block quote',\n 'join above': 'Join with above block',\n 'lift out': 'Lift out of enclosing block',\n};\n\nconst defaultItems: EditorButton[] = [\n 'strong',\n 'emphasis',\n 'link',\n 'heading 1',\n 'heading 2',\n 'heading 3',\n 'heading 4',\n 'heading 5',\n 'heading 6',\n 'block quote',\n 'bullet list',\n 'ordered list',\n];\n\n/**\n * Filters the full menu recursively based on the items provided\n *\n * @param menu - The menu to filter\n * @param items - The menu items to display. If undefined, all items will be displayed\n * @returns The filtered menu\n */\nexport const getFilteredMenu = (\n menu: MenuElement[],\n items: EditorPluginButton[] | undefined,\n): MenuElement[] => {\n let menuItems: string[] = defaultItems.map(\n (item: EditorButton) => allItems[item],\n );\n\n if (items !== undefined) {\n menuItems = menuItems.concat(\n items.map((item: EditorButton) => allItems[item]),\n );\n }\n\n return menu\n .filter((item: MenuElement) => {\n if (isMenuItem(item)) {\n return Object.values(menuItems).includes(\n item.spec.title as string,\n );\n } else if (isDropdown(item)) {\n return true;\n }\n\n return false;\n })\n .filter(Boolean)\n .map(createFilteredDropdown(items));\n};\n\nconst createFilteredDropdown =\n (items: EditorPluginButton[]) => (item: MenuElement) => {\n if (isDropdown(item)) {\n return new Dropdown(getFilteredMenu(item.content, items), {\n label: item.label,\n });\n }\n\n return item;\n };\n\nconst isMenuItem = (item: any): item is MenuItem => {\n return item.spec !== undefined;\n};\n\nconst isDropdown = (\n item: any,\n): item is Dropdown & { content: MenuItem[]; label: string } => {\n return item.content !== undefined;\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/text-editor/menu/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * The `EditorButton` type is used to specify the type of buttons that can be used in the editor toolbar.\n * Each string represents a different button that can be added to the toolbar.\n *\n * The following buttons are available:\n * 'strong' - Button for making text bold.\n * 'emphasis' - Button for italicizing text.\n * 'link' - Button for adding a hyperlink.\n * 'heading 1 - Button for creating a level 1 heading.\n * 'heading 2 - Button for creating a level 2 heading.\n * 'heading 3 - Button for creating a level 3 heading.\n * 'heading 4 - Button for creating a level 4 heading.\n * 'heading 5 - Button for creating a level 5 heading.\n * 'heading 6 - Button for creating a level 6 heading.\n * 'block quote' - Button for creating a block quote.\n *\n * @beta\n */\nexport type EditorButton =\n | 'strong'\n | 'emphasis'\n | 'link'\n | 'heading 1'\n | 'heading 2'\n | 'heading 3'\n | 'heading 4'\n | 'heading 5'\n | 'heading 6'\n | 'block quote'\n | 'bullet list'\n | 'ordered list'\n | EditorPluginButton;\n\n/**\n * The `EditorPluginButton` type is used to specify the type of buttons that can be added to the editor toolbar.\n *\n * 'code' - Button for marking inline code.\n * 'horizontal rule' - Button for inserting a horizontal rule.\n * 'code block' - Button for creating a block of code.\n * 'paragraph'- Button for creating a new paragraph.\n * 'join above' - Button for joining the current block with the one above it.\n * 'lift out' - Button for lifting the current block out of its parent block.\n * 'undo' - Button for undoing the last action.\n * 'redo' - Button for redoing the last undone action.\n *\n * @beta\n */\nexport type EditorPluginButton =\n | 'code'\n | 'horizontal rule'\n | 'code block'\n | 'paragraph'\n | 'join above'\n | 'lift out'\n | 'undo'\n | 'redo';\n"]}
|
|
@@ -5,7 +5,8 @@ import { Schema, DOMParser } from 'prosemirror-model';
|
|
|
5
5
|
import { schema } from 'prosemirror-schema-basic';
|
|
6
6
|
import { addListNodes } from 'prosemirror-schema-list';
|
|
7
7
|
import { exampleSetup } from 'prosemirror-example-setup';
|
|
8
|
-
import {
|
|
8
|
+
import { buildFullMenu } from './menu/full-menu';
|
|
9
|
+
import { getFilteredMenu } from './menu/menu-filter';
|
|
9
10
|
/**
|
|
10
11
|
* This editor offers a rich text editing experience with markdown support,
|
|
11
12
|
* in the sense that you can easily type markdown syntax and see the rendered
|
|
@@ -32,7 +33,9 @@ export class TextEditor {
|
|
|
32
33
|
nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),
|
|
33
34
|
marks: schema.spec.marks,
|
|
34
35
|
});
|
|
35
|
-
const menu =
|
|
36
|
+
const menu = buildFullMenu(mySchema)
|
|
37
|
+
.map((items) => getFilteredMenu(items, undefined))
|
|
38
|
+
.filter((items) => items.length);
|
|
36
39
|
this.view = new EditorView(this.host.shadowRoot.querySelector('#editor'), {
|
|
37
40
|
state: EditorState.create({
|
|
38
41
|
doc: DOMParser.fromSchema(mySchema).parse(this.host.shadowRoot.querySelector('#editor')),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor.js","sourceRoot":"","sources":["../../../src/components/text-editor/text-editor.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,OAAO,EACP,KAAK,EAEL,KAAK,EACL,CAAC,GACJ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"text-editor.js","sourceRoot":"","sources":["../../../src/components/text-editor/text-editor.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,OAAO,EACP,KAAK,EAEL,KAAK,EACL,CAAC,GACJ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;;;;GAYG;AAMH,MAAM,OAAO,UAAU;;;;EAaZ,iBAAiB,KAAI,CAAC;EAEtB,MAAM;IACT,OAAO,WAAK,EAAE,EAAC,QAAQ,GAAG,CAAC;EAC/B,CAAC;EAEM,gBAAgB;IACnB,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC;MACxB,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,CAAC;MACnE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;KAC3B,CAAC,CAAC;IAEH,MAAM,IAAI,GAAoB,aAAa,CAAC,QAAQ,CAAC;OAChD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;OACjD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,EAC7C;MACI,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;QACtB,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CACrC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAChD;QACD,OAAO,EAAE,YAAY,CAAC;UAClB,MAAM,EAAE,QAAQ;UAChB,WAAW,EAAE,IAAoB;SACpC,CAAC;OACL,CAAC;MACF,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;MACxD,CAAC;KACJ,CACJ,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n State,\n h,\n} from '@stencil/core';\nimport { EditorState } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { Schema, DOMParser } from 'prosemirror-model';\nimport { schema } from 'prosemirror-schema-basic';\nimport { addListNodes } from 'prosemirror-schema-list';\nimport { exampleSetup } from 'prosemirror-example-setup';\nimport { MenuElement, MenuItem } from 'prosemirror-menu';\nimport { buildFullMenu } from './menu/full-menu';\nimport { getFilteredMenu } from './menu/menu-filter';\n\n/**\n * This editor offers a rich text editing experience with markdown support,\n * in the sense that you can easily type markdown syntax and see the rendered\n * result as rich text in real-time. For instance, you can type `# Hello, world!`\n * and see it directly turning to a heading 1 (an `<h1>` HTML element).\n *\n * Naturally, you can use standard keyboard hotkeys such as <kbd>Ctrl</kbd> + <kbd>B</kbd>\n * to toggle bold text, <kbd>Ctrl</kbd> + <kbd>I</kbd> to toggle italic text, and so on.\n *\n * @exampleComponent limel-example-text-editor-basic\n * @beta\n * @private\n */\n@Component({\n tag: 'limel-text-editor',\n shadow: true,\n styleUrl: 'text-editor.scss',\n})\nexport class TextEditor {\n @Element()\n private host: HTMLLimelTextEditorElement;\n\n @State()\n private view: EditorView;\n\n /**\n * Dispatched when a change is made to the editor\n */\n @Event()\n private change: EventEmitter<{ html: string }>;\n\n public componentWillLoad() {}\n\n public render() {\n return <div id=\"editor\" />;\n }\n\n public componentDidLoad() {\n const mySchema = new Schema({\n nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),\n marks: schema.spec.marks,\n });\n\n const menu: MenuElement[][] = buildFullMenu(mySchema)\n .map((items) => getFilteredMenu(items, undefined))\n .filter((items) => items.length);\n\n this.view = new EditorView(\n this.host.shadowRoot.querySelector('#editor'),\n {\n state: EditorState.create({\n doc: DOMParser.fromSchema(mySchema).parse(\n this.host.shadowRoot.querySelector('#editor'),\n ),\n plugins: exampleSetup({\n schema: mySchema,\n menuContent: menu as MenuItem[][],\n }),\n }),\n dispatchTransaction: (transaction) => {\n const newState = this.view.state.apply(transaction);\n this.view.updateState(newState);\n\n this.change.emit({ html: this.view.dom.innerHTML });\n },\n },\n );\n }\n}\n"]}
|
|
@@ -15906,17 +15906,17 @@ function exampleSetup(options) {
|
|
|
15906
15906
|
}
|
|
15907
15907
|
|
|
15908
15908
|
/**
|
|
15909
|
-
* Creates the
|
|
15909
|
+
* Creates the full menu for the text editor
|
|
15910
15910
|
* based on the default menu already in prosemirror-example-setup
|
|
15911
15911
|
* @param schema - the schema to use for the menu
|
|
15912
15912
|
*
|
|
15913
15913
|
* @returns the default menu for the text editor
|
|
15914
15914
|
*/
|
|
15915
|
-
const
|
|
15915
|
+
const buildFullMenu = (schema) => {
|
|
15916
15916
|
const menuItems = buildMenuItems(schema);
|
|
15917
15917
|
const { inlineMenu, insertHorizontalRule } = menuItems;
|
|
15918
15918
|
const typeMenu = getNewMenu(menuItems.typeMenu);
|
|
15919
|
-
const newHorizontalRule = new MenuItem(Object.assign(Object.assign({}, insertHorizontalRule.spec), { label: 'hr' }));
|
|
15919
|
+
const newHorizontalRule = new MenuItem(Object.assign(Object.assign({}, insertHorizontalRule.spec), { title: 'hr', label: 'hr' }));
|
|
15920
15920
|
const historyButtons = menuItems.fullMenu[2];
|
|
15921
15921
|
const blockMenu = getBlockMenu(menuItems.blockMenu);
|
|
15922
15922
|
return [
|
|
@@ -15938,6 +15938,88 @@ const getBlockMenu = (blockMenu) => {
|
|
|
15938
15938
|
return [...blockMenu[0].slice(0, 5)];
|
|
15939
15939
|
};
|
|
15940
15940
|
|
|
15941
|
+
/**
|
|
15942
|
+
* The available items for the editor toolbar
|
|
15943
|
+
* The values must match the titles of the menuItem
|
|
15944
|
+
*
|
|
15945
|
+
* {@link MenuItem.spec}
|
|
15946
|
+
*/
|
|
15947
|
+
const allItems = {
|
|
15948
|
+
strong: 'Toggle strong style',
|
|
15949
|
+
emphasis: 'Toggle emphasis',
|
|
15950
|
+
code: 'Toggle code font',
|
|
15951
|
+
link: 'Add or remove link',
|
|
15952
|
+
'horizontal rule': 'hr',
|
|
15953
|
+
paragraph: 'Change to paragraph',
|
|
15954
|
+
'code block': 'Change to code block',
|
|
15955
|
+
'heading 1': 'Change to heading 1',
|
|
15956
|
+
'heading 2': 'Change to heading 2',
|
|
15957
|
+
'heading 3': 'Change to heading 3',
|
|
15958
|
+
'heading 4': 'Change to heading 4',
|
|
15959
|
+
'heading 5': 'Change to heading 5',
|
|
15960
|
+
'heading 6': 'Change to heading 6',
|
|
15961
|
+
undo: 'Undo last change',
|
|
15962
|
+
redo: 'Redo last undone change',
|
|
15963
|
+
'bullet list': 'Wrap in bullet list',
|
|
15964
|
+
'ordered list': 'Wrap in ordered list',
|
|
15965
|
+
'block quote': 'Wrap in block quote',
|
|
15966
|
+
'join above': 'Join with above block',
|
|
15967
|
+
'lift out': 'Lift out of enclosing block',
|
|
15968
|
+
};
|
|
15969
|
+
const defaultItems = [
|
|
15970
|
+
'strong',
|
|
15971
|
+
'emphasis',
|
|
15972
|
+
'link',
|
|
15973
|
+
'heading 1',
|
|
15974
|
+
'heading 2',
|
|
15975
|
+
'heading 3',
|
|
15976
|
+
'heading 4',
|
|
15977
|
+
'heading 5',
|
|
15978
|
+
'heading 6',
|
|
15979
|
+
'block quote',
|
|
15980
|
+
'bullet list',
|
|
15981
|
+
'ordered list',
|
|
15982
|
+
];
|
|
15983
|
+
/**
|
|
15984
|
+
* Filters the full menu recursively based on the items provided
|
|
15985
|
+
*
|
|
15986
|
+
* @param menu - The menu to filter
|
|
15987
|
+
* @param items - The menu items to display. If undefined, all items will be displayed
|
|
15988
|
+
* @returns The filtered menu
|
|
15989
|
+
*/
|
|
15990
|
+
const getFilteredMenu = (menu, items) => {
|
|
15991
|
+
let menuItems = defaultItems.map((item) => allItems[item]);
|
|
15992
|
+
if (items !== undefined) {
|
|
15993
|
+
menuItems = menuItems.concat(items.map((item) => allItems[item]));
|
|
15994
|
+
}
|
|
15995
|
+
return menu
|
|
15996
|
+
.filter((item) => {
|
|
15997
|
+
if (isMenuItem(item)) {
|
|
15998
|
+
return Object.values(menuItems).includes(item.spec.title);
|
|
15999
|
+
}
|
|
16000
|
+
else if (isDropdown(item)) {
|
|
16001
|
+
return true;
|
|
16002
|
+
}
|
|
16003
|
+
return false;
|
|
16004
|
+
})
|
|
16005
|
+
.filter(Boolean)
|
|
16006
|
+
.map(createFilteredDropdown(items));
|
|
16007
|
+
};
|
|
16008
|
+
const createFilteredDropdown = (items) => (item) => {
|
|
16009
|
+
if (isDropdown(item)) {
|
|
16010
|
+
return new Dropdown(getFilteredMenu(item.content, items), {
|
|
16011
|
+
label: item.label,
|
|
16012
|
+
});
|
|
16013
|
+
}
|
|
16014
|
+
return item;
|
|
16015
|
+
};
|
|
16016
|
+
const isMenuItem = (item) => {
|
|
16017
|
+
return item.spec !== undefined;
|
|
16018
|
+
};
|
|
16019
|
+
const isDropdown = (item) => {
|
|
16020
|
+
return item.content !== undefined;
|
|
16021
|
+
};
|
|
16022
|
+
|
|
15941
16023
|
const textEditorCss = "@charset \"UTF-8\";:host{--mdc-theme-primary:var(\n --lime-primary-color,\n rgb(var(--color-teal-default))\n );--mdc-theme-secondary:var(\n --lime-secondary-color,\n rgb(var(--contrast-1100))\n );--mdc-theme-on-primary:var(\n --lime-on-primary-color,\n rgb(var(--contrast-100))\n );--mdc-theme-on-secondary:var(\n --lime-on-secondary-color,\n rgb(var(--contrast-100))\n );--mdc-theme-text-disabled-on-background:var(\n --lime-text-disabled-on-background-color,\n rgba(var(--contrast-1700), 0.38)\n );--mdc-theme-text-primary-on-background:var(\n --lime-text-primary-on-background-color,\n rgba(var(--contrast-1700), 0.87)\n );--mdc-theme-text-secondary-on-background:var(\n --lime-text-secondary-on-background-color,\n rgba(var(--contrast-1700), 0.54)\n );--mdc-theme-error:var(\n --lime-error-background-color,\n rgb(var(--color-red-dark))\n );--lime-error-text-color:rgb(var(--color-red-darker));--mdc-theme-surface:var(\n --lime-surface-background-color,\n rgb(var(--contrast-100))\n );--mdc-theme-on-surface:var(\n --lime-on-surface-color,\n rgb(var(--contrast-1500))\n )}:host(limel-text-editor){isolation:isolate;display:block}*{box-sizing:border-box}.ProseMirror-menubar-wrapper{transition:border 0.2s ease;display:grid;grid-template-rows:auto 1fr;border-radius:0.25rem;border:1px solid;border-color:rgba(var(--contrast-700), 0.65)}.ProseMirror-menubar-wrapper:hover{border-color:rgba(var(--contrast-700), 1)}.ProseMirror-menubar-wrapper:focus-within{border-color:var(--mdc-theme-primary)}.ProseMirror-textblock-dropdown{min-width:3em}.ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProseMirror{position:relative;word-wrap:break-word;white-space:pre-wrap;white-space:break-spaces;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;font-feature-settings:\"liga\" 0;border-bottom-left-radius:0.5rem;border-bottom-right-radius:0.5rem;padding:0.5rem 1rem;background-color:rgb(var(--contrast-100))}.ProseMirror [draggable][contenteditable=false]{user-select:text}.ProseMirror:focus-visible{outline:none}.ProseMirror-hideselection{caret-color:transparent}.ProseMirror-hideselection *::selection{background:transparent}.ProseMirror-hideselection *::-moz-selection{background:transparent}.ProseMirror-selectednode{outline:0.125rem solid rgb(var(--color-sky-light))}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:\"\";position:absolute;left:-2rem;right:-0.125rem;top:-0.125rem;bottom:-0.125rem;border:0.125rem solid rgb(var(--color-sky-light));pointer-events:none}img.ProseMirror-separator{display:inline !important;border:none !important;margin:0 !important}div#editor .ProseMirror-menubar{position:sticky !important;z-index:1;top:0}div#editor .ProseMirror-menubar[style*=\"position: fixed\"]{box-shadow:0 0.25rem 0.5rem -0.5rem rgb(var(--color-black), 0.8)}.ProseMirror-menubar{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:0.25rem;align-items:center;padding:0.125rem;background-color:rgb(var(--contrast-100));border-top-left-radius:0.5rem;border-top-right-radius:0.5rem}.ProseMirror-menuitem{position:relative;flex-shrink:0;display:flex;align-items:center;justify-content:center;white-space:nowrap;line-height:1;height:1.5rem;min-width:1.5rem;border-radius:0.25rem;color:rgb(var(--contrast-1100));font-size:0.8125rem}.ProseMirror-menuitem:not(:has(.ProseMirror-menu-disabled)){transition:color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease, transform 0.1s ease-out;cursor:pointer;color:var(--mdc-theme-on-surface);background-color:transparent}.ProseMirror-menuitem:not(:has(.ProseMirror-menu-disabled)):hover{color:var(--mdc-theme-on-surface);background-color:var(--lime-elevated-surface-background-color);box-shadow:var(--button-shadow-hovered)}.ProseMirror-menuitem:not(:has(.ProseMirror-menu-disabled)):active{box-shadow:var(--button-shadow-pressed);transform:translate3d(0, 0.08rem, 0)}.ProseMirror-menuitem:has(.ProseMirror-menu-active){box-shadow:var(--button-shadow-inset);color:var(--mdc-theme-primary)}.ProseMirror-menuitem:has(.ProseMirror-menu-active) svg{color:var(--mdc-theme-primary)}.ProseMirror-menuitem:has(.ProseMirror-menu-dropdown-menu){box-shadow:var(--button-shadow-inset)}.ProseMirror-menuitem svg{fill:currentColor;height:1rem;color:rgb(var(--contrast-1100))}.ProseMirror-menuseparator{border-radius:1rem;background-color:rgb(var(--contrast-600));width:0.125rem;height:1rem}.ProseMirror-menu-dropdown{position:relative;display:flex;align-items:center;gap:0.5rem;padding:0 0.5rem}.ProseMirror-menu-dropdown:after{content:\"\";border-left:0.25rem solid transparent;border-right:0.25rem solid transparent;border-top:0.25rem solid currentColor}.ProseMirror-menu-dropdown-menu,.ProseMirror-menu-submenu{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.ProseMirror-menu-dropdown-menu{position:absolute;top:100%;background:rgb(var(--contrast-100));border-radius:0.25rem;padding:0.125rem}.ProseMirror-menu-submenu{position:absolute;background:rgb(var(--contrast-100));border-radius:0.25rem;padding:0.125rem;display:none;min-width:4em;left:100%;top:-0.75rem}.ProseMirror-menu-dropdown-item{transition:background-color 0.2s ease;cursor:pointer;border-radius:0.375rem;min-height:2.5rem;display:flex;align-items:center;width:100%}.ProseMirror-menu-dropdown-item>div{padding:0 1rem;width:100%}.ProseMirror-menu-dropdown-item:not(:has(.ProseMirror-menu-disabled)):hover{background-color:rgb(var(--contrast-300))}.ProseMirror-menu-submenu-wrap{position:relative;margin-right:-0.25rem}.ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu{display:block}.ProseMirror-menu-submenu-label{position:relative;display:flex;align-items:center;justify-content:space-between;gap:0.5rem}.ProseMirror-menu-submenu-label:after{content:\"\";border-top:0.25rem solid transparent;border-bottom:0.25rem solid transparent;border-left:0.25rem solid currentColor}.ProseMirror-menu-disabled{opacity:0.3;cursor:default}.ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu{display:block}blockquote{position:relative;font-weight:100;font-size:0.875rem;max-width:100%;line-height:1.4;margin:0;padding:0.5rem 1.25rem;border-radius:0.05rem 0.75rem;background-color:rgb(var(--contrast-300))}blockquote:before,blockquote:after{position:absolute;font-size:2.75rem;opacity:0.4}blockquote:before{content:\"“\";left:0;top:-0.75rem}blockquote:after{content:\"”\";right:0;bottom:-2rem}:host(limel-markdown.truncate-paragraphs) p{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}p,li{font-size:0.875rem;word-break:break-word;hyphens:auto;-webkit-hyphens:auto}a{word-break:break-all}p{margin-top:0;margin-bottom:0.5rem}p:only-child{margin-bottom:0}a{transition:color 0.2s ease;color:var(--markdown-hyperlink-color, rgb(var(--color-blue-dark)));text-decoration:none}a:hover{color:var(--markdown-hyperlink-color--hovered, rgb(var(--color-blue-default)))}hr{margin:1.75rem 0 2rem 0;border-width:0;border-top:1px solid rgb(var(--contrast-500))}dl{display:grid;grid-template-columns:1fr 2fr;grid-template-rows:1fr;margin-bottom:2rem;border:1px solid rgb(var(--contrast-400));border-radius:0.375rem;background-color:rgb(var(--contrast-200))}dl dt,dl dd{padding:0.375rem 0.5rem;font-size:0.875rem;margin:0}dl dt:nth-of-type(even),dl dd:nth-of-type(even){background-color:rgb(var(--contrast-300))}dl dt:first-child{border-top-left-radius:0.375rem}dl dt:last-child{border-bottom-left-radius:0.375rem}dl dd:first-child{border-top-right-radius:0.375rem}dl dd:last-child{border-bottom-right-radius:0.375rem}h1{font-size:1.5rem}h2{font-size:1.25rem}h3{font-size:1.125rem}h4{font-size:1rem}h5{font-size:0.875rem}h6{font-size:0.75rem}h1,h2{margin-top:0.5rem;margin-bottom:0.5rem;letter-spacing:-0.03125rem;font-weight:500}h3,h4{margin-top:0.75rem;margin-bottom:0.25rem;font-weight:600}h5,h6{margin-top:0.5rem;margin-bottom:0.125rem;font-weight:600}h1,h2,h3,h4,h5,h6{word-break:break-word;hyphens:auto;-webkit-hyphens:auto}:not([contenteditable=true]) h1,:not([contenteditable=true]) h2,:not([contenteditable=true]) h3,:not([contenteditable=true]) h4,:not([contenteditable=true]) h5,:not([contenteditable=true]) h6{text-wrap:balance}[contenteditable=true] h1,[contenteditable=true] h2,[contenteditable=true] h3,[contenteditable=true] h4,[contenteditable=true] h5,[contenteditable=true] h6{text-wrap:initial}ul{list-style:none}ul li{position:relative;margin-left:0.75rem}ul li:before{content:\"\";position:absolute;left:-0.5rem;top:0.5rem;width:0.25rem;height:0.25rem;border-radius:50%;background-color:rgb(var(--contrast-700));display:block}ol{margin-top:0.25rem;padding-left:1rem}ul{margin-top:0.25rem;padding-left:0}ul ul,ul ol,ol ol,ol ul{margin-left:0}li{margin-bottom:0.25rem}code{font-family:ui-monospace, \"Cascadia Code\", \"Source Code Pro\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace;font-size:0.8125rem;letter-spacing:-0.0125rem;color:rgb(var(--contrast-1300));-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;display:inline-block;border-radius:0.25rem;padding:0.03125rem 0.25rem;background-color:rgb(var(--contrast-600))}pre>code{display:block;margin:0.5rem 0;padding:0.5rem 0.75rem;overflow:auto;white-space:pre-wrap}:host(limel-markdown:not(.no-table-styles)) table{table-layout:auto;min-width:100%;border-collapse:collapse;border-spacing:0;background:transparent;margin:0.75rem 0;border:1px solid rgb(var(--contrast-400))}:host(limel-markdown:not(.no-table-styles)) th,:host(limel-markdown:not(.no-table-styles)) td{text-align:left;vertical-align:top;transition:background-color 0.2s ease;font-size:0.875rem}:host(limel-markdown:not(.no-table-styles)) td{padding:0.5rem 0.375rem 0.75rem 0.375rem}:host(limel-markdown:not(.no-table-styles)) tr th{background-color:rgb(var(--contrast-400));padding:0.25rem 0.375rem;font-weight:normal}:host(limel-markdown:not(.no-table-styles)) tr th:only-child{text-align:center}:host(limel-markdown:not(.no-table-styles)) tbody tr:nth-child(odd) td{background-color:rgb(var(--contrast-200))}:host(limel-markdown:not(.no-table-styles)) tbody tr:hover td{background-color:rgb(var(--contrast-300))}";
|
|
15942
16024
|
|
|
15943
16025
|
const TextEditor = class {
|
|
@@ -15955,7 +16037,9 @@ const TextEditor = class {
|
|
|
15955
16037
|
nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),
|
|
15956
16038
|
marks: schema.spec.marks,
|
|
15957
16039
|
});
|
|
15958
|
-
const menu =
|
|
16040
|
+
const menu = buildFullMenu(mySchema)
|
|
16041
|
+
.map((items) => getFilteredMenu(items, undefined))
|
|
16042
|
+
.filter((items) => items.length);
|
|
15959
16043
|
this.view = new EditorView(this.host.shadowRoot.querySelector('#editor'), {
|
|
15960
16044
|
state: EditorState.create({
|
|
15961
16045
|
doc: DOMParser.fromSchema(mySchema).parse(this.host.shadowRoot.querySelector('#editor')),
|