quoin-editor 2.0.2 → 2.0.3
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 +13 -0
- 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-NZFGAV3L.cjs → chunk-3B5VEXVQ.cjs} +2 -2
- package/dist/{chunk-RWSC47L7.cjs → chunk-4EJJ4ZNC.cjs} +18 -18
- package/dist/{chunk-F3BC5ITU.cjs → chunk-55MN4QZU.cjs} +8 -5
- package/dist/{chunk-TDXQSNFS.cjs → chunk-5URH2Y2L.cjs} +19 -19
- package/dist/{chunk-XLR2O4OK.js → chunk-77THE3KY.js} +5 -5
- package/dist/{chunk-XLR2O4OK.js.map → chunk-77THE3KY.js.map} +1 -1
- package/dist/{chunk-LBP64GKQ.cjs → chunk-BCCFJINI.cjs} +70 -65
- package/dist/{chunk-SE36LU6G.js → chunk-BNTRGV4A.js} +27 -10
- package/dist/chunk-BNTRGV4A.js.map +1 -0
- package/dist/{chunk-AVD2AI47.js → chunk-C4SRLMQJ.js} +3 -3
- package/dist/{chunk-AVD2AI47.js.map → chunk-C4SRLMQJ.js.map} +1 -1
- package/dist/{chunk-5VBDRJ5Y.cjs → chunk-DZ5XR4O6.cjs} +139 -117
- package/dist/{chunk-QIGZ5JAY.js → chunk-FGVTDIHT.js} +42 -19
- package/dist/chunk-FGVTDIHT.js.map +1 -0
- package/dist/{chunk-XC4WZTMY.cjs → chunk-H3TRVI44.cjs} +50 -50
- package/dist/{chunk-Z3GLEAOI.js → chunk-LCGOFL7S.js} +15 -10
- package/dist/{chunk-Z3GLEAOI.js.map → chunk-LCGOFL7S.js.map} +1 -1
- package/dist/{chunk-OBOIZ7L3.js → chunk-MDIXI7DM.js} +3 -3
- package/dist/{chunk-OBOIZ7L3.js.map → chunk-MDIXI7DM.js.map} +1 -1
- package/dist/{chunk-UKUAQJME.cjs → chunk-MGN332NY.cjs} +28 -7
- package/dist/{chunk-SHZGRFYY.cjs → chunk-NAMZA4NW.cjs} +14 -14
- package/dist/{chunk-ZHLNPNE2.js → chunk-NLRSAOCK.js} +5 -5
- package/dist/{chunk-ZHLNPNE2.js.map → chunk-NLRSAOCK.js.map} +1 -1
- package/dist/{chunk-RR67AKP6.cjs → chunk-OMUXPNCX.cjs} +27 -26
- package/dist/{chunk-DGKIKXB7.js → chunk-QVWNUUMJ.js} +3 -3
- package/dist/{chunk-DGKIKXB7.js.map → chunk-QVWNUUMJ.js.map} +1 -1
- package/dist/{chunk-4VCCGBXW.js → chunk-RNYETN6X.js} +4 -4
- package/dist/{chunk-4VCCGBXW.js.map → chunk-RNYETN6X.js.map} +1 -1
- package/dist/{chunk-YETMZ27Q.cjs → chunk-SDFJZNYB.cjs} +3 -3
- package/dist/{chunk-YYBPQ4TY.cjs → chunk-SQHEZ3JY.cjs} +2 -2
- package/dist/{chunk-JM5TRLEC.cjs → chunk-UWCU6PJY.cjs} +30 -30
- package/dist/{chunk-M7L444WV.js → chunk-VQDQBMQY.js} +4 -4
- package/dist/{chunk-M7L444WV.js.map → chunk-VQDQBMQY.js.map} +1 -1
- package/dist/{chunk-5A2MHCYI.js → chunk-WMM56LIB.js} +8 -5
- package/dist/{chunk-5A2MHCYI.js.map → chunk-WMM56LIB.js.map} +1 -1
- package/dist/{chunk-DT3ODGZ7.js → chunk-YHAVXOAA.js} +6 -5
- package/dist/chunk-YHAVXOAA.js.map +1 -0
- package/dist/{chunk-ZDNYIQKM.js → chunk-YWYTLNAO.js} +4 -4
- package/dist/{chunk-ZDNYIQKM.js.map → chunk-YWYTLNAO.js.map} +1 -1
- 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 -11
- package/dist/headless.js +1 -1
- package/dist/highlight.cjs +3 -3
- package/dist/highlight.js +2 -2
- package/dist/index.cjs +23 -23
- 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 +1 -1
- 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 +3 -2
- package/dist/chunk-DT3ODGZ7.js.map +0 -1
- package/dist/chunk-QIGZ5JAY.js.map +0 -1
- package/dist/chunk-SE36LU6G.js.map +0 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkMGN332NY_cjs = require('./chunk-MGN332NY.cjs');
|
|
4
4
|
var chunkZWTIRGY5_cjs = require('./chunk-ZWTIRGY5.cjs');
|
|
5
5
|
var chunkA6PGQVTR_cjs = require('./chunk-A6PGQVTR.cjs');
|
|
6
6
|
var chunkFK7EBZPX_cjs = require('./chunk-FK7EBZPX.cjs');
|
|
7
7
|
var chunkI7X7B3WD_cjs = require('./chunk-I7X7B3WD.cjs');
|
|
8
|
+
var reactDirection = require('@radix-ui/react-direction');
|
|
8
9
|
var React7 = require('react');
|
|
9
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
10
11
|
var ContextMenuPrimitive = require('@radix-ui/react-context-menu');
|
|
@@ -464,7 +465,11 @@ function formatSize(bytes) {
|
|
|
464
465
|
}
|
|
465
466
|
|
|
466
467
|
// src/i18n/english-labels.ts
|
|
467
|
-
|
|
468
|
+
function frozen(labels) {
|
|
469
|
+
for (const label of Object.values(labels)) if (typeof label === "object") Object.freeze(label);
|
|
470
|
+
return Object.freeze(labels);
|
|
471
|
+
}
|
|
472
|
+
var englishLabels = frozen({
|
|
468
473
|
document: "Editor",
|
|
469
474
|
editorHint: "Press Escape, then Tab, to leave the editor.",
|
|
470
475
|
paragraph: "Paragraph",
|
|
@@ -666,7 +671,7 @@ var englishLabels = {
|
|
|
666
671
|
emptyFile: "No file chosen",
|
|
667
672
|
emptyMarkdown: "Empty markdown block",
|
|
668
673
|
emptyCallout: "Empty callout"
|
|
669
|
-
};
|
|
674
|
+
});
|
|
670
675
|
var QuoinContext = React7__namespace.createContext(null);
|
|
671
676
|
function QuoinProvider({
|
|
672
677
|
value,
|
|
@@ -820,7 +825,7 @@ function selectNode(controller, blockId) {
|
|
|
820
825
|
const { editor } = controller;
|
|
821
826
|
const { selection } = editor.state;
|
|
822
827
|
if (selection?.kind === "node" && selection.block === blockId) return;
|
|
823
|
-
|
|
828
|
+
chunkMGN332NY_cjs.dispatchSelection(controller, chunkFK7EBZPX_cjs.nodeSelection(blockId));
|
|
824
829
|
}
|
|
825
830
|
function focusNode(controller, blockId) {
|
|
826
831
|
selectNode(controller, blockId);
|
|
@@ -1267,7 +1272,6 @@ function closeBlockMenu(store) {
|
|
|
1267
1272
|
}
|
|
1268
1273
|
|
|
1269
1274
|
// src/blocks/text/callout-tone.ts
|
|
1270
|
-
var CALLOUT_TONES = ["info", "tip", "success", "warning", "danger"];
|
|
1271
1275
|
var CALLOUT_ICONS = ["\u{1F4A1}", "\u26A0\uFE0F", "\u2705", "\u2757", "\u2139\uFE0F", "\u{1F4CC}"];
|
|
1272
1276
|
var TONE_ICONS = {
|
|
1273
1277
|
info: "\u2139\uFE0F",
|
|
@@ -1276,9 +1280,6 @@ var TONE_ICONS = {
|
|
|
1276
1280
|
warning: "\u26A0\uFE0F",
|
|
1277
1281
|
danger: "\u2757"
|
|
1278
1282
|
};
|
|
1279
|
-
function calloutTone(value) {
|
|
1280
|
-
return CALLOUT_TONES.find((tone) => tone === value) ?? "info";
|
|
1281
|
-
}
|
|
1282
1283
|
function calloutIcon(attrs, tone) {
|
|
1283
1284
|
return typeof attrs.icon === "string" && attrs.icon !== "" ? attrs.icon : TONE_ICONS[tone];
|
|
1284
1285
|
}
|
|
@@ -1286,7 +1287,7 @@ function MenuIcon({ icon: Icon2 }) {
|
|
|
1286
1287
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "flex shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(Icon2, { className: "size-4" }) });
|
|
1287
1288
|
}
|
|
1288
1289
|
var sharedTone = (blocks) => {
|
|
1289
|
-
const tones = new Set(blocks.map((block) => calloutTone(block.attrs.tone)));
|
|
1290
|
+
const tones = new Set(blocks.map((block) => chunkMGN332NY_cjs.calloutTone(block.attrs.tone)));
|
|
1290
1291
|
return tones.size === 1 ? [...tones][0] : "";
|
|
1291
1292
|
};
|
|
1292
1293
|
function CalloutMenus({ kit, controller, blocks }) {
|
|
@@ -1299,7 +1300,7 @@ function CalloutMenus({ kit, controller, blocks }) {
|
|
|
1299
1300
|
/* @__PURE__ */ jsxRuntime.jsx(MenuIcon, { icon: Droplet }),
|
|
1300
1301
|
labels.tone
|
|
1301
1302
|
] }),
|
|
1302
|
-
/* @__PURE__ */ jsxRuntime.jsx(kit.SubContent, { children: /* @__PURE__ */ jsxRuntime.jsx(kit.RadioGroup, { value: sharedTone(blocks), onValueChange: (tone) => apply({ tone }), children: CALLOUT_TONES.map((tone) => /* @__PURE__ */ jsxRuntime.jsx(kit.RadioItem, { value: tone, indicator: /* @__PURE__ */ jsxRuntime.jsx(Check, { className: "size-4" }), children: labels.calloutTones[tone] }, tone)) }) })
|
|
1303
|
+
/* @__PURE__ */ jsxRuntime.jsx(kit.SubContent, { children: /* @__PURE__ */ jsxRuntime.jsx(kit.RadioGroup, { value: sharedTone(blocks), onValueChange: (tone) => apply({ tone }), children: chunkMGN332NY_cjs.CALLOUT_TONES.map((tone) => /* @__PURE__ */ jsxRuntime.jsx(kit.RadioItem, { value: tone, indicator: /* @__PURE__ */ jsxRuntime.jsx(Check, { className: "size-4" }), children: labels.calloutTones[tone] }, tone)) }) })
|
|
1303
1304
|
] }),
|
|
1304
1305
|
/* @__PURE__ */ jsxRuntime.jsxs(kit.Sub, { children: [
|
|
1305
1306
|
/* @__PURE__ */ jsxRuntime.jsxs(kit.SubTrigger, { children: [
|
|
@@ -1526,7 +1527,7 @@ function codeToParagraph(blockId) {
|
|
|
1526
1527
|
};
|
|
1527
1528
|
}
|
|
1528
1529
|
function leaveCode(controller, blockId, direction, addsLine = false) {
|
|
1529
|
-
const moved =
|
|
1530
|
+
const moved = chunkMGN332NY_cjs.moveToNeighbour(controller, blockId, direction);
|
|
1530
1531
|
if (!moved && !(addsLine && controller.run(insertBlocks([{ type: "MARKDOWN" }], "text", blockId)))) return false;
|
|
1531
1532
|
controller.focus();
|
|
1532
1533
|
return true;
|
|
@@ -1651,7 +1652,7 @@ function travel({ controller, blockId, area }, command) {
|
|
|
1651
1652
|
const before = area.value;
|
|
1652
1653
|
controller.run(command);
|
|
1653
1654
|
const { selection } = controller.editor.state;
|
|
1654
|
-
const edit2 =
|
|
1655
|
+
const edit2 = chunkMGN332NY_cjs.textDiff(before, area.value);
|
|
1655
1656
|
if (selection?.kind !== "node" || selection.block !== blockId) controller.focus();
|
|
1656
1657
|
else if (edit2 !== null) area.setSelectionRange(edit2.from + edit2.insert.length, edit2.from + edit2.insert.length);
|
|
1657
1658
|
return true;
|
|
@@ -1736,11 +1737,11 @@ function CodeEditor({ block, controller, field, focusControls }) {
|
|
|
1736
1737
|
useTypeIntoCode(controller, blockId, field, edit2);
|
|
1737
1738
|
const onKeyDown = (event) => {
|
|
1738
1739
|
const area = event.currentTarget;
|
|
1739
|
-
if (
|
|
1740
|
+
if (chunkMGN332NY_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
1740
1741
|
const action = codeKeyAction(event, fieldOf(area), controller.isMac);
|
|
1741
1742
|
if (action !== null && runCodeAction(action, { controller, blockId, area, edit: edit2, focusControls })) event.preventDefault();
|
|
1742
1743
|
};
|
|
1743
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...{ [
|
|
1744
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...{ [chunkMGN332NY_cjs.NATIVE_INTERACTION]: "" }, dir: "ltr", className: "quoin-code-scroll", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-code-lines", children: [
|
|
1744
1745
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1745
1746
|
HighlightOverlay,
|
|
1746
1747
|
{
|
|
@@ -1810,7 +1811,7 @@ var Button = React7__namespace.forwardRef(function Button2({ className, variant
|
|
|
1810
1811
|
var COPIED_FOR_MS = 1500;
|
|
1811
1812
|
function CopyCodeButton({ code, controller }) {
|
|
1812
1813
|
const labels = useLabels();
|
|
1813
|
-
const readOnly =
|
|
1814
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
1814
1815
|
const [copied, setCopied] = React7.useState(false);
|
|
1815
1816
|
React7.useEffect(() => {
|
|
1816
1817
|
if (!copied) return;
|
|
@@ -1893,7 +1894,7 @@ var preventDefault = (event) => event.preventDefault();
|
|
|
1893
1894
|
|
|
1894
1895
|
// src/blocks/text/set-block-attrs.ts
|
|
1895
1896
|
function setBlockAttrs(controller, blockId, patch) {
|
|
1896
|
-
if (!controller.readOnly) controller.run(
|
|
1897
|
+
if (!controller.readOnly) controller.run(chunkMGN332NY_cjs.onBlock(blockId, chunkFK7EBZPX_cjs.setAttrs(patch)));
|
|
1897
1898
|
}
|
|
1898
1899
|
var FIELD = `quoin-code-language quoin-code-control ${FOCUS_RING}`;
|
|
1899
1900
|
var CONTENT = `${MENU_CONTENT} flex max-h-64 w-48 flex-col overflow-y-hidden`;
|
|
@@ -1909,7 +1910,7 @@ function LanguageCombobox({ blockId, controller, language: language2, field, onD
|
|
|
1909
1910
|
const options = draft === null ? [] : languageOptions(draft === shown ? "" : draft, labels.plainText);
|
|
1910
1911
|
const open = options.length > 0;
|
|
1911
1912
|
const optionId = (index) => `${listboxId}-${index}`;
|
|
1912
|
-
|
|
1913
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
1913
1914
|
list2.current?.querySelector('[aria-selected="true"]')?.scrollIntoView?.({ block: "nearest" });
|
|
1914
1915
|
}, [active]);
|
|
1915
1916
|
const close = () => {
|
|
@@ -1935,7 +1936,7 @@ function LanguageCombobox({ blockId, controller, language: language2, field, onD
|
|
|
1935
1936
|
onDone();
|
|
1936
1937
|
};
|
|
1937
1938
|
const onKeyDown = (event) => {
|
|
1938
|
-
if (
|
|
1939
|
+
if (chunkMGN332NY_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
1939
1940
|
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
|
1940
1941
|
event.preventDefault();
|
|
1941
1942
|
const step = event.key === "ArrowDown" ? 1 : -1;
|
|
@@ -2009,7 +2010,7 @@ function LanguageCombobox({ blockId, controller, language: language2, field, onD
|
|
|
2009
2010
|
}
|
|
2010
2011
|
var CodeBlock = ({ block, controller }) => {
|
|
2011
2012
|
const labels = useLabels();
|
|
2012
|
-
const readOnly =
|
|
2013
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
2013
2014
|
const languageField = React7.useRef(null);
|
|
2014
2015
|
const codeField = React7.useRef(null);
|
|
2015
2016
|
const code = chunkI7X7B3WD_cjs.str(block.attrs.code);
|
|
@@ -2111,7 +2112,7 @@ function selectHandlers(controller, blockId, root, onSelect) {
|
|
|
2111
2112
|
return {
|
|
2112
2113
|
onKeyDown(event) {
|
|
2113
2114
|
const key = event.nativeEvent;
|
|
2114
|
-
if (
|
|
2115
|
+
if (chunkMGN332NY_cjs.isComposingKey(controller, key)) return;
|
|
2115
2116
|
if (event.key === "Escape") select();
|
|
2116
2117
|
else if (!(event.metaKey || event.ctrlKey) || event.target.matches("input:not([type=file])") || !controller.edit(() => controller.editor.handleKey(key)))
|
|
2117
2118
|
return;
|
|
@@ -2333,7 +2334,7 @@ var uploadFile = (controller, blockId, file, host) => uploadInto(
|
|
|
2333
2334
|
var anyFile = () => true;
|
|
2334
2335
|
var FileBlock = ({ block, controller }) => {
|
|
2335
2336
|
const labels = useLabels();
|
|
2336
|
-
const readOnly =
|
|
2337
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
2337
2338
|
const root = React7.useRef(null);
|
|
2338
2339
|
const filled = hasFile(block.attrs);
|
|
2339
2340
|
useNodeKeys(controller, block.id, !readOnly, !filled, root);
|
|
@@ -2485,7 +2486,7 @@ function useRovingFocus() {
|
|
|
2485
2486
|
},
|
|
2486
2487
|
[syncTabStop]
|
|
2487
2488
|
);
|
|
2488
|
-
|
|
2489
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(syncTabStop);
|
|
2489
2490
|
const onFocus = (event) => {
|
|
2490
2491
|
if (!owns(event.target)) return;
|
|
2491
2492
|
current.current = event.target;
|
|
@@ -2494,9 +2495,10 @@ function useRovingFocus() {
|
|
|
2494
2495
|
const onKeyDown = (event) => {
|
|
2495
2496
|
const all = items();
|
|
2496
2497
|
const index = all.indexOf(event.target);
|
|
2497
|
-
|
|
2498
|
+
const key = row.current === null ? event.key : chunkMGN332NY_cjs.arrowAsWritten(event.key, chunkMGN332NY_cjs.inlineDirection(row.current));
|
|
2499
|
+
if (index === -1 || !Object.hasOwn(MOVES, key)) return;
|
|
2498
2500
|
event.preventDefault();
|
|
2499
|
-
all[MOVES[
|
|
2501
|
+
all[MOVES[key](index, all.length)].focus();
|
|
2500
2502
|
};
|
|
2501
2503
|
return { ref, owns, focusCurrent, onFocus, onKeyDown };
|
|
2502
2504
|
}
|
|
@@ -2504,7 +2506,7 @@ function useRovingFocus() {
|
|
|
2504
2506
|
// src/menus/floating/use-focus-key.ts
|
|
2505
2507
|
var isFocusKey = (event) => event.key === "F10" && event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey;
|
|
2506
2508
|
function useFocusKey(controller, focus) {
|
|
2507
|
-
|
|
2509
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
2508
2510
|
const intercept = (event) => {
|
|
2509
2511
|
if (!isFocusKey(event)) return false;
|
|
2510
2512
|
event.preventDefault();
|
|
@@ -2516,11 +2518,11 @@ function useFocusKey(controller, focus) {
|
|
|
2516
2518
|
}
|
|
2517
2519
|
function NodeToolbar(props) {
|
|
2518
2520
|
const { blockId, controller, label, anchor, items, next, buttonRefs, children, popover } = props;
|
|
2519
|
-
const state =
|
|
2521
|
+
const state = chunkMGN332NY_cjs.useEditorState(controller, chunkMGN332NY_cjs.wholeState);
|
|
2520
2522
|
const roving = useRovingFocus();
|
|
2521
2523
|
useFocusKey(controller, roving.focusCurrent);
|
|
2522
2524
|
const onKeyDown = (event) => {
|
|
2523
|
-
if (!roving.owns(event.target) ||
|
|
2525
|
+
if (!roving.owns(event.target) || chunkMGN332NY_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
2524
2526
|
const tab = event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey;
|
|
2525
2527
|
const ahead = tab && !event.shiftKey && next !== void 0 ? blockPart(controller, blockId, next) : void 0;
|
|
2526
2528
|
if (ahead !== void 0) ahead.focus();
|
|
@@ -2602,8 +2604,8 @@ var selectedBlock = (type, filled) => ({ doc, selection }) => {
|
|
|
2602
2604
|
return block?.type === type && filled(block.attrs) ? block.id : null;
|
|
2603
2605
|
};
|
|
2604
2606
|
function useToolbarBlock(controller, selected, keptFor = null) {
|
|
2605
|
-
const blockId =
|
|
2606
|
-
const readOnly =
|
|
2607
|
+
const blockId = chunkMGN332NY_cjs.useEditorState(controller, selected);
|
|
2608
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
2607
2609
|
const settled = useSelectionSettled(controller);
|
|
2608
2610
|
return blockId !== null && !readOnly && (settled || keptFor === blockId) ? blockId : null;
|
|
2609
2611
|
}
|
|
@@ -2682,7 +2684,7 @@ function ResizeHandles({ blockId, controller, frame, percent, centred, onPreview
|
|
|
2682
2684
|
const value = percent ?? drawn;
|
|
2683
2685
|
const write = (widthPercent) => setBlockAttrs(controller, blockId, { widthPercent });
|
|
2684
2686
|
const onKeyDown = (event) => {
|
|
2685
|
-
if (
|
|
2687
|
+
if (chunkMGN332NY_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
2686
2688
|
const next = keyedWidth(event.key, value);
|
|
2687
2689
|
if (event.key === "Escape") controller.focus();
|
|
2688
2690
|
else if (next === null) return;
|
|
@@ -2724,7 +2726,7 @@ function ResizeHandles({ blockId, controller, frame, percent, centred, onPreview
|
|
|
2724
2726
|
"aria-valuetext": labels.widthValue(value),
|
|
2725
2727
|
"data-side": side,
|
|
2726
2728
|
className: "quoin-image-handle",
|
|
2727
|
-
...{ [
|
|
2729
|
+
...{ [chunkMGN332NY_cjs.NATIVE_INTERACTION]: "" },
|
|
2728
2730
|
...bubblePart(controller),
|
|
2729
2731
|
onKeyDown,
|
|
2730
2732
|
onPointerDown: onPointerDown(side),
|
|
@@ -2797,7 +2799,7 @@ function ImageFigure({ block, controller, readOnly }) {
|
|
|
2797
2799
|
)
|
|
2798
2800
|
] }),
|
|
2799
2801
|
(!readOnly || (regions.caption?.length ?? 0) > 0) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2800
|
-
|
|
2802
|
+
chunkMGN332NY_cjs.EditableRegion,
|
|
2801
2803
|
{
|
|
2802
2804
|
block: id,
|
|
2803
2805
|
region: "caption",
|
|
@@ -2965,7 +2967,7 @@ function useImageKeys(controller, blockId, picture, editable, root) {
|
|
|
2965
2967
|
}
|
|
2966
2968
|
var ImageBlock = ({ block, controller }) => {
|
|
2967
2969
|
const labels = useLabels();
|
|
2968
|
-
const readOnly =
|
|
2970
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
2969
2971
|
const root = React7.useRef(null);
|
|
2970
2972
|
const picture = hasPicture(block.attrs);
|
|
2971
2973
|
useImageKeys(controller, block.id, picture, !readOnly, root);
|
|
@@ -2978,17 +2980,17 @@ var ImageBlock = ({ block, controller }) => {
|
|
|
2978
2980
|
"aria-label": labels.blockNames.image,
|
|
2979
2981
|
contentEditable: false,
|
|
2980
2982
|
className: "quoin-image",
|
|
2981
|
-
...picture ? { [
|
|
2983
|
+
...picture ? { [chunkMGN332NY_cjs.NODE_ENTRY]: "" } : void 0,
|
|
2982
2984
|
children: picture ? /* @__PURE__ */ jsxRuntime.jsx(ImageFigure, { block, controller, readOnly }) : empty
|
|
2983
2985
|
}
|
|
2984
2986
|
);
|
|
2985
2987
|
};
|
|
2986
2988
|
function useOutsidePress(element, ownerDocument, onPress) {
|
|
2987
2989
|
const latest = React7.useRef(onPress);
|
|
2988
|
-
|
|
2990
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
2989
2991
|
latest.current = onPress;
|
|
2990
2992
|
});
|
|
2991
|
-
|
|
2993
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
2992
2994
|
const doc = ownerDocument();
|
|
2993
2995
|
const inside = (target) => element.current?.contains(target) === true;
|
|
2994
2996
|
let touched = null;
|
|
@@ -3003,7 +3005,7 @@ function useOutsidePress(element, ownerDocument, onPress) {
|
|
|
3003
3005
|
if (touched !== null && !inside(event.target)) latest.current(touched);
|
|
3004
3006
|
touched = null;
|
|
3005
3007
|
};
|
|
3006
|
-
return
|
|
3008
|
+
return chunkMGN332NY_cjs.listen(doc, { pointerdown: down, click }, true);
|
|
3007
3009
|
}, [element, ownerDocument]);
|
|
3008
3010
|
}
|
|
3009
3011
|
function storeAlt(controller, blockId, opened, patch) {
|
|
@@ -3011,7 +3013,7 @@ function storeAlt(controller, blockId, opened, patch) {
|
|
|
3011
3013
|
const attrs = chunkI7X7B3WD_cjs.blockById(editor.state.doc, blockId)?.attrs ?? {};
|
|
3012
3014
|
const changed = chunkI7X7B3WD_cjs.str(attrs.alt) !== opened.alt || attrs.decorative === true !== opened.decorative;
|
|
3013
3015
|
if (controller.readOnly || controller.root === null || changed) return;
|
|
3014
|
-
|
|
3016
|
+
chunkMGN332NY_cjs.onBlock(blockId, chunkFK7EBZPX_cjs.setAttrs(patch))(editor.state, (tr) => editor.dispatch(tr));
|
|
3015
3017
|
}
|
|
3016
3018
|
function AltTextPopover({ blockId, controller, anchor, opener, alt, decorative, onClose }) {
|
|
3017
3019
|
const labels = useLabels();
|
|
@@ -3053,7 +3055,7 @@ function AltTextPopover({ blockId, controller, anchor, opener, alt, decorative,
|
|
|
3053
3055
|
close(true);
|
|
3054
3056
|
};
|
|
3055
3057
|
const onKeyDown = (event) => {
|
|
3056
|
-
if (event.key !== "Tab" ||
|
|
3058
|
+
if (event.key !== "Tab" || chunkMGN332NY_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
3057
3059
|
const controls = [...event.currentTarget.elements];
|
|
3058
3060
|
const next = controls[controls.indexOf(event.target) + (event.shiftKey ? -1 : 1)];
|
|
3059
3061
|
event.preventDefault();
|
|
@@ -3081,7 +3083,7 @@ function AltTextPopover({ blockId, controller, anchor, opener, alt, decorative,
|
|
|
3081
3083
|
onCloseAutoFocus: preventDefault,
|
|
3082
3084
|
onEscapeKeyDown: (event) => {
|
|
3083
3085
|
event.preventDefault();
|
|
3084
|
-
if (!
|
|
3086
|
+
if (!chunkMGN332NY_cjs.isComposingKey(controller, event)) close(false);
|
|
3085
3087
|
},
|
|
3086
3088
|
...bubblePart(controller),
|
|
3087
3089
|
children: /* @__PURE__ */ jsxRuntime.jsxs("form", { noValidate: true, className: "quoin-image-alt", onSubmit: save, onKeyDown, children: [
|
|
@@ -3177,7 +3179,7 @@ function ImageToolbarOverlay({ controller }) {
|
|
|
3177
3179
|
}
|
|
3178
3180
|
function ImageToolbar({ blockId, controller, editingAlt, onEditAlt }) {
|
|
3179
3181
|
const { labels, resolveAssetUrl } = useQuoin();
|
|
3180
|
-
const state =
|
|
3182
|
+
const state = chunkMGN332NY_cjs.useEditorState(controller, chunkMGN332NY_cjs.wholeState);
|
|
3181
3183
|
const picker = useReplacePicker(controller, blockId, uploadImage, "image/*");
|
|
3182
3184
|
const altButton = React7.useRef(null);
|
|
3183
3185
|
const anchor = usePartAnchor(controller, blockId, ".quoin-image-frame");
|
|
@@ -3402,20 +3404,20 @@ function CalloutToneMenu({ blockId, controller, tone }) {
|
|
|
3402
3404
|
{
|
|
3403
3405
|
value: tone,
|
|
3404
3406
|
onValueChange: (value) => setBlockAttrs(controller, blockId, { tone: value }),
|
|
3405
|
-
children: CALLOUT_TONES.map((option) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuRadioItem, { value: option, children: labels.calloutTones[option] }, option))
|
|
3407
|
+
children: chunkMGN332NY_cjs.CALLOUT_TONES.map((option) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuRadioItem, { value: option, children: labels.calloutTones[option] }, option))
|
|
3406
3408
|
}
|
|
3407
3409
|
) })
|
|
3408
3410
|
] });
|
|
3409
3411
|
}
|
|
3410
3412
|
var CalloutBlock = ({ block, controller }) => {
|
|
3411
3413
|
const labels = useLabels();
|
|
3412
|
-
const readOnly =
|
|
3413
|
-
const tone = calloutTone(block.attrs.tone);
|
|
3414
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
3415
|
+
const tone = chunkMGN332NY_cjs.calloutTone(block.attrs.tone);
|
|
3414
3416
|
const icon = calloutIcon(block.attrs, tone);
|
|
3415
3417
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("quoin-callout group/callout flex items-start gap-2", TONE[tone]), "data-tone": tone, children: [
|
|
3416
3418
|
readOnly ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "flex size-6 items-center justify-center text-base", children: icon }) : /* @__PURE__ */ jsxRuntime.jsx(CalloutIconMenu, { blockId: block.id, controller, icon }),
|
|
3417
3419
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3418
|
-
|
|
3420
|
+
chunkMGN332NY_cjs.EditableRegion,
|
|
3419
3421
|
{
|
|
3420
3422
|
block: block.id,
|
|
3421
3423
|
region: "body",
|
|
@@ -3484,22 +3486,22 @@ var headingStyles = (level) => `quoin-heading mb-1 font-semibold leading-tight i
|
|
|
3484
3486
|
function Heading({ block }) {
|
|
3485
3487
|
const labels = useLabels();
|
|
3486
3488
|
const level = chunkI7X7B3WD_cjs.headingLevel(block.attrs.level);
|
|
3487
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { role: "heading", "aria-level": level, className: headingStyles(level), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3489
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { role: "heading", "aria-level": level, className: headingStyles(level), children: /* @__PURE__ */ jsxRuntime.jsx(chunkMGN332NY_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.heading(level) }) });
|
|
3488
3490
|
}
|
|
3489
3491
|
function NumberedItem({ block, controller }) {
|
|
3490
3492
|
const labels = useLabels();
|
|
3491
|
-
const number =
|
|
3493
|
+
const number = chunkMGN332NY_cjs.useOrderedNumber(controller, block.id);
|
|
3492
3494
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-list-item", "data-list": "ordered", children: [
|
|
3493
3495
|
/* @__PURE__ */ jsxRuntime.jsx(ListMarker, { list: "ordered", number, depth: block.indent }),
|
|
3494
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3496
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkMGN332NY_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.numberedItem(number) })
|
|
3495
3497
|
] });
|
|
3496
3498
|
}
|
|
3497
3499
|
function TaskItem({ block, controller }) {
|
|
3498
3500
|
const labels = useLabels();
|
|
3499
|
-
const hostId =
|
|
3501
|
+
const hostId = chunkMGN332NY_cjs.useRegionDomId(block.id, REGION);
|
|
3500
3502
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-task", "data-checked": block.attrs.checked === true, children: [
|
|
3501
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3502
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3503
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkMGN332NY_cjs.TaskCheckbox, { block, controller, label: labels.task, labelledBy: hostId }),
|
|
3504
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkMGN332NY_cjs.EditableRegion, { id: hostId, block: block.id, region: REGION, label: labels.task })
|
|
3503
3505
|
] });
|
|
3504
3506
|
}
|
|
3505
3507
|
var MarkdownBlock = (props) => {
|
|
@@ -3511,16 +3513,16 @@ var MarkdownBlock = (props) => {
|
|
|
3511
3513
|
case "bullet":
|
|
3512
3514
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-list-item", "data-list": "bullet", children: [
|
|
3513
3515
|
/* @__PURE__ */ jsxRuntime.jsx(ListMarker, { list: "bullet", depth: block.indent }),
|
|
3514
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3516
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkMGN332NY_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.bulletItem })
|
|
3515
3517
|
] });
|
|
3516
3518
|
case "ordered":
|
|
3517
3519
|
return /* @__PURE__ */ jsxRuntime.jsx(NumberedItem, { ...props });
|
|
3518
3520
|
case "task":
|
|
3519
3521
|
return /* @__PURE__ */ jsxRuntime.jsx(TaskItem, { ...props });
|
|
3520
3522
|
case "quote":
|
|
3521
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-quote", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3523
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-quote", children: /* @__PURE__ */ jsxRuntime.jsx(chunkMGN332NY_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.quote }) });
|
|
3522
3524
|
default:
|
|
3523
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3525
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkMGN332NY_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.paragraph });
|
|
3524
3526
|
}
|
|
3525
3527
|
};
|
|
3526
3528
|
|
|
@@ -3531,16 +3533,16 @@ function nestedBlockIds({ doc }, blockId) {
|
|
|
3531
3533
|
return doc.blocks.slice(index + 1, chunkFK7EBZPX_cjs.descendantsEnd(doc, index)).map((block) => block.id);
|
|
3532
3534
|
}
|
|
3533
3535
|
function useNestedBlocks(controller, blockId) {
|
|
3534
|
-
return
|
|
3536
|
+
return chunkMGN332NY_cjs.useEditorState(controller, (state) => nestedBlockIds(state, blockId), chunkI7X7B3WD_cjs.sameItems);
|
|
3535
3537
|
}
|
|
3536
3538
|
var ToggleBlock = ({ block, controller }) => {
|
|
3537
3539
|
const labels = useLabels();
|
|
3538
|
-
const domId =
|
|
3540
|
+
const domId = chunkMGN332NY_cjs.useBlockDomId();
|
|
3539
3541
|
const nested = useNestedBlocks(controller, block.id);
|
|
3540
|
-
const open =
|
|
3542
|
+
const open = chunkMGN332NY_cjs.useToggleOpen(controller, block);
|
|
3541
3543
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-toggle", "data-open": open, children: [
|
|
3542
3544
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3543
|
-
|
|
3545
|
+
chunkMGN332NY_cjs.ToggleChevron,
|
|
3544
3546
|
{
|
|
3545
3547
|
block,
|
|
3546
3548
|
controller,
|
|
@@ -3548,7 +3550,7 @@ var ToggleBlock = ({ block, controller }) => {
|
|
|
3548
3550
|
controls: nested.length === 0 ? void 0 : nested.map(domId).join(" ")
|
|
3549
3551
|
}
|
|
3550
3552
|
),
|
|
3551
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3553
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkMGN332NY_cjs.EditableRegion, { block: block.id, region: "text", label: labels.toggle })
|
|
3552
3554
|
] });
|
|
3553
3555
|
};
|
|
3554
3556
|
|
|
@@ -3645,7 +3647,7 @@ function ActionItem({ kit, controller, action, blockIds }) {
|
|
|
3645
3647
|
);
|
|
3646
3648
|
}
|
|
3647
3649
|
function BlockMenuItems({ kit, controller, blocks, styled, title, actions }) {
|
|
3648
|
-
const state =
|
|
3650
|
+
const state = chunkMGN332NY_cjs.useEditorState(controller, chunkMGN332NY_cjs.wholeState);
|
|
3649
3651
|
const blockIds = blocks.map((block) => block.id);
|
|
3650
3652
|
const shown = actions.filter((action) => action.available?.(state, blockIds) ?? true);
|
|
3651
3653
|
const anyText = styled.some((block) => chunkFK7EBZPX_cjs.isTextFlow(state.schema, block));
|
|
@@ -3690,7 +3692,7 @@ var CONTEXT_KIT = {
|
|
|
3690
3692
|
SubTrigger: ContextMenuSubTrigger
|
|
3691
3693
|
};
|
|
3692
3694
|
var GUTTER_BLOCK = "data-quoin-gutter-block";
|
|
3693
|
-
var OWN_MENU = `[${
|
|
3695
|
+
var OWN_MENU = `[${chunkMGN332NY_cjs.NATIVE_INTERACTION}], input, textarea, select`;
|
|
3694
3696
|
function contextBlock(controller, target) {
|
|
3695
3697
|
const { state } = controller.editor;
|
|
3696
3698
|
const gutter = target.closest(`[${GUTTER_BLOCK}]`)?.getAttribute(GUTTER_BLOCK);
|
|
@@ -3719,7 +3721,7 @@ function useContextMenuOpener(controller, store, trigger) {
|
|
|
3719
3721
|
openBlockMenuAt(store, controller.editor.state, block, clientX, clientY);
|
|
3720
3722
|
hidden.dispatchEvent(new MouseEvent("contextmenu", { bubbles: true, cancelable: true, clientX, clientY }));
|
|
3721
3723
|
};
|
|
3722
|
-
return
|
|
3724
|
+
return chunkMGN332NY_cjs.listen(root, { mousedown: onMouseDown, contextmenu: onContextMenu });
|
|
3723
3725
|
}, [controller, store, trigger]);
|
|
3724
3726
|
}
|
|
3725
3727
|
|
|
@@ -3755,7 +3757,7 @@ function useLiveBlocks(controller, blockIds) {
|
|
|
3755
3757
|
(state) => blockIds.flatMap((id) => chunkI7X7B3WD_cjs.blockById(state.doc, id) ?? []),
|
|
3756
3758
|
[blockIds]
|
|
3757
3759
|
);
|
|
3758
|
-
return
|
|
3760
|
+
return chunkMGN332NY_cjs.useEditorState(controller, select, chunkI7X7B3WD_cjs.sameItems);
|
|
3759
3761
|
}
|
|
3760
3762
|
function useMenuBlocks(controller, store, menu) {
|
|
3761
3763
|
const labels = useLabels();
|
|
@@ -3882,7 +3884,7 @@ var DragOverlay = React7.forwardRef(function DragOverlay2(_props, ref) {
|
|
|
3882
3884
|
var DELETION_STEPS = /* @__PURE__ */ new Set(["removeBlocks", "setIndent"]);
|
|
3883
3885
|
function drawnPosition(doc, blockId) {
|
|
3884
3886
|
const index = doc.index.get(blockId) ?? 0;
|
|
3885
|
-
return [
|
|
3887
|
+
return [chunkMGN332NY_cjs.drawnBlockCount(doc, 0, index) + 1, chunkMGN332NY_cjs.drawnBlockCount(doc)];
|
|
3886
3888
|
}
|
|
3887
3889
|
function blockMovedMessage(doc, blockId, labels) {
|
|
3888
3890
|
return labels.blockMoved(...drawnPosition(doc, blockId));
|
|
@@ -3898,7 +3900,7 @@ function deletedCount(tr) {
|
|
|
3898
3900
|
return tr.steps.reduce((deleted, step, i) => {
|
|
3899
3901
|
const { index, count } = step.toJSON();
|
|
3900
3902
|
if (step.stepType !== "removeBlocks" || typeof index !== "number" || typeof count !== "number") return deleted;
|
|
3901
|
-
return deleted +
|
|
3903
|
+
return deleted + chunkMGN332NY_cjs.drawnBlockCount(tr.docs[i], index, index + count);
|
|
3902
3904
|
}, 0);
|
|
3903
3905
|
}
|
|
3904
3906
|
function insertedBlock(tr) {
|
|
@@ -3919,9 +3921,6 @@ function structureAnnouncement(tr, labels, undoKeys) {
|
|
|
3919
3921
|
return inserted === null ? null : labels.blockInserted(...drawnPosition(tr.doc, inserted));
|
|
3920
3922
|
}
|
|
3921
3923
|
|
|
3922
|
-
// src/ui/direction.ts
|
|
3923
|
-
var inlineDirection = (element) => getComputedStyle(element).direction === "rtl" ? "rtl" : "ltr";
|
|
3924
|
-
|
|
3925
3924
|
// src/drag/drag-layout.ts
|
|
3926
3925
|
var INDENT_STEP_REM = 1.5;
|
|
3927
3926
|
function rootOrigin(root) {
|
|
@@ -3940,7 +3939,7 @@ function inlineEdges(shell, box, rtl) {
|
|
|
3940
3939
|
function measure(controller, root, moved, rtl) {
|
|
3941
3940
|
const { doc } = controller.editor.state;
|
|
3942
3941
|
const origin = rootOrigin(root);
|
|
3943
|
-
return
|
|
3942
|
+
return chunkMGN332NY_cjs.visibleBlockIndexes(doc).flatMap((index) => {
|
|
3944
3943
|
const { id, indent: indent3 } = doc.blocks[index];
|
|
3945
3944
|
const shell = controller.blockElement(id);
|
|
3946
3945
|
if (shell === void 0) return [];
|
|
@@ -3953,7 +3952,7 @@ function measure(controller, root, moved, rtl) {
|
|
|
3953
3952
|
var furthestEnd = (blocks, rtl) => blocks.reduce((end, block) => rtl ? Math.min(end, block.end) : Math.max(end, block.end), blocks[0].end);
|
|
3954
3953
|
function measureDrag(controller, root, ids) {
|
|
3955
3954
|
const { doc } = controller.editor.state;
|
|
3956
|
-
const direction = inlineDirection(root);
|
|
3955
|
+
const direction = chunkMGN332NY_cjs.inlineDirection(root);
|
|
3957
3956
|
const rtl = direction === "rtl";
|
|
3958
3957
|
const moved = new Set(chunkFK7EBZPX_cjs.movedBlockIds(doc, ids));
|
|
3959
3958
|
const blocks = measure(controller, root, moved, rtl);
|
|
@@ -4015,7 +4014,7 @@ function draggedBlocks(controller, blockId) {
|
|
|
4015
4014
|
function followPress(press, root, view) {
|
|
4016
4015
|
const { controller, store, overlay, handle: handle2, pointerId } = press;
|
|
4017
4016
|
const doc = view.document;
|
|
4018
|
-
const scroll =
|
|
4017
|
+
const scroll = chunkMGN332NY_cjs.createAutoScroll(root, follow, SCROLL_EDGE);
|
|
4019
4018
|
let pointer = { x: press.x, y: press.y };
|
|
4020
4019
|
let active = null;
|
|
4021
4020
|
let unsubscribe = () => {
|
|
@@ -4090,9 +4089,9 @@ function followPress(press, root, view) {
|
|
|
4090
4089
|
event.stopPropagation();
|
|
4091
4090
|
finish();
|
|
4092
4091
|
}
|
|
4093
|
-
const unlistenDocument =
|
|
4094
|
-
const unlistenBlur =
|
|
4095
|
-
const unlistenKeys =
|
|
4092
|
+
const unlistenDocument = chunkMGN332NY_cjs.listen(doc, { pointermove: onPointerMove, pointerup: onPointerUp, pointercancel: finish });
|
|
4093
|
+
const unlistenBlur = chunkMGN332NY_cjs.listen(view, { blur: finish });
|
|
4094
|
+
const unlistenKeys = chunkMGN332NY_cjs.listen(view, { keydown: onKeyDown }, true);
|
|
4096
4095
|
return finish;
|
|
4097
4096
|
}
|
|
4098
4097
|
function pressDragHandle(press) {
|
|
@@ -4221,13 +4220,13 @@ function place2(controller, root, gutter, block) {
|
|
|
4221
4220
|
const line = firstLine(shell);
|
|
4222
4221
|
const top = line.top + (line.height - gutter.offsetHeight) / 2 - rootBox.top - root.clientTop + root.scrollTop;
|
|
4223
4222
|
const shellBox = shell.getBoundingClientRect();
|
|
4224
|
-
const beside = inlineDirection(root) === "rtl" ? shellBox.right + GAP : shellBox.left - gutter.offsetWidth - GAP;
|
|
4223
|
+
const beside = chunkMGN332NY_cjs.inlineDirection(root) === "rtl" ? shellBox.right + GAP : shellBox.left - gutter.offsetWidth - GAP;
|
|
4225
4224
|
const left = beside - rootBox.left - root.clientLeft + root.scrollLeft;
|
|
4226
4225
|
gutter.style.transform = `translate(${left}px, ${top}px)`;
|
|
4227
4226
|
gutter.style.visibility = "";
|
|
4228
4227
|
}
|
|
4229
4228
|
function useGutterPosition(controller, gutter, block) {
|
|
4230
|
-
|
|
4229
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
4231
4230
|
const element = gutter.current;
|
|
4232
4231
|
const root = controller.root;
|
|
4233
4232
|
const view = root?.ownerDocument.defaultView;
|
|
@@ -4259,7 +4258,7 @@ function blockAcross(controller, root, y) {
|
|
|
4259
4258
|
}
|
|
4260
4259
|
function useGutterTarget(controller, store, gutter) {
|
|
4261
4260
|
const hovered = useCanvasUi(store, (state) => state.hoveredBlock);
|
|
4262
|
-
const head =
|
|
4261
|
+
const head = chunkMGN332NY_cjs.useEditorState(controller, headOf);
|
|
4263
4262
|
const [focusWithin, setFocusWithin] = React7.useState(false);
|
|
4264
4263
|
React7.useEffect(() => {
|
|
4265
4264
|
const root = controller.root;
|
|
@@ -4277,7 +4276,7 @@ function useGutterTarget(controller, store, gutter) {
|
|
|
4277
4276
|
const onFocusIn = () => setFocusWithin(true);
|
|
4278
4277
|
const onFocusOut = (event) => setFocusWithin(root.contains(event.relatedTarget));
|
|
4279
4278
|
setFocusWithin(root.contains(root.ownerDocument.activeElement));
|
|
4280
|
-
return
|
|
4279
|
+
return chunkMGN332NY_cjs.listen(root, { pointermove: onPointerMove, pointerleave: onPointerLeave, focusin: onFocusIn, focusout: onFocusOut });
|
|
4281
4280
|
}, [controller, store, gutter]);
|
|
4282
4281
|
const fallback = focusWithin ? head : null;
|
|
4283
4282
|
const target = hovered ?? fallback;
|
|
@@ -4355,7 +4354,15 @@ function Gutter({ controller, store, actions }) {
|
|
|
4355
4354
|
}
|
|
4356
4355
|
|
|
4357
4356
|
// src/i18n/resolve-labels.ts
|
|
4358
|
-
var
|
|
4357
|
+
var isRecord = (value) => typeof value === "object" && value !== null;
|
|
4358
|
+
function ontoRecords(overrides) {
|
|
4359
|
+
const taken = Object.entries(overrides).map(([key, value]) => {
|
|
4360
|
+
const fallback = englishLabels[key];
|
|
4361
|
+
return [key, isRecord(value) && isRecord(fallback) ? { ...fallback, ...value } : value];
|
|
4362
|
+
});
|
|
4363
|
+
return Object.fromEntries(taken);
|
|
4364
|
+
}
|
|
4365
|
+
var resolveLabels = (overrides) => chunkZWTIRGY5_cjs.mergeLabels(englishLabels, overrides && ontoRecords(overrides));
|
|
4359
4366
|
|
|
4360
4367
|
// src/menus/floating/range-rect.ts
|
|
4361
4368
|
var TEXT_NODE = 3;
|
|
@@ -4370,7 +4377,7 @@ function pointInHost(host, { node, offset }) {
|
|
|
4370
4377
|
return host.contains(node) ? { node, offset: Math.min(offset, nodeLength(node)) } : null;
|
|
4371
4378
|
}
|
|
4372
4379
|
function textRect(host, { from, to }) {
|
|
4373
|
-
const map =
|
|
4380
|
+
const map = chunkMGN332NY_cjs.domMapOf(host);
|
|
4374
4381
|
const range = host.ownerDocument.createRange();
|
|
4375
4382
|
if (map === void 0 || typeof range.getBoundingClientRect !== "function") return null;
|
|
4376
4383
|
const start = pointInHost(host, map.toDom(from, 1));
|
|
@@ -4383,7 +4390,7 @@ function textRect(host, { from, to }) {
|
|
|
4383
4390
|
}
|
|
4384
4391
|
function rangeRect(controller, range) {
|
|
4385
4392
|
const host = controller.registry.get(range.block, range.region);
|
|
4386
|
-
if (host === void 0 || !host.isConnected || controller.composingKey ===
|
|
4393
|
+
if (host === void 0 || !host.isConnected || controller.composingKey === chunkMGN332NY_cjs.hostKey(range.block, range.region)) {
|
|
4387
4394
|
return null;
|
|
4388
4395
|
}
|
|
4389
4396
|
const rect = textRect(host, range);
|
|
@@ -4424,7 +4431,7 @@ function useSelectionAnchor(controller, state) {
|
|
|
4424
4431
|
[controller, state]
|
|
4425
4432
|
);
|
|
4426
4433
|
const [side, setSide] = React7.useState("top");
|
|
4427
|
-
|
|
4434
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
4428
4435
|
const rect = selectionRect(controller);
|
|
4429
4436
|
if (rect) setSide(rect.top < ROOM_ABOVE ? "bottom" : "top");
|
|
4430
4437
|
}, [controller, state]);
|
|
@@ -4506,7 +4513,7 @@ function TurnIntoDropdown({ controller, state }) {
|
|
|
4506
4513
|
}
|
|
4507
4514
|
var DIVIDER = "mx-0.5 h-5 w-px shrink-0 bg-border";
|
|
4508
4515
|
function BubbleToolbar({ controller, labels, store, extraItems }) {
|
|
4509
|
-
const state =
|
|
4516
|
+
const state = chunkMGN332NY_cjs.useEditorState(controller, chunkMGN332NY_cjs.wholeState);
|
|
4510
4517
|
const { anchor, side } = useSelectionAnchor(controller, state);
|
|
4511
4518
|
const roving = useRovingFocus();
|
|
4512
4519
|
const items = React7.useMemo(() => bubbleItems(labels, () => store.set({ linkPopover: { open: true } })), [labels, store]);
|
|
@@ -4570,8 +4577,8 @@ var useFinePointer = () => useMediaQuery("(pointer: fine)", true);
|
|
|
4570
4577
|
// src/menus/bubble/use-bubble-visibility.ts
|
|
4571
4578
|
var hasTextRange = (state) => state.selection?.kind === "text" && !chunkFK7EBZPX_cjs.isCollapsed(state.selection) && chunkFK7EBZPX_cjs.markRanges(state).length > 0;
|
|
4572
4579
|
function useBubbleVisibility(controller) {
|
|
4573
|
-
const range =
|
|
4574
|
-
const readOnly =
|
|
4580
|
+
const range = chunkMGN332NY_cjs.useEditorState(controller, hasTextRange);
|
|
4581
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
4575
4582
|
const fine = useFinePointer();
|
|
4576
4583
|
const settled = useSelectionSettled(controller);
|
|
4577
4584
|
return range && !readOnly && fine && settled;
|
|
@@ -4594,7 +4601,7 @@ function bubbleExtension() {
|
|
|
4594
4601
|
// src/menus/link/link-at-selection.ts
|
|
4595
4602
|
function linkAround(state, from, to = from) {
|
|
4596
4603
|
if (from.block !== to.block || from.region !== to.region) return null;
|
|
4597
|
-
const inline =
|
|
4604
|
+
const inline = chunkMGN332NY_cjs.regionInline(state, from.block, from.region) ?? [];
|
|
4598
4605
|
const extent = chunkFK7EBZPX_cjs.markExtent(inline, from.offset, "link");
|
|
4599
4606
|
if (extent === null || to.offset > extent.to) return null;
|
|
4600
4607
|
const attrs = chunkI7X7B3WD_cjs.sliceInline(inline, extent.from, extent.to)[0]?.marks.find((mark) => mark.type === "link")?.attrs;
|
|
@@ -4617,7 +4624,7 @@ function linkElementAt(controller, target) {
|
|
|
4617
4624
|
}
|
|
4618
4625
|
function linkAtElement(controller, state, element) {
|
|
4619
4626
|
const host = controller.registry.locate(element);
|
|
4620
|
-
const offset = host === null ? null :
|
|
4627
|
+
const offset = host === null ? null : chunkMGN332NY_cjs.domMapOf(host.element)?.fromDom(element, 0) ?? null;
|
|
4621
4628
|
if (host === null || offset === null) return null;
|
|
4622
4629
|
return linkAround(state, { block: host.block, region: host.region, offset });
|
|
4623
4630
|
}
|
|
@@ -4670,7 +4677,7 @@ function caretLinkKey(state) {
|
|
|
4670
4677
|
return link && [link.range.block, link.range.region, link.range.from, link.href].join("\0");
|
|
4671
4678
|
}
|
|
4672
4679
|
function useCaretInLink(controller, delay) {
|
|
4673
|
-
const key =
|
|
4680
|
+
const key = chunkMGN332NY_cjs.useEditorState(controller, caretLinkKey);
|
|
4674
4681
|
const settled = useSelectionSettled(controller);
|
|
4675
4682
|
return useRestedValue(settled ? key : null, delay) !== null;
|
|
4676
4683
|
}
|
|
@@ -4704,7 +4711,7 @@ var URL_LENGTH = 48;
|
|
|
4704
4711
|
var CARD = "flex w-auto items-center gap-0.5 py-1 ps-3 pe-1 shadow-md";
|
|
4705
4712
|
var ADDRESS = "me-1 whitespace-nowrap text-sm text-muted-foreground";
|
|
4706
4713
|
function LinkCard({ controller, labels, store, cardRef, element, onUnlinked }) {
|
|
4707
|
-
const state =
|
|
4714
|
+
const state = chunkMGN332NY_cjs.useEditorState(controller, chunkMGN332NY_cjs.wholeState);
|
|
4708
4715
|
const link = React7.useMemo(
|
|
4709
4716
|
() => element === null ? linkAtSelection(state) : linkAtElement(controller, state, element),
|
|
4710
4717
|
[controller, state, element]
|
|
@@ -4722,7 +4729,7 @@ function LinkCard({ controller, labels, store, cardRef, element, onUnlinked }) {
|
|
|
4722
4729
|
const edit2 = () => {
|
|
4723
4730
|
if (element !== null) {
|
|
4724
4731
|
const selection = chunkFK7EBZPX_cjs.textSelection({ block, region, offset: from }, { block, region, offset: to });
|
|
4725
|
-
|
|
4732
|
+
chunkMGN332NY_cjs.dispatchSelection(controller, selection);
|
|
4726
4733
|
}
|
|
4727
4734
|
store.set({ linkPopover: { open: true } });
|
|
4728
4735
|
};
|
|
@@ -4889,7 +4896,7 @@ function LinkOverlay({ controller }) {
|
|
|
4889
4896
|
const labels = useLabels();
|
|
4890
4897
|
const store = useCanvasUiStore();
|
|
4891
4898
|
const popoverOpen = useCanvasUi(store, isPopoverOpen);
|
|
4892
|
-
const readOnly =
|
|
4899
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
4893
4900
|
useLinkClicks(controller);
|
|
4894
4901
|
React7.useEffect(() => {
|
|
4895
4902
|
if (readOnly && store.get().linkPopover.open) store.set({ linkPopover: { open: false } });
|
|
@@ -5069,10 +5076,10 @@ function useRangeAnchor(controller, range) {
|
|
|
5069
5076
|
const [side, setSide] = React7.useState("bottom");
|
|
5070
5077
|
const latest = React7.useRef(range);
|
|
5071
5078
|
const start = range === null ? null : `${range.block} ${range.region} ${range.from}`;
|
|
5072
|
-
|
|
5079
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5073
5080
|
latest.current = range;
|
|
5074
5081
|
});
|
|
5075
|
-
|
|
5082
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5076
5083
|
const rect = latest.current && rangeRect(controller, latest.current);
|
|
5077
5084
|
const height = controller.root?.ownerDocument.defaultView?.innerHeight;
|
|
5078
5085
|
if (rect && height !== void 0) setSide(sideFor(rect, height));
|
|
@@ -5099,11 +5106,11 @@ function openCombobox(host, listboxId) {
|
|
|
5099
5106
|
}
|
|
5100
5107
|
function useComboboxHost(controller, block, region, listboxId, activeOptionId) {
|
|
5101
5108
|
const host = React7.useRef(null);
|
|
5102
|
-
|
|
5109
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5103
5110
|
host.current = block === null || region === null ? null : controller.registry.get(block, region) ?? null;
|
|
5104
5111
|
return host.current === null ? void 0 : openCombobox(host.current, listboxId);
|
|
5105
5112
|
}, [controller, block, region, listboxId]);
|
|
5106
|
-
|
|
5113
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5107
5114
|
if (host.current !== null) restore(host.current, "aria-activedescendant", activeOptionId);
|
|
5108
5115
|
}, [block, region, activeOptionId]);
|
|
5109
5116
|
}
|
|
@@ -5149,10 +5156,10 @@ function handle(event, menu) {
|
|
|
5149
5156
|
}
|
|
5150
5157
|
function useSuggestionKeys(controller, open, menu) {
|
|
5151
5158
|
const latest = React7.useRef(menu);
|
|
5152
|
-
|
|
5159
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5153
5160
|
latest.current = menu;
|
|
5154
5161
|
});
|
|
5155
|
-
|
|
5162
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5156
5163
|
if (!open) return;
|
|
5157
5164
|
const intercept = (event) => {
|
|
5158
5165
|
const handled = handle(event, latest.current);
|
|
@@ -5173,10 +5180,10 @@ var isPromise = (value) => typeof value?.then === "function";
|
|
|
5173
5180
|
function useSuggestionResults(source, query, onError) {
|
|
5174
5181
|
const [answer, setAnswer] = React7.useState(FORGOTTEN);
|
|
5175
5182
|
const report = React7.useRef(onError);
|
|
5176
|
-
|
|
5183
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5177
5184
|
report.current = onError;
|
|
5178
5185
|
});
|
|
5179
|
-
|
|
5186
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5180
5187
|
if (query === null) {
|
|
5181
5188
|
setAnswer(FORGOTTEN);
|
|
5182
5189
|
return;
|
|
@@ -5220,9 +5227,9 @@ function useSuggestion({
|
|
|
5220
5227
|
emptyLabel
|
|
5221
5228
|
}) {
|
|
5222
5229
|
const { labels, onError } = useQuoin();
|
|
5223
|
-
const readOnly =
|
|
5230
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
5224
5231
|
const selectTrigger = React7.useCallback((state) => chunkFK7EBZPX_cjs.getPluginState(state, pluginKey).active, [pluginKey]);
|
|
5225
|
-
const active =
|
|
5232
|
+
const active = chunkMGN332NY_cjs.useEditorState(controller, selectTrigger);
|
|
5226
5233
|
const trigger = readOnly ? null : active;
|
|
5227
5234
|
const results = useSuggestionResults(source, trigger?.query ?? null, onError);
|
|
5228
5235
|
const sections = React7.useMemo(() => groupItems(results.items, groupOf2), [results.items, groupOf2]);
|
|
@@ -5292,7 +5299,7 @@ function SuggestionMenu(props) {
|
|
|
5292
5299
|
const { trigger, sections, activeIndex, listboxId } = suggestion;
|
|
5293
5300
|
const { anchor, side } = useRangeAnchor(controller, trigger);
|
|
5294
5301
|
const listbox = React7.useRef(null);
|
|
5295
|
-
|
|
5302
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5296
5303
|
listbox.current?.querySelector('[aria-selected="true"]')?.scrollIntoView?.({ block: "nearest" });
|
|
5297
5304
|
}, [activeIndex, sections]);
|
|
5298
5305
|
if (trigger === null) return null;
|
|
@@ -5371,7 +5378,7 @@ var TEXT_STEPS = /* @__PURE__ */ new Set(["replaceInline", "addMark", "removeMar
|
|
|
5371
5378
|
var WHITESPACE3 = /\s/;
|
|
5372
5379
|
var changesBlocks = (tr) => tr !== null && tr.steps.some((step) => !TEXT_STEPS.has(step.stepType));
|
|
5373
5380
|
function withSpaceBefore(state, range) {
|
|
5374
|
-
const inline =
|
|
5381
|
+
const inline = chunkMGN332NY_cjs.regionInline(state, range.block, range.region);
|
|
5375
5382
|
if (inline === void 0 || range.from === 0) return null;
|
|
5376
5383
|
const text2 = chunkI7X7B3WD_cjs.inlineText(inline);
|
|
5377
5384
|
const after = text2.charAt(range.to);
|
|
@@ -5559,7 +5566,7 @@ function placement(viewport) {
|
|
|
5559
5566
|
function EditingTools({ controller }) {
|
|
5560
5567
|
const labels = useLabels();
|
|
5561
5568
|
const store = useCanvasUiStore();
|
|
5562
|
-
const state =
|
|
5569
|
+
const state = chunkMGN332NY_cjs.useEditorState(controller, chunkMGN332NY_cjs.wholeState);
|
|
5563
5570
|
const viewport = useVisualViewport();
|
|
5564
5571
|
const roving = useRovingFocus();
|
|
5565
5572
|
const items = React7.useMemo(() => mobileItems(labels, () => store.set({ linkPopover: { open: true } })), [labels, store]);
|
|
@@ -5822,6 +5829,14 @@ function shortcutsExtension(store) {
|
|
|
5822
5829
|
ui: { overlays: [ShortcutsOverlay] }
|
|
5823
5830
|
});
|
|
5824
5831
|
}
|
|
5832
|
+
function useRootDirection(controller) {
|
|
5833
|
+
const [direction, setDirection] = React7.useState("ltr");
|
|
5834
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
5835
|
+
const root = controller.root;
|
|
5836
|
+
if (root !== null) setDirection(chunkMGN332NY_cjs.inlineDirection(root));
|
|
5837
|
+
}, [controller]);
|
|
5838
|
+
return direction;
|
|
5839
|
+
}
|
|
5825
5840
|
|
|
5826
5841
|
// src/canvas/block-link.ts
|
|
5827
5842
|
var FRAGMENT = "#block-";
|
|
@@ -5883,7 +5898,7 @@ function runHistoryKey(controller, event) {
|
|
|
5883
5898
|
}
|
|
5884
5899
|
function useBlockIndex(controller, blockId) {
|
|
5885
5900
|
const select = React7.useCallback((state) => state.doc.index.get(blockId) ?? -1, [blockId]);
|
|
5886
|
-
return
|
|
5901
|
+
return chunkMGN332NY_cjs.useEditorState(controller, select);
|
|
5887
5902
|
}
|
|
5888
5903
|
var FOCUSABLE = [
|
|
5889
5904
|
"input:not([disabled])",
|
|
@@ -5910,8 +5925,8 @@ function useEditingFocus(root, editing, stop) {
|
|
|
5910
5925
|
const leaveUnlessInside = (event) => {
|
|
5911
5926
|
if (!inside.current.has(event)) stop();
|
|
5912
5927
|
};
|
|
5913
|
-
const unlistenCapture =
|
|
5914
|
-
const unlisten =
|
|
5928
|
+
const unlistenCapture = chunkMGN332NY_cjs.listen(doc, { pointerdown: leaveForCanvas }, true);
|
|
5929
|
+
const unlisten = chunkMGN332NY_cjs.listen(doc, { pointerdown: leaveUnlessInside, focusin: leaveUnlessInside });
|
|
5915
5930
|
return () => {
|
|
5916
5931
|
unlistenCapture();
|
|
5917
5932
|
unlisten();
|
|
@@ -5940,8 +5955,8 @@ function VoidEditor({ Editor, controller, ...props }) {
|
|
|
5940
5955
|
}
|
|
5941
5956
|
function VoidBlock({ block, controller, definition }) {
|
|
5942
5957
|
const { blockTypes, labels } = useQuoin();
|
|
5943
|
-
const { report } = React7.useContext(
|
|
5944
|
-
const readOnly =
|
|
5958
|
+
const { report } = React7.useContext(chunkMGN332NY_cjs.BlockErrorContext);
|
|
5959
|
+
const readOnly = chunkMGN332NY_cjs.useReadOnly(controller);
|
|
5945
5960
|
const { editor: Editor, alwaysEditing = false } = definition;
|
|
5946
5961
|
const name = blockTypeLabel(labels, block, blockTypes);
|
|
5947
5962
|
const blockId = block.id;
|
|
@@ -6005,7 +6020,7 @@ function VoidBlock({ block, controller, definition }) {
|
|
|
6005
6020
|
role: "group",
|
|
6006
6021
|
"aria-label": name,
|
|
6007
6022
|
tabIndex: editorShown ? -1 : void 0,
|
|
6008
|
-
...{ [
|
|
6023
|
+
...{ [chunkMGN332NY_cjs.NATIVE_INTERACTION]: editorShown ? "" : void 0 },
|
|
6009
6024
|
onKeyDown,
|
|
6010
6025
|
...focusHandlers,
|
|
6011
6026
|
onClick,
|
|
@@ -6226,7 +6241,7 @@ function deletions(codec, tr) {
|
|
|
6226
6241
|
}
|
|
6227
6242
|
function useDeleteReporter(controller, onDelete) {
|
|
6228
6243
|
const latest = React7.useRef(onDelete);
|
|
6229
|
-
|
|
6244
|
+
chunkMGN332NY_cjs.useIsomorphicLayoutEffect(() => {
|
|
6230
6245
|
latest.current = onDelete;
|
|
6231
6246
|
});
|
|
6232
6247
|
React7.useEffect(() => {
|
|
@@ -6303,7 +6318,7 @@ var BlockCanvas = React7.forwardRef(function BlockCanvas2({
|
|
|
6303
6318
|
);
|
|
6304
6319
|
useDefinitionWarnings(blockTypes, readOnly);
|
|
6305
6320
|
const [focusOnMount] = React7.useState(autoFocus);
|
|
6306
|
-
const controller =
|
|
6321
|
+
const controller = chunkMGN332NY_cjs.useQuoinEditor({
|
|
6307
6322
|
blocks,
|
|
6308
6323
|
onChange,
|
|
6309
6324
|
readOnly,
|
|
@@ -6339,6 +6354,7 @@ var BlockCanvas = React7.forwardRef(function BlockCanvas2({
|
|
|
6339
6354
|
const placeholderLabels = placeholder === void 0 ? labels : { ...labels, placeholderEmpty: placeholder };
|
|
6340
6355
|
return (state, block) => placeholderFor(state, block, placeholderLabels);
|
|
6341
6356
|
}, [labels, placeholder]);
|
|
6357
|
+
const direction = useRootDirection(controller);
|
|
6342
6358
|
React7.useImperativeHandle(
|
|
6343
6359
|
ref,
|
|
6344
6360
|
() => ({
|
|
@@ -6349,8 +6365,8 @@ var BlockCanvas = React7.forwardRef(function BlockCanvas2({
|
|
|
6349
6365
|
}),
|
|
6350
6366
|
[controller, resolveAssetUrl]
|
|
6351
6367
|
);
|
|
6352
|
-
return /* @__PURE__ */ jsxRuntime.jsx(QuoinProvider, { value: { blockTypes, upload, resolveAssetUrl, onError, highlight, controller, labels }, children: /* @__PURE__ */ jsxRuntime.jsx(VoidEditingContext.Provider, { value: voidEditing, children: /* @__PURE__ */ jsxRuntime.jsx(SlashItemsProvider, { value: slashItems, children: /* @__PURE__ */ jsxRuntime.jsx(BubbleItemsProvider, { value: ui.bubbleItems, children: /* @__PURE__ */ jsxRuntime.jsx(CanvasUiProvider, { value: uiStore, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6353
|
-
|
|
6368
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactDirection.DirectionProvider, { dir: direction, children: /* @__PURE__ */ jsxRuntime.jsx(QuoinProvider, { value: { blockTypes, upload, resolveAssetUrl, onError, highlight, controller, labels }, children: /* @__PURE__ */ jsxRuntime.jsx(VoidEditingContext.Provider, { value: voidEditing, children: /* @__PURE__ */ jsxRuntime.jsx(SlashItemsProvider, { value: slashItems, children: /* @__PURE__ */ jsxRuntime.jsx(BubbleItemsProvider, { value: ui.bubbleItems, children: /* @__PURE__ */ jsxRuntime.jsx(CanvasUiProvider, { value: uiStore, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6369
|
+
chunkMGN332NY_cjs.EditorView,
|
|
6354
6370
|
{
|
|
6355
6371
|
controller,
|
|
6356
6372
|
renderers: ui.renderers,
|
|
@@ -6376,7 +6392,7 @@ var BlockCanvas = React7.forwardRef(function BlockCanvas2({
|
|
|
6376
6392
|
ui.overlays.map((Overlay2, index) => /* @__PURE__ */ jsxRuntime.jsx(Overlay2, { controller }, index))
|
|
6377
6393
|
]
|
|
6378
6394
|
}
|
|
6379
|
-
) }) }) }) }) });
|
|
6395
|
+
) }) }) }) }) }) });
|
|
6380
6396
|
});
|
|
6381
6397
|
function progressText(state, labels) {
|
|
6382
6398
|
if (state.phase === "busy") return labels.uploading;
|
|
@@ -6440,8 +6456,15 @@ async function attemptSave(run) {
|
|
|
6440
6456
|
return { error };
|
|
6441
6457
|
}
|
|
6442
6458
|
}
|
|
6459
|
+
function retryable(error, isRetryable) {
|
|
6460
|
+
try {
|
|
6461
|
+
return isRetryable(error);
|
|
6462
|
+
} catch {
|
|
6463
|
+
return false;
|
|
6464
|
+
}
|
|
6465
|
+
}
|
|
6443
6466
|
function nextRetryDelay(error, retriesSoFar, { debounceMs, maxBackoffMs, maxRetries, isRetryable }) {
|
|
6444
|
-
if (retriesSoFar >= maxRetries || !
|
|
6467
|
+
if (retriesSoFar >= maxRetries || !retryable(error, isRetryable)) return null;
|
|
6445
6468
|
return Math.min(debounceMs * 2 ** (retriesSoFar + 1), maxBackoffMs);
|
|
6446
6469
|
}
|
|
6447
6470
|
|
|
@@ -6634,7 +6657,6 @@ exports.dismissSuggestion = dismissSuggestion;
|
|
|
6634
6657
|
exports.englishLabels = englishLabels;
|
|
6635
6658
|
exports.focusNode = focusNode;
|
|
6636
6659
|
exports.formatShortcut = formatShortcut;
|
|
6637
|
-
exports.inlineDirection = inlineDirection;
|
|
6638
6660
|
exports.insertBlockToWrite = insertBlockToWrite;
|
|
6639
6661
|
exports.insertBlocks = insertBlocks;
|
|
6640
6662
|
exports.interceptKeys = interceptKeys;
|