@skokenes/slate-yjs
Version:
Yjs bindings for Slate.
37 lines • 3.15 kB
JavaScript
import { Transforms } from 'slate';
import invariant from 'tiny-invariant';
import { toSlatePath } from '../utils/convert';
import { withoutNormalizingAndSelectionMod } from './util';
/**
* Applies a Yjs Text event to a slate editor.
*
* @param event
*/
export default function applyTextEvent(editor, event) {
const targetPath = toSlatePath(event.path);
let offset = 0;
withoutNormalizingAndSelectionMod(editor, () => {
event.changes.delta.forEach((delta) => {
var _a, _b;
if ('retain' in delta) {
offset += (_a = delta.retain) !== null && _a !== void 0 ? _a : 0;
}
if ('delete' in delta) {
Transforms.insertText(editor, '', {
at: {
anchor: { path: targetPath, offset },
focus: { path: targetPath, offset: offset + ((_b = delta.delete) !== null && _b !== void 0 ? _b : 0) },
},
});
}
if ('insert' in delta) {
invariant(typeof delta.insert === 'string', `Unexpected text insert content type: expected string, got ${typeof delta.insert}`);
Transforms.insertText(editor, delta.insert, {
at: { path: targetPath, offset },
});
offset += delta.insert.length;
}
});
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dEV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGx5VG9TbGF0ZS90ZXh0RXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMzQyxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTNEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxVQUFVLGNBQWMsQ0FDcEMsTUFBYyxFQUNkLEtBQW1CO0lBRW5CLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRWYsaUNBQWlDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUM3QyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTs7WUFDcEMsSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFO2dCQUNyQixNQUFNLElBQUksTUFBQSxLQUFLLENBQUMsTUFBTSxtQ0FBSSxDQUFDLENBQUM7YUFDN0I7WUFFRCxJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUU7Z0JBQ3JCLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRTtvQkFDaEMsRUFBRSxFQUFFO3dCQUNGLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO3dCQUNwQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJLENBQUMsQ0FBQyxFQUFFO3FCQUNsRTtpQkFDRixDQUFDLENBQUM7YUFDSjtZQUVELElBQUksUUFBUSxJQUFJLEtBQUssRUFBRTtnQkFDckIsU0FBUyxDQUNQLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQ2hDLDZEQUE2RCxPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDbkYsQ0FBQztnQkFFRixVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFO29CQUMxQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtpQkFDakMsQ0FBQyxDQUFDO2dCQUVILE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=