@limetech/lime-elements 37.25.0 → 37.26.1

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 (100) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/{dom-ee8ee17d.js → debounce-2e5f4b7e.js} +1 -31
  3. package/dist/cjs/debounce-2e5f4b7e.js.map +1 -0
  4. package/dist/cjs/dom-81eaa633.js +34 -0
  5. package/dist/cjs/dom-81eaa633.js.map +1 -0
  6. package/dist/cjs/lime-elements.cjs.js +1 -1
  7. package/dist/cjs/{limel-action-bar-item_2.cjs.entry.js → limel-action-bar_3.cjs.entry.js} +106 -1
  8. package/dist/cjs/limel-action-bar_3.cjs.entry.js.map +1 -0
  9. package/dist/cjs/{limel-breadcrumbs_3.cjs.entry.js → limel-breadcrumbs_4.cjs.entry.js} +519 -20
  10. package/dist/cjs/limel-breadcrumbs_4.cjs.entry.js.map +1 -0
  11. package/dist/cjs/{limel-input-field_3.cjs.entry.js → limel-dynamic-label_4.cjs.entry.js} +75 -494
  12. package/dist/cjs/limel-dynamic-label_4.cjs.entry.js.map +1 -0
  13. package/dist/cjs/limel-picker.cjs.entry.js +3 -2
  14. package/dist/cjs/limel-picker.cjs.entry.js.map +1 -1
  15. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +153 -116
  16. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js.map +1 -1
  17. package/dist/cjs/limel-text-editor.cjs.entry.js +4 -1
  18. package/dist/cjs/limel-text-editor.cjs.entry.js.map +1 -1
  19. package/dist/cjs/loader.cjs.js +1 -1
  20. package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-commands.js +77 -0
  21. package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-commands.js.map +1 -0
  22. package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-items.js +53 -0
  23. package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-items.js.map +1 -0
  24. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +34 -9
  25. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js.map +1 -1
  26. package/dist/collection/components/text-editor/text-editor.css +88 -0
  27. package/dist/collection/components/text-editor/text-editor.js +3 -0
  28. package/dist/collection/components/text-editor/text-editor.js.map +1 -1
  29. package/dist/esm/{dom-ae531ebc.js → debounce-9a05c91c.js} +2 -31
  30. package/dist/esm/debounce-9a05c91c.js.map +1 -0
  31. package/dist/esm/dom-0b0170a0.js +32 -0
  32. package/dist/esm/dom-0b0170a0.js.map +1 -0
  33. package/dist/esm/lime-elements.js +1 -1
  34. package/dist/esm/{limel-action-bar-item_2.entry.js → limel-action-bar_3.entry.js} +107 -3
  35. package/dist/esm/limel-action-bar_3.entry.js.map +1 -0
  36. package/dist/esm/{limel-breadcrumbs_3.entry.js → limel-breadcrumbs_4.entry.js} +501 -3
  37. package/dist/esm/limel-breadcrumbs_4.entry.js.map +1 -0
  38. package/dist/esm/{limel-input-field_3.entry.js → limel-dynamic-label_4.entry.js} +70 -490
  39. package/dist/esm/limel-dynamic-label_4.entry.js.map +1 -0
  40. package/dist/esm/limel-picker.entry.js +2 -1
  41. package/dist/esm/limel-picker.entry.js.map +1 -1
  42. package/dist/esm/limel-prosemirror-adapter.entry.js +153 -116
  43. package/dist/esm/limel-prosemirror-adapter.entry.js.map +1 -1
  44. package/dist/esm/limel-text-editor.entry.js +4 -1
  45. package/dist/esm/limel-text-editor.entry.js.map +1 -1
  46. package/dist/esm/loader.js +1 -1
  47. package/dist/lime-elements/lime-elements.esm.js +1 -1
  48. package/dist/lime-elements/lime-elements.esm.js.map +1 -1
  49. package/dist/lime-elements/p-18c97232.js +2 -0
  50. package/dist/lime-elements/p-18c97232.js.map +1 -0
  51. package/dist/lime-elements/p-2bff59a1.entry.js +2 -0
  52. package/dist/lime-elements/p-2bff59a1.entry.js.map +1 -0
  53. package/dist/lime-elements/p-3ab8d3e9.entry.js +68 -0
  54. package/dist/lime-elements/p-3ab8d3e9.entry.js.map +1 -0
  55. package/dist/lime-elements/p-5e7b7b03.js +2 -0
  56. package/dist/lime-elements/p-5e7b7b03.js.map +1 -0
  57. package/dist/lime-elements/p-5fcdb9d2.entry.js +2 -0
  58. package/dist/lime-elements/{p-3e90be0a.entry.js.map → p-5fcdb9d2.entry.js.map} +1 -1
  59. package/dist/lime-elements/p-6ebde4a2.entry.js +2 -0
  60. package/dist/lime-elements/p-6ebde4a2.entry.js.map +1 -0
  61. package/dist/lime-elements/{p-60317f5c.entry.js → p-db7ce0f8.entry.js} +2 -2
  62. package/dist/lime-elements/p-db7ce0f8.entry.js.map +1 -0
  63. package/dist/lime-elements/p-e4424368.entry.js +2 -0
  64. package/dist/lime-elements/p-e4424368.entry.js.map +1 -0
  65. package/dist/types/components/text-editor/prosemirror-adapter/menu/menu-commands.d.ts +12 -0
  66. package/dist/types/components/text-editor/prosemirror-adapter/menu/menu-items.d.ts +4 -0
  67. package/dist/types/components/text-editor/prosemirror-adapter/prosemirror-adapter.d.ts +4 -1
  68. package/package.json +2 -2
  69. package/dist/cjs/dom-ee8ee17d.js.map +0 -1
  70. package/dist/cjs/limel-action-bar-item_2.cjs.entry.js.map +0 -1
  71. package/dist/cjs/limel-action-bar.cjs.entry.js +0 -113
  72. package/dist/cjs/limel-action-bar.cjs.entry.js.map +0 -1
  73. package/dist/cjs/limel-breadcrumbs_3.cjs.entry.js.map +0 -1
  74. package/dist/cjs/limel-dynamic-label_2.cjs.entry.js +0 -91
  75. package/dist/cjs/limel-dynamic-label_2.cjs.entry.js.map +0 -1
  76. package/dist/cjs/limel-input-field_3.cjs.entry.js.map +0 -1
  77. package/dist/esm/dom-ae531ebc.js.map +0 -1
  78. package/dist/esm/limel-action-bar-item_2.entry.js.map +0 -1
  79. package/dist/esm/limel-action-bar.entry.js +0 -109
  80. package/dist/esm/limel-action-bar.entry.js.map +0 -1
  81. package/dist/esm/limel-breadcrumbs_3.entry.js.map +0 -1
  82. package/dist/esm/limel-dynamic-label_2.entry.js +0 -86
  83. package/dist/esm/limel-dynamic-label_2.entry.js.map +0 -1
  84. package/dist/esm/limel-input-field_3.entry.js.map +0 -1
  85. package/dist/lime-elements/p-3e90be0a.entry.js +0 -2
  86. package/dist/lime-elements/p-497a0b69.entry.js +0 -68
  87. package/dist/lime-elements/p-497a0b69.entry.js.map +0 -1
  88. package/dist/lime-elements/p-60317f5c.entry.js.map +0 -1
  89. package/dist/lime-elements/p-6eeb61e4.entry.js +0 -2
  90. package/dist/lime-elements/p-6eeb61e4.entry.js.map +0 -1
  91. package/dist/lime-elements/p-714d6937.js +0 -2
  92. package/dist/lime-elements/p-714d6937.js.map +0 -1
  93. package/dist/lime-elements/p-a2d19673.entry.js +0 -2
  94. package/dist/lime-elements/p-a2d19673.entry.js.map +0 -1
  95. package/dist/lime-elements/p-af964180.entry.js +0 -2
  96. package/dist/lime-elements/p-af964180.entry.js.map +0 -1
  97. package/dist/lime-elements/p-da62cd3f.entry.js +0 -2
  98. package/dist/lime-elements/p-da62cd3f.entry.js.map +0 -1
  99. package/dist/lime-elements/p-f1e1f867.entry.js +0 -2
  100. package/dist/lime-elements/p-f1e1f867.entry.js.map +0 -1
@@ -15905,120 +15905,133 @@ function exampleSetup(options) {
15905
15905
  }));
15906
15906
  }
15907
15907
 
15908
- /**
15909
- * Creates the full menu for the text editor
15910
- * based on the default menu already in prosemirror-example-setup
15911
- * @param schema - the schema to use for the menu
15912
- *
15913
- * @returns the default menu for the text editor
15914
- */
15915
- const buildFullMenu = (schema) => {
15916
- const menuItems = buildMenuItems(schema);
15917
- const { inlineMenu, insertHorizontalRule } = menuItems;
15918
- const typeMenu = getNewMenu(menuItems.typeMenu);
15919
- const newHorizontalRule = new MenuItem(Object.assign(Object.assign({}, insertHorizontalRule.spec), { title: 'hr', label: 'hr' }));
15920
- const historyButtons = menuItems.fullMenu[2];
15921
- const blockMenu = getBlockMenu(menuItems.blockMenu);
15922
- return [
15923
- inlineMenu[0],
15924
- [newHorizontalRule],
15925
- ...typeMenu,
15926
- historyButtons,
15927
- blockMenu,
15928
- ];
15929
- };
15930
- const getNewMenu = (typeMenu) => {
15931
- const headingDropdown = new Dropdown(typeMenu.content[2].content, {
15932
- label: 'H',
15933
- });
15934
- return [[typeMenu.content[0], typeMenu.content[1]], [headingDropdown]];
15935
- };
15936
- const getBlockMenu = (blockMenu) => {
15937
- // eslint-disable-next-line no-magic-numbers
15938
- return [...blockMenu[0].slice(0, 5)];
15939
- };
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]));
15908
+ class MenuCommandFactory {
15909
+ constructor(schema) {
15910
+ this.markNames = {
15911
+ bold: 'strong',
15912
+ italic: 'em',
15913
+ underline: 'underline',
15914
+ blockquote: 'blockquote',
15915
+ headerlevel1: 'headerlevel1',
15916
+ headerlevel2: 'headerlevel2',
15917
+ headerlevel3: 'headerlevel3',
15918
+ addorremovelink: 'link',
15919
+ numberedlist: 'ordered_list',
15920
+ list: 'bullet_list',
15921
+ };
15922
+ this.schema = schema;
15923
+ }
15924
+ createCommand(mark) {
15925
+ if (this.markNames[mark]) {
15926
+ mark = this.markNames[mark];
15927
+ }
15928
+ switch (mark) {
15929
+ case 'strong':
15930
+ case 'em':
15931
+ case 'underline':
15932
+ return this.createToggleMarkCommand(mark);
15933
+ case 'paragraph':
15934
+ return this.createSetNodeTypeCommand(mark);
15935
+ case 'headerlevel1':
15936
+ case 'headerlevel2':
15937
+ case 'headerlevel3':
15938
+ return this.createSetNodeTypeCommand('heading', parseInt(mark[mark.length - 1], 10));
15939
+ case 'blockquote':
15940
+ return this.createWrapInCommand(mark);
15941
+ case 'ordered_list':
15942
+ case 'bullet_list':
15943
+ return this.createListCommand(mark);
15944
+ default:
15945
+ throw new Error(`The Mark "${mark}" is not supported`);
15946
+ }
15994
15947
  }
15995
- return menu
15996
- .filter((item) => {
15997
- if (isMenuItem(item)) {
15998
- return Object.values(menuItems).includes(item.spec.title);
15948
+ createToggleMarkCommand(markName) {
15949
+ const markType = this.schema.marks[markName];
15950
+ if (!markType) {
15951
+ throw new Error(`Mark "${markName}" not found in schema`);
15999
15952
  }
16000
- else if (isDropdown(item)) {
16001
- return true;
15953
+ return toggleMark(markType);
15954
+ }
15955
+ createSetNodeTypeCommand(nodeType, level) {
15956
+ const type = this.schema.nodes[nodeType];
15957
+ if (!type) {
15958
+ throw new Error(`Node type "${nodeType}" not found in schema`);
15959
+ }
15960
+ if (nodeType === 'heading' && level) {
15961
+ return setBlockType(type, { level: level });
15962
+ }
15963
+ else {
15964
+ return setBlockType(type);
16002
15965
  }
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
15966
  }
16014
- return item;
16015
- };
16016
- const isMenuItem = (item) => {
16017
- return item.spec !== undefined;
16018
- };
16019
- const isDropdown = (item) => {
16020
- return item.content !== undefined;
16021
- };
15967
+ createWrapInCommand(nodeType) {
15968
+ const type = this.schema.nodes[nodeType];
15969
+ if (!type) {
15970
+ throw new Error(`Node type "${nodeType}" not found in schema`);
15971
+ }
15972
+ return wrapIn(type);
15973
+ }
15974
+ createListCommand(listType) {
15975
+ const type = this.schema.nodes[listType];
15976
+ if (!type) {
15977
+ throw new Error(`List type "${listType}" not found in schema`);
15978
+ }
15979
+ return wrapInList(type);
15980
+ }
15981
+ }
15982
+
15983
+ const textEditorMenuItems = [
15984
+ {
15985
+ text: 'Bold',
15986
+ commandText: '⌘ B',
15987
+ icon: 'bold',
15988
+ iconOnly: true,
15989
+ },
15990
+ {
15991
+ text: 'Italic',
15992
+ commandText: '⌘ I',
15993
+ icon: 'italic',
15994
+ iconOnly: true,
15995
+ },
15996
+ {
15997
+ text: 'Add or remove link',
15998
+ commandText: '⌘ shift U',
15999
+ icon: 'link',
16000
+ iconOnly: true,
16001
+ },
16002
+ { separator: true },
16003
+ {
16004
+ text: 'Header Level 1',
16005
+ icon: 'header_1',
16006
+ iconOnly: true,
16007
+ },
16008
+ {
16009
+ text: 'Header Level 2',
16010
+ icon: 'header_2',
16011
+ iconOnly: true,
16012
+ },
16013
+ {
16014
+ text: 'Header Level 3',
16015
+ icon: 'header_3',
16016
+ iconOnly: true,
16017
+ },
16018
+ { separator: true },
16019
+ {
16020
+ text: 'List',
16021
+ icon: 'list',
16022
+ iconOnly: true,
16023
+ },
16024
+ {
16025
+ text: 'Numbered list',
16026
+ icon: 'numbered_list',
16027
+ iconOnly: true,
16028
+ },
16029
+ {
16030
+ text: 'Blockquote',
16031
+ icon: 'quote_right',
16032
+ iconOnly: true,
16033
+ },
16034
+ ];
16022
16035
 
16023
16036
  const prosemirrorAdapterCss = "@charset \"UTF-8\";:host(limel-prosemirror-adapter){isolation:isolate;display:block}*{box-sizing:border-box}.ProseMirror-menubar-wrapper{display:grid;grid-template-rows:auto 1fr}.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;padding-top:0.75rem}.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}: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 )}div#editor .ProseMirror-menubar{position:sticky !important;z-index:1;top:0;margin-left:-0.75rem;margin-right:-0.75rem;background-color:rgba(var(--contrast-200), 0.5);backdrop-filter:blur(0.25rem);-webkit-backdrop-filter:blur(0.25rem)}div#editor .ProseMirror-menubar[style*=\"position: fixed\"]{box-shadow:0 0.25rem 0.5rem -0.5rem rgb(var(--color-black), 0.8)}div#editor .ProseMirror-menubar-spacer{display:none}.ProseMirror-menubar{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:0.25rem;align-items:center;padding:0.125rem;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))}";
16024
16037
 
@@ -16034,27 +16047,37 @@ const ProsemirrorAdapter = class {
16034
16047
  return this.view.dom.innerHTML;
16035
16048
  }
16036
16049
  };
16050
+ this.handleActionBarItem = (event) => {
16051
+ event.preventDefault();
16052
+ const { text } = event.detail;
16053
+ const mark = text.replace(/\s/g, '').toLowerCase();
16054
+ try {
16055
+ const command = this.menuCommandFactory.createCommand(mark);
16056
+ this.executeCommand(command);
16057
+ }
16058
+ catch (error) {
16059
+ throw new Error(`Error executing command: ${error}`);
16060
+ }
16061
+ };
16037
16062
  this.value = undefined;
16038
16063
  this.view = undefined;
16064
+ this.actionBarItems = [];
16039
16065
  }
16040
- componentWillLoad() { }
16041
16066
  render() {
16042
- return h("div", { id: "editor" });
16067
+ return (h("div", null, h("limel-action-bar", { accessibleLabel: "Toolbar", actions: this.actionBarItems, layout: "fullWidth", onItemSelected: this.handleActionBarItem }), h("div", { id: "editor" })));
16043
16068
  }
16044
16069
  componentDidLoad() {
16070
+ this.actionBarItems = textEditorMenuItems;
16045
16071
  const mySchema = new Schema({
16046
16072
  nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),
16047
16073
  marks: schema.spec.marks,
16048
16074
  });
16049
- const menu = buildFullMenu(mySchema)
16050
- .map((items) => getFilteredMenu(items, undefined))
16051
- .filter((items) => items.length);
16052
16075
  this.view = new EditorView(this.host.shadowRoot.querySelector('#editor'), {
16053
16076
  state: EditorState.create({
16054
16077
  doc: DOMParser.fromSchema(mySchema).parse(this.host.shadowRoot.querySelector('#editor')),
16055
16078
  plugins: exampleSetup({
16056
16079
  schema: mySchema,
16057
- menuContent: menu,
16080
+ menuBar: false,
16058
16081
  }),
16059
16082
  }),
16060
16083
  dispatchTransaction: (transaction) => {
@@ -16063,10 +16086,24 @@ const ProsemirrorAdapter = class {
16063
16086
  this.change.emit(this.getHTML());
16064
16087
  },
16065
16088
  });
16089
+ this.menuCommandFactory = new MenuCommandFactory(mySchema);
16066
16090
  if (this.value) {
16067
16091
  this.view.dom.innerHTML = this.value;
16068
16092
  }
16069
16093
  }
16094
+ executeCommand(command) {
16095
+ const { state } = this.view;
16096
+ const selection = state.selection;
16097
+ let transaction = state.tr;
16098
+ if (!selection.empty) {
16099
+ transaction.setSelection(selection);
16100
+ }
16101
+ command(state, (tr) => {
16102
+ transaction = tr;
16103
+ });
16104
+ this.view.dispatch(transaction);
16105
+ this.view.focus();
16106
+ }
16070
16107
  get host() { return getElement(this); }
16071
16108
  };
16072
16109
  ProsemirrorAdapter.style = prosemirrorAdapterCss;