@limetech/lime-elements 37.76.1 → 37.76.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +93 -117
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js.map +1 -1
- package/dist/cjs/limel-text-editor.cjs.entry.js.map +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/link-plugin.js +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/link-plugin.js.map +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/append-transaction-handler.js +18 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/append-transaction-handler.js.map +1 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/detect-trigger-removal.js +26 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/detect-trigger-removal.js.map +1 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/get-trigger-event-detail.js +10 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/get-trigger-event-detail.js.map +1 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/monitor-triggered-text.js +11 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/monitor-triggered-text.js.map +1 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/send-trigger-event.js +10 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/send-trigger-event.js.map +1 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/text-input-handler.js +20 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/text-input-handler.js.map +1 -0
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory.js +18 -123
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory.js.map +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/inserter.js +6 -11
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/inserter.js.map +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js.map +1 -1
- package/dist/collection/components/text-editor/text-editor.js +1 -1
- package/dist/collection/components/text-editor/text-editor.js.map +1 -1
- package/dist/collection/components/text-editor/text-editor.types.js.map +1 -1
- package/dist/esm/limel-prosemirror-adapter.entry.js +93 -117
- package/dist/esm/limel-prosemirror-adapter.entry.js.map +1 -1
- package/dist/esm/limel-text-editor.entry.js.map +1 -1
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/{p-4c79b891.entry.js → p-1db8aa67.entry.js} +2 -2
- package/dist/lime-elements/p-1db8aa67.entry.js.map +1 -0
- package/dist/lime-elements/p-9fae6488.entry.js.map +1 -1
- package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/append-transaction-handler.d.ts +6 -0
- package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/detect-trigger-removal.d.ts +6 -0
- package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/get-trigger-event-detail.d.ts +5 -0
- package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/monitor-triggered-text.d.ts +5 -0
- package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/send-trigger-event.d.ts +5 -0
- package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/text-input-handler.d.ts +5 -0
- package/dist/types/components/text-editor/prosemirror-adapter/plugins/trigger/inserter.d.ts +2 -2
- package/dist/types/components/text-editor/text-editor.d.ts +1 -1
- package/dist/types/components/text-editor/text-editor.types.d.ts +11 -0
- package/dist/types/components.d.ts +4 -4
- package/package.json +6 -6
- package/dist/lime-elements/p-4c79b891.entry.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## [37.76.3](https://github.com/Lundalogik/lime-elements/compare/v37.76.2...v37.76.3) (2024-12-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
* **text-editor:** avoid occasional null reference error ([26860c4](https://github.com/Lundalogik/lime-elements/commit/26860c4a7b6e27a2de5ba5ca6271216877656bdf))
|
|
8
|
+
|
|
9
|
+
## [37.76.2](https://github.com/Lundalogik/lime-elements/compare/v37.76.1...v37.76.2) (2024-12-17)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
* **text-editor:** fix triggers not working on iOS and on text-editor inside form ([5e7eaa3](https://github.com/Lundalogik/lime-elements/commit/5e7eaa3fe4eb56801a6400a74389b6c55a317fc8)), closes [Lundalogik/crm-feature#4498](https://github.com/Lundalogik/crm-feature/issues/4498) [Lundalogik/limepkg-email#1273](https://github.com/Lundalogik/limepkg-email/issues/1273)
|
|
16
|
+
|
|
1
17
|
## [37.76.1](https://github.com/Lundalogik/lime-elements/compare/v37.76.0...v37.76.1) (2024-12-12)
|
|
2
18
|
|
|
3
19
|
|
|
@@ -25814,7 +25814,7 @@ const findEnd = (doc, pos, href) => {
|
|
|
25814
25814
|
*/
|
|
25815
25815
|
const getLinkDataAtPosition = (view, event) => {
|
|
25816
25816
|
const pos = view.posAtCoords({ left: event.clientX, top: event.clientY });
|
|
25817
|
-
const node = view.state.doc.nodeAt(pos.pos);
|
|
25817
|
+
const node = view.state.doc.nodeAt(pos === null || pos === void 0 ? void 0 : pos.pos);
|
|
25818
25818
|
if (!node) {
|
|
25819
25819
|
return null;
|
|
25820
25820
|
}
|
|
@@ -26135,15 +26135,14 @@ const createHtmlInserter = (view, contentConverter, startPos, dispatchTransactio
|
|
|
26135
26135
|
};
|
|
26136
26136
|
};
|
|
26137
26137
|
|
|
26138
|
-
const inserterFactory = (view, contentConverter) => {
|
|
26139
|
-
const startPos = getTriggerStartPosition(view);
|
|
26138
|
+
const inserterFactory = (view, contentConverter, trigger) => {
|
|
26140
26139
|
return {
|
|
26141
|
-
insert: createNodeAndTextInserter(view,
|
|
26142
|
-
insertHtml: createHtmlInserter(view, contentConverter,
|
|
26140
|
+
insert: createNodeAndTextInserter(view, trigger),
|
|
26141
|
+
insertHtml: createHtmlInserter(view, contentConverter, trigger.position, dispatchTransaction),
|
|
26143
26142
|
stopTrigger: () => stopTriggerTransaction(view),
|
|
26144
26143
|
};
|
|
26145
26144
|
};
|
|
26146
|
-
const createNodeAndTextInserter = (view,
|
|
26145
|
+
const createNodeAndTextInserter = (view, trigger) => (input) => {
|
|
26147
26146
|
const schema = view.state.schema;
|
|
26148
26147
|
let node;
|
|
26149
26148
|
try {
|
|
@@ -26156,7 +26155,7 @@ const createNodeAndTextInserter = (view, startPos) => (input) => {
|
|
|
26156
26155
|
}
|
|
26157
26156
|
const spaceNode = schema.text(' ');
|
|
26158
26157
|
const fragment = schema.nodes.doc.create(null, [node, spaceNode]);
|
|
26159
|
-
dispatchTransaction(view,
|
|
26158
|
+
dispatchTransaction(view, trigger.position, fragment);
|
|
26160
26159
|
};
|
|
26161
26160
|
const stopTriggerTransaction = (view) => {
|
|
26162
26161
|
const { state, dispatch } = view;
|
|
@@ -26166,8 +26165,8 @@ const stopTriggerTransaction = (view) => {
|
|
|
26166
26165
|
};
|
|
26167
26166
|
const dispatchTransaction = (view, startPos, fragment) => {
|
|
26168
26167
|
const state = view.state;
|
|
26169
|
-
const dispatch = view.dispatch;
|
|
26170
26168
|
const fromPos = state.selection.$from.pos;
|
|
26169
|
+
const dispatch = view.dispatch;
|
|
26171
26170
|
const transaction = state.tr.replaceWith(startPos, fromPos, fragment);
|
|
26172
26171
|
transaction.setMeta('stopTrigger', true);
|
|
26173
26172
|
dispatch(transaction);
|
|
@@ -26194,47 +26193,16 @@ const getCustomNode = (name, schema) => {
|
|
|
26194
26193
|
}
|
|
26195
26194
|
return customNode;
|
|
26196
26195
|
};
|
|
26197
|
-
const getTriggerStartPosition = (view) => {
|
|
26198
|
-
var _a, _b, _c;
|
|
26199
|
-
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;
|
|
26200
|
-
};
|
|
26201
26196
|
|
|
26202
|
-
const isTrigger = (key, validTriggers) => {
|
|
26203
|
-
return key.length === 1 && validTriggers.includes(key);
|
|
26204
|
-
};
|
|
26205
|
-
const shouldTrigger = (state) => {
|
|
26206
|
-
const { $from } = state.selection;
|
|
26207
|
-
if ($from.pos === 1) {
|
|
26208
|
-
return true;
|
|
26209
|
-
}
|
|
26210
|
-
// Getting the position immediately before the current selection
|
|
26211
|
-
const prevPos = $from.pos - 1;
|
|
26212
|
-
if (prevPos > 0) {
|
|
26213
|
-
// allow trigger if the cursor is at the start of a new paragraph
|
|
26214
|
-
if ($from.parentOffset === 0) {
|
|
26215
|
-
return true;
|
|
26216
|
-
}
|
|
26217
|
-
const prevChar = state.doc.textBetween(prevPos, $from.pos);
|
|
26218
|
-
return prevChar === ' ' || prevChar === '\n';
|
|
26219
|
-
}
|
|
26220
|
-
return false;
|
|
26221
|
-
};
|
|
26222
|
-
const stillHasTrigger = (state, activeTrigger, triggerPosition, triggerLength) => {
|
|
26223
|
-
const cursorPosition = state.selection.$from.pos;
|
|
26224
|
-
if (cursorPosition < triggerPosition ||
|
|
26225
|
-
cursorPosition > triggerPosition + triggerLength + 1) {
|
|
26226
|
-
return false;
|
|
26227
|
-
}
|
|
26228
|
-
return (state.doc.textBetween(triggerPosition, triggerPosition + 1) ===
|
|
26229
|
-
activeTrigger);
|
|
26230
|
-
};
|
|
26231
26197
|
const getTriggerEventDetail = (view, contentConverter, trigger, value) => {
|
|
26232
|
-
|
|
26233
|
-
trigger: trigger,
|
|
26234
|
-
textEditor: inserterFactory(view, contentConverter),
|
|
26198
|
+
const returnValue = {
|
|
26199
|
+
trigger: trigger.character,
|
|
26200
|
+
textEditor: inserterFactory(view, contentConverter, trigger),
|
|
26235
26201
|
value: value,
|
|
26236
26202
|
};
|
|
26203
|
+
return returnValue;
|
|
26237
26204
|
};
|
|
26205
|
+
|
|
26238
26206
|
const sendTriggerEvent = (type, view, contentConverter, trigger, value) => {
|
|
26239
26207
|
const event = new CustomEvent(type, {
|
|
26240
26208
|
detail: getTriggerEventDetail(view, contentConverter, trigger, value),
|
|
@@ -26243,83 +26211,93 @@ const sendTriggerEvent = (type, view, contentConverter, trigger, value) => {
|
|
|
26243
26211
|
});
|
|
26244
26212
|
view.dom.dispatchEvent(event);
|
|
26245
26213
|
};
|
|
26246
|
-
|
|
26247
|
-
|
|
26248
|
-
|
|
26249
|
-
|
|
26250
|
-
|
|
26251
|
-
|
|
26252
|
-
|
|
26253
|
-
|
|
26254
|
-
|
|
26255
|
-
|
|
26256
|
-
|
|
26257
|
-
|
|
26258
|
-
|
|
26259
|
-
|
|
26260
|
-
|
|
26261
|
-
|
|
26262
|
-
|
|
26263
|
-
|
|
26264
|
-
|
|
26265
|
-
|
|
26214
|
+
|
|
26215
|
+
const getTextInputHandler = (contentConverter, triggerCharacters, updateActiveTrigger) => {
|
|
26216
|
+
return (view, _from, _to, text) => {
|
|
26217
|
+
if (!triggerCharacters.includes(text)) {
|
|
26218
|
+
return false;
|
|
26219
|
+
}
|
|
26220
|
+
const doc = view.state.doc;
|
|
26221
|
+
const precedingText = doc.textBetween(_from - 1, _from, '');
|
|
26222
|
+
if (/\s/.test(precedingText) || precedingText === '') {
|
|
26223
|
+
const trigger = {
|
|
26224
|
+
character: text,
|
|
26225
|
+
position: _from,
|
|
26226
|
+
};
|
|
26227
|
+
updateActiveTrigger(trigger);
|
|
26228
|
+
sendTriggerEvent('triggerStart', view, contentConverter, trigger, text);
|
|
26229
|
+
}
|
|
26230
|
+
return false;
|
|
26231
|
+
};
|
|
26232
|
+
};
|
|
26233
|
+
|
|
26234
|
+
const detectTriggerRemoval = (transaction, activeTrigger, resetActiveTrigger, contentConverter, view) => {
|
|
26235
|
+
if (!activeTrigger || activeTrigger.position < 1) {
|
|
26236
|
+
return false;
|
|
26237
|
+
}
|
|
26238
|
+
for (const step of transaction.steps) {
|
|
26239
|
+
if (step instanceof ReplaceStep) {
|
|
26240
|
+
const { from, to, slice } = step; // Access properties specific to ReplaceStep
|
|
26241
|
+
// Check if the step affects the trigger position
|
|
26242
|
+
if (from <= activeTrigger.position &&
|
|
26243
|
+
to >= activeTrigger.position) {
|
|
26244
|
+
const text = slice.content.textBetween(0, slice.content.size, '');
|
|
26245
|
+
// Check if the trigger character has been removed
|
|
26246
|
+
// `text` is the text after the step has been applied
|
|
26247
|
+
if (!text.includes(activeTrigger.character)) {
|
|
26248
|
+
resetActiveTrigger();
|
|
26249
|
+
sendTriggerEvent('triggerStop', view, contentConverter, activeTrigger, '');
|
|
26250
|
+
return true;
|
|
26266
26251
|
}
|
|
26267
|
-
}
|
|
26252
|
+
}
|
|
26268
26253
|
}
|
|
26269
|
-
});
|
|
26270
|
-
if (textAdded) {
|
|
26271
|
-
text += textAdded;
|
|
26272
26254
|
}
|
|
26273
|
-
|
|
26274
|
-
|
|
26255
|
+
return false;
|
|
26256
|
+
};
|
|
26257
|
+
|
|
26258
|
+
const monitorTriggeredText = (doc, activeTrigger, cursorPosition, contentConverter, view) => {
|
|
26259
|
+
let newValue = '';
|
|
26260
|
+
if (cursorPosition > activeTrigger.position) {
|
|
26261
|
+
// Start extracting text after the trigger character
|
|
26262
|
+
newValue = doc.textBetween(activeTrigger.position + 1, cursorPosition, '');
|
|
26275
26263
|
}
|
|
26276
|
-
|
|
26264
|
+
sendTriggerEvent('triggerChange', view, contentConverter, activeTrigger, newValue);
|
|
26265
|
+
return newValue;
|
|
26266
|
+
};
|
|
26267
|
+
|
|
26268
|
+
const getAppendTransactionHandler = (getCurrentView, getActiveTrigger, resetActiveTrigger, contentConverter) => {
|
|
26269
|
+
return (transactions, _oldState, newState) => {
|
|
26270
|
+
const activeTrigger = getActiveTrigger();
|
|
26271
|
+
if (!activeTrigger) {
|
|
26272
|
+
return;
|
|
26273
|
+
}
|
|
26274
|
+
const triggerRemoved = detectTriggerRemoval(transactions[0], // Pass the first transaction
|
|
26275
|
+
activeTrigger, resetActiveTrigger, contentConverter, getCurrentView());
|
|
26276
|
+
if (triggerRemoved) {
|
|
26277
|
+
resetActiveTrigger();
|
|
26278
|
+
return;
|
|
26279
|
+
}
|
|
26280
|
+
monitorTriggeredText(newState.doc, activeTrigger, newState.selection.from, contentConverter, getCurrentView());
|
|
26281
|
+
};
|
|
26277
26282
|
};
|
|
26283
|
+
|
|
26278
26284
|
const createTriggerPlugin = (triggerCharacters, contentConverter) => {
|
|
26279
|
-
let activeTrigger = null;
|
|
26280
|
-
let triggerText = '';
|
|
26281
26285
|
let pluginView = null;
|
|
26282
|
-
let
|
|
26283
|
-
const
|
|
26284
|
-
|
|
26285
|
-
sendTriggerEvent('triggerStop', pluginView, contentConverter, activeTrigger, triggerText);
|
|
26286
|
-
triggerPosition = null;
|
|
26287
|
-
activeTrigger = null;
|
|
26286
|
+
let activeTrigger = null;
|
|
26287
|
+
const getCurrentView = () => {
|
|
26288
|
+
return pluginView;
|
|
26288
26289
|
};
|
|
26289
|
-
const
|
|
26290
|
-
|
|
26291
|
-
stopTrigger();
|
|
26292
|
-
return true;
|
|
26293
|
-
}
|
|
26294
|
-
return false;
|
|
26290
|
+
const getActiveTrigger = () => {
|
|
26291
|
+
return activeTrigger;
|
|
26295
26292
|
};
|
|
26296
|
-
const
|
|
26297
|
-
|
|
26298
|
-
if (event.inputType === 'insertText' &&
|
|
26299
|
-
isTrigger(event.data, triggerCharacters) &&
|
|
26300
|
-
shouldTrigger(state)) {
|
|
26301
|
-
activeTrigger = event.data;
|
|
26302
|
-
triggerText = '';
|
|
26303
|
-
triggerPosition = state.selection.$from.pos - triggerText.length;
|
|
26304
|
-
sendTriggerEvent('triggerStart', view, contentConverter, activeTrigger, triggerText);
|
|
26305
|
-
return false;
|
|
26306
|
-
}
|
|
26307
|
-
return false;
|
|
26293
|
+
const resetActiveTrigger = () => {
|
|
26294
|
+
activeTrigger = null;
|
|
26308
26295
|
};
|
|
26309
|
-
const
|
|
26310
|
-
|
|
26311
|
-
return;
|
|
26312
|
-
}
|
|
26313
|
-
if (!stillHasTrigger(newState, activeTrigger, triggerPosition, triggerText.length)) {
|
|
26314
|
-
stopTrigger();
|
|
26315
|
-
return;
|
|
26316
|
-
}
|
|
26317
|
-
const updatedText = processTransactions(triggerText, transactions, oldState);
|
|
26318
|
-
if (updatedText !== triggerText) {
|
|
26319
|
-
triggerText = updatedText;
|
|
26320
|
-
sendTriggerEvent('triggerChange', pluginView, contentConverter, activeTrigger, triggerText.slice(1));
|
|
26321
|
-
}
|
|
26296
|
+
const updateActiveTrigger = (trigger) => {
|
|
26297
|
+
activeTrigger = trigger;
|
|
26322
26298
|
};
|
|
26299
|
+
const textInputHandler = getTextInputHandler(contentConverter, triggerCharacters, updateActiveTrigger);
|
|
26300
|
+
const appendTransactionHandler = getAppendTransactionHandler(getCurrentView, getActiveTrigger, resetActiveTrigger, contentConverter);
|
|
26323
26301
|
return new Plugin({
|
|
26324
26302
|
key: new PluginKey('triggerPlugin'),
|
|
26325
26303
|
view: (view) => {
|
|
@@ -26332,18 +26310,16 @@ const createTriggerPlugin = (triggerCharacters, contentConverter) => {
|
|
|
26332
26310
|
},
|
|
26333
26311
|
apply: (transaction) => {
|
|
26334
26312
|
if (transaction.getMeta('stopTrigger')) {
|
|
26335
|
-
|
|
26313
|
+
sendTriggerEvent('triggerStop', pluginView, contentConverter, activeTrigger, '');
|
|
26314
|
+
resetActiveTrigger();
|
|
26336
26315
|
}
|
|
26337
26316
|
return {};
|
|
26338
26317
|
},
|
|
26339
26318
|
},
|
|
26340
26319
|
props: {
|
|
26341
|
-
|
|
26342
|
-
handleDOMEvents: {
|
|
26343
|
-
input: handleInput,
|
|
26344
|
-
},
|
|
26320
|
+
handleTextInput: textInputHandler,
|
|
26345
26321
|
},
|
|
26346
|
-
appendTransaction:
|
|
26322
|
+
appendTransaction: appendTransactionHandler,
|
|
26347
26323
|
});
|
|
26348
26324
|
};
|
|
26349
26325
|
|
|
@@ -28029,8 +28005,8 @@ const ProsemirrorAdapter = class {
|
|
|
28029
28005
|
plugins: [
|
|
28030
28006
|
...exampleSetup({ schema: this.schema, menuBar: false }),
|
|
28031
28007
|
keymap(this.menuCommandFactory.buildKeymap()),
|
|
28032
|
-
createLinkPlugin(this.handleNewLinkSelection),
|
|
28033
28008
|
createTriggerPlugin(this.triggerCharacters, this.contentConverter),
|
|
28009
|
+
createLinkPlugin(this.handleNewLinkSelection),
|
|
28034
28010
|
createImageRemoverPlugin(),
|
|
28035
28011
|
createMenuStateTrackingPlugin(editorMenuTypesArray, this.menuCommandFactory, this.updateActiveActionBarItems),
|
|
28036
28012
|
createActionBarInteractionPlugin(this.menuCommandFactory),
|