@limetech/lime-elements 37.18.0 → 37.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/cjs/limel-text-editor.cjs.entry.js +88 -4
- package/dist/cjs/limel-text-editor.cjs.entry.js.map +1 -1
- package/dist/collection/components/text-editor/menu/{default-menu.js → full-menu.js} +4 -4
- package/dist/collection/components/text-editor/menu/full-menu.js.map +1 -0
- package/dist/collection/components/text-editor/menu/menu-filter.js +83 -0
- package/dist/collection/components/text-editor/menu/menu-filter.js.map +1 -0
- package/dist/collection/components/text-editor/menu/types.js +2 -0
- package/dist/collection/components/text-editor/menu/types.js.map +1 -0
- package/dist/collection/components/text-editor/text-editor.js +5 -2
- package/dist/collection/components/text-editor/text-editor.js.map +1 -1
- package/dist/esm/limel-text-editor.entry.js +88 -4
- package/dist/esm/limel-text-editor.entry.js.map +1 -1
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/{p-7968bfa0.entry.js → p-10edf8b8.entry.js} +2 -2
- package/dist/lime-elements/p-10edf8b8.entry.js.map +1 -0
- package/dist/types/components/text-editor/menu/{default-menu.d.ts → full-menu.d.ts} +3 -3
- package/dist/types/components/text-editor/menu/menu-filter.d.ts +11 -0
- package/dist/types/components/text-editor/menu/types.d.ts +35 -0
- package/package.json +2 -2
- package/dist/collection/components/text-editor/menu/default-menu.js.map +0 -1
- package/dist/lime-elements/p-7968bfa0.entry.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## [37.19.0](https://github.com/Lundalogik/lime-elements/compare/v37.18.0...v37.19.0) (2024-04-22)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
* **editor:** add prop menuItems ([1fee704](https://github.com/Lundalogik/lime-elements/commit/1fee704753cda649be974c902579f8b29ea3e844))
|
|
8
|
+
|
|
1
9
|
## [37.18.0](https://github.com/Lundalogik/lime-elements/compare/v37.17.3...v37.18.0) (2024-04-16)
|
|
2
10
|
|
|
3
11
|
|
|
@@ -15910,17 +15910,17 @@ function exampleSetup(options) {
|
|
|
15910
15910
|
}
|
|
15911
15911
|
|
|
15912
15912
|
/**
|
|
15913
|
-
* Creates the
|
|
15913
|
+
* Creates the full menu for the text editor
|
|
15914
15914
|
* based on the default menu already in prosemirror-example-setup
|
|
15915
15915
|
* @param schema - the schema to use for the menu
|
|
15916
15916
|
*
|
|
15917
15917
|
* @returns the default menu for the text editor
|
|
15918
15918
|
*/
|
|
15919
|
-
const
|
|
15919
|
+
const buildFullMenu = (schema) => {
|
|
15920
15920
|
const menuItems = buildMenuItems(schema);
|
|
15921
15921
|
const { inlineMenu, insertHorizontalRule } = menuItems;
|
|
15922
15922
|
const typeMenu = getNewMenu(menuItems.typeMenu);
|
|
15923
|
-
const newHorizontalRule = new MenuItem(Object.assign(Object.assign({}, insertHorizontalRule.spec), { label: 'hr' }));
|
|
15923
|
+
const newHorizontalRule = new MenuItem(Object.assign(Object.assign({}, insertHorizontalRule.spec), { title: 'hr', label: 'hr' }));
|
|
15924
15924
|
const historyButtons = menuItems.fullMenu[2];
|
|
15925
15925
|
const blockMenu = getBlockMenu(menuItems.blockMenu);
|
|
15926
15926
|
return [
|
|
@@ -15942,6 +15942,88 @@ const getBlockMenu = (blockMenu) => {
|
|
|
15942
15942
|
return [...blockMenu[0].slice(0, 5)];
|
|
15943
15943
|
};
|
|
15944
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]));
|
|
15998
|
+
}
|
|
15999
|
+
return menu
|
|
16000
|
+
.filter((item) => {
|
|
16001
|
+
if (isMenuItem(item)) {
|
|
16002
|
+
return Object.values(menuItems).includes(item.spec.title);
|
|
16003
|
+
}
|
|
16004
|
+
else if (isDropdown(item)) {
|
|
16005
|
+
return true;
|
|
16006
|
+
}
|
|
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
|
+
}
|
|
16018
|
+
return item;
|
|
16019
|
+
};
|
|
16020
|
+
const isMenuItem = (item) => {
|
|
16021
|
+
return item.spec !== undefined;
|
|
16022
|
+
};
|
|
16023
|
+
const isDropdown = (item) => {
|
|
16024
|
+
return item.content !== undefined;
|
|
16025
|
+
};
|
|
16026
|
+
|
|
15945
16027
|
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))}";
|
|
15946
16028
|
|
|
15947
16029
|
const TextEditor = class {
|
|
@@ -15959,7 +16041,9 @@ const TextEditor = class {
|
|
|
15959
16041
|
nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),
|
|
15960
16042
|
marks: schema.spec.marks,
|
|
15961
16043
|
});
|
|
15962
|
-
const menu =
|
|
16044
|
+
const menu = buildFullMenu(mySchema)
|
|
16045
|
+
.map((items) => getFilteredMenu(items, undefined))
|
|
16046
|
+
.filter((items) => items.length);
|
|
15963
16047
|
this.view = new EditorView(this.host.shadowRoot.querySelector('#editor'), {
|
|
15964
16048
|
state: EditorState.create({
|
|
15965
16049
|
doc: DOMParser.fromSchema(mySchema).parse(this.host.shadowRoot.querySelector('#editor')),
|