@payloadcms/richtext-lexical 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/field/Field.d.ts.map +1 -1
  2. package/dist/field/Field.js +3 -1
  3. package/dist/field/features/BlockQuote/index.d.ts.map +1 -1
  4. package/dist/field/features/BlockQuote/index.js +7 -5
  5. package/dist/field/features/Blocks/component/index.scss +2 -2
  6. package/dist/field/features/Blocks/index.d.ts.map +1 -1
  7. package/dist/field/features/Blocks/index.js +6 -5
  8. package/dist/field/features/Blocks/populationPromise.d.ts.map +1 -1
  9. package/dist/field/features/Blocks/populationPromise.js +6 -2
  10. package/dist/field/features/Heading/index.d.ts.map +1 -1
  11. package/dist/field/features/Heading/index.js +6 -4
  12. package/dist/field/features/Link/populationPromise.d.ts.map +1 -1
  13. package/dist/field/features/Link/populationPromise.js +6 -2
  14. package/dist/field/features/Paragraph/index.d.ts.map +1 -1
  15. package/dist/field/features/Paragraph/index.js +6 -4
  16. package/dist/field/features/Relationship/index.d.ts.map +1 -1
  17. package/dist/field/features/Relationship/index.js +6 -4
  18. package/dist/field/features/Relationship/nodes/components/index.scss +2 -2
  19. package/dist/field/features/Upload/index.d.ts.map +1 -1
  20. package/dist/field/features/Upload/index.js +6 -4
  21. package/dist/field/features/Upload/populationPromise.d.ts.map +1 -1
  22. package/dist/field/features/Upload/populationPromise.js +6 -2
  23. package/dist/field/features/converters/html/field/index.d.ts.map +1 -1
  24. package/dist/field/features/converters/html/field/index.js +13 -1
  25. package/dist/field/features/lists/CheckList/index.d.ts.map +1 -1
  26. package/dist/field/features/lists/CheckList/index.js +23 -4
  27. package/dist/field/features/lists/OrderedList/index.d.ts.map +1 -1
  28. package/dist/field/features/lists/OrderedList/index.js +24 -5
  29. package/dist/field/features/lists/UnorderedList/index.d.ts +1 -1
  30. package/dist/field/features/lists/UnorderedList/index.d.ts.map +1 -1
  31. package/dist/field/features/lists/UnorderedList/index.js +27 -8
  32. package/dist/field/features/types.d.ts +12 -3
  33. package/dist/field/features/types.d.ts.map +1 -1
  34. package/dist/field/lexical/LexicalEditor.js +2 -2
  35. package/dist/field/lexical/LexicalProvider.d.ts +1 -0
  36. package/dist/field/lexical/LexicalProvider.d.ts.map +1 -1
  37. package/dist/field/lexical/LexicalProvider.js +4 -3
  38. package/dist/field/lexical/config/default.js +2 -2
  39. package/dist/field/lexical/config/sanitize.js +4 -4
  40. package/dist/field/lexical/nodes/index.d.ts +2 -1
  41. package/dist/field/lexical/nodes/index.d.ts.map +1 -1
  42. package/dist/field/lexical/nodes/index.js +1 -1
  43. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.d.ts.map +1 -1
  44. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.js +4 -3
  45. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.d.ts.map +1 -1
  46. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.js +10 -7
  47. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.d.ts +4 -1
  48. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.d.ts.map +1 -1
  49. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.js +14 -4
  50. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.scss +5 -5
  51. package/dist/field/lexical/plugins/FloatingSelectToolbar/index.d.ts.map +1 -1
  52. package/dist/field/lexical/plugins/FloatingSelectToolbar/index.js +3 -1
  53. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +1 -7
  54. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  55. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +11 -12
  56. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -5
  57. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  58. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +12 -28
  59. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +9 -7
  60. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  61. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js +8 -8
  62. package/dist/field/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  63. package/dist/field/lexical/plugins/SlashMenu/index.js +41 -23
  64. package/dist/field/lexical/plugins/SlashMenu/index.scss +7 -7
  65. package/dist/field/lexical/plugins/SlashMenu/useMenuTriggerMatch.d.ts +23 -0
  66. package/dist/field/lexical/plugins/SlashMenu/useMenuTriggerMatch.d.ts.map +1 -0
  67. package/dist/field/lexical/plugins/SlashMenu/useMenuTriggerMatch.js +41 -0
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +9 -5
  71. package/dist/populate/recurseNestedFields.d.ts +10 -2
  72. package/dist/populate/recurseNestedFields.d.ts.map +1 -1
  73. package/dist/populate/recurseNestedFields.js +21 -176
  74. package/dist/populate/richTextRelationshipPromise.d.ts +4 -4
  75. package/dist/populate/richTextRelationshipPromise.d.ts.map +1 -1
  76. package/dist/populate/richTextRelationshipPromise.js +17 -5
  77. package/package.json +3 -3
@@ -19,20 +19,24 @@ _export(exports, {
19
19
  useDynamicPositioning: function() {
20
20
  return _LexicalMenu.useDynamicPositioning;
21
21
  },
22
- useBasicTypeaheadTriggerMatch: function() {
23
- return useBasicTypeaheadTriggerMatch;
24
- },
25
22
  ENABLE_SLASH_MENU_COMMAND: function() {
26
23
  return ENABLE_SLASH_MENU_COMMAND;
27
24
  },
28
25
  LexicalTypeaheadMenuPlugin: function() {
29
26
  return LexicalTypeaheadMenuPlugin;
27
+ },
28
+ MenuTextMatch: function() {
29
+ return _useMenuTriggerMatch.MenuTextMatch;
30
+ },
31
+ TriggerFn: function() {
32
+ return _useMenuTriggerMatch.TriggerFn;
30
33
  }
31
34
  });
32
35
  const _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
33
36
  const _utils = require("@lexical/utils");
34
37
  const _lexical = require("lexical");
35
38
  const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
39
+ const _useMenuTriggerMatch = require("../useMenuTriggerMatch");
36
40
  const _LexicalMenu = require("./LexicalMenu");
37
41
  function _getRequireWildcardCache(nodeInterop) {
38
42
  if (typeof WeakMap !== "function") return null;
@@ -157,29 +161,6 @@ function getScrollParent(element, includeHidden) {
157
161
  }
158
162
  return document.body;
159
163
  }
160
- function useBasicTypeaheadTriggerMatch(trigger, { maxLength = 75, minLength = 1 }) {
161
- return (0, _react.useCallback)((text)=>{
162
- const validChars = '[^' + trigger + PUNCTUATION + '\\s]';
163
- const TypeaheadTriggerRegex = new RegExp('(^|\\s|\\()(' + '[' + trigger + ']' + '((?:' + validChars + '){0,' + maxLength + '})' + ')$');
164
- const match = TypeaheadTriggerRegex.exec(text);
165
- if (match !== null) {
166
- const maybeLeadingWhitespace = match[1];
167
- const matchingString = match[3];
168
- if (matchingString.length >= minLength) {
169
- return {
170
- leadOffset: match.index + maybeLeadingWhitespace.length,
171
- matchingString,
172
- replaceableString: match[2]
173
- };
174
- }
175
- }
176
- return null;
177
- }, [
178
- maxLength,
179
- minLength,
180
- trigger
181
- ]);
182
- }
183
164
  const ENABLE_SLASH_MENU_COMMAND = (0, _lexical.createCommand)('ENABLE_SLASH_MENU_COMMAND');
184
165
  function LexicalTypeaheadMenuPlugin({ anchorClassName, anchorElem, groupsWithOptions, menuRenderFn, onClose, onOpen, onQueryChange, onSelectOption, triggerFn }) {
185
166
  const [editor] = (0, _LexicalComposerContext.useLexicalComposerContext)();
@@ -246,7 +227,10 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, anchorElem, groupsWithOpt
246
227
  closeTypeahead();
247
228
  return;
248
229
  }
249
- const match = triggerFn(text, editor);
230
+ const match = triggerFn({
231
+ editor,
232
+ query: text
233
+ });
250
234
  onQueryChange(match ? match.matchingString : null);
251
235
  if (match !== null && !isSelectionOnEntityBoundary(editor, match.leadOffset)) {
252
236
  const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow);
@@ -287,4 +271,4 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, anchorElem, groupsWithOpt
287
271
  });
288
272
  }
289
273
 
290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHtcbiAgTGV4aWNhbENvbW1hbmQsXG4gIExleGljYWxFZGl0b3IsXG4gIFBhcmFncmFwaE5vZGUsXG4gIFJhbmdlU2VsZWN0aW9uLFxuICBUZXh0Tm9kZSxcbn0gZnJvbSAnbGV4aWNhbCdcblxuaW1wb3J0IHsgdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCB9IGZyb20gJ0BsZXhpY2FsL3JlYWN0L0xleGljYWxDb21wb3NlckNvbnRleHQnXG5pbXBvcnQgeyBtZXJnZVJlZ2lzdGVyIH0gZnJvbSAnQGxleGljYWwvdXRpbHMnXG5pbXBvcnQge1xuICAkZ2V0U2VsZWN0aW9uLFxuICAkaXNSYW5nZVNlbGVjdGlvbixcbiAgJGlzVGV4dE5vZGUsXG4gIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICBjcmVhdGVDb21tYW5kLFxufSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IE1lbnVSZW5kZXJGbiwgTWVudVJlc29sdXRpb24sIE1lbnVUZXh0TWF0Y2gsIFRyaWdnZXJGbiB9IGZyb20gJy4vTGV4aWNhbE1lbnUnXG5pbXBvcnQgdHlwZSB7IFNsYXNoTWVudUdyb3VwLCBTbGFzaE1lbnVPcHRpb24gfSBmcm9tICcuL3R5cGVzJ1xuXG5pbXBvcnQgeyBMZXhpY2FsTWVudSwgdXNlTWVudUFuY2hvclJlZiB9IGZyb20gJy4vTGV4aWNhbE1lbnUnXG5cbmV4cG9ydCBjb25zdCBQVU5DVFVBVElPTiA9ICdcXFxcLixcXFxcK1xcXFwqXFxcXD9cXFxcJFxcXFxAXFxcXHwje31cXFxcKFxcXFwpXFxcXF5cXFxcLVxcXFxbXFxcXF1cXFxcXFxcXC8hJVxcJ1wifj08Pl86OydcblxuZnVuY3Rpb24gZ2V0VGV4dFVwVG9BbmNob3Ioc2VsZWN0aW9uOiBSYW5nZVNlbGVjdGlvbik6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBhbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yXG4gIGlmIChhbmNob3IudHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBhbmNob3JOb2RlID0gYW5jaG9yLmdldE5vZGUoKVxuICBpZiAoIWFuY2hvck5vZGUuaXNTaW1wbGVUZXh0KCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGFuY2hvck9mZnNldCA9IGFuY2hvci5vZmZzZXRcbiAgcmV0dXJuIGFuY2hvck5vZGUuZ2V0VGV4dENvbnRlbnQoKS5zbGljZSgwLCBhbmNob3JPZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHRyeVRvUG9zaXRpb25SYW5nZShsZWFkT2Zmc2V0OiBudW1iZXIsIHJhbmdlOiBSYW5nZSwgZWRpdG9yV2luZG93OiBXaW5kb3cpOiBib29sZWFuIHtcbiAgY29uc3QgZG9tU2VsZWN0aW9uID0gZWRpdG9yV2luZG93LmdldFNlbGVjdGlvbigpXG4gIGlmIChkb21TZWxlY3Rpb24gPT09IG51bGwgfHwgIWRvbVNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZVxuICBjb25zdCBzdGFydE9mZnNldCA9IGxlYWRPZmZzZXRcbiAgY29uc3QgZW5kT2Zmc2V0ID0gZG9tU2VsZWN0aW9uLmFuY2hvck9mZnNldFxuXG4gIGlmIChhbmNob3JOb2RlID09IG51bGwgfHwgZW5kT2Zmc2V0ID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoYW5jaG9yTm9kZSwgc3RhcnRPZmZzZXQpXG4gICAgLy8gaWYgZW5kT2Zmc2V0IGlzIDAsIHBvc2l0aW9uaW5nIHRoZSByYW5nZSBmb3Igd2hlbiB5b3UgY2xpY2sgdGhlIHBsdXMgYnV0dG9uIHRvIG9wZW4gdGhlIHNsYXNoIG1lbnUgd2lsbCBmaWFsXG4gICAgcmFuZ2Uuc2V0RW5kKGFuY2hvck5vZGUsIGVuZE9mZnNldCA+IDEgPyBlbmRPZmZzZXQgOiAxKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gZ2V0UXVlcnlUZXh0Rm9yU2VhcmNoKGVkaXRvcjogTGV4aWNhbEVkaXRvcik6IG51bGwgfCBzdHJpbmcge1xuICBsZXQgdGV4dCA9IG51bGxcbiAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gJGdldFNlbGVjdGlvbigpXG4gICAgaWYgKCEkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGV4dCA9IGdldFRleHRVcFRvQW5jaG9yKHNlbGVjdGlvbilcbiAgfSlcbiAgcmV0dXJuIHRleHRcbn1cblxuZnVuY3Rpb24gaXNTZWxlY3Rpb25PbkVudGl0eUJvdW5kYXJ5KGVkaXRvcjogTGV4aWNhbEVkaXRvciwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgaWYgKG9mZnNldCAhPT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBlZGl0b3IuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoJGlzUmFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkge1xuICAgICAgY29uc3QgYW5jaG9yID0gc2VsZWN0aW9uLmFuY2hvclxuICAgICAgY29uc3QgYW5jaG9yTm9kZSA9IGFuY2hvci5nZXROb2RlKClcbiAgICAgIGNvbnN0IHByZXZTaWJsaW5nID0gYW5jaG9yTm9kZS5nZXRQcmV2aW91c1NpYmxpbmcoKVxuICAgICAgcmV0dXJuICRpc1RleHROb2RlKHByZXZTaWJsaW5nKSAmJiBwcmV2U2libGluZy5pc1RleHRFbnRpdHkoKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gIGlmIChSZWFjdC5zdGFydFRyYW5zaXRpb24pIHtcbiAgICBSZWFjdC5zdGFydFRyYW5zaXRpb24oY2FsbGJhY2spXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbi8vIEdvdCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MjU0MzkwOC8yMDEzNTgwXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgaW5jbHVkZUhpZGRlbjogYm9vbGVhbixcbik6IEhUTUxCb2R5RWxlbWVudCB8IEhUTUxFbGVtZW50IHtcbiAgbGV0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICBjb25zdCBleGNsdWRlU3RhdGljUGFyZW50ID0gc3R5bGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZSdcbiAgY29uc3Qgb3ZlcmZsb3dSZWdleCA9IGluY2x1ZGVIaWRkZW4gPyAvKGF1dG98c2Nyb2xsfGhpZGRlbikvIDogLyhhdXRvfHNjcm9sbCkvXG4gIGlmIChzdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5XG4gIH1cbiAgZm9yIChsZXQgcGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbGVtZW50OyAocGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQpOyApIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KVxuICAgIGlmIChleGNsdWRlU3RhdGljUGFyZW50ICYmIHN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG92ZXJmbG93UmVnZXgudGVzdChzdHlsZS5vdmVyZmxvdyArIHN0eWxlLm92ZXJmbG93WSArIHN0eWxlLm92ZXJmbG93WCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbn1cblxuZXhwb3J0IHsgdXNlRHluYW1pY1Bvc2l0aW9uaW5nIH0gZnJvbSAnLi9MZXhpY2FsTWVudSdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhc2ljVHlwZWFoZWFkVHJpZ2dlck1hdGNoKFxuICB0cmlnZ2VyOiBzdHJpbmcsXG4gIHsgbWF4TGVuZ3RoID0gNzUsIG1pbkxlbmd0aCA9IDEgfTogeyBtYXhMZW5ndGg/OiBudW1iZXI7IG1pbkxlbmd0aD86IG51bWJlciB9LFxuKTogVHJpZ2dlckZuIHtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrKFxuICAgICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkQ2hhcnMgPSAnW14nICsgdHJpZ2dlciArIFBVTkNUVUFUSU9OICsgJ1xcXFxzXSdcbiAgICAgIGNvbnN0IFR5cGVhaGVhZFRyaWdnZXJSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICcoXnxcXFxcc3xcXFxcKCkoJyArXG4gICAgICAgICAgJ1snICtcbiAgICAgICAgICB0cmlnZ2VyICtcbiAgICAgICAgICAnXScgK1xuICAgICAgICAgICcoKD86JyArXG4gICAgICAgICAgdmFsaWRDaGFycyArXG4gICAgICAgICAgJyl7MCwnICtcbiAgICAgICAgICBtYXhMZW5ndGggK1xuICAgICAgICAgICd9KScgK1xuICAgICAgICAgICcpJCcsXG4gICAgICApXG4gICAgICBjb25zdCBtYXRjaCA9IFR5cGVhaGVhZFRyaWdnZXJSZWdleC5leGVjKHRleHQpXG4gICAgICBpZiAobWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWF5YmVMZWFkaW5nV2hpdGVzcGFjZSA9IG1hdGNoWzFdXG4gICAgICAgIGNvbnN0IG1hdGNoaW5nU3RyaW5nID0gbWF0Y2hbM11cbiAgICAgICAgaWYgKG1hdGNoaW5nU3RyaW5nLmxlbmd0aCA+PSBtaW5MZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVhZE9mZnNldDogbWF0Y2guaW5kZXggKyBtYXliZUxlYWRpbmdXaGl0ZXNwYWNlLmxlbmd0aCxcbiAgICAgICAgICAgIG1hdGNoaW5nU3RyaW5nLFxuICAgICAgICAgICAgcmVwbGFjZWFibGVTdHJpbmc6IG1hdGNoWzJdLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuICAgIFttYXhMZW5ndGgsIG1pbkxlbmd0aCwgdHJpZ2dlcl0sXG4gIClcbn1cblxuZXhwb3J0IHR5cGUgVHlwZWFoZWFkTWVudVBsdWdpblByb3BzID0ge1xuICBhbmNob3JDbGFzc05hbWU/OiBzdHJpbmdcbiAgYW5jaG9yRWxlbTogSFRNTEVsZW1lbnRcbiAgZ3JvdXBzV2l0aE9wdGlvbnM6IEFycmF5PFNsYXNoTWVudUdyb3VwPlxuICBtZW51UmVuZGVyRm46IE1lbnVSZW5kZXJGblxuICBvbkNsb3NlPzogKCkgPT4gdm9pZFxuICBvbk9wZW4/OiAocmVzb2x1dGlvbjogTWVudVJlc29sdXRpb24pID0+IHZvaWRcbiAgb25RdWVyeUNoYW5nZTogKG1hdGNoaW5nU3RyaW5nOiBudWxsIHwgc3RyaW5nKSA9PiB2b2lkXG4gIG9uU2VsZWN0T3B0aW9uOiAoXG4gICAgb3B0aW9uOiBTbGFzaE1lbnVPcHRpb24sXG4gICAgdGV4dE5vZGVDb250YWluaW5nUXVlcnk6IFRleHROb2RlIHwgbnVsbCxcbiAgICBjbG9zZU1lbnU6ICgpID0+IHZvaWQsXG4gICAgbWF0Y2hpbmdTdHJpbmc6IHN0cmluZyxcbiAgKSA9PiB2b2lkXG4gIHRyaWdnZXJGbjogVHJpZ2dlckZuXG59XG5cbmV4cG9ydCBjb25zdCBFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EOiBMZXhpY2FsQ29tbWFuZDx7XG4gIG5vZGU6IFBhcmFncmFwaE5vZGVcbn0+ID0gY3JlYXRlQ29tbWFuZCgnRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCcpXG5cbmV4cG9ydCBmdW5jdGlvbiBMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbih7XG4gIGFuY2hvckNsYXNzTmFtZSxcbiAgYW5jaG9yRWxlbSxcbiAgZ3JvdXBzV2l0aE9wdGlvbnMsXG4gIG1lbnVSZW5kZXJGbixcbiAgb25DbG9zZSxcbiAgb25PcGVuLFxuICBvblF1ZXJ5Q2hhbmdlLFxuICBvblNlbGVjdE9wdGlvbixcbiAgdHJpZ2dlckZuLFxufTogVHlwZWFoZWFkTWVudVBsdWdpblByb3BzKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgW2VkaXRvcl0gPSB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KClcbiAgY29uc3QgW3Jlc29sdXRpb24sIHNldFJlc29sdXRpb25dID0gdXNlU3RhdGU8TWVudVJlc29sdXRpb24gfCBudWxsPihudWxsKVxuICBjb25zdCBhbmNob3JFbGVtZW50UmVmID0gdXNlTWVudUFuY2hvclJlZihhbmNob3JFbGVtLCByZXNvbHV0aW9uLCBzZXRSZXNvbHV0aW9uLCBhbmNob3JDbGFzc05hbWUpXG5cbiAgY29uc3QgY2xvc2VUeXBlYWhlYWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UmVzb2x1dGlvbihudWxsKVxuICAgIGlmIChvbkNsb3NlICE9IG51bGwgJiYgcmVzb2x1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgb25DbG9zZSgpXG4gICAgfVxuICB9LCBbb25DbG9zZSwgcmVzb2x1dGlvbl0pXG5cbiAgY29uc3Qgb3BlblR5cGVhaGVhZCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZXM6IE1lbnVSZXNvbHV0aW9uKSA9PiB7XG4gICAgICBzZXRSZXNvbHV0aW9uKHJlcylcbiAgICAgIGlmIChvbk9wZW4gIT0gbnVsbCAmJiByZXNvbHV0aW9uID09PSBudWxsKSB7XG4gICAgICAgIG9uT3BlbihyZXMpXG4gICAgICB9XG4gICAgfSxcbiAgICBbb25PcGVuLCByZXNvbHV0aW9uXSxcbiAgKVxuXG4gIC8vIFRoaXMgaXMgbWFpbmx5IHVzZWQgZm9yIHRoZSBBZGRCbG9ja0hhbmRsZVBsdWdpbiwgc28gdGhhdCB0aGUgc2xhc2ggbWVudSBjYW4gYmUgb3BlbmVkIGZyb20gdGhlcmVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gbWVyZ2VSZWdpc3RlcihcbiAgICAgIGVkaXRvci5yZWdpc3RlckNvbW1hbmQoXG4gICAgICAgIEVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQsXG4gICAgICAgICh7IG5vZGUgfSkgPT4ge1xuICAgICAgICAgIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2g6IE1lbnVUZXh0TWF0Y2ggPSB7XG4gICAgICAgICAgICAgIGxlYWRPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgIG1hdGNoaW5nU3RyaW5nOiAnJyxcbiAgICAgICAgICAgICAgcmVwbGFjZWFibGVTdHJpbmc6ICcnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmICFpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkoZWRpdG9yLCBtYXRjaC5sZWFkT2Zmc2V0KSkge1xuICAgICAgICAgICAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRvcldpbmRvdyA9IGVkaXRvci5fd2luZG93ID8/IHdpbmRvd1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gZWRpdG9yV2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKClcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFuZ2VQb3NpdGlvbmVkID0gdHJ5VG9Qb3NpdGlvblJhbmdlKG1hdGNoLmxlYWRPZmZzZXQsIHJhbmdlLCBlZGl0b3JXaW5kb3cpXG4gICAgICAgICAgICAgICAgaWYgKGlzUmFuZ2VQb3NpdGlvbmVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgb3BlblR5cGVhaGVhZCh7XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0UmVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgIClcbiAgfSwgW2VkaXRvciwgb3BlblR5cGVhaGVhZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1cGRhdGVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3JXaW5kb3cgPSBlZGl0b3IuX3dpbmRvdyA/PyB3aW5kb3dcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3JXaW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgY29uc3QgdGV4dCA9IGdldFF1ZXJ5VGV4dEZvclNlYXJjaChlZGl0b3IpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICEkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pIHx8XG4gICAgICAgICAgIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpIHx8XG4gICAgICAgICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgICAgICAgIHJhbmdlID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGNsb3NlVHlwZWFoZWFkKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdGNoID0gdHJpZ2dlckZuKHRleHQsIGVkaXRvcilcbiAgICAgICAgb25RdWVyeUNoYW5nZShtYXRjaCA/IG1hdGNoLm1hdGNoaW5nU3RyaW5nIDogbnVsbClcblxuICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgIWlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3IsIG1hdGNoLmxlYWRPZmZzZXQpKSB7XG4gICAgICAgICAgY29uc3QgaXNSYW5nZVBvc2l0aW9uZWQgPSB0cnlUb1Bvc2l0aW9uUmFuZ2UobWF0Y2gubGVhZE9mZnNldCwgcmFuZ2UsIGVkaXRvcldpbmRvdylcbiAgICAgICAgICBpZiAoaXNSYW5nZVBvc2l0aW9uZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgICAgICBvcGVuVHlwZWFoZWFkKHtcbiAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbG9zZVR5cGVhaGVhZCgpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHJlbW92ZVVwZGF0ZUxpc3RlbmVyID0gZWRpdG9yLnJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIodXBkYXRlTGlzdGVuZXIpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVtb3ZlVXBkYXRlTGlzdGVuZXIoKVxuICAgIH1cbiAgfSwgW2VkaXRvciwgdHJpZ2dlckZuLCBvblF1ZXJ5Q2hhbmdlLCByZXNvbHV0aW9uLCBjbG9zZVR5cGVhaGVhZCwgb3BlblR5cGVhaGVhZF0pXG5cbiAgcmV0dXJuIHJlc29sdXRpb24gPT09IG51bGwgfHwgZWRpdG9yID09PSBudWxsID8gbnVsbCA6IChcbiAgICA8TGV4aWNhbE1lbnVcbiAgICAgIGFuY2hvckVsZW1lbnRSZWY9e2FuY2hvckVsZW1lbnRSZWZ9XG4gICAgICBjbG9zZT17Y2xvc2VUeXBlYWhlYWR9XG4gICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgIGdyb3Vwc1dpdGhPcHRpb25zPXtncm91cHNXaXRoT3B0aW9uc31cbiAgICAgIG1lbnVSZW5kZXJGbj17bWVudVJlbmRlckZufVxuICAgICAgb25TZWxlY3RPcHRpb249e29uU2VsZWN0T3B0aW9ufVxuICAgICAgcmVzb2x1dGlvbj17cmVzb2x1dGlvbn1cbiAgICAgIHNob3VsZFNwbGl0Tm9kZVdpdGhRdWVyeVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgTWVudVJlbmRlckZuLCBNZW51UmVzb2x1dGlvbiwgTWVudVRleHRNYXRjaCwgVHJpZ2dlckZuIH1cbiJdLCJuYW1lcyI6WyJQVU5DVFVBVElPTiIsImdldFNjcm9sbFBhcmVudCIsInVzZUR5bmFtaWNQb3NpdGlvbmluZyIsInVzZUJhc2ljVHlwZWFoZWFkVHJpZ2dlck1hdGNoIiwiRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCIsIkxleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luIiwiZ2V0VGV4dFVwVG9BbmNob3IiLCJzZWxlY3Rpb24iLCJhbmNob3IiLCJ0eXBlIiwiYW5jaG9yTm9kZSIsImdldE5vZGUiLCJpc1NpbXBsZVRleHQiLCJhbmNob3JPZmZzZXQiLCJvZmZzZXQiLCJnZXRUZXh0Q29udGVudCIsInNsaWNlIiwidHJ5VG9Qb3NpdGlvblJhbmdlIiwibGVhZE9mZnNldCIsInJhbmdlIiwiZWRpdG9yV2luZG93IiwiZG9tU2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJzdGFydE9mZnNldCIsImVuZE9mZnNldCIsInNldFN0YXJ0Iiwic2V0RW5kIiwiZXJyb3IiLCJnZXRRdWVyeVRleHRGb3JTZWFyY2giLCJlZGl0b3IiLCJ0ZXh0IiwiZ2V0RWRpdG9yU3RhdGUiLCJyZWFkIiwiJGdldFNlbGVjdGlvbiIsIiRpc1JhbmdlU2VsZWN0aW9uIiwiaXNTZWxlY3Rpb25PbkVudGl0eUJvdW5kYXJ5IiwicHJldlNpYmxpbmciLCJnZXRQcmV2aW91c1NpYmxpbmciLCIkaXNUZXh0Tm9kZSIsImlzVGV4dEVudGl0eSIsInN0YXJ0VHJhbnNpdGlvbiIsImNhbGxiYWNrIiwiUmVhY3QiLCJlbGVtZW50IiwiaW5jbHVkZUhpZGRlbiIsInN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImV4Y2x1ZGVTdGF0aWNQYXJlbnQiLCJwb3NpdGlvbiIsIm92ZXJmbG93UmVnZXgiLCJkb2N1bWVudCIsImJvZHkiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwidGVzdCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwidHJpZ2dlciIsIm1heExlbmd0aCIsIm1pbkxlbmd0aCIsInVzZUNhbGxiYWNrIiwidmFsaWRDaGFycyIsIlR5cGVhaGVhZFRyaWdnZXJSZWdleCIsIlJlZ0V4cCIsIm1hdGNoIiwiZXhlYyIsIm1heWJlTGVhZGluZ1doaXRlc3BhY2UiLCJtYXRjaGluZ1N0cmluZyIsImxlbmd0aCIsImluZGV4IiwicmVwbGFjZWFibGVTdHJpbmciLCJjcmVhdGVDb21tYW5kIiwiYW5jaG9yQ2xhc3NOYW1lIiwiYW5jaG9yRWxlbSIsImdyb3Vwc1dpdGhPcHRpb25zIiwibWVudVJlbmRlckZuIiwib25DbG9zZSIsIm9uT3BlbiIsIm9uUXVlcnlDaGFuZ2UiLCJvblNlbGVjdE9wdGlvbiIsInRyaWdnZXJGbiIsInVzZUxleGljYWxDb21wb3NlckNvbnRleHQiLCJyZXNvbHV0aW9uIiwic2V0UmVzb2x1dGlvbiIsInVzZVN0YXRlIiwiYW5jaG9yRWxlbWVudFJlZiIsInVzZU1lbnVBbmNob3JSZWYiLCJjbG9zZVR5cGVhaGVhZCIsIm9wZW5UeXBlYWhlYWQiLCJyZXMiLCJ1c2VFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwibm9kZSIsIl93aW5kb3ciLCJ3aW5kb3ciLCJjcmVhdGVSYW5nZSIsImlzUmFuZ2VQb3NpdGlvbmVkIiwiZ2V0UmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIkNPTU1BTkRfUFJJT1JJVFlfTE9XIiwidXBkYXRlTGlzdGVuZXIiLCJyZW1vdmVVcGRhdGVMaXN0ZW5lciIsInJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIiLCJMZXhpY2FsTWVudSIsImNsb3NlIiwic2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0lBMEJhQSxXQUFXO2VBQVhBOztJQTRFR0MsZUFBZTtlQUFmQTs7SUFzQlBDLHFCQUFxQjtlQUFyQkEsa0NBQXFCOztJQUVkQyw2QkFBNkI7ZUFBN0JBOztJQXNESEMseUJBQXlCO2VBQXpCQTs7SUFJR0MsMEJBQTBCO2VBQTFCQTs7O3dDQS9LMEI7dUJBQ1o7eUJBT3ZCOytEQUMwQzs2QkFNSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV2QyxNQUFNTCxjQUFjO0FBRTNCLFNBQVNNLGtCQUFrQkMsU0FBeUI7SUFDbEQsTUFBTUMsU0FBU0QsVUFBVUMsTUFBTTtJQUMvQixJQUFJQSxPQUFPQyxJQUFJLEtBQUssUUFBUTtRQUMxQixPQUFPO0lBQ1Q7SUFDQSxNQUFNQyxhQUFhRixPQUFPRyxPQUFPO0lBQ2pDLElBQUksQ0FBQ0QsV0FBV0UsWUFBWSxJQUFJO1FBQzlCLE9BQU87SUFDVDtJQUNBLE1BQU1DLGVBQWVMLE9BQU9NLE1BQU07SUFDbEMsT0FBT0osV0FBV0ssY0FBYyxHQUFHQyxLQUFLLENBQUMsR0FBR0g7QUFDOUM7QUFFQSxTQUFTSSxtQkFBbUJDLFVBQWtCLEVBQUVDLEtBQVksRUFBRUMsWUFBb0I7SUFDaEYsTUFBTUMsZUFBZUQsYUFBYUUsWUFBWTtJQUM5QyxJQUFJRCxpQkFBaUIsUUFBUSxDQUFDQSxhQUFhRSxXQUFXLEVBQUU7UUFDdEQsT0FBTztJQUNUO0lBQ0EsTUFBTWIsYUFBYVcsYUFBYVgsVUFBVTtJQUMxQyxNQUFNYyxjQUFjTjtJQUNwQixNQUFNTyxZQUFZSixhQUFhUixZQUFZO0lBRTNDLElBQUlILGNBQWMsUUFBUWUsYUFBYSxNQUFNO1FBQzNDLE9BQU87SUFDVDtJQUVBLElBQUk7UUFDRk4sTUFBTU8sUUFBUSxDQUFDaEIsWUFBWWM7UUFDM0IsK0dBQStHO1FBQy9HTCxNQUFNUSxNQUFNLENBQUNqQixZQUFZZSxZQUFZLElBQUlBLFlBQVk7SUFDdkQsRUFBRSxPQUFPRyxPQUFPO1FBQ2QsT0FBTztJQUNUO0lBRUEsT0FBTztBQUNUO0FBRUEsU0FBU0Msc0JBQXNCQyxNQUFxQjtJQUNsRCxJQUFJQyxPQUFPO0lBQ1hELE9BQU9FLGNBQWMsR0FBR0MsSUFBSSxDQUFDO1FBQzNCLE1BQU0xQixZQUFZMkIsSUFBQUEsc0JBQWE7UUFDL0IsSUFBSSxDQUFDQyxJQUFBQSwwQkFBaUIsRUFBQzVCLFlBQVk7WUFDakM7UUFDRjtRQUNBd0IsT0FBT3pCLGtCQUFrQkM7SUFDM0I7SUFDQSxPQUFPd0I7QUFDVDtBQUVBLFNBQVNLLDRCQUE0Qk4sTUFBcUIsRUFBRWhCLE1BQWM7SUFDeEUsSUFBSUEsV0FBVyxHQUFHO1FBQ2hCLE9BQU87SUFDVDtJQUNBLE9BQU9nQixPQUFPRSxjQUFjLEdBQUdDLElBQUksQ0FBQztRQUNsQyxNQUFNMUIsWUFBWTJCLElBQUFBLHNCQUFhO1FBQy9CLElBQUlDLElBQUFBLDBCQUFpQixFQUFDNUIsWUFBWTtZQUNoQyxNQUFNQyxTQUFTRCxVQUFVQyxNQUFNO1lBQy9CLE1BQU1FLGFBQWFGLE9BQU9HLE9BQU87WUFDakMsTUFBTTBCLGNBQWMzQixXQUFXNEIsa0JBQWtCO1lBQ2pELE9BQU9DLElBQUFBLG9CQUFXLEVBQUNGLGdCQUFnQkEsWUFBWUcsWUFBWTtRQUM3RDtRQUNBLE9BQU87SUFDVDtBQUNGO0FBRUEsU0FBU0MsZ0JBQWdCQyxRQUFvQjtJQUMzQyxJQUFJQyxPQUFNRixlQUFlLEVBQUU7UUFDekJFLE9BQU1GLGVBQWUsQ0FBQ0M7SUFDeEIsT0FBTztRQUNMQTtJQUNGO0FBQ0Y7QUFHTyxTQUFTekMsZ0JBQ2QyQyxPQUFvQixFQUNwQkMsYUFBc0I7SUFFdEIsSUFBSUMsUUFBUUMsaUJBQWlCSDtJQUM3QixNQUFNSSxzQkFBc0JGLE1BQU1HLFFBQVEsS0FBSztJQUMvQyxNQUFNQyxnQkFBZ0JMLGdCQUFnQix5QkFBeUI7SUFDL0QsSUFBSUMsTUFBTUcsUUFBUSxLQUFLLFNBQVM7UUFDOUIsT0FBT0UsU0FBU0MsSUFBSTtJQUN0QjtJQUNBLElBQUssSUFBSUMsU0FBNkJULFNBQVVTLFNBQVNBLE9BQU9DLGFBQWEsRUFBSztRQUNoRlIsUUFBUUMsaUJBQWlCTTtRQUN6QixJQUFJTCx1QkFBdUJGLE1BQU1HLFFBQVEsS0FBSyxVQUFVO1lBQ3REO1FBQ0Y7UUFDQSxJQUFJQyxjQUFjSyxJQUFJLENBQUNULE1BQU1VLFFBQVEsR0FBR1YsTUFBTVcsU0FBUyxHQUFHWCxNQUFNWSxTQUFTLEdBQUc7WUFDMUUsT0FBT0w7UUFDVDtJQUNGO0lBQ0EsT0FBT0YsU0FBU0MsSUFBSTtBQUN0QjtBQUlPLFNBQVNqRCw4QkFDZHdELE9BQWUsRUFDZixFQUFFQyxZQUFZLEVBQUUsRUFBRUMsWUFBWSxDQUFDLEVBQThDO0lBRTdFLE9BQU9DLElBQUFBLGtCQUFXLEVBQ2hCLENBQUMvQjtRQUNDLE1BQU1nQyxhQUFhLE9BQU9KLFVBQVUzRCxjQUFjO1FBQ2xELE1BQU1nRSx3QkFBd0IsSUFBSUMsT0FDaEMsaUJBQ0UsTUFDQU4sVUFDQSxNQUNBLFNBQ0FJLGFBQ0EsU0FDQUgsWUFDQSxPQUNBO1FBRUosTUFBTU0sUUFBUUYsc0JBQXNCRyxJQUFJLENBQUNwQztRQUN6QyxJQUFJbUMsVUFBVSxNQUFNO1lBQ2xCLE1BQU1FLHlCQUF5QkYsS0FBSyxDQUFDLEVBQUU7WUFDdkMsTUFBTUcsaUJBQWlCSCxLQUFLLENBQUMsRUFBRTtZQUMvQixJQUFJRyxlQUFlQyxNQUFNLElBQUlULFdBQVc7Z0JBQ3RDLE9BQU87b0JBQ0wzQyxZQUFZZ0QsTUFBTUssS0FBSyxHQUFHSCx1QkFBdUJFLE1BQU07b0JBQ3ZERDtvQkFDQUcsbUJBQW1CTixLQUFLLENBQUMsRUFBRTtnQkFDN0I7WUFDRjtRQUNGO1FBQ0EsT0FBTztJQUNULEdBQ0E7UUFBQ047UUFBV0M7UUFBV0Y7S0FBUTtBQUVuQztBQW1CTyxNQUFNdkQsNEJBRVJxRSxJQUFBQSxzQkFBYSxFQUFDO0FBRVosU0FBU3BFLDJCQUEyQixFQUN6Q3FFLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxpQkFBaUIsRUFDakJDLFlBQVksRUFDWkMsT0FBTyxFQUNQQyxNQUFNLEVBQ05DLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxTQUFTLEVBQ2dCO0lBQ3pCLE1BQU0sQ0FBQ3BELE9BQU8sR0FBR3FELElBQUFBLGlEQUF5QjtJQUMxQyxNQUFNLENBQUNDLFlBQVlDLGNBQWMsR0FBR0MsSUFBQUEsZUFBUSxFQUF3QjtJQUNwRSxNQUFNQyxtQkFBbUJDLElBQUFBLDZCQUFnQixFQUFDYixZQUFZUyxZQUFZQyxlQUFlWDtJQUVqRixNQUFNZSxpQkFBaUIzQixJQUFBQSxrQkFBVyxFQUFDO1FBQ2pDdUIsY0FBYztRQUNkLElBQUlQLFdBQVcsUUFBUU0sZUFBZSxNQUFNO1lBQzFDTjtRQUNGO0lBQ0YsR0FBRztRQUFDQTtRQUFTTTtLQUFXO0lBRXhCLE1BQU1NLGdCQUFnQjVCLElBQUFBLGtCQUFXLEVBQy9CLENBQUM2QjtRQUNDTixjQUFjTTtRQUNkLElBQUlaLFVBQVUsUUFBUUssZUFBZSxNQUFNO1lBQ3pDTCxPQUFPWTtRQUNUO0lBQ0YsR0FDQTtRQUFDWjtRQUFRSztLQUFXO0lBR3RCLG9HQUFvRztJQUNwR1EsSUFBQUEsZ0JBQVMsRUFBQztRQUNSLE9BQU9DLElBQUFBLG9CQUFhLEVBQ2xCL0QsT0FBT2dFLGVBQWUsQ0FDcEIxRiwyQkFDQSxDQUFDLEVBQUUyRixJQUFJLEVBQUU7WUFDUGpFLE9BQU9FLGNBQWMsR0FBR0MsSUFBSSxDQUFDO2dCQUMzQixNQUFNaUMsUUFBdUI7b0JBQzNCaEQsWUFBWTtvQkFDWm1ELGdCQUFnQjtvQkFDaEJHLG1CQUFtQjtnQkFDckI7Z0JBQ0EsSUFBSU4sVUFBVSxRQUFRLENBQUM5Qiw0QkFBNEJOLFFBQVFvQyxNQUFNaEQsVUFBVSxHQUFHO29CQUM1RSxJQUFJNkUsU0FBUyxNQUFNO3dCQUNqQixNQUFNM0UsZUFBZVUsT0FBT2tFLE9BQU8sSUFBSUM7d0JBQ3ZDLE1BQU05RSxRQUFRQyxhQUFhK0IsUUFBUSxDQUFDK0MsV0FBVzt3QkFFL0MsTUFBTUMsb0JBQW9CbEYsbUJBQW1CaUQsTUFBTWhELFVBQVUsRUFBRUMsT0FBT0M7d0JBQ3RFLElBQUkrRSxzQkFBc0IsTUFBTTs0QkFDOUIxRCxnQkFBZ0IsSUFDZGlELGNBQWM7b0NBQ1pVLFNBQVM7d0NBQ1AsT0FBT2pGLE1BQU1rRixxQkFBcUI7b0NBQ3BDO29DQUNBbkM7Z0NBQ0Y7d0JBRUo7d0JBRUE7b0JBQ0Y7Z0JBQ0Y7WUFDRjtZQUVBLE9BQU87UUFDVCxHQUNBb0MsNkJBQW9CO0lBRzFCLEdBQUc7UUFBQ3hFO1FBQVE0RDtLQUFjO0lBRTFCRSxJQUFBQSxnQkFBUyxFQUFDO1FBQ1IsTUFBTVcsaUJBQWlCO1lBQ3JCekUsT0FBT0UsY0FBYyxHQUFHQyxJQUFJLENBQUM7Z0JBQzNCLE1BQU1iLGVBQWVVLE9BQU9rRSxPQUFPLElBQUlDO2dCQUN2QyxNQUFNOUUsUUFBUUMsYUFBYStCLFFBQVEsQ0FBQytDLFdBQVc7Z0JBQy9DLE1BQU0zRixZQUFZMkIsSUFBQUEsc0JBQWE7Z0JBQy9CLE1BQU1ILE9BQU9GLHNCQUFzQkM7Z0JBRW5DLElBQ0UsQ0FBQ0ssSUFBQUEsMEJBQWlCLEVBQUM1QixjQUNuQixDQUFDQSxVQUFVZ0IsV0FBVyxNQUN0QlEsU0FBUyxRQUNUWixVQUFVLE1BQ1Y7b0JBQ0FzRTtvQkFDQTtnQkFDRjtnQkFFQSxNQUFNdkIsUUFBUWdCLFVBQVVuRCxNQUFNRDtnQkFDOUJrRCxjQUFjZCxRQUFRQSxNQUFNRyxjQUFjLEdBQUc7Z0JBRTdDLElBQUlILFVBQVUsUUFBUSxDQUFDOUIsNEJBQTRCTixRQUFRb0MsTUFBTWhELFVBQVUsR0FBRztvQkFDNUUsTUFBTWlGLG9CQUFvQmxGLG1CQUFtQmlELE1BQU1oRCxVQUFVLEVBQUVDLE9BQU9DO29CQUN0RSxJQUFJK0Usc0JBQXNCLE1BQU07d0JBQzlCMUQsZ0JBQWdCLElBQ2RpRCxjQUFjO2dDQUNaVSxTQUFTO29DQUNQLE9BQU9qRixNQUFNa0YscUJBQXFCO2dDQUNwQztnQ0FDQW5DOzRCQUNGO3dCQUVGO29CQUNGO2dCQUNGO2dCQUNBdUI7WUFDRjtRQUNGO1FBRUEsTUFBTWUsdUJBQXVCMUUsT0FBTzJFLHNCQUFzQixDQUFDRjtRQUUzRCxPQUFPO1lBQ0xDO1FBQ0Y7SUFDRixHQUFHO1FBQUMxRTtRQUFRb0Q7UUFBV0Y7UUFBZUk7UUFBWUs7UUFBZ0JDO0tBQWM7SUFFaEYsT0FBT04sZUFBZSxRQUFRdEQsV0FBVyxPQUFPLHFCQUM5QyxxQkFBQzRFLHdCQUFXO1FBQ1ZuQixrQkFBa0JBO1FBQ2xCb0IsT0FBT2xCO1FBQ1AzRCxRQUFRQTtRQUNSOEMsbUJBQW1CQTtRQUNuQkMsY0FBY0E7UUFDZEksZ0JBQWdCQTtRQUNoQkcsWUFBWUE7UUFDWndCLDBCQUFBQTs7QUFHTiJ9
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHtcbiAgTGV4aWNhbENvbW1hbmQsXG4gIExleGljYWxFZGl0b3IsXG4gIFBhcmFncmFwaE5vZGUsXG4gIFJhbmdlU2VsZWN0aW9uLFxuICBUZXh0Tm9kZSxcbn0gZnJvbSAnbGV4aWNhbCdcblxuaW1wb3J0IHsgdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCB9IGZyb20gJ0BsZXhpY2FsL3JlYWN0L0xleGljYWxDb21wb3NlckNvbnRleHQnXG5pbXBvcnQgeyBtZXJnZVJlZ2lzdGVyIH0gZnJvbSAnQGxleGljYWwvdXRpbHMnXG5pbXBvcnQge1xuICAkZ2V0U2VsZWN0aW9uLFxuICAkaXNSYW5nZVNlbGVjdGlvbixcbiAgJGlzVGV4dE5vZGUsXG4gIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICBjcmVhdGVDb21tYW5kLFxufSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IE1lbnVSZW5kZXJGbiwgTWVudVJlc29sdXRpb24gfSBmcm9tICcuL0xleGljYWxNZW51J1xuaW1wb3J0IHR5cGUgeyBTbGFzaE1lbnVHcm91cCwgU2xhc2hNZW51T3B0aW9uIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgTWVudVRleHRNYXRjaCwgVHJpZ2dlckZuIH0gZnJvbSAnLi4vdXNlTWVudVRyaWdnZXJNYXRjaCdcbmltcG9ydCB7IExleGljYWxNZW51LCB1c2VNZW51QW5jaG9yUmVmIH0gZnJvbSAnLi9MZXhpY2FsTWVudSdcblxuZXhwb3J0IGNvbnN0IFBVTkNUVUFUSU9OID0gJ1xcXFwuLFxcXFwrXFxcXCpcXFxcP1xcXFwkXFxcXEBcXFxcfCN7fVxcXFwoXFxcXClcXFxcXlxcXFwtXFxcXFtcXFxcXVxcXFxcXFxcLyElXFwnXCJ+PTw+Xzo7J1xuXG5mdW5jdGlvbiBnZXRUZXh0VXBUb0FuY2hvcihzZWxlY3Rpb246IFJhbmdlU2VsZWN0aW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IGFuY2hvciA9IHNlbGVjdGlvbi5hbmNob3JcbiAgaWYgKGFuY2hvci50eXBlICE9PSAndGV4dCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBhbmNob3IuZ2V0Tm9kZSgpXG4gIGlmICghYW5jaG9yTm9kZS5pc1NpbXBsZVRleHQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yT2Zmc2V0ID0gYW5jaG9yLm9mZnNldFxuICByZXR1cm4gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIGFuY2hvck9mZnNldClcbn1cblxuZnVuY3Rpb24gdHJ5VG9Qb3NpdGlvblJhbmdlKGxlYWRPZmZzZXQ6IG51bWJlciwgcmFuZ2U6IFJhbmdlLCBlZGl0b3JXaW5kb3c6IFdpbmRvdyk6IGJvb2xlYW4ge1xuICBjb25zdCBkb21TZWxlY3Rpb24gPSBlZGl0b3JXaW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgaWYgKGRvbVNlbGVjdGlvbiA9PT0gbnVsbCB8fCAhZG9tU2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gbGVhZE9mZnNldFxuICBjb25zdCBlbmRPZmZzZXQgPSBkb21TZWxlY3Rpb24uYW5jaG9yT2Zmc2V0XG5cbiAgaWYgKGFuY2hvck5vZGUgPT0gbnVsbCB8fCBlbmRPZmZzZXQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICByYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBzdGFydE9mZnNldClcbiAgICAvLyBpZiBlbmRPZmZzZXQgaXMgMCwgcG9zaXRpb25pbmcgdGhlIHJhbmdlIGZvciB3aGVuIHlvdSBjbGljayB0aGUgcGx1cyBidXR0b24gdG8gb3BlbiB0aGUgc2xhc2ggbWVudSB3aWxsIGZpYWxcbiAgICByYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgZW5kT2Zmc2V0ID4gMSA/IGVuZE9mZnNldCA6IDEpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBnZXRRdWVyeVRleHRGb3JTZWFyY2goZWRpdG9yOiBMZXhpY2FsRWRpdG9yKTogbnVsbCB8IHN0cmluZyB7XG4gIGxldCB0ZXh0ID0gbnVsbFxuICBlZGl0b3IuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0ZXh0ID0gZ2V0VGV4dFVwVG9BbmNob3Ioc2VsZWN0aW9uKVxuICB9KVxuICByZXR1cm4gdGV4dFxufVxuXG5mdW5jdGlvbiBpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkoZWRpdG9yOiBMZXhpY2FsRWRpdG9yLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAob2Zmc2V0ICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgIGlmICgkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKSB7XG4gICAgICBjb25zdCBhbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yXG4gICAgICBjb25zdCBhbmNob3JOb2RlID0gYW5jaG9yLmdldE5vZGUoKVxuICAgICAgY29uc3QgcHJldlNpYmxpbmcgPSBhbmNob3JOb2RlLmdldFByZXZpb3VzU2libGluZygpXG4gICAgICByZXR1cm4gJGlzVGV4dE5vZGUocHJldlNpYmxpbmcpICYmIHByZXZTaWJsaW5nLmlzVGV4dEVudGl0eSgpXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgaWYgKFJlYWN0LnN0YXJ0VHJhbnNpdGlvbikge1xuICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbihjYWxsYmFjaylcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuLy8gR290IGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQyNTQzOTA4LzIwMTM1ODBcbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuKTogSFRNTEJvZHlFbGVtZW50IHwgSFRNTEVsZW1lbnQge1xuICBsZXQgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gIGNvbnN0IGV4Y2x1ZGVTdGF0aWNQYXJlbnQgPSBzdHlsZS5wb3NpdGlvbiA9PT0gJ2Fic29sdXRlJ1xuICBjb25zdCBvdmVyZmxvd1JlZ2V4ID0gaW5jbHVkZUhpZGRlbiA/IC8oYXV0b3xzY3JvbGx8aGlkZGVuKS8gOiAvKGF1dG98c2Nyb2xsKS9cbiAgaWYgKHN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbiAgfVxuICBmb3IgKGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7IChwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudCk7ICkge1xuICAgIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpXG4gICAgaWYgKGV4Y2x1ZGVTdGF0aWNQYXJlbnQgJiYgc3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3ZlcmZsb3dSZWdleC50ZXN0KHN0eWxlLm92ZXJmbG93ICsgc3R5bGUub3ZlcmZsb3dZICsgc3R5bGUub3ZlcmZsb3dYKSkge1xuICAgICAgcmV0dXJuIHBhcmVudFxuICAgIH1cbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keVxufVxuXG5leHBvcnQgeyB1c2VEeW5hbWljUG9zaXRpb25pbmcgfSBmcm9tICcuL0xleGljYWxNZW51J1xuXG5leHBvcnQgdHlwZSBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMgPSB7XG4gIGFuY2hvckNsYXNzTmFtZT86IHN0cmluZ1xuICBhbmNob3JFbGVtOiBIVE1MRWxlbWVudFxuICBncm91cHNXaXRoT3B0aW9uczogQXJyYXk8U2xhc2hNZW51R3JvdXA+XG4gIG1lbnVSZW5kZXJGbjogTWVudVJlbmRlckZuXG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkXG4gIG9uT3Blbj86IChyZXNvbHV0aW9uOiBNZW51UmVzb2x1dGlvbikgPT4gdm9pZFxuICBvblF1ZXJ5Q2hhbmdlOiAobWF0Y2hpbmdTdHJpbmc6IG51bGwgfCBzdHJpbmcpID0+IHZvaWRcbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgdHJpZ2dlckZuOiBUcmlnZ2VyRm5cbn1cblxuZXhwb3J0IGNvbnN0IEVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQ6IExleGljYWxDb21tYW5kPHtcbiAgbm9kZTogUGFyYWdyYXBoTm9kZVxufT4gPSBjcmVhdGVDb21tYW5kKCdFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luKHtcbiAgYW5jaG9yQ2xhc3NOYW1lLFxuICBhbmNob3JFbGVtLFxuICBncm91cHNXaXRoT3B0aW9ucyxcbiAgbWVudVJlbmRlckZuLFxuICBvbkNsb3NlLFxuICBvbk9wZW4sXG4gIG9uUXVlcnlDaGFuZ2UsXG4gIG9uU2VsZWN0T3B0aW9uLFxuICB0cmlnZ2VyRm4sXG59OiBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBbcmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbl0gPSB1c2VTdGF0ZTxNZW51UmVzb2x1dGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFuY2hvckVsZW1lbnRSZWYgPSB1c2VNZW51QW5jaG9yUmVmKGFuY2hvckVsZW0sIHJlc29sdXRpb24sIHNldFJlc29sdXRpb24sIGFuY2hvckNsYXNzTmFtZSlcblxuICBjb25zdCBjbG9zZVR5cGVhaGVhZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRSZXNvbHV0aW9uKG51bGwpXG4gICAgaWYgKG9uQ2xvc2UgIT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gIH0sIFtvbkNsb3NlLCByZXNvbHV0aW9uXSlcblxuICBjb25zdCBvcGVuVHlwZWFoZWFkID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlczogTWVudVJlc29sdXRpb24pID0+IHtcbiAgICAgIHNldFJlc29sdXRpb24ocmVzKVxuICAgICAgaWYgKG9uT3BlbiAhPSBudWxsICYmIHJlc29sdXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgb25PcGVuKHJlcylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbk9wZW4sIHJlc29sdXRpb25dLFxuICApXG5cbiAgLy8gVGhpcyBpcyBtYWlubHkgdXNlZCBmb3IgdGhlIEFkZEJsb2NrSGFuZGxlUGx1Z2luLCBzbyB0aGF0IHRoZSBzbGFzaCBtZW51IGNhbiBiZSBvcGVuZWQgZnJvbSB0aGVyZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCxcbiAgICAgICAgKHsgbm9kZSB9KSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaDogTWVudVRleHRNYXRjaCA9IHtcbiAgICAgICAgICAgICAgbGVhZE9mZnNldDogMCxcbiAgICAgICAgICAgICAgbWF0Y2hpbmdTdHJpbmc6ICcnLFxuICAgICAgICAgICAgICByZXBsYWNlYWJsZVN0cmluZzogJycsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgIWlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3IsIG1hdGNoLmxlYWRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yV2luZG93ID0gZWRpdG9yLl93aW5kb3cgPz8gd2luZG93XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3JXaW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZVBvc2l0aW9uZWQgPSB0cnlUb1Bvc2l0aW9uUmFuZ2UobWF0Y2gubGVhZE9mZnNldCwgcmFuZ2UsIGVkaXRvcldpbmRvdylcbiAgICAgICAgICAgICAgICBpZiAoaXNSYW5nZVBvc2l0aW9uZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgICAgICAgICAgICBvcGVuVHlwZWFoZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBDT01NQU5EX1BSSU9SSVRZX0xPVyxcbiAgICAgICksXG4gICAgKVxuICB9LCBbZWRpdG9yLCBvcGVuVHlwZWFoZWFkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvcldpbmRvdyA9IGVkaXRvci5fd2luZG93ID8/IHdpbmRvd1xuICAgICAgICBjb25zdCByYW5nZSA9IGVkaXRvcldpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0UXVlcnlUZXh0Rm9yU2VhcmNoKGVkaXRvcilcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikgfHxcbiAgICAgICAgICAhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgfHxcbiAgICAgICAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgICAgICAgcmFuZ2UgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0cmlnZ2VyRm4oeyBlZGl0b3IsIHF1ZXJ5OiB0ZXh0IH0pXG4gICAgICAgIG9uUXVlcnlDaGFuZ2UobWF0Y2ggPyBtYXRjaC5tYXRjaGluZ1N0cmluZyA6IG51bGwpXG5cbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmICFpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkoZWRpdG9yLCBtYXRjaC5sZWFkT2Zmc2V0KSkge1xuICAgICAgICAgIGNvbnN0IGlzUmFuZ2VQb3NpdGlvbmVkID0gdHJ5VG9Qb3NpdGlvblJhbmdlKG1hdGNoLmxlYWRPZmZzZXQsIHJhbmdlLCBlZGl0b3JXaW5kb3cpXG4gICAgICAgICAgaWYgKGlzUmFuZ2VQb3NpdGlvbmVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT5cbiAgICAgICAgICAgICAgb3BlblR5cGVhaGVhZCh7XG4gICAgICAgICAgICAgICAgZ2V0UmVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdmVVcGRhdGVMaXN0ZW5lciA9IGVkaXRvci5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlbW92ZVVwZGF0ZUxpc3RlbmVyKClcbiAgICB9XG4gIH0sIFtlZGl0b3IsIHRyaWdnZXJGbiwgb25RdWVyeUNoYW5nZSwgcmVzb2x1dGlvbiwgY2xvc2VUeXBlYWhlYWQsIG9wZW5UeXBlYWhlYWRdKVxuXG4gIHJldHVybiByZXNvbHV0aW9uID09PSBudWxsIHx8IGVkaXRvciA9PT0gbnVsbCA/IG51bGwgOiAoXG4gICAgPExleGljYWxNZW51XG4gICAgICBhbmNob3JFbGVtZW50UmVmPXthbmNob3JFbGVtZW50UmVmfVxuICAgICAgY2xvc2U9e2Nsb3NlVHlwZWFoZWFkfVxuICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICBncm91cHNXaXRoT3B0aW9ucz17Z3JvdXBzV2l0aE9wdGlvbnN9XG4gICAgICBtZW51UmVuZGVyRm49e21lbnVSZW5kZXJGbn1cbiAgICAgIG9uU2VsZWN0T3B0aW9uPXtvblNlbGVjdE9wdGlvbn1cbiAgICAgIHJlc29sdXRpb249e3Jlc29sdXRpb259XG4gICAgICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnlcbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IE1lbnVSZW5kZXJGbiwgTWVudVJlc29sdXRpb24sIE1lbnVUZXh0TWF0Y2gsIFRyaWdnZXJGbiB9XG4iXSwibmFtZXMiOlsiUFVOQ1RVQVRJT04iLCJnZXRTY3JvbGxQYXJlbnQiLCJ1c2VEeW5hbWljUG9zaXRpb25pbmciLCJFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EIiwiTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4iLCJNZW51VGV4dE1hdGNoIiwiVHJpZ2dlckZuIiwiZ2V0VGV4dFVwVG9BbmNob3IiLCJzZWxlY3Rpb24iLCJhbmNob3IiLCJ0eXBlIiwiYW5jaG9yTm9kZSIsImdldE5vZGUiLCJpc1NpbXBsZVRleHQiLCJhbmNob3JPZmZzZXQiLCJvZmZzZXQiLCJnZXRUZXh0Q29udGVudCIsInNsaWNlIiwidHJ5VG9Qb3NpdGlvblJhbmdlIiwibGVhZE9mZnNldCIsInJhbmdlIiwiZWRpdG9yV2luZG93IiwiZG9tU2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJzdGFydE9mZnNldCIsImVuZE9mZnNldCIsInNldFN0YXJ0Iiwic2V0RW5kIiwiZXJyb3IiLCJnZXRRdWVyeVRleHRGb3JTZWFyY2giLCJlZGl0b3IiLCJ0ZXh0IiwiZ2V0RWRpdG9yU3RhdGUiLCJyZWFkIiwiJGdldFNlbGVjdGlvbiIsIiRpc1JhbmdlU2VsZWN0aW9uIiwiaXNTZWxlY3Rpb25PbkVudGl0eUJvdW5kYXJ5IiwicHJldlNpYmxpbmciLCJnZXRQcmV2aW91c1NpYmxpbmciLCIkaXNUZXh0Tm9kZSIsImlzVGV4dEVudGl0eSIsInN0YXJ0VHJhbnNpdGlvbiIsImNhbGxiYWNrIiwiUmVhY3QiLCJlbGVtZW50IiwiaW5jbHVkZUhpZGRlbiIsInN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImV4Y2x1ZGVTdGF0aWNQYXJlbnQiLCJwb3NpdGlvbiIsIm92ZXJmbG93UmVnZXgiLCJkb2N1bWVudCIsImJvZHkiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwidGVzdCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckNsYXNzTmFtZSIsImFuY2hvckVsZW0iLCJncm91cHNXaXRoT3B0aW9ucyIsIm1lbnVSZW5kZXJGbiIsIm9uQ2xvc2UiLCJvbk9wZW4iLCJvblF1ZXJ5Q2hhbmdlIiwib25TZWxlY3RPcHRpb24iLCJ0cmlnZ2VyRm4iLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwicmVzb2x1dGlvbiIsInNldFJlc29sdXRpb24iLCJ1c2VTdGF0ZSIsImFuY2hvckVsZW1lbnRSZWYiLCJ1c2VNZW51QW5jaG9yUmVmIiwiY2xvc2VUeXBlYWhlYWQiLCJ1c2VDYWxsYmFjayIsIm9wZW5UeXBlYWhlYWQiLCJyZXMiLCJ1c2VFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwibm9kZSIsIm1hdGNoIiwibWF0Y2hpbmdTdHJpbmciLCJyZXBsYWNlYWJsZVN0cmluZyIsIl93aW5kb3ciLCJ3aW5kb3ciLCJjcmVhdGVSYW5nZSIsImlzUmFuZ2VQb3NpdGlvbmVkIiwiZ2V0UmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIkNPTU1BTkRfUFJJT1JJVFlfTE9XIiwidXBkYXRlTGlzdGVuZXIiLCJxdWVyeSIsInJlbW92ZVVwZGF0ZUxpc3RlbmVyIiwicmVnaXN0ZXJVcGRhdGVMaXN0ZW5lciIsIkxleGljYWxNZW51IiwiY2xvc2UiLCJzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7SUEyQmFBLFdBQVc7ZUFBWEE7O0lBNEVHQyxlQUFlO2VBQWZBOztJQXNCUEMscUJBQXFCO2VBQXJCQSxrQ0FBcUI7O0lBbUJqQkMseUJBQXlCO2VBQXpCQTs7SUFJR0MsMEJBQTBCO2VBQTFCQTs7SUFxSXVCQyxhQUFhO2VBQWJBLGtDQUFhOztJQUFFQyxTQUFTO2VBQVRBLDhCQUFTOzs7d0NBaFJyQjt1QkFDWjt5QkFPdkI7K0RBQzBDO3FDQU1SOzZCQUNLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXZDLE1BQU1OLGNBQWM7QUFFM0IsU0FBU08sa0JBQWtCQyxTQUF5QjtJQUNsRCxNQUFNQyxTQUFTRCxVQUFVQyxNQUFNO0lBQy9CLElBQUlBLE9BQU9DLElBQUksS0FBSyxRQUFRO1FBQzFCLE9BQU87SUFDVDtJQUNBLE1BQU1DLGFBQWFGLE9BQU9HLE9BQU87SUFDakMsSUFBSSxDQUFDRCxXQUFXRSxZQUFZLElBQUk7UUFDOUIsT0FBTztJQUNUO0lBQ0EsTUFBTUMsZUFBZUwsT0FBT00sTUFBTTtJQUNsQyxPQUFPSixXQUFXSyxjQUFjLEdBQUdDLEtBQUssQ0FBQyxHQUFHSDtBQUM5QztBQUVBLFNBQVNJLG1CQUFtQkMsVUFBa0IsRUFBRUMsS0FBWSxFQUFFQyxZQUFvQjtJQUNoRixNQUFNQyxlQUFlRCxhQUFhRSxZQUFZO0lBQzlDLElBQUlELGlCQUFpQixRQUFRLENB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
@@ -3,9 +3,9 @@ import type { LexicalEditor } from 'lexical';
3
3
  import type { MutableRefObject } from 'react';
4
4
  export declare class SlashMenuOption {
5
5
  Icon: React.FC;
6
- displayName?: ({ i18n }: {
6
+ displayName?: (({ i18n }: {
7
7
  i18n: i18n;
8
- }) => string;
8
+ }) => string) | string;
9
9
  key: string;
10
10
  keyboardShortcut?: string;
11
11
  keywords: Array<string>;
@@ -14,12 +14,11 @@ export declare class SlashMenuOption {
14
14
  queryString: string;
15
15
  }) => void;
16
16
  ref?: MutableRefObject<HTMLElement | null>;
17
- title: string;
18
- constructor(title: string, options: {
17
+ constructor(key: string, options: {
19
18
  Icon: React.FC;
20
- displayName?: ({ i18n }: {
19
+ displayName?: (({ i18n }: {
21
20
  i18n: i18n;
22
- }) => string;
21
+ }) => string) | string;
23
22
  keyboardShortcut?: string;
24
23
  keywords?: Array<string>;
25
24
  onSelect: ({ editor, queryString }: {
@@ -30,7 +29,10 @@ export declare class SlashMenuOption {
30
29
  setRefElement(element: HTMLElement | null): void;
31
30
  }
32
31
  export declare class SlashMenuGroup {
32
+ displayName?: (({ i18n }: {
33
+ i18n: i18n;
34
+ }) => string) | string;
35
+ key: string;
33
36
  options: Array<SlashMenuOption>;
34
- title: string;
35
37
  }
36
38
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAE7C,qBAAa,eAAe;IAC1B,IAAI,EAAE,KAAK,CAAC,EAAE,CAAA;IAEd,WAAW,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,KAAK,MAAM,CAAA;IAElD,GAAG,EAAE,MAAM,CAAA;IAEX,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAEvB,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAE3F,GAAG,CAAC,EAAE,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAG1C,KAAK,EAAE,MAAM,CAAA;gBAGX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QACP,IAAI,EAAE,KAAK,CAAC,EAAE,CAAA;QACd,WAAW,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;YAAE,IAAI,EAAE,IAAI,CAAA;SAAE,KAAK,MAAM,CAAA;QAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACxB,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE;YAAE,MAAM,EAAE,aAAa,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAA;KAC5F;IAcH,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;CAG1C;AAED,qBAAa,cAAc;IACzB,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;CACd"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAE7C,qBAAa,eAAe;IAE1B,IAAI,EAAE,KAAK,CAAC,EAAE,CAAA;IAEd,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,KAAK,MAAM,CAAC,GAAG,MAAM,CAAA;IAE7D,GAAG,EAAE,MAAM,CAAA;IAEX,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAEvB,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAE3F,GAAG,CAAC,EAAE,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;gBAGxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QACP,IAAI,EAAE,KAAK,CAAC,EAAE,CAAA;QACd,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;YAAE,IAAI,EAAE,IAAI,CAAA;SAAE,KAAK,MAAM,CAAC,GAAG,MAAM,CAAA;QAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACxB,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE;YAAE,MAAM,EAAE,aAAa,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAA;KAC5F;IAaH,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;CAG1C;AAED,qBAAa,cAAc;IAEzB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,KAAK,MAAM,CAAC,GAAG,MAAM,CAAA;IAC7D,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;CAChC"}
@@ -17,9 +17,10 @@ _export(exports, {
17
17
  }
18
18
  });
19
19
  class SlashMenuOption {
20
+ // Icon for display
20
21
  Icon;
21
22
  displayName;
22
- // Icon for display
23
+ // Used for class names and, if displayName is not provided, for display.
23
24
  key;
24
25
  // TBD
25
26
  keyboardShortcut;
@@ -28,15 +29,12 @@ class SlashMenuOption {
28
29
  // What happens when you select this option?
29
30
  onSelect;
30
31
  ref;
31
- // What shows up in the editor
32
- title;
33
- constructor(title, options){
34
- this.key = title;
32
+ constructor(key, options){
33
+ this.key = key;
35
34
  this.ref = {
36
35
  current: null
37
36
  };
38
37
  this.setRefElement = this.setRefElement.bind(this);
39
- this.title = title;
40
38
  this.displayName = options.displayName;
41
39
  this.keywords = options.keywords || [];
42
40
  this.Icon = options.Icon;
@@ -50,8 +48,10 @@ class SlashMenuOption {
50
48
  }
51
49
  }
52
50
  class SlashMenuGroup {
51
+ // Used for class names and, if displayName is not provided, for display.
52
+ displayName;
53
+ key;
53
54
  options;
54
- title;
55
55
  }
56
56
 
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgaTE4biB9IGZyb20gJ2kxOG5leHQnXG5pbXBvcnQgdHlwZSB7IExleGljYWxFZGl0b3IgfSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHR5cGUgeyBNdXRhYmxlUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBjbGFzcyBTbGFzaE1lbnVPcHRpb24ge1xuICBJY29uOiBSZWFjdC5GQ1xuXG4gIGRpc3BsYXlOYW1lPzogKHsgaTE4biB9OiB7IGkxOG46IGkxOG4gfSkgPT4gc3RyaW5nXG4gIC8vIEljb24gZm9yIGRpc3BsYXlcbiAga2V5OiBzdHJpbmdcbiAgLy8gVEJEXG4gIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgLy8gRm9yIGV4dHJhIHNlYXJjaGluZy5cbiAga2V5d29yZHM6IEFycmF5PHN0cmluZz5cbiAgLy8gV2hhdCBoYXBwZW5zIHdoZW4geW91IHNlbGVjdCB0aGlzIG9wdGlvbj9cbiAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuXG4gIHJlZj86IE11dGFibGVSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuXG4gIC8vIFdoYXQgc2hvd3MgdXAgaW4gdGhlIGVkaXRvclxuICB0aXRsZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBJY29uOiBSZWFjdC5GQ1xuICAgICAgZGlzcGxheU5hbWU/OiAoeyBpMThuIH06IHsgaTE4bjogaTE4biB9KSA9PiBzdHJpbmdcbiAgICAgIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgICAgIGtleXdvcmRzPzogQXJyYXk8c3RyaW5nPlxuICAgICAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuICAgIH0sXG4gICkge1xuICAgIHRoaXMua2V5ID0gdGl0bGVcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogbnVsbCB9XG4gICAgdGhpcy5zZXRSZWZFbGVtZW50ID0gdGhpcy5zZXRSZWZFbGVtZW50LmJpbmQodGhpcylcblxuICAgIHRoaXMudGl0bGUgPSB0aXRsZVxuICAgIHRoaXMuZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lXG4gICAgdGhpcy5rZXl3b3JkcyA9IG9wdGlvbnMua2V5d29yZHMgfHwgW11cbiAgICB0aGlzLkljb24gPSBvcHRpb25zLkljb25cbiAgICB0aGlzLmtleWJvYXJkU2hvcnRjdXQgPSBvcHRpb25zLmtleWJvYXJkU2hvcnRjdXRcbiAgICB0aGlzLm9uU2VsZWN0ID0gb3B0aW9ucy5vblNlbGVjdC5iaW5kKHRoaXMpXG4gIH1cblxuICBzZXRSZWZFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCkge1xuICAgIHRoaXMucmVmID0geyBjdXJyZW50OiBlbGVtZW50IH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2xhc2hNZW51R3JvdXAge1xuICBvcHRpb25zOiBBcnJheTxTbGFzaE1lbnVPcHRpb24+XG4gIHRpdGxlOiBzdHJpbmdcbn1cbiJdLCJuYW1lcyI6WyJTbGFzaE1lbnVPcHRpb24iLCJTbGFzaE1lbnVHcm91cCIsIkljb24iLCJkaXNwbGF5TmFtZSIsImtleSIsImtleWJvYXJkU2hvcnRjdXQiLCJrZXl3b3JkcyIsIm9uU2VsZWN0IiwicmVmIiwidGl0bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjdXJyZW50Iiwic2V0UmVmRWxlbWVudCIsImJpbmQiLCJlbGVtZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQUlhQSxlQUFlO2VBQWZBOztJQTZDQUMsY0FBYztlQUFkQTs7O0FBN0NOLE1BQU1EO0lBQ1hFLEtBQWM7SUFFZEMsWUFBa0Q7SUFDbEQsbUJBQW1CO0lBQ25CQyxJQUFXO0lBQ1gsTUFBTTtJQUNOQyxpQkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCQyxTQUF1QjtJQUN2Qiw0Q0FBNEM7SUFDNUNDLFNBQTJGO0lBRTNGQyxJQUEwQztJQUUxQyw4QkFBOEI7SUFDOUJDLE1BQWE7SUFFYkMsWUFDRUQsS0FBYSxFQUNiRSxPQU1DLENBQ0Q7UUFDQSxJQUFJLENBQUNQLEdBQUcsR0FBR0s7UUFDWCxJQUFJLENBQUNELEdBQUcsR0FBRztZQUFFSSxTQUFTO1FBQUs7UUFDM0IsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSSxDQUFDQSxhQUFhLENBQUNDLElBQUksQ0FBQyxJQUFJO1FBRWpELElBQUksQ0FBQ0wsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ04sV0FBVyxHQUFHUSxRQUFRUixXQUFXO1FBQ3RDLElBQUksQ0FBQ0csUUFBUSxHQUFHSyxRQUFRTCxRQUFRLElBQUksRUFBRTtRQUN0QyxJQUFJLENBQUNKLElBQUksR0FBR1MsUUFBUVQsSUFBSTtRQUN4QixJQUFJLENBQUNHLGdCQUFnQixHQUFHTSxRQUFRTixnQkFBZ0I7UUFDaEQsSUFBSSxDQUFDRSxRQUFRLEdBQUdJLFFBQVFKLFFBQVEsQ0FBQ08sSUFBSSxDQUFDLElBQUk7SUFDNUM7SUFFQUQsY0FBY0UsT0FBMkIsRUFBRTtRQUN6QyxJQUFJLENBQUNQLEdBQUcsR0FBRztZQUFFSSxTQUFTRztRQUFRO0lBQ2hDO0FBQ0Y7QUFFTyxNQUFNZDtJQUNYVSxRQUErQjtJQUMvQkYsTUFBYTtBQUNmIn0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgaTE4biB9IGZyb20gJ2kxOG5leHQnXG5pbXBvcnQgdHlwZSB7IExleGljYWxFZGl0b3IgfSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHR5cGUgeyBNdXRhYmxlUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBjbGFzcyBTbGFzaE1lbnVPcHRpb24ge1xuICAvLyBJY29uIGZvciBkaXNwbGF5XG4gIEljb246IFJlYWN0LkZDXG5cbiAgZGlzcGxheU5hbWU/OiAoKHsgaTE4biB9OiB7IGkxOG46IGkxOG4gfSkgPT4gc3RyaW5nKSB8IHN0cmluZ1xuICAvLyBVc2VkIGZvciBjbGFzcyBuYW1lcyBhbmQsIGlmIGRpc3BsYXlOYW1lIGlzIG5vdCBwcm92aWRlZCwgZm9yIGRpc3BsYXkuXG4gIGtleTogc3RyaW5nXG4gIC8vIFRCRFxuICBrZXlib2FyZFNob3J0Y3V0Pzogc3RyaW5nXG4gIC8vIEZvciBleHRyYSBzZWFyY2hpbmcuXG4gIGtleXdvcmRzOiBBcnJheTxzdHJpbmc+XG4gIC8vIFdoYXQgaGFwcGVucyB3aGVuIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24/XG4gIG9uU2VsZWN0OiAoeyBlZGl0b3IsIHF1ZXJ5U3RyaW5nIH06IHsgZWRpdG9yOiBMZXhpY2FsRWRpdG9yOyBxdWVyeVN0cmluZzogc3RyaW5nIH0pID0+IHZvaWRcblxuICByZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBJY29uOiBSZWFjdC5GQ1xuICAgICAgZGlzcGxheU5hbWU/OiAoKHsgaTE4biB9OiB7IGkxOG46IGkxOG4gfSkgPT4gc3RyaW5nKSB8IHN0cmluZ1xuICAgICAga2V5Ym9hcmRTaG9ydGN1dD86IHN0cmluZ1xuICAgICAga2V5d29yZHM/OiBBcnJheTxzdHJpbmc+XG4gICAgICBvblNlbGVjdDogKHsgZWRpdG9yLCBxdWVyeVN0cmluZyB9OiB7IGVkaXRvcjogTGV4aWNhbEVkaXRvcjsgcXVlcnlTdHJpbmc6IHN0cmluZyB9KSA9PiB2b2lkXG4gICAgfSxcbiAgKSB7XG4gICAgdGhpcy5rZXkgPSBrZXlcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogbnVsbCB9XG4gICAgdGhpcy5zZXRSZWZFbGVtZW50ID0gdGhpcy5zZXRSZWZFbGVtZW50LmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lXG4gICAgdGhpcy5rZXl3b3JkcyA9IG9wdGlvbnMua2V5d29yZHMgfHwgW11cbiAgICB0aGlzLkljb24gPSBvcHRpb25zLkljb25cbiAgICB0aGlzLmtleWJvYXJkU2hvcnRjdXQgPSBvcHRpb25zLmtleWJvYXJkU2hvcnRjdXRcbiAgICB0aGlzLm9uU2VsZWN0ID0gb3B0aW9ucy5vblNlbGVjdC5iaW5kKHRoaXMpXG4gIH1cblxuICBzZXRSZWZFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCkge1xuICAgIHRoaXMucmVmID0geyBjdXJyZW50OiBlbGVtZW50IH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2xhc2hNZW51R3JvdXAge1xuICAvLyBVc2VkIGZvciBjbGFzcyBuYW1lcyBhbmQsIGlmIGRpc3BsYXlOYW1lIGlzIG5vdCBwcm92aWRlZCwgZm9yIGRpc3BsYXkuXG4gIGRpc3BsYXlOYW1lPzogKCh7IGkxOG4gfTogeyBpMThuOiBpMThuIH0pID0+IHN0cmluZykgfCBzdHJpbmdcbiAga2V5OiBzdHJpbmdcbiAgb3B0aW9uczogQXJyYXk8U2xhc2hNZW51T3B0aW9uPlxufVxuIl0sIm5hbWVzIjpbIlNsYXNoTWVudU9wdGlvbiIsIlNsYXNoTWVudUdyb3VwIiwiSWNvbiIsImRpc3BsYXlOYW1lIiwia2V5Iiwia2V5Ym9hcmRTaG9ydGN1dCIsImtleXdvcmRzIiwib25TZWxlY3QiLCJyZWYiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjdXJyZW50Iiwic2V0UmVmRWxlbWVudCIsImJpbmQiLCJlbGVtZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQUlhQSxlQUFlO2VBQWZBOztJQTBDQUMsY0FBYztlQUFkQTs7O0FBMUNOLE1BQU1EO0lBQ1gsbUJBQW1CO0lBQ25CRSxLQUFjO0lBRWRDLFlBQTZEO0lBQzdELHlFQUF5RTtJQUN6RUMsSUFBVztJQUNYLE1BQU07SUFDTkMsaUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QkMsU0FBdUI7SUFDdkIsNENBQTRDO0lBQzVDQyxTQUEyRjtJQUUzRkMsSUFBMEM7SUFFMUNDLFlBQ0VMLEdBQVcsRUFDWE0sT0FNQyxDQUNEO1FBQ0EsSUFBSSxDQUFDTixHQUFHLEdBQUdBO1FBQ1gsSUFBSSxDQUFDSSxHQUFHLEdBQUc7WUFBRUcsU0FBUztRQUFLO1FBQzNCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUksQ0FBQ0EsYUFBYSxDQUFDQyxJQUFJLENBQUMsSUFBSTtRQUVqRCxJQUFJLENBQUNWLFdBQVcsR0FBR08sUUFBUVAsV0FBVztRQUN0QyxJQUFJLENBQUNHLFFBQVEsR0FBR0ksUUFBUUosUUFBUSxJQUFJLEVBQUU7UUFDdEMsSUFBSSxDQUFDSixJQUFJLEdBQUdRLFFBQVFSLElBQUk7UUFDeEIsSUFBSSxDQUFDRyxnQkFBZ0IsR0FBR0ssUUFBUUwsZ0JBQWdCO1FBQ2hELElBQUksQ0FBQ0UsUUFBUSxHQUFHRyxRQUFRSCxRQUFRLENBQUNNLElBQUksQ0FBQyxJQUFJO0lBQzVDO0lBRUFELGNBQWNFLE9BQTJCLEVBQUU7UUFDekMsSUFBSSxDQUFDTixHQUFHLEdBQUc7WUFBRUcsU0FBU0c7UUFBUTtJQUNoQztBQUNGO0FBRU8sTUFBTWI7SUFDWCx5RUFBeUU7SUFDekVFLFlBQTZEO0lBQzdEQyxJQUFXO0lBQ1hNLFFBQStCO0FBQ2pDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/lexical/plugins/SlashMenu/index.tsx"],"names":[],"mappings":";AAgBA,OAAO,cAAc,CAAA;AAkDrB,wBAAgB,eAAe,CAAC,EAC9B,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,GAAG,CAAC,OAAO,CA0Id"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/lexical/plugins/SlashMenu/index.tsx"],"names":[],"mappings":";AAaA,OAAO,cAAc,CAAA;AAqDrB,wBAAgB,eAAe,CAAC,EAC9B,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,GAAG,CAAC,OAAO,CA8Jd"}
@@ -16,6 +16,7 @@ const _reacti18next = require("react-i18next");
16
16
  const _EditorConfigProvider = require("../../config/EditorConfigProvider");
17
17
  const _LexicalTypeaheadMenuPlugin = require("./LexicalTypeaheadMenuPlugin");
18
18
  require("./index.scss");
19
+ const _useMenuTriggerMatch = require("./useMenuTriggerMatch");
19
20
  function _getRequireWildcardCache(nodeInterop) {
20
21
  if (typeof WeakMap !== "function") return null;
21
22
  var cacheBabelInterop = new WeakMap();
@@ -55,17 +56,18 @@ function _interop_require_wildcard(obj, nodeInterop) {
55
56
  }
56
57
  return newObj;
57
58
  }
58
- function SlashMenuItem({ index, isSelected, onClick, onMouseEnter, option }) {
59
+ const baseClass = 'slash-menu-popup';
60
+ function SlashMenuItem({ isSelected, onClick, onMouseEnter, option }) {
59
61
  const { i18n } = (0, _reacti18next.useTranslation)('fields');
60
- let className = 'item';
62
+ let className = `${baseClass}__item ${baseClass}__item-${option.key}`;
61
63
  if (isSelected) {
62
- className += ' selected';
64
+ className += ` ${baseClass}__item--selected`;
63
65
  }
64
- let title = option.title;
65
- if (option.displayName && typeof option.displayName === 'function') {
66
- title = option.displayName({
66
+ let title = option.key;
67
+ if (option.displayName) {
68
+ title = typeof option.displayName === 'function' ? option.displayName({
67
69
  i18n
68
- });
70
+ }) : option.displayName;
69
71
  }
70
72
  // Crop title to max. 50 characters
71
73
  if (title.length > 25) {
@@ -74,7 +76,7 @@ function SlashMenuItem({ index, isSelected, onClick, onMouseEnter, option }) {
74
76
  return /*#__PURE__*/ _react.createElement("button", {
75
77
  "aria-selected": isSelected,
76
78
  className: className,
77
- id: 'typeahead-item-' + index,
79
+ id: baseClass + '__item-' + option.key,
78
80
  key: option.key,
79
81
  onClick: onClick,
80
82
  onMouseEnter: onMouseEnter,
@@ -83,19 +85,20 @@ function SlashMenuItem({ index, isSelected, onClick, onMouseEnter, option }) {
83
85
  tabIndex: -1,
84
86
  type: "button"
85
87
  }, /*#__PURE__*/ _react.createElement(option.Icon, null), /*#__PURE__*/ _react.createElement("span", {
86
- className: "text"
88
+ className: `${baseClass}__item-text`
87
89
  }, title));
88
90
  }
89
91
  function SlashMenuPlugin({ anchorElem = document.body }) {
90
92
  const [editor] = (0, _LexicalComposerContext.useLexicalComposerContext)();
91
93
  const [queryString, setQueryString] = (0, _react.useState)(null);
92
94
  const { editorConfig } = (0, _EditorConfigProvider.useEditorConfigContext)();
93
- const checkForTriggerMatch = (0, _LexicalTypeaheadMenuPlugin.useBasicTypeaheadTriggerMatch)('/', {
95
+ const { i18n } = (0, _reacti18next.useTranslation)('fields');
96
+ const checkForTriggerMatch = (0, _useMenuTriggerMatch.useMenuTriggerMatch)('/', {
94
97
  minLength: 0
95
98
  });
96
99
  const getDynamicOptions = (0, _react.useCallback)(()=>{
97
100
  let groupWithOptions = [];
98
- for (const dynamicOption of editorConfig?.features.slashMenu.dynamicOptions){
101
+ for (const dynamicOption of editorConfig.features.slashMenu.dynamicOptions){
99
102
  const dynamicGroupWithOptions = dynamicOption({
100
103
  editor,
101
104
  queryString
@@ -117,7 +120,13 @@ function SlashMenuPlugin({ anchorElem = document.body }) {
117
120
  // Filter current groups first
118
121
  groupsWithOptions = groupsWithOptions.map((group)=>{
119
122
  const filteredOptions = group.options.filter((option)=>{
120
- return new RegExp(queryString, 'gi').exec(option.title) || option.keywords != null ? option.keywords.some((keyword)=>new RegExp(queryString, 'gi').exec(keyword)) : false;
123
+ let optionTitle = option.key;
124
+ if (option.displayName) {
125
+ optionTitle = typeof option.displayName === 'function' ? option.displayName({
126
+ i18n
127
+ }) : option.displayName;
128
+ }
129
+ return new RegExp(queryString, 'gi').exec(optionTitle) || option.keywords != null ? option.keywords.some((keyword)=>new RegExp(queryString, 'gi').exec(keyword)) : false;
121
130
  });
122
131
  if (filteredOptions.length) {
123
132
  return {
@@ -133,14 +142,14 @@ function SlashMenuPlugin({ anchorElem = document.body }) {
133
142
  // merge dynamic options into groups
134
143
  for (const dynamicGroup of dynamicOptionGroups){
135
144
  // 1. find the group with the same name or create new one
136
- let group = groupsWithOptions.find((group)=>group.title === dynamicGroup.title);
145
+ let group = groupsWithOptions.find((group)=>group.key === dynamicGroup.key);
137
146
  if (!group) {
138
147
  group = {
139
148
  ...dynamicGroup,
140
149
  options: []
141
150
  };
142
151
  } else {
143
- groupsWithOptions = groupsWithOptions.filter((group)=>group.title !== dynamicGroup.title);
152
+ groupsWithOptions = groupsWithOptions.filter((group)=>group.key !== dynamicGroup.key);
144
153
  }
145
154
  // 2. Add options to group options array and add to sanitized.slashMenu.groupsWithOptions
146
155
  if (group?.options?.length) {
@@ -153,7 +162,8 @@ function SlashMenuPlugin({ anchorElem = document.body }) {
153
162
  }, [
154
163
  getDynamicOptions,
155
164
  queryString,
156
- editorConfig?.features
165
+ editorConfig?.features,
166
+ i18n
157
167
  ]);
158
168
  const onSelectOption = (0, _react.useCallback)((selectedOption, nodeToRemove, closeMenu, matchingString)=>{
159
169
  editor.update(()=>{
@@ -173,13 +183,20 @@ function SlashMenuPlugin({ anchorElem = document.body }) {
173
183
  anchorElem: anchorElem,
174
184
  groupsWithOptions: groups,
175
185
  menuRenderFn: (anchorElementRef, { selectOptionAndCleanUp, selectedOptionKey, setSelectedOptionKey })=>anchorElementRef.current && groups.length ? /*#__PURE__*/ _reactdom.createPortal(/*#__PURE__*/ _react.createElement("div", {
176
- className: "typeahead-popover slash-menu"
177
- }, groups.map((group)=>/*#__PURE__*/ _react.createElement("div", {
178
- className: "group",
179
- key: group.title
186
+ className: baseClass
187
+ }, groups.map((group)=>{
188
+ let groupTitle = group.key;
189
+ if (group.displayName) {
190
+ groupTitle = typeof group.displayName === 'function' ? group.displayName({
191
+ i18n
192
+ }) : group.displayName;
193
+ }
194
+ return /*#__PURE__*/ _react.createElement("div", {
195
+ className: `${baseClass}__group ${baseClass}__group-${group.key}`,
196
+ key: group.key
180
197
  }, /*#__PURE__*/ _react.createElement("div", {
181
- className: "group-title"
182
- }, group.title), group.options.map((option, oi)=>/*#__PURE__*/ _react.createElement(SlashMenuItem, {
198
+ className: `${baseClass}__group-title`
199
+ }, groupTitle), group.options.map((option, oi)=>/*#__PURE__*/ _react.createElement(SlashMenuItem, {
183
200
  index: oi,
184
201
  isSelected: selectedOptionKey === option.key,
185
202
  key: option.key,
@@ -191,11 +208,12 @@ function SlashMenuPlugin({ anchorElem = document.body }) {
191
208
  setSelectedOptionKey(option.key);
192
209
  },
193
210
  option: option
194
- }))))), anchorElementRef.current) : null,
211
+ })));
212
+ })), anchorElementRef.current) : null,
195
213
  onQueryChange: setQueryString,
196
214
  onSelectOption: onSelectOption,
197
215
  triggerFn: checkForTriggerMatch
198
216
  }));
199
217
  }
200
218
 
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgVGV4dE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB0eXBlIHsgU2xhc2hNZW51R3JvdXAsIFNsYXNoTWVudU9wdGlvbiB9IGZyb20gJy4vTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4vdHlwZXMnXG5cbmltcG9ydCB7IHVzZUVkaXRvckNvbmZpZ0NvbnRleHQgfSBmcm9tICcuLi8uLi9jb25maWcvRWRpdG9yQ29uZmlnUHJvdmlkZXInXG5pbXBvcnQge1xuICBMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbixcbiAgdXNlQmFzaWNUeXBlYWhlYWRUcmlnZ2VyTWF0Y2gsXG59IGZyb20gJy4vTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4nXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZnVuY3Rpb24gU2xhc2hNZW51SXRlbSh7XG4gIGluZGV4LFxuICBpc1NlbGVjdGVkLFxuICBvbkNsaWNrLFxuICBvbk1vdXNlRW50ZXIsXG4gIG9wdGlvbixcbn06IHtcbiAgaW5kZXg6IG51bWJlclxuICBpc1NlbGVjdGVkOiBib29sZWFuXG4gIG9uQ2xpY2s6ICgpID0+IHZvaWRcbiAgb25Nb3VzZUVudGVyOiAoKSA9PiB2b2lkXG4gIG9wdGlvbjogU2xhc2hNZW51T3B0aW9uXG59KSB7XG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oJ2ZpZWxkcycpXG5cbiAgbGV0IGNsYXNzTmFtZSA9ICdpdGVtJ1xuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNsYXNzTmFtZSArPSAnIHNlbGVjdGVkJ1xuICB9XG5cbiAgbGV0IHRpdGxlID0gb3B0aW9uLnRpdGxlXG4gIGlmIChvcHRpb24uZGlzcGxheU5hbWUgJiYgdHlwZW9mIG9wdGlvbi5kaXNwbGF5TmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRpdGxlID0gb3B0aW9uLmRpc3BsYXlOYW1lKHsgaTE4biB9KVxuICB9XG4gIC8vIENyb3AgdGl0bGUgdG8gbWF4LiA1MCBjaGFyYWN0ZXJzXG4gIGlmICh0aXRsZS5sZW5ndGggPiAyNSkge1xuICAgIHRpdGxlID0gdGl0bGUuc3Vic3RyaW5nKDAsIDI1KSArICcuLi4nXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIGlkPXsndHlwZWFoZWFkLWl0ZW0tJyArIGluZGV4fVxuICAgICAga2V5PXtvcHRpb24ua2V5fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyfVxuICAgICAgcmVmPXtvcHRpb24uc2V0UmVmRWxlbWVudH1cbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPG9wdGlvbi5JY29uIC8+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0XCI+e3RpdGxlfTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2xhc2hNZW51UGx1Z2luKHtcbiAgYW5jaG9yRWxlbSA9IGRvY3VtZW50LmJvZHksXG59OiB7XG4gIGFuY2hvckVsZW0/OiBIVE1MRWxlbWVudFxufSk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgW2VkaXRvcl0gPSB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KClcbiAgY29uc3QgW3F1ZXJ5U3RyaW5nLCBzZXRRdWVyeVN0cmluZ10gPSB1c2VTdGF0ZTxudWxsIHwgc3RyaW5nPihudWxsKVxuICBjb25zdCB7IGVkaXRvckNvbmZpZyB9ID0gdXNlRWRpdG9yQ29uZmlnQ29udGV4dCgpXG5cbiAgY29uc3QgY2hlY2tGb3JUcmlnZ2VyTWF0Y2ggPSB1c2VCYXNpY1R5cGVhaGVhZFRyaWdnZXJNYXRjaCgnLycsIHtcbiAgICBtaW5MZW5ndGg6IDAsXG4gIH0pXG5cbiAgY29uc3QgZ2V0RHluYW1pY09wdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbGV0IGdyb3VwV2l0aE9wdGlvbnM6IEFycmF5PFNsYXNoTWVudUdyb3VwPiA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGR5bmFtaWNPcHRpb24gb2YgZWRpdG9yQ29uZmlnPy5mZWF0dXJlcy5zbGFzaE1lbnUuZHluYW1pY09wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGR5bmFtaWNHcm91cFdpdGhPcHRpb25zID0gZHluYW1pY09wdGlvbih7XG4gICAgICAgIGVkaXRvcixcbiAgICAgICAgcXVlcnlTdHJpbmcsXG4gICAgICB9KVxuICAgICAgZ3JvdXBXaXRoT3B0aW9ucyA9IGdyb3VwV2l0aE9wdGlvbnMuY29uY2F0KGR5bmFtaWNHcm91cFdpdGhPcHRpb25zKVxuICAgIH1cblxuICAgIHJldHVybiBncm91cFdpdGhPcHRpb25zXG4gIH0sIFtlZGl0b3IsIHF1ZXJ5U3RyaW5nLCBlZGl0b3JDb25maWc/LmZlYXR1cmVzXSlcblxuICBjb25zdCBncm91cHM6IFNsYXNoTWVudUdyb3VwW10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgZ3JvdXBzV2l0aE9wdGlvbnM6IFNsYXNoTWVudUdyb3VwW10gPSBbXVxuICAgIGZvciAoY29uc3QgZ3JvdXBXaXRoT3B0aW9uIG9mIGVkaXRvckNvbmZpZz8uZmVhdHVyZXMuc2xhc2hNZW51Lmdyb3Vwc1dpdGhPcHRpb25zID8/IFtdKSB7XG4gICAgICBncm91cHNXaXRoT3B0aW9ucy5wdXNoKGdyb3VwV2l0aE9wdGlvbilcbiAgICB9XG5cbiAgICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICAgIC8vIEZpbHRlciBjdXJyZW50IGdyb3VwcyBmaXJzdFxuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMgPSBncm91cHNXaXRoT3B0aW9ucy5tYXAoKGdyb3VwKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IGdyb3VwLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChxdWVyeVN0cmluZywgJ2dpJykuZXhlYyhvcHRpb24udGl0bGUpIHx8IG9wdGlvbi5rZXl3b3JkcyAhPSBudWxsXG4gICAgICAgICAgICA/IG9wdGlvbi5rZXl3b3Jkcy5zb21lKChrZXl3b3JkKSA9PiBuZXcgUmVnRXhwKHF1ZXJ5U3RyaW5nLCAnZ2knKS5leGVjKGtleXdvcmQpKVxuICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBpZiAoZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgIG9wdGlvbnM6IGZpbHRlcmVkT3B0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0pXG5cbiAgICAgIGdyb3Vwc1dpdGhPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAgIT0gbnVsbClcblxuICAgICAgLy8gTm93IGFkZCBkeW5hbWljIGdyb3Vwc1xuICAgICAgY29uc3QgZHluYW1pY09wdGlvbkdyb3VwcyA9IGdldER5bmFtaWNPcHRpb25zKClcblxuICAgICAgLy8gbWVyZ2UgZHluYW1pYyBvcHRpb25zIGludG8gZ3JvdXBzXG4gICAgICBmb3IgKGNvbnN0IGR5bmFtaWNHcm91cCBvZiBkeW5hbWljT3B0aW9uR3JvdXBzKSB7XG4gICAgICAgIC8vIDEuIGZpbmQgdGhlIGdyb3VwIHdpdGggdGhlIHNhbWUgbmFtZSBvciBjcmVhdGUgbmV3IG9uZVxuICAgICAgICBsZXQgZ3JvdXAgPSBncm91cHNXaXRoT3B0aW9ucy5maW5kKChncm91cCkgPT4gZ3JvdXAudGl0bGUgPT09IGR5bmFtaWNHcm91cC50aXRsZSlcbiAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgIGdyb3VwID0ge1xuICAgICAgICAgICAgLi4uZHluYW1pY0dyb3VwLFxuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC50aXRsZSAhPT0gZHluYW1pY0dyb3VwLnRpdGxlLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIEFkZCBvcHRpb25zIHRvIGdyb3VwIG9wdGlvbnMgYXJyYXkgYW5kIGFkZCB0byBzYW5pdGl6ZWQuc2xhc2hNZW51Lmdyb3Vwc1dpdGhPcHRpb25zXG4gICAgICAgIGlmIChncm91cD8ub3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgZ3JvdXAub3B0aW9ucyA9IGdyb3VwLm9wdGlvbnMuY29uY2F0KGdyb3VwLm9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMucHVzaChncm91cClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBzV2l0aE9wdGlvbnNcbiAgfSwgW2dldER5bmFtaWNPcHRpb25zLCBxdWVyeVN0cmluZywgZWRpdG9yQ29uZmlnPy5mZWF0dXJlc10pXG5cbiAgY29uc3Qgb25TZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzZWxlY3RlZE9wdGlvbjogU2xhc2hNZW51T3B0aW9uLFxuICAgICAgbm9kZVRvUmVtb3ZlOiBUZXh0Tm9kZSB8IG51bGwsXG4gICAgICBjbG9zZU1lbnU6ICgpID0+IHZvaWQsXG4gICAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICAgICkgPT4ge1xuICAgICAgZWRpdG9yLnVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHtcbiAgICAgICAgICBub2RlVG9SZW1vdmUucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZE9wdGlvbi5vblNlbGVjdCh7IGVkaXRvciwgcXVlcnlTdHJpbmc6IG1hdGNoaW5nU3RyaW5nIH0pXG4gICAgICAgIGNsb3NlTWVudSgpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2VkaXRvcl0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpblxuICAgICAgICBhbmNob3JFbGVtPXthbmNob3JFbGVtfVxuICAgICAgICBncm91cHNXaXRoT3B0aW9ucz17Z3JvdXBzfVxuICAgICAgICBtZW51UmVuZGVyRm49eyhcbiAgICAgICAgICBhbmNob3JFbGVtZW50UmVmLFxuICAgICAgICAgIHsgc2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCwgc2VsZWN0ZWRPcHRpb25LZXksIHNldFNlbGVjdGVkT3B0aW9uS2V5IH0sXG4gICAgICAgICkgPT5cbiAgICAgICAgICBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnQgJiYgZ3JvdXBzLmxlbmd0aFxuICAgICAgICAgICAgPyBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0eXBlYWhlYWQtcG9wb3ZlciBzbGFzaC1tZW51XCI+XG4gICAgICAgICAgICAgICAgICB7Z3JvdXBzLm1hcCgoZ3JvdXApID0+IChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncm91cFwiIGtleT17Z3JvdXAudGl0bGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JvdXAtdGl0bGVcIj57Z3JvdXAudGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge2dyb3VwLm9wdGlvbnMubWFwKChvcHRpb24sIG9pOiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTbGFzaE1lbnVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtvaX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRPcHRpb25LZXkgPT09IG9wdGlvbi5rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3B0aW9uLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkT3B0aW9uS2V5KG9wdGlvbi5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3B0aW9uQW5kQ2xlYW5VcChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkT3B0aW9uS2V5KG9wdGlvbi5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbj17b3B0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj4sXG4gICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudFJlZi5jdXJyZW50LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgfVxuICAgICAgICBvblF1ZXJ5Q2hhbmdlPXtzZXRRdWVyeVN0cmluZ31cbiAgICAgICAgb25TZWxlY3RPcHRpb249e29uU2VsZWN0T3B0aW9ufVxuICAgICAgICB0cmlnZ2VyRm49e2NoZWNrRm9yVHJpZ2dlck1hdGNofVxuICAgICAgLz5cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApXG59XG4iXSwibmFtZXMiOlsiU2xhc2hNZW51UGx1Z2luIiwiU2xhc2hNZW51SXRlbSIsImluZGV4IiwiaXNTZWxlY3RlZCIsIm9uQ2xpY2siLCJvbk1vdXNlRW50ZXIiLCJvcHRpb24iLCJpMThuIiwidXNlVHJhbnNsYXRpb24iLCJjbGFzc05hbWUiLCJ0aXRsZSIsImRpc3BsYXlOYW1lIiwibGVuZ3RoIiwic3Vic3RyaW5nIiwiYnV0dG9uIiwiYXJpYS1zZWxlY3RlZCIsImlkIiwia2V5IiwicmVmIiwic2V0UmVmRWxlbWVudCIsInJvbGUiLCJ0YWJJbmRleCIsInR5cGUiLCJJY29uIiwic3BhbiIsImFuY2hvckVsZW0iLCJkb2N1bWVudCIsImJvZHkiLCJlZGl0b3IiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwicXVlcnlTdHJpbmciLCJzZXRRdWVyeVN0cmluZyIsInVzZVN0YXRlIiwiZWRpdG9yQ29uZmlnIiwidXNlRWRpdG9yQ29uZmlnQ29udGV4dCIsImNoZWNrRm9yVHJpZ2dlck1hdGNoIiwidXNlQmFzaWNUeXBlYWhlYWRUcmlnZ2VyTWF0Y2giLCJtaW5MZW5ndGgiLCJnZXREeW5hbWljT3B0aW9ucyIsInVzZUNhbGxiYWNrIiwiZ3JvdXBXaXRoT3B0aW9ucyIsImR5bmFtaWNPcHRpb24iLCJmZWF0dXJlcyIsInNsYXNoTWVudSIsImR5bmFtaWNPcHRpb25zIiwiZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMiLCJjb25jYXQiLCJncm91cHMiLCJ1c2VNZW1vIiwiZ3JvdXBzV2l0aE9wdGlvbnMiLCJncm91cFdpdGhPcHRpb24iLCJwdXNoIiwibWFwIiwiZ3JvdXAiLCJmaWx0ZXJlZE9wdGlvbnMiLCJvcHRpb25zIiwiZmlsdGVyIiwiUmVnRXhwIiwiZXhlYyIsImtleXdvcmRzIiwic29tZSIsImtleXdvcmQiLCJkeW5hbWljT3B0aW9uR3JvdXBzIiwiZHluYW1pY0dyb3VwIiwiZmluZCIsIm9uU2VsZWN0T3B0aW9uIiwic2VsZWN0ZWRPcHRpb24iLCJub2RlVG9SZW1vdmUiLCJjbG9zZU1lbnUiLCJtYXRjaGluZ1N0cmluZyIsInVwZGF0ZSIsInJlbW92ZSIsIm9uU2VsZWN0IiwiUmVhY3QiLCJGcmFnbWVudCIsIkxleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luIiwibWVudVJlbmRlckZuIiwiYW5jaG9yRWxlbWVudFJlZiIsInNlbGVjdE9wdGlvbkFuZENsZWFuVXAiLCJzZWxlY3RlZE9wdGlvbktleSIsInNldFNlbGVjdGVkT3B0aW9uS2V5IiwiY3VycmVudCIsIlJlYWN0RE9NIiwiY3JlYXRlUG9ydGFsIiwiZGl2Iiwib2kiLCJvblF1ZXJ5Q2hhbmdlIiwidHJpZ2dlckZuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7K0JBa0VnQkE7OztlQUFBQTs7O3dDQS9EMEI7K0RBQ0s7a0VBRXJCOzhCQUNLO3NDQUlROzRDQUloQztRQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVAsU0FBU0MsY0FBYyxFQUNyQkMsS0FBSyxFQUNMQyxVQUFVLEVBQ1ZDLE9BQU8sRUFDUEMsWUFBWSxFQUNaQyxNQUFNLEVBT1A7SUFDQyxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyxJQUFBQSw0QkFBYyxFQUFDO0lBRWhDLElBQUlDLFlBQVk7SUFDaEIsSUFBSU4sWUFBWTtRQUNkTSxhQUFhO0lBQ2Y7SUFFQSxJQUFJQyxR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
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgVGV4dE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB0eXBlIHsgU2xhc2hNZW51R3JvdXAsIFNsYXNoTWVudU9wdGlvbiB9IGZyb20gJy4vTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4vdHlwZXMnXG5cbmltcG9ydCB7IHVzZUVkaXRvckNvbmZpZ0NvbnRleHQgfSBmcm9tICcuLi8uLi9jb25maWcvRWRpdG9yQ29uZmlnUHJvdmlkZXInXG5pbXBvcnQgeyBMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbiB9IGZyb20gJy4vTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4nXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IHVzZU1lbnVUcmlnZ2VyTWF0Y2ggfSBmcm9tICcuL3VzZU1lbnVUcmlnZ2VyTWF0Y2gnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdzbGFzaC1tZW51LXBvcHVwJ1xuXG5mdW5jdGlvbiBTbGFzaE1lbnVJdGVtKHtcbiAgaXNTZWxlY3RlZCxcbiAgb25DbGljayxcbiAgb25Nb3VzZUVudGVyLFxuICBvcHRpb24sXG59OiB7XG4gIGluZGV4OiBudW1iZXJcbiAgaXNTZWxlY3RlZDogYm9vbGVhblxuICBvbkNsaWNrOiAoKSA9PiB2b2lkXG4gIG9uTW91c2VFbnRlcjogKCkgPT4gdm9pZFxuICBvcHRpb246IFNsYXNoTWVudU9wdGlvblxufSkge1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKCdmaWVsZHMnKVxuXG4gIGxldCBjbGFzc05hbWUgPSBgJHtiYXNlQ2xhc3N9X19pdGVtICR7YmFzZUNsYXNzfV9faXRlbS0ke29wdGlvbi5rZXl9YFxuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNsYXNzTmFtZSArPSBgICR7YmFzZUNsYXNzfV9faXRlbS0tc2VsZWN0ZWRgXG4gIH1cblxuICBsZXQgdGl0bGUgPSBvcHRpb24ua2V5XG4gIGlmIChvcHRpb24uZGlzcGxheU5hbWUpIHtcbiAgICB0aXRsZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9uLmRpc3BsYXlOYW1lID09PSAnZnVuY3Rpb24nID8gb3B0aW9uLmRpc3BsYXlOYW1lKHsgaTE4biB9KSA6IG9wdGlvbi5kaXNwbGF5TmFtZVxuICB9XG4gIC8vIENyb3AgdGl0bGUgdG8gbWF4LiA1MCBjaGFyYWN0ZXJzXG4gIGlmICh0aXRsZS5sZW5ndGggPiAyNSkge1xuICAgIHRpdGxlID0gdGl0bGUuc3Vic3RyaW5nKDAsIDI1KSArICcuLi4nXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIGlkPXtiYXNlQ2xhc3MgKyAnX19pdGVtLScgKyBvcHRpb24ua2V5fVxuICAgICAga2V5PXtvcHRpb24ua2V5fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyfVxuICAgICAgcmVmPXtvcHRpb24uc2V0UmVmRWxlbWVudH1cbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPG9wdGlvbi5JY29uIC8+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2l0ZW0tdGV4dGB9Pnt0aXRsZX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNsYXNoTWVudVBsdWdpbih7XG4gIGFuY2hvckVsZW0gPSBkb2N1bWVudC5ib2R5LFxufToge1xuICBhbmNob3JFbGVtPzogSFRNTEVsZW1lbnRcbn0pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG4gIGNvbnN0IFtxdWVyeVN0cmluZywgc2V0UXVlcnlTdHJpbmddID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcbiAgY29uc3QgeyBlZGl0b3JDb25maWcgfSA9IHVzZUVkaXRvckNvbmZpZ0NvbnRleHQoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKCdmaWVsZHMnKVxuXG4gIGNvbnN0IGNoZWNrRm9yVHJpZ2dlck1hdGNoID0gdXNlTWVudVRyaWdnZXJNYXRjaCgnLycsIHtcbiAgICBtaW5MZW5ndGg6IDAsXG4gIH0pXG5cbiAgY29uc3QgZ2V0RHluYW1pY09wdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbGV0IGdyb3VwV2l0aE9wdGlvbnM6IEFycmF5PFNsYXNoTWVudUdyb3VwPiA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGR5bmFtaWNPcHRpb24gb2YgZWRpdG9yQ29uZmlnLmZlYXR1cmVzLnNsYXNoTWVudS5keW5hbWljT3B0aW9ucykge1xuICAgICAgY29uc3QgZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMgPSBkeW5hbWljT3B0aW9uKHtcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBxdWVyeVN0cmluZyxcbiAgICAgIH0pXG4gICAgICBncm91cFdpdGhPcHRpb25zID0gZ3JvdXBXaXRoT3B0aW9ucy5jb25jYXQoZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwV2l0aE9wdGlvbnNcbiAgfSwgW2VkaXRvciwgcXVlcnlTdHJpbmcsIGVkaXRvckNvbmZpZz8uZmVhdHVyZXNdKVxuXG4gIGNvbnN0IGdyb3VwczogU2xhc2hNZW51R3JvdXBbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBncm91cHNXaXRoT3B0aW9uczogU2xhc2hNZW51R3JvdXBbXSA9IFtdXG4gICAgZm9yIChjb25zdCBncm91cFdpdGhPcHRpb24gb2YgZWRpdG9yQ29uZmlnPy5mZWF0dXJlcy5zbGFzaE1lbnUuZ3JvdXBzV2l0aE9wdGlvbnMgPz8gW10pIHtcbiAgICAgIGdyb3Vwc1dpdGhPcHRpb25zLnB1c2goZ3JvdXBXaXRoT3B0aW9uKVxuICAgIH1cblxuICAgIGlmIChxdWVyeVN0cmluZykge1xuICAgICAgLy8gRmlsdGVyIGN1cnJlbnQgZ3JvdXBzIGZpcnN0XG4gICAgICBncm91cHNXaXRoT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZ3JvdXAub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIGxldCBvcHRpb25UaXRsZSA9IG9wdGlvbi5rZXlcbiAgICAgICAgICBpZiAob3B0aW9uLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICBvcHRpb25UaXRsZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBvcHRpb24uZGlzcGxheU5hbWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IG9wdGlvbi5kaXNwbGF5TmFtZSh7IGkxOG4gfSlcbiAgICAgICAgICAgICAgICA6IG9wdGlvbi5kaXNwbGF5TmFtZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHF1ZXJ5U3RyaW5nLCAnZ2knKS5leGVjKG9wdGlvblRpdGxlKSB8fCBvcHRpb24ua2V5d29yZHMgIT0gbnVsbFxuICAgICAgICAgICAgPyBvcHRpb24ua2V5d29yZHMuc29tZSgoa2V5d29yZCkgPT4gbmV3IFJlZ0V4cChxdWVyeVN0cmluZywgJ2dpJykuZXhlYyhrZXl3b3JkKSlcbiAgICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICBvcHRpb25zOiBmaWx0ZXJlZE9wdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9KVxuXG4gICAgICBncm91cHNXaXRoT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwICE9IG51bGwpXG5cbiAgICAgIC8vIE5vdyBhZGQgZHluYW1pYyBncm91cHNcbiAgICAgIGNvbnN0IGR5bmFtaWNPcHRpb25Hcm91cHMgPSBnZXREeW5hbWljT3B0aW9ucygpXG5cbiAgICAgIC8vIG1lcmdlIGR5bmFtaWMgb3B0aW9ucyBpbnRvIGdyb3Vwc1xuICAgICAgZm9yIChjb25zdCBkeW5hbWljR3JvdXAgb2YgZHluYW1pY09wdGlvbkdyb3Vwcykge1xuICAgICAgICAvLyAxLiBmaW5kIHRoZSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgb3IgY3JlYXRlIG5ldyBvbmVcbiAgICAgICAgbGV0IGdyb3VwID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmluZCgoZ3JvdXApID0+IGdyb3VwLmtleSA9PT0gZHluYW1pY0dyb3VwLmtleSlcbiAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgIGdyb3VwID0ge1xuICAgICAgICAgICAgLi4uZHluYW1pY0dyb3VwLFxuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAua2V5ICE9PSBkeW5hbWljR3JvdXAua2V5KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gQWRkIG9wdGlvbnMgdG8gZ3JvdXAgb3B0aW9ucyBhcnJheSBhbmQgYWRkIHRvIHNhbml0aXplZC5zbGFzaE1lbnUuZ3JvdXBzV2l0aE9wdGlvbnNcbiAgICAgICAgaWYgKGdyb3VwPy5vcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICBncm91cC5vcHRpb25zID0gZ3JvdXAub3B0aW9ucy5jb25jYXQoZ3JvdXAub3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICBncm91cHNXaXRoT3B0aW9ucy5wdXNoKGdyb3VwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncm91cHNXaXRoT3B0aW9uc1xuICB9LCBbZ2V0RHluYW1pY09wdGlvbnMsIHF1ZXJ5U3RyaW5nLCBlZGl0b3JDb25maWc/LmZlYXR1cmVzLCBpMThuXSlcblxuICBjb25zdCBvblNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIHNlbGVjdGVkT3B0aW9uOiBTbGFzaE1lbnVPcHRpb24sXG4gICAgICBub2RlVG9SZW1vdmU6IFRleHROb2RlIHwgbnVsbCxcbiAgICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICAgIG1hdGNoaW5nU3RyaW5nOiBzdHJpbmcsXG4gICAgKSA9PiB7XG4gICAgICBlZGl0b3IudXBkYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkge1xuICAgICAgICAgIG5vZGVUb1JlbW92ZS5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkT3B0aW9uLm9uU2VsZWN0KHsgZWRpdG9yLCBxdWVyeVN0cmluZzogbWF0Y2hpbmdTdHJpbmcgfSlcbiAgICAgICAgY2xvc2VNZW51KClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZWRpdG9yXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luXG4gICAgICAgIGFuY2hvckVsZW09e2FuY2hvckVsZW19XG4gICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zPXtncm91cHN9XG4gICAgICAgIG1lbnVSZW5kZXJGbj17KFxuICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYsXG4gICAgICAgICAgeyBzZWxlY3RPcHRpb25BbmRDbGVhblVwLCBzZWxlY3RlZE9wdGlvbktleSwgc2V0U2VsZWN0ZWRPcHRpb25LZXkgfSxcbiAgICAgICAgKSA9PlxuICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCAmJiBncm91cHMubGVuZ3RoXG4gICAgICAgICAgICA/IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgIHtncm91cHMubWFwKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBUaXRsZSA9IGdyb3VwLmtleVxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBncm91cFRpdGxlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBncm91cC5kaXNwbGF5TmFtZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdyb3VwLmRpc3BsYXlOYW1lKHsgaTE4biB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdyb3VwLmRpc3BsYXlOYW1lXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZ3JvdXAgJHtiYXNlQ2xhc3N9X19ncm91cC0ke2dyb3VwLmtleX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtncm91cC5rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2dyb3VwLXRpdGxlYH0+e2dyb3VwVGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z3JvdXAub3B0aW9ucy5tYXAoKG9wdGlvbiwgb2k6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2xhc2hNZW51SXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtvaX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZE9wdGlvbktleSA9PT0gb3B0aW9uLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wdGlvbi5rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbkFuZENsZWFuVXAob3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZE9wdGlvbktleShvcHRpb24ua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uPXtvcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+LFxuICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgb25RdWVyeUNoYW5nZT17c2V0UXVlcnlTdHJpbmd9XG4gICAgICAgIG9uU2VsZWN0T3B0aW9uPXtvblNlbGVjdE9wdGlvbn1cbiAgICAgICAgdHJpZ2dlckZuPXtjaGVja0ZvclRyaWdnZXJNYXRjaH1cbiAgICAgIC8+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIlNsYXNoTWVudVBsdWdpbiIsImJhc2VDbGFzcyIsIlNsYXNoTWVudUl0ZW0iLCJpc1NlbGVjdGVkIiwib25DbGljayIsIm9uTW91c2VFbnRlciIsIm9wdGlvbiIsImkxOG4iLCJ1c2VUcmFuc2xhdGlvbiIsImNsYXNzTmFtZSIsImtleSIsInRpdGxlIiwiZGlzcGxheU5hbWUiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJidXR0b24iLCJhcmlhLXNlbGVjdGVkIiwiaWQiLCJyZWYiLCJzZXRSZWZFbGVtZW50Iiwicm9sZSIsInRhYkluZGV4IiwidHlwZSIsIkljb24iLCJzcGFuIiwiYW5jaG9yRWxlbSIsImRvY3VtZW50IiwiYm9keSIsImVkaXRvciIsInVzZUxleGljYWxDb21wb3NlckNvbnRleHQiLCJxdWVyeVN0cmluZyIsInNldFF1ZXJ5U3RyaW5nIiwidXNlU3RhdGUiLCJlZGl0b3JDb25maWciLCJ1c2VFZGl0b3JDb25maWdDb250ZXh0IiwiY2hlY2tGb3JUcmlnZ2VyTWF0Y2giLCJ1c2VNZW51VHJpZ2dlck1hdGNoIiwibWluTGVuZ3RoIiwiZ2V0RHluYW1pY09wdGlvbnMiLCJ1c2VDYWxsYmFjayIsImdyb3VwV2l0aE9wdGlvbnMiLCJkeW5hbWljT3B0aW9uIiwiZmVhdHVyZXMiLCJzbGFzaE1lbnUiLCJkeW5hbWljT3B0aW9ucyIsImR5bmFtaWNHcm91cFdpdGhPcHRpb25zIiwiY29uY2F0IiwiZ3JvdXBzIiwidXNlTWVtbyIsImdyb3Vwc1dpdGhPcHRpb25zIiwiZ3JvdXBXaXRoT3B0aW9uIiwicHVzaCIsIm1hcCIsImdyb3VwIiwiZmlsdGVyZWRPcHRpb25zIiwib3B0aW9ucyIsImZpbHRlciIsIm9wdGlvblRpdGxlIiwiUmVnRXhwIiwiZXhlYyIsImtleXdvcmRzIiwic29tZSIsImtleXdvcmQiLCJkeW5hbWljT3B0aW9uR3JvdXBzIiwiZHluYW1pY0dyb3VwIiwiZmluZCIsIm9uU2VsZWN0T3B0aW9uIiwic2VsZWN0ZWRPcHRpb24iLCJub2RlVG9SZW1vdmUiLCJjbG9zZU1lbnUiLCJtYXRjaGluZ1N0cmluZyIsInVwZGF0ZSIsInJlbW92ZSIsIm9uU2VsZWN0IiwiUmVhY3QiLCJGcmFnbWVudCIsIkxleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luIiwibWVudVJlbmRlckZuIiwiYW5jaG9yRWxlbWVudFJlZiIsInNlbGVjdE9wdGlvbkFuZENsZWFuVXAiLCJzZWxlY3RlZE9wdGlvbktleSIsInNldFNlbGVjdGVkT3B0aW9uS2V5IiwiY3VycmVudCIsIlJlYWN0RE9NIiwiY3JlYXRlUG9ydGFsIiwiZGl2IiwiZ3JvdXBUaXRsZSIsIm9pIiwiaW5kZXgiLCJvblF1ZXJ5Q2hhbmdlIiwidHJpZ2dlckZuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7K0JBa0VnQkE7OztlQUFBQTs7O3dDQS9EMEI7K0RBQ0s7a0VBRXJCOzhCQUNLO3NDQUlROzRDQUNJO1FBQ3BDO3FDQUM2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVwQyxNQUFNQyxZQUFZO0FBRWxCLFNBQVNDLGNBQWMsRUFDckJDLFVBQVUsRUFDVkMsT0FBTyxFQUNQQyxZQUFZLEVBQ1pDLE1BQU0sRUFPUDtJQUNDLE1B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
@@ -1,12 +1,12 @@
1
1
  @import 'payload/scss';
2
2
 
3
3
  html[data-theme='light'] {
4
- .slash-menu {
4
+ .slash-menu-popup {
5
5
  @include shadow-m;
6
6
  }
7
7
  }
8
8
 
9
- .slash-menu {
9
+ .slash-menu-popup {
10
10
  background: var(--color-base-0);
11
11
  width: 200px;
12
12
  color: var(--color-base-800);
@@ -18,17 +18,17 @@ html[data-theme='light'] {
18
18
  z-index: 10;
19
19
  position: absolute;
20
20
 
21
- .group {
21
+ &__group {
22
22
  padding-bottom: 8px;
23
23
  }
24
24
 
25
- .group-title {
25
+ &__group-title {
26
26
  padding-left: 10px;
27
27
  color: var(--color-base-600);
28
28
  font-size: 10px;
29
29
  }
30
30
 
31
- .item {
31
+ &__item {
32
32
  all: unset;
33
33
  padding-left: 12px;
34
34
  font-size: 13px;
@@ -42,11 +42,11 @@ html[data-theme='light'] {
42
42
  width: 100%;
43
43
  cursor: pointer;
44
44
 
45
- &.selected {
45
+ &--selected {
46
46
  background: var(--color-base-100);
47
47
  }
48
48
 
49
- .text {
49
+ &-text {
50
50
  margin-left: 6px;
51
51
  text-wrap: nowrap;
52
52
  }
@@ -0,0 +1,23 @@
1
+ import type { LexicalEditor } from 'lexical';
2
+ export type TriggerFn = ({ editor, query, }: {
3
+ editor: LexicalEditor;
4
+ /** The query string is the POTENTIAL trigger AND the text after the trigger text. */
5
+ query: string;
6
+ }) => MenuTextMatch | null;
7
+ export type MenuTextMatch = {
8
+ leadOffset: number;
9
+ matchingString: string;
10
+ replaceableString: string;
11
+ };
12
+ /**
13
+ * Returns a function which checks if the trigger (e.g. '/') is present in the query and, if so, returns the matching string (text after the trigger)
14
+ */
15
+ export declare function useMenuTriggerMatch(
16
+ /**
17
+ * Text which triggers the menu. Everything after this text will be used as the query.
18
+ */
19
+ trigger: string, { maxLength, minLength }: {
20
+ maxLength?: number;
21
+ minLength?: number;
22
+ }): TriggerFn;
23
+ //# sourceMappingURL=useMenuTriggerMatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMenuTriggerMatch.d.ts","sourceRoot":"","sources":["../../../../../src/field/lexical/plugins/SlashMenu/useMenuTriggerMatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAM5C,MAAM,MAAM,SAAS,GAAG,CAAC,EACvB,MAAM,EACN,KAAK,GACN,EAAE;IACD,MAAM,EAAE,aAAa,CAAA;IACrB,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAA;CACd,KAAK,aAAa,GAAG,IAAI,CAAA;AAE1B,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,wBAAgB,mBAAmB;AACjC;;GAEG;AACH,OAAO,EAAE,MAAM,EACf,EAAE,SAAc,EAAE,SAAa,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,SAAS,CAqCX"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "useMenuTriggerMatch", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return useMenuTriggerMatch;
9
+ }
10
+ });
11
+ const _react = require("react");
12
+ const _LexicalTypeaheadMenuPlugin = require("./LexicalTypeaheadMenuPlugin");
13
+ function useMenuTriggerMatch(/**
14
+ * Text which triggers the menu. Everything after this text will be used as the query.
15
+ */ trigger, { maxLength = 75, minLength = 1 }) {
16
+ return (0, _react.useCallback)(({ query })=>{
17
+ const validChars = '[^' + trigger + _LexicalTypeaheadMenuPlugin.PUNCTUATION + '\\s]';
18
+ const TypeaheadTriggerRegex = new RegExp('(^|\\s|\\()(' + '[' + trigger + ']' + '((?:' + validChars + '){0,' + maxLength + '})' + ')$');
19
+ const match = TypeaheadTriggerRegex.exec(query);
20
+ if (match !== null) {
21
+ const maybeLeadingWhitespace = match[1];
22
+ /**
23
+ * matchingString is only the text AFTER the trigger text. (So everything after the /)
24
+ */ const matchingString = match[3];
25
+ if (matchingString.length >= minLength) {
26
+ return {
27
+ leadOffset: match.index + maybeLeadingWhitespace.length,
28
+ matchingString,
29
+ replaceableString: match[2]
30
+ };
31
+ }
32
+ }
33
+ return null;
34
+ }, [
35
+ maxLength,
36
+ minLength,
37
+ trigger
38
+ ]);
39
+ }
40
+
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L3VzZU1lbnVUcmlnZ2VyTWF0Y2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMZXhpY2FsRWRpdG9yIH0gZnJvbSAnbGV4aWNhbCdcblxuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgUFVOQ1RVQVRJT04gfSBmcm9tICcuL0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luJ1xuXG5leHBvcnQgdHlwZSBUcmlnZ2VyRm4gPSAoe1xuICBlZGl0b3IsXG4gIHF1ZXJ5LFxufToge1xuICBlZGl0b3I6IExleGljYWxFZGl0b3JcbiAgLyoqIFRoZSBxdWVyeSBzdHJpbmcgaXMgdGhlIFBPVEVOVElBTCB0cmlnZ2VyIEFORCB0aGUgdGV4dCBhZnRlciB0aGUgdHJpZ2dlciB0ZXh0LiAqL1xuICBxdWVyeTogc3RyaW5nXG59KSA9PiBNZW51VGV4dE1hdGNoIHwgbnVsbFxuXG5leHBvcnQgdHlwZSBNZW51VGV4dE1hdGNoID0ge1xuICBsZWFkT2Zmc2V0OiBudW1iZXJcbiAgbWF0Y2hpbmdTdHJpbmc6IHN0cmluZ1xuICByZXBsYWNlYWJsZVN0cmluZzogc3RyaW5nXG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBpZiB0aGUgdHJpZ2dlciAoZS5nLiAnLycpIGlzIHByZXNlbnQgaW4gdGhlIHF1ZXJ5IGFuZCwgaWYgc28sIHJldHVybnMgdGhlIG1hdGNoaW5nIHN0cmluZyAodGV4dCBhZnRlciB0aGUgdHJpZ2dlcilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbnVUcmlnZ2VyTWF0Y2goXG4gIC8qKlxuICAgKiBUZXh0IHdoaWNoIHRyaWdnZXJzIHRoZSBtZW51LiBFdmVyeXRoaW5nIGFmdGVyIHRoaXMgdGV4dCB3aWxsIGJlIHVzZWQgYXMgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgdHJpZ2dlcjogc3RyaW5nLFxuICB7IG1heExlbmd0aCA9IDc1LCBtaW5MZW5ndGggPSAxIH06IHsgbWF4TGVuZ3RoPzogbnVtYmVyOyBtaW5MZW5ndGg/OiBudW1iZXIgfSxcbik6IFRyaWdnZXJGbiB7XG4gIHJldHVybiB1c2VDYWxsYmFjayhcbiAgICAoeyBxdWVyeSB9KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZENoYXJzID0gJ1teJyArIHRyaWdnZXIgKyBQVU5DVFVBVElPTiArICdcXFxcc10nXG4gICAgICBjb25zdCBUeXBlYWhlYWRUcmlnZ2VyUmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAnKF58XFxcXHN8XFxcXCgpKCcgK1xuICAgICAgICAgICdbJyArXG4gICAgICAgICAgdHJpZ2dlciArXG4gICAgICAgICAgJ10nICtcbiAgICAgICAgICAnKCg/OicgK1xuICAgICAgICAgIHZhbGlkQ2hhcnMgK1xuICAgICAgICAgICcpezAsJyArXG4gICAgICAgICAgbWF4TGVuZ3RoICtcbiAgICAgICAgICAnfSknICtcbiAgICAgICAgICAnKSQnLFxuICAgICAgKVxuICAgICAgY29uc3QgbWF0Y2ggPSBUeXBlYWhlYWRUcmlnZ2VyUmVnZXguZXhlYyhxdWVyeSlcbiAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtYXliZUxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hbMV1cblxuICAgICAgICAvKipcbiAgICAgICAgICogbWF0Y2hpbmdTdHJpbmcgaXMgb25seSB0aGUgdGV4dCBBRlRFUiB0aGUgdHJpZ2dlciB0ZXh0LiAoU28gZXZlcnl0aGluZyBhZnRlciB0aGUgLylcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IG1hdGNoaW5nU3RyaW5nID0gbWF0Y2hbM11cblxuICAgICAgICBpZiAobWF0Y2hpbmdTdHJpbmcubGVuZ3RoID49IG1pbkxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWFkT2Zmc2V0OiBtYXRjaC5pbmRleCArIG1heWJlTGVhZGluZ1doaXRlc3BhY2UubGVuZ3RoLFxuICAgICAgICAgICAgbWF0Y2hpbmdTdHJpbmcsXG4gICAgICAgICAgICByZXBsYWNlYWJsZVN0cmluZzogbWF0Y2hbMl0sIC8vIHJlcGxhY2VhYmxlU3RyaW5nIGlzIHRoZSB0cmlnZ2VyIHRleHQgKyB0aGUgbWF0Y2hpbmcgc3RyaW5nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG4gICAgW21heExlbmd0aCwgbWluTGVuZ3RoLCB0cmlnZ2VyXSxcbiAgKVxufVxuIl0sIm5hbWVzIjpbInVzZU1lbnVUcmlnZ2VyTWF0Y2giLCJ0cmlnZ2VyIiwibWF4TGVuZ3RoIiwibWluTGVuZ3RoIiwidXNlQ2FsbGJhY2siLCJxdWVyeSIsInZhbGlkQ2hhcnMiLCJQVU5DVFVBVElPTiIsIlR5cGVhaGVhZFRyaWdnZXJSZWdleCIsIlJlZ0V4cCIsIm1hdGNoIiwiZXhlYyIsIm1heWJlTGVhZGluZ1doaXRlc3BhY2UiLCJtYXRjaGluZ1N0cmluZyIsImxlbmd0aCIsImxlYWRPZmZzZXQiLCJpbmRleCIsInJlcGxhY2VhYmxlU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7OytCQXdCZ0JBOzs7ZUFBQUE7Ozt1QkF0Qlk7NENBRUE7QUFvQnJCLFNBQVNBLG9CQUNkOztHQUVDLEdBQ0RDLE9BQWUsRUFDZixFQUFFQyxZQUFZLEVBQUUsRUFBRUMsWUFBWSxDQUFDLEVBQThDO0lBRTdFLE9BQU9DLElBQUFBLGtCQUFXLEVBQ2hCLENBQUMsRUFBRUMsS0FBSyxFQUFFO1FBQ1IsTUFBTUMsYUFBYSxPQUFPTCxVQUFVTSx1Q0FBVyxHQUFHO1FBQ2xELE1BQU1DLHdCQUF3QixJQUFJQyxPQUNoQyxpQkFDRSxNQUNBUixVQUNBLE1BQ0EsU0FDQUssYUFDQSxTQUNBSixZQUNBLE9BQ0E7UUFFSixNQUFNUSxRQUFRRixzQkFBc0JHLElBQUksQ0FBQ047UUFDekMsSUFBSUssVUFBVSxNQUFNO1lBQ2xCLE1BQU1FLHlCQUF5QkYsS0FBSyxDQUFDLEVBQUU7WUFFdkM7O1NBRUMsR0FDRCxNQUFNRyxpQkFBaUJILEtBQUssQ0FBQyxFQUFFO1lBRS9CLElBQUlHLGVBQWVDLE1BQU0sSUFBSVgsV0FBVztnQkFDdEMsT0FBTztvQkFDTFksWUFBWUwsTUFBTU0sS0FBSyxHQUFHSix1QkFBdUJFLE1BQU07b0JBQ3ZERDtvQkFDQUksbUJBQW1CUCxLQUFLLENBQUMsRUFBRTtnQkFDN0I7WUFDRjtRQUNGO1FBQ0EsT0FBTztJQUNULEdBQ0E7UUFBQ1I7UUFBV0M7UUFBV0Y7S0FBUTtBQUVuQyJ9