@limetech/lime-elements 37.24.0 → 37.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +21 -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 +154 -117
  16. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js.map +1 -1
  17. package/dist/cjs/limel-text-editor.cjs.entry.js +8 -2
  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.css +73 -82
  25. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +34 -9
  26. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js.map +1 -1
  27. package/dist/collection/components/text-editor/text-editor.css +172 -4
  28. package/dist/collection/components/text-editor/text-editor.js +7 -1
  29. package/dist/collection/components/text-editor/text-editor.js.map +1 -1
  30. package/dist/collection/style/internal/fieldset.scss +62 -0
  31. package/dist/esm/{dom-ae531ebc.js → debounce-9a05c91c.js} +2 -31
  32. package/dist/esm/debounce-9a05c91c.js.map +1 -0
  33. package/dist/esm/dom-0b0170a0.js +32 -0
  34. package/dist/esm/dom-0b0170a0.js.map +1 -0
  35. package/dist/esm/lime-elements.js +1 -1
  36. package/dist/esm/{limel-action-bar-item_2.entry.js → limel-action-bar_3.entry.js} +107 -3
  37. package/dist/esm/limel-action-bar_3.entry.js.map +1 -0
  38. package/dist/esm/{limel-breadcrumbs_3.entry.js → limel-breadcrumbs_4.entry.js} +501 -3
  39. package/dist/esm/limel-breadcrumbs_4.entry.js.map +1 -0
  40. package/dist/esm/{limel-input-field_3.entry.js → limel-dynamic-label_4.entry.js} +70 -490
  41. package/dist/esm/limel-dynamic-label_4.entry.js.map +1 -0
  42. package/dist/esm/limel-picker.entry.js +2 -1
  43. package/dist/esm/limel-picker.entry.js.map +1 -1
  44. package/dist/esm/limel-prosemirror-adapter.entry.js +154 -117
  45. package/dist/esm/limel-prosemirror-adapter.entry.js.map +1 -1
  46. package/dist/esm/limel-text-editor.entry.js +8 -2
  47. package/dist/esm/limel-text-editor.entry.js.map +1 -1
  48. package/dist/esm/loader.js +1 -1
  49. package/dist/lime-elements/lime-elements.esm.js +1 -1
  50. package/dist/lime-elements/lime-elements.esm.js.map +1 -1
  51. package/dist/lime-elements/p-18c97232.js +2 -0
  52. package/dist/lime-elements/p-18c97232.js.map +1 -0
  53. package/dist/lime-elements/p-2bff59a1.entry.js +2 -0
  54. package/dist/lime-elements/p-2bff59a1.entry.js.map +1 -0
  55. package/dist/lime-elements/p-3ab8d3e9.entry.js +68 -0
  56. package/dist/lime-elements/p-3ab8d3e9.entry.js.map +1 -0
  57. package/dist/lime-elements/p-5e7b7b03.js +2 -0
  58. package/dist/lime-elements/p-5e7b7b03.js.map +1 -0
  59. package/dist/lime-elements/p-5fcdb9d2.entry.js +2 -0
  60. package/dist/lime-elements/{p-3e90be0a.entry.js.map → p-5fcdb9d2.entry.js.map} +1 -1
  61. package/dist/lime-elements/{p-5b2e8739.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/lime-elements/p-f1e1f867.entry.js +2 -0
  66. package/dist/lime-elements/p-f1e1f867.entry.js.map +1 -0
  67. package/dist/lime-elements/style/internal/fieldset.scss +62 -0
  68. package/dist/types/components/text-editor/prosemirror-adapter/menu/menu-commands.d.ts +12 -0
  69. package/dist/types/components/text-editor/prosemirror-adapter/menu/menu-items.d.ts +4 -0
  70. package/dist/types/components/text-editor/prosemirror-adapter/prosemirror-adapter.d.ts +4 -1
  71. package/dist/types/components/text-editor/text-editor.d.ts +1 -0
  72. package/package.json +3 -3
  73. package/dist/cjs/dom-ee8ee17d.js.map +0 -1
  74. package/dist/cjs/limel-action-bar-item_2.cjs.entry.js.map +0 -1
  75. package/dist/cjs/limel-action-bar.cjs.entry.js +0 -113
  76. package/dist/cjs/limel-action-bar.cjs.entry.js.map +0 -1
  77. package/dist/cjs/limel-breadcrumbs_3.cjs.entry.js.map +0 -1
  78. package/dist/cjs/limel-dynamic-label_2.cjs.entry.js +0 -91
  79. package/dist/cjs/limel-dynamic-label_2.cjs.entry.js.map +0 -1
  80. package/dist/cjs/limel-input-field_3.cjs.entry.js.map +0 -1
  81. package/dist/esm/dom-ae531ebc.js.map +0 -1
  82. package/dist/esm/limel-action-bar-item_2.entry.js.map +0 -1
  83. package/dist/esm/limel-action-bar.entry.js +0 -109
  84. package/dist/esm/limel-action-bar.entry.js.map +0 -1
  85. package/dist/esm/limel-breadcrumbs_3.entry.js.map +0 -1
  86. package/dist/esm/limel-dynamic-label_2.entry.js +0 -86
  87. package/dist/esm/limel-dynamic-label_2.entry.js.map +0 -1
  88. package/dist/esm/limel-input-field_3.entry.js.map +0 -1
  89. package/dist/lime-elements/p-3e90be0a.entry.js +0 -2
  90. package/dist/lime-elements/p-497a0b69.entry.js +0 -68
  91. package/dist/lime-elements/p-497a0b69.entry.js.map +0 -1
  92. package/dist/lime-elements/p-5b2e8739.entry.js.map +0 -1
  93. package/dist/lime-elements/p-6eeb61e4.entry.js +0 -2
  94. package/dist/lime-elements/p-6eeb61e4.entry.js.map +0 -1
  95. package/dist/lime-elements/p-714d6937.js +0 -2
  96. package/dist/lime-elements/p-714d6937.js.map +0 -1
  97. package/dist/lime-elements/p-a2d19673.entry.js +0 -2
  98. package/dist/lime-elements/p-a2d19673.entry.js.map +0 -1
  99. package/dist/lime-elements/p-af964180.entry.js +0 -2
  100. package/dist/lime-elements/p-af964180.entry.js.map +0 -1
  101. package/dist/lime-elements/p-caf959fe.entry.js +0 -2
  102. package/dist/lime-elements/p-caf959fe.entry.js.map +0 -1
  103. package/dist/lime-elements/p-da62cd3f.entry.js +0 -2
  104. package/dist/lime-elements/p-da62cd3f.entry.js.map +0 -1
@@ -15909,122 +15909,135 @@ function exampleSetup(options) {
15909
15909
  }));
15910
15910
  }
15911
15911
 
15912
- /**
15913
- * Creates the full menu for the text editor
15914
- * based on the default menu already in prosemirror-example-setup
15915
- * @param schema - the schema to use for the menu
15916
- *
15917
- * @returns the default menu for the text editor
15918
- */
15919
- const buildFullMenu = (schema) => {
15920
- const menuItems = buildMenuItems(schema);
15921
- const { inlineMenu, insertHorizontalRule } = menuItems;
15922
- const typeMenu = getNewMenu(menuItems.typeMenu);
15923
- const newHorizontalRule = new MenuItem(Object.assign(Object.assign({}, insertHorizontalRule.spec), { title: 'hr', label: 'hr' }));
15924
- const historyButtons = menuItems.fullMenu[2];
15925
- const blockMenu = getBlockMenu(menuItems.blockMenu);
15926
- return [
15927
- inlineMenu[0],
15928
- [newHorizontalRule],
15929
- ...typeMenu,
15930
- historyButtons,
15931
- blockMenu,
15932
- ];
15933
- };
15934
- const getNewMenu = (typeMenu) => {
15935
- const headingDropdown = new Dropdown(typeMenu.content[2].content, {
15936
- label: 'H',
15937
- });
15938
- return [[typeMenu.content[0], typeMenu.content[1]], [headingDropdown]];
15939
- };
15940
- const getBlockMenu = (blockMenu) => {
15941
- // eslint-disable-next-line no-magic-numbers
15942
- return [...blockMenu[0].slice(0, 5)];
15943
- };
15944
-
15945
- /**
15946
- * The available items for the editor toolbar
15947
- * The values must match the titles of the menuItem
15948
- *
15949
- * {@link MenuItem.spec}
15950
- */
15951
- const allItems = {
15952
- strong: 'Toggle strong style',
15953
- emphasis: 'Toggle emphasis',
15954
- code: 'Toggle code font',
15955
- link: 'Add or remove link',
15956
- 'horizontal rule': 'hr',
15957
- paragraph: 'Change to paragraph',
15958
- 'code block': 'Change to code block',
15959
- 'heading 1': 'Change to heading 1',
15960
- 'heading 2': 'Change to heading 2',
15961
- 'heading 3': 'Change to heading 3',
15962
- 'heading 4': 'Change to heading 4',
15963
- 'heading 5': 'Change to heading 5',
15964
- 'heading 6': 'Change to heading 6',
15965
- undo: 'Undo last change',
15966
- redo: 'Redo last undone change',
15967
- 'bullet list': 'Wrap in bullet list',
15968
- 'ordered list': 'Wrap in ordered list',
15969
- 'block quote': 'Wrap in block quote',
15970
- 'join above': 'Join with above block',
15971
- 'lift out': 'Lift out of enclosing block',
15972
- };
15973
- const defaultItems = [
15974
- 'strong',
15975
- 'emphasis',
15976
- 'link',
15977
- 'heading 1',
15978
- 'heading 2',
15979
- 'heading 3',
15980
- 'heading 4',
15981
- 'heading 5',
15982
- 'heading 6',
15983
- 'block quote',
15984
- 'bullet list',
15985
- 'ordered list',
15986
- ];
15987
- /**
15988
- * Filters the full menu recursively based on the items provided
15989
- *
15990
- * @param menu - The menu to filter
15991
- * @param items - The menu items to display. If undefined, all items will be displayed
15992
- * @returns The filtered menu
15993
- */
15994
- const getFilteredMenu = (menu, items) => {
15995
- let menuItems = defaultItems.map((item) => allItems[item]);
15996
- if (items !== undefined) {
15997
- menuItems = menuItems.concat(items.map((item) => allItems[item]));
15912
+ class MenuCommandFactory {
15913
+ constructor(schema) {
15914
+ this.markNames = {
15915
+ bold: 'strong',
15916
+ italic: 'em',
15917
+ underline: 'underline',
15918
+ blockquote: 'blockquote',
15919
+ headerlevel1: 'headerlevel1',
15920
+ headerlevel2: 'headerlevel2',
15921
+ headerlevel3: 'headerlevel3',
15922
+ addorremovelink: 'link',
15923
+ numberedlist: 'ordered_list',
15924
+ list: 'bullet_list',
15925
+ };
15926
+ this.schema = schema;
15927
+ }
15928
+ createCommand(mark) {
15929
+ if (this.markNames[mark]) {
15930
+ mark = this.markNames[mark];
15931
+ }
15932
+ switch (mark) {
15933
+ case 'strong':
15934
+ case 'em':
15935
+ case 'underline':
15936
+ return this.createToggleMarkCommand(mark);
15937
+ case 'paragraph':
15938
+ return this.createSetNodeTypeCommand(mark);
15939
+ case 'headerlevel1':
15940
+ case 'headerlevel2':
15941
+ case 'headerlevel3':
15942
+ return this.createSetNodeTypeCommand('heading', parseInt(mark[mark.length - 1], 10));
15943
+ case 'blockquote':
15944
+ return this.createWrapInCommand(mark);
15945
+ case 'ordered_list':
15946
+ case 'bullet_list':
15947
+ return this.createListCommand(mark);
15948
+ default:
15949
+ throw new Error(`The Mark "${mark}" is not supported`);
15950
+ }
15998
15951
  }
15999
- return menu
16000
- .filter((item) => {
16001
- if (isMenuItem(item)) {
16002
- return Object.values(menuItems).includes(item.spec.title);
15952
+ createToggleMarkCommand(markName) {
15953
+ const markType = this.schema.marks[markName];
15954
+ if (!markType) {
15955
+ throw new Error(`Mark "${markName}" not found in schema`);
16003
15956
  }
16004
- else if (isDropdown(item)) {
16005
- return true;
15957
+ return toggleMark(markType);
15958
+ }
15959
+ createSetNodeTypeCommand(nodeType, level) {
15960
+ const type = this.schema.nodes[nodeType];
15961
+ if (!type) {
15962
+ throw new Error(`Node type "${nodeType}" not found in schema`);
15963
+ }
15964
+ if (nodeType === 'heading' && level) {
15965
+ return setBlockType(type, { level: level });
15966
+ }
15967
+ else {
15968
+ return setBlockType(type);
16006
15969
  }
16007
- return false;
16008
- })
16009
- .filter(Boolean)
16010
- .map(createFilteredDropdown(items));
16011
- };
16012
- const createFilteredDropdown = (items) => (item) => {
16013
- if (isDropdown(item)) {
16014
- return new Dropdown(getFilteredMenu(item.content, items), {
16015
- label: item.label,
16016
- });
16017
15970
  }
16018
- return item;
16019
- };
16020
- const isMenuItem = (item) => {
16021
- return item.spec !== undefined;
16022
- };
16023
- const isDropdown = (item) => {
16024
- return item.content !== undefined;
16025
- };
15971
+ createWrapInCommand(nodeType) {
15972
+ const type = this.schema.nodes[nodeType];
15973
+ if (!type) {
15974
+ throw new Error(`Node type "${nodeType}" not found in schema`);
15975
+ }
15976
+ return wrapIn(type);
15977
+ }
15978
+ createListCommand(listType) {
15979
+ const type = this.schema.nodes[listType];
15980
+ if (!type) {
15981
+ throw new Error(`List type "${listType}" not found in schema`);
15982
+ }
15983
+ return wrapInList(type);
15984
+ }
15985
+ }
16026
15986
 
16027
- const prosemirrorAdapterCss = "@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:var(--limel-text-editor-padding);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)}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;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))}";
15987
+ const textEditorMenuItems = [
15988
+ {
15989
+ text: 'Bold',
15990
+ commandText: '⌘ B',
15991
+ icon: 'bold',
15992
+ iconOnly: true,
15993
+ },
15994
+ {
15995
+ text: 'Italic',
15996
+ commandText: '⌘ I',
15997
+ icon: 'italic',
15998
+ iconOnly: true,
15999
+ },
16000
+ {
16001
+ text: 'Add or remove link',
16002
+ commandText: '⌘ shift U',
16003
+ icon: 'link',
16004
+ iconOnly: true,
16005
+ },
16006
+ { separator: true },
16007
+ {
16008
+ text: 'Header Level 1',
16009
+ icon: 'header_1',
16010
+ iconOnly: true,
16011
+ },
16012
+ {
16013
+ text: 'Header Level 2',
16014
+ icon: 'header_2',
16015
+ iconOnly: true,
16016
+ },
16017
+ {
16018
+ text: 'Header Level 3',
16019
+ icon: 'header_3',
16020
+ iconOnly: true,
16021
+ },
16022
+ { separator: true },
16023
+ {
16024
+ text: 'List',
16025
+ icon: 'list',
16026
+ iconOnly: true,
16027
+ },
16028
+ {
16029
+ text: 'Numbered list',
16030
+ icon: 'numbered_list',
16031
+ iconOnly: true,
16032
+ },
16033
+ {
16034
+ text: 'Blockquote',
16035
+ icon: 'quote_right',
16036
+ iconOnly: true,
16037
+ },
16038
+ ];
16039
+
16040
+ 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))}";
16028
16041
 
16029
16042
  const ProsemirrorAdapter = class {
16030
16043
  constructor(hostRef) {
@@ -16038,27 +16051,37 @@ const ProsemirrorAdapter = class {
16038
16051
  return this.view.dom.innerHTML;
16039
16052
  }
16040
16053
  };
16054
+ this.handleActionBarItem = (event) => {
16055
+ event.preventDefault();
16056
+ const { text } = event.detail;
16057
+ const mark = text.replace(/\s/g, '').toLowerCase();
16058
+ try {
16059
+ const command = this.menuCommandFactory.createCommand(mark);
16060
+ this.executeCommand(command);
16061
+ }
16062
+ catch (error) {
16063
+ throw new Error(`Error executing command: ${error}`);
16064
+ }
16065
+ };
16041
16066
  this.value = undefined;
16042
16067
  this.view = undefined;
16068
+ this.actionBarItems = [];
16043
16069
  }
16044
- componentWillLoad() { }
16045
16070
  render() {
16046
- return index.h("div", { id: "editor" });
16071
+ return (index.h("div", null, index.h("limel-action-bar", { accessibleLabel: "Toolbar", actions: this.actionBarItems, layout: "fullWidth", onItemSelected: this.handleActionBarItem }), index.h("div", { id: "editor" })));
16047
16072
  }
16048
16073
  componentDidLoad() {
16074
+ this.actionBarItems = textEditorMenuItems;
16049
16075
  const mySchema = new Schema({
16050
16076
  nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),
16051
16077
  marks: schema.spec.marks,
16052
16078
  });
16053
- const menu = buildFullMenu(mySchema)
16054
- .map((items) => getFilteredMenu(items, undefined))
16055
- .filter((items) => items.length);
16056
16079
  this.view = new EditorView(this.host.shadowRoot.querySelector('#editor'), {
16057
16080
  state: EditorState.create({
16058
16081
  doc: DOMParser.fromSchema(mySchema).parse(this.host.shadowRoot.querySelector('#editor')),
16059
16082
  plugins: exampleSetup({
16060
16083
  schema: mySchema,
16061
- menuContent: menu,
16084
+ menuBar: false,
16062
16085
  }),
16063
16086
  }),
16064
16087
  dispatchTransaction: (transaction) => {
@@ -16067,10 +16090,24 @@ const ProsemirrorAdapter = class {
16067
16090
  this.change.emit(this.getHTML());
16068
16091
  },
16069
16092
  });
16093
+ this.menuCommandFactory = new MenuCommandFactory(mySchema);
16070
16094
  if (this.value) {
16071
16095
  this.view.dom.innerHTML = this.value;
16072
16096
  }
16073
16097
  }
16098
+ executeCommand(command) {
16099
+ const { state } = this.view;
16100
+ const selection = state.selection;
16101
+ let transaction = state.tr;
16102
+ if (!selection.empty) {
16103
+ transaction.setSelection(selection);
16104
+ }
16105
+ command(state, (tr) => {
16106
+ transaction = tr;
16107
+ });
16108
+ this.view.dispatch(transaction);
16109
+ this.view.focus();
16110
+ }
16074
16111
  get host() { return index.getElement(this); }
16075
16112
  };
16076
16113
  ProsemirrorAdapter.style = prosemirrorAdapterCss;