prosemirror-slash-menu 0.4.3 → 0.4.4

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/dist/index.es.js CHANGED
@@ -1 +1 @@
1
- import{PluginKey as e,Plugin as t}from"prosemirror-state";const n=e=>"submenu"===e.type?[e.id,...e.elements.map((e=>n(e)))].flat():[e.id],r=e=>{const t=(e=>e.filteredElements.map((e=>n(e))).flat())(e);return t.length!==new Set(t).size},s=e=>"submenu"===e.type?[e,...e.elements.map((e=>s(e)))].flat():[e],o=(e,t)=>(e=>e.elements.map((e=>s(e))).flat())(t).find((t=>t.id===e)),l=(e,t,n="root")=>{let r="root";return t.forEach((t=>{if("submenu"===t.type){t.id===e&&(r=n);const s=t.elements.map((e=>e.id));r=s.includes(e)?t.id:l(e,t.elements,t.id)}t.id===e&&(r=n)})),r},a=(e,t,n)=>e.dispatch(e.state.tr.setMeta(t,n)),i=["Unidentified","Alt","AltGraph","CapsLock","Control","Fn","FnLock","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","F14","F15","F16","F17","F18","F19","F20","F21","F22","F23","F24","Hyper","Meta","NumLock","PageDown","PageUp","Pause","PrintScreen","Redo","ScrollLock","Shift","Super","Symbol","SymbolLock","Enter","Tab","ArrowDown","ArrowLeft","ArrowRight","ArrowUp","End","Home","PageDown","PageUp","Backspace","Clear","Copy","CrSel","Cut","Delete","EraseEof","ExSel","Insert","Paste","Redo","Undo","Accept","Again","Attn","Cancel","ContextMenu","Escape","Execute","Find","Finish","Help","Pause","Play","Props","Select","ZoomIn","ZoomOut","BrightnessDown","BrightnessUp","Eject","LogOff","Power","PowerOff","PrintScreen","Hibernate","Standby","WakeUp","AllCandidates","Alphanumeric","CodeInput","Compose","Convert","Dead","FinalMode","GroupFirst","GroupLast","GroupNext","GroupPrevious","ModeChange","NextCandidate","NonConvert","PreviousCandidate","Process","SingleCandidate","HangulMode","HanjaMode","JunjaMode","Eisu","Hankaku","Hiragana","HiraganaKatakana","KanaMode","KanjiMode","Katakana","Romaji","Zenkaku","ZenkakuHanaku"];var u;!function(e){e.OpenMenu="openMenu",e.CloseMenu="closeMenu",e.Execute="Execute",e.NextItem="NextItem",e.PrevItem="PrevItem",e.inputChange="InputChange",e.addChar="addChar",e.removeChar="removeChar",e.Ignore="Ignore",e.Catch="Catch"}(u||(u={}));const c=e=>{const t=(e=>{const t=l(e.selected,e.filteredElements),n=o(t,e);if("root"===t){const t=e.filteredElements.findIndex((t=>t.id===e.selected))+1;if(t<e.filteredElements.length)return e.filteredElements[t].id}if(n&&"submenu"===n.type){const t=n.elements.findIndex((t=>t.id===e.selected))+1;if(t<n.elements.length)return n.elements[t].id}})(e);return t?Object.assign(Object.assign({},e),{selected:t}):e},d=e=>{const t=(e=>{const t=l(e.selected,e.filteredElements),n=o(t,e);if("root"===t){const t=e.filteredElements.findIndex((t=>t.id===e.selected))-1;if(t>=0)return e.filteredElements[t].id}if(n&&"submenu"===n.type){const t=n.elements.findIndex((t=>t.id===e.selected))-1;if(t>=0)return n.elements[t].id}})(e);return t?Object.assign(Object.assign({},e),{selected:t}):e};var p;!function(e){e.open="open",e.close="close",e.execute="execute",e.nextItem="nextItem",e.prevItem="prevItem",e.openSubMenu="openSubMenu",e.closeSubMenu="closeSubMenu",e.inputChange="inputChange"}(p||(p={}));const m=new e("slash-menu-plugin"),f=(e,n,s,f,g)=>{const h={selected:e[0].id,open:!1,filter:"",ignoredKeys:n?[...i,...n]:i,filteredElements:e.filter((e=>!e.locked)),elements:e};if(r(h))throw new Error("Menu elements must have unique id's!");return new t({key:m,props:{handleKeyDown(e,t){const n=e.state,r=m.getState(n);if(!r)return!1;const l=((e,t,n,r,s,l)=>{const a=s||((e=!1)=>({shouldOpen:(t,n,r)=>{const s=r.state,o=s.selection.from<0||s.selection.from>s.doc.content.size?null:s.doc.resolve(s.selection.from),l=null==o?void 0:o.parent,a="paragraph"===(null==l?void 0:l.type.name),i=a&&2===(null==l?void 0:l.nodeSize),u=s.selection.$head.parentOffset,c=s.selection.$head.parent.textContent.slice(u-1,u),d=" "===c||""===c||" "===c;return!t.open&&"/"===n.key&&a&&(i||d||s.selection.from!==s.selection.to&&e)},shouldClose:(e,t)=>e.open&&("/"===t.key||"Escape"===t.key||"Backspace"===t.key)&&0===e.filter.length}))(l),i=o(e.selected,e);if(a.shouldOpen(e,t,n))return u.OpenMenu;if(a.shouldClose(e,t,n))return u.CloseMenu;if(e.open){if("ArrowDown"===t.key)return u.NextItem;if("ArrowUp"===t.key)return u.PrevItem;if("Enter"===t.key||"Tab"===t.key||"ArrowRight"===t.key&&"submenu"===(null==i?void 0:i.type))return u.Execute;if("Escape"===t.key||"Backspace"===t.key&&0===e.filter.length||"ArrowLeft"===t.key&&e.subMenuId)return u.CloseMenu;if(e.filter.length>0&&"Backspace"===t.key)return u.removeChar;if(!r.includes(t.key))return u.addChar;if("ArrowLeft"===t.key||"ArrowRight"===t.key)return u.Catch}return u.Ignore})(r,t,e,h.ignoredKeys,s,f);switch(l){case u.OpenMenu:return a(e,m,{type:p.open}),!g;case u.CloseMenu:{const{subMenuId:s}=r;if(s){const t=o(s,h),n=null==t?void 0:t.callbackOnClose;(null==t?void 0:t.locked)?a(e,m,{type:p.close}):(n&&n(),a(e,m,{type:p.closeSubMenu,element:o(s,h)}))}else"/"===t.key?e.dispatch(n.tr.insertText("/").setMeta(m,{type:p.close})):a(e,m,{type:p.close});return!0}case u.Execute:{const t=o(r.selected,r);return!!t&&("command"===t.type&&(t.command(e),a(e,m,{type:p.execute})),"submenu"===t.type&&a(e,m,{type:p.openSubMenu,element:t}),!0)}case u.NextItem:return a(e,m,{type:p.nextItem}),!0;case u.PrevItem:return a(e,m,{type:p.prevItem}),!0;case u.addChar:return a(e,m,{type:p.inputChange,filter:r.filter+t.key}),!g;case u.removeChar:{const t=1===r.filter.length?"":r.filter.slice(0,-1);return a(e,m,{type:p.inputChange,filter:t}),!g}case u.Catch:return!0;case u.Ignore:default:return!1}}},state:{init:()=>h,apply(e,t){var n;const r=e.getMeta(m);switch(null==r?void 0:r.type){case p.open:return Object.assign(Object.assign({},h),{open:!0});case p.close:return(e=>{const t=e.callbackOnClose;return t&&t(),e})(h);case p.execute:return h;case p.openSubMenu:return((e,t)=>{const n=t.element;return"submenu"===(null==n?void 0:n.type)?Object.assign(Object.assign({},e),{open:!0,filteredElements:n.elements,selected:n.elements[0].id,subMenuId:n.id}):e})(t,r);case p.closeSubMenu:return((e,t,n)=>{const r=t.element,s=r.callbackOnClose;if(s&&s(),"submenu"===(null==r?void 0:r.type)){const t=l(r.id,n.filteredElements);if("root"===t)return Object.assign(Object.assign({},n),{open:!0});const s=o(t,n);return"submenu"!==(null==s?void 0:s.type)?e:Object.assign(Object.assign({},e),{filteredElements:s.elements,selected:s.elements[0].id,subMenuId:t})}return e})(t,r,h);case p.nextItem:return c(t);case p.prevItem:return d(t);case p.inputChange:{const e=r.filter?((e,t)=>{const n=new RegExp(`${t.toLowerCase().replace(/\s/g,"\\s")}`);if(e.subMenuId&&"root"!==e.subMenuId)return o(e.subMenuId,e).elements.filter((e=>null!==e.label.toLowerCase().match(n)));return e.elements.filter((e=>null!==e.label.toLowerCase().match(n)&&!e.locked))})(t,r.filter):h.elements,s=null===(n=null==e?void 0:e[0])||void 0===n?void 0:n.id;return Object.assign(Object.assign({},t),{selected:s||t.selected,filteredElements:e,filter:r.filter||""})}default:return t}}},initialState:h})};export{m as SlashMenuKey,f as SlashMenuPlugin,p as SlashMetaTypes,i as defaultIgnoredKeys,a as dispatchWithMeta,o as getElementById};
1
+ import{PluginKey as e,Plugin as t}from"prosemirror-state";const n=e=>"submenu"===e.type?[e.id,...e.elements.map((e=>n(e)))].flat():[e.id],r=e=>{const t=(e=>e.filteredElements.map((e=>n(e))).flat())(e);return t.length!==new Set(t).size},s=e=>"submenu"===e.type?[e,...e.elements.map((e=>s(e)))].flat():[e],o=(e,t)=>(e=>e.elements.map((e=>s(e))).flat())(t).find((t=>t.id===e)),l=(e,t,n="root")=>{let r="root";return t.forEach((t=>{if("submenu"===t.type){t.id===e&&(r=n);const s=t.elements.map((e=>e.id));r=s.includes(e)?t.id:l(e,t.elements,t.id)}t.id===e&&(r=n)})),r},a=(e,t,n)=>e.dispatch(e.state.tr.setMeta(t,n)),i=["Unidentified","Alt","AltGraph","CapsLock","Control","Fn","FnLock","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","F14","F15","F16","F17","F18","F19","F20","F21","F22","F23","F24","Hyper","Meta","NumLock","PageDown","PageUp","Pause","PrintScreen","Redo","ScrollLock","Shift","Super","Symbol","SymbolLock","Enter","Tab","ArrowDown","ArrowLeft","ArrowRight","ArrowUp","End","Home","PageDown","PageUp","Backspace","Clear","Copy","CrSel","Cut","Delete","EraseEof","ExSel","Insert","Paste","Redo","Undo","Accept","Again","Attn","Cancel","ContextMenu","Escape","Execute","Find","Finish","Help","Pause","Play","Props","Select","ZoomIn","ZoomOut","BrightnessDown","BrightnessUp","Eject","LogOff","Power","PowerOff","PrintScreen","Hibernate","Standby","WakeUp","AllCandidates","Alphanumeric","CodeInput","Compose","Convert","Dead","FinalMode","GroupFirst","GroupLast","GroupNext","GroupPrevious","ModeChange","NextCandidate","NonConvert","PreviousCandidate","Process","SingleCandidate","HangulMode","HanjaMode","JunjaMode","Eisu","Hankaku","Hiragana","HiraganaKatakana","KanaMode","KanjiMode","Katakana","Romaji","Zenkaku","ZenkakuHanaku"];var u;!function(e){e.OpenMenu="openMenu",e.CloseMenu="closeMenu",e.Execute="Execute",e.NextItem="NextItem",e.PrevItem="PrevItem",e.inputChange="InputChange",e.addChar="addChar",e.removeChar="removeChar",e.Ignore="Ignore",e.Catch="Catch"}(u||(u={}));const c=e=>{const t=(e=>{const t=l(e.selected,e.filteredElements),n=o(t,e);if("root"===t){const t=e.filteredElements.findIndex((t=>t.id===e.selected))+1;if(t<e.filteredElements.length)return e.filteredElements[t].id}if(n&&"submenu"===n.type){const t=n.elements.findIndex((t=>t.id===e.selected))+1;if(t<n.elements.length)return n.elements[t].id}})(e);return t?Object.assign(Object.assign({},e),{selected:t}):e},d=e=>{const t=(e=>{const t=l(e.selected,e.filteredElements),n=o(t,e);if("root"===t){const t=e.filteredElements.findIndex((t=>t.id===e.selected))-1;if(t>=0)return e.filteredElements[t].id}if(n&&"submenu"===n.type){const t=n.elements.findIndex((t=>t.id===e.selected))-1;if(t>=0)return n.elements[t].id}})(e);return t?Object.assign(Object.assign({},e),{selected:t}):e};var p;!function(e){e.open="open",e.close="close",e.execute="execute",e.nextItem="nextItem",e.prevItem="prevItem",e.openSubMenu="openSubMenu",e.closeSubMenu="closeSubMenu",e.inputChange="inputChange"}(p||(p={}));const m=new e("slash-menu-plugin"),f=(e,n,s,f,g)=>{const h={selected:e[0].id,open:!1,filter:"",ignoredKeys:n?[...i,...n]:i,filteredElements:e.filter((e=>!e.locked)),elements:e};if(r(h))throw new Error("Menu elements must have unique id's!");return new t({key:m,props:{handleKeyDown(e,t){const n=e.state,r=m.getState(n);if(!r)return!1;const l=((e,t,n,r,s,l)=>{const a=s||((e=!1)=>({shouldOpen:(t,n,r)=>{const s=r.state,o=s.selection.from<0||s.selection.from>s.doc.content.size?null:s.doc.resolve(s.selection.from),l=null==o?void 0:o.parent,a="paragraph"===(null==l?void 0:l.type.name),i=a&&2===(null==l?void 0:l.nodeSize),u=s.selection.$head.parentOffset,c=s.selection.$head.parent.textContent.slice(u-1,u),d=" "===c||""===c||" "===c;return!t.open&&"/"===n.key&&a&&(i||d||s.selection.from!==s.selection.to&&e)},shouldClose:(e,t)=>e.open&&("/"===t.key||"Escape"===t.key||"Backspace"===t.key)&&0===e.filter.length}))(l),i=o(e.selected,e);if(a.shouldOpen(e,t,n))return u.OpenMenu;if(a.shouldClose(e,t,n))return u.CloseMenu;if(e.open){if("ArrowDown"===t.key)return u.NextItem;if("ArrowUp"===t.key)return u.PrevItem;if("Enter"===t.key||"Tab"===t.key||"ArrowRight"===t.key&&"submenu"===(null==i?void 0:i.type))return u.Execute;if("Escape"===t.key||"Backspace"===t.key&&0===e.filter.length||"ArrowLeft"===t.key&&e.subMenuId)return u.CloseMenu;if(e.filter.length>0&&"Backspace"===t.key)return u.removeChar;if(!r.includes(t.key))return u.addChar;if("ArrowLeft"===t.key||"ArrowRight"===t.key)return u.Catch}return u.Ignore})(r,t,e,h.ignoredKeys,s,f);switch(l){case u.OpenMenu:return a(e,m,{type:p.open}),!g;case u.CloseMenu:{if(!r.open)return!1;const{subMenuId:s}=r;if(s){const t=o(s,h),n=null==t?void 0:t.callbackOnClose;(null==t?void 0:t.locked)?a(e,m,{type:p.close}):(n&&n(),a(e,m,{type:p.closeSubMenu,element:o(s,h)}))}else"/"===t.key?e.dispatch(n.tr.insertText("/").setMeta(m,{type:p.close})):a(e,m,{type:p.close});return!0}case u.Execute:{const t=o(r.selected,r);return!!t&&("command"===t.type&&(t.command(e),a(e,m,{type:p.execute})),"submenu"===t.type&&a(e,m,{type:p.openSubMenu,element:t}),!0)}case u.NextItem:return a(e,m,{type:p.nextItem}),!0;case u.PrevItem:return a(e,m,{type:p.prevItem}),!0;case u.addChar:return a(e,m,{type:p.inputChange,filter:r.filter+t.key}),!g;case u.removeChar:{const t=1===r.filter.length?"":r.filter.slice(0,-1);return a(e,m,{type:p.inputChange,filter:t}),!g}case u.Catch:return!0;case u.Ignore:default:return!1}}},state:{init:()=>h,apply(e,t){var n;const r=e.getMeta(m);switch(null==r?void 0:r.type){case p.open:return Object.assign(Object.assign({},h),{open:!0});case p.close:return(e=>{const t=e.callbackOnClose;return t&&t(),e})(h);case p.execute:return h;case p.openSubMenu:return((e,t)=>{const n=t.element;return"submenu"===(null==n?void 0:n.type)?Object.assign(Object.assign({},e),{open:!0,filteredElements:n.elements,selected:n.elements[0].id,subMenuId:n.id}):e})(t,r);case p.closeSubMenu:return((e,t,n)=>{const r=t.element,s=r.callbackOnClose;if(s&&s(),"submenu"===(null==r?void 0:r.type)){const t=l(r.id,n.filteredElements);if("root"===t)return Object.assign(Object.assign({},n),{open:!0});const s=o(t,n);return"submenu"!==(null==s?void 0:s.type)?e:Object.assign(Object.assign({},e),{filteredElements:s.elements,selected:s.elements[0].id,subMenuId:t})}return e})(t,r,h);case p.nextItem:return c(t);case p.prevItem:return d(t);case p.inputChange:{const e=r.filter?((e,t)=>{const n=new RegExp(`${t.toLowerCase().replace(/\s/g,"\\s")}`);if(e.subMenuId&&"root"!==e.subMenuId)return o(e.subMenuId,e).elements.filter((e=>null!==e.label.toLowerCase().match(n)));return e.elements.filter((e=>null!==e.label.toLowerCase().match(n)&&!e.locked))})(t,r.filter):h.elements,s=null===(n=null==e?void 0:e[0])||void 0===n?void 0:n.id;return Object.assign(Object.assign({},t),{selected:s||t.selected,filteredElements:e,filter:r.filter||""})}default:return t}}},initialState:h})};export{m as SlashMenuKey,f as SlashMenuPlugin,p as SlashMetaTypes,i as defaultIgnoredKeys,a as dispatchWithMeta,o as getElementById};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("prosemirror-state");const t=e=>"submenu"===e.type?[e.id,...e.elements.map((e=>t(e)))].flat():[e.id],n=e=>{const n=(e=>e.filteredElements.map((e=>t(e))).flat())(e);return n.length!==new Set(n).size},s=e=>"submenu"===e.type?[e,...e.elements.map((e=>s(e)))].flat():[e],r=(e,t)=>(e=>e.elements.map((e=>s(e))).flat())(t).find((t=>t.id===e)),a=(e,t,n="root")=>{let s="root";return t.forEach((t=>{if("submenu"===t.type){t.id===e&&(s=n);const r=t.elements.map((e=>e.id));s=r.includes(e)?t.id:a(e,t.elements,t.id)}t.id===e&&(s=n)})),s},o=(e,t,n)=>e.dispatch(e.state.tr.setMeta(t,n)),l=["Unidentified","Alt","AltGraph","CapsLock","Control","Fn","FnLock","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","F14","F15","F16","F17","F18","F19","F20","F21","F22","F23","F24","Hyper","Meta","NumLock","PageDown","PageUp","Pause","PrintScreen","Redo","ScrollLock","Shift","Super","Symbol","SymbolLock","Enter","Tab","ArrowDown","ArrowLeft","ArrowRight","ArrowUp","End","Home","PageDown","PageUp","Backspace","Clear","Copy","CrSel","Cut","Delete","EraseEof","ExSel","Insert","Paste","Redo","Undo","Accept","Again","Attn","Cancel","ContextMenu","Escape","Execute","Find","Finish","Help","Pause","Play","Props","Select","ZoomIn","ZoomOut","BrightnessDown","BrightnessUp","Eject","LogOff","Power","PowerOff","PrintScreen","Hibernate","Standby","WakeUp","AllCandidates","Alphanumeric","CodeInput","Compose","Convert","Dead","FinalMode","GroupFirst","GroupLast","GroupNext","GroupPrevious","ModeChange","NextCandidate","NonConvert","PreviousCandidate","Process","SingleCandidate","HangulMode","HanjaMode","JunjaMode","Eisu","Hankaku","Hiragana","HiraganaKatakana","KanaMode","KanjiMode","Katakana","Romaji","Zenkaku","ZenkakuHanaku"];var i;!function(e){e.OpenMenu="openMenu",e.CloseMenu="closeMenu",e.Execute="Execute",e.NextItem="NextItem",e.PrevItem="PrevItem",e.inputChange="InputChange",e.addChar="addChar",e.removeChar="removeChar",e.Ignore="Ignore",e.Catch="Catch"}(i||(i={}));const u=e=>{const t=(e=>{const t=a(e.selected,e.filteredElements),n=r(t,e);if("root"===t){const t=e.filteredElements.findIndex((t=>t.id===e.selected))+1;if(t<e.filteredElements.length)return e.filteredElements[t].id}if(n&&"submenu"===n.type){const t=n.elements.findIndex((t=>t.id===e.selected))+1;if(t<n.elements.length)return n.elements[t].id}})(e);return t?Object.assign(Object.assign({},e),{selected:t}):e},c=e=>{const t=(e=>{const t=a(e.selected,e.filteredElements),n=r(t,e);if("root"===t){const t=e.filteredElements.findIndex((t=>t.id===e.selected))-1;if(t>=0)return e.filteredElements[t].id}if(n&&"submenu"===n.type){const t=n.elements.findIndex((t=>t.id===e.selected))-1;if(t>=0)return n.elements[t].id}})(e);return t?Object.assign(Object.assign({},e),{selected:t}):e};var p;exports.SlashMetaTypes=void 0,(p=exports.SlashMetaTypes||(exports.SlashMetaTypes={})).open="open",p.close="close",p.execute="execute",p.nextItem="nextItem",p.prevItem="prevItem",p.openSubMenu="openSubMenu",p.closeSubMenu="closeSubMenu",p.inputChange="inputChange";const d=new e.PluginKey("slash-menu-plugin");exports.SlashMenuKey=d,exports.SlashMenuPlugin=(t,s,p,m,f)=>{const h={selected:t[0].id,open:!1,filter:"",ignoredKeys:s?[...l,...s]:l,filteredElements:t.filter((e=>!e.locked)),elements:t};if(n(h))throw new Error("Menu elements must have unique id's!");return new e.Plugin({key:d,props:{handleKeyDown(e,t){const n=e.state,s=d.getState(n);if(!s)return!1;const a=((e,t,n,s,a,o)=>{const l=a||((e=!1)=>({shouldOpen:(t,n,s)=>{const r=s.state,a=r.selection.from<0||r.selection.from>r.doc.content.size?null:r.doc.resolve(r.selection.from),o=null==a?void 0:a.parent,l="paragraph"===(null==o?void 0:o.type.name),i=l&&2===(null==o?void 0:o.nodeSize),u=r.selection.$head.parentOffset,c=r.selection.$head.parent.textContent.slice(u-1,u),p=" "===c||""===c||" "===c;return!t.open&&"/"===n.key&&l&&(i||p||r.selection.from!==r.selection.to&&e)},shouldClose:(e,t)=>e.open&&("/"===t.key||"Escape"===t.key||"Backspace"===t.key)&&0===e.filter.length}))(o),u=r(e.selected,e);if(l.shouldOpen(e,t,n))return i.OpenMenu;if(l.shouldClose(e,t,n))return i.CloseMenu;if(e.open){if("ArrowDown"===t.key)return i.NextItem;if("ArrowUp"===t.key)return i.PrevItem;if("Enter"===t.key||"Tab"===t.key||"ArrowRight"===t.key&&"submenu"===(null==u?void 0:u.type))return i.Execute;if("Escape"===t.key||"Backspace"===t.key&&0===e.filter.length||"ArrowLeft"===t.key&&e.subMenuId)return i.CloseMenu;if(e.filter.length>0&&"Backspace"===t.key)return i.removeChar;if(!s.includes(t.key))return i.addChar;if("ArrowLeft"===t.key||"ArrowRight"===t.key)return i.Catch}return i.Ignore})(s,t,e,h.ignoredKeys,p,m);switch(a){case i.OpenMenu:return o(e,d,{type:exports.SlashMetaTypes.open}),!f;case i.CloseMenu:{const{subMenuId:a}=s;if(a){const t=r(a,h),n=null==t?void 0:t.callbackOnClose;(null==t?void 0:t.locked)?o(e,d,{type:exports.SlashMetaTypes.close}):(n&&n(),o(e,d,{type:exports.SlashMetaTypes.closeSubMenu,element:r(a,h)}))}else"/"===t.key?e.dispatch(n.tr.insertText("/").setMeta(d,{type:exports.SlashMetaTypes.close})):o(e,d,{type:exports.SlashMetaTypes.close});return!0}case i.Execute:{const t=r(s.selected,s);return!!t&&("command"===t.type&&(t.command(e),o(e,d,{type:exports.SlashMetaTypes.execute})),"submenu"===t.type&&o(e,d,{type:exports.SlashMetaTypes.openSubMenu,element:t}),!0)}case i.NextItem:return o(e,d,{type:exports.SlashMetaTypes.nextItem}),!0;case i.PrevItem:return o(e,d,{type:exports.SlashMetaTypes.prevItem}),!0;case i.addChar:return o(e,d,{type:exports.SlashMetaTypes.inputChange,filter:s.filter+t.key}),!f;case i.removeChar:{const t=1===s.filter.length?"":s.filter.slice(0,-1);return o(e,d,{type:exports.SlashMetaTypes.inputChange,filter:t}),!f}case i.Catch:return!0;case i.Ignore:default:return!1}}},state:{init:()=>h,apply(e,t){var n;const s=e.getMeta(d);switch(null==s?void 0:s.type){case exports.SlashMetaTypes.open:return Object.assign(Object.assign({},h),{open:!0});case exports.SlashMetaTypes.close:return(e=>{const t=e.callbackOnClose;return t&&t(),e})(h);case exports.SlashMetaTypes.execute:return h;case exports.SlashMetaTypes.openSubMenu:return((e,t)=>{const n=t.element;return"submenu"===(null==n?void 0:n.type)?Object.assign(Object.assign({},e),{open:!0,filteredElements:n.elements,selected:n.elements[0].id,subMenuId:n.id}):e})(t,s);case exports.SlashMetaTypes.closeSubMenu:return((e,t,n)=>{const s=t.element,o=s.callbackOnClose;if(o&&o(),"submenu"===(null==s?void 0:s.type)){const t=a(s.id,n.filteredElements);if("root"===t)return Object.assign(Object.assign({},n),{open:!0});const o=r(t,n);return"submenu"!==(null==o?void 0:o.type)?e:Object.assign(Object.assign({},e),{filteredElements:o.elements,selected:o.elements[0].id,subMenuId:t})}return e})(t,s,h);case exports.SlashMetaTypes.nextItem:return u(t);case exports.SlashMetaTypes.prevItem:return c(t);case exports.SlashMetaTypes.inputChange:{const e=s.filter?((e,t)=>{const n=new RegExp(`${t.toLowerCase().replace(/\s/g,"\\s")}`);if(e.subMenuId&&"root"!==e.subMenuId)return r(e.subMenuId,e).elements.filter((e=>null!==e.label.toLowerCase().match(n)));return e.elements.filter((e=>null!==e.label.toLowerCase().match(n)&&!e.locked))})(t,s.filter):h.elements,a=null===(n=null==e?void 0:e[0])||void 0===n?void 0:n.id;return Object.assign(Object.assign({},t),{selected:a||t.selected,filteredElements:e,filter:s.filter||""})}default:return t}}},initialState:h})},exports.defaultIgnoredKeys=l,exports.dispatchWithMeta=o,exports.getElementById=r;
1
+ "use strict";var e=require("prosemirror-state");const t=e=>"submenu"===e.type?[e.id,...e.elements.map((e=>t(e)))].flat():[e.id],n=e=>{const n=(e=>e.filteredElements.map((e=>t(e))).flat())(e);return n.length!==new Set(n).size},s=e=>"submenu"===e.type?[e,...e.elements.map((e=>s(e)))].flat():[e],r=(e,t)=>(e=>e.elements.map((e=>s(e))).flat())(t).find((t=>t.id===e)),a=(e,t,n="root")=>{let s="root";return t.forEach((t=>{if("submenu"===t.type){t.id===e&&(s=n);const r=t.elements.map((e=>e.id));s=r.includes(e)?t.id:a(e,t.elements,t.id)}t.id===e&&(s=n)})),s},o=(e,t,n)=>e.dispatch(e.state.tr.setMeta(t,n)),l=["Unidentified","Alt","AltGraph","CapsLock","Control","Fn","FnLock","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","F14","F15","F16","F17","F18","F19","F20","F21","F22","F23","F24","Hyper","Meta","NumLock","PageDown","PageUp","Pause","PrintScreen","Redo","ScrollLock","Shift","Super","Symbol","SymbolLock","Enter","Tab","ArrowDown","ArrowLeft","ArrowRight","ArrowUp","End","Home","PageDown","PageUp","Backspace","Clear","Copy","CrSel","Cut","Delete","EraseEof","ExSel","Insert","Paste","Redo","Undo","Accept","Again","Attn","Cancel","ContextMenu","Escape","Execute","Find","Finish","Help","Pause","Play","Props","Select","ZoomIn","ZoomOut","BrightnessDown","BrightnessUp","Eject","LogOff","Power","PowerOff","PrintScreen","Hibernate","Standby","WakeUp","AllCandidates","Alphanumeric","CodeInput","Compose","Convert","Dead","FinalMode","GroupFirst","GroupLast","GroupNext","GroupPrevious","ModeChange","NextCandidate","NonConvert","PreviousCandidate","Process","SingleCandidate","HangulMode","HanjaMode","JunjaMode","Eisu","Hankaku","Hiragana","HiraganaKatakana","KanaMode","KanjiMode","Katakana","Romaji","Zenkaku","ZenkakuHanaku"];var i;!function(e){e.OpenMenu="openMenu",e.CloseMenu="closeMenu",e.Execute="Execute",e.NextItem="NextItem",e.PrevItem="PrevItem",e.inputChange="InputChange",e.addChar="addChar",e.removeChar="removeChar",e.Ignore="Ignore",e.Catch="Catch"}(i||(i={}));const u=e=>{const t=(e=>{const t=a(e.selected,e.filteredElements),n=r(t,e);if("root"===t){const t=e.filteredElements.findIndex((t=>t.id===e.selected))+1;if(t<e.filteredElements.length)return e.filteredElements[t].id}if(n&&"submenu"===n.type){const t=n.elements.findIndex((t=>t.id===e.selected))+1;if(t<n.elements.length)return n.elements[t].id}})(e);return t?Object.assign(Object.assign({},e),{selected:t}):e},c=e=>{const t=(e=>{const t=a(e.selected,e.filteredElements),n=r(t,e);if("root"===t){const t=e.filteredElements.findIndex((t=>t.id===e.selected))-1;if(t>=0)return e.filteredElements[t].id}if(n&&"submenu"===n.type){const t=n.elements.findIndex((t=>t.id===e.selected))-1;if(t>=0)return n.elements[t].id}})(e);return t?Object.assign(Object.assign({},e),{selected:t}):e};var p;exports.SlashMetaTypes=void 0,(p=exports.SlashMetaTypes||(exports.SlashMetaTypes={})).open="open",p.close="close",p.execute="execute",p.nextItem="nextItem",p.prevItem="prevItem",p.openSubMenu="openSubMenu",p.closeSubMenu="closeSubMenu",p.inputChange="inputChange";const d=new e.PluginKey("slash-menu-plugin");exports.SlashMenuKey=d,exports.SlashMenuPlugin=(t,s,p,m,f)=>{const h={selected:t[0].id,open:!1,filter:"",ignoredKeys:s?[...l,...s]:l,filteredElements:t.filter((e=>!e.locked)),elements:t};if(n(h))throw new Error("Menu elements must have unique id's!");return new e.Plugin({key:d,props:{handleKeyDown(e,t){const n=e.state,s=d.getState(n);if(!s)return!1;const a=((e,t,n,s,a,o)=>{const l=a||((e=!1)=>({shouldOpen:(t,n,s)=>{const r=s.state,a=r.selection.from<0||r.selection.from>r.doc.content.size?null:r.doc.resolve(r.selection.from),o=null==a?void 0:a.parent,l="paragraph"===(null==o?void 0:o.type.name),i=l&&2===(null==o?void 0:o.nodeSize),u=r.selection.$head.parentOffset,c=r.selection.$head.parent.textContent.slice(u-1,u),p=" "===c||""===c||" "===c;return!t.open&&"/"===n.key&&l&&(i||p||r.selection.from!==r.selection.to&&e)},shouldClose:(e,t)=>e.open&&("/"===t.key||"Escape"===t.key||"Backspace"===t.key)&&0===e.filter.length}))(o),u=r(e.selected,e);if(l.shouldOpen(e,t,n))return i.OpenMenu;if(l.shouldClose(e,t,n))return i.CloseMenu;if(e.open){if("ArrowDown"===t.key)return i.NextItem;if("ArrowUp"===t.key)return i.PrevItem;if("Enter"===t.key||"Tab"===t.key||"ArrowRight"===t.key&&"submenu"===(null==u?void 0:u.type))return i.Execute;if("Escape"===t.key||"Backspace"===t.key&&0===e.filter.length||"ArrowLeft"===t.key&&e.subMenuId)return i.CloseMenu;if(e.filter.length>0&&"Backspace"===t.key)return i.removeChar;if(!s.includes(t.key))return i.addChar;if("ArrowLeft"===t.key||"ArrowRight"===t.key)return i.Catch}return i.Ignore})(s,t,e,h.ignoredKeys,p,m);switch(a){case i.OpenMenu:return o(e,d,{type:exports.SlashMetaTypes.open}),!f;case i.CloseMenu:{if(!s.open)return!1;const{subMenuId:a}=s;if(a){const t=r(a,h),n=null==t?void 0:t.callbackOnClose;(null==t?void 0:t.locked)?o(e,d,{type:exports.SlashMetaTypes.close}):(n&&n(),o(e,d,{type:exports.SlashMetaTypes.closeSubMenu,element:r(a,h)}))}else"/"===t.key?e.dispatch(n.tr.insertText("/").setMeta(d,{type:exports.SlashMetaTypes.close})):o(e,d,{type:exports.SlashMetaTypes.close});return!0}case i.Execute:{const t=r(s.selected,s);return!!t&&("command"===t.type&&(t.command(e),o(e,d,{type:exports.SlashMetaTypes.execute})),"submenu"===t.type&&o(e,d,{type:exports.SlashMetaTypes.openSubMenu,element:t}),!0)}case i.NextItem:return o(e,d,{type:exports.SlashMetaTypes.nextItem}),!0;case i.PrevItem:return o(e,d,{type:exports.SlashMetaTypes.prevItem}),!0;case i.addChar:return o(e,d,{type:exports.SlashMetaTypes.inputChange,filter:s.filter+t.key}),!f;case i.removeChar:{const t=1===s.filter.length?"":s.filter.slice(0,-1);return o(e,d,{type:exports.SlashMetaTypes.inputChange,filter:t}),!f}case i.Catch:return!0;case i.Ignore:default:return!1}}},state:{init:()=>h,apply(e,t){var n;const s=e.getMeta(d);switch(null==s?void 0:s.type){case exports.SlashMetaTypes.open:return Object.assign(Object.assign({},h),{open:!0});case exports.SlashMetaTypes.close:return(e=>{const t=e.callbackOnClose;return t&&t(),e})(h);case exports.SlashMetaTypes.execute:return h;case exports.SlashMetaTypes.openSubMenu:return((e,t)=>{const n=t.element;return"submenu"===(null==n?void 0:n.type)?Object.assign(Object.assign({},e),{open:!0,filteredElements:n.elements,selected:n.elements[0].id,subMenuId:n.id}):e})(t,s);case exports.SlashMetaTypes.closeSubMenu:return((e,t,n)=>{const s=t.element,o=s.callbackOnClose;if(o&&o(),"submenu"===(null==s?void 0:s.type)){const t=a(s.id,n.filteredElements);if("root"===t)return Object.assign(Object.assign({},n),{open:!0});const o=r(t,n);return"submenu"!==(null==o?void 0:o.type)?e:Object.assign(Object.assign({},e),{filteredElements:o.elements,selected:o.elements[0].id,subMenuId:t})}return e})(t,s,h);case exports.SlashMetaTypes.nextItem:return u(t);case exports.SlashMetaTypes.prevItem:return c(t);case exports.SlashMetaTypes.inputChange:{const e=s.filter?((e,t)=>{const n=new RegExp(`${t.toLowerCase().replace(/\s/g,"\\s")}`);if(e.subMenuId&&"root"!==e.subMenuId)return r(e.subMenuId,e).elements.filter((e=>null!==e.label.toLowerCase().match(n)));return e.elements.filter((e=>null!==e.label.toLowerCase().match(n)&&!e.locked))})(t,s.filter):h.elements,a=null===(n=null==e?void 0:e[0])||void 0===n?void 0:n.id;return Object.assign(Object.assign({},t),{selected:a||t.selected,filteredElements:e,filter:s.filter||""})}default:return t}}},initialState:h})},exports.defaultIgnoredKeys=l,exports.dispatchWithMeta=o,exports.getElementById=r;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prosemirror-slash-menu",
3
- "version": "0.4.3",
3
+ "version": "0.4.4",
4
4
  "description": "Slash menu for ProseMirror",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.es.js",