@limetech/lime-elements 37.76.0 → 37.76.2

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 (57) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/lime-elements.cjs.js +1 -1
  3. package/dist/cjs/limel-breadcrumbs_7.cjs.entry.js +1 -1
  4. package/dist/cjs/limel-breadcrumbs_7.cjs.entry.js.map +1 -1
  5. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +93 -116
  6. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js.map +1 -1
  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/collection/components/spinner/spinner.js +2 -2
  10. package/dist/collection/components/spinner/spinner.js.map +1 -1
  11. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/append-transaction-handler.js +18 -0
  12. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/append-transaction-handler.js.map +1 -0
  13. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/detect-trigger-removal.js +26 -0
  14. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/detect-trigger-removal.js.map +1 -0
  15. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/get-trigger-event-detail.js +10 -0
  16. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/get-trigger-event-detail.js.map +1 -0
  17. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/monitor-triggered-text.js +11 -0
  18. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/monitor-triggered-text.js.map +1 -0
  19. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/send-trigger-event.js +10 -0
  20. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/send-trigger-event.js.map +1 -0
  21. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/text-input-handler.js +20 -0
  22. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/text-input-handler.js.map +1 -0
  23. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory.js +18 -123
  24. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory.js.map +1 -1
  25. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/inserter.js +6 -11
  26. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/inserter.js.map +1 -1
  27. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +2 -1
  28. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js.map +1 -1
  29. package/dist/collection/components/text-editor/text-editor.js +1 -1
  30. package/dist/collection/components/text-editor/text-editor.js.map +1 -1
  31. package/dist/collection/components/text-editor/text-editor.types.js.map +1 -1
  32. package/dist/esm/lime-elements.js +1 -1
  33. package/dist/esm/limel-breadcrumbs_7.entry.js +1 -1
  34. package/dist/esm/limel-breadcrumbs_7.entry.js.map +1 -1
  35. package/dist/esm/limel-prosemirror-adapter.entry.js +93 -116
  36. package/dist/esm/limel-prosemirror-adapter.entry.js.map +1 -1
  37. package/dist/esm/limel-text-editor.entry.js.map +1 -1
  38. package/dist/esm/loader.js +1 -1
  39. package/dist/lime-elements/lime-elements.esm.js +1 -1
  40. package/dist/lime-elements/lime-elements.esm.js.map +1 -1
  41. package/dist/lime-elements/{p-f9599a0c.entry.js → p-0a7788af.entry.js} +2 -2
  42. package/dist/lime-elements/{p-f9599a0c.entry.js.map → p-0a7788af.entry.js.map} +1 -1
  43. package/dist/lime-elements/{p-9addc6b3.entry.js → p-5ace2e19.entry.js} +2 -2
  44. package/dist/lime-elements/p-5ace2e19.entry.js.map +1 -0
  45. package/dist/lime-elements/p-9fae6488.entry.js.map +1 -1
  46. package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/append-transaction-handler.d.ts +6 -0
  47. package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/detect-trigger-removal.d.ts +6 -0
  48. package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/get-trigger-event-detail.d.ts +5 -0
  49. package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/monitor-triggered-text.d.ts +5 -0
  50. package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/send-trigger-event.d.ts +5 -0
  51. package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/text-input-handler.d.ts +5 -0
  52. package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/inserter.d.ts +2 -2
  53. package/dist/types/components/text-editor/text-editor.d.ts +1 -1
  54. package/dist/types/components/text-editor/text-editor.types.d.ts +11 -0
  55. package/dist/types/components.d.ts +4 -4
  56. package/package.json +6 -6
  57. package/dist/lime-elements/p-9addc6b3.entry.js.map +0 -1
@@ -26131,15 +26131,14 @@ const createHtmlInserter = (view, contentConverter, startPos, dispatchTransactio
26131
26131
  };
26132
26132
  };
26133
26133
 
26134
- const inserterFactory = (view, contentConverter) => {
26135
- const startPos = getTriggerStartPosition(view);
26134
+ const inserterFactory = (view, contentConverter, trigger) => {
26136
26135
  return {
26137
- insert: createNodeAndTextInserter(view, startPos),
26138
- insertHtml: createHtmlInserter(view, contentConverter, startPos, dispatchTransaction),
26136
+ insert: createNodeAndTextInserter(view, trigger),
26137
+ insertHtml: createHtmlInserter(view, contentConverter, trigger.position, dispatchTransaction),
26139
26138
  stopTrigger: () => stopTriggerTransaction(view),
26140
26139
  };
26141
26140
  };
26142
- const createNodeAndTextInserter = (view, startPos) => (input) => {
26141
+ const createNodeAndTextInserter = (view, trigger) => (input) => {
26143
26142
  const schema = view.state.schema;
26144
26143
  let node;
26145
26144
  try {
@@ -26152,7 +26151,7 @@ const createNodeAndTextInserter = (view, startPos) => (input) => {
26152
26151
  }
26153
26152
  const spaceNode = schema.text(' ');
26154
26153
  const fragment = schema.nodes.doc.create(null, [node, spaceNode]);
26155
- dispatchTransaction(view, startPos, fragment);
26154
+ dispatchTransaction(view, trigger.position, fragment);
26156
26155
  };
26157
26156
  const stopTriggerTransaction = (view) => {
26158
26157
  const { state, dispatch } = view;
@@ -26162,8 +26161,8 @@ const stopTriggerTransaction = (view) => {
26162
26161
  };
26163
26162
  const dispatchTransaction = (view, startPos, fragment) => {
26164
26163
  const state = view.state;
26165
- const dispatch = view.dispatch;
26166
26164
  const fromPos = state.selection.$from.pos;
26165
+ const dispatch = view.dispatch;
26167
26166
  const transaction = state.tr.replaceWith(startPos, fromPos, fragment);
26168
26167
  transaction.setMeta('stopTrigger', true);
26169
26168
  dispatch(transaction);
@@ -26190,47 +26189,16 @@ const getCustomNode = (name, schema) => {
26190
26189
  }
26191
26190
  return customNode;
26192
26191
  };
26193
- const getTriggerStartPosition = (view) => {
26194
- var _a, _b, _c;
26195
- 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;
26196
- };
26197
26192
 
26198
- const isTrigger = (key, validTriggers) => {
26199
- return key.length === 1 && validTriggers.includes(key);
26200
- };
26201
- const shouldTrigger = (state) => {
26202
- const { $from } = state.selection;
26203
- if ($from.pos === 1) {
26204
- return true;
26205
- }
26206
- // Getting the position immediately before the current selection
26207
- const prevPos = $from.pos - 1;
26208
- if (prevPos > 0) {
26209
- // allow trigger if the cursor is at the start of a new paragraph
26210
- if ($from.parentOffset === 0) {
26211
- return true;
26212
- }
26213
- const prevChar = state.doc.textBetween(prevPos, $from.pos);
26214
- return prevChar === ' ' || prevChar === '\n';
26215
- }
26216
- return false;
26217
- };
26218
- const stillHasTrigger = (state, activeTrigger, triggerPosition, triggerLength) => {
26219
- const cursorPosition = state.selection.$from.pos;
26220
- if (cursorPosition < triggerPosition ||
26221
- cursorPosition > triggerPosition + triggerLength + 1) {
26222
- return false;
26223
- }
26224
- return (state.doc.textBetween(triggerPosition, triggerPosition + 1) ===
26225
- activeTrigger);
26226
- };
26227
26193
  const getTriggerEventDetail = (view, contentConverter, trigger, value) => {
26228
- return {
26229
- trigger: trigger,
26230
- textEditor: inserterFactory(view, contentConverter),
26194
+ const returnValue = {
26195
+ trigger: trigger.character,
26196
+ textEditor: inserterFactory(view, contentConverter, trigger),
26231
26197
  value: value,
26232
26198
  };
26199
+ return returnValue;
26233
26200
  };
26201
+
26234
26202
  const sendTriggerEvent = (type, view, contentConverter, trigger, value) => {
26235
26203
  const event = new CustomEvent(type, {
26236
26204
  detail: getTriggerEventDetail(view, contentConverter, trigger, value),
@@ -26239,83 +26207,93 @@ const sendTriggerEvent = (type, view, contentConverter, trigger, value) => {
26239
26207
  });
26240
26208
  view.dom.dispatchEvent(event);
26241
26209
  };
26242
- const processTransactions = (text, transactions, oldState) => {
26243
- let textAdded = '';
26244
- let textRemoved = '';
26245
- transactions.forEach((transaction) => {
26246
- if (transaction.docChanged) {
26247
- transaction.steps.forEach((step) => {
26248
- if (step instanceof ReplaceStep ||
26249
- step instanceof ReplaceAroundStep) {
26250
- const slice = step.slice;
26251
- const fromPos = step.from;
26252
- const toPos = step.to;
26253
- if (slice === null || slice === void 0 ? void 0 : slice.size) {
26254
- // Text added
26255
- textAdded += slice.content.textBetween(0, slice.size);
26256
- }
26257
- else if (fromPos !== toPos) {
26258
- // Text removed
26259
- const removedText = oldState.doc.textBetween(fromPos, toPos);
26260
- textRemoved += removedText;
26261
- }
26210
+
26211
+ const getTextInputHandler = (contentConverter, triggerCharacters, updateActiveTrigger) => {
26212
+ return (view, _from, _to, text) => {
26213
+ if (!triggerCharacters.includes(text)) {
26214
+ return false;
26215
+ }
26216
+ const doc = view.state.doc;
26217
+ const precedingText = doc.textBetween(_from - 1, _from, '');
26218
+ if (/\s/.test(precedingText) || precedingText === '') {
26219
+ const trigger = {
26220
+ character: text,
26221
+ position: _from,
26222
+ };
26223
+ updateActiveTrigger(trigger);
26224
+ sendTriggerEvent('triggerStart', view, contentConverter, trigger, text);
26225
+ }
26226
+ return false;
26227
+ };
26228
+ };
26229
+
26230
+ const detectTriggerRemoval = (transaction, activeTrigger, resetActiveTrigger, contentConverter, view) => {
26231
+ if (!activeTrigger || activeTrigger.position < 1) {
26232
+ return false;
26233
+ }
26234
+ for (const step of transaction.steps) {
26235
+ if (step instanceof ReplaceStep) {
26236
+ const { from, to, slice } = step; // Access properties specific to ReplaceStep
26237
+ // Check if the step affects the trigger position
26238
+ if (from <= activeTrigger.position &&
26239
+ to >= activeTrigger.position) {
26240
+ const text = slice.content.textBetween(0, slice.content.size, '');
26241
+ // Check if the trigger character has been removed
26242
+ // `text` is the text after the step has been applied
26243
+ if (!text.includes(activeTrigger.character)) {
26244
+ resetActiveTrigger();
26245
+ sendTriggerEvent('triggerStop', view, contentConverter, activeTrigger, '');
26246
+ return true;
26262
26247
  }
26263
- });
26248
+ }
26264
26249
  }
26265
- });
26266
- if (textAdded) {
26267
- text += textAdded;
26268
26250
  }
26269
- else if (textRemoved) {
26270
- text = text.slice(0, -textRemoved.length);
26251
+ return false;
26252
+ };
26253
+
26254
+ const monitorTriggeredText = (doc, activeTrigger, cursorPosition, contentConverter, view) => {
26255
+ let newValue = '';
26256
+ if (cursorPosition > activeTrigger.position) {
26257
+ // Start extracting text after the trigger character
26258
+ newValue = doc.textBetween(activeTrigger.position + 1, cursorPosition, '');
26271
26259
  }
26272
- return text;
26260
+ sendTriggerEvent('triggerChange', view, contentConverter, activeTrigger, newValue);
26261
+ return newValue;
26262
+ };
26263
+
26264
+ const getAppendTransactionHandler = (getCurrentView, getActiveTrigger, resetActiveTrigger, contentConverter) => {
26265
+ return (transactions, _oldState, newState) => {
26266
+ const activeTrigger = getActiveTrigger();
26267
+ if (!activeTrigger) {
26268
+ return;
26269
+ }
26270
+ const triggerRemoved = detectTriggerRemoval(transactions[0], // Pass the first transaction
26271
+ activeTrigger, resetActiveTrigger, contentConverter, getCurrentView());
26272
+ if (triggerRemoved) {
26273
+ resetActiveTrigger();
26274
+ return;
26275
+ }
26276
+ monitorTriggeredText(newState.doc, activeTrigger, newState.selection.from, contentConverter, getCurrentView());
26277
+ };
26273
26278
  };
26279
+
26274
26280
  const createTriggerPlugin = (triggerCharacters, contentConverter) => {
26275
- let activeTrigger = null;
26276
- let triggerText = '';
26277
26281
  let pluginView = null;
26278
- let triggerPosition = null;
26279
- const stopTrigger = () => {
26280
- triggerText = '';
26281
- sendTriggerEvent('triggerStop', pluginView, contentConverter, activeTrigger, triggerText);
26282
- triggerPosition = null;
26283
- activeTrigger = null;
26282
+ let activeTrigger = null;
26283
+ const getCurrentView = () => {
26284
+ return pluginView;
26284
26285
  };
26285
- const handleKeyDown = (_, event) => {
26286
- if (event.key === 'Escape') {
26287
- stopTrigger();
26288
- return true;
26289
- }
26290
- return false;
26286
+ const getActiveTrigger = () => {
26287
+ return activeTrigger;
26291
26288
  };
26292
- const handleInput = (view, event) => {
26293
- const { state } = view;
26294
- if (event.inputType === 'insertText' &&
26295
- isTrigger(event.data, triggerCharacters) &&
26296
- shouldTrigger(state)) {
26297
- activeTrigger = event.data;
26298
- triggerText = '';
26299
- triggerPosition = state.selection.$from.pos - triggerText.length;
26300
- sendTriggerEvent('triggerStart', view, contentConverter, activeTrigger, triggerText);
26301
- return false;
26302
- }
26303
- return false;
26289
+ const resetActiveTrigger = () => {
26290
+ activeTrigger = null;
26304
26291
  };
26305
- const appendTransactions = (transactions, oldState, newState) => {
26306
- if (!activeTrigger || !triggerPosition || !pluginView) {
26307
- return;
26308
- }
26309
- if (!stillHasTrigger(newState, activeTrigger, triggerPosition, triggerText.length)) {
26310
- stopTrigger();
26311
- return;
26312
- }
26313
- const updatedText = processTransactions(triggerText, transactions, oldState);
26314
- if (updatedText !== triggerText) {
26315
- triggerText = updatedText;
26316
- sendTriggerEvent('triggerChange', pluginView, contentConverter, activeTrigger, triggerText.slice(1));
26317
- }
26292
+ const updateActiveTrigger = (trigger) => {
26293
+ activeTrigger = trigger;
26318
26294
  };
26295
+ const textInputHandler = getTextInputHandler(contentConverter, triggerCharacters, updateActiveTrigger);
26296
+ const appendTransactionHandler = getAppendTransactionHandler(getCurrentView, getActiveTrigger, resetActiveTrigger, contentConverter);
26319
26297
  return new Plugin({
26320
26298
  key: new PluginKey('triggerPlugin'),
26321
26299
  view: (view) => {
@@ -26328,18 +26306,16 @@ const createTriggerPlugin = (triggerCharacters, contentConverter) => {
26328
26306
  },
26329
26307
  apply: (transaction) => {
26330
26308
  if (transaction.getMeta('stopTrigger')) {
26331
- stopTrigger();
26309
+ sendTriggerEvent('triggerStop', pluginView, contentConverter, activeTrigger, '');
26310
+ resetActiveTrigger();
26332
26311
  }
26333
26312
  return {};
26334
26313
  },
26335
26314
  },
26336
26315
  props: {
26337
- handleKeyDown: handleKeyDown,
26338
- handleDOMEvents: {
26339
- input: handleInput,
26340
- },
26316
+ handleTextInput: textInputHandler,
26341
26317
  },
26342
- appendTransaction: appendTransactions,
26318
+ appendTransaction: appendTransactionHandler,
26343
26319
  });
26344
26320
  };
26345
26321
 
@@ -28025,8 +28001,8 @@ const ProsemirrorAdapter = class {
28025
28001
  plugins: [
28026
28002
  ...exampleSetup({ schema: this.schema, menuBar: false }),
28027
28003
  keymap(this.menuCommandFactory.buildKeymap()),
28028
- createLinkPlugin(this.handleNewLinkSelection),
28029
28004
  createTriggerPlugin(this.triggerCharacters, this.contentConverter),
28005
+ createLinkPlugin(this.handleNewLinkSelection),
28030
28006
  createImageRemoverPlugin(),
28031
28007
  createMenuStateTrackingPlugin(editorMenuTypesArray, this.menuCommandFactory, this.updateActiveActionBarItems),
28032
28008
  createActionBarInteractionPlugin(this.menuCommandFactory),
@@ -28046,6 +28022,7 @@ const ProsemirrorAdapter = class {
28046
28022
  this.view.dispatch(tr);
28047
28023
  this.suppressChangeEvent = false;
28048
28024
  }
28025
+ static get delegatesFocus() { return true; }
28049
28026
  get host() { return getElement(this); }
28050
28027
  static get watchers() { return {
28051
28028
  "value": ["watchValue"]