@limetech/lime-elements 37.64.4 → 37.65.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 (60) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/lime-elements.cjs.js +1 -1
  3. package/dist/cjs/limel-markdown.cjs.entry.js.map +1 -1
  4. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +197 -5
  5. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js.map +1 -1
  6. package/dist/cjs/limel-text-editor.cjs.entry.js +6 -2
  7. package/dist/cjs/limel-text-editor.cjs.entry.js.map +1 -1
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/markdown-parser-ba7cc71e.js.map +1 -1
  10. package/dist/collection/components/markdown/markdown-parser.js.map +1 -1
  11. package/dist/collection/components/markdown/markdown.js +3 -3
  12. package/dist/collection/components/markdown/markdown.js.map +1 -1
  13. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory.js +142 -0
  14. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory.js.map +1 -0
  15. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/inserter.js +51 -0
  16. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/inserter.js.map +1 -0
  17. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +39 -9
  18. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js.map +1 -1
  19. package/dist/collection/components/text-editor/text-editor.js +114 -7
  20. package/dist/collection/components/text-editor/text-editor.js.map +1 -1
  21. package/dist/collection/components/text-editor/text-editor.types.js +2 -0
  22. package/dist/collection/components/text-editor/text-editor.types.js.map +1 -0
  23. package/dist/collection/components/text-editor/types.js.map +1 -1
  24. package/dist/collection/components/text-editor/utils/markdown-converter.js.map +1 -1
  25. package/dist/collection/components/text-editor/utils/plugin-factory.js.map +1 -1
  26. package/dist/collection/global/shared-types/custom-element.types.js.map +1 -1
  27. package/dist/collection/interface.js +1 -0
  28. package/dist/collection/interface.js.map +1 -1
  29. package/dist/esm/lime-elements.js +1 -1
  30. package/dist/esm/limel-markdown.entry.js.map +1 -1
  31. package/dist/esm/limel-prosemirror-adapter.entry.js +197 -5
  32. package/dist/esm/limel-prosemirror-adapter.entry.js.map +1 -1
  33. package/dist/esm/limel-text-editor.entry.js +6 -2
  34. package/dist/esm/limel-text-editor.entry.js.map +1 -1
  35. package/dist/esm/loader.js +1 -1
  36. package/dist/esm/markdown-parser-3c0af898.js.map +1 -1
  37. package/dist/lime-elements/lime-elements.esm.js +1 -1
  38. package/dist/lime-elements/lime-elements.esm.js.map +1 -1
  39. package/dist/lime-elements/p-086509a5.js.map +1 -1
  40. package/dist/lime-elements/{p-6c1c51bd.entry.js → p-8d388c5c.entry.js} +2 -2
  41. package/dist/lime-elements/p-8d388c5c.entry.js.map +1 -0
  42. package/dist/lime-elements/p-da20ff72.entry.js.map +1 -1
  43. package/dist/lime-elements/{p-2ab02bd9.entry.js → p-daecb14f.entry.js} +2 -2
  44. package/dist/lime-elements/p-daecb14f.entry.js.map +1 -0
  45. package/dist/types/components/markdown/markdown-parser.d.ts +2 -2
  46. package/dist/types/components/markdown/markdown.d.ts +2 -2
  47. package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory.d.ts +4 -0
  48. package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/inserter.d.ts +4 -0
  49. package/dist/types/components/text-editor/prosemirror-adapter/prosemirror-adapter.d.ts +10 -2
  50. package/dist/types/components/text-editor/text-editor.d.ts +41 -3
  51. package/dist/types/components/text-editor/text-editor.types.d.ts +47 -0
  52. package/dist/types/components/text-editor/types.d.ts +2 -2
  53. package/dist/types/components/text-editor/utils/markdown-converter.d.ts +2 -2
  54. package/dist/types/components/text-editor/utils/plugin-factory.d.ts +2 -2
  55. package/dist/types/components.d.ts +64 -16
  56. package/dist/types/global/shared-types/custom-element.types.d.ts +15 -2
  57. package/dist/types/interface.d.ts +1 -0
  58. package/package.json +1 -1
  59. package/dist/lime-elements/p-2ab02bd9.entry.js.map +0 -1
  60. package/dist/lime-elements/p-6c1c51bd.entry.js.map +0 -1
@@ -26128,6 +26128,196 @@ const createNodeSpec = (config) => {
26128
26128
  };
26129
26129
  };
26130
26130
 
26131
+ const inserterFactory = (view) => {
26132
+ const startPos = getTriggerStartPosition(view);
26133
+ return {
26134
+ insert: (input) => {
26135
+ const { state, dispatch } = view;
26136
+ const { schema, selection } = state;
26137
+ const { $from } = selection;
26138
+ let node;
26139
+ try {
26140
+ node = createNode(input, schema);
26141
+ }
26142
+ catch (error) {
26143
+ // eslint-disable-next-line no-console
26144
+ console.error(error.message);
26145
+ return;
26146
+ }
26147
+ const spaceNode = schema.text(' ');
26148
+ const fragment = schema.nodes.doc.create(null, [node, spaceNode]);
26149
+ const transaction = state.tr.replaceWith(startPos, $from.pos, fragment);
26150
+ transaction.setMeta('stopTrigger', true);
26151
+ dispatch(transaction);
26152
+ },
26153
+ };
26154
+ };
26155
+ const createNode = (input, schema) => {
26156
+ var _a;
26157
+ if (typeof input === 'string') {
26158
+ return schema.text(input);
26159
+ }
26160
+ const node = input.node;
26161
+ if (typeof node === 'string') {
26162
+ return schema.text(node);
26163
+ }
26164
+ const customNode = getCustomNode(node.tagName, schema);
26165
+ const childNodes = ((_a = input.children) !== null && _a !== void 0 ? _a : [])
26166
+ .map((child) => createNode(child, schema))
26167
+ .filter(Boolean);
26168
+ return customNode.create(node.attributes, childNodes);
26169
+ };
26170
+ const getCustomNode = (name, schema) => {
26171
+ const customNode = Object.values(schema.nodes).find((prosemirrorNode) => prosemirrorNode.name === name);
26172
+ if (!customNode) {
26173
+ throw new Error(`A custom element hasn't been registered for node ${name}`);
26174
+ }
26175
+ return customNode;
26176
+ };
26177
+ const getTriggerStartPosition = (view) => {
26178
+ var _a, _b, _c;
26179
+ return (_c = (_b = (_a = view.state) === null || _a === void 0 ? void 0 : _a.selection) === null || _b === void 0 ? void 0 : _b.$from) === null || _c === void 0 ? void 0 : _c.pos;
26180
+ };
26181
+
26182
+ const isTrigger = (key, validTriggers) => {
26183
+ return key.length === 1 && validTriggers.includes(key);
26184
+ };
26185
+ const shouldTrigger = (state) => {
26186
+ const { $from } = state.selection;
26187
+ if ($from.pos === 1) {
26188
+ return true;
26189
+ }
26190
+ // Getting the position immediately before the current selection
26191
+ const prevPos = $from.pos - 1;
26192
+ if (prevPos > 0) {
26193
+ // allow trigger if the cursor is at the start of a new paragraph
26194
+ if ($from.parentOffset === 0) {
26195
+ return true;
26196
+ }
26197
+ const prevChar = state.doc.textBetween(prevPos, $from.pos);
26198
+ return prevChar === ' ' || prevChar === '\n';
26199
+ }
26200
+ return false;
26201
+ };
26202
+ const stillHasTrigger = (state, activeTrigger, triggerPosition, triggerLength) => {
26203
+ const cursorPosition = state.selection.$from.pos;
26204
+ if (cursorPosition < triggerPosition ||
26205
+ cursorPosition > triggerPosition + triggerLength + 1) {
26206
+ return false;
26207
+ }
26208
+ return (state.doc.textBetween(triggerPosition, triggerPosition + 1) ===
26209
+ activeTrigger);
26210
+ };
26211
+ const getTriggerEventDetail = (view, trigger, value) => {
26212
+ return {
26213
+ trigger: trigger,
26214
+ textEditor: inserterFactory(view),
26215
+ value: value,
26216
+ };
26217
+ };
26218
+ const sendTriggerEvent = (type, view, trigger, value) => {
26219
+ const event = new CustomEvent(type, {
26220
+ detail: getTriggerEventDetail(view, trigger, value),
26221
+ bubbles: true,
26222
+ composed: true,
26223
+ });
26224
+ view.dom.dispatchEvent(event);
26225
+ };
26226
+ const processTransactions = (text, transactions, oldState) => {
26227
+ let textAdded = '';
26228
+ let textRemoved = '';
26229
+ transactions.forEach((transaction) => {
26230
+ if (transaction.docChanged) {
26231
+ transaction.steps.forEach((step) => {
26232
+ if (step instanceof ReplaceStep ||
26233
+ step instanceof ReplaceAroundStep) {
26234
+ const slice = step.slice;
26235
+ const fromPos = step.from;
26236
+ const toPos = step.to;
26237
+ if (slice === null || slice === void 0 ? void 0 : slice.size) {
26238
+ // Text added
26239
+ textAdded += slice.content.textBetween(0, slice.size);
26240
+ }
26241
+ else if (fromPos !== toPos) {
26242
+ // Text removed
26243
+ const removedText = oldState.doc.textBetween(fromPos, toPos);
26244
+ textRemoved += removedText;
26245
+ }
26246
+ }
26247
+ });
26248
+ }
26249
+ });
26250
+ if (textAdded) {
26251
+ text += textAdded;
26252
+ }
26253
+ else if (textRemoved) {
26254
+ text = text.slice(0, -textRemoved.length);
26255
+ }
26256
+ return text;
26257
+ };
26258
+ const createTriggerPlugin = (triggerCharacters) => {
26259
+ let activeTrigger = null;
26260
+ let triggerText = '';
26261
+ let pluginView = null;
26262
+ let triggerPosition = null;
26263
+ const stopTrigger = () => {
26264
+ triggerText = '';
26265
+ sendTriggerEvent('triggerStop', pluginView, activeTrigger, triggerText);
26266
+ triggerPosition = null;
26267
+ activeTrigger = null;
26268
+ };
26269
+ const handleKeyDown = (view, event) => {
26270
+ const { state } = view;
26271
+ if (event.key === 'Escape') {
26272
+ stopTrigger();
26273
+ return true;
26274
+ }
26275
+ if (isTrigger(event.key, triggerCharacters) && shouldTrigger(state)) {
26276
+ activeTrigger = event.key;
26277
+ triggerText = '';
26278
+ triggerPosition = state.selection.$from.pos - triggerText.length;
26279
+ sendTriggerEvent('triggerStart', view, activeTrigger, triggerText);
26280
+ return false;
26281
+ }
26282
+ return false;
26283
+ };
26284
+ const appendTransactions = (transactions, oldState, newState) => {
26285
+ if (!activeTrigger || !triggerPosition || !pluginView) {
26286
+ return;
26287
+ }
26288
+ if (!stillHasTrigger(newState, activeTrigger, triggerPosition, triggerText.length)) {
26289
+ return;
26290
+ }
26291
+ const updatedText = processTransactions(triggerText, transactions, oldState);
26292
+ if (updatedText !== triggerText) {
26293
+ triggerText = updatedText;
26294
+ sendTriggerEvent('triggerChange', pluginView, activeTrigger, triggerText.slice(1));
26295
+ }
26296
+ };
26297
+ return new Plugin({
26298
+ key: new PluginKey('triggerPlugin'),
26299
+ view: (view) => {
26300
+ pluginView = view;
26301
+ return {};
26302
+ },
26303
+ state: {
26304
+ init: () => {
26305
+ return {};
26306
+ },
26307
+ apply: (transaction) => {
26308
+ if (transaction.getMeta('stopTrigger')) {
26309
+ stopTrigger();
26310
+ }
26311
+ return {};
26312
+ },
26313
+ },
26314
+ props: {
26315
+ handleKeyDown: handleKeyDown,
26316
+ },
26317
+ appendTransaction: appendTransactions,
26318
+ });
26319
+ };
26320
+
26131
26321
  const prosemirrorAdapterCss = "@charset \"UTF-8\";:host{--mdc-theme-primary:var(\n --lime-primary-color,\n rgb(var(--color-teal-default))\n );--mdc-theme-secondary:var(\n --lime-secondary-color,\n rgb(var(--contrast-1100))\n );--mdc-theme-on-primary:var(\n --lime-on-primary-color,\n rgb(var(--contrast-100))\n );--mdc-theme-on-secondary:var(\n --lime-on-secondary-color,\n rgb(var(--contrast-100))\n );--mdc-theme-text-disabled-on-background:var(\n --lime-text-disabled-on-background-color,\n rgba(var(--contrast-1700), 0.38)\n );--mdc-theme-text-primary-on-background:var(\n --lime-text-primary-on-background-color,\n rgba(var(--contrast-1700), 0.87)\n );--mdc-theme-text-secondary-on-background:var(\n --lime-text-secondary-on-background-color,\n rgba(var(--contrast-1700), 0.54)\n );--mdc-theme-error:var(\n --lime-error-background-color,\n rgb(var(--color-red-dark))\n );--lime-error-text-color:rgb(var(--color-red-darker));--mdc-theme-surface:var(\n --lime-surface-background-color,\n rgb(var(--contrast-100))\n );--mdc-theme-on-surface:var(\n --lime-on-surface-color,\n rgb(var(--contrast-1500))\n )}:host(limel-prosemirror-adapter){display:flex;flex-direction:column}:host(limel-prosemirror-adapter) .toolbar{order:1}:host(limel-prosemirror-adapter) div#editor{order:2;height:100%;flex-grow:1}:host(limel-prosemirror-adapter) div[contenteditable=true]{height:100%}*{box-sizing:border-box}:host(limel-prosemirror-adapter:hover) .toolbar,:host(limel-prosemirror-adapter:focus-within) .toolbar{will-change:grid-template-rows}:host(limel-prosemirror-adapter:hover) limel-action-bar,:host(limel-prosemirror-adapter:focus-within) limel-action-bar{will-change:opacity, padding}:host(limel-prosemirror-adapter:hover) .ProseMirror,:host(limel-prosemirror-adapter:focus-within) .ProseMirror{will-change:padding}.ProseMirror-menubar-wrapper{display:grid;grid-template-rows:auto 1fr}.ProseMirror-textblock-dropdown{min-width:3em}.ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.toolbar{--action-bar-border-radius:0.25rem;border-radius:var(--action-bar-border-radius);flex-shrink:0;position:sticky;z-index:1;top:0;width:100%;display:grid;grid-template-rows:var(--limel-prosemirror-adapter-toolbar-grid-template-rows);transition-property:grid-template-rows;transition-duration:var(--limel-prosemirror-adapter-toolbar-grid-template-rows-transition-duration);transition-timing-function:var(--limel-prosemirror-adapter-toolbar-transition-timing-function);background-color:rgba(var(--contrast-200), 0.5);backdrop-filter:blur(0.5rem);-webkit-backdrop-filter:blur(0.5rem)}limel-action-bar{min-width:0;transition-property:padding, opacity;transition-duration:var(--limel-prosemirror-adapter-toolbar-grid-template-rows-transition-duration);transition-timing-function:var(--limel-prosemirror-adapter-toolbar-transition-timing-function);opacity:var(--limel-prosemirror-adapter-toolbar-opacity);padding:var(--limel-prosemirror-adapter-action-bar-padding-top-bottom, 0.125rem) 0.25rem;background-color:transparent;overflow:hidden}.ProseMirror{transition-duration:padding;transition-duration:var(--limel-prosemirror-adapter-toolbar-grid-template-rows-transition-duration);transition-timing-function:var(--limel-prosemirror-adapter-toolbar-transition-timing-function);position:relative;word-wrap:break-word;white-space:pre-wrap;white-space:break-spaces;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;font-feature-settings:\"liga\" 0;padding:var(--limel-text-editor-padding)}.ProseMirror [draggable][contenteditable=false]{user-select:text}.ProseMirror:focus-visible{outline:none}.ProseMirror-hideselection{caret-color:transparent}.ProseMirror-hideselection *::selection{background:transparent}.ProseMirror-hideselection *::-moz-selection{background:transparent}.ProseMirror-selectednode{outline:0.125rem solid rgb(var(--color-sky-light))}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:\"\";position:absolute;left:-2rem;right:-0.125rem;top:-0.125rem;bottom:-0.125rem;border:0.125rem solid rgb(var(--color-sky-light));pointer-events:none}img.ProseMirror-separator{display:inline !important;border:none !important;margin:0 !important}limel-portal{width:25rem}blockquote{position:relative;font-weight:100;font-size:0.875rem;max-width:100%;line-height:1.4;margin:0;padding:0.5rem 1.25rem;border-radius:0.05rem 0.75rem;background-color:rgb(var(--contrast-300))}blockquote:before,blockquote:after{position:absolute;font-size:2.75rem;opacity:0.4}blockquote:before{content:\"“\";left:0;top:-0.75rem}blockquote:after{content:\"”\";right:0;bottom:-2rem}:host(limel-markdown.truncate-paragraphs) p{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}p,li{font-size:0.875rem;word-break:break-word;hyphens:auto;-webkit-hyphens:auto}a{word-break:break-all}p{margin-top:0;margin-bottom:0.5rem}p:only-child{margin-bottom:0}a{transition:color 0.2s ease;color:var(--markdown-hyperlink-color, rgb(var(--color-blue-dark)));text-decoration:none}a:hover{color:var(--markdown-hyperlink-color--hovered, rgb(var(--color-blue-default)))}hr{margin:1.75rem 0 2rem 0;border-width:0;border-top:1px solid rgb(var(--contrast-500))}dl{display:grid;grid-template-columns:1fr 2fr;grid-template-rows:1fr;margin-bottom:2rem;border:1px solid rgb(var(--contrast-400));border-radius:0.375rem;background-color:rgb(var(--contrast-200))}dl dt,dl dd{padding:0.375rem 0.5rem;font-size:0.875rem;margin:0}dl dt:nth-of-type(even),dl dd:nth-of-type(even){background-color:rgb(var(--contrast-300))}dl dt:first-child{border-top-left-radius:0.375rem}dl dt:last-child{border-bottom-left-radius:0.375rem}dl dd:first-child{border-top-right-radius:0.375rem}dl dd:last-child{border-bottom-right-radius:0.375rem}h1{font-size:1.5rem}h2{font-size:1.25rem}h3{font-size:1.125rem}h4{font-size:1rem}h5{font-size:0.875rem}h6{font-size:0.75rem}h1,h2{margin-top:0.5rem;margin-bottom:0.5rem;letter-spacing:-0.03125rem;font-weight:500}h3,h4{margin-top:0.75rem;margin-bottom:0.25rem;font-weight:600}h5,h6{margin-top:0.5rem;margin-bottom:0.125rem;font-weight:600}h1,h2,h3,h4,h5,h6{word-break:break-word;hyphens:auto;-webkit-hyphens:auto}:not([contenteditable=true]) h1,:not([contenteditable=true]) h2,:not([contenteditable=true]) h3,:not([contenteditable=true]) h4,:not([contenteditable=true]) h5,:not([contenteditable=true]) h6{text-wrap:balance}[contenteditable=true] h1,[contenteditable=true] h2,[contenteditable=true] h3,[contenteditable=true] h4,[contenteditable=true] h5,[contenteditable=true] h6{text-wrap:initial}ul{list-style:none}ul li{position:relative;margin-left:0.75rem}ul li:before{content:\"\";position:absolute;left:-0.5rem;top:0.5rem;width:0.25rem;height:0.25rem;border-radius:50%;background-color:rgb(var(--contrast-700));display:block}ol{margin-top:0.25rem;padding-left:1rem}ul{margin-top:0.25rem;padding-left:0}ul ul,ul ol,ol ol,ol ul{margin-left:0}li{margin-bottom:0.25rem}code{font-family:ui-monospace, \"Cascadia Code\", \"Source Code Pro\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace;font-size:0.8125rem;letter-spacing:-0.0125rem;color:rgb(var(--contrast-1300));-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;display:inline-block;border-radius:0.25rem;padding:0.03125rem 0.25rem;background-color:rgb(var(--contrast-600))}pre>code{display:block;margin:0.5rem 0;padding:0.5rem 0.75rem;overflow:auto;white-space:pre-wrap}:host(limel-markdown:not(.no-table-styles)) table{table-layout:auto;min-width:100%;border-collapse:collapse;border-spacing:0;background:transparent;margin:0.75rem 0;border:1px solid rgb(var(--contrast-400))}:host(limel-markdown:not(.no-table-styles)) th,:host(limel-markdown:not(.no-table-styles)) td{text-align:left;vertical-align:top;transition:background-color 0.2s ease;font-size:0.875rem}:host(limel-markdown:not(.no-table-styles)) td{padding:0.5rem 0.375rem 0.75rem 0.375rem}:host(limel-markdown:not(.no-table-styles)) tr th{background-color:rgb(var(--contrast-400));padding:0.25rem 0.375rem;font-weight:normal}:host(limel-markdown:not(.no-table-styles)) tr th:only-child{text-align:center}:host(limel-markdown:not(.no-table-styles)) tbody tr:nth-child(odd) td{background-color:rgb(var(--contrast-200))}:host(limel-markdown:not(.no-table-styles)) tbody tr:hover td{background-color:rgb(var(--contrast-300))}";
26132
26322
 
26133
26323
  const DEBOUNCE_TIMEOUT = 300;
@@ -26229,7 +26419,8 @@ const ProsemirrorAdapter = class {
26229
26419
  this.contentType = 'markdown';
26230
26420
  this.value = undefined;
26231
26421
  this.language = undefined;
26232
- this.plugins = [];
26422
+ this.customElements = [];
26423
+ this.triggerCharacters = [];
26233
26424
  this.view = undefined;
26234
26425
  this.actionBarItems = [];
26235
26426
  this.link = { href: '' };
@@ -26291,7 +26482,7 @@ const ProsemirrorAdapter = class {
26291
26482
  }
26292
26483
  setupContentConverter() {
26293
26484
  if (this.contentType === 'markdown') {
26294
- this.contentConverter = new MarkdownConverter(this.plugins);
26485
+ this.contentConverter = new MarkdownConverter(this.customElements);
26295
26486
  }
26296
26487
  else if (this.contentType === 'html') {
26297
26488
  this.contentConverter = new HTMLConverter();
@@ -26315,9 +26506,9 @@ const ProsemirrorAdapter = class {
26315
26506
  }
26316
26507
  initializeSchema() {
26317
26508
  let nodes = schema$1.spec.nodes;
26318
- this.plugins.forEach((plugin) => {
26319
- const newNodeSpec = createNodeSpec(plugin);
26320
- const nodeName = plugin.tagName;
26509
+ this.customElements.forEach((customElement) => {
26510
+ const newNodeSpec = createNodeSpec(customElement);
26511
+ const nodeName = customElement.tagName;
26321
26512
  nodes = nodes.append({ [nodeName]: newNodeSpec });
26322
26513
  });
26323
26514
  nodes = addListNodes(nodes, 'paragraph block*', 'block');
@@ -26346,6 +26537,7 @@ const ProsemirrorAdapter = class {
26346
26537
  ...exampleSetup({ schema: this.schema, menuBar: false }),
26347
26538
  keymap(this.menuCommandFactory.buildKeymap()),
26348
26539
  createLinkPlugin(this.handleNewLinkSelection),
26540
+ createTriggerPlugin(this.triggerCharacters),
26349
26541
  createImageRemoverPlugin(),
26350
26542
  createMenuStateTrackingPlugin(editorMenuTypesArray, this.menuCommandFactory, this.updateActiveActionBarItems),
26351
26543
  createActionBarInteractionPlugin(this.menuCommandFactory),