marshall-y-slate
Version:
Yjs bindings for Slate.
71 lines • 6.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useCursors = void 0;
const react_1 = require("react");
const slate_1 = require("slate");
const utils_1 = require("../cursor/utils");
const useCursors = (editor) => {
const [cursors, setCursorData] = (0, react_1.useState)([]);
(0, react_1.useEffect)(() => {
editor.awareness.on('update', () => {
const newCursorData = Array.from(editor.awareness.getStates())
.filter(([clientId]) => { var _a; return clientId !== ((_a = editor.sharedType.doc) === null || _a === void 0 ? void 0 : _a.clientID); })
.map(([, awareness]) => {
let anchor = null;
let focus = null;
if (awareness.anchor) {
anchor = (0, utils_1.relativePositionToAbsolutePosition)(editor.sharedType, awareness.anchor);
}
if (awareness.focus) {
focus = (0, utils_1.relativePositionToAbsolutePosition)(editor.sharedType, awareness.focus);
}
return { anchor, focus, data: awareness };
})
.filter((cursor) => cursor.anchor && cursor.focus);
setCursorData(newCursorData);
});
}, [editor]);
const decorate = (0, react_1.useCallback)(([node, path]) => {
const ranges = [];
if (slate_1.Text.isText(node) && (cursors === null || cursors === void 0 ? void 0 : cursors.length)) {
cursors.forEach((cursor) => {
if (slate_1.Range.includes(cursor, path)) {
const { focus, anchor, data } = cursor;
const isFocusNode = slate_1.Path.equals(focus.path, path);
const isAnchorNode = slate_1.Path.equals(anchor.path, path);
const isForward = slate_1.Range.isForward({ anchor, focus });
ranges.push({
data,
isForward,
originAnchorPath: anchor.path,
originFocusPath: focus.path,
isCaret: isFocusNode,
anchor: {
path,
// eslint-disable-next-line no-nested-ternary
offset: isAnchorNode
? anchor.offset
: isForward
? 0
: node.text.length,
},
focus: {
path,
// eslint-disable-next-line no-nested-ternary
offset: isFocusNode
? focus.offset
: isForward
? node.text.length
: 0,
},
});
}
});
}
return ranges;
}, [cursors]);
return { decorate, cursors };
};
exports.useCursors = useCursors;
exports.default = exports.useCursors;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWN1cnNvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2luL3VzZS1jdXJzb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUF5RDtBQUN6RCxpQ0FBcUQ7QUFFckQsMkNBQXFFO0FBRzlELE1BQU0sVUFBVSxHQUFHLENBQ3RCLE1BQW9CLEVBSXRCLEVBQUU7SUFDQSxNQUFNLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxHQUFHLElBQUEsZ0JBQVEsRUFBVyxFQUFFLENBQUMsQ0FBQztJQUV4RCxJQUFBLGlCQUFTLEVBQUMsR0FBRyxFQUFFO1FBQ1gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUMvQixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ3pELE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFDLE9BQUEsUUFBUSxNQUFLLE1BQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLDBDQUFFLFFBQVEsQ0FBQSxDQUFBLEVBQUEsQ0FBQztpQkFDcEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25CLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7b0JBQ2xCLE1BQU0sR0FBRyxJQUFBLDBDQUFrQyxFQUN2QyxNQUFNLENBQUMsVUFBVSxFQUNqQixTQUFTLENBQUMsTUFBTSxDQUNuQixDQUFDO2lCQUNMO2dCQUVELElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtvQkFDakIsS0FBSyxHQUFHLElBQUEsMENBQWtDLEVBQ3RDLE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLFNBQVMs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