prosemirror-slash-menu-react 0.4.9 → 0.4.11

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.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./slashMenuReact/display";
2
2
  export * from "./slashMenuReact/defaults";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC"}
package/dist/index.es.js CHANGED
@@ -56,7 +56,7 @@ const H1Command = {
56
56
  command: (view) => {
57
57
  setBlockType(view.state.schema.nodes.heading, { level: 1 })(view.state, view.dispatch, view);
58
58
  },
59
- available: (view) => true,
59
+ available: () => true,
60
60
  };
61
61
  const H2Command = {
62
62
  id: Icons.Level2,
@@ -65,7 +65,7 @@ const H2Command = {
65
65
  command: (view) => {
66
66
  setBlockType(view.state.schema.nodes.heading, { level: 2 })(view.state, view.dispatch, view);
67
67
  },
68
- available: (view) => true,
68
+ available: () => true,
69
69
  };
70
70
  const H3Command = {
71
71
  id: Icons.Level3,
@@ -74,7 +74,7 @@ const H3Command = {
74
74
  command: (view) => {
75
75
  setBlockType(view.state.schema.nodes.heading, { level: 3 })(view.state, view.dispatch, view);
76
76
  },
77
- available: (view) => true,
77
+ available: () => true,
78
78
  };
79
79
  const BoldCommand = {
80
80
  id: Icons.Bold,
@@ -84,7 +84,7 @@ const BoldCommand = {
84
84
  const markType = view.state.schema.marks.strong;
85
85
  toggleMark(markType)(view.state, view.dispatch, view);
86
86
  },
87
- available: (view) => true,
87
+ available: () => true,
88
88
  };
89
89
  const ItalicCommand = {
90
90
  id: Icons.Italic,
@@ -94,7 +94,7 @@ const ItalicCommand = {
94
94
  const markType = view.state.schema.marks.em;
95
95
  toggleMark(markType)(view.state, view.dispatch, view);
96
96
  },
97
- available: (view) => true,
97
+ available: () => true,
98
98
  };
99
99
  const CodeCommand = {
100
100
  id: Icons.Code,
@@ -104,7 +104,7 @@ const CodeCommand = {
104
104
  const markType = view.state.schema.marks.code;
105
105
  toggleMark(markType)(view.state, view.dispatch, view);
106
106
  },
107
- available: (view) => true,
107
+ available: () => true,
108
108
  };
109
109
  const LinkCommand = {
110
110
  id: Icons.Link,
@@ -114,13 +114,13 @@ const LinkCommand = {
114
114
  const markType = view.state.schema.marks.link;
115
115
  toggleMark(markType)(view.state, view.dispatch, view);
116
116
  },
117
- available: (view) => true,
117
+ available: () => true,
118
118
  };
119
119
  const HeadingsMenu = {
120
120
  id: Icons.HeaderMenu,
121
121
  label: "Headings",
122
122
  type: "submenu",
123
- available: (view) => true,
123
+ available: () => true,
124
124
  elements: [H1Command, H2Command, H3Command],
125
125
  };
126
126
  const defaultElements = [
@@ -130,6 +130,8 @@ const defaultElements = [
130
130
  CodeCommand,
131
131
  LinkCommand,
132
132
  ];
133
+ const HeadingIcon = () => (React.createElement("svg", { fill: "#000000", width: "36", height: "36", viewBox: "0 0 36 36", xmlns: "http://www.w3.org/2000/svg" },
134
+ React.createElement("path", { d: "M18 20V4h-3v6H9V4H6v16h3v-7h6v7z" })));
133
135
  const H1Icon = () => (React.createElement("svg", { width: "36", height: "36", viewBox: "0 0 36 36", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
134
136
  React.createElement("path", { d: "M17 17H11V12C11 11.4477 10.5523 11 10 11C9.44772 11 9 11.4477 9 12V24C9 24.5523 9.44772 25 10 25C10.5523 25 11 24.5523 11 24V19H17V24C17 24.5523 17.4477 25 18 25C18.5523 25 19 24.5523 19 24V12C19 11.4477 18.5523 11 18 11C17.4477 11 17 11.4477 17 12V17Z", fill: "#050038" }),
135
137
  React.createElement("path", { d: "M26 25C26.5523 25 27 24.5523 27 24V12C27 11.4477 26.5523 11 26 11H23C22.4477 11 22 11.4477 22 12C22 12.5523 22.4477 13 23 13H25V24C25 24.5523 25.4477 25 26 25Z", fill: "#050038" })));
@@ -159,6 +161,7 @@ const defaultIcons = {
159
161
  H1Icon,
160
162
  H2Icon,
161
163
  H3Icon,
164
+ HeadingIcon,
162
165
  LinkIcon,
163
166
  BoldIcon,
164
167
  CodeIcon,
@@ -186,7 +189,6 @@ var Placement;
186
189
  Placement["leftEnd"] = "left-end";
187
190
  })(Placement || (Placement = {}));
188
191
  const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIcon, filterFieldIcon, filterPlaceHolder, mainMenuLabel, popperReference, popperOptions, clickable, disableInput, emptySearchComponent, }) => {
189
- var _a;
190
192
  const menuState = useMemo(() => {
191
193
  if (!editorState)
192
194
  return;
@@ -205,7 +207,7 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
205
207
  if (rootRef.current &&
206
208
  (!event.target ||
207
209
  !(event.target instanceof Node) ||
208
- !rootRef.current.contains(event === null || event === void 0 ? void 0 : event.target))) {
210
+ !rootRef.current.contains(event?.target))) {
209
211
  dispatchWithMeta(editorView, SlashMenuKey, {
210
212
  type: SlashMetaTypes.close,
211
213
  });
@@ -218,8 +220,7 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
218
220
  }, [rootRef]);
219
221
  const [popperElement, setPopperElement] = React.useState(null);
220
222
  const virtualReference = useMemo(() => {
221
- var _a;
222
- const domNode = (_a = editorView.domAtPos(editorState.selection.to)) === null || _a === void 0 ? void 0 : _a.node;
223
+ const domNode = editorView.domAtPos(editorState.selection.to)?.node;
223
224
  const cursorPosition = editorView.state.selection.to;
224
225
  const cursorLeft = editorView.coordsAtPos(cursorPosition).left;
225
226
  if (!(domNode instanceof HTMLElement))
@@ -259,7 +260,7 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
259
260
  };
260
261
  }, [popperReference]);
261
262
  const { styles, attributes } = usePopper(popperReference || virtualReference, popperElement, {
262
- placement: (popperOptions === null || popperOptions === void 0 ? void 0 : popperOptions.placement)
263
+ placement: popperOptions?.placement
263
264
  ? popperOptions.placement
264
265
  : Placement.bottomStart,
265
266
  modifiers: [
@@ -267,7 +268,7 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
267
268
  {
268
269
  name: "preventOverflow",
269
270
  },
270
- (popperOptions === null || popperOptions === void 0 ? void 0 : popperOptions.offsetModifier)
271
+ popperOptions?.offsetModifier
271
272
  ? popperOptions.offsetModifier
272
273
  : offsetModifier,
273
274
  ],
@@ -309,15 +310,14 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
309
310
  return;
310
311
  }
311
312
  rootRef.current.scrollTop = 0;
312
- }, [menuState === null || menuState === void 0 ? void 0 : menuState.filteredElements]);
313
+ }, [menuState?.filteredElements]);
313
314
  const subMenuLabel = useMemo(() => {
314
- var _a;
315
- if (menuState === null || menuState === void 0 ? void 0 : menuState.subMenuId) {
316
- return (_a = getElementById(menuState.subMenuId, menuState)) === null || _a === void 0 ? void 0 : _a.label;
315
+ if (menuState?.subMenuId) {
316
+ return getElementById(menuState.subMenuId, menuState)?.label;
317
317
  }
318
318
  }, [menuState]);
319
319
  const closeSubMenu = useCallback(() => {
320
- if (menuState === null || menuState === void 0 ? void 0 : menuState.subMenuId) {
320
+ if (menuState?.subMenuId) {
321
321
  dispatchWithMeta(editorView, SlashMenuKey, {
322
322
  type: SlashMetaTypes.closeSubMenu,
323
323
  element: getElementById(menuState.subMenuId, menuState),
@@ -327,10 +327,10 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
327
327
  // These two useEffects prevent a bug where the user navigates with clicks, which then blurs the editor and key presses stop working
328
328
  useEffect(() => {
329
329
  editorView.focus();
330
- }, [menuState === null || menuState === void 0 ? void 0 : menuState.open]);
330
+ }, [menuState?.open]);
331
331
  useEffect(() => {
332
332
  editorView.focus();
333
- }, [menuState === null || menuState === void 0 ? void 0 : menuState.subMenuId]);
333
+ }, [menuState?.subMenuId]);
334
334
  const groups = useMemo(() => {
335
335
  if (!elements) {
336
336
  return;
@@ -347,9 +347,11 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
347
347
  return acc;
348
348
  }, {});
349
349
  }, [elements]);
350
- return (React.createElement(React.Fragment, null, (menuState === null || menuState === void 0 ? void 0 : menuState.open) ? (React.createElement("div", Object.assign({
351
- // @ts-ignore
352
- ref: setPopperElement, style: Object.assign({}, styles.popper) }, attributes.popper),
350
+ return (React.createElement(React.Fragment, null, menuState?.open ? (React.createElement("div", {
351
+ // @ts-expect-error - something is fishy here but it works so 🤷‍♂️
352
+ ref: setPopperElement, style: {
353
+ ...styles.popper,
354
+ }, ...attributes.popper },
353
355
  disableInput ? null : menuState.filter ? (React.createElement("div", { className: "menu-filter-wrapper" },
354
356
  filterFieldIcon ? (React.createElement("div", { className: "menu-filter-icon" }, filterFieldIcon)) : null,
355
357
  React.createElement("div", { id: "menu-filter", className: "menu-filter" }, menuState.filter))) : (React.createElement("div", { className: "menu-filter-wrapper" },
@@ -361,16 +363,14 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
361
363
  React.createElement("div", { className: "submenu-label" }, subMenuLabel))) : null,
362
364
  !menuState.subMenuId && mainMenuLabel ? (React.createElement("div", { className: "menu-element-wrapper" },
363
365
  React.createElement("div", { className: "submenu-label" }, mainMenuLabel))) : null,
364
- groups && ((_a = Object.keys(groups)) === null || _a === void 0 ? void 0 : _a.length) > 1
366
+ groups && Object.keys(groups)?.length > 1
365
367
  ? Object.keys(groups).map((group, x) => {
366
368
  return (React.createElement("div", { key: x, className: "group-wrapper" },
367
- React.createElement("div", { className: "group-label" }, group), groups === null || groups === void 0 ? void 0 :
368
- groups[group].map((el, idx) => (React.createElement(ListItem, { key: el.id, menuState: menuState, Icon: icons === null || icons === void 0 ? void 0 : icons[el.id], RightIcon: rightIcons === null || rightIcons === void 0 ? void 0 : rightIcons[el.id], idx: idx, clickable: clickable, el: el, view: editorView })))));
369
+ React.createElement("div", { className: "group-label" }, group),
370
+ groups?.[group].map((el, idx) => (React.createElement(ListItem, { key: el.id, menuState: menuState, Icon: icons?.[el.id], RightIcon: rightIcons?.[el.id], idx: idx, clickable: clickable, el: el, view: editorView })))));
369
371
  })
370
- : elements === null || elements === void 0 ? void 0 : elements.map((el, idx) => (React.createElement(ListItem, { key: el.id, menuState: menuState, Icon: icons === null || icons === void 0 ? void 0 : icons[el.id], RightIcon: rightIcons === null || rightIcons === void 0 ? void 0 : rightIcons[el.id], idx: idx, clickable: clickable, el: el, view: editorView }))),
371
- (elements === null || elements === void 0 ? void 0 : elements.length) === 0
372
- ? emptySearchComponent || (React.createElement("div", { className: "menu-placeholder" }, "No matching items"))
373
- : null))) : null));
372
+ : elements?.map((el, idx) => (React.createElement(ListItem, { key: el.id, menuState: menuState, Icon: icons?.[el.id], RightIcon: rightIcons?.[el.id], idx: idx, clickable: clickable, el: el, view: editorView }))),
373
+ elements?.length === 0 ? (emptySearchComponent || React.createElement("div", { className: "menu-placeholder" }, "No matching items")) : null))) : null));
374
374
  };
375
375
 
376
376
  export { Icons, Placement, SlashMenuReact, defaultElements, defaultIcons };
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/slashMenuReact/ListItem.tsx","../src/slashMenuReact/defaults.tsx","../src/slashMenuReact/display.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect } from \"react\";\nimport {\n dispatchWithMeta,\n MenuElement,\n SlashMenuKey,\n SlashMenuState,\n SlashMetaTypes,\n} from \"prosemirror-slash-menu\";\nimport \"./styles/menu-style.css\";\nimport { EditorView } from \"prosemirror-view\";\n\nexport const ListItem: FC<{\n menuState: SlashMenuState;\n el: MenuElement;\n view: EditorView;\n idx: number;\n Icon?: FC;\n RightIcon?: FC;\n clickable?: boolean;\n}> = ({ menuState, el, view, Icon, idx, clickable, RightIcon }) => {\n useEffect(() => {\n const element = document.getElementById(el.id);\n\n if (!element) return;\n\n if (el.id === menuState.selected) {\n element.classList.add(\"menu-element-selected\");\n return;\n }\n\n if (element.classList.contains(\"menu-element-selected\")) {\n element.classList.remove(\"menu-element-selected\");\n }\n }, [menuState.selected]);\n const handleOnClick = useCallback(() => {\n if (el.type === \"command\") {\n el.command(view);\n dispatchWithMeta(view, SlashMenuKey, {\n type: SlashMetaTypes.execute,\n });\n }\n\n if (el.type === \"submenu\") {\n dispatchWithMeta(view, SlashMenuKey, {\n type: SlashMetaTypes.openSubMenu,\n element: el,\n });\n }\n }, [el]);\n return (\n <div\n className={\n clickable ? \"menu-element-wrapper-clickable\" : \"menu-element-wrapper\"\n }\n id={el.id}\n key={`${el.id}-${idx}`}\n onClick={handleOnClick}\n >\n {Icon ? (\n <div className={\"menu-element-icon\"}>\n <Icon />\n </div>\n ) : null}\n <div className={\"menu-element-label\"}>{el.label}</div>\n {RightIcon ? (\n <div className={\"menu-element-right-icon\"}>\n <RightIcon />\n </div>\n ) : null}\n </div>\n );\n};\n","import { CommandItem, SubMenu } from \"prosemirror-slash-menu\";\nimport { setBlockType, toggleMark } from \"prosemirror-commands\";\nimport React from \"react\";\n\nexport enum Icons {\n \"HeaderMenu\" = \"HeaderMenu\",\n \"Level1\" = \"Level1\",\n \"Level2\" = \"Level2\",\n \"Level3\" = \"Level3\",\n \"Bold\" = \"Bold\",\n \"Italic\" = \"Italic\",\n \"Link\" = \"Link\",\n \"Code\" = \"Code\",\n}\n\nconst H1Command: CommandItem = {\n id: Icons.Level1,\n label: \"H1\",\n type: \"command\",\n command: (view) => {\n setBlockType(view.state.schema.nodes.heading, { level: 1 })(\n view.state,\n view.dispatch,\n view\n );\n },\n available: () => true,\n};\nconst H2Command: CommandItem = {\n id: Icons.Level2,\n label: \"H2\",\n type: \"command\",\n command: (view) => {\n setBlockType(view.state.schema.nodes.heading, { level: 2 })(\n view.state,\n view.dispatch,\n view\n );\n },\n available: () => true,\n};\nconst H3Command: CommandItem = {\n id: Icons.Level3,\n label: \"H3\",\n type: \"command\",\n command: (view) => {\n setBlockType(view.state.schema.nodes.heading, { level: 3 })(\n view.state,\n view.dispatch,\n view\n );\n },\n available: () => true,\n};\n\nconst BoldCommand: CommandItem = {\n id: Icons.Bold,\n label: \"Bold\",\n type: \"command\",\n command: (view) => {\n const markType = view.state.schema.marks.strong;\n toggleMark(markType)(view.state, view.dispatch, view);\n },\n available: () => true,\n};\nconst ItalicCommand: CommandItem = {\n id: Icons.Italic,\n label: \"Italic\",\n type: \"command\",\n command: (view) => {\n const markType = view.state.schema.marks.em;\n toggleMark(markType)(view.state, view.dispatch, view);\n },\n available: () => true,\n};\nconst CodeCommand: CommandItem = {\n id: Icons.Code,\n label: \"Code\",\n type: \"command\",\n command: (view) => {\n const markType = view.state.schema.marks.code;\n toggleMark(markType)(view.state, view.dispatch, view);\n },\n available: () => true,\n};\nconst LinkCommand: CommandItem = {\n id: Icons.Link,\n label: \"Link\",\n type: \"command\",\n command: (view) => {\n const markType = view.state.schema.marks.link;\n toggleMark(markType)(view.state, view.dispatch, view);\n },\n available: () => true,\n};\n\nconst HeadingsMenu: SubMenu = {\n id: Icons.HeaderMenu,\n label: \"Headings\",\n type: \"submenu\",\n available: () => true,\n elements: [H1Command, H2Command, H3Command],\n};\nexport const defaultElements = [\n HeadingsMenu,\n BoldCommand,\n ItalicCommand,\n CodeCommand,\n LinkCommand,\n];\n\nconst HeadingIcon = () => (\n <svg\n fill=\"#000000\"\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M18 20V4h-3v6H9V4H6v16h3v-7h6v7z\" />\n </svg>\n);\nconst H1Icon = () => (\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17 17H11V12C11 11.4477 10.5523 11 10 11C9.44772 11 9 11.4477 9 12V24C9 24.5523 9.44772 25 10 25C10.5523 25 11 24.5523 11 24V19H17V24C17 24.5523 17.4477 25 18 25C18.5523 25 19 24.5523 19 24V12C19 11.4477 18.5523 11 18 11C17.4477 11 17 11.4477 17 12V17Z\"\n fill=\"#050038\"\n />\n <path\n d=\"M26 25C26.5523 25 27 24.5523 27 24V12C27 11.4477 26.5523 11 26 11H23C22.4477 11 22 11.4477 22 12C22 12.5523 22.4477 13 23 13H25V24C25 24.5523 25.4477 25 26 25Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst H2Icon = () => (\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16 17H11V13C11 12.4477 10.5523 12 10 12C9.44772 12 9 12.4477 9 13V23C9 23.5523 9.44772 24 10 24C10.5523 24 11 23.5523 11 23V19H16V23C16 23.5523 16.4477 24 17 24C17.5523 24 18 23.5523 18 23V13C18 12.4477 17.5523 12 17 12C16.4477 12 16 12.4477 16 13V17Z\"\n fill=\"#050038\"\n />\n <path\n d=\"M26 22H22V19H26C26.5523 19 27 18.5523 27 18V13C27 12.4477 26.5523 12 26 12H21C20.4477 12 20 12.4477 20 13C20 13.5523 20.4477 14 21 14H25V17H21C20.4477 17 20 17.4477 20 18V23C20 23.5523 20.4477 24 21 24H26C26.5523 24 27 23.5523 27 23C27 22.4477 26.5523 22 26 22Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst H3Icon = () => (\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 17H16V14C16 13.4477 16.4477 13 17 13C17.5523 13 18 13.4477 18 14V22C18 22.5523 17.5523 23 17 23C16.4477 23 16 22.5523 16 22V19H12V22C12 22.5523 11.5523 23 11 23C10.4477 23 10 22.5523 10 22V14C10 13.4477 10.4477 13 11 13C11.5523 13 12 13.4477 12 14V17Z\"\n fill=\"#050038\"\n />\n <path\n d=\"M20 14C20 13.4477 20.4477 13 21 13H25C25.5523 13 26 13.4477 26 14V22C26 22.5523 25.5523 23 25 23H21C20.4477 23 20 22.5523 20 22C20 21.4477 20.4477 21 21 21H24V19H21C20.4477 19 20 18.5523 20 18C20 17.4477 20.4477 17 21 17H24V15H21C20.4477 15 20 14.5523 20 14Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst ItalicIcon = () => (\n <svg\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.38197 18L14.382 6H11.5C10.9477 6 10.5 5.55228 10.5 5C10.5 4.44772 10.9477 4 11.5 4H19.5C20.0523 4 20.5 4.44772 20.5 5C20.5 5.55228 20.0523 6 19.5 6H16.618L10.618 18H13.5C14.0523 18 14.5 18.4477 14.5 19C14.5 19.5523 14.0523 20 13.5 20H5.5C4.94772 20 4.5 19.5523 4.5 19C4.5 18.4477 4.94772 18 5.5 18H8.38197Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst BoldIcon = () => (\n <svg\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.5 15C19.5 17.7614 17.2614 20 14.5 20H8.5C7.94772 20 7.5 19.5523 7.5 19V5C7.5 4.44772 7.94772 4 8.5 4H14C16.4853 4 18.5 6.01472 18.5 8.5C18.5 9.4786 18.1876 10.3842 17.6572 11.1226C18.7818 12.0395 19.5 13.4359 19.5 15ZM10.5 10H14C14.8284 10 15.5 9.32843 15.5 8.5C15.5 7.67157 14.8284 7 14 7H10.5V10ZM10.5 17V13H14.5C15.6046 13 16.5 13.8954 16.5 15C16.5 16.1046 15.6046 17 14.5 17H10.5Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst ArrowLeft = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"feather feather-arrow-left\"\n >\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\"></line>\n <polyline points=\"12 19 5 12 12 5\"></polyline>\n </svg>\n);\nconst ArrowRight = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"feather feather-arrow-right\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n <polyline points=\"12 5 19 12 12 19\"></polyline>\n </svg>\n);\nconst CodeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"feather feather-code\"\n >\n <polyline points=\"16 18 22 12 16 6\"></polyline>\n <polyline points=\"8 6 2 12 8 18\"></polyline>\n </svg>\n);\nconst LinkIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"feather feather-link-2\"\n >\n <path d=\"M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3\"></path>\n <line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>\n </svg>\n);\n\nexport const defaultIcons = {\n H1Icon,\n H2Icon,\n H3Icon,\n HeadingIcon,\n LinkIcon,\n BoldIcon,\n CodeIcon,\n ItalicIcon,\n ArrowLeft,\n ArrowRight,\n};\n","import React, {\n FC,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { EditorState } from \"prosemirror-state\";\nimport {\n dispatchWithMeta,\n getElementById,\n MenuElement,\n SlashMenuKey,\n SlashMetaTypes,\n} from \"prosemirror-slash-menu\";\nimport { EditorView } from \"prosemirror-view\";\nimport { usePopper } from \"react-popper\";\nimport { ListItem } from \"./ListItem\";\nimport \"./styles/menu-style.css\";\nimport { defaultIcons } from \"./defaults\";\n\nexport enum Placement {\n auto = \"auto\",\n autoStart = \"auto-start\",\n autoEnd = \"auto-end\",\n top = \"top\",\n topStart = \"top-start\",\n topEnd = \"top-end\",\n bottom = \"bottom\",\n bottomStart = \"bottom-start\",\n bottomEnd = \"bottom-end\",\n right = \"right\",\n rightStart = \"right-start\",\n rightEnd = \"right-end\",\n left = \"left\",\n leftStart = \"left-start\",\n leftEnd = \"left-end\",\n}\n\nexport interface PopperOptions {\n placement: Placement;\n offsetModifier: { name: string; options: { offset: number[] } };\n}\n\nexport interface SlashMenuProps {\n editorState: EditorState;\n editorView: EditorView;\n icons?: {\n [key: string]: FC;\n };\n rightIcons?: {\n [key: string]: FC;\n };\n subMenuIcon?: ReactNode;\n filterFieldIcon?: ReactNode;\n filterPlaceHolder?: string;\n mainMenuLabel?: string;\n popperReference?: HTMLElement;\n popperOptions?: PopperOptions;\n clickable?: boolean;\n disableInput?: boolean;\n emptySearchComponent?: ReactNode;\n}\n\nexport const SlashMenuReact: FC<SlashMenuProps> = ({\n editorState,\n editorView,\n icons,\n rightIcons,\n subMenuIcon,\n filterFieldIcon,\n filterPlaceHolder,\n mainMenuLabel,\n popperReference,\n popperOptions,\n clickable,\n disableInput,\n emptySearchComponent,\n}) => {\n const menuState = useMemo(() => {\n if (!editorState) return;\n\n return SlashMenuKey.getState(editorState);\n }, [editorState]);\n const elements = useMemo(() => {\n if (!menuState) return;\n\n return menuState.filteredElements;\n }, [menuState]);\n\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!rootRef) return;\n\n const outsideClickHandler = (event: MouseEvent) => {\n if (\n rootRef.current &&\n (!event.target ||\n !(event.target instanceof Node) ||\n !rootRef.current.contains(event?.target))\n ) {\n dispatchWithMeta(editorView, SlashMenuKey, {\n type: SlashMetaTypes.close,\n });\n }\n };\n\n document.addEventListener(\"mousedown\", outsideClickHandler);\n\n return () => {\n document.removeEventListener(\"mousedown\", outsideClickHandler);\n };\n }, [rootRef]);\n\n const [popperElement, setPopperElement] = React.useState(null);\n\n const virtualReference = useMemo(() => {\n const domNode = editorView.domAtPos(editorState.selection.to)?.node;\n const cursorPosition = editorView.state.selection.to;\n const cursorLeft = editorView.coordsAtPos(cursorPosition).left;\n\n if (!(domNode instanceof HTMLElement)) return;\n\n const { top, height } = domNode.getBoundingClientRect();\n\n return {\n getBoundingClientRect() {\n return {\n top: top,\n right: cursorLeft,\n bottom: top,\n left: cursorLeft,\n width: 0,\n height: height,\n x: cursorLeft,\n y: top,\n toJSON: () =>\n JSON.stringify({\n top: top,\n right: cursorLeft,\n bottom: top,\n left: cursorLeft,\n width: 0,\n height: height,\n x: cursorLeft,\n y: top,\n }),\n };\n },\n };\n }, [editorView, editorState, window.scrollY]);\n\n const offsetModifier = useMemo(() => {\n return {\n name: \"offset\",\n options: {\n offset: [0, 36],\n },\n };\n }, [popperReference]);\n\n const { styles, attributes } = usePopper(\n popperReference || virtualReference,\n popperElement,\n {\n placement: popperOptions?.placement\n ? popperOptions.placement\n : Placement.bottomStart,\n modifiers: [\n { name: \"flip\", enabled: true },\n {\n name: \"preventOverflow\",\n },\n popperOptions?.offsetModifier\n ? popperOptions.offsetModifier\n : offsetModifier,\n ],\n }\n );\n\n useEffect(() => {\n if (!menuState) return;\n\n const element = document.getElementById(menuState.selected);\n\n if (!element || !rootRef.current) return;\n\n const isTopElement =\n menuState.selected === menuState.filteredElements[0].id;\n\n if (isTopElement) {\n rootRef.current.scrollTop = 0;\n return;\n }\n\n const height =\n element.clientHeight +\n parseInt(\n window.getComputedStyle(element).getPropertyValue(\"margin-top\")\n ) +\n parseInt(\n window.getComputedStyle(element).getPropertyValue(\"margin-bottom\")\n ) +\n parseInt(\n window.getComputedStyle(element).getPropertyValue(\"padding-top\")\n ) +\n parseInt(\n window.getComputedStyle(element).getPropertyValue(\"padding-bottom\")\n );\n\n const { bottom, top } = element.getBoundingClientRect();\n\n const containerRect = rootRef.current.getBoundingClientRect();\n\n const scrollUp = top - height < containerRect.top;\n\n const visible = scrollUp\n ? top - containerRect.top > height\n : !(bottom > containerRect.bottom);\n\n if (!visible) {\n if (scrollUp) {\n rootRef.current.scrollTop = element.offsetTop - height / 2;\n } else {\n rootRef.current.scrollTop =\n element.offsetTop - containerRect.height + height + height / 4;\n }\n }\n }, [menuState]);\n\n useEffect(() => {\n if (rootRef.current === null) {\n return;\n }\n\n rootRef.current.scrollTop = 0;\n }, [menuState?.filteredElements]);\n\n const subMenuLabel = useMemo(() => {\n if (menuState?.subMenuId) {\n return getElementById(menuState.subMenuId, menuState)?.label;\n }\n }, [menuState]);\n\n const closeSubMenu = useCallback(() => {\n if (menuState?.subMenuId) {\n dispatchWithMeta(editorView, SlashMenuKey, {\n type: SlashMetaTypes.closeSubMenu,\n element: getElementById(menuState.subMenuId, menuState),\n });\n }\n }, [menuState]);\n\n // These two useEffects prevent a bug where the user navigates with clicks, which then blurs the editor and key presses stop working\n useEffect(() => {\n editorView.focus();\n }, [menuState?.open]);\n useEffect(() => {\n editorView.focus();\n }, [menuState?.subMenuId]);\n\n const groups = useMemo(() => {\n if (!elements) {\n return;\n }\n\n return elements.reduce((acc, el) => {\n if (el.group) {\n acc[el.group] = acc[el.group] || [];\n acc[el.group].push(el);\n } else {\n acc[\"\"] = acc[\"\"] || [];\n acc[\"\"].push(el);\n }\n\n return acc;\n }, {} as { [key: string]: MenuElement[] });\n }, [elements]);\n\n return (\n <>\n {menuState?.open ? (\n <div\n // @ts-expect-error - something is fishy here but it works so 🤷‍♂️\n ref={setPopperElement}\n style={{\n ...styles.popper,\n }}\n {...attributes.popper}\n >\n {disableInput ? null : menuState.filter ? (\n <div className={\"menu-filter-wrapper\"}>\n {filterFieldIcon ? (\n <div className={\"menu-filter-icon\"}>{filterFieldIcon}</div>\n ) : null}\n <div id={\"menu-filter\"} className={\"menu-filter\"}>\n {menuState.filter}\n </div>\n </div>\n ) : (\n <div className={\"menu-filter-wrapper\"}>\n {filterFieldIcon ? (\n <div className={\"menu-filter-icon\"}>{filterFieldIcon}</div>\n ) : null}\n <div className={\"menu-filter-placeholder\"}>\n {filterPlaceHolder}\n </div>\n </div>\n )}\n\n <div\n id={\"slashDisplay\"}\n ref={rootRef}\n className={\"menu-display-root\"}\n >\n {menuState.subMenuId ? (\n <div\n className={\"menu-element-wrapper\"}\n onClick={clickable ? closeSubMenu : undefined}\n style={{ cursor: clickable ? \"pointer\" : undefined }}\n >\n <div className={\"menu-element-icon-left\"}>\n {subMenuIcon || defaultIcons.ArrowLeft()}\n </div>\n <div className={\"submenu-label\"}>{subMenuLabel}</div>\n </div>\n ) : null}\n {!menuState.subMenuId && mainMenuLabel ? (\n <div className={\"menu-element-wrapper\"}>\n <div className={\"submenu-label\"}>{mainMenuLabel}</div>\n </div>\n ) : null}\n {groups && Object.keys(groups)?.length > 1\n ? Object.keys(groups).map((group, x) => {\n return (\n <div key={x} className=\"group-wrapper\">\n <div className=\"group-label\">{group}</div>\n {groups?.[group].map((el: MenuElement, idx: number) => (\n <ListItem\n key={el.id}\n menuState={menuState}\n Icon={icons?.[el.id]}\n RightIcon={rightIcons?.[el.id]}\n idx={idx}\n clickable={clickable}\n el={el}\n view={editorView}\n />\n ))}\n </div>\n );\n })\n : elements?.map((el: MenuElement, idx: number) => (\n <ListItem\n key={el.id}\n menuState={menuState}\n Icon={icons?.[el.id]}\n RightIcon={rightIcons?.[el.id]}\n idx={idx}\n clickable={clickable}\n el={el}\n view={editorView}\n />\n ))}\n {elements?.length === 0 ? (\n emptySearchComponent || <div className={\"menu-placeholder\"}>No matching items</div>\n ) : null}\n </div>\n </div>\n ) : null}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -64,7 +64,7 @@ const H1Command = {
64
64
  command: (view) => {
65
65
  prosemirrorCommands.setBlockType(view.state.schema.nodes.heading, { level: 1 })(view.state, view.dispatch, view);
66
66
  },
67
- available: (view) => true,
67
+ available: () => true,
68
68
  };
69
69
  const H2Command = {
70
70
  id: exports.Icons.Level2,
@@ -73,7 +73,7 @@ const H2Command = {
73
73
  command: (view) => {
74
74
  prosemirrorCommands.setBlockType(view.state.schema.nodes.heading, { level: 2 })(view.state, view.dispatch, view);
75
75
  },
76
- available: (view) => true,
76
+ available: () => true,
77
77
  };
78
78
  const H3Command = {
79
79
  id: exports.Icons.Level3,
@@ -82,7 +82,7 @@ const H3Command = {
82
82
  command: (view) => {
83
83
  prosemirrorCommands.setBlockType(view.state.schema.nodes.heading, { level: 3 })(view.state, view.dispatch, view);
84
84
  },
85
- available: (view) => true,
85
+ available: () => true,
86
86
  };
87
87
  const BoldCommand = {
88
88
  id: exports.Icons.Bold,
@@ -92,7 +92,7 @@ const BoldCommand = {
92
92
  const markType = view.state.schema.marks.strong;
93
93
  prosemirrorCommands.toggleMark(markType)(view.state, view.dispatch, view);
94
94
  },
95
- available: (view) => true,
95
+ available: () => true,
96
96
  };
97
97
  const ItalicCommand = {
98
98
  id: exports.Icons.Italic,
@@ -102,7 +102,7 @@ const ItalicCommand = {
102
102
  const markType = view.state.schema.marks.em;
103
103
  prosemirrorCommands.toggleMark(markType)(view.state, view.dispatch, view);
104
104
  },
105
- available: (view) => true,
105
+ available: () => true,
106
106
  };
107
107
  const CodeCommand = {
108
108
  id: exports.Icons.Code,
@@ -112,7 +112,7 @@ const CodeCommand = {
112
112
  const markType = view.state.schema.marks.code;
113
113
  prosemirrorCommands.toggleMark(markType)(view.state, view.dispatch, view);
114
114
  },
115
- available: (view) => true,
115
+ available: () => true,
116
116
  };
117
117
  const LinkCommand = {
118
118
  id: exports.Icons.Link,
@@ -122,13 +122,13 @@ const LinkCommand = {
122
122
  const markType = view.state.schema.marks.link;
123
123
  prosemirrorCommands.toggleMark(markType)(view.state, view.dispatch, view);
124
124
  },
125
- available: (view) => true,
125
+ available: () => true,
126
126
  };
127
127
  const HeadingsMenu = {
128
128
  id: exports.Icons.HeaderMenu,
129
129
  label: "Headings",
130
130
  type: "submenu",
131
- available: (view) => true,
131
+ available: () => true,
132
132
  elements: [H1Command, H2Command, H3Command],
133
133
  };
134
134
  const defaultElements = [
@@ -138,6 +138,8 @@ const defaultElements = [
138
138
  CodeCommand,
139
139
  LinkCommand,
140
140
  ];
141
+ const HeadingIcon = () => (React__default["default"].createElement("svg", { fill: "#000000", width: "36", height: "36", viewBox: "0 0 36 36", xmlns: "http://www.w3.org/2000/svg" },
142
+ React__default["default"].createElement("path", { d: "M18 20V4h-3v6H9V4H6v16h3v-7h6v7z" })));
141
143
  const H1Icon = () => (React__default["default"].createElement("svg", { width: "36", height: "36", viewBox: "0 0 36 36", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
142
144
  React__default["default"].createElement("path", { d: "M17 17H11V12C11 11.4477 10.5523 11 10 11C9.44772 11 9 11.4477 9 12V24C9 24.5523 9.44772 25 10 25C10.5523 25 11 24.5523 11 24V19H17V24C17 24.5523 17.4477 25 18 25C18.5523 25 19 24.5523 19 24V12C19 11.4477 18.5523 11 18 11C17.4477 11 17 11.4477 17 12V17Z", fill: "#050038" }),
143
145
  React__default["default"].createElement("path", { d: "M26 25C26.5523 25 27 24.5523 27 24V12C27 11.4477 26.5523 11 26 11H23C22.4477 11 22 11.4477 22 12C22 12.5523 22.4477 13 23 13H25V24C25 24.5523 25.4477 25 26 25Z", fill: "#050038" })));
@@ -167,6 +169,7 @@ const defaultIcons = {
167
169
  H1Icon,
168
170
  H2Icon,
169
171
  H3Icon,
172
+ HeadingIcon,
170
173
  LinkIcon,
171
174
  BoldIcon,
172
175
  CodeIcon,
@@ -194,7 +197,6 @@ exports.Placement = void 0;
194
197
  Placement["leftEnd"] = "left-end";
195
198
  })(exports.Placement || (exports.Placement = {}));
196
199
  const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIcon, filterFieldIcon, filterPlaceHolder, mainMenuLabel, popperReference, popperOptions, clickable, disableInput, emptySearchComponent, }) => {
197
- var _a;
198
200
  const menuState = React.useMemo(() => {
199
201
  if (!editorState)
200
202
  return;
@@ -213,7 +215,7 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
213
215
  if (rootRef.current &&
214
216
  (!event.target ||
215
217
  !(event.target instanceof Node) ||
216
- !rootRef.current.contains(event === null || event === void 0 ? void 0 : event.target))) {
218
+ !rootRef.current.contains(event?.target))) {
217
219
  prosemirrorSlashMenu.dispatchWithMeta(editorView, prosemirrorSlashMenu.SlashMenuKey, {
218
220
  type: prosemirrorSlashMenu.SlashMetaTypes.close,
219
221
  });
@@ -226,8 +228,7 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
226
228
  }, [rootRef]);
227
229
  const [popperElement, setPopperElement] = React__default["default"].useState(null);
228
230
  const virtualReference = React.useMemo(() => {
229
- var _a;
230
- const domNode = (_a = editorView.domAtPos(editorState.selection.to)) === null || _a === void 0 ? void 0 : _a.node;
231
+ const domNode = editorView.domAtPos(editorState.selection.to)?.node;
231
232
  const cursorPosition = editorView.state.selection.to;
232
233
  const cursorLeft = editorView.coordsAtPos(cursorPosition).left;
233
234
  if (!(domNode instanceof HTMLElement))
@@ -267,7 +268,7 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
267
268
  };
268
269
  }, [popperReference]);
269
270
  const { styles, attributes } = reactPopper.usePopper(popperReference || virtualReference, popperElement, {
270
- placement: (popperOptions === null || popperOptions === void 0 ? void 0 : popperOptions.placement)
271
+ placement: popperOptions?.placement
271
272
  ? popperOptions.placement
272
273
  : exports.Placement.bottomStart,
273
274
  modifiers: [
@@ -275,7 +276,7 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
275
276
  {
276
277
  name: "preventOverflow",
277
278
  },
278
- (popperOptions === null || popperOptions === void 0 ? void 0 : popperOptions.offsetModifier)
279
+ popperOptions?.offsetModifier
279
280
  ? popperOptions.offsetModifier
280
281
  : offsetModifier,
281
282
  ],
@@ -317,15 +318,14 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
317
318
  return;
318
319
  }
319
320
  rootRef.current.scrollTop = 0;
320
- }, [menuState === null || menuState === void 0 ? void 0 : menuState.filteredElements]);
321
+ }, [menuState?.filteredElements]);
321
322
  const subMenuLabel = React.useMemo(() => {
322
- var _a;
323
- if (menuState === null || menuState === void 0 ? void 0 : menuState.subMenuId) {
324
- return (_a = prosemirrorSlashMenu.getElementById(menuState.subMenuId, menuState)) === null || _a === void 0 ? void 0 : _a.label;
323
+ if (menuState?.subMenuId) {
324
+ return prosemirrorSlashMenu.getElementById(menuState.subMenuId, menuState)?.label;
325
325
  }
326
326
  }, [menuState]);
327
327
  const closeSubMenu = React.useCallback(() => {
328
- if (menuState === null || menuState === void 0 ? void 0 : menuState.subMenuId) {
328
+ if (menuState?.subMenuId) {
329
329
  prosemirrorSlashMenu.dispatchWithMeta(editorView, prosemirrorSlashMenu.SlashMenuKey, {
330
330
  type: prosemirrorSlashMenu.SlashMetaTypes.closeSubMenu,
331
331
  element: prosemirrorSlashMenu.getElementById(menuState.subMenuId, menuState),
@@ -335,10 +335,10 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
335
335
  // These two useEffects prevent a bug where the user navigates with clicks, which then blurs the editor and key presses stop working
336
336
  React.useEffect(() => {
337
337
  editorView.focus();
338
- }, [menuState === null || menuState === void 0 ? void 0 : menuState.open]);
338
+ }, [menuState?.open]);
339
339
  React.useEffect(() => {
340
340
  editorView.focus();
341
- }, [menuState === null || menuState === void 0 ? void 0 : menuState.subMenuId]);
341
+ }, [menuState?.subMenuId]);
342
342
  const groups = React.useMemo(() => {
343
343
  if (!elements) {
344
344
  return;
@@ -355,9 +355,11 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
355
355
  return acc;
356
356
  }, {});
357
357
  }, [elements]);
358
- return (React__default["default"].createElement(React__default["default"].Fragment, null, (menuState === null || menuState === void 0 ? void 0 : menuState.open) ? (React__default["default"].createElement("div", Object.assign({
359
- // @ts-ignore
360
- ref: setPopperElement, style: Object.assign({}, styles.popper) }, attributes.popper),
358
+ return (React__default["default"].createElement(React__default["default"].Fragment, null, menuState?.open ? (React__default["default"].createElement("div", {
359
+ // @ts-expect-error - something is fishy here but it works so 🤷‍♂️
360
+ ref: setPopperElement, style: {
361
+ ...styles.popper,
362
+ }, ...attributes.popper },
361
363
  disableInput ? null : menuState.filter ? (React__default["default"].createElement("div", { className: "menu-filter-wrapper" },
362
364
  filterFieldIcon ? (React__default["default"].createElement("div", { className: "menu-filter-icon" }, filterFieldIcon)) : null,
363
365
  React__default["default"].createElement("div", { id: "menu-filter", className: "menu-filter" }, menuState.filter))) : (React__default["default"].createElement("div", { className: "menu-filter-wrapper" },
@@ -369,16 +371,14 @@ const SlashMenuReact = ({ editorState, editorView, icons, rightIcons, subMenuIco
369
371
  React__default["default"].createElement("div", { className: "submenu-label" }, subMenuLabel))) : null,
370
372
  !menuState.subMenuId && mainMenuLabel ? (React__default["default"].createElement("div", { className: "menu-element-wrapper" },
371
373
  React__default["default"].createElement("div", { className: "submenu-label" }, mainMenuLabel))) : null,
372
- groups && ((_a = Object.keys(groups)) === null || _a === void 0 ? void 0 : _a.length) > 1
374
+ groups && Object.keys(groups)?.length > 1
373
375
  ? Object.keys(groups).map((group, x) => {
374
376
  return (React__default["default"].createElement("div", { key: x, className: "group-wrapper" },
375
- React__default["default"].createElement("div", { className: "group-label" }, group), groups === null || groups === void 0 ? void 0 :
376
- groups[group].map((el, idx) => (React__default["default"].createElement(ListItem, { key: el.id, menuState: menuState, Icon: icons === null || icons === void 0 ? void 0 : icons[el.id], RightIcon: rightIcons === null || rightIcons === void 0 ? void 0 : rightIcons[el.id], idx: idx, clickable: clickable, el: el, view: editorView })))));
377
+ React__default["default"].createElement("div", { className: "group-label" }, group),
378
+ groups?.[group].map((el, idx) => (React__default["default"].createElement(ListItem, { key: el.id, menuState: menuState, Icon: icons?.[el.id], RightIcon: rightIcons?.[el.id], idx: idx, clickable: clickable, el: el, view: editorView })))));
377
379
  })
378
- : elements === null || elements === void 0 ? void 0 : elements.map((el, idx) => (React__default["default"].createElement(ListItem, { key: el.id, menuState: menuState, Icon: icons === null || icons === void 0 ? void 0 : icons[el.id], RightIcon: rightIcons === null || rightIcons === void 0 ? void 0 : rightIcons[el.id], idx: idx, clickable: clickable, el: el, view: editorView }))),
379
- (elements === null || elements === void 0 ? void 0 : elements.length) === 0
380
- ? emptySearchComponent || (React__default["default"].createElement("div", { className: "menu-placeholder" }, "No matching items"))
381
- : null))) : null));
380
+ : elements?.map((el, idx) => (React__default["default"].createElement(ListItem, { key: el.id, menuState: menuState, Icon: icons?.[el.id], RightIcon: rightIcons?.[el.id], idx: idx, clickable: clickable, el: el, view: editorView }))),
381
+ elements?.length === 0 ? (emptySearchComponent || React__default["default"].createElement("div", { className: "menu-placeholder" }, "No matching items")) : null))) : null));
382
382
  };
383
383
 
384
384
  exports.SlashMenuReact = SlashMenuReact;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/slashMenuReact/ListItem.tsx","../src/slashMenuReact/defaults.tsx","../src/slashMenuReact/display.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect } from \"react\";\nimport {\n dispatchWithMeta,\n MenuElement,\n SlashMenuKey,\n SlashMenuState,\n SlashMetaTypes,\n} from \"prosemirror-slash-menu\";\nimport \"./styles/menu-style.css\";\nimport { EditorView } from \"prosemirror-view\";\n\nexport const ListItem: FC<{\n menuState: SlashMenuState;\n el: MenuElement;\n view: EditorView;\n idx: number;\n Icon?: FC;\n RightIcon?: FC;\n clickable?: boolean;\n}> = ({ menuState, el, view, Icon, idx, clickable, RightIcon }) => {\n useEffect(() => {\n const element = document.getElementById(el.id);\n\n if (!element) return;\n\n if (el.id === menuState.selected) {\n element.classList.add(\"menu-element-selected\");\n return;\n }\n\n if (element.classList.contains(\"menu-element-selected\")) {\n element.classList.remove(\"menu-element-selected\");\n }\n }, [menuState.selected]);\n const handleOnClick = useCallback(() => {\n if (el.type === \"command\") {\n el.command(view);\n dispatchWithMeta(view, SlashMenuKey, {\n type: SlashMetaTypes.execute,\n });\n }\n\n if (el.type === \"submenu\") {\n dispatchWithMeta(view, SlashMenuKey, {\n type: SlashMetaTypes.openSubMenu,\n element: el,\n });\n }\n }, [el]);\n return (\n <div\n className={\n clickable ? \"menu-element-wrapper-clickable\" : \"menu-element-wrapper\"\n }\n id={el.id}\n key={`${el.id}-${idx}`}\n onClick={handleOnClick}\n >\n {Icon ? (\n <div className={\"menu-element-icon\"}>\n <Icon />\n </div>\n ) : null}\n <div className={\"menu-element-label\"}>{el.label}</div>\n {RightIcon ? (\n <div className={\"menu-element-right-icon\"}>\n <RightIcon />\n </div>\n ) : null}\n </div>\n );\n};\n","import { CommandItem, SubMenu } from \"prosemirror-slash-menu\";\nimport { setBlockType, toggleMark } from \"prosemirror-commands\";\nimport React from \"react\";\n\nexport enum Icons {\n \"HeaderMenu\" = \"HeaderMenu\",\n \"Level1\" = \"Level1\",\n \"Level2\" = \"Level2\",\n \"Level3\" = \"Level3\",\n \"Bold\" = \"Bold\",\n \"Italic\" = \"Italic\",\n \"Link\" = \"Link\",\n \"Code\" = \"Code\",\n}\n\nconst H1Command: CommandItem = {\n id: Icons.Level1,\n label: \"H1\",\n type: \"command\",\n command: (view) => {\n setBlockType(view.state.schema.nodes.heading, { level: 1 })(\n view.state,\n view.dispatch,\n view\n );\n },\n available: () => true,\n};\nconst H2Command: CommandItem = {\n id: Icons.Level2,\n label: \"H2\",\n type: \"command\",\n command: (view) => {\n setBlockType(view.state.schema.nodes.heading, { level: 2 })(\n view.state,\n view.dispatch,\n view\n );\n },\n available: () => true,\n};\nconst H3Command: CommandItem = {\n id: Icons.Level3,\n label: \"H3\",\n type: \"command\",\n command: (view) => {\n setBlockType(view.state.schema.nodes.heading, { level: 3 })(\n view.state,\n view.dispatch,\n view\n );\n },\n available: () => true,\n};\n\nconst BoldCommand: CommandItem = {\n id: Icons.Bold,\n label: \"Bold\",\n type: \"command\",\n command: (view) => {\n const markType = view.state.schema.marks.strong;\n toggleMark(markType)(view.state, view.dispatch, view);\n },\n available: () => true,\n};\nconst ItalicCommand: CommandItem = {\n id: Icons.Italic,\n label: \"Italic\",\n type: \"command\",\n command: (view) => {\n const markType = view.state.schema.marks.em;\n toggleMark(markType)(view.state, view.dispatch, view);\n },\n available: () => true,\n};\nconst CodeCommand: CommandItem = {\n id: Icons.Code,\n label: \"Code\",\n type: \"command\",\n command: (view) => {\n const markType = view.state.schema.marks.code;\n toggleMark(markType)(view.state, view.dispatch, view);\n },\n available: () => true,\n};\nconst LinkCommand: CommandItem = {\n id: Icons.Link,\n label: \"Link\",\n type: \"command\",\n command: (view) => {\n const markType = view.state.schema.marks.link;\n toggleMark(markType)(view.state, view.dispatch, view);\n },\n available: () => true,\n};\n\nconst HeadingsMenu: SubMenu = {\n id: Icons.HeaderMenu,\n label: \"Headings\",\n type: \"submenu\",\n available: () => true,\n elements: [H1Command, H2Command, H3Command],\n};\nexport const defaultElements = [\n HeadingsMenu,\n BoldCommand,\n ItalicCommand,\n CodeCommand,\n LinkCommand,\n];\n\nconst HeadingIcon = () => (\n <svg\n fill=\"#000000\"\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M18 20V4h-3v6H9V4H6v16h3v-7h6v7z\" />\n </svg>\n);\nconst H1Icon = () => (\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17 17H11V12C11 11.4477 10.5523 11 10 11C9.44772 11 9 11.4477 9 12V24C9 24.5523 9.44772 25 10 25C10.5523 25 11 24.5523 11 24V19H17V24C17 24.5523 17.4477 25 18 25C18.5523 25 19 24.5523 19 24V12C19 11.4477 18.5523 11 18 11C17.4477 11 17 11.4477 17 12V17Z\"\n fill=\"#050038\"\n />\n <path\n d=\"M26 25C26.5523 25 27 24.5523 27 24V12C27 11.4477 26.5523 11 26 11H23C22.4477 11 22 11.4477 22 12C22 12.5523 22.4477 13 23 13H25V24C25 24.5523 25.4477 25 26 25Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst H2Icon = () => (\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16 17H11V13C11 12.4477 10.5523 12 10 12C9.44772 12 9 12.4477 9 13V23C9 23.5523 9.44772 24 10 24C10.5523 24 11 23.5523 11 23V19H16V23C16 23.5523 16.4477 24 17 24C17.5523 24 18 23.5523 18 23V13C18 12.4477 17.5523 12 17 12C16.4477 12 16 12.4477 16 13V17Z\"\n fill=\"#050038\"\n />\n <path\n d=\"M26 22H22V19H26C26.5523 19 27 18.5523 27 18V13C27 12.4477 26.5523 12 26 12H21C20.4477 12 20 12.4477 20 13C20 13.5523 20.4477 14 21 14H25V17H21C20.4477 17 20 17.4477 20 18V23C20 23.5523 20.4477 24 21 24H26C26.5523 24 27 23.5523 27 23C27 22.4477 26.5523 22 26 22Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst H3Icon = () => (\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 36 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 17H16V14C16 13.4477 16.4477 13 17 13C17.5523 13 18 13.4477 18 14V22C18 22.5523 17.5523 23 17 23C16.4477 23 16 22.5523 16 22V19H12V22C12 22.5523 11.5523 23 11 23C10.4477 23 10 22.5523 10 22V14C10 13.4477 10.4477 13 11 13C11.5523 13 12 13.4477 12 14V17Z\"\n fill=\"#050038\"\n />\n <path\n d=\"M20 14C20 13.4477 20.4477 13 21 13H25C25.5523 13 26 13.4477 26 14V22C26 22.5523 25.5523 23 25 23H21C20.4477 23 20 22.5523 20 22C20 21.4477 20.4477 21 21 21H24V19H21C20.4477 19 20 18.5523 20 18C20 17.4477 20.4477 17 21 17H24V15H21C20.4477 15 20 14.5523 20 14Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst ItalicIcon = () => (\n <svg\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.38197 18L14.382 6H11.5C10.9477 6 10.5 5.55228 10.5 5C10.5 4.44772 10.9477 4 11.5 4H19.5C20.0523 4 20.5 4.44772 20.5 5C20.5 5.55228 20.0523 6 19.5 6H16.618L10.618 18H13.5C14.0523 18 14.5 18.4477 14.5 19C14.5 19.5523 14.0523 20 13.5 20H5.5C4.94772 20 4.5 19.5523 4.5 19C4.5 18.4477 4.94772 18 5.5 18H8.38197Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst BoldIcon = () => (\n <svg\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.5 15C19.5 17.7614 17.2614 20 14.5 20H8.5C7.94772 20 7.5 19.5523 7.5 19V5C7.5 4.44772 7.94772 4 8.5 4H14C16.4853 4 18.5 6.01472 18.5 8.5C18.5 9.4786 18.1876 10.3842 17.6572 11.1226C18.7818 12.0395 19.5 13.4359 19.5 15ZM10.5 10H14C14.8284 10 15.5 9.32843 15.5 8.5C15.5 7.67157 14.8284 7 14 7H10.5V10ZM10.5 17V13H14.5C15.6046 13 16.5 13.8954 16.5 15C16.5 16.1046 15.6046 17 14.5 17H10.5Z\"\n fill=\"#050038\"\n />\n </svg>\n);\nconst ArrowLeft = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"feather feather-arrow-left\"\n >\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\"></line>\n <polyline points=\"12 19 5 12 12 5\"></polyline>\n </svg>\n);\nconst ArrowRight = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"feather feather-arrow-right\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n <polyline points=\"12 5 19 12 12 19\"></polyline>\n </svg>\n);\nconst CodeIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"feather feather-code\"\n >\n <polyline points=\"16 18 22 12 16 6\"></polyline>\n <polyline points=\"8 6 2 12 8 18\"></polyline>\n </svg>\n);\nconst LinkIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"feather feather-link-2\"\n >\n <path d=\"M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3\"></path>\n <line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>\n </svg>\n);\n\nexport const defaultIcons = {\n H1Icon,\n H2Icon,\n H3Icon,\n HeadingIcon,\n LinkIcon,\n BoldIcon,\n CodeIcon,\n ItalicIcon,\n ArrowLeft,\n ArrowRight,\n};\n","import React, {\n FC,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { EditorState } from \"prosemirror-state\";\nimport {\n dispatchWithMeta,\n getElementById,\n MenuElement,\n SlashMenuKey,\n SlashMetaTypes,\n} from \"prosemirror-slash-menu\";\nimport { EditorView } from \"prosemirror-view\";\nimport { usePopper } from \"react-popper\";\nimport { ListItem } from \"./ListItem\";\nimport \"./styles/menu-style.css\";\nimport { defaultIcons } from \"./defaults\";\n\nexport enum Placement {\n auto = \"auto\",\n autoStart = \"auto-start\",\n autoEnd = \"auto-end\",\n top = \"top\",\n topStart = \"top-start\",\n topEnd = \"top-end\",\n bottom = \"bottom\",\n bottomStart = \"bottom-start\",\n bottomEnd = \"bottom-end\",\n right = \"right\",\n rightStart = \"right-start\",\n rightEnd = \"right-end\",\n left = \"left\",\n leftStart = \"left-start\",\n leftEnd = \"left-end\",\n}\n\nexport interface PopperOptions {\n placement: Placement;\n offsetModifier: { name: string; options: { offset: number[] } };\n}\n\nexport interface SlashMenuProps {\n editorState: EditorState;\n editorView: EditorView;\n icons?: {\n [key: string]: FC;\n };\n rightIcons?: {\n [key: string]: FC;\n };\n subMenuIcon?: ReactNode;\n filterFieldIcon?: ReactNode;\n filterPlaceHolder?: string;\n mainMenuLabel?: string;\n popperReference?: HTMLElement;\n popperOptions?: PopperOptions;\n clickable?: boolean;\n disableInput?: boolean;\n emptySearchComponent?: ReactNode;\n}\n\nexport const SlashMenuReact: FC<SlashMenuProps> = ({\n editorState,\n editorView,\n icons,\n rightIcons,\n subMenuIcon,\n filterFieldIcon,\n filterPlaceHolder,\n mainMenuLabel,\n popperReference,\n popperOptions,\n clickable,\n disableInput,\n emptySearchComponent,\n}) => {\n const menuState = useMemo(() => {\n if (!editorState) return;\n\n return SlashMenuKey.getState(editorState);\n }, [editorState]);\n const elements = useMemo(() => {\n if (!menuState) return;\n\n return menuState.filteredElements;\n }, [menuState]);\n\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!rootRef) return;\n\n const outsideClickHandler = (event: MouseEvent) => {\n if (\n rootRef.current &&\n (!event.target ||\n !(event.target instanceof Node) ||\n !rootRef.current.contains(event?.target))\n ) {\n dispatchWithMeta(editorView, SlashMenuKey, {\n type: SlashMetaTypes.close,\n });\n }\n };\n\n document.addEventListener(\"mousedown\", outsideClickHandler);\n\n return () => {\n document.removeEventListener(\"mousedown\", outsideClickHandler);\n };\n }, [rootRef]);\n\n const [popperElement, setPopperElement] = React.useState(null);\n\n const virtualReference = useMemo(() => {\n const domNode = editorView.domAtPos(editorState.selection.to)?.node;\n const cursorPosition = editorView.state.selection.to;\n const cursorLeft = editorView.coordsAtPos(cursorPosition).left;\n\n if (!(domNode instanceof HTMLElement)) return;\n\n const { top, height } = domNode.getBoundingClientRect();\n\n return {\n getBoundingClientRect() {\n return {\n top: top,\n right: cursorLeft,\n bottom: top,\n left: cursorLeft,\n width: 0,\n height: height,\n x: cursorLeft,\n y: top,\n toJSON: () =>\n JSON.stringify({\n top: top,\n right: cursorLeft,\n bottom: top,\n left: cursorLeft,\n width: 0,\n height: height,\n x: cursorLeft,\n y: top,\n }),\n };\n },\n };\n }, [editorView, editorState, window.scrollY]);\n\n const offsetModifier = useMemo(() => {\n return {\n name: \"offset\",\n options: {\n offset: [0, 36],\n },\n };\n }, [popperReference]);\n\n const { styles, attributes } = usePopper(\n popperReference || virtualReference,\n popperElement,\n {\n placement: popperOptions?.placement\n ? popperOptions.placement\n : Placement.bottomStart,\n modifiers: [\n { name: \"flip\", enabled: true },\n {\n name: \"preventOverflow\",\n },\n popperOptions?.offsetModifier\n ? popperOptions.offsetModifier\n : offsetModifier,\n ],\n }\n );\n\n useEffect(() => {\n if (!menuState) return;\n\n const element = document.getElementById(menuState.selected);\n\n if (!element || !rootRef.current) return;\n\n const isTopElement =\n menuState.selected === menuState.filteredElements[0].id;\n\n if (isTopElement) {\n rootRef.current.scrollTop = 0;\n return;\n }\n\n const height =\n element.clientHeight +\n parseInt(\n window.getComputedStyle(element).getPropertyValue(\"margin-top\")\n ) +\n parseInt(\n window.getComputedStyle(element).getPropertyValue(\"margin-bottom\")\n ) +\n parseInt(\n window.getComputedStyle(element).getPropertyValue(\"padding-top\")\n ) +\n parseInt(\n window.getComputedStyle(element).getPropertyValue(\"padding-bottom\")\n );\n\n const { bottom, top } = element.getBoundingClientRect();\n\n const containerRect = rootRef.current.getBoundingClientRect();\n\n const scrollUp = top - height < containerRect.top;\n\n const visible = scrollUp\n ? top - containerRect.top > height\n : !(bottom > containerRect.bottom);\n\n if (!visible) {\n if (scrollUp) {\n rootRef.current.scrollTop = element.offsetTop - height / 2;\n } else {\n rootRef.current.scrollTop =\n element.offsetTop - containerRect.height + height + height / 4;\n }\n }\n }, [menuState]);\n\n useEffect(() => {\n if (rootRef.current === null) {\n return;\n }\n\n rootRef.current.scrollTop = 0;\n }, [menuState?.filteredElements]);\n\n const subMenuLabel = useMemo(() => {\n if (menuState?.subMenuId) {\n return getElementById(menuState.subMenuId, menuState)?.label;\n }\n }, [menuState]);\n\n const closeSubMenu = useCallback(() => {\n if (menuState?.subMenuId) {\n dispatchWithMeta(editorView, SlashMenuKey, {\n type: SlashMetaTypes.closeSubMenu,\n element: getElementById(menuState.subMenuId, menuState),\n });\n }\n }, [menuState]);\n\n // These two useEffects prevent a bug where the user navigates with clicks, which then blurs the editor and key presses stop working\n useEffect(() => {\n editorView.focus();\n }, [menuState?.open]);\n useEffect(() => {\n editorView.focus();\n }, [menuState?.subMenuId]);\n\n const groups = useMemo(() => {\n if (!elements) {\n return;\n }\n\n return elements.reduce((acc, el) => {\n if (el.group) {\n acc[el.group] = acc[el.group] || [];\n acc[el.group].push(el);\n } else {\n acc[\"\"] = acc[\"\"] || [];\n acc[\"\"].push(el);\n }\n\n return acc;\n }, {} as { [key: string]: MenuElement[] });\n }, [elements]);\n\n return (\n <>\n {menuState?.open ? (\n <div\n // @ts-expect-error - something is fishy here but it works so 🤷‍♂️\n ref={setPopperElement}\n style={{\n ...styles.popper,\n }}\n {...attributes.popper}\n >\n {disableInput ? null : menuState.filter ? (\n <div className={\"menu-filter-wrapper\"}>\n {filterFieldIcon ? (\n <div className={\"menu-filter-icon\"}>{filterFieldIcon}</div>\n ) : null}\n <div id={\"menu-filter\"} className={\"menu-filter\"}>\n {menuState.filter}\n </div>\n </div>\n ) : (\n <div className={\"menu-filter-wrapper\"}>\n {filterFieldIcon ? (\n <div className={\"menu-filter-icon\"}>{filterFieldIcon}</div>\n ) : null}\n <div className={\"menu-filter-placeholder\"}>\n {filterPlaceHolder}\n </div>\n </div>\n )}\n\n <div\n id={\"slashDisplay\"}\n ref={rootRef}\n className={\"menu-display-root\"}\n >\n {menuState.subMenuId ? (\n <div\n className={\"menu-element-wrapper\"}\n onClick={clickable ? closeSubMenu : undefined}\n style={{ cursor: clickable ? \"pointer\" : undefined }}\n >\n <div className={\"menu-element-icon-left\"}>\n {subMenuIcon || defaultIcons.ArrowLeft()}\n </div>\n <div className={\"submenu-label\"}>{subMenuLabel}</div>\n </div>\n ) : null}\n {!menuState.subMenuId && mainMenuLabel ? (\n <div className={\"menu-element-wrapper\"}>\n <div className={\"submenu-label\"}>{mainMenuLabel}</div>\n </div>\n ) : null}\n {groups && Object.keys(groups)?.length > 1\n ? Object.keys(groups).map((group, x) => {\n return (\n <div key={x} className=\"group-wrapper\">\n <div className=\"group-label\">{group}</div>\n {groups?.[group].map((el: MenuElement, idx: number) => (\n <ListItem\n key={el.id}\n menuState={menuState}\n Icon={icons?.[el.id]}\n RightIcon={rightIcons?.[el.id]}\n idx={idx}\n clickable={clickable}\n el={el}\n view={editorView}\n />\n ))}\n </div>\n );\n })\n : elements?.map((el: MenuElement, idx: number) => (\n <ListItem\n key={el.id}\n menuState={menuState}\n Icon={icons?.[el.id]}\n RightIcon={rightIcons?.[el.id]}\n idx={idx}\n clickable={clickable}\n el={el}\n view={editorView}\n />\n ))}\n {elements?.length === 0 ? (\n emptySearchComponent || <div className={\"menu-placeholder\"}>No matching items</div>\n ) : null}\n </div>\n </div>\n ) : null}\n </>\n );\n};\n"],"names":["useEffect","useCallback","dispatchWithMeta","SlashMenuKey","SlashMetaTypes","React","Icons","setBlockType","toggleMark","Placement","useMemo","useRef","usePopper","getElementById"],"mappings":"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"}
@@ -11,3 +11,4 @@ export declare const ListItem: FC<{
11
11
  RightIcon?: FC;
12
12
  clickable?: boolean;
13
13
  }>;
14
+ //# sourceMappingURL=ListItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem.d.ts","sourceRoot":"","sources":["../../src/slashMenuReact/ListItem.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAA0B,MAAM,OAAO,CAAC;AAC1D,OAAO,EAEL,WAAW,EAEX,cAAc,EAEf,MAAM,wBAAwB,CAAC;AAChC,OAAO,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC;IACxB,SAAS,EAAE,cAAc,CAAC;IAC1B,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,EAAE,CAAC;IACV,SAAS,CAAC,EAAE,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAoDA,CAAC"}
@@ -15,6 +15,7 @@ export declare const defaultIcons: {
15
15
  H1Icon: () => React.JSX.Element;
16
16
  H2Icon: () => React.JSX.Element;
17
17
  H3Icon: () => React.JSX.Element;
18
+ HeadingIcon: () => React.JSX.Element;
18
19
  LinkIcon: () => React.JSX.Element;
19
20
  BoldIcon: () => React.JSX.Element;
20
21
  CodeIcon: () => React.JSX.Element;
@@ -22,3 +23,4 @@ export declare const defaultIcons: {
22
23
  ArrowLeft: () => React.JSX.Element;
23
24
  ArrowRight: () => React.JSX.Element;
24
25
  };
26
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/slashMenuReact/defaults.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,oBAAY,KAAK;IACf,YAAY,eAAe;IAC3B,QAAQ,WAAW;IACnB,QAAQ,WAAW;IACnB,QAAQ,WAAW;IACnB,MAAM,SAAS;IACf,QAAQ,WAAW;IACnB,MAAM,SAAS;IACf,MAAM,SAAS;CAChB;AA0FD,eAAO,MAAM,eAAe,2BAM3B,CAAC;AAsKF,eAAO,MAAM,YAAY;;;;;;;;;;;CAWxB,CAAC"}
@@ -48,3 +48,4 @@ export interface SlashMenuProps {
48
48
  emptySearchComponent?: ReactNode;
49
49
  }
50
50
  export declare const SlashMenuReact: FC<SlashMenuProps>;
51
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/slashMenuReact/display.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,EAAE,EACF,SAAS,EAKV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,yBAAyB,CAAC;AAGjC,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,SAAS,eAAe;IACxB,OAAO,aAAa;IACpB,GAAG,QAAQ;IACX,QAAQ,cAAc;IACtB,MAAM,YAAY;IAClB,MAAM,WAAW;IACjB,WAAW,iBAAiB;IAC5B,SAAS,eAAe;IACxB,KAAK,UAAU;IACf,UAAU,gBAAgB;IAC1B,QAAQ,cAAc;IACtB,IAAI,SAAS;IACb,SAAS,eAAe;IACxB,OAAO,aAAa;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,MAAM,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CACjE;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE;QACN,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC;KACnB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC;KACnB,CAAC;IACF,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,SAAS,CAAC;CAClC;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,cAAc,CAqT7C,CAAC"}
@@ -1,2 +1,3 @@
1
1
  import { SlashMenuState } from "prosemirror-slash-menu";
2
2
  export declare const getElements: (state: SlashMenuState) => import("prosemirror-slash-menu").MenuElement[] | undefined;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/slashMenuReact/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAkB,MAAM,wBAAwB,CAAC;AAExE,eAAO,MAAM,WAAW,GAAI,OAAO,cAAc,+DAYhD,CAAC"}
package/package.json CHANGED
@@ -1,37 +1,28 @@
1
1
  {
2
2
  "name": "prosemirror-slash-menu-react",
3
- "version": "0.4.9",
3
+ "version": "0.4.11",
4
4
  "description": "Implementation of prosemirror-slash-menu in react",
5
+ "source": "src/index.ts",
5
6
  "main": "dist/index.js",
6
7
  "module": "dist/index.es.js",
7
8
  "types": "dist/index.d.ts",
8
9
  "dependencies": {
9
10
  "@popperjs/core": "^2.11.8",
10
- "@rollup/plugin-commonjs": "^25.0.0",
11
- "@rollup/plugin-sucrase": "^5.0.1",
12
- "@rollup/plugin-typescript": "^11.1.1",
13
- "@testing-library/jest-dom": "^5.16.5",
14
- "@testing-library/react": "^13.4.0",
15
- "@testing-library/user-event": "^13.5.0",
16
- "@types/jest": "^27.5.2",
17
- "@types/node": "^16.18.34",
18
- "@types/react": "^18.2.9",
19
- "@types/react-dom": "^18.2.4",
11
+ "react-popper": "^2.3.0"
12
+ },
13
+ "peerDependencies": {
20
14
  "prosemirror-commands": "^1.5.2",
21
15
  "prosemirror-schema-basic": "^1.2.2",
22
- "prosemirror-state": "1.4.3",
16
+ "prosemirror-state": "^1.4.3",
23
17
  "prosemirror-view": "^1.31.4",
24
- "react-popper": "^2.3.0",
25
- "rollup-plugin-import-css": "^3.2.1",
26
- "rollup-plugin-peer-deps-external": "^2.2.4",
27
- "rollup-plugin-postcss": "^4.0.2",
28
- "typescript": "^5.1.6",
29
- "web-vitals": "^2.1.4",
30
- "prosemirror-slash-menu": "0.4.4"
18
+ "react": "^18.2.0",
19
+ "react-dom": "^18.2.0",
20
+ "prosemirror-slash-menu": "0.4.6"
31
21
  },
32
22
  "repository": {
33
23
  "type": "git",
34
- "url": "git+https://github.com/emergence-engineering/prosemirror-slash-menu-react.git"
24
+ "url": "git+https://github.com/emergence-engineering/emergence-tools.git",
25
+ "directory": "packages/prosemirror-slash-menu-react"
35
26
  },
36
27
  "files": [
37
28
  "dist/**/*"
@@ -43,48 +34,50 @@
43
34
  "slash",
44
35
  "menu"
45
36
  ],
46
- "license": "ISC",
37
+ "license": "MIT",
47
38
  "bugs": {
48
- "url": "https://github.com/emergence-engineering/prosemirror-slash-menu-react/issues"
39
+ "url": "https://github.com/emergence-engineering/emergence-tools/issues"
49
40
  },
50
- "homepage": "https://github.com/emergence-engineering/prosemirror-slash-menu-react#readme",
41
+ "homepage": "https://github.com/emergence-engineering/emergence-tools/tree/main/packages/prosemirror-slash-menu-react#readme",
51
42
  "devDependencies": {
52
43
  "@babel/core": "^7.22.1",
53
44
  "@babel/preset-env": "^7.22.4",
54
45
  "@babel/preset-react": "^7.22.3",
55
- "react": "^18.2.0",
56
- "react-dom": "^18.2.0",
57
46
  "@rollup/plugin-babel": "^6.0.3",
58
47
  "@rollup/plugin-node-resolve": "^15.1.0",
48
+ "@types/react": "^18.3.0",
49
+ "@types/react-dom": "^18.3.0",
59
50
  "@typescript-eslint/eslint-plugin": "^6.2.0",
60
51
  "@typescript-eslint/parser": "^6.2.0",
61
52
  "eslint": "^8.45.0",
62
53
  "eslint-config-prettier": "^8.5.0",
63
54
  "eslint-plugin-prettier": "^4.2.1",
64
55
  "eslint-plugin-react": "^7.33.0",
65
- "nodemon": "^2.0.22",
66
- "np": "^8.0.4",
67
56
  "prettier": "^2.8.8",
57
+ "prosemirror-commands": "^1.5.2",
58
+ "prosemirror-schema-basic": "^1.2.2",
59
+ "prosemirror-state": "^1.4.3",
60
+ "prosemirror-view": "^1.31.4",
61
+ "react": "^18.2.0",
62
+ "react-dom": "^18.2.0",
63
+ "rimraf": "^5.0.0",
68
64
  "rollup": "^2.79.1",
69
- "rollup-plugin-babel": "^4.4.0",
70
65
  "rollup-plugin-copy": "^3.4.0",
71
- "rollup-plugin-typescript2": "^0.34.1"
72
- },
73
- "peerDependencies": {
74
- "react": "^18.2.0 || ^19.0.0",
75
- "react-dom": "^18.2.0 || ^19.0.0"
66
+ "rollup-plugin-import-css": "^3.2.1",
67
+ "rollup-plugin-postcss": "^4.0.2",
68
+ "rollup-plugin-typescript2": "^0.34.1",
69
+ "typescript": "^5.1.6",
70
+ "prosemirror-slash-menu": "0.4.6"
76
71
  },
77
72
  "engines": {
78
- "node": ">=12",
79
- "npm": ">=7"
73
+ "node": ">=18"
80
74
  },
81
75
  "scripts": {
82
- "test": "echo \"no test specified\" && exit 0",
83
- "build": "rollup -c --bundleConfigAsCjs",
84
- "dev": "rollup -c -w --bundleConfigAsCjs",
85
- "yalc:watch": "nodemon --watch dist --exec 'yalc push'",
86
- "lint": "tsc --noEmit && eslint src --ext .ts",
87
- "lint:fix": "eslint src --ext .ts --fix",
88
- "dev:watch": "npm-run-all --parallel dev yalc:watch"
76
+ "prebuild": "rimraf dist",
77
+ "build": "rollup -c",
78
+ "dev": "rollup -c -w",
79
+ "format": "eslint src --ext .ts,.tsx --fix",
80
+ "lint": "tsc --noEmit && eslint src --ext .ts,.tsx",
81
+ "test": "echo \"no test specified\" && exit 0"
89
82
  }
90
83
  }