quoin-editor 1.8.0 → 2.0.0
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 +10 -1
- package/MIGRATION.md +137 -23
- package/README.md +8 -2
- package/dist/ai.cjs +34 -34
- package/dist/ai.js +3 -3
- package/dist/catalogue.cjs +21 -21
- package/dist/catalogue.js +12 -12
- package/dist/{chunk-VWYPO6SX.js → chunk-2UKI26JA.js} +5 -5
- package/dist/chunk-2UKI26JA.js.map +1 -0
- package/dist/{chunk-B3OBM6I4.cjs → chunk-4PIJC4FD.cjs} +16 -16
- package/dist/{chunk-5OZX2LV4.js → chunk-5X52BAZB.js} +5 -5
- package/dist/{chunk-5OZX2LV4.js.map → chunk-5X52BAZB.js.map} +1 -1
- package/dist/{chunk-PVFSJXYQ.cjs → chunk-5YAJZSTI.cjs} +18 -18
- package/dist/{chunk-53CNYRVQ.cjs → chunk-66OPHDFA.cjs} +50 -50
- package/dist/{chunk-EZX37R5D.js → chunk-6BVE46K7.js} +4 -4
- package/dist/{chunk-EZX37R5D.js.map → chunk-6BVE46K7.js.map} +1 -1
- package/dist/{chunk-MMS4D4MK.cjs → chunk-77CNOLHY.cjs} +3 -3
- package/dist/{chunk-DXUDBPG5.js → chunk-B4VCDJSA.js} +5 -5
- package/dist/{chunk-DXUDBPG5.js.map → chunk-B4VCDJSA.js.map} +1 -1
- package/dist/{chunk-4MCYQHFL.cjs → chunk-BYYCD54G.cjs} +2 -2
- package/dist/{chunk-BA5WXBGE.cjs → chunk-CJVJNMOB.cjs} +107 -101
- package/dist/{chunk-TQHFGSTT.cjs → chunk-D6CIIWCU.cjs} +30 -30
- package/dist/{chunk-NCDMQCZR.js → chunk-EU5IGKMP.js} +3 -3
- package/dist/{chunk-NCDMQCZR.js.map → chunk-EU5IGKMP.js.map} +1 -1
- package/dist/{chunk-7X3T7VXV.cjs → chunk-HOSDMHK6.cjs} +25 -25
- package/dist/{chunk-XKYNINUX.cjs → chunk-IKZSCTRF.cjs} +3 -3
- package/dist/{chunk-D4L5FINK.js → chunk-IW4TMECB.js} +3 -3
- package/dist/{chunk-D4L5FINK.js.map → chunk-IW4TMECB.js.map} +1 -1
- package/dist/{chunk-MRHDPXQ7.js → chunk-J2SVYBTC.js} +6 -6
- package/dist/chunk-J2SVYBTC.js.map +1 -0
- package/dist/{chunk-PHQMHXNG.js → chunk-KQPZTSW3.js} +4 -4
- package/dist/{chunk-PHQMHXNG.js.map → chunk-KQPZTSW3.js.map} +1 -1
- package/dist/{chunk-YVPZDTVZ.cjs → chunk-LEICOZYK.cjs} +2 -2
- package/dist/{chunk-SP4F5F6V.js → chunk-M77A3EGD.js} +3 -3
- package/dist/{chunk-SP4F5F6V.js.map → chunk-M77A3EGD.js.map} +1 -1
- package/dist/{chunk-VM567D6O.js → chunk-MAS4AEF4.js} +4 -4
- package/dist/{chunk-VM567D6O.js.map → chunk-MAS4AEF4.js.map} +1 -1
- package/dist/{chunk-EZWJRBQT.cjs → chunk-NFO3W644.cjs} +19 -19
- package/dist/{chunk-MSWA5ZZM.js → chunk-NL5J77VD.js} +202 -202
- package/dist/chunk-NL5J77VD.js.map +1 -0
- package/dist/{chunk-53FJFYBR.cjs → chunk-V4WQG7FR.cjs} +64 -64
- package/dist/{chunk-WOGCD7JN.js → chunk-YABGWOAV.js} +3 -3
- package/dist/{chunk-WOGCD7JN.js.map → chunk-YABGWOAV.js.map} +1 -1
- package/dist/{chunk-P6HC7RUN.cjs → chunk-Z6LAARPB.cjs} +199 -204
- package/dist/{chunk-Y4EJ6UBV.js → chunk-ZN5DHNSL.js} +15 -9
- package/dist/chunk-ZN5DHNSL.js.map +1 -0
- package/dist/comments.cjs +30 -30
- package/dist/comments.js +3 -3
- package/dist/diagram.cjs +6 -6
- package/dist/diagram.js +3 -3
- package/dist/embed.cjs +5 -5
- package/dist/embed.js +3 -3
- package/dist/emoji.cjs +6 -6
- package/dist/emoji.js +3 -3
- package/dist/find.cjs +7 -7
- package/dist/find.js +3 -3
- package/dist/headless.cjs +11 -31
- package/dist/headless.d.cts +4 -41
- package/dist/headless.d.ts +4 -41
- package/dist/headless.js +1 -1
- package/dist/highlight.cjs +3 -3
- package/dist/highlight.js +2 -2
- package/dist/index.cjs +23 -43
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/math.cjs +6 -6
- package/dist/math.js +4 -4
- package/dist/mention.cjs +6 -6
- package/dist/mention.js +4 -4
- package/dist/presence.cjs +12 -12
- package/dist/presence.js +3 -3
- package/dist/source.cjs +2 -2
- package/dist/source.js +2 -2
- package/dist/stats.cjs +6 -6
- package/dist/stats.js +3 -3
- package/dist/styles.css +2 -2
- package/dist/table.cjs +22 -22
- package/dist/table.js +3 -3
- package/dist/toc.cjs +6 -6
- package/dist/toc.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-MRHDPXQ7.js.map +0 -1
- package/dist/chunk-MSWA5ZZM.js.map +0 -1
- package/dist/chunk-VWYPO6SX.js.map +0 -1
- package/dist/chunk-Y4EJ6UBV.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extensions/focus/focus-decorations.ts","../src/extensions/stats/count-writing.ts","../src/extensions/limit/limit-plugin.ts","../src/extensions/stats/plain-in-code-and-math.ts","../src/extensions/stats/stats-labels.ts","../src/extensions/focus/use-focus-mode.ts","../src/extensions/limit/use-limit-announcement.ts","../src/extensions/stats/use-editor-stats.ts","../src/extensions/stats/StatsFooter.tsx","../src/extensions/stats/StatsOverlay.tsx","../src/extensions/stats/stats-extension.tsx"],"names":["characters","useEffect","jsx"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/extensions/focus/focus-decorations.ts","../src/extensions/stats/count-writing.ts","../src/extensions/limit/limit-plugin.ts","../src/extensions/stats/plain-in-code-and-math.ts","../src/extensions/stats/stats-labels.ts","../src/extensions/focus/use-focus-mode.ts","../src/extensions/limit/use-limit-announcement.ts","../src/extensions/stats/use-editor-stats.ts","../src/extensions/stats/StatsFooter.tsx","../src/extensions/stats/StatsOverlay.tsx","../src/extensions/stats/stats-extension.tsx"],"names":["characters","useEffect","jsx"],"mappings":"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","file":"chunk-YABGWOAV.js"}
|
|
@@ -25,25 +25,6 @@ function useEditorState(controller, selector, isEqual = Object.is) {
|
|
|
25
25
|
return react.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
// src/view/selection/selection-decorations.ts
|
|
29
|
-
var SELECTED = { class: "quoin-selected" };
|
|
30
|
-
function isCrossSelection(selection) {
|
|
31
|
-
if (selection?.kind !== "text") return false;
|
|
32
|
-
const { anchor, head } = selection;
|
|
33
|
-
return anchor.block !== head.block || anchor.region !== head.region;
|
|
34
|
-
}
|
|
35
|
-
function selectionDecorations(state, mode) {
|
|
36
|
-
if (mode !== "decorations" || !isCrossSelection(state.selection)) return [];
|
|
37
|
-
return chunkFK7EBZPX_cjs.markRanges(state).map(({ block, region, from, to }) => ({
|
|
38
|
-
kind: "inline",
|
|
39
|
-
block,
|
|
40
|
-
region,
|
|
41
|
-
from,
|
|
42
|
-
to,
|
|
43
|
-
attrs: SELECTED
|
|
44
|
-
}));
|
|
45
|
-
}
|
|
46
|
-
|
|
47
28
|
// src/view/dom/attributes.ts
|
|
48
29
|
var sortedEntries = (attrs) => chunkI7X7B3WD_cjs.dataAttributes(attrs, "");
|
|
49
30
|
function setAttributes(element, attrs, prefix = "") {
|
|
@@ -839,6 +820,25 @@ function caretPosAt(controller, host, x, y) {
|
|
|
839
820
|
// src/view/selection/native-interaction.ts
|
|
840
821
|
var NATIVE_INTERACTION = "data-quoin-native";
|
|
841
822
|
|
|
823
|
+
// src/view/selection/selection-decorations.ts
|
|
824
|
+
var SELECTED = { class: "quoin-selected" };
|
|
825
|
+
function isCrossSelection(selection) {
|
|
826
|
+
if (selection?.kind !== "text") return false;
|
|
827
|
+
const { anchor, head } = selection;
|
|
828
|
+
return anchor.block !== head.block || anchor.region !== head.region;
|
|
829
|
+
}
|
|
830
|
+
function selectionDecorations(state, mode) {
|
|
831
|
+
if (mode !== "decorations" || !isCrossSelection(state.selection)) return [];
|
|
832
|
+
return chunkFK7EBZPX_cjs.markRanges(state).map(({ block, region, from, to }) => ({
|
|
833
|
+
kind: "inline",
|
|
834
|
+
block,
|
|
835
|
+
region,
|
|
836
|
+
from,
|
|
837
|
+
to,
|
|
838
|
+
attrs: SELECTED
|
|
839
|
+
}));
|
|
840
|
+
}
|
|
841
|
+
|
|
842
842
|
// src/view/selection/cross-block-pointer.ts
|
|
843
843
|
var DRAGGING = "data-quoin-dragging";
|
|
844
844
|
var DRAG_DISTANCE = 4;
|
|
@@ -1035,7 +1035,7 @@ function inPlace(element, change) {
|
|
|
1035
1035
|
change();
|
|
1036
1036
|
for (const { at, left, top } of before) {
|
|
1037
1037
|
const now = scrollOf(at);
|
|
1038
|
-
if (now.left !== left || now.top !== top) at.scrollTo({ left, top, behavior: "instant" });
|
|
1038
|
+
if (now.left !== left || now.top !== top) at.scrollTo?.({ left, top, behavior: "instant" });
|
|
1039
1039
|
}
|
|
1040
1040
|
}
|
|
1041
1041
|
|
|
@@ -1156,7 +1156,7 @@ function createNodeReveal(element) {
|
|
|
1156
1156
|
show(selection, local) {
|
|
1157
1157
|
const block = nodeOf(selection);
|
|
1158
1158
|
if (block !== null && block !== pressed && (block !== shown || local && block === owed)) {
|
|
1159
|
-
element(block)?.scrollIntoView({ block: "nearest" });
|
|
1159
|
+
element(block)?.scrollIntoView?.({ block: "nearest" });
|
|
1160
1160
|
}
|
|
1161
1161
|
if (local) owed = null;
|
|
1162
1162
|
shown = block;
|
|
@@ -2158,7 +2158,7 @@ function lineInView(host, last) {
|
|
|
2158
2158
|
const line = lineEdgeRect(host, last);
|
|
2159
2159
|
const view = host.ownerDocument.defaultView;
|
|
2160
2160
|
if (!line || !view || line.top >= 0 && line.bottom <= view.innerHeight) return line;
|
|
2161
|
-
host.scrollIntoView({ block: "nearest" });
|
|
2161
|
+
host.scrollIntoView?.({ block: "nearest" });
|
|
2162
2162
|
return lineEdgeRect(host, last);
|
|
2163
2163
|
}
|
|
2164
2164
|
function caretAtGoal(controller, host, at, y) {
|
|
@@ -2781,49 +2781,17 @@ function useQuoinEditor(options) {
|
|
|
2781
2781
|
react.useEffect(() => () => controller.destroy(), [controller]);
|
|
2782
2782
|
return controller;
|
|
2783
2783
|
}
|
|
2784
|
-
function useReadOnly(controller) {
|
|
2785
|
-
const subscribe = react.useCallback((notify) => controller.subscribeReadOnly(notify), [controller]);
|
|
2786
|
-
const read = react.useCallback(() => controller.readOnly, [controller]);
|
|
2787
|
-
return react.useSyncExternalStore(subscribe, read, read);
|
|
2788
|
-
}
|
|
2789
|
-
function SelectionSink({ label = "Selected content", blockLabel }) {
|
|
2790
|
-
const controller = useViewController();
|
|
2791
|
-
const ref = react.useRef(null);
|
|
2792
|
-
const readOnly = useReadOnly(controller);
|
|
2793
|
-
const name = useEditorState(
|
|
2794
|
-
controller,
|
|
2795
|
-
react.useCallback((state) => selectedBlockName(state, blockLabel), [blockLabel])
|
|
2796
|
-
);
|
|
2797
|
-
useIsomorphicLayoutEffect(() => {
|
|
2798
|
-
const sink = ref.current;
|
|
2799
|
-
return sink ? controller.registerSink(sink) : void 0;
|
|
2800
|
-
}, [controller]);
|
|
2801
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2802
|
-
"div",
|
|
2803
|
-
{
|
|
2804
|
-
ref,
|
|
2805
|
-
contentEditable: !readOnly,
|
|
2806
|
-
suppressContentEditableWarning: true,
|
|
2807
|
-
role: "textbox",
|
|
2808
|
-
"aria-label": name || label,
|
|
2809
|
-
inputMode: name === null ? void 0 : "none",
|
|
2810
|
-
"aria-multiline": name === null ? "true" : void 0,
|
|
2811
|
-
"aria-readonly": readOnly ? "true" : void 0,
|
|
2812
|
-
tabIndex: -1,
|
|
2813
|
-
spellCheck: false,
|
|
2814
|
-
"data-quoin-sink": "",
|
|
2815
|
-
onFocus: () => {
|
|
2816
|
-
if (heldBySink(controller.editor.state.selection)) focusSink(controller);
|
|
2817
|
-
}
|
|
2818
|
-
}
|
|
2819
|
-
);
|
|
2820
|
-
}
|
|
2821
2784
|
var headingPlaceholder = (_state, { type, attrs }) => type === "MARKDOWN" && attrs.kind === "heading" ? `Heading ${chunkI7X7B3WD_cjs.headingLevel(attrs.level)}` : void 0;
|
|
2822
2785
|
var BlockPlaceholderContext = react.createContext(headingPlaceholder);
|
|
2823
2786
|
function regionPlaceholder(state, blockId, region, placeholderOf) {
|
|
2824
2787
|
const block = chunkI7X7B3WD_cjs.blockById(state.doc, blockId);
|
|
2825
2788
|
return block !== void 0 && chunkFK7EBZPX_cjs.primaryRegion(state.schema, block) === region ? placeholderOf(state, block) : void 0;
|
|
2826
2789
|
}
|
|
2790
|
+
function useReadOnly(controller) {
|
|
2791
|
+
const subscribe = react.useCallback((notify) => controller.subscribeReadOnly(notify), [controller]);
|
|
2792
|
+
const read = react.useCallback(() => controller.readOnly, [controller]);
|
|
2793
|
+
return react.useSyncExternalStore(subscribe, read, read);
|
|
2794
|
+
}
|
|
2827
2795
|
var samePainted = (a, b) => a.inline === b.inline && a.placeholder === b.placeholder && sameDecorations(a.decorations, b.decorations);
|
|
2828
2796
|
function EditableRegion({ block, region, label, id, placeholder, className }) {
|
|
2829
2797
|
const controller = useViewController();
|
|
@@ -2870,6 +2838,178 @@ function EditableRegion({ block, region, label, id, placeholder, className }) {
|
|
|
2870
2838
|
}
|
|
2871
2839
|
);
|
|
2872
2840
|
}
|
|
2841
|
+
var BLOCK_ERROR = "Block could not be drawn";
|
|
2842
|
+
var BlockErrorContext = react.createContext({ label: BLOCK_ERROR });
|
|
2843
|
+
var BlockDomIdScope = react.createContext("quoin");
|
|
2844
|
+
function useBlockDomId() {
|
|
2845
|
+
const scope = react.useContext(BlockDomIdScope);
|
|
2846
|
+
return react.useCallback((block) => `${scope}-${encodeURIComponent(block)}`, [scope]);
|
|
2847
|
+
}
|
|
2848
|
+
function useRegionDomId(block, region) {
|
|
2849
|
+
return `${useBlockDomId()(block)}/${encodeURIComponent(region)}`;
|
|
2850
|
+
}
|
|
2851
|
+
function EmptyDocumentHost({ placeholder, label = "Paragraph" }) {
|
|
2852
|
+
const controller = useViewController();
|
|
2853
|
+
const ref = react.useRef(null);
|
|
2854
|
+
const readOnly = useReadOnly(controller);
|
|
2855
|
+
useIsomorphicLayoutEffect(() => {
|
|
2856
|
+
const host = ref.current;
|
|
2857
|
+
if (host === null) return void 0;
|
|
2858
|
+
renderInline(host, [], []);
|
|
2859
|
+
return controller.registerEmptyHost(host);
|
|
2860
|
+
}, [controller]);
|
|
2861
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2862
|
+
"div",
|
|
2863
|
+
{
|
|
2864
|
+
ref,
|
|
2865
|
+
contentEditable: !readOnly,
|
|
2866
|
+
suppressContentEditableWarning: true,
|
|
2867
|
+
role: "textbox",
|
|
2868
|
+
"aria-multiline": "true",
|
|
2869
|
+
"aria-readonly": readOnly ? "true" : void 0,
|
|
2870
|
+
"aria-label": label,
|
|
2871
|
+
"data-quoin-host": "",
|
|
2872
|
+
"data-quoin-empty": "",
|
|
2873
|
+
"data-placeholder": readOnly ? void 0 : placeholder,
|
|
2874
|
+
"aria-placeholder": readOnly ? void 0 : placeholder,
|
|
2875
|
+
spellCheck: true,
|
|
2876
|
+
onClick: () => ref.current?.focus()
|
|
2877
|
+
}
|
|
2878
|
+
);
|
|
2879
|
+
}
|
|
2880
|
+
|
|
2881
|
+
// src/view/react/focus-owners.ts
|
|
2882
|
+
var focusOwners = /* @__PURE__ */ new WeakMap();
|
|
2883
|
+
|
|
2884
|
+
// src/view/selection/selection-announcement.ts
|
|
2885
|
+
var SILENCE = { key: "", message: "" };
|
|
2886
|
+
function selectionAnnouncement({ doc, selection }, blocksSelected) {
|
|
2887
|
+
if (selection === null || selection.kind === "text" && !isCrossSelection(selection)) return SILENCE;
|
|
2888
|
+
if (selection.kind === "node") return { key: `node:${selection.block}`, message: blocksSelected(1) };
|
|
2889
|
+
const anchor = selection.kind === "blocks" ? selection.anchor : selection.anchor.block;
|
|
2890
|
+
const head = selection.kind === "blocks" ? selection.head : selection.head.block;
|
|
2891
|
+
const first = doc.index.get(anchor);
|
|
2892
|
+
const last = doc.index.get(head);
|
|
2893
|
+
if (first === void 0 || last === void 0) return SILENCE;
|
|
2894
|
+
const count = drawnBlockCount(doc, Math.min(first, last), Math.max(first, last) + 1);
|
|
2895
|
+
return { key: `${selection.kind}:${anchor}:${head}`, message: blocksSelected(count) };
|
|
2896
|
+
}
|
|
2897
|
+
function heardNow({ editor, announcer, engagement }, blocksSelected) {
|
|
2898
|
+
const spoken = announcer.current();
|
|
2899
|
+
if (spoken !== null) return { key: `said:${spoken.serial}`, message: spoken.message };
|
|
2900
|
+
return engagement.engaged ? selectionAnnouncement(editor.state, blocksSelected) : SILENCE;
|
|
2901
|
+
}
|
|
2902
|
+
function LiveRegion({ blocksSelected }) {
|
|
2903
|
+
const controller = useViewController();
|
|
2904
|
+
const subscribe = react.useCallback(
|
|
2905
|
+
(notify) => {
|
|
2906
|
+
const stopState = controller.editor.subscribe(() => notify());
|
|
2907
|
+
const stopSpoken = controller.announcer.subscribe(notify);
|
|
2908
|
+
const stopEngaged = controller.engagement.subscribe(notify);
|
|
2909
|
+
return () => {
|
|
2910
|
+
stopState();
|
|
2911
|
+
stopSpoken();
|
|
2912
|
+
stopEngaged();
|
|
2913
|
+
};
|
|
2914
|
+
},
|
|
2915
|
+
[controller]
|
|
2916
|
+
);
|
|
2917
|
+
const read = react.useMemo(() => {
|
|
2918
|
+
let last = SILENCE;
|
|
2919
|
+
return () => {
|
|
2920
|
+
const next = heardNow(controller, blocksSelected);
|
|
2921
|
+
if (next.key !== last.key || next.message !== last.message) last = next;
|
|
2922
|
+
return last;
|
|
2923
|
+
};
|
|
2924
|
+
}, [controller, blocksSelected]);
|
|
2925
|
+
const { key, message } = react.useSyncExternalStore(subscribe, read, read);
|
|
2926
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-visually-hidden", role: "status", "aria-live": "polite", "aria-atomic": "true", children: message !== "" && /* @__PURE__ */ jsxRuntime.jsx("span", { children: message }, key) });
|
|
2927
|
+
}
|
|
2928
|
+
function SelectionSink({ label = "Selected content", blockLabel }) {
|
|
2929
|
+
const controller = useViewController();
|
|
2930
|
+
const ref = react.useRef(null);
|
|
2931
|
+
const readOnly = useReadOnly(controller);
|
|
2932
|
+
const name = useEditorState(
|
|
2933
|
+
controller,
|
|
2934
|
+
react.useCallback((state) => selectedBlockName(state, blockLabel), [blockLabel])
|
|
2935
|
+
);
|
|
2936
|
+
useIsomorphicLayoutEffect(() => {
|
|
2937
|
+
const sink = ref.current;
|
|
2938
|
+
return sink ? controller.registerSink(sink) : void 0;
|
|
2939
|
+
}, [controller]);
|
|
2940
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2941
|
+
"div",
|
|
2942
|
+
{
|
|
2943
|
+
ref,
|
|
2944
|
+
contentEditable: !readOnly,
|
|
2945
|
+
suppressContentEditableWarning: true,
|
|
2946
|
+
role: "textbox",
|
|
2947
|
+
"aria-label": name || label,
|
|
2948
|
+
inputMode: name === null ? void 0 : "none",
|
|
2949
|
+
"aria-multiline": name === null ? "true" : void 0,
|
|
2950
|
+
"aria-readonly": readOnly ? "true" : void 0,
|
|
2951
|
+
tabIndex: -1,
|
|
2952
|
+
spellCheck: false,
|
|
2953
|
+
"data-quoin-sink": "",
|
|
2954
|
+
onFocus: () => {
|
|
2955
|
+
if (heldBySink(controller.editor.state.selection)) focusSink(controller);
|
|
2956
|
+
}
|
|
2957
|
+
}
|
|
2958
|
+
);
|
|
2959
|
+
}
|
|
2960
|
+
|
|
2961
|
+
// src/view/react/SelectionWriter.tsx
|
|
2962
|
+
function SelectionWriter() {
|
|
2963
|
+
const controller = useViewController();
|
|
2964
|
+
const state = useEditorState(controller, wholeState);
|
|
2965
|
+
useIsomorphicLayoutEffect(() => controller.afterRender(), [controller, state]);
|
|
2966
|
+
return null;
|
|
2967
|
+
}
|
|
2968
|
+
var UNSUPPORTED_BLOCK = "Unsupported block";
|
|
2969
|
+
var UnsupportedBlockLabel = react.createContext(UNSUPPORTED_BLOCK);
|
|
2970
|
+
var Boundary = class extends react.Component {
|
|
2971
|
+
state = { block: this.props.block, renderer: this.props.renderer, failed: false };
|
|
2972
|
+
static getDerivedStateFromError() {
|
|
2973
|
+
return { failed: true };
|
|
2974
|
+
}
|
|
2975
|
+
static getDerivedStateFromProps(props, state) {
|
|
2976
|
+
const same = props.block === state.block && props.renderer === state.renderer;
|
|
2977
|
+
return same ? null : { block: props.block, renderer: props.renderer, failed: false };
|
|
2978
|
+
}
|
|
2979
|
+
componentDidCatch(error) {
|
|
2980
|
+
this.props.report?.(error instanceof Error ? error : new Error(String(error)));
|
|
2981
|
+
}
|
|
2982
|
+
render() {
|
|
2983
|
+
if (!this.state.failed) return this.props.children;
|
|
2984
|
+
const { label } = this.props;
|
|
2985
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-void", contentEditable: false, role: "group", "aria-label": label, children: label });
|
|
2986
|
+
}
|
|
2987
|
+
};
|
|
2988
|
+
function BlockErrorBoundary({ block, renderer, children }) {
|
|
2989
|
+
const { label, report } = react.useContext(BlockErrorContext);
|
|
2990
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Boundary, { block, renderer, label, report, children });
|
|
2991
|
+
}
|
|
2992
|
+
|
|
2993
|
+
// src/view/react/block-status.ts
|
|
2994
|
+
function within(state, index, ends) {
|
|
2995
|
+
const [anchor, head] = ends.map((id) => state.doc.index.get(id));
|
|
2996
|
+
if (anchor === void 0 || head === void 0) return false;
|
|
2997
|
+
return index >= Math.min(anchor, head) && index <= Math.max(anchor, head);
|
|
2998
|
+
}
|
|
2999
|
+
function covers(state, id, index) {
|
|
3000
|
+
const { doc, schema, selection } = state;
|
|
3001
|
+
if (selection === null) return false;
|
|
3002
|
+
if (selection.kind === "node") return selection.block === id;
|
|
3003
|
+
if (selection.kind === "blocks") return within(state, index, [selection.anchor, selection.head]);
|
|
3004
|
+
if (!isCrossSelection(selection) || chunkFK7EBZPX_cjs.isTextFlow(schema, doc.blocks[index])) return false;
|
|
3005
|
+
return within(state, index, [selection.anchor.block, selection.head.block]);
|
|
3006
|
+
}
|
|
3007
|
+
function blockStatus(state, id, choices = NO_CHOICES) {
|
|
3008
|
+
const index = state.doc.index.get(id);
|
|
3009
|
+
if (index === void 0) return "plain";
|
|
3010
|
+
if (isHiddenAt(state.doc, index, choices)) return "hidden";
|
|
3011
|
+
return covers(state, id, index) ? "selected" : "plain";
|
|
3012
|
+
}
|
|
2873
3013
|
var CalloutBlock = ({ block }) => {
|
|
2874
3014
|
const tone = typeof block.attrs.tone === "string" && block.attrs.tone !== "" ? block.attrs.tone : "info";
|
|
2875
3015
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-callout", "data-tone": tone, children: /* @__PURE__ */ jsxRuntime.jsx(EditableRegion, { block: block.id, region: "body", label: `Callout, ${tone}` }) });
|
|
@@ -3025,8 +3165,6 @@ var ToggleBlock = ({ block, controller }) => {
|
|
|
3025
3165
|
/* @__PURE__ */ jsxRuntime.jsx(EditableRegion, { block: block.id, region: "text", label: "Toggle" })
|
|
3026
3166
|
] });
|
|
3027
3167
|
};
|
|
3028
|
-
var UNSUPPORTED_BLOCK = "Unsupported block";
|
|
3029
|
-
var UnsupportedBlockLabel = react.createContext(UNSUPPORTED_BLOCK);
|
|
3030
3168
|
var defaultRenderers = {
|
|
3031
3169
|
MARKDOWN: MarkdownBlock,
|
|
3032
3170
|
CALLOUT: CalloutBlock,
|
|
@@ -3037,59 +3175,6 @@ var VoidBlockFallback = ({ block }) => {
|
|
|
3037
3175
|
if (block.type === "DIVIDER") return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-void", contentEditable: false, role: "separator" });
|
|
3038
3176
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-void", contentEditable: false, role: "group", "aria-label": label, children: label });
|
|
3039
3177
|
};
|
|
3040
|
-
var BLOCK_ERROR = "Block could not be drawn";
|
|
3041
|
-
var BlockErrorContext = react.createContext({ label: BLOCK_ERROR });
|
|
3042
|
-
var Boundary = class extends react.Component {
|
|
3043
|
-
state = { block: this.props.block, renderer: this.props.renderer, failed: false };
|
|
3044
|
-
static getDerivedStateFromError() {
|
|
3045
|
-
return { failed: true };
|
|
3046
|
-
}
|
|
3047
|
-
static getDerivedStateFromProps(props, state) {
|
|
3048
|
-
const same = props.block === state.block && props.renderer === state.renderer;
|
|
3049
|
-
return same ? null : { block: props.block, renderer: props.renderer, failed: false };
|
|
3050
|
-
}
|
|
3051
|
-
componentDidCatch(error) {
|
|
3052
|
-
this.props.report?.(error instanceof Error ? error : new Error(String(error)));
|
|
3053
|
-
}
|
|
3054
|
-
render() {
|
|
3055
|
-
if (!this.state.failed) return this.props.children;
|
|
3056
|
-
const { label } = this.props;
|
|
3057
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-void", contentEditable: false, role: "group", "aria-label": label, children: label });
|
|
3058
|
-
}
|
|
3059
|
-
};
|
|
3060
|
-
function BlockErrorBoundary({ block, renderer, children }) {
|
|
3061
|
-
const { label, report } = react.useContext(BlockErrorContext);
|
|
3062
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Boundary, { block, renderer, label, report, children });
|
|
3063
|
-
}
|
|
3064
|
-
var BlockDomIdScope = react.createContext("quoin");
|
|
3065
|
-
function useBlockDomId() {
|
|
3066
|
-
const scope = react.useContext(BlockDomIdScope);
|
|
3067
|
-
return react.useCallback((block) => `${scope}-${encodeURIComponent(block)}`, [scope]);
|
|
3068
|
-
}
|
|
3069
|
-
function useRegionDomId(block, region) {
|
|
3070
|
-
return `${useBlockDomId()(block)}/${encodeURIComponent(region)}`;
|
|
3071
|
-
}
|
|
3072
|
-
|
|
3073
|
-
// src/view/react/block-status.ts
|
|
3074
|
-
function within(state, index, ends) {
|
|
3075
|
-
const [anchor, head] = ends.map((id) => state.doc.index.get(id));
|
|
3076
|
-
if (anchor === void 0 || head === void 0) return false;
|
|
3077
|
-
return index >= Math.min(anchor, head) && index <= Math.max(anchor, head);
|
|
3078
|
-
}
|
|
3079
|
-
function covers(state, id, index) {
|
|
3080
|
-
const { doc, schema, selection } = state;
|
|
3081
|
-
if (selection === null) return false;
|
|
3082
|
-
if (selection.kind === "node") return selection.block === id;
|
|
3083
|
-
if (selection.kind === "blocks") return within(state, index, [selection.anchor, selection.head]);
|
|
3084
|
-
if (!isCrossSelection(selection) || chunkFK7EBZPX_cjs.isTextFlow(schema, doc.blocks[index])) return false;
|
|
3085
|
-
return within(state, index, [selection.anchor.block, selection.head.block]);
|
|
3086
|
-
}
|
|
3087
|
-
function blockStatus(state, id, choices = NO_CHOICES) {
|
|
3088
|
-
const index = state.doc.index.get(id);
|
|
3089
|
-
if (index === void 0) return "plain";
|
|
3090
|
-
if (isHiddenAt(state.doc, index, choices)) return "hidden";
|
|
3091
|
-
return covers(state, id, index) ? "selected" : "plain";
|
|
3092
|
-
}
|
|
3093
3178
|
var unwatched = () => () => {
|
|
3094
3179
|
};
|
|
3095
3180
|
function useEngaged(controller, watching) {
|
|
@@ -3143,91 +3228,6 @@ var BlockShell = react.memo(function BlockShell2({ block, renderers }) {
|
|
|
3143
3228
|
}
|
|
3144
3229
|
);
|
|
3145
3230
|
});
|
|
3146
|
-
function EmptyDocumentHost({ placeholder, label = "Paragraph" }) {
|
|
3147
|
-
const controller = useViewController();
|
|
3148
|
-
const ref = react.useRef(null);
|
|
3149
|
-
const readOnly = useReadOnly(controller);
|
|
3150
|
-
useIsomorphicLayoutEffect(() => {
|
|
3151
|
-
const host = ref.current;
|
|
3152
|
-
if (host === null) return void 0;
|
|
3153
|
-
renderInline(host, [], []);
|
|
3154
|
-
return controller.registerEmptyHost(host);
|
|
3155
|
-
}, [controller]);
|
|
3156
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3157
|
-
"div",
|
|
3158
|
-
{
|
|
3159
|
-
ref,
|
|
3160
|
-
contentEditable: !readOnly,
|
|
3161
|
-
suppressContentEditableWarning: true,
|
|
3162
|
-
role: "textbox",
|
|
3163
|
-
"aria-multiline": "true",
|
|
3164
|
-
"aria-readonly": readOnly ? "true" : void 0,
|
|
3165
|
-
"aria-label": label,
|
|
3166
|
-
"data-quoin-host": "",
|
|
3167
|
-
"data-quoin-empty": "",
|
|
3168
|
-
"data-placeholder": readOnly ? void 0 : placeholder,
|
|
3169
|
-
"aria-placeholder": readOnly ? void 0 : placeholder,
|
|
3170
|
-
spellCheck: true,
|
|
3171
|
-
onClick: () => ref.current?.focus()
|
|
3172
|
-
}
|
|
3173
|
-
);
|
|
3174
|
-
}
|
|
3175
|
-
|
|
3176
|
-
// src/view/react/focus-owners.ts
|
|
3177
|
-
var focusOwners = /* @__PURE__ */ new WeakMap();
|
|
3178
|
-
|
|
3179
|
-
// src/view/selection/selection-announcement.ts
|
|
3180
|
-
var SILENCE = { key: "", message: "" };
|
|
3181
|
-
function selectionAnnouncement({ doc, selection }, blocksSelected) {
|
|
3182
|
-
if (selection === null || selection.kind === "text" && !isCrossSelection(selection)) return SILENCE;
|
|
3183
|
-
if (selection.kind === "node") return { key: `node:${selection.block}`, message: blocksSelected(1) };
|
|
3184
|
-
const anchor = selection.kind === "blocks" ? selection.anchor : selection.anchor.block;
|
|
3185
|
-
const head = selection.kind === "blocks" ? selection.head : selection.head.block;
|
|
3186
|
-
const first = doc.index.get(anchor);
|
|
3187
|
-
const last = doc.index.get(head);
|
|
3188
|
-
if (first === void 0 || last === void 0) return SILENCE;
|
|
3189
|
-
const count = drawnBlockCount(doc, Math.min(first, last), Math.max(first, last) + 1);
|
|
3190
|
-
return { key: `${selection.kind}:${anchor}:${head}`, message: blocksSelected(count) };
|
|
3191
|
-
}
|
|
3192
|
-
function heardNow({ editor, announcer, engagement }, blocksSelected) {
|
|
3193
|
-
const spoken = announcer.current();
|
|
3194
|
-
if (spoken !== null) return { key: `said:${spoken.serial}`, message: spoken.message };
|
|
3195
|
-
return engagement.engaged ? selectionAnnouncement(editor.state, blocksSelected) : SILENCE;
|
|
3196
|
-
}
|
|
3197
|
-
function LiveRegion({ blocksSelected }) {
|
|
3198
|
-
const controller = useViewController();
|
|
3199
|
-
const subscribe = react.useCallback(
|
|
3200
|
-
(notify) => {
|
|
3201
|
-
const stopState = controller.editor.subscribe(() => notify());
|
|
3202
|
-
const stopSpoken = controller.announcer.subscribe(notify);
|
|
3203
|
-
const stopEngaged = controller.engagement.subscribe(notify);
|
|
3204
|
-
return () => {
|
|
3205
|
-
stopState();
|
|
3206
|
-
stopSpoken();
|
|
3207
|
-
stopEngaged();
|
|
3208
|
-
};
|
|
3209
|
-
},
|
|
3210
|
-
[controller]
|
|
3211
|
-
);
|
|
3212
|
-
const read = react.useMemo(() => {
|
|
3213
|
-
let last = SILENCE;
|
|
3214
|
-
return () => {
|
|
3215
|
-
const next = heardNow(controller, blocksSelected);
|
|
3216
|
-
if (next.key !== last.key || next.message !== last.message) last = next;
|
|
3217
|
-
return last;
|
|
3218
|
-
};
|
|
3219
|
-
}, [controller, blocksSelected]);
|
|
3220
|
-
const { key, message } = react.useSyncExternalStore(subscribe, read, read);
|
|
3221
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-visually-hidden", role: "status", "aria-live": "polite", "aria-atomic": "true", children: message !== "" && /* @__PURE__ */ jsxRuntime.jsx("span", { children: message }, key) });
|
|
3222
|
-
}
|
|
3223
|
-
|
|
3224
|
-
// src/view/react/SelectionWriter.tsx
|
|
3225
|
-
function SelectionWriter() {
|
|
3226
|
-
const controller = useViewController();
|
|
3227
|
-
const state = useEditorState(controller, wholeState);
|
|
3228
|
-
useIsomorphicLayoutEffect(() => controller.afterRender(), [controller, state]);
|
|
3229
|
-
return null;
|
|
3230
|
-
}
|
|
3231
3231
|
function useBlockElements(blocks, renderers) {
|
|
3232
3232
|
const [made] = react.useState(() => /* @__PURE__ */ new WeakMap());
|
|
3233
3233
|
return blocks.map((block) => {
|
|
@@ -3292,20 +3292,16 @@ function EditorView({
|
|
|
3292
3292
|
}
|
|
3293
3293
|
|
|
3294
3294
|
exports.BlockErrorContext = BlockErrorContext;
|
|
3295
|
-
exports.BlockShell = BlockShell;
|
|
3296
3295
|
exports.EditableRegion = EditableRegion;
|
|
3297
3296
|
exports.EditorView = EditorView;
|
|
3298
3297
|
exports.NATIVE_INTERACTION = NATIVE_INTERACTION;
|
|
3299
3298
|
exports.NODE_ENTRY = NODE_ENTRY;
|
|
3300
|
-
exports.SelectionSink = SelectionSink;
|
|
3301
3299
|
exports.TaskCheckbox = TaskCheckbox;
|
|
3302
3300
|
exports.ToggleChevron = ToggleChevron;
|
|
3303
3301
|
exports.ViewController = ViewController;
|
|
3304
|
-
exports.VoidBlockFallback = VoidBlockFallback;
|
|
3305
3302
|
exports.caretClientRect = caretClientRect;
|
|
3306
3303
|
exports.caretFromPoint = caretFromPoint;
|
|
3307
3304
|
exports.createAutoScroll = createAutoScroll;
|
|
3308
|
-
exports.defaultRenderers = defaultRenderers;
|
|
3309
3305
|
exports.dispatchSelection = dispatchSelection;
|
|
3310
3306
|
exports.domMapOf = domMapOf;
|
|
3311
3307
|
exports.domToPos = domToPos;
|
|
@@ -3314,7 +3310,6 @@ exports.focusOwners = focusOwners;
|
|
|
3314
3310
|
exports.handleCopy = handleCopy;
|
|
3315
3311
|
exports.hostKey = hostKey;
|
|
3316
3312
|
exports.isComposingKey = isComposingKey;
|
|
3317
|
-
exports.isCrossSelection = isCrossSelection;
|
|
3318
3313
|
exports.isOnFirstLine = isOnFirstLine;
|
|
3319
3314
|
exports.isOnLastLine = isOnLastLine;
|
|
3320
3315
|
exports.lineEdgeRect = lineEdgeRect;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useQuoinEditor, EditorView, useIsomorphicLayoutEffect, useReadOnly, useEditorState, listen, wholeState, NODE_ENTRY, useBlockDomId, useToggleOpen, ToggleChevron, EditableRegion, drawnBlockCount, isComposingKey, NATIVE_INTERACTION, useRegionDomId, TaskCheckbox, useOrderedNumber, createAutoScroll, domMapOf, dispatchSelection, regionInline, onBlock, hostKey, BlockErrorContext, textDiff, moveToNeighbour, visibleBlockIndexes } from './chunk-
|
|
1
|
+
import { useQuoinEditor, EditorView, useIsomorphicLayoutEffect, useReadOnly, useEditorState, listen, wholeState, NODE_ENTRY, useBlockDomId, useToggleOpen, ToggleChevron, EditableRegion, drawnBlockCount, isComposingKey, NATIVE_INTERACTION, useRegionDomId, TaskCheckbox, useOrderedNumber, createAutoScroll, domMapOf, dispatchSelection, regionInline, onBlock, hostKey, BlockErrorContext, textDiff, moveToNeighbour, visibleBlockIndexes } from './chunk-NL5J77VD.js';
|
|
2
2
|
import { mergeLabels } from './chunk-DLQCTGC3.js';
|
|
3
3
|
import { defineBlock, devWarn, highlightedLines, blockByType, paletteBlocks, tokenColour, seedData, parsedData } from './chunk-HDJ653LM.js';
|
|
4
4
|
import { createPluginKey, coreExtensions, defineExtension, duplicateBlocks, primaryRegion, regionLength, headBlockId, sameSelection, Transaction, insertBlocksStep, startOf, replaceBlockStep, descendantsEnd, LINE_JOIN, detectMac, selectedBlockIds, blockRangeSelection, runCommands, setSelection, selectedBlockRange, toMarkdown, isCollapsed, createBlock, isParagraph, nodeSelection, setAttrsStep, LINE_SPLIT, validateSelection, endOf, insertBlockAfter, insertText, isTextFlow, markRanges, setTextAlign, orderedRange, unsetLink, textSelection, toggleMark, isActive, setBlockType, getPluginState, rangeContent, unsetMark, setMark, markExtent, setLink, deleteBlocks, setAttrs, HISTORY_GROUP, setBlockColor, removeMarkStep, caretMarks, replaceInlineStep, keyName, normalizeKey, movedBlockIds, moveBlocksUp, moveBlocksDown, selectAll, redo, undo, moveBlocksTo, indent, outdent } from './chunk-5RBMZGKV.js';
|
|
@@ -1613,7 +1613,7 @@ function revealCaret(area, drawn, mark) {
|
|
|
1613
1613
|
const left = atLineStart ? null : caretLeft(drawn, caret);
|
|
1614
1614
|
mark.style.top = `${(parseFloat(style.paddingTop) || 0) + line * (parseFloat(style.lineHeight) || 0)}px`;
|
|
1615
1615
|
mark.style.left = `${left ?? 0}px`;
|
|
1616
|
-
mark.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
1616
|
+
mark.scrollIntoView?.({ block: "nearest", inline: "nearest" });
|
|
1617
1617
|
}
|
|
1618
1618
|
|
|
1619
1619
|
// src/blocks/code/run-code-action.ts
|
|
@@ -1885,7 +1885,7 @@ function LanguageCombobox({ blockId, controller, language: language2, field, onD
|
|
|
1885
1885
|
const open = options.length > 0;
|
|
1886
1886
|
const optionId = (index) => `${listboxId}-${index}`;
|
|
1887
1887
|
useIsomorphicLayoutEffect(() => {
|
|
1888
|
-
list.current?.querySelector('[aria-selected="true"]')?.scrollIntoView({ block: "nearest" });
|
|
1888
|
+
list.current?.querySelector('[aria-selected="true"]')?.scrollIntoView?.({ block: "nearest" });
|
|
1889
1889
|
}, [active]);
|
|
1890
1890
|
const close = () => {
|
|
1891
1891
|
setDraft(null);
|
|
@@ -3548,6 +3548,7 @@ function drawnInPlace(definitions, type) {
|
|
|
3548
3548
|
}
|
|
3549
3549
|
var drawsType = (definitions, type) => !Object.hasOwn(inPlaceRenderers, type) || blockByType(definitions, type) !== void 0;
|
|
3550
3550
|
var opensEditor = (definitions, type) => drawnInPlace(definitions, type) || !drawnAsText(definitions, type, false) && blockByType(definitions, type)?.editor !== void 0;
|
|
3551
|
+
var definedWithoutEditor = (definitions) => Object.keys(inPlaceRenderers).filter((type) => hostDefines(definitions, type) && !opensEditor(definitions, type));
|
|
3551
3552
|
|
|
3552
3553
|
// src/gutter/turn-into-targets.ts
|
|
3553
3554
|
var HEADING_ICONS = [Heading1, Heading2, Heading3];
|
|
@@ -5260,7 +5261,7 @@ function SuggestionMenu(props) {
|
|
|
5260
5261
|
const { anchor, side } = useRangeAnchor(controller, trigger);
|
|
5261
5262
|
const listbox = useRef(null);
|
|
5262
5263
|
useIsomorphicLayoutEffect(() => {
|
|
5263
|
-
listbox.current?.querySelector('[aria-selected="true"]')?.scrollIntoView({ block: "nearest" });
|
|
5264
|
+
listbox.current?.querySelector('[aria-selected="true"]')?.scrollIntoView?.({ block: "nearest" });
|
|
5264
5265
|
}, [activeIndex, sections]);
|
|
5265
5266
|
if (trigger === null) return null;
|
|
5266
5267
|
const inEditor = (node) => node instanceof Node && controller.root?.contains(node) === true;
|
|
@@ -6154,7 +6155,7 @@ function revealLinkedBlock(controller, hash) {
|
|
|
6154
6155
|
const { editor } = controller;
|
|
6155
6156
|
const { doc, schema } = editor.state;
|
|
6156
6157
|
editor.dispatch(editor.createTransaction().setSelection(startOf(doc, schema, id)));
|
|
6157
|
-
shell.scrollIntoView({ block: "center" });
|
|
6158
|
+
shell.scrollIntoView?.({ block: "center" });
|
|
6158
6159
|
return true;
|
|
6159
6160
|
}
|
|
6160
6161
|
function useBlockLinkTarget(controller, focusOnMount) {
|
|
@@ -6212,7 +6213,7 @@ function useStructureAnnouncements(controller, labels) {
|
|
|
6212
6213
|
});
|
|
6213
6214
|
}, [controller, labels]);
|
|
6214
6215
|
}
|
|
6215
|
-
function
|
|
6216
|
+
function useDefinitionWarnings(definitions, readOnly) {
|
|
6216
6217
|
useEffect(() => {
|
|
6217
6218
|
if (readOnly) return;
|
|
6218
6219
|
for (const type of definedTypedInPlace(definitions)) {
|
|
@@ -6220,6 +6221,11 @@ function useTypedInPlaceWarning(definitions, readOnly) {
|
|
|
6220
6221
|
`the block type "${type}" has a definition of its own, which only a read-only canvas draws. An editable canvas keeps drawing ${type} blocks itself, since they are typed into in place.`
|
|
6221
6222
|
);
|
|
6222
6223
|
}
|
|
6224
|
+
for (const type of definedWithoutEditor(definitions)) {
|
|
6225
|
+
devWarn(
|
|
6226
|
+
`the block type "${type}" has a definition of its own whose preview replaces the one that edits it, so an editable canvas draws ${type} blocks nobody can write in. Quoin edits ${type} in its preview rather than in an editor: give your definition an editor of its own, or keep Quoin's and draw yours only where the canvas is read-only.`
|
|
6227
|
+
);
|
|
6228
|
+
}
|
|
6223
6229
|
}, [definitions, readOnly]);
|
|
6224
6230
|
}
|
|
6225
6231
|
var GUTTER_ROOM = "ps-12";
|
|
@@ -6261,7 +6267,7 @@ var BlockCanvas = forwardRef(function BlockCanvas2({
|
|
|
6261
6267
|
() => collectUi(allExtensions, blockTypes, readOnly, () => latestOnError.current),
|
|
6262
6268
|
[allExtensions, blockTypes, readOnly]
|
|
6263
6269
|
);
|
|
6264
|
-
|
|
6270
|
+
useDefinitionWarnings(blockTypes, readOnly);
|
|
6265
6271
|
const [focusOnMount] = useState(autoFocus);
|
|
6266
6272
|
const controller = useQuoinEditor({
|
|
6267
6273
|
blocks,
|
|
@@ -6527,5 +6533,5 @@ function useAutosave({
|
|
|
6527
6533
|
}
|
|
6528
6534
|
|
|
6529
6535
|
export { AlignCenter, AlignLeft, AlignRight, AppWindow, ArrowDown, ArrowDownToLine, ArrowLeft, ArrowLeftToLine, ArrowRight, ArrowRightToLine, ArrowUp, ArrowUpToLine, BlockCanvas, Bookmark, Button, CODE_LANGUAGES, CaseSensitive, ChevronDown, ChevronUp, CodeBlock, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger, FLOATING_TOOLBAR, FOCUS_RING, FilePickerButton, GripHorizontal, GripVertical, Input, MENU_ITEM, MenuIcon, MessageSquare, MessageSquarePlus, PenLine, Plus, Popover, PopoverAnchor, PopoverContent, QuoinProvider, Radical, Regex, SendHorizontal, Sigma, SmilePlus, Sparkles, SuggestionMenu, Table, TableOfContents, Trash, UploadField, WholeWord, X, blockFragment, bubblePart, cn, coreBlocks, dismissSuggestion, englishLabels, focusNode, formatShortcut, inlineDirection, insertBlockToWrite, insertBlocks, interceptKeys, keepFocus, linkAddress, linkedBlockId, noChange, preventDefault, rangeRect, replaceTrigger, resolveLabels, returnFocusToText, runOnBlocks, selectHandlers, selectNode, styleTargets, suggestionPlugin, toError, useAutosave, useFocusKey, useLabels, useNodeKeys, useOutsidePress, usePartAnchor, useQuoin, useRangeAnchor, useRovingFocus, virtualAnchor };
|
|
6530
|
-
//# sourceMappingURL=chunk-
|
|
6531
|
-
//# sourceMappingURL=chunk-
|
|
6536
|
+
//# sourceMappingURL=chunk-ZN5DHNSL.js.map
|
|
6537
|
+
//# sourceMappingURL=chunk-ZN5DHNSL.js.map
|