planning
All checks were successful
Publish To Prod / deploy_and_publish (push) Successful in 35s

This commit is contained in:
2024-10-14 09:15:30 +02:00
parent bcba00a730
commit 6e64e138e2
21059 changed files with 2317811 additions and 1 deletions

View File

@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function defaultEmptyBlock(text = '') {
return {
type: 'paragraph',
children: [{
text
}]
};
}
var _default = exports.default = defaultEmptyBlock;

View File

@@ -0,0 +1,56 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
var _slate = require("slate");
var _keyDownEnter = _interopRequireDefault(require("./keyDownEnter"));
var _keyDownBackspace = _interopRequireDefault(require("./keyDownBackspace"));
var _isCursorInNonDefaultBlock = _interopRequireDefault(require("../locations/isCursorInNonDefaultBlock"));
var _toggleBlock = _interopRequireDefault(require("./toggleBlock"));
var _isCursorCollapsedAfterSoftBreak = _interopRequireDefault(require("../locations/isCursorCollapsedAfterSoftBreak"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const HEADING_HOTKEYS = {
'mod+1': 'heading-one',
'mod+2': 'heading-two',
'mod+3': 'heading-three',
'mod+4': 'heading-four',
'mod+5': 'heading-five',
'mod+6': 'heading-six'
};
function keyDown(event, editor) {
if (!editor.selection) return;
for (const hotkey in HEADING_HOTKEYS) {
if ((0, _isHotkey.default)(hotkey, event)) {
(0, _toggleBlock.default)(editor, HEADING_HOTKEYS[hotkey]);
event.preventDefault();
return false;
}
}
if ((0, _isHotkey.default)('backspace', event) && (0, _isCursorCollapsedAfterSoftBreak.default)(editor)) {
const [, path] = _slate.Editor.previous(editor);
_slate.Transforms.removeNodes(editor, {
at: path
});
event.preventDefault();
return false;
}
if (!(0, _isCursorInNonDefaultBlock.default)(editor)) return;
if ((0, _isHotkey.default)('enter', event)) {
const eventIntercepted = (0, _keyDownEnter.default)(editor);
if (eventIntercepted) {
event.preventDefault();
return false;
}
}
if ((0, _isHotkey.default)('backspace', event)) {
const eventIntercepted = (0, _keyDownBackspace.default)(editor);
if (eventIntercepted) {
event.preventDefault();
return false;
}
}
}
var _default = exports.default = keyDown;

View File

@@ -0,0 +1,25 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
var _unwrapIfCursorAtStart = _interopRequireDefault(require("../transforms/unwrapIfCursorAtStart"));
var _isCursorAtStartOfNonEmptyHeading = _interopRequireDefault(require("../locations/isCursorAtStartOfNonEmptyHeading"));
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
var _areCurrentAndPreviousBlocksOfType = _interopRequireDefault(require("../locations/areCurrentAndPreviousBlocksOfType"));
var _isCursorAtStartOfBlockType = _interopRequireDefault(require("../locations/isCursorAtStartOfBlockType"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function keyDownBackspace(editor) {
if (!editor.selection) return;
if ((0, _isCursorAtStartOfNonEmptyHeading.default)(editor)) {
return;
}
if ((0, _isCursorAtStartOfBlockType.default)(editor, 'quote') && (0, _areCurrentAndPreviousBlocksOfType.default)(editor, 'quote')) {
_slate.Transforms.mergeNodes(editor, (0, _lowestMatchedAncestor.default)(editor, 'quote'));
return true;
}
return (0, _unwrapIfCursorAtStart.default)(editor, true);
}
var _default = exports.default = keyDownBackspace;

View File

@@ -0,0 +1,27 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _isCursorInBlockType = _interopRequireDefault(require("../locations/isCursorInBlockType"));
var _splitIntoParagraph = _interopRequireDefault(require("../transforms/splitIntoParagraph"));
var _unwrapIfCursorAtStart = _interopRequireDefault(require("../transforms/unwrapIfCursorAtStart"));
var _isCursorAtEndOfParagraph = _interopRequireDefault(require("../locations/isCursorAtEndOfParagraph"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function keyDownEnter(editor) {
if (!editor.selection) return;
if ((0, _isCursorInBlockType.default)(editor, 'heading', true)) {
return handleHeading(editor);
}
return (0, _unwrapIfCursorAtStart.default)(editor);
}
function handleHeading(editor) {
if ((0, _isCursorAtEndOfParagraph.default)(editor)) {
// split into paragraph if cursor is at the end of heading
(0, _splitIntoParagraph.default)(editor);
return true;
}
return;
}
var _default = exports.default = keyDownEnter;

View File

@@ -0,0 +1,45 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
var _isCursorInBlockType = _interopRequireDefault(require("../locations/isCursorInBlockType"));
var _getListTypeAtCursor = _interopRequireDefault(require("../locations/getListTypeAtCursor"));
var _wrapListItemsInBlock = _interopRequireDefault(require("../transforms/wrapListItemsInBlock"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function toggleBlock(editor, type) {
const {
selection
} = editor;
if (!selection) return;
const isHeading = type.startsWith('heading-');
const isActive = (0, _isCursorInBlockType.default)(editor, type, isHeading, _slate.Range.isExpanded(selection));
const listType = (0, _getListTypeAtCursor.default)(editor);
// headings do not contain paragraphs so they could be converted, not wrapped/unwrapped
if (isHeading) {
_slate.Transforms.setNodes(editor, {
type: isActive ? 'paragraph' : type
});
return;
}
const {
focus,
anchor
} = selection;
if (!isActive && listType && focus.path[focus.path.length - 3] != anchor.path[anchor.path.length - 3]) {
return (0, _wrapListItemsInBlock.default)(editor, type, listType);
}
if (!isActive) {
return _slate.Transforms.wrapNodes(editor, {
type
});
}
_slate.Transforms.unwrapNodes(editor, {
match: n => n.type === type
});
return;
}
var _default = exports.default = toggleBlock;

View File

@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function areCurrentAndPreviousBlocksOfType(editor, type) {
const {
selection
} = editor;
if (!selection) return false;
const [current] = _slate.Editor.nodes(editor, (0, _lowestMatchedAncestor.default)(editor, 'block'));
const previous = _slate.Editor.previous(editor, (0, _lowestMatchedAncestor.default)(editor, type));
return current && previous && current[0].type === previous[0].type;
}
var _default = exports.default = areCurrentAndPreviousBlocksOfType;

View File

@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getListTypeAtCursor(editor) {
const list = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, 'list'));
if (!list) return null;
return list[0].type;
}
var _default = exports.default = getListTypeAtCursor;

View File

@@ -0,0 +1,16 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
function isCursorAfterSoftBreak(editor) {
const {
selection
} = editor;
if (!selection) return false;
const [previous] = _slate.Editor.previous(editor);
return previous && previous.type == 'break';
}
var _default = exports.default = isCursorAfterSoftBreak;

View File

@@ -0,0 +1,18 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function isCursorAtEndOfParagraph(editor) {
const {
selection
} = editor;
if (!selection) return false;
const paragraph = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, 'paragraph'));
return !!paragraph && _slate.Editor.isEnd(editor, editor.selection.focus, paragraph[1]);
}
var _default = exports.default = isCursorAtEndOfParagraph;

View File

@@ -0,0 +1,18 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function isCursorAtStartOfBlockType(editor, type) {
const {
selection
} = editor;
if (!selection) return false;
const block = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, type));
return !!block && _slate.Editor.isStart(editor, editor.selection.focus, block[1]);
}
var _default = exports.default = isCursorAtStartOfBlockType;

View File

@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
function isCursorAtStartOfNonEmptyHeading(editor) {
const {
selection
} = editor;
if (!selection) return false;
const [match] = Array.from(_slate.Editor.nodes(editor, {
match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && `${n.type}`.startsWith('heading-'),
mode: 'lowest'
}));
return !!match && _slate.Editor.isStart(editor, editor.selection.focus, match[1]) && !_slate.Editor.isEmpty(editor, match[0]);
}
var _default = exports.default = isCursorAtStartOfNonEmptyHeading;

View File

@@ -0,0 +1,17 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
function isCursorCollapsedAfterSoftBreak(editor) {
const {
selection
} = editor;
if (!selection) return false;
if (_slate.Range.isExpanded(selection)) return false;
const previous = _slate.Editor.previous(editor);
return previous && previous[0].type == 'break';
}
var _default = exports.default = isCursorCollapsedAfterSoftBreak;

View File

@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
function isCursorInBlockType(editor, type, ignoreHeadings, ignoreLists) {
const {
selection
} = editor;
if (!selection) return false;
const [match] = Array.from(_slate.Editor.nodes(editor, {
match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && n.type !== 'paragraph' && n.type !== 'list-item' && (ignoreHeadings || !`${n.type}`.startsWith('heading-')) && (!ignoreLists || !`${n.type}`.endsWith('-list')),
mode: 'lowest'
}));
return !!match && (match[0].type === type || `${match[0].type}`.startsWith(`${type}-` || `${match[0].type}`.endsWith(`-${type}`)));
}
var _default = exports.default = isCursorInBlockType;

View File

@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
function isCursorInNonDefaultBlock(editor) {
const {
selection
} = editor;
if (!selection) return false;
const [match] = Array.from(_slate.Editor.nodes(editor, {
match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && n.type !== 'paragraph',
mode: 'lowest'
}));
return !!match && !_slate.Editor.isEditor(match[0]);
}
var _default = exports.default = isCursorInNonDefaultBlock;

View File

@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
function isCursorInNonDefaultBlock(editor) {
const {
selection
} = editor;
if (!selection) return false;
const [match] = Array.from(_slate.Editor.nodes(editor, {
match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && n.type !== 'paragraph',
mode: 'lowest'
}));
return !!match && !_slate.Editor.isEditor(match[0]);
}
var _default = exports.default = isCursorInNonDefaultBlock;

View File

@@ -0,0 +1,22 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
function splitIntoParagraph(editor) {
_slate.Editor.withoutNormalizing(editor, () => {
_slate.Transforms.splitNodes(editor, {
always: true
});
_slate.Transforms.setNodes(editor, {
type: 'paragraph'
});
});
_slate.Editor.normalize(editor, {
force: true
});
return true;
}
var _default = exports.default = splitIntoParagraph;

View File

@@ -0,0 +1,43 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function unwrapIfCursorAtStart(editor, mergeWithPrevious = false) {
if (editor.selection.anchor.offset !== 0) return false;
let [node, path] = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, 'non-default'));
if (path.length == 0) return false;
const isHeading = `${node.type}`.startsWith('heading-');
if (isHeading) {
_slate.Transforms.setNodes(editor, {
type: 'paragraph'
});
return false;
}
const isBlock = _slate.Editor.isBlock(editor, node);
const [parentBlock, parentBlockPath] = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, 'block'));
if (!isBlock) {
if (!_slate.Editor.isStart(editor, path, parentBlockPath)) {
return false;
}
[node, path] = [parentBlock, parentBlockPath];
}
_slate.Editor.withoutNormalizing(editor, () => {
_slate.Transforms.unwrapNodes(editor, {
match: n => n.type === node.type,
split: true
});
if (mergeWithPrevious) {
_slate.Transforms.mergeNodes(editor);
}
});
_slate.Editor.normalize(editor, {
force: true
});
return true;
}
var _default = exports.default = unwrapIfCursorAtStart;

View File

@@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slate = require("slate");
function wrapListItemsInBlock(editor, blockType, listType) {
_slate.Editor.withoutNormalizing(editor, () => {
_slate.Transforms.wrapNodes(editor, {
type: listType
});
_slate.Transforms.wrapNodes(editor, {
type: blockType
}, {
match: n => n.type === listType
});
_slate.Transforms.liftNodes(editor, {
match: n => n.type === blockType
});
});
_slate.Editor.normalize(editor, {
force: true
});
}
var _default = exports.default = wrapListItemsInBlock;

View File

@@ -0,0 +1,18 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _keyDown = _interopRequireDefault(require("./events/keyDown"));
var _toggleBlock = _interopRequireDefault(require("./events/toggleBlock"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function withBlocks(editor) {
if (editor.keyDownHandlers === undefined) {
editor.keyDownHandlers = [];
}
editor.keyDownHandlers.push((event, editor) => (0, _keyDown.default)(event, editor));
editor.toggleBlock = type => (0, _toggleBlock.default)(editor, type);
return editor;
}
var _default = exports.default = withBlocks;