@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.
@@ -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 default menu for the text editor
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 buildDefaultMenu = (schema) => {
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=default-menu.js.map
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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 { buildDefaultMenu } from './menu/default-menu';
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 = buildDefaultMenu(mySchema);
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,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;;;;;;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,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEzD,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 { buildDefaultMenu } from './menu/default-menu';\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[][] = buildDefaultMenu(mySchema);\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"]}
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 default menu for the text editor
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 buildDefaultMenu = (schema) => {
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 = buildDefaultMenu(mySchema);
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')),