@payloadcms/richtext-lexical 4.0.0-internal.cc18726 → 4.0.0-internal.cd47d20
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/dist/exports/client/Field-BPLEYPXV.js +2 -0
- package/dist/exports/client/Field-BPLEYPXV.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/index.js +27 -27
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/blocks/client/component/BlockReordering/index.d.ts +11 -0
- package/dist/features/blocks/client/component/BlockReordering/index.d.ts.map +1 -0
- package/dist/features/blocks/client/component/BlockReordering/index.js +18 -0
- package/dist/features/blocks/client/component/BlockReordering/index.js.map +1 -0
- package/dist/features/blocks/client/component/index.d.ts +0 -6
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +126 -69
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/component/useBlockReordering.d.ts +16 -0
- package/dist/features/blocks/client/component/useBlockReordering.d.ts.map +1 -0
- package/dist/features/blocks/client/component/useBlockReordering.js +178 -0
- package/dist/features/blocks/client/component/useBlockReordering.js.map +1 -0
- package/dist/features/converters/lexicalToHtml/async/converters/heading.js +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/async/converters/list.js +4 -3
- package/dist/features/converters/lexicalToHtml/async/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/heading.js +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToHtml/sync/converters/list.js +4 -3
- package/dist/features/converters/lexicalToHtml/sync/converters/list.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.d.ts.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js +2 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/heading.js.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.d.ts.map +1 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js +2 -1
- package/dist/features/converters/lexicalToJSX/converter/converters/list.js.map +1 -1
- package/dist/features/converters/utilities/payloadPopulateFn.d.ts.map +1 -1
- package/dist/features/converters/utilities/payloadPopulateFn.js +4 -2
- package/dist/features/converters/utilities/payloadPopulateFn.js.map +1 -1
- package/dist/features/heading/constants.d.ts +2 -0
- package/dist/features/heading/constants.d.ts.map +1 -0
- package/dist/features/heading/constants.js +2 -0
- package/dist/features/heading/constants.js.map +1 -0
- package/dist/features/heading/server/index.d.ts.map +1 -1
- package/dist/features/heading/server/index.js +5 -1
- package/dist/features/heading/server/index.js.map +1 -1
- package/dist/features/heading/server/validate.d.ts +6 -0
- package/dist/features/heading/server/validate.d.ts.map +1 -0
- package/dist/features/heading/server/validate.js +15 -0
- package/dist/features/heading/server/validate.js.map +1 -0
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +1 -0
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/lists/checklist/server/index.d.ts.map +1 -1
- package/dist/features/lists/checklist/server/index.js +5 -2
- package/dist/features/lists/checklist/server/index.js.map +1 -1
- package/dist/features/lists/orderedList/server/index.d.ts.map +1 -1
- package/dist/features/lists/orderedList/server/index.js +5 -2
- package/dist/features/lists/orderedList/server/index.js.map +1 -1
- package/dist/features/lists/shared/constants.d.ts +2 -0
- package/dist/features/lists/shared/constants.d.ts.map +1 -0
- package/dist/features/lists/shared/constants.js +2 -0
- package/dist/features/lists/shared/constants.js.map +1 -0
- package/dist/features/lists/shared/validate.d.ts +5 -0
- package/dist/features/lists/shared/validate.d.ts.map +1 -0
- package/dist/features/lists/shared/validate.js +15 -0
- package/dist/features/lists/shared/validate.js.map +1 -0
- package/dist/features/lists/unorderedList/server/index.d.ts.map +1 -1
- package/dist/features/lists/unorderedList/server/index.js +5 -2
- package/dist/features/lists/unorderedList/server/index.js.map +1 -1
- package/dist/features/relationship/client/index.d.ts +2 -2
- package/dist/features/relationship/client/index.d.ts.map +1 -1
- package/dist/features/relationship/client/index.js.map +1 -1
- package/dist/features/relationship/client/plugins/index.d.ts +2 -2
- package/dist/features/relationship/client/plugins/index.d.ts.map +1 -1
- package/dist/features/relationship/client/plugins/index.js +27 -31
- package/dist/features/relationship/client/plugins/index.js.map +1 -1
- package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts +2 -4
- package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts.map +1 -1
- package/dist/features/relationship/client/utils/useEnabledRelationships.js +53 -20
- package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
- package/dist/features/relationship/server/graphQLPopulationPromise.d.ts +2 -2
- package/dist/features/relationship/server/graphQLPopulationPromise.d.ts.map +1 -1
- package/dist/features/relationship/server/graphQLPopulationPromise.js +2 -2
- package/dist/features/relationship/server/graphQLPopulationPromise.js.map +1 -1
- package/dist/features/relationship/server/index.d.ts +8 -1
- package/dist/features/relationship/server/index.d.ts.map +1 -1
- package/dist/features/relationship/server/index.js +28 -11
- package/dist/features/relationship/server/index.js.map +1 -1
- package/dist/features/relationship/server/schema.d.ts +2 -2
- package/dist/features/relationship/server/schema.d.ts.map +1 -1
- package/dist/features/relationship/server/schema.js +5 -10
- package/dist/features/relationship/server/schema.js.map +1 -1
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts +1 -6
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts.map +1 -1
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js +1 -5
- package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js.map +1 -1
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts +8 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts.map +1 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js +19 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js.map +1 -0
- package/dist/features/table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -1
- package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js +17 -44
- package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
- package/dist/features/table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
- package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js +41 -18
- package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarButton/index.js +1 -0
- package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +85 -32
- package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.css +16 -11
- package/dist/features/upload/client/index.d.ts +3 -2
- package/dist/features/upload/client/index.d.ts.map +1 -1
- package/dist/features/upload/client/index.js.map +1 -1
- package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
- package/dist/features/upload/client/plugin/index.js +47 -52
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/graphQLPopulationPromise.d.ts +2 -2
- package/dist/features/upload/server/graphQLPopulationPromise.d.ts.map +1 -1
- package/dist/features/upload/server/graphQLPopulationPromise.js +1 -1
- package/dist/features/upload/server/graphQLPopulationPromise.js.map +1 -1
- package/dist/features/upload/server/index.d.ts +6 -2
- package/dist/features/upload/server/index.d.ts.map +1 -1
- package/dist/features/upload/server/index.js +18 -14
- package/dist/features/upload/server/index.js.map +1 -1
- package/dist/features/upload/server/schema.d.ts +2 -2
- package/dist/features/upload/server/schema.d.ts.map +1 -1
- package/dist/features/upload/server/schema.js +4 -8
- package/dist/features/upload/server/schema.js.map +1 -1
- package/dist/features/upload/server/validate.d.ts +2 -2
- package/dist/features/upload/server/validate.d.ts.map +1 -1
- package/dist/features/upload/server/validate.js +3 -0
- package/dist/features/upload/server/validate.js.map +1 -1
- package/dist/field/Diff/converters/listitem/index.d.ts.map +1 -1
- package/dist/field/Diff/converters/listitem/index.js +2 -1
- package/dist/field/Diff/converters/listitem/index.js.map +1 -1
- package/dist/field/Diff/index.d.ts +3 -2
- package/dist/field/Diff/index.d.ts.map +1 -1
- package/dist/field/Diff/index.js +1 -0
- package/dist/field/Diff/index.js.map +1 -1
- package/dist/field/RenderLexical/index.d.ts +3 -1
- package/dist/field/RenderLexical/index.d.ts.map +1 -1
- package/dist/field/RenderLexical/index.js +23 -23
- package/dist/field/RenderLexical/index.js.map +1 -1
- package/dist/field/ViewSelector.d.ts.map +1 -1
- package/dist/field/ViewSelector.js +1 -0
- package/dist/field/ViewSelector.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lexical/LexicalEditor.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +16 -2
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts +7 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +65 -0
- package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -0
- package/dist/lexical/ui/icons/H3/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H3/index.js +13 -6
- package/dist/lexical/ui/icons/H3/index.js.map +1 -1
- package/dist/lexical/ui/icons/H4/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H4/index.js +13 -6
- package/dist/lexical/ui/icons/H4/index.js.map +1 -1
- package/dist/lexical/ui/icons/H5/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H5/index.js +13 -6
- package/dist/lexical/ui/icons/H5/index.js.map +1 -1
- package/dist/lexical/ui/icons/H6/index.d.ts.map +1 -1
- package/dist/lexical/ui/icons/H6/index.js +13 -6
- package/dist/lexical/ui/icons/H6/index.js.map +1 -1
- package/dist/utilities/upgradeLexicalData/index.js +6 -3
- package/dist/utilities/upgradeLexicalData/index.js.map +1 -1
- package/package.json +21 -21
- package/dist/dependencyChecker.spec.js +0 -16
- package/dist/dependencyChecker.spec.js.map +0 -1
- package/dist/exports/client/Field-F22V5L4V.js +0 -2
- package/dist/exports/client/Field-F22V5L4V.js.map +0 -7
- package/dist/features/converters/lexicalToHtml/sync/alignment.spec.js +0 -92
- package/dist/features/converters/lexicalToHtml/sync/alignment.spec.js.map +0 -1
- package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js +0 -180
- package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js.map +0 -1
- package/dist/features/link/markdownTransformer.spec.js +0 -195
- package/dist/features/link/markdownTransformer.spec.js.map +0 -1
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.spec.js +0 -65
- package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.spec.js.map +0 -1
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js +0 -88
- package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +0 -1
- package/dist/lexical/utils/url.spec.js +0 -114
- package/dist/lexical/utils/url.spec.js.map +0 -1
- package/dist/utilities/jsx/jsx.spec.js +0 -178
- package/dist/utilities/jsx/jsx.spec.js.map +0 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { $getNodeByKey, COMMAND_PRIORITY_HIGH, KEY_ENTER_COMMAND, SKIP_DOM_SELECTION_TAG } from 'lexical';
|
|
2
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
+
export function useBlockReordering({
|
|
4
|
+
editor,
|
|
5
|
+
nodeKey
|
|
6
|
+
}) {
|
|
7
|
+
const [targetIndex, setTargetIndex] = useState(null);
|
|
8
|
+
const targetRef = useRef(null);
|
|
9
|
+
const isPointerDownRef = useRef(false);
|
|
10
|
+
const cancelAfterPointerRef = useRef(false);
|
|
11
|
+
const isReordering = targetIndex !== null;
|
|
12
|
+
useEffect(() => editor.registerCommand(KEY_ENTER_COMMAND, event => {
|
|
13
|
+
const target = event?.target;
|
|
14
|
+
// Leave Enter to the menu controls instead of editing the retained text selection.
|
|
15
|
+
return target instanceof HTMLElement && Boolean(editor.getElementByKey(nodeKey)?.contains(target)) && Boolean(target.closest('.collapsible__actions button'));
|
|
16
|
+
}, COMMAND_PRIORITY_HIGH), [editor, nodeKey]);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (!isReordering) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
let cancelTimer;
|
|
22
|
+
const onPointerDown = () => {
|
|
23
|
+
isPointerDownRef.current = true;
|
|
24
|
+
};
|
|
25
|
+
const onPointerUp = () => {
|
|
26
|
+
isPointerDownRef.current = false;
|
|
27
|
+
if (cancelAfterPointerRef.current) {
|
|
28
|
+
// Let the click fire before restoring the preview's original positions.
|
|
29
|
+
cancelTimer = setTimeout(() => {
|
|
30
|
+
targetRef.current = null;
|
|
31
|
+
setTargetIndex(null);
|
|
32
|
+
}, 0);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
document.addEventListener('pointerdown', onPointerDown, true);
|
|
36
|
+
document.addEventListener('pointerup', onPointerUp, true);
|
|
37
|
+
document.addEventListener('pointercancel', onPointerUp, true);
|
|
38
|
+
return () => {
|
|
39
|
+
document.removeEventListener('pointerdown', onPointerDown, true);
|
|
40
|
+
document.removeEventListener('pointerup', onPointerUp, true);
|
|
41
|
+
document.removeEventListener('pointercancel', onPointerUp, true);
|
|
42
|
+
clearTimeout(cancelTimer);
|
|
43
|
+
isPointerDownRef.current = false;
|
|
44
|
+
cancelAfterPointerRef.current = false;
|
|
45
|
+
};
|
|
46
|
+
}, [isReordering]);
|
|
47
|
+
useLayoutEffect(() => {
|
|
48
|
+
if (targetIndex === null) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const restore = [];
|
|
52
|
+
editor.getEditorState().read(() => {
|
|
53
|
+
const node = $getNodeByKey(nodeKey);
|
|
54
|
+
const siblings = node?.getParent()?.getChildren();
|
|
55
|
+
const currentIndex = node?.getIndexWithinParent();
|
|
56
|
+
if (!siblings || currentIndex === undefined || currentIndex === targetIndex) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const elements = siblings.map(sibling => editor.getElementByKey(sibling.getKey()));
|
|
60
|
+
const source = elements[currentIndex];
|
|
61
|
+
const target = elements[targetIndex];
|
|
62
|
+
const adjacent = elements[currentIndex + (targetIndex > currentIndex ? 1 : -1)];
|
|
63
|
+
if (!source || !target || !adjacent) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const sourceRect = source.getBoundingClientRect();
|
|
67
|
+
const targetRect = target.getBoundingClientRect();
|
|
68
|
+
const adjacentRect = adjacent.getBoundingClientRect();
|
|
69
|
+
const isMovingDown = targetIndex > currentIndex;
|
|
70
|
+
const sourceOffset = isMovingDown ? targetRect.bottom - sourceRect.bottom : targetRect.top - sourceRect.top;
|
|
71
|
+
const siblingOffset = isMovingDown ? sourceRect.top - adjacentRect.top : sourceRect.bottom - adjacentRect.bottom;
|
|
72
|
+
// Preview the pending order without committing an editor change until drop.
|
|
73
|
+
for (let index = Math.min(currentIndex, targetIndex); index <= Math.max(currentIndex, targetIndex); index++) {
|
|
74
|
+
const element = elements[index];
|
|
75
|
+
if (element) {
|
|
76
|
+
const translate = element.style.translate;
|
|
77
|
+
restore.push(() => {
|
|
78
|
+
element.style.translate = translate;
|
|
79
|
+
});
|
|
80
|
+
element.style.translate = `0 ${index === currentIndex ? sourceOffset : siblingOffset}px`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
source.querySelector('.collapsible__drag')?.scrollIntoView({
|
|
84
|
+
block: 'nearest'
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return () => restore.forEach(reset => reset());
|
|
88
|
+
}, [editor, nodeKey, targetIndex]);
|
|
89
|
+
const move = useCallback(({
|
|
90
|
+
direction,
|
|
91
|
+
index
|
|
92
|
+
}) => {
|
|
93
|
+
if (!editor.isEditable()) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
editor.update(() => {
|
|
97
|
+
const node = $getNodeByKey(nodeKey);
|
|
98
|
+
const siblings = node?.getParent()?.getChildren();
|
|
99
|
+
if (!node || !siblings) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const currentIndex = node.getIndexWithinParent();
|
|
103
|
+
const destination = index ?? currentIndex + (direction ?? 0);
|
|
104
|
+
const target = siblings[destination];
|
|
105
|
+
if (target && target !== node) {
|
|
106
|
+
if (destination < currentIndex) {
|
|
107
|
+
target.insertBefore(node);
|
|
108
|
+
} else {
|
|
109
|
+
target.insertAfter(node);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}, {
|
|
113
|
+
onUpdate: () => {
|
|
114
|
+
// The block header is recreated when its row number changes.
|
|
115
|
+
requestAnimationFrame(() => {
|
|
116
|
+
const header = editor.getElementByKey(nodeKey)?.querySelector('.collapsible__toggle-wrap');
|
|
117
|
+
const focusTarget = header?.querySelector('.collapsible__drag') ?? header?.querySelector('.LexicalEditorTheme__block__actions-button');
|
|
118
|
+
focusTarget?.focus();
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
tag: SKIP_DOM_SELECTION_TAG
|
|
122
|
+
});
|
|
123
|
+
}, [editor, nodeKey]);
|
|
124
|
+
const onKeyDown = useCallback(event => {
|
|
125
|
+
if (!editor.isEditable()) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (event.key === ' ' || event.key === 'Enter') {
|
|
129
|
+
event.preventDefault();
|
|
130
|
+
event.stopPropagation();
|
|
131
|
+
if (targetRef.current === null) {
|
|
132
|
+
editor.getEditorState().read(() => {
|
|
133
|
+
targetRef.current = $getNodeByKey(nodeKey)?.getIndexWithinParent() ?? null;
|
|
134
|
+
});
|
|
135
|
+
setTargetIndex(targetRef.current);
|
|
136
|
+
} else {
|
|
137
|
+
move({
|
|
138
|
+
index: targetRef.current
|
|
139
|
+
});
|
|
140
|
+
targetRef.current = null;
|
|
141
|
+
setTargetIndex(null);
|
|
142
|
+
}
|
|
143
|
+
} else if (targetRef.current !== null) {
|
|
144
|
+
if (event.key === 'Escape' || event.key === 'Tab') {
|
|
145
|
+
targetRef.current = null;
|
|
146
|
+
setTargetIndex(null);
|
|
147
|
+
if (event.key === 'Escape') {
|
|
148
|
+
event.preventDefault();
|
|
149
|
+
event.stopPropagation();
|
|
150
|
+
}
|
|
151
|
+
} else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
|
152
|
+
event.preventDefault();
|
|
153
|
+
event.stopPropagation();
|
|
154
|
+
editor.getEditorState().read(() => {
|
|
155
|
+
const count = $getNodeByKey(nodeKey)?.getParent()?.getChildrenSize() ?? 0;
|
|
156
|
+
targetRef.current = Math.max(0, Math.min(count - 1, (targetRef.current ?? 0) + (event.key === 'ArrowDown' ? 1 : -1)));
|
|
157
|
+
});
|
|
158
|
+
setTargetIndex(targetRef.current);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}, [editor, move, nodeKey]);
|
|
162
|
+
const onBlur = useCallback(() => {
|
|
163
|
+
if (isPointerDownRef.current) {
|
|
164
|
+
cancelAfterPointerRef.current = true;
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
targetRef.current = null;
|
|
168
|
+
setTargetIndex(null);
|
|
169
|
+
}, []);
|
|
170
|
+
return {
|
|
171
|
+
isReordering,
|
|
172
|
+
move,
|
|
173
|
+
onBlur,
|
|
174
|
+
onKeyDown,
|
|
175
|
+
targetIndex
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=useBlockReordering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBlockReordering.js","names":["$getNodeByKey","COMMAND_PRIORITY_HIGH","KEY_ENTER_COMMAND","SKIP_DOM_SELECTION_TAG","useCallback","useEffect","useLayoutEffect","useRef","useState","useBlockReordering","editor","nodeKey","targetIndex","setTargetIndex","targetRef","isPointerDownRef","cancelAfterPointerRef","isReordering","registerCommand","event","target","HTMLElement","Boolean","getElementByKey","contains","closest","cancelTimer","onPointerDown","current","onPointerUp","setTimeout","document","addEventListener","removeEventListener","clearTimeout","restore","getEditorState","read","node","siblings","getParent","getChildren","currentIndex","getIndexWithinParent","undefined","elements","map","sibling","getKey","source","adjacent","sourceRect","getBoundingClientRect","targetRect","adjacentRect","isMovingDown","sourceOffset","bottom","top","siblingOffset","index","Math","min","max","element","translate","style","push","querySelector","scrollIntoView","block","forEach","reset","move","direction","isEditable","update","destination","insertBefore","insertAfter","onUpdate","requestAnimationFrame","header","focusTarget","focus","tag","onKeyDown","key","preventDefault","stopPropagation","count","getChildrenSize","onBlur"],"sources":["../../../../../src/features/blocks/client/component/useBlockReordering.ts"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\nimport type { KeyboardEvent } from 'react'\n\nimport {\n $getNodeByKey,\n COMMAND_PRIORITY_HIGH,\n KEY_ENTER_COMMAND,\n SKIP_DOM_SELECTION_TAG,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nexport function useBlockReordering({\n editor,\n nodeKey,\n}: {\n editor: LexicalEditor\n nodeKey: string\n}) {\n const [targetIndex, setTargetIndex] = useState<null | number>(null)\n const targetRef = useRef<null | number>(null)\n const isPointerDownRef = useRef(false)\n const cancelAfterPointerRef = useRef(false)\n const isReordering = targetIndex !== null\n\n useEffect(\n () =>\n editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event) => {\n const target = event?.target\n\n // Leave Enter to the menu controls instead of editing the retained text selection.\n return (\n target instanceof HTMLElement &&\n Boolean(editor.getElementByKey(nodeKey)?.contains(target)) &&\n Boolean(target.closest('.collapsible__actions button'))\n )\n },\n COMMAND_PRIORITY_HIGH,\n ),\n [editor, nodeKey],\n )\n\n useEffect(() => {\n if (!isReordering) {\n return\n }\n let cancelTimer: ReturnType<typeof setTimeout> | undefined\n const onPointerDown = () => {\n isPointerDownRef.current = true\n }\n const onPointerUp = () => {\n isPointerDownRef.current = false\n if (cancelAfterPointerRef.current) {\n // Let the click fire before restoring the preview's original positions.\n cancelTimer = setTimeout(() => {\n targetRef.current = null\n setTargetIndex(null)\n }, 0)\n }\n }\n\n document.addEventListener('pointerdown', onPointerDown, true)\n document.addEventListener('pointerup', onPointerUp, true)\n document.addEventListener('pointercancel', onPointerUp, true)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('pointerup', onPointerUp, true)\n document.removeEventListener('pointercancel', onPointerUp, true)\n clearTimeout(cancelTimer)\n isPointerDownRef.current = false\n cancelAfterPointerRef.current = false\n }\n }, [isReordering])\n\n useLayoutEffect(() => {\n if (targetIndex === null) {\n return\n }\n const restore: (() => void)[] = []\n\n editor.getEditorState().read(() => {\n const node = $getNodeByKey(nodeKey)\n const siblings = node?.getParent()?.getChildren()\n const currentIndex = node?.getIndexWithinParent()\n\n if (!siblings || currentIndex === undefined || currentIndex === targetIndex) {\n return\n }\n const elements = siblings.map((sibling) => editor.getElementByKey(sibling.getKey()))\n const source = elements[currentIndex]\n const target = elements[targetIndex]\n const adjacent = elements[currentIndex + (targetIndex > currentIndex ? 1 : -1)]\n\n if (!source || !target || !adjacent) {\n return\n }\n const sourceRect = source.getBoundingClientRect()\n const targetRect = target.getBoundingClientRect()\n const adjacentRect = adjacent.getBoundingClientRect()\n const isMovingDown = targetIndex > currentIndex\n const sourceOffset = isMovingDown\n ? targetRect.bottom - sourceRect.bottom\n : targetRect.top - sourceRect.top\n const siblingOffset = isMovingDown\n ? sourceRect.top - adjacentRect.top\n : sourceRect.bottom - adjacentRect.bottom\n\n // Preview the pending order without committing an editor change until drop.\n for (\n let index = Math.min(currentIndex, targetIndex);\n index <= Math.max(currentIndex, targetIndex);\n index++\n ) {\n const element = elements[index]\n\n if (element) {\n const translate = element.style.translate\n\n restore.push(() => {\n element.style.translate = translate\n })\n element.style.translate = `0 ${index === currentIndex ? sourceOffset : siblingOffset}px`\n }\n }\n source.querySelector('.collapsible__drag')?.scrollIntoView({ block: 'nearest' })\n })\n\n return () => restore.forEach((reset) => reset())\n }, [editor, nodeKey, targetIndex])\n\n const move = useCallback(\n ({ direction, index }: { direction?: -1 | 1; index?: number }) => {\n if (!editor.isEditable()) {\n return\n }\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey)\n const siblings = node?.getParent()?.getChildren()\n\n if (!node || !siblings) {\n return\n }\n const currentIndex = node.getIndexWithinParent()\n const destination = index ?? currentIndex + (direction ?? 0)\n const target = siblings[destination]\n\n if (target && target !== node) {\n if (destination < currentIndex) {\n target.insertBefore(node)\n } else {\n target.insertAfter(node)\n }\n }\n },\n {\n onUpdate: () => {\n // The block header is recreated when its row number changes.\n requestAnimationFrame(() => {\n const header = editor\n .getElementByKey(nodeKey)\n ?.querySelector('.collapsible__toggle-wrap')\n const focusTarget =\n header?.querySelector<HTMLElement>('.collapsible__drag') ??\n header?.querySelector<HTMLElement>('.LexicalEditorTheme__block__actions-button')\n\n focusTarget?.focus()\n })\n },\n tag: SKIP_DOM_SELECTION_TAG,\n },\n )\n },\n [editor, nodeKey],\n )\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!editor.isEditable()) {\n return\n }\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n event.stopPropagation()\n if (targetRef.current === null) {\n editor.getEditorState().read(() => {\n targetRef.current = $getNodeByKey(nodeKey)?.getIndexWithinParent() ?? null\n })\n setTargetIndex(targetRef.current)\n } else {\n move({ index: targetRef.current })\n targetRef.current = null\n setTargetIndex(null)\n }\n } else if (targetRef.current !== null) {\n if (event.key === 'Escape' || event.key === 'Tab') {\n targetRef.current = null\n setTargetIndex(null)\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n }\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault()\n event.stopPropagation()\n editor.getEditorState().read(() => {\n const count = $getNodeByKey(nodeKey)?.getParent()?.getChildrenSize() ?? 0\n targetRef.current = Math.max(\n 0,\n Math.min(count - 1, (targetRef.current ?? 0) + (event.key === 'ArrowDown' ? 1 : -1)),\n )\n })\n setTargetIndex(targetRef.current)\n }\n }\n },\n [editor, move, nodeKey],\n )\n\n const onBlur = useCallback(() => {\n if (isPointerDownRef.current) {\n cancelAfterPointerRef.current = true\n return\n }\n targetRef.current = null\n setTargetIndex(null)\n }, [])\n\n return { isReordering, move, onBlur, onKeyDown, targetIndex }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","
|
|
1
|
+
{"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","HeadingHTMLConverterAsync","heading","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/heading.ts"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js'\n\nexport const HeadingHTMLConverterAsync: HTMLConvertersAsync<SerializedHeadingNode> = {\n heading: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n const tag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1'\n\n return `<${tag}${providedStyleTag}>${children}</${tag}>`\n },\n}\n"],"mappings":"AAGA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,yBAAA,GAAwE;EACnFC,OAAA,EAAS,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IACrD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,MAAMC,GAAA,GAAMT,oBAAA,CAAqBU,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAE5D,OAAO,IAAIA,GAAA,GAAMJ,gBAAA,IAAoBC,QAAA,KAAaG,GAAA,GAAM;EAC1D;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMtD,eAAO,MAAM,sBAAsB,EAAE,mBAAmB,CACtD,sBAAsB,GAAG,kBAAkB,CAiD5C,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import escapeHTML from 'escape-html';
|
|
1
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
-
|
|
3
|
+
import { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js';
|
|
3
4
|
const ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number']);
|
|
4
5
|
export const ListHTMLConverterAsync = {
|
|
5
6
|
list: async ({
|
|
@@ -32,7 +33,7 @@ export const ListHTMLConverterAsync = {
|
|
|
32
33
|
role="checkbox"
|
|
33
34
|
style="list-style-type: none;${providedCSSString}"
|
|
34
35
|
tabIndex="-1"
|
|
35
|
-
value="${node.value}"
|
|
36
|
+
value="${escapeHTML(String(node.value))}"
|
|
36
37
|
>
|
|
37
38
|
${hasSubLists ? children : `<input${node.checked ? ' checked' : ''} id="${uuid}" readOnly="true" type="checkbox" />
|
|
38
39
|
<label htmlFor="${uuid}">${children}</label>
|
|
@@ -42,7 +43,7 @@ export const ListHTMLConverterAsync = {
|
|
|
42
43
|
return `<li
|
|
43
44
|
class="${hasSubLists ? 'nestedListItem' : ''}"
|
|
44
45
|
style="${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}"
|
|
45
|
-
value="${node.value}"
|
|
46
|
+
value="${escapeHTML(String(node.value))}"
|
|
46
47
|
>${children}</li>`;
|
|
47
48
|
}
|
|
48
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","names":["v4","uuidv4","ALLOWED_LIST_TAGS","
|
|
1
|
+
{"version":3,"file":"list.js","names":["escapeHTML","v4","uuidv4","ALLOWED_LIST_TAGS","ALLOWED_LIST_TYPES","Set","ListHTMLConverterAsync","list","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has","listType","listitem","parent","providedCSSString","hasSubLists","some","child","type","uuid","checked","String","value"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nimport { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js'\n\nconst ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number'])\n\nexport const ListHTMLConverterAsync: HTMLConvertersAsync<\n SerializedListItemNode | SerializedListNode\n> = {\n list: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n const tag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul'\n const listType = ALLOWED_LIST_TYPES.has(node.listType) ? node.listType : 'bullet'\n\n return `<${tag}${providedStyleTag} class=\"list-${listType}\">${children}</${tag}>`\n },\n listitem: async ({ node, nodesToHTML, parent, providedCSSString }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n return `<li\n aria-checked=\"${node.checked ? 'true' : 'false'}\"\n class=\"list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}\"\n role=\"checkbox\"\n style=\"list-style-type: none;${providedCSSString}\"\n tabIndex=\"-1\"\n value=\"${escapeHTML(String(node.value))}\"\n >\n ${\n hasSubLists\n ? children\n : `<input${node.checked ? ' checked' : ''} id=\"${uuid}\" readOnly=\"true\" type=\"checkbox\" />\n <label htmlFor=\"${uuid}\">${children}</label>\n <br />`\n }\n </li>`\n } else {\n return `<li\n class=\"${hasSubLists ? 'nestedListItem' : ''}\"\n style=\"${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}\"\n value=\"${escapeHTML(String(node.value))}\"\n >${children}</li>`\n }\n },\n}\n"],"mappings":"AAAA,OAAOA,UAAA,MAAgB;AACvB,SAASC,EAAA,IAAMC,MAAM,QAAQ;AAK7B,SAASC,iBAAiB,QAAQ;AAElC,MAAMC,kBAAA,GAAqB,IAAIC,GAAA,CAAI,CAAC,UAAU,SAAS,SAAS;AAEhE,OAAO,MAAMC,sBAAA,GAET;EACFC,IAAA,EAAM,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAClD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,MAAMC,GAAA,GAAMX,iBAAA,CAAkBY,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IACzD,MAAME,QAAA,GAAWZ,kBAAA,CAAmBW,GAAG,CAACP,IAAA,CAAKQ,QAAQ,IAAIR,IAAA,CAAKQ,QAAQ,GAAG;IAEzE,OAAO,IAAIF,GAAA,GAAMJ,gBAAA,gBAAgCM,QAAA,KAAaL,QAAA,KAAaG,GAAA,GAAM;EACnF;EACAG,QAAA,EAAU,MAAAA,CAAO;IAAET,IAAI;IAAEC,WAAW;IAAES,MAAM;IAAEC;EAAiB,CAAE;IAC/D,MAAMC,WAAA,GAAcZ,IAAA,CAAKG,QAAQ,CAACU,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMZ,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,IAAI,cAAcK,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMQ,IAAA,GAAOtB,MAAA;MACb,OAAO;0BACaM,IAAA,CAAKiB,OAAO,GAAG,SAAS;qCACbjB,IAAA,CAAKiB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB;;yCAE/GD,iBAAA;;mBAEtBnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;;YAGnCP,WAAA,GACIT,QAAA,GACA,SAASH,IAAA,CAAKiB,OAAO,GAAG,aAAa,UAAUD,IAAA;8BACjCA,IAAA,KAASb,QAAA;mBACpB;cAEL;IACV,OAAO;MACL,OAAO;mBACMS,WAAA,GAAc,mBAAmB;mBACjCA,WAAA,GAAc,yBAAyBD,iBAAA,EAAmB,GAAGA,iBAAA;mBAC7DnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;WACpChB,QAAA,OAAe;IACtB;EACF;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","
|
|
1
|
+
{"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","HeadingHTMLConverter","heading","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/heading.ts"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConverters } from '../types.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js'\n\nexport const HeadingHTMLConverter: HTMLConverters<SerializedHeadingNode> = {\n heading: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n const tag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1'\n\n return `<${tag}${providedStyleTag}>${children}</${tag}>`\n },\n}\n"],"mappings":"AAGA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,oBAAA,GAA8D;EACzEC,OAAA,EAASA,CAAC;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAC/C,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,MAAMC,GAAA,GAAMT,oBAAA,CAAqBU,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAE5D,OAAO,IAAIA,GAAA,GAAMJ,gBAAA,IAAoBC,QAAA,KAAaG,GAAA,GAAM;EAC1D;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/list.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAMjD,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,sBAAsB,GAAG,kBAAkB,CA4CzF,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import escapeHTML from 'escape-html';
|
|
1
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
-
|
|
3
|
+
import { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js';
|
|
3
4
|
const ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number']);
|
|
4
5
|
export const ListHTMLConverter = {
|
|
5
6
|
list: ({
|
|
@@ -32,7 +33,7 @@ export const ListHTMLConverter = {
|
|
|
32
33
|
role="checkbox"
|
|
33
34
|
style="list-style-type: none;${providedCSSString}"
|
|
34
35
|
tabIndex="-1"
|
|
35
|
-
value="${node.value}"
|
|
36
|
+
value="${escapeHTML(String(node.value))}"
|
|
36
37
|
>
|
|
37
38
|
${hasSubLists ? children : `<input${node.checked ? ' checked' : ''} id="${uuid}" readOnly="true" type="checkbox" />
|
|
38
39
|
<label htmlFor="${uuid}">${children}</label>
|
|
@@ -42,7 +43,7 @@ export const ListHTMLConverter = {
|
|
|
42
43
|
return `<li
|
|
43
44
|
class="${hasSubLists ? 'nestedListItem' : ''}"
|
|
44
45
|
style="${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}"
|
|
45
|
-
value="${node.value}"
|
|
46
|
+
value="${escapeHTML(String(node.value))}"
|
|
46
47
|
>${children}</li>`;
|
|
47
48
|
}
|
|
48
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","names":["v4","uuidv4","ALLOWED_LIST_TAGS","
|
|
1
|
+
{"version":3,"file":"list.js","names":["escapeHTML","v4","uuidv4","ALLOWED_LIST_TAGS","ALLOWED_LIST_TYPES","Set","ListHTMLConverter","list","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has","listType","listitem","parent","providedCSSString","hasSubLists","some","child","type","uuid","checked","String","value"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/list.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConverters } from '../types.js'\n\nimport { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js'\n\nconst ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number'])\n\nexport const ListHTMLConverter: HTMLConverters<SerializedListItemNode | SerializedListNode> = {\n list: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n const tag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul'\n const listType = ALLOWED_LIST_TYPES.has(node.listType) ? node.listType : 'bullet'\n\n return `<${tag}${providedStyleTag} class=\"list-${listType}\">${children}</${tag}>`\n },\n listitem: ({ node, nodesToHTML, parent, providedCSSString }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n return `<li\n aria-checked=\"${node.checked ? 'true' : 'false'}\"\n class=\"list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}\"\n role=\"checkbox\"\n style=\"list-style-type: none;${providedCSSString}\"\n tabIndex=\"-1\"\n value=\"${escapeHTML(String(node.value))}\"\n >\n ${\n hasSubLists\n ? children\n : `<input${node.checked ? ' checked' : ''} id=\"${uuid}\" readOnly=\"true\" type=\"checkbox\" />\n <label htmlFor=\"${uuid}\">${children}</label>\n <br />`\n }\n </li>`\n } else {\n return `<li\n class=\"${hasSubLists ? 'nestedListItem' : ''}\"\n style=\"${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}\"\n value=\"${escapeHTML(String(node.value))}\"\n >${children}</li>`\n }\n },\n}\n"],"mappings":"AAAA,OAAOA,UAAA,MAAgB;AACvB,SAASC,EAAA,IAAMC,MAAM,QAAQ;AAK7B,SAASC,iBAAiB,QAAQ;AAElC,MAAMC,kBAAA,GAAqB,IAAIC,GAAA,CAAI,CAAC,UAAU,SAAS,SAAS;AAEhE,OAAO,MAAMC,iBAAA,GAAiF;EAC5FC,IAAA,EAAMA,CAAC;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAC5C,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,MAAMC,GAAA,GAAMX,iBAAA,CAAkBY,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IACzD,MAAME,QAAA,GAAWZ,kBAAA,CAAmBW,GAAG,CAACP,IAAA,CAAKQ,QAAQ,IAAIR,IAAA,CAAKQ,QAAQ,GAAG;IAEzE,OAAO,IAAIF,GAAA,GAAMJ,gBAAA,gBAAgCM,QAAA,KAAaL,QAAA,KAAaG,GAAA,GAAM;EACnF;EACAG,QAAA,EAAUA,CAAC;IAAET,IAAI;IAAEC,WAAW;IAAES,MAAM;IAAEC;EAAiB,CAAE;IACzD,MAAMC,WAAA,GAAcZ,IAAA,CAAKG,QAAQ,CAACU,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMZ,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,IAAI,cAAcK,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMQ,IAAA,GAAOtB,MAAA;MACb,OAAO;0BACaM,IAAA,CAAKiB,OAAO,GAAG,SAAS;qCACbjB,IAAA,CAAKiB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB;;yCAE/GD,iBAAA;;mBAEtBnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;;YAGnCP,WAAA,GACIT,QAAA,GACA,SAASH,IAAA,CAAKiB,OAAO,GAAG,aAAa,UAAUD,IAAA;8BACjCA,IAAA,KAASb,QAAA;mBACpB;cAEL;IACV,OAAO;MACL,OAAO;mBACMS,WAAA,GAAc,mBAAmB;mBACjCA,WAAA,GAAc,yBAAyBD,iBAAA,EAAmB,GAAGA,iBAAA;mBAC7DnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;WACpChB,QAAA,OAAe;IACtB;EACF;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/heading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/heading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIhD,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,qBAAqB,CAUpE,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js';
|
|
2
3
|
export const HeadingJSXConverter = {
|
|
3
4
|
heading: ({
|
|
4
5
|
node,
|
|
@@ -7,7 +8,7 @@ export const HeadingJSXConverter = {
|
|
|
7
8
|
const children = nodesToJSX({
|
|
8
9
|
nodes: node.children
|
|
9
10
|
});
|
|
10
|
-
const NodeTag = node.tag;
|
|
11
|
+
const NodeTag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1';
|
|
11
12
|
return /*#__PURE__*/_jsx(NodeTag, {
|
|
12
13
|
children: children
|
|
13
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading.js","names":["HeadingJSXConverter","heading","node","nodesToJSX","children","nodes","NodeTag","tag","_jsx"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/heading.tsx"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nexport const HeadingJSXConverter: JSXConverters<SerializedHeadingNode> = {\n heading: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = node.tag\n\n return <NodeTag>{children}</NodeTag>\n },\n}\n"],"mappings":";AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","HeadingJSXConverter","heading","node","nodesToJSX","children","nodes","NodeTag","has","tag","_jsx"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/heading.tsx"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js'\n\nexport const HeadingJSXConverter: JSXConverters<SerializedHeadingNode> = {\n heading: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1'\n\n return <NodeTag>{children}</NodeTag>\n },\n}\n"],"mappings":";AAGA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,mBAAA,GAA4D;EACvEC,OAAA,EAASA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IAC5B,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAME,OAAA,GAAUP,oBAAA,CAAqBQ,GAAG,CAACL,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAEhE,oBAAOC,IAAA,CAACH,OAAA;gBAASF;;EACnB;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIhD,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,sBAAsB,GAAG,kBAAkB,CAqDvF,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
import { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js';
|
|
3
4
|
export const ListJSXConverter = {
|
|
4
5
|
list: ({
|
|
5
6
|
node,
|
|
@@ -8,7 +9,7 @@ export const ListJSXConverter = {
|
|
|
8
9
|
const children = nodesToJSX({
|
|
9
10
|
nodes: node.children
|
|
10
11
|
});
|
|
11
|
-
const NodeTag = node.tag;
|
|
12
|
+
const NodeTag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul';
|
|
12
13
|
return /*#__PURE__*/_jsx(NodeTag, {
|
|
13
14
|
className: `list-${node?.listType}`,
|
|
14
15
|
children: children
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","names":["v4","uuidv4","ListJSXConverter","list","node","nodesToJSX","children","nodes","NodeTag","tag","_jsx","className","listType","listitem","parent","hasSubLists","some","child","type","uuid","checked","role","style","listStyleType","tabIndex","value","_jsxs","_Fragment","id","readOnly","htmlFor","undefined"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/list.tsx"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nexport const ListJSXConverter: JSXConverters<SerializedListItemNode | SerializedListNode> = {\n list: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = node.tag\n\n return <NodeTag className={`list-${node?.listType}`}>{children}</NodeTag>\n },\n listitem: ({ node, nodesToJSX, parent }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n\n return (\n <li\n aria-checked={node.checked ? 'true' : 'false'}\n className={`list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}`}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n role=\"checkbox\"\n style={{ listStyleType: 'none' }}\n tabIndex={-1}\n value={node?.value}\n >\n {hasSubLists ? (\n children\n ) : (\n <>\n <input checked={node.checked} id={uuid} readOnly={true} type=\"checkbox\" />\n <label htmlFor={uuid}>{children}</label>\n <br />\n </>\n )}\n </li>\n )\n } else {\n return (\n <li\n className={`${hasSubLists ? 'nestedListItem' : ''}`}\n style={hasSubLists ? { listStyleType: 'none' } : undefined}\n value={node?.value}\n >\n {children}\n </li>\n )\n }\n },\n}\n"],"mappings":";AAAA,SAASA,EAAA,IAAMC,MAAM,QAAQ;AAK7B,OAAO,MAAMC,gBAAA,GAA+E;EAC1FC,IAAA,EAAMA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IACzB,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAME,OAAA,
|
|
1
|
+
{"version":3,"file":"list.js","names":["v4","uuidv4","ALLOWED_LIST_TAGS","ListJSXConverter","list","node","nodesToJSX","children","nodes","NodeTag","has","tag","_jsx","className","listType","listitem","parent","hasSubLists","some","child","type","uuid","checked","role","style","listStyleType","tabIndex","value","_jsxs","_Fragment","id","readOnly","htmlFor","undefined"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/list.tsx"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nimport { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js'\n\nexport const ListJSXConverter: JSXConverters<SerializedListItemNode | SerializedListNode> = {\n list: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul'\n\n return <NodeTag className={`list-${node?.listType}`}>{children}</NodeTag>\n },\n listitem: ({ node, nodesToJSX, parent }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n\n return (\n <li\n aria-checked={node.checked ? 'true' : 'false'}\n className={`list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}`}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n role=\"checkbox\"\n style={{ listStyleType: 'none' }}\n tabIndex={-1}\n value={node?.value}\n >\n {hasSubLists ? (\n children\n ) : (\n <>\n <input checked={node.checked} id={uuid} readOnly={true} type=\"checkbox\" />\n <label htmlFor={uuid}>{children}</label>\n <br />\n </>\n )}\n </li>\n )\n } else {\n return (\n <li\n className={`${hasSubLists ? 'nestedListItem' : ''}`}\n style={hasSubLists ? { listStyleType: 'none' } : undefined}\n value={node?.value}\n >\n {children}\n </li>\n )\n }\n },\n}\n"],"mappings":";AAAA,SAASA,EAAA,IAAMC,MAAM,QAAQ;AAK7B,SAASC,iBAAiB,QAAQ;AAElC,OAAO,MAAMC,gBAAA,GAA+E;EAC1FC,IAAA,EAAMA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IACzB,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAME,OAAA,GAAUP,iBAAA,CAAkBQ,GAAG,CAACL,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAE7D,oBAAOC,IAAA,CAACH,OAAA;MAAQI,SAAA,EAAW,QAAQR,IAAA,EAAMS,QAAA,EAAU;gBAAGP;;EACxD;EACAQ,QAAA,EAAUA,CAAC;IAAEV,IAAI;IAAEC,UAAU;IAAEU;EAAM,CAAE;IACrC,MAAMC,WAAA,GAAcZ,IAAA,CAAKE,QAAQ,CAACW,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMb,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,IAAI,cAAcS,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMO,IAAA,GAAOpB,MAAA;MAEb,oBACEW,IAAA,CAAC;QACC,gBAAcP,IAAA,CAAKiB,OAAO,GAAG,SAAS;QACtCT,SAAA,EAAW,qBAAqBR,IAAA,CAAKiB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB,IAAI;QACvJ;QACAM,IAAA,EAAK;QACLC,KAAA,EAAO;UAAEC,aAAA,EAAe;QAAO;QAC/BC,QAAA,EAAU,CAAC;QACXC,KAAA,EAAOtB,IAAA,EAAMsB,KAAA;kBAEZV,WAAA,GACCV,QAAA,gBAEAqB,KAAA,CAAAC,SAAA;kCACEjB,IAAA,CAAC;YAAMU,OAAA,EAASjB,IAAA,CAAKiB,OAAO;YAAEQ,EAAA,EAAIT,IAAA;YAAMU,QAAA,EAAU;YAAMX,IAAA,EAAK;2BAC7DR,IAAA,CAAC;YAAMoB,OAAA,EAASX,IAAA;sBAAOd;2BACvBK,IAAA,CAAC;;;IAKX,OAAO;MACL,oBACEA,IAAA,CAAC;QACCC,SAAA,EAAW,GAAGI,WAAA,GAAc,mBAAmB,IAAI;QACnDO,KAAA,EAAOP,WAAA,GAAc;UAAEQ,aAAA,EAAe;QAAO,IAAIQ,SAAA;QACjDN,KAAA,EAAOtB,IAAA,EAAMsB,KAAA;kBAEZpB;;IAGP;EACF;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloadPopulateFn.d.ts","sourceRoot":"","sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"payloadPopulateFn.d.ts","sourceRoot":"","sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAEnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAIrE,eAAO,MAAM,oBAAoB,EAAE,CACjC,IAAI,EAAE;IACJ,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,GAAG,CACA;IACE;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;CACZ,GACD;IACE;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAA;IACf;;;OAGG;IACH,GAAG,EAAE,cAAc,CAAA;CACpB,CACJ,KACE,OAAO,CAAC,cAAc,CAyC1B,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createPayloadRequest } from 'payload';
|
|
2
2
|
import { populate } from '../../../populateGraphQL/populate.js';
|
|
3
3
|
export const getPayloadPopulateFn = async ({
|
|
4
4
|
currentDepth,
|
|
@@ -11,7 +11,9 @@ export const getPayloadPopulateFn = async ({
|
|
|
11
11
|
}) => {
|
|
12
12
|
let reqToUse = req;
|
|
13
13
|
if (req === undefined && payload) {
|
|
14
|
-
reqToUse = await
|
|
14
|
+
reqToUse = await createPayloadRequest({
|
|
15
|
+
payload
|
|
16
|
+
});
|
|
15
17
|
}
|
|
16
18
|
if (!reqToUse) {
|
|
17
19
|
throw new Error('No req or payload provided');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloadPopulateFn.js","names":["
|
|
1
|
+
{"version":3,"file":"payloadPopulateFn.js","names":["createPayloadRequest","populate","getPayloadPopulateFn","currentDepth","depth","draft","overrideAccess","payload","req","showHiddenFields","reqToUse","undefined","Error","populateFn","id","collectionSlug","select","dataContainer","data","key","value"],"sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"sourcesContent":["import { createPayloadRequest, type Payload, type PayloadRequest, type TypedLocale } from 'payload'\n\nimport type { HTMLPopulateFn } from '../lexicalToHtml/async/types.js'\n\nimport { populate } from '../../../populateGraphQL/populate.js'\n\nexport const getPayloadPopulateFn: (\n args: {\n currentDepth: number\n depth: number\n draft?: boolean\n locale?: TypedLocale\n\n overrideAccess?: boolean\n showHiddenFields?: boolean\n } & (\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload: Payload\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req?: never\n }\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload?: never\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req: PayloadRequest\n }\n ),\n) => Promise<HTMLPopulateFn> = async ({\n currentDepth,\n depth,\n draft,\n overrideAccess,\n payload,\n req,\n showHiddenFields,\n}) => {\n let reqToUse: PayloadRequest | undefined = req\n if (req === undefined && payload) {\n reqToUse = await createPayloadRequest({ payload })\n }\n\n if (!reqToUse) {\n throw new Error('No req or payload provided')\n }\n\n const populateFn: HTMLPopulateFn = async ({ id, collectionSlug, select }) => {\n const dataContainer: {\n value?: any\n } = {}\n\n await populate({\n id,\n collectionSlug,\n currentDepth,\n data: dataContainer,\n depth,\n draft: draft ?? false,\n key: 'value',\n overrideAccess: overrideAccess ?? true,\n req: reqToUse,\n select,\n showHiddenFields: showHiddenFields ?? false,\n })\n\n return dataContainer.value\n }\n\n return populateFn\n}\n"],"mappings":"AAAA,SAASA,oBAAoB,QAA6D;AAI1F,SAASC,QAAQ,QAAQ;AAEzB,OAAO,MAAMC,oBAAA,GAiCkB,MAAAA,CAAO;EACpCC,YAAY;EACZC,KAAK;EACLC,KAAK;EACLC,cAAc;EACdC,OAAO;EACPC,GAAG;EACHC;AAAgB,CACjB;EACC,IAAIC,QAAA,GAAuCF,GAAA;EAC3C,IAAIA,GAAA,KAAQG,SAAA,IAAaJ,OAAA,EAAS;IAChCG,QAAA,GAAW,MAAMV,oBAAA,CAAqB;MAAEO;IAAQ;EAClD;EAEA,IAAI,CAACG,QAAA,EAAU;IACb,MAAM,IAAIE,KAAA,CAAM;EAClB;EAEA,MAAMC,UAAA,GAA6B,MAAAA,CAAO;IAAEC,EAAE;IAAEC,cAAc;IAAEC;EAAM,CAAE;IACtE,MAAMC,aAAA,GAEF,CAAC;IAEL,MAAMhB,QAAA,CAAS;MACba,EAAA;MACAC,cAAA;MACAZ,YAAA;MACAe,IAAA,EAAMD,aAAA;MACNb,KAAA;MACAC,KAAA,EAAOA,KAAA,IAAS;MAChBc,GAAA,EAAK;MACLb,cAAA,EAAgBA,cAAA,IAAkB;MAClCE,GAAA,EAAKE,QAAA;MACLM,MAAA;MACAP,gBAAA,EAAkBA,gBAAA,IAAoB;IACxC;IAEA,OAAOQ,aAAA,CAAcG,KAAK;EAC5B;EAEA,OAAOP,UAAA;AACT","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/features/heading/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,aAAgD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":["ALLOWED_HEADING_TAGS","Set"],"sources":["../../../src/features/heading/constants.ts"],"sourcesContent":["export const ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n"],"mappings":"AAAA,OAAO,MAAMA,oBAAA,GAAuB,IAAIC,GAAA,CAAI,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/heading/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/heading/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAWxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mBAAmB,CAAC,EAAE,cAAc,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,cAAc,6HA+BzB,CAAA"}
|
|
@@ -4,6 +4,7 @@ import { createNode } from '../../typeUtilities.js';
|
|
|
4
4
|
import { PAYLOAD_HEADING } from '../markdownTransformer.js';
|
|
5
5
|
import { i18n } from './i18n.js';
|
|
6
6
|
import { createHeadingJSONSchema } from './schema.js';
|
|
7
|
+
import { headingValidation } from './validate.js';
|
|
7
8
|
export const HeadingFeature = createServerFeature({
|
|
8
9
|
feature: ({
|
|
9
10
|
props
|
|
@@ -22,7 +23,10 @@ export const HeadingFeature = createServerFeature({
|
|
|
22
23
|
markdownTransformers: enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],
|
|
23
24
|
nodes: [createNode({
|
|
24
25
|
jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),
|
|
25
|
-
node: HeadingNode
|
|
26
|
+
node: HeadingNode,
|
|
27
|
+
validations: [headingValidation({
|
|
28
|
+
enabledHeadingSizes
|
|
29
|
+
})]
|
|
26
30
|
})],
|
|
27
31
|
sanitizedServerFeatureProps: props
|
|
28
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["HeadingNode","createServerFeature","createNode","PAYLOAD_HEADING","i18n","createHeadingJSONSchema","HeadingFeature","feature","props","enabledHeadingSizes","sort","ClientFeature","clientFeatureProps","markdownTransformers","length","nodes","jsonSchema","node","sanitizedServerFeatureProps","key"],"sources":["../../../../src/features/heading/server/index.ts"],"sourcesContent":["import type { HeadingTagType } from '@lexical/rich-text'\n\nimport { HeadingNode } from '@lexical/rich-text'\n\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { PAYLOAD_HEADING } from '../markdownTransformer.js'\nimport { i18n } from './i18n.js'\nimport { createHeadingJSONSchema } from './schema.js'\n\nexport type { SerializedHeadingNode } from './schema.js'\n\nexport type HeadingFeatureProps = {\n enabledHeadingSizes?: HeadingTagType[]\n}\n\nexport const HeadingFeature = createServerFeature<\n HeadingFeatureProps,\n HeadingFeatureProps,\n HeadingFeatureProps\n>({\n feature: ({ props }) => {\n if (!props) {\n props = {}\n }\n\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n enabledHeadingSizes.sort()\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#HeadingFeatureClient',\n clientFeatureProps: props,\n i18n,\n markdownTransformers:\n enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],\n nodes: [\n createNode({\n jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),\n node: HeadingNode,\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'heading',\n})\n"],"mappings":"AAEA,SAASA,WAAW,QAAQ;AAE5B,SAASC,mBAAmB,QAAQ;AACpC,SAASC,UAAU,QAAQ;AAC3B,SAASC,eAAe,QAAQ;AAChC,SAASC,IAAI,QAAQ;AACrB,SAASC,uBAAuB,QAAQ;
|
|
1
|
+
{"version":3,"file":"index.js","names":["HeadingNode","createServerFeature","createNode","PAYLOAD_HEADING","i18n","createHeadingJSONSchema","headingValidation","HeadingFeature","feature","props","enabledHeadingSizes","sort","ClientFeature","clientFeatureProps","markdownTransformers","length","nodes","jsonSchema","node","validations","sanitizedServerFeatureProps","key"],"sources":["../../../../src/features/heading/server/index.ts"],"sourcesContent":["import type { HeadingTagType } from '@lexical/rich-text'\n\nimport { HeadingNode } from '@lexical/rich-text'\n\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { PAYLOAD_HEADING } from '../markdownTransformer.js'\nimport { i18n } from './i18n.js'\nimport { createHeadingJSONSchema } from './schema.js'\nimport { headingValidation } from './validate.js'\n\nexport type { SerializedHeadingNode } from './schema.js'\n\nexport type HeadingFeatureProps = {\n enabledHeadingSizes?: HeadingTagType[]\n}\n\nexport const HeadingFeature = createServerFeature<\n HeadingFeatureProps,\n HeadingFeatureProps,\n HeadingFeatureProps\n>({\n feature: ({ props }) => {\n if (!props) {\n props = {}\n }\n\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n enabledHeadingSizes.sort()\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#HeadingFeatureClient',\n clientFeatureProps: props,\n i18n,\n markdownTransformers:\n enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],\n nodes: [\n createNode({\n jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),\n node: HeadingNode,\n validations: [headingValidation({ enabledHeadingSizes })],\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'heading',\n})\n"],"mappings":"AAEA,SAASA,WAAW,QAAQ;AAE5B,SAASC,mBAAmB,QAAQ;AACpC,SAASC,UAAU,QAAQ;AAC3B,SAASC,eAAe,QAAQ;AAChC,SAASC,IAAI,QAAQ;AACrB,SAASC,uBAAuB,QAAQ;AACxC,SAASC,iBAAiB,QAAQ;AAQlC,OAAO,MAAMC,cAAA,GAAiBN,mBAAA,CAI5B;EACAO,OAAA,EAASA,CAAC;IAAEC;EAAK,CAAE;IACjB,IAAI,CAACA,KAAA,EAAO;MACVA,KAAA,GAAQ,CAAC;IACX;IAEA,MAAM;MAAEC,mBAAA,GAAsB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM;IAAK,CAAE,GAAGD,KAAA;IAEvEC,mBAAA,CAAoBC,IAAI;IAExB,OAAO;MACLC,aAAA,EAAe;MACfC,kBAAA,EAAoBJ,KAAA;MACpBL,IAAA;MACAU,oBAAA,EACEJ,mBAAA,CAAoBK,MAAM,GAAG,IAAI,CAACZ,eAAA,CAAgBO,mBAAA,EAAqB,GAAG,EAAE;MAC9EM,KAAA,EAAO,CACLd,UAAA,CAAW;QACTe,UAAA,EAAYZ,uBAAA,CAAwBK,mBAAA;QACpCQ,IAAA,EAAMlB,WAAA;QACNmB,WAAA,EAAa,CAACb,iBAAA,CAAkB;UAAEI;QAAoB;MACxD,GACD;MACDU,2BAAA,EAA6BX;IAC/B;EACF;EACAY,GAAA,EAAK;AACP","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { HeadingTagType, SerializedHeadingNode } from '@lexical/rich-text';
|
|
2
|
+
import type { NodeValidation } from '../../typesServer.js';
|
|
3
|
+
export declare const headingValidation: ({ enabledHeadingSizes, }: {
|
|
4
|
+
enabledHeadingSizes: HeadingTagType[];
|
|
5
|
+
}) => NodeValidation<SerializedHeadingNode>;
|
|
6
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/features/heading/server/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D,eAAO,MAAM,iBAAiB,6BAE3B;IACD,mBAAmB,EAAE,cAAc,EAAE,CAAA;CACtC,KAAG,cAAc,CAAC,qBAAqB,CAcvC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ALLOWED_HEADING_TAGS } from '../constants.js';
|
|
2
|
+
export const headingValidation = ({
|
|
3
|
+
enabledHeadingSizes
|
|
4
|
+
}) => {
|
|
5
|
+
const allowedHeadingTags = new Set(enabledHeadingSizes.filter(tag => ALLOWED_HEADING_TAGS.has(tag)));
|
|
6
|
+
return ({
|
|
7
|
+
node
|
|
8
|
+
}) => {
|
|
9
|
+
if (allowedHeadingTags.has(node.tag)) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
return allowedHeadingTags.size > 0 ? `Heading tag must be one of ${Array.from(allowedHeadingTags).join(', ')}.` : 'Headings are not enabled.';
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","names":["ALLOWED_HEADING_TAGS","headingValidation","enabledHeadingSizes","allowedHeadingTags","Set","filter","tag","has","node","size","Array","from","join"],"sources":["../../../../src/features/heading/server/validate.ts"],"sourcesContent":["import type { HeadingTagType, SerializedHeadingNode } from '@lexical/rich-text'\n\nimport type { NodeValidation } from '../../typesServer.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../constants.js'\n\nexport const headingValidation = ({\n enabledHeadingSizes,\n}: {\n enabledHeadingSizes: HeadingTagType[]\n}): NodeValidation<SerializedHeadingNode> => {\n const allowedHeadingTags = new Set(\n enabledHeadingSizes.filter((tag) => ALLOWED_HEADING_TAGS.has(tag)),\n )\n\n return ({ node }) => {\n if (allowedHeadingTags.has(node.tag)) {\n return true\n }\n\n return allowedHeadingTags.size > 0\n ? `Heading tag must be one of ${Array.from(allowedHeadingTags).join(', ')}.`\n : 'Headings are not enabled.'\n }\n}\n"],"mappings":"AAIA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,iBAAA,GAAoBA,CAAC;EAChCC;AAAmB,CAGpB;EACC,MAAMC,kBAAA,GAAqB,IAAIC,GAAA,CAC7BF,mBAAA,CAAoBG,MAAM,CAAEC,GAAA,IAAQN,oBAAA,CAAqBO,GAAG,CAACD,GAAA;EAG/D,OAAO,CAAC;IAAEE;EAAI,CAAE;IACd,IAAIL,kBAAA,CAAmBI,GAAG,CAACC,IAAA,CAAKF,GAAG,GAAG;MACpC,OAAO;IACT;IAEA,OAAOH,kBAAA,CAAmBM,IAAI,GAAG,IAC7B,8BAA8BC,KAAA,CAAMC,IAAI,CAACR,kBAAA,EAAoBS,IAAI,CAAC,QAAQ,GAC1E;EACN;AACF","ignoreList":[]}
|