quoin-editor 2.0.0 → 2.0.2
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 +19 -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-6BVE46K7.js → chunk-4VCCGBXW.js} +7 -5
- package/dist/{chunk-6BVE46K7.js.map → chunk-4VCCGBXW.js.map} +1 -1
- package/dist/{chunk-M77A3EGD.js → chunk-5A2MHCYI.js} +3 -3
- package/dist/{chunk-M77A3EGD.js.map → chunk-5A2MHCYI.js.map} +1 -1
- package/dist/{chunk-CJVJNMOB.cjs → chunk-5VBDRJ5Y.cjs} +133 -121
- package/dist/{chunk-IW4TMECB.js → chunk-AVD2AI47.js} +3 -3
- package/dist/{chunk-IW4TMECB.js.map → chunk-AVD2AI47.js.map} +1 -1
- package/dist/{chunk-YABGWOAV.js → chunk-DGKIKXB7.js} +3 -3
- package/dist/{chunk-YABGWOAV.js.map → chunk-DGKIKXB7.js.map} +1 -1
- package/dist/{chunk-MAS4AEF4.js → chunk-DT3ODGZ7.js} +4 -4
- package/dist/{chunk-MAS4AEF4.js.map → chunk-DT3ODGZ7.js.map} +1 -1
- package/dist/{chunk-IKZSCTRF.cjs → chunk-F3BC5ITU.cjs} +3 -3
- package/dist/{chunk-D6CIIWCU.cjs → chunk-JM5TRLEC.cjs} +30 -30
- package/dist/{chunk-V4WQG7FR.cjs → chunk-LBP64GKQ.cjs} +63 -63
- package/dist/{chunk-KQPZTSW3.js → chunk-M7L444WV.js} +4 -4
- package/dist/{chunk-KQPZTSW3.js.map → chunk-M7L444WV.js.map} +1 -1
- package/dist/{chunk-BYYCD54G.cjs → chunk-NZFGAV3L.cjs} +2 -2
- package/dist/{chunk-EU5IGKMP.js → chunk-OBOIZ7L3.js} +3 -3
- package/dist/{chunk-EU5IGKMP.js.map → chunk-OBOIZ7L3.js.map} +1 -1
- package/dist/{chunk-ZN5DHNSL.js → chunk-QIGZ5JAY.js} +41 -29
- package/dist/chunk-QIGZ5JAY.js.map +1 -0
- package/dist/{chunk-HOSDMHK6.cjs → chunk-RR67AKP6.cjs} +25 -25
- package/dist/{chunk-5YAJZSTI.cjs → chunk-RWSC47L7.cjs} +18 -18
- package/dist/{chunk-NL5J77VD.js → chunk-SE36LU6G.js} +19 -5
- package/dist/chunk-SE36LU6G.js.map +1 -0
- package/dist/{chunk-4PIJC4FD.cjs → chunk-SHZGRFYY.cjs} +14 -14
- package/dist/{chunk-NFO3W644.cjs → chunk-TDXQSNFS.cjs} +22 -20
- package/dist/{chunk-Z6LAARPB.cjs → chunk-UKUAQJME.cjs} +17 -3
- package/dist/{chunk-66OPHDFA.cjs → chunk-XC4WZTMY.cjs} +50 -50
- package/dist/{chunk-B4VCDJSA.js → chunk-XLR2O4OK.js} +5 -5
- package/dist/{chunk-B4VCDJSA.js.map → chunk-XLR2O4OK.js.map} +1 -1
- package/dist/{chunk-77CNOLHY.cjs → chunk-YETMZ27Q.cjs} +3 -3
- package/dist/{chunk-LEICOZYK.cjs → chunk-YYBPQ4TY.cjs} +2 -2
- package/dist/{chunk-2UKI26JA.js → chunk-Z3GLEAOI.js} +4 -4
- package/dist/{chunk-2UKI26JA.js.map → chunk-Z3GLEAOI.js.map} +1 -1
- package/dist/{chunk-J2SVYBTC.js → chunk-ZDNYIQKM.js} +4 -4
- package/dist/{chunk-J2SVYBTC.js.map → chunk-ZDNYIQKM.js.map} +1 -1
- package/dist/{chunk-5X52BAZB.js → chunk-ZHLNPNE2.js} +5 -5
- package/dist/{chunk-5X52BAZB.js.map → chunk-ZHLNPNE2.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-data.cjs +4 -3
- package/dist/emoji-data.js +4 -3
- package/dist/emoji-data.js.map +1 -1
- 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.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 +1 -1
- package/dist/chunk-NL5J77VD.js.map +0 -1
- package/dist/chunk-ZN5DHNSL.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkUKUAQJME_cjs = require('./chunk-UKUAQJME.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');
|
|
@@ -820,7 +820,7 @@ function selectNode(controller, blockId) {
|
|
|
820
820
|
const { editor } = controller;
|
|
821
821
|
const { selection } = editor.state;
|
|
822
822
|
if (selection?.kind === "node" && selection.block === blockId) return;
|
|
823
|
-
|
|
823
|
+
chunkUKUAQJME_cjs.dispatchSelection(controller, chunkFK7EBZPX_cjs.nodeSelection(blockId));
|
|
824
824
|
}
|
|
825
825
|
function focusNode(controller, blockId) {
|
|
826
826
|
selectNode(controller, blockId);
|
|
@@ -1526,7 +1526,7 @@ function codeToParagraph(blockId) {
|
|
|
1526
1526
|
};
|
|
1527
1527
|
}
|
|
1528
1528
|
function leaveCode(controller, blockId, direction, addsLine = false) {
|
|
1529
|
-
const moved =
|
|
1529
|
+
const moved = chunkUKUAQJME_cjs.moveToNeighbour(controller, blockId, direction);
|
|
1530
1530
|
if (!moved && !(addsLine && controller.run(insertBlocks([{ type: "MARKDOWN" }], "text", blockId)))) return false;
|
|
1531
1531
|
controller.focus();
|
|
1532
1532
|
return true;
|
|
@@ -1651,7 +1651,7 @@ function travel({ controller, blockId, area }, command) {
|
|
|
1651
1651
|
const before = area.value;
|
|
1652
1652
|
controller.run(command);
|
|
1653
1653
|
const { selection } = controller.editor.state;
|
|
1654
|
-
const edit2 =
|
|
1654
|
+
const edit2 = chunkUKUAQJME_cjs.textDiff(before, area.value);
|
|
1655
1655
|
if (selection?.kind !== "node" || selection.block !== blockId) controller.focus();
|
|
1656
1656
|
else if (edit2 !== null) area.setSelectionRange(edit2.from + edit2.insert.length, edit2.from + edit2.insert.length);
|
|
1657
1657
|
return true;
|
|
@@ -1736,11 +1736,11 @@ function CodeEditor({ block, controller, field, focusControls }) {
|
|
|
1736
1736
|
useTypeIntoCode(controller, blockId, field, edit2);
|
|
1737
1737
|
const onKeyDown = (event) => {
|
|
1738
1738
|
const area = event.currentTarget;
|
|
1739
|
-
if (
|
|
1739
|
+
if (chunkUKUAQJME_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
1740
1740
|
const action = codeKeyAction(event, fieldOf(area), controller.isMac);
|
|
1741
1741
|
if (action !== null && runCodeAction(action, { controller, blockId, area, edit: edit2, focusControls })) event.preventDefault();
|
|
1742
1742
|
};
|
|
1743
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...{ [
|
|
1743
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...{ [chunkUKUAQJME_cjs.NATIVE_INTERACTION]: "" }, dir: "ltr", className: "quoin-code-scroll", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-code-lines", children: [
|
|
1744
1744
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1745
1745
|
HighlightOverlay,
|
|
1746
1746
|
{
|
|
@@ -1810,7 +1810,7 @@ var Button = React7__namespace.forwardRef(function Button2({ className, variant
|
|
|
1810
1810
|
var COPIED_FOR_MS = 1500;
|
|
1811
1811
|
function CopyCodeButton({ code, controller }) {
|
|
1812
1812
|
const labels = useLabels();
|
|
1813
|
-
const readOnly =
|
|
1813
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
1814
1814
|
const [copied, setCopied] = React7.useState(false);
|
|
1815
1815
|
React7.useEffect(() => {
|
|
1816
1816
|
if (!copied) return;
|
|
@@ -1893,14 +1893,14 @@ var preventDefault = (event) => event.preventDefault();
|
|
|
1893
1893
|
|
|
1894
1894
|
// src/blocks/text/set-block-attrs.ts
|
|
1895
1895
|
function setBlockAttrs(controller, blockId, patch) {
|
|
1896
|
-
if (!controller.readOnly) controller.run(
|
|
1896
|
+
if (!controller.readOnly) controller.run(chunkUKUAQJME_cjs.onBlock(blockId, chunkFK7EBZPX_cjs.setAttrs(patch)));
|
|
1897
1897
|
}
|
|
1898
1898
|
var FIELD = `quoin-code-language quoin-code-control ${FOCUS_RING}`;
|
|
1899
1899
|
var CONTENT = `${MENU_CONTENT} flex max-h-64 w-48 flex-col overflow-y-hidden`;
|
|
1900
1900
|
function LanguageCombobox({ blockId, controller, language: language2, field, onDone }) {
|
|
1901
1901
|
const labels = useLabels();
|
|
1902
1902
|
const listboxId = React7.useId();
|
|
1903
|
-
const
|
|
1903
|
+
const list2 = React7.useRef(null);
|
|
1904
1904
|
const settled = React7.useRef(false);
|
|
1905
1905
|
const focusedByPress = React7.useRef(false);
|
|
1906
1906
|
const shown = languageName(language2) ?? language2;
|
|
@@ -1909,8 +1909,8 @@ function LanguageCombobox({ blockId, controller, language: language2, field, onD
|
|
|
1909
1909
|
const options = draft === null ? [] : languageOptions(draft === shown ? "" : draft, labels.plainText);
|
|
1910
1910
|
const open = options.length > 0;
|
|
1911
1911
|
const optionId = (index) => `${listboxId}-${index}`;
|
|
1912
|
-
|
|
1913
|
-
|
|
1912
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
1913
|
+
list2.current?.querySelector('[aria-selected="true"]')?.scrollIntoView?.({ block: "nearest" });
|
|
1914
1914
|
}, [active]);
|
|
1915
1915
|
const close = () => {
|
|
1916
1916
|
setDraft(null);
|
|
@@ -1935,7 +1935,7 @@ function LanguageCombobox({ blockId, controller, language: language2, field, onD
|
|
|
1935
1935
|
onDone();
|
|
1936
1936
|
};
|
|
1937
1937
|
const onKeyDown = (event) => {
|
|
1938
|
-
if (
|
|
1938
|
+
if (chunkUKUAQJME_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
1939
1939
|
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
|
1940
1940
|
event.preventDefault();
|
|
1941
1941
|
const step = event.key === "ArrowDown" ? 1 : -1;
|
|
@@ -1992,7 +1992,7 @@ function LanguageCombobox({ blockId, controller, language: language2, field, onD
|
|
|
1992
1992
|
className: CONTENT,
|
|
1993
1993
|
onOpenAutoFocus: preventDefault,
|
|
1994
1994
|
onCloseAutoFocus: preventDefault,
|
|
1995
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref:
|
|
1995
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: list2, role: "listbox", id: listboxId, "aria-label": labels.codeLanguage, className: "min-h-0 overflow-y-auto", children: options.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1996
1996
|
SuggestionOption,
|
|
1997
1997
|
{
|
|
1998
1998
|
id: optionId(index),
|
|
@@ -2009,7 +2009,7 @@ function LanguageCombobox({ blockId, controller, language: language2, field, onD
|
|
|
2009
2009
|
}
|
|
2010
2010
|
var CodeBlock = ({ block, controller }) => {
|
|
2011
2011
|
const labels = useLabels();
|
|
2012
|
-
const readOnly =
|
|
2012
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
2013
2013
|
const languageField = React7.useRef(null);
|
|
2014
2014
|
const codeField = React7.useRef(null);
|
|
2015
2015
|
const code = chunkI7X7B3WD_cjs.str(block.attrs.code);
|
|
@@ -2111,7 +2111,7 @@ function selectHandlers(controller, blockId, root, onSelect) {
|
|
|
2111
2111
|
return {
|
|
2112
2112
|
onKeyDown(event) {
|
|
2113
2113
|
const key = event.nativeEvent;
|
|
2114
|
-
if (
|
|
2114
|
+
if (chunkUKUAQJME_cjs.isComposingKey(controller, key)) return;
|
|
2115
2115
|
if (event.key === "Escape") select();
|
|
2116
2116
|
else if (!(event.metaKey || event.ctrlKey) || event.target.matches("input:not([type=file])") || !controller.edit(() => controller.editor.handleKey(key)))
|
|
2117
2117
|
return;
|
|
@@ -2235,7 +2235,7 @@ function isBubblePart(element, controller) {
|
|
|
2235
2235
|
return element?.closest(`[${BUBBLE_PART}]`)?.getAttribute(BUBBLE_PART) === partId(controller);
|
|
2236
2236
|
}
|
|
2237
2237
|
function focusInEditor(controller) {
|
|
2238
|
-
const active =
|
|
2238
|
+
const active = controller.root?.ownerDocument.activeElement ?? null;
|
|
2239
2239
|
return active !== null && (controller.isEditorElement(active) || isBubblePart(active, controller));
|
|
2240
2240
|
}
|
|
2241
2241
|
|
|
@@ -2248,7 +2248,7 @@ var KINDS = [
|
|
|
2248
2248
|
[FileText, /^(text\/|(txt|md|csv|pdf|rtf|docx?)$)/]
|
|
2249
2249
|
];
|
|
2250
2250
|
var kindOf = (value) => KINDS.find(([, pattern]) => pattern.test(value))?.[0];
|
|
2251
|
-
var fileIcon = (mime, filename) => kindOf(mime) ?? kindOf(/\.([^.]+)$/.exec(filename)?.[1].toLowerCase() ?? "") ?? FileIcon;
|
|
2251
|
+
var fileIcon = (mime, filename) => kindOf(mime.toLowerCase()) ?? kindOf(/\.([^.]+)$/.exec(filename)?.[1].toLowerCase() ?? "") ?? FileIcon;
|
|
2252
2252
|
|
|
2253
2253
|
// src/blocks/file/file-source.ts
|
|
2254
2254
|
var fileName = (attrs) => chunkI7X7B3WD_cjs.str(attrs.filename) || chunkI7X7B3WD_cjs.str(attrs.storageKey);
|
|
@@ -2333,7 +2333,7 @@ var uploadFile = (controller, blockId, file, host) => uploadInto(
|
|
|
2333
2333
|
var anyFile = () => true;
|
|
2334
2334
|
var FileBlock = ({ block, controller }) => {
|
|
2335
2335
|
const labels = useLabels();
|
|
2336
|
-
const readOnly =
|
|
2336
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
2337
2337
|
const root = React7.useRef(null);
|
|
2338
2338
|
const filled = hasFile(block.attrs);
|
|
2339
2339
|
useNodeKeys(controller, block.id, !readOnly, !filled, root);
|
|
@@ -2485,7 +2485,7 @@ function useRovingFocus() {
|
|
|
2485
2485
|
},
|
|
2486
2486
|
[syncTabStop]
|
|
2487
2487
|
);
|
|
2488
|
-
|
|
2488
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(syncTabStop);
|
|
2489
2489
|
const onFocus = (event) => {
|
|
2490
2490
|
if (!owns(event.target)) return;
|
|
2491
2491
|
current.current = event.target;
|
|
@@ -2504,7 +2504,7 @@ function useRovingFocus() {
|
|
|
2504
2504
|
// src/menus/floating/use-focus-key.ts
|
|
2505
2505
|
var isFocusKey = (event) => event.key === "F10" && event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey;
|
|
2506
2506
|
function useFocusKey(controller, focus) {
|
|
2507
|
-
|
|
2507
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
2508
2508
|
const intercept = (event) => {
|
|
2509
2509
|
if (!isFocusKey(event)) return false;
|
|
2510
2510
|
event.preventDefault();
|
|
@@ -2516,11 +2516,11 @@ function useFocusKey(controller, focus) {
|
|
|
2516
2516
|
}
|
|
2517
2517
|
function NodeToolbar(props) {
|
|
2518
2518
|
const { blockId, controller, label, anchor, items, next, buttonRefs, children, popover } = props;
|
|
2519
|
-
const state =
|
|
2519
|
+
const state = chunkUKUAQJME_cjs.useEditorState(controller, chunkUKUAQJME_cjs.wholeState);
|
|
2520
2520
|
const roving = useRovingFocus();
|
|
2521
2521
|
useFocusKey(controller, roving.focusCurrent);
|
|
2522
2522
|
const onKeyDown = (event) => {
|
|
2523
|
-
if (!roving.owns(event.target) ||
|
|
2523
|
+
if (!roving.owns(event.target) || chunkUKUAQJME_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
2524
2524
|
const tab = event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey;
|
|
2525
2525
|
const ahead = tab && !event.shiftKey && next !== void 0 ? blockPart(controller, blockId, next) : void 0;
|
|
2526
2526
|
if (ahead !== void 0) ahead.focus();
|
|
@@ -2573,13 +2573,14 @@ function createSettled(controller) {
|
|
|
2573
2573
|
return {
|
|
2574
2574
|
read: () => focusInEditor(controller) && !pressed && !composing && !viewComposing(),
|
|
2575
2575
|
subscribe(notify) {
|
|
2576
|
+
const doc = controller.root?.ownerDocument ?? document;
|
|
2576
2577
|
const listeners2 = Object.entries(handlers).map(([type, handle2]) => {
|
|
2577
2578
|
const listener = (event) => {
|
|
2578
2579
|
handle2(event);
|
|
2579
2580
|
notify();
|
|
2580
2581
|
};
|
|
2581
|
-
|
|
2582
|
-
return () =>
|
|
2582
|
+
doc.addEventListener(type, listener, true);
|
|
2583
|
+
return () => doc.removeEventListener(type, listener, true);
|
|
2583
2584
|
});
|
|
2584
2585
|
const stopState = controller.editor.subscribe(() => notify());
|
|
2585
2586
|
return () => {
|
|
@@ -2601,8 +2602,8 @@ var selectedBlock = (type, filled) => ({ doc, selection }) => {
|
|
|
2601
2602
|
return block?.type === type && filled(block.attrs) ? block.id : null;
|
|
2602
2603
|
};
|
|
2603
2604
|
function useToolbarBlock(controller, selected, keptFor = null) {
|
|
2604
|
-
const blockId =
|
|
2605
|
-
const readOnly =
|
|
2605
|
+
const blockId = chunkUKUAQJME_cjs.useEditorState(controller, selected);
|
|
2606
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
2606
2607
|
const settled = useSelectionSettled(controller);
|
|
2607
2608
|
return blockId !== null && !readOnly && (settled || keptFor === blockId) ? blockId : null;
|
|
2608
2609
|
}
|
|
@@ -2681,7 +2682,7 @@ function ResizeHandles({ blockId, controller, frame, percent, centred, onPreview
|
|
|
2681
2682
|
const value = percent ?? drawn;
|
|
2682
2683
|
const write = (widthPercent) => setBlockAttrs(controller, blockId, { widthPercent });
|
|
2683
2684
|
const onKeyDown = (event) => {
|
|
2684
|
-
if (
|
|
2685
|
+
if (chunkUKUAQJME_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
2685
2686
|
const next = keyedWidth(event.key, value);
|
|
2686
2687
|
if (event.key === "Escape") controller.focus();
|
|
2687
2688
|
else if (next === null) return;
|
|
@@ -2723,7 +2724,7 @@ function ResizeHandles({ blockId, controller, frame, percent, centred, onPreview
|
|
|
2723
2724
|
"aria-valuetext": labels.widthValue(value),
|
|
2724
2725
|
"data-side": side,
|
|
2725
2726
|
className: "quoin-image-handle",
|
|
2726
|
-
...{ [
|
|
2727
|
+
...{ [chunkUKUAQJME_cjs.NATIVE_INTERACTION]: "" },
|
|
2727
2728
|
...bubblePart(controller),
|
|
2728
2729
|
onKeyDown,
|
|
2729
2730
|
onPointerDown: onPointerDown(side),
|
|
@@ -2796,7 +2797,7 @@ function ImageFigure({ block, controller, readOnly }) {
|
|
|
2796
2797
|
)
|
|
2797
2798
|
] }),
|
|
2798
2799
|
(!readOnly || (regions.caption?.length ?? 0) > 0) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2799
|
-
|
|
2800
|
+
chunkUKUAQJME_cjs.EditableRegion,
|
|
2800
2801
|
{
|
|
2801
2802
|
block: id,
|
|
2802
2803
|
region: "caption",
|
|
@@ -2810,11 +2811,16 @@ function ImageFigure({ block, controller, readOnly }) {
|
|
|
2810
2811
|
|
|
2811
2812
|
// src/menus/link/link-address.ts
|
|
2812
2813
|
var BARE_DOMAIN = /^[^\s/#?.]\S*\.\S*$/;
|
|
2814
|
+
var EMAIL = /^[^\s@/]+@[^\s@/]+\.[^\s@/]+$/;
|
|
2813
2815
|
var WHITESPACE = /\s/;
|
|
2816
|
+
function scheme(address) {
|
|
2817
|
+
if (EMAIL.test(address)) return `mailto:${address}`;
|
|
2818
|
+
return BARE_DOMAIN.test(address) ? `https://${address}` : address;
|
|
2819
|
+
}
|
|
2814
2820
|
function linkAddress(typed2) {
|
|
2815
2821
|
const address = typed2.trim();
|
|
2816
2822
|
if (WHITESPACE.test(address)) return null;
|
|
2817
|
-
const completed =
|
|
2823
|
+
const completed = chunkI7X7B3WD_cjs.SCHEME.test(address) ? address : scheme(address);
|
|
2818
2824
|
const href = chunkI7X7B3WD_cjs.sanitizeHref(completed);
|
|
2819
2825
|
return href || null;
|
|
2820
2826
|
}
|
|
@@ -2959,7 +2965,7 @@ function useImageKeys(controller, blockId, picture, editable, root) {
|
|
|
2959
2965
|
}
|
|
2960
2966
|
var ImageBlock = ({ block, controller }) => {
|
|
2961
2967
|
const labels = useLabels();
|
|
2962
|
-
const readOnly =
|
|
2968
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
2963
2969
|
const root = React7.useRef(null);
|
|
2964
2970
|
const picture = hasPicture(block.attrs);
|
|
2965
2971
|
useImageKeys(controller, block.id, picture, !readOnly, root);
|
|
@@ -2972,17 +2978,17 @@ var ImageBlock = ({ block, controller }) => {
|
|
|
2972
2978
|
"aria-label": labels.blockNames.image,
|
|
2973
2979
|
contentEditable: false,
|
|
2974
2980
|
className: "quoin-image",
|
|
2975
|
-
...picture ? { [
|
|
2981
|
+
...picture ? { [chunkUKUAQJME_cjs.NODE_ENTRY]: "" } : void 0,
|
|
2976
2982
|
children: picture ? /* @__PURE__ */ jsxRuntime.jsx(ImageFigure, { block, controller, readOnly }) : empty
|
|
2977
2983
|
}
|
|
2978
2984
|
);
|
|
2979
2985
|
};
|
|
2980
2986
|
function useOutsidePress(element, ownerDocument, onPress) {
|
|
2981
2987
|
const latest = React7.useRef(onPress);
|
|
2982
|
-
|
|
2988
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
2983
2989
|
latest.current = onPress;
|
|
2984
2990
|
});
|
|
2985
|
-
|
|
2991
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
2986
2992
|
const doc = ownerDocument();
|
|
2987
2993
|
const inside = (target) => element.current?.contains(target) === true;
|
|
2988
2994
|
let touched = null;
|
|
@@ -2997,7 +3003,7 @@ function useOutsidePress(element, ownerDocument, onPress) {
|
|
|
2997
3003
|
if (touched !== null && !inside(event.target)) latest.current(touched);
|
|
2998
3004
|
touched = null;
|
|
2999
3005
|
};
|
|
3000
|
-
return
|
|
3006
|
+
return chunkUKUAQJME_cjs.listen(doc, { pointerdown: down, click }, true);
|
|
3001
3007
|
}, [element, ownerDocument]);
|
|
3002
3008
|
}
|
|
3003
3009
|
function storeAlt(controller, blockId, opened, patch) {
|
|
@@ -3005,7 +3011,7 @@ function storeAlt(controller, blockId, opened, patch) {
|
|
|
3005
3011
|
const attrs = chunkI7X7B3WD_cjs.blockById(editor.state.doc, blockId)?.attrs ?? {};
|
|
3006
3012
|
const changed = chunkI7X7B3WD_cjs.str(attrs.alt) !== opened.alt || attrs.decorative === true !== opened.decorative;
|
|
3007
3013
|
if (controller.readOnly || controller.root === null || changed) return;
|
|
3008
|
-
|
|
3014
|
+
chunkUKUAQJME_cjs.onBlock(blockId, chunkFK7EBZPX_cjs.setAttrs(patch))(editor.state, (tr) => editor.dispatch(tr));
|
|
3009
3015
|
}
|
|
3010
3016
|
function AltTextPopover({ blockId, controller, anchor, opener, alt, decorative, onClose }) {
|
|
3011
3017
|
const labels = useLabels();
|
|
@@ -3047,7 +3053,7 @@ function AltTextPopover({ blockId, controller, anchor, opener, alt, decorative,
|
|
|
3047
3053
|
close(true);
|
|
3048
3054
|
};
|
|
3049
3055
|
const onKeyDown = (event) => {
|
|
3050
|
-
if (event.key !== "Tab" ||
|
|
3056
|
+
if (event.key !== "Tab" || chunkUKUAQJME_cjs.isComposingKey(controller, event.nativeEvent)) return;
|
|
3051
3057
|
const controls = [...event.currentTarget.elements];
|
|
3052
3058
|
const next = controls[controls.indexOf(event.target) + (event.shiftKey ? -1 : 1)];
|
|
3053
3059
|
event.preventDefault();
|
|
@@ -3075,7 +3081,7 @@ function AltTextPopover({ blockId, controller, anchor, opener, alt, decorative,
|
|
|
3075
3081
|
onCloseAutoFocus: preventDefault,
|
|
3076
3082
|
onEscapeKeyDown: (event) => {
|
|
3077
3083
|
event.preventDefault();
|
|
3078
|
-
if (!
|
|
3084
|
+
if (!chunkUKUAQJME_cjs.isComposingKey(controller, event)) close(false);
|
|
3079
3085
|
},
|
|
3080
3086
|
...bubblePart(controller),
|
|
3081
3087
|
children: /* @__PURE__ */ jsxRuntime.jsxs("form", { noValidate: true, className: "quoin-image-alt", onSubmit: save, onKeyDown, children: [
|
|
@@ -3171,7 +3177,7 @@ function ImageToolbarOverlay({ controller }) {
|
|
|
3171
3177
|
}
|
|
3172
3178
|
function ImageToolbar({ blockId, controller, editingAlt, onEditAlt }) {
|
|
3173
3179
|
const { labels, resolveAssetUrl } = useQuoin();
|
|
3174
|
-
const state =
|
|
3180
|
+
const state = chunkUKUAQJME_cjs.useEditorState(controller, chunkUKUAQJME_cjs.wholeState);
|
|
3175
3181
|
const picker = useReplacePicker(controller, blockId, uploadImage, "image/*");
|
|
3176
3182
|
const altButton = React7.useRef(null);
|
|
3177
3183
|
const anchor = usePartAnchor(controller, blockId, ".quoin-image-frame");
|
|
@@ -3403,13 +3409,13 @@ function CalloutToneMenu({ blockId, controller, tone }) {
|
|
|
3403
3409
|
}
|
|
3404
3410
|
var CalloutBlock = ({ block, controller }) => {
|
|
3405
3411
|
const labels = useLabels();
|
|
3406
|
-
const readOnly =
|
|
3412
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
3407
3413
|
const tone = calloutTone(block.attrs.tone);
|
|
3408
3414
|
const icon = calloutIcon(block.attrs, tone);
|
|
3409
3415
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("quoin-callout group/callout flex items-start gap-2", TONE[tone]), "data-tone": tone, children: [
|
|
3410
3416
|
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 }),
|
|
3411
3417
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3412
|
-
|
|
3418
|
+
chunkUKUAQJME_cjs.EditableRegion,
|
|
3413
3419
|
{
|
|
3414
3420
|
block: block.id,
|
|
3415
3421
|
region: "body",
|
|
@@ -3478,22 +3484,22 @@ var headingStyles = (level) => `quoin-heading mb-1 font-semibold leading-tight i
|
|
|
3478
3484
|
function Heading({ block }) {
|
|
3479
3485
|
const labels = useLabels();
|
|
3480
3486
|
const level = chunkI7X7B3WD_cjs.headingLevel(block.attrs.level);
|
|
3481
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { role: "heading", "aria-level": level, className: headingStyles(level), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3487
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { role: "heading", "aria-level": level, className: headingStyles(level), children: /* @__PURE__ */ jsxRuntime.jsx(chunkUKUAQJME_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.heading(level) }) });
|
|
3482
3488
|
}
|
|
3483
3489
|
function NumberedItem({ block, controller }) {
|
|
3484
3490
|
const labels = useLabels();
|
|
3485
|
-
const number =
|
|
3491
|
+
const number = chunkUKUAQJME_cjs.useOrderedNumber(controller, block.id);
|
|
3486
3492
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-list-item", "data-list": "ordered", children: [
|
|
3487
3493
|
/* @__PURE__ */ jsxRuntime.jsx(ListMarker, { list: "ordered", number, depth: block.indent }),
|
|
3488
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3494
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkUKUAQJME_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.numberedItem(number) })
|
|
3489
3495
|
] });
|
|
3490
3496
|
}
|
|
3491
3497
|
function TaskItem({ block, controller }) {
|
|
3492
3498
|
const labels = useLabels();
|
|
3493
|
-
const hostId =
|
|
3499
|
+
const hostId = chunkUKUAQJME_cjs.useRegionDomId(block.id, REGION);
|
|
3494
3500
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-task", "data-checked": block.attrs.checked === true, children: [
|
|
3495
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3496
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3501
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkUKUAQJME_cjs.TaskCheckbox, { block, controller, label: labels.task, labelledBy: hostId }),
|
|
3502
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkUKUAQJME_cjs.EditableRegion, { id: hostId, block: block.id, region: REGION, label: labels.task })
|
|
3497
3503
|
] });
|
|
3498
3504
|
}
|
|
3499
3505
|
var MarkdownBlock = (props) => {
|
|
@@ -3505,16 +3511,16 @@ var MarkdownBlock = (props) => {
|
|
|
3505
3511
|
case "bullet":
|
|
3506
3512
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-list-item", "data-list": "bullet", children: [
|
|
3507
3513
|
/* @__PURE__ */ jsxRuntime.jsx(ListMarker, { list: "bullet", depth: block.indent }),
|
|
3508
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3514
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkUKUAQJME_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.bulletItem })
|
|
3509
3515
|
] });
|
|
3510
3516
|
case "ordered":
|
|
3511
3517
|
return /* @__PURE__ */ jsxRuntime.jsx(NumberedItem, { ...props });
|
|
3512
3518
|
case "task":
|
|
3513
3519
|
return /* @__PURE__ */ jsxRuntime.jsx(TaskItem, { ...props });
|
|
3514
3520
|
case "quote":
|
|
3515
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-quote", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3521
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "quoin-quote", children: /* @__PURE__ */ jsxRuntime.jsx(chunkUKUAQJME_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.quote }) });
|
|
3516
3522
|
default:
|
|
3517
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3523
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkUKUAQJME_cjs.EditableRegion, { block: block.id, region: REGION, label: labels.paragraph });
|
|
3518
3524
|
}
|
|
3519
3525
|
};
|
|
3520
3526
|
|
|
@@ -3525,16 +3531,16 @@ function nestedBlockIds({ doc }, blockId) {
|
|
|
3525
3531
|
return doc.blocks.slice(index + 1, chunkFK7EBZPX_cjs.descendantsEnd(doc, index)).map((block) => block.id);
|
|
3526
3532
|
}
|
|
3527
3533
|
function useNestedBlocks(controller, blockId) {
|
|
3528
|
-
return
|
|
3534
|
+
return chunkUKUAQJME_cjs.useEditorState(controller, (state) => nestedBlockIds(state, blockId), chunkI7X7B3WD_cjs.sameItems);
|
|
3529
3535
|
}
|
|
3530
3536
|
var ToggleBlock = ({ block, controller }) => {
|
|
3531
3537
|
const labels = useLabels();
|
|
3532
|
-
const domId =
|
|
3538
|
+
const domId = chunkUKUAQJME_cjs.useBlockDomId();
|
|
3533
3539
|
const nested = useNestedBlocks(controller, block.id);
|
|
3534
|
-
const open =
|
|
3540
|
+
const open = chunkUKUAQJME_cjs.useToggleOpen(controller, block);
|
|
3535
3541
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "quoin-toggle", "data-open": open, children: [
|
|
3536
3542
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3537
|
-
|
|
3543
|
+
chunkUKUAQJME_cjs.ToggleChevron,
|
|
3538
3544
|
{
|
|
3539
3545
|
block,
|
|
3540
3546
|
controller,
|
|
@@ -3542,7 +3548,7 @@ var ToggleBlock = ({ block, controller }) => {
|
|
|
3542
3548
|
controls: nested.length === 0 ? void 0 : nested.map(domId).join(" ")
|
|
3543
3549
|
}
|
|
3544
3550
|
),
|
|
3545
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3551
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkUKUAQJME_cjs.EditableRegion, { block: block.id, region: "text", label: labels.toggle })
|
|
3546
3552
|
] });
|
|
3547
3553
|
};
|
|
3548
3554
|
|
|
@@ -3639,7 +3645,7 @@ function ActionItem({ kit, controller, action, blockIds }) {
|
|
|
3639
3645
|
);
|
|
3640
3646
|
}
|
|
3641
3647
|
function BlockMenuItems({ kit, controller, blocks, styled, title, actions }) {
|
|
3642
|
-
const state =
|
|
3648
|
+
const state = chunkUKUAQJME_cjs.useEditorState(controller, chunkUKUAQJME_cjs.wholeState);
|
|
3643
3649
|
const blockIds = blocks.map((block) => block.id);
|
|
3644
3650
|
const shown = actions.filter((action) => action.available?.(state, blockIds) ?? true);
|
|
3645
3651
|
const anyText = styled.some((block) => chunkFK7EBZPX_cjs.isTextFlow(state.schema, block));
|
|
@@ -3684,7 +3690,7 @@ var CONTEXT_KIT = {
|
|
|
3684
3690
|
SubTrigger: ContextMenuSubTrigger
|
|
3685
3691
|
};
|
|
3686
3692
|
var GUTTER_BLOCK = "data-quoin-gutter-block";
|
|
3687
|
-
var OWN_MENU = `[${
|
|
3693
|
+
var OWN_MENU = `[${chunkUKUAQJME_cjs.NATIVE_INTERACTION}], input, textarea, select`;
|
|
3688
3694
|
function contextBlock(controller, target) {
|
|
3689
3695
|
const { state } = controller.editor;
|
|
3690
3696
|
const gutter = target.closest(`[${GUTTER_BLOCK}]`)?.getAttribute(GUTTER_BLOCK);
|
|
@@ -3713,7 +3719,7 @@ function useContextMenuOpener(controller, store, trigger) {
|
|
|
3713
3719
|
openBlockMenuAt(store, controller.editor.state, block, clientX, clientY);
|
|
3714
3720
|
hidden.dispatchEvent(new MouseEvent("contextmenu", { bubbles: true, cancelable: true, clientX, clientY }));
|
|
3715
3721
|
};
|
|
3716
|
-
return
|
|
3722
|
+
return chunkUKUAQJME_cjs.listen(root, { mousedown: onMouseDown, contextmenu: onContextMenu });
|
|
3717
3723
|
}, [controller, store, trigger]);
|
|
3718
3724
|
}
|
|
3719
3725
|
|
|
@@ -3749,7 +3755,7 @@ function useLiveBlocks(controller, blockIds) {
|
|
|
3749
3755
|
(state) => blockIds.flatMap((id) => chunkI7X7B3WD_cjs.blockById(state.doc, id) ?? []),
|
|
3750
3756
|
[blockIds]
|
|
3751
3757
|
);
|
|
3752
|
-
return
|
|
3758
|
+
return chunkUKUAQJME_cjs.useEditorState(controller, select, chunkI7X7B3WD_cjs.sameItems);
|
|
3753
3759
|
}
|
|
3754
3760
|
function useMenuBlocks(controller, store, menu) {
|
|
3755
3761
|
const labels = useLabels();
|
|
@@ -3876,7 +3882,7 @@ var DragOverlay = React7.forwardRef(function DragOverlay2(_props, ref) {
|
|
|
3876
3882
|
var DELETION_STEPS = /* @__PURE__ */ new Set(["removeBlocks", "setIndent"]);
|
|
3877
3883
|
function drawnPosition(doc, blockId) {
|
|
3878
3884
|
const index = doc.index.get(blockId) ?? 0;
|
|
3879
|
-
return [
|
|
3885
|
+
return [chunkUKUAQJME_cjs.drawnBlockCount(doc, 0, index) + 1, chunkUKUAQJME_cjs.drawnBlockCount(doc)];
|
|
3880
3886
|
}
|
|
3881
3887
|
function blockMovedMessage(doc, blockId, labels) {
|
|
3882
3888
|
return labels.blockMoved(...drawnPosition(doc, blockId));
|
|
@@ -3892,7 +3898,7 @@ function deletedCount(tr) {
|
|
|
3892
3898
|
return tr.steps.reduce((deleted, step, i) => {
|
|
3893
3899
|
const { index, count } = step.toJSON();
|
|
3894
3900
|
if (step.stepType !== "removeBlocks" || typeof index !== "number" || typeof count !== "number") return deleted;
|
|
3895
|
-
return deleted +
|
|
3901
|
+
return deleted + chunkUKUAQJME_cjs.drawnBlockCount(tr.docs[i], index, index + count);
|
|
3896
3902
|
}, 0);
|
|
3897
3903
|
}
|
|
3898
3904
|
function insertedBlock(tr) {
|
|
@@ -3934,7 +3940,7 @@ function inlineEdges(shell, box, rtl) {
|
|
|
3934
3940
|
function measure(controller, root, moved, rtl) {
|
|
3935
3941
|
const { doc } = controller.editor.state;
|
|
3936
3942
|
const origin = rootOrigin(root);
|
|
3937
|
-
return
|
|
3943
|
+
return chunkUKUAQJME_cjs.visibleBlockIndexes(doc).flatMap((index) => {
|
|
3938
3944
|
const { id, indent: indent3 } = doc.blocks[index];
|
|
3939
3945
|
const shell = controller.blockElement(id);
|
|
3940
3946
|
if (shell === void 0) return [];
|
|
@@ -4009,7 +4015,7 @@ function draggedBlocks(controller, blockId) {
|
|
|
4009
4015
|
function followPress(press, root, view) {
|
|
4010
4016
|
const { controller, store, overlay, handle: handle2, pointerId } = press;
|
|
4011
4017
|
const doc = view.document;
|
|
4012
|
-
const scroll =
|
|
4018
|
+
const scroll = chunkUKUAQJME_cjs.createAutoScroll(root, follow, SCROLL_EDGE);
|
|
4013
4019
|
let pointer = { x: press.x, y: press.y };
|
|
4014
4020
|
let active = null;
|
|
4015
4021
|
let unsubscribe = () => {
|
|
@@ -4039,7 +4045,7 @@ function followPress(press, root, view) {
|
|
|
4039
4045
|
overlay.follow(dx, pointer.y - press.y);
|
|
4040
4046
|
overlay.mark({ top: target.lineTop, ...spanBetween(target.lineStart, layout.end) });
|
|
4041
4047
|
if (!sameTarget(active.target, target)) {
|
|
4042
|
-
store.set({ drag: { blockIds: ids,
|
|
4048
|
+
store.set({ drag: { blockIds: ids, targetIndent: target.indent } });
|
|
4043
4049
|
}
|
|
4044
4050
|
active.target = target;
|
|
4045
4051
|
}
|
|
@@ -4084,9 +4090,9 @@ function followPress(press, root, view) {
|
|
|
4084
4090
|
event.stopPropagation();
|
|
4085
4091
|
finish();
|
|
4086
4092
|
}
|
|
4087
|
-
const unlistenDocument =
|
|
4088
|
-
const unlistenBlur =
|
|
4089
|
-
const unlistenKeys =
|
|
4093
|
+
const unlistenDocument = chunkUKUAQJME_cjs.listen(doc, { pointermove: onPointerMove, pointerup: onPointerUp, pointercancel: finish });
|
|
4094
|
+
const unlistenBlur = chunkUKUAQJME_cjs.listen(view, { blur: finish });
|
|
4095
|
+
const unlistenKeys = chunkUKUAQJME_cjs.listen(view, { keydown: onKeyDown }, true);
|
|
4090
4096
|
return finish;
|
|
4091
4097
|
}
|
|
4092
4098
|
function pressDragHandle(press) {
|
|
@@ -4221,7 +4227,7 @@ function place2(controller, root, gutter, block) {
|
|
|
4221
4227
|
gutter.style.visibility = "";
|
|
4222
4228
|
}
|
|
4223
4229
|
function useGutterPosition(controller, gutter, block) {
|
|
4224
|
-
|
|
4230
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
4225
4231
|
const element = gutter.current;
|
|
4226
4232
|
const root = controller.root;
|
|
4227
4233
|
const view = root?.ownerDocument.defaultView;
|
|
@@ -4253,7 +4259,7 @@ function blockAcross(controller, root, y) {
|
|
|
4253
4259
|
}
|
|
4254
4260
|
function useGutterTarget(controller, store, gutter) {
|
|
4255
4261
|
const hovered = useCanvasUi(store, (state) => state.hoveredBlock);
|
|
4256
|
-
const head =
|
|
4262
|
+
const head = chunkUKUAQJME_cjs.useEditorState(controller, headOf);
|
|
4257
4263
|
const [focusWithin, setFocusWithin] = React7.useState(false);
|
|
4258
4264
|
React7.useEffect(() => {
|
|
4259
4265
|
const root = controller.root;
|
|
@@ -4271,7 +4277,7 @@ function useGutterTarget(controller, store, gutter) {
|
|
|
4271
4277
|
const onFocusIn = () => setFocusWithin(true);
|
|
4272
4278
|
const onFocusOut = (event) => setFocusWithin(root.contains(event.relatedTarget));
|
|
4273
4279
|
setFocusWithin(root.contains(root.ownerDocument.activeElement));
|
|
4274
|
-
return
|
|
4280
|
+
return chunkUKUAQJME_cjs.listen(root, { pointermove: onPointerMove, pointerleave: onPointerLeave, focusin: onFocusIn, focusout: onFocusOut });
|
|
4275
4281
|
}, [controller, store, gutter]);
|
|
4276
4282
|
const fallback = focusWithin ? head : null;
|
|
4277
4283
|
const target = hovered ?? fallback;
|
|
@@ -4364,7 +4370,7 @@ function pointInHost(host, { node, offset }) {
|
|
|
4364
4370
|
return host.contains(node) ? { node, offset: Math.min(offset, nodeLength(node)) } : null;
|
|
4365
4371
|
}
|
|
4366
4372
|
function textRect(host, { from, to }) {
|
|
4367
|
-
const map =
|
|
4373
|
+
const map = chunkUKUAQJME_cjs.domMapOf(host);
|
|
4368
4374
|
const range = host.ownerDocument.createRange();
|
|
4369
4375
|
if (map === void 0 || typeof range.getBoundingClientRect !== "function") return null;
|
|
4370
4376
|
const start = pointInHost(host, map.toDom(from, 1));
|
|
@@ -4377,7 +4383,7 @@ function textRect(host, { from, to }) {
|
|
|
4377
4383
|
}
|
|
4378
4384
|
function rangeRect(controller, range) {
|
|
4379
4385
|
const host = controller.registry.get(range.block, range.region);
|
|
4380
|
-
if (host === void 0 || !host.isConnected || controller.composingKey ===
|
|
4386
|
+
if (host === void 0 || !host.isConnected || controller.composingKey === chunkUKUAQJME_cjs.hostKey(range.block, range.region)) {
|
|
4381
4387
|
return null;
|
|
4382
4388
|
}
|
|
4383
4389
|
const rect = textRect(host, range);
|
|
@@ -4418,7 +4424,7 @@ function useSelectionAnchor(controller, state) {
|
|
|
4418
4424
|
[controller, state]
|
|
4419
4425
|
);
|
|
4420
4426
|
const [side, setSide] = React7.useState("top");
|
|
4421
|
-
|
|
4427
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
4422
4428
|
const rect = selectionRect(controller);
|
|
4423
4429
|
if (rect) setSide(rect.top < ROOM_ABOVE ? "bottom" : "top");
|
|
4424
4430
|
}, [controller, state]);
|
|
@@ -4500,7 +4506,7 @@ function TurnIntoDropdown({ controller, state }) {
|
|
|
4500
4506
|
}
|
|
4501
4507
|
var DIVIDER = "mx-0.5 h-5 w-px shrink-0 bg-border";
|
|
4502
4508
|
function BubbleToolbar({ controller, labels, store, extraItems }) {
|
|
4503
|
-
const state =
|
|
4509
|
+
const state = chunkUKUAQJME_cjs.useEditorState(controller, chunkUKUAQJME_cjs.wholeState);
|
|
4504
4510
|
const { anchor, side } = useSelectionAnchor(controller, state);
|
|
4505
4511
|
const roving = useRovingFocus();
|
|
4506
4512
|
const items = React7.useMemo(() => bubbleItems(labels, () => store.set({ linkPopover: { open: true } })), [labels, store]);
|
|
@@ -4548,9 +4554,9 @@ var readOnServer = () => false;
|
|
|
4548
4554
|
function useMediaQuery(query, unsupported) {
|
|
4549
4555
|
const subscribe3 = React7.useCallback(
|
|
4550
4556
|
(notify) => {
|
|
4551
|
-
const
|
|
4552
|
-
|
|
4553
|
-
return () =>
|
|
4557
|
+
const list2 = listOf(query);
|
|
4558
|
+
list2?.addEventListener("change", notify);
|
|
4559
|
+
return () => list2?.removeEventListener("change", notify);
|
|
4554
4560
|
},
|
|
4555
4561
|
[query]
|
|
4556
4562
|
);
|
|
@@ -4564,8 +4570,8 @@ var useFinePointer = () => useMediaQuery("(pointer: fine)", true);
|
|
|
4564
4570
|
// src/menus/bubble/use-bubble-visibility.ts
|
|
4565
4571
|
var hasTextRange = (state) => state.selection?.kind === "text" && !chunkFK7EBZPX_cjs.isCollapsed(state.selection) && chunkFK7EBZPX_cjs.markRanges(state).length > 0;
|
|
4566
4572
|
function useBubbleVisibility(controller) {
|
|
4567
|
-
const range =
|
|
4568
|
-
const readOnly =
|
|
4573
|
+
const range = chunkUKUAQJME_cjs.useEditorState(controller, hasTextRange);
|
|
4574
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
4569
4575
|
const fine = useFinePointer();
|
|
4570
4576
|
const settled = useSelectionSettled(controller);
|
|
4571
4577
|
return range && !readOnly && fine && settled;
|
|
@@ -4588,7 +4594,7 @@ function bubbleExtension() {
|
|
|
4588
4594
|
// src/menus/link/link-at-selection.ts
|
|
4589
4595
|
function linkAround(state, from, to = from) {
|
|
4590
4596
|
if (from.block !== to.block || from.region !== to.region) return null;
|
|
4591
|
-
const inline =
|
|
4597
|
+
const inline = chunkUKUAQJME_cjs.regionInline(state, from.block, from.region) ?? [];
|
|
4592
4598
|
const extent = chunkFK7EBZPX_cjs.markExtent(inline, from.offset, "link");
|
|
4593
4599
|
if (extent === null || to.offset > extent.to) return null;
|
|
4594
4600
|
const attrs = chunkI7X7B3WD_cjs.sliceInline(inline, extent.from, extent.to)[0]?.marks.find((mark) => mark.type === "link")?.attrs;
|
|
@@ -4611,7 +4617,7 @@ function linkElementAt(controller, target) {
|
|
|
4611
4617
|
}
|
|
4612
4618
|
function linkAtElement(controller, state, element) {
|
|
4613
4619
|
const host = controller.registry.locate(element);
|
|
4614
|
-
const offset = host === null ? null :
|
|
4620
|
+
const offset = host === null ? null : chunkUKUAQJME_cjs.domMapOf(host.element)?.fromDom(element, 0) ?? null;
|
|
4615
4621
|
if (host === null || offset === null) return null;
|
|
4616
4622
|
return linkAround(state, { block: host.block, region: host.region, offset });
|
|
4617
4623
|
}
|
|
@@ -4664,7 +4670,7 @@ function caretLinkKey(state) {
|
|
|
4664
4670
|
return link && [link.range.block, link.range.region, link.range.from, link.href].join("\0");
|
|
4665
4671
|
}
|
|
4666
4672
|
function useCaretInLink(controller, delay) {
|
|
4667
|
-
const key =
|
|
4673
|
+
const key = chunkUKUAQJME_cjs.useEditorState(controller, caretLinkKey);
|
|
4668
4674
|
const settled = useSelectionSettled(controller);
|
|
4669
4675
|
return useRestedValue(settled ? key : null, delay) !== null;
|
|
4670
4676
|
}
|
|
@@ -4698,7 +4704,7 @@ var URL_LENGTH = 48;
|
|
|
4698
4704
|
var CARD = "flex w-auto items-center gap-0.5 py-1 ps-3 pe-1 shadow-md";
|
|
4699
4705
|
var ADDRESS = "me-1 whitespace-nowrap text-sm text-muted-foreground";
|
|
4700
4706
|
function LinkCard({ controller, labels, store, cardRef, element, onUnlinked }) {
|
|
4701
|
-
const state =
|
|
4707
|
+
const state = chunkUKUAQJME_cjs.useEditorState(controller, chunkUKUAQJME_cjs.wholeState);
|
|
4702
4708
|
const link = React7.useMemo(
|
|
4703
4709
|
() => element === null ? linkAtSelection(state) : linkAtElement(controller, state, element),
|
|
4704
4710
|
[controller, state, element]
|
|
@@ -4716,7 +4722,7 @@ function LinkCard({ controller, labels, store, cardRef, element, onUnlinked }) {
|
|
|
4716
4722
|
const edit2 = () => {
|
|
4717
4723
|
if (element !== null) {
|
|
4718
4724
|
const selection = chunkFK7EBZPX_cjs.textSelection({ block, region, offset: from }, { block, region, offset: to });
|
|
4719
|
-
|
|
4725
|
+
chunkUKUAQJME_cjs.dispatchSelection(controller, selection);
|
|
4720
4726
|
}
|
|
4721
4727
|
store.set({ linkPopover: { open: true } });
|
|
4722
4728
|
};
|
|
@@ -4883,7 +4889,7 @@ function LinkOverlay({ controller }) {
|
|
|
4883
4889
|
const labels = useLabels();
|
|
4884
4890
|
const store = useCanvasUiStore();
|
|
4885
4891
|
const popoverOpen = useCanvasUi(store, isPopoverOpen);
|
|
4886
|
-
const readOnly =
|
|
4892
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
4887
4893
|
useLinkClicks(controller);
|
|
4888
4894
|
React7.useEffect(() => {
|
|
4889
4895
|
if (readOnly && store.get().linkPopover.open) store.set({ linkPopover: { open: false } });
|
|
@@ -5063,12 +5069,13 @@ function useRangeAnchor(controller, range) {
|
|
|
5063
5069
|
const [side, setSide] = React7.useState("bottom");
|
|
5064
5070
|
const latest = React7.useRef(range);
|
|
5065
5071
|
const start = range === null ? null : `${range.block} ${range.region} ${range.from}`;
|
|
5066
|
-
|
|
5072
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
5067
5073
|
latest.current = range;
|
|
5068
5074
|
});
|
|
5069
|
-
|
|
5075
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
5070
5076
|
const rect = latest.current && rangeRect(controller, latest.current);
|
|
5071
|
-
|
|
5077
|
+
const height = controller.root?.ownerDocument.defaultView?.innerHeight;
|
|
5078
|
+
if (rect && height !== void 0) setSide(sideFor(rect, height));
|
|
5072
5079
|
}, [controller, start]);
|
|
5073
5080
|
return { anchor, side };
|
|
5074
5081
|
}
|
|
@@ -5092,11 +5099,11 @@ function openCombobox(host, listboxId) {
|
|
|
5092
5099
|
}
|
|
5093
5100
|
function useComboboxHost(controller, block, region, listboxId, activeOptionId) {
|
|
5094
5101
|
const host = React7.useRef(null);
|
|
5095
|
-
|
|
5102
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
5096
5103
|
host.current = block === null || region === null ? null : controller.registry.get(block, region) ?? null;
|
|
5097
5104
|
return host.current === null ? void 0 : openCombobox(host.current, listboxId);
|
|
5098
5105
|
}, [controller, block, region, listboxId]);
|
|
5099
|
-
|
|
5106
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
5100
5107
|
if (host.current !== null) restore(host.current, "aria-activedescendant", activeOptionId);
|
|
5101
5108
|
}, [block, region, activeOptionId]);
|
|
5102
5109
|
}
|
|
@@ -5142,10 +5149,10 @@ function handle(event, menu) {
|
|
|
5142
5149
|
}
|
|
5143
5150
|
function useSuggestionKeys(controller, open, menu) {
|
|
5144
5151
|
const latest = React7.useRef(menu);
|
|
5145
|
-
|
|
5152
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
5146
5153
|
latest.current = menu;
|
|
5147
5154
|
});
|
|
5148
|
-
|
|
5155
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
5149
5156
|
if (!open) return;
|
|
5150
5157
|
const intercept = (event) => {
|
|
5151
5158
|
const handled = handle(event, latest.current);
|
|
@@ -5166,10 +5173,10 @@ var isPromise = (value) => typeof value?.then === "function";
|
|
|
5166
5173
|
function useSuggestionResults(source, query, onError) {
|
|
5167
5174
|
const [answer, setAnswer] = React7.useState(FORGOTTEN);
|
|
5168
5175
|
const report = React7.useRef(onError);
|
|
5169
|
-
|
|
5176
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
5170
5177
|
report.current = onError;
|
|
5171
5178
|
});
|
|
5172
|
-
|
|
5179
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
5173
5180
|
if (query === null) {
|
|
5174
5181
|
setAnswer(FORGOTTEN);
|
|
5175
5182
|
return;
|
|
@@ -5213,9 +5220,9 @@ function useSuggestion({
|
|
|
5213
5220
|
emptyLabel
|
|
5214
5221
|
}) {
|
|
5215
5222
|
const { labels, onError } = useQuoin();
|
|
5216
|
-
const readOnly =
|
|
5223
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
5217
5224
|
const selectTrigger = React7.useCallback((state) => chunkFK7EBZPX_cjs.getPluginState(state, pluginKey).active, [pluginKey]);
|
|
5218
|
-
const active =
|
|
5225
|
+
const active = chunkUKUAQJME_cjs.useEditorState(controller, selectTrigger);
|
|
5219
5226
|
const trigger = readOnly ? null : active;
|
|
5220
5227
|
const results = useSuggestionResults(source, trigger?.query ?? null, onError);
|
|
5221
5228
|
const sections = React7.useMemo(() => groupItems(results.items, groupOf2), [results.items, groupOf2]);
|
|
@@ -5285,7 +5292,7 @@ function SuggestionMenu(props) {
|
|
|
5285
5292
|
const { trigger, sections, activeIndex, listboxId } = suggestion;
|
|
5286
5293
|
const { anchor, side } = useRangeAnchor(controller, trigger);
|
|
5287
5294
|
const listbox = React7.useRef(null);
|
|
5288
|
-
|
|
5295
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
5289
5296
|
listbox.current?.querySelector('[aria-selected="true"]')?.scrollIntoView?.({ block: "nearest" });
|
|
5290
5297
|
}, [activeIndex, sections]);
|
|
5291
5298
|
if (trigger === null) return null;
|
|
@@ -5364,7 +5371,7 @@ var TEXT_STEPS = /* @__PURE__ */ new Set(["replaceInline", "addMark", "removeMar
|
|
|
5364
5371
|
var WHITESPACE3 = /\s/;
|
|
5365
5372
|
var changesBlocks = (tr) => tr !== null && tr.steps.some((step) => !TEXT_STEPS.has(step.stepType));
|
|
5366
5373
|
function withSpaceBefore(state, range) {
|
|
5367
|
-
const inline =
|
|
5374
|
+
const inline = chunkUKUAQJME_cjs.regionInline(state, range.block, range.region);
|
|
5368
5375
|
if (inline === void 0 || range.from === 0) return null;
|
|
5369
5376
|
const text2 = chunkI7X7B3WD_cjs.inlineText(inline);
|
|
5370
5377
|
const after = text2.charAt(range.to);
|
|
@@ -5552,7 +5559,7 @@ function placement(viewport) {
|
|
|
5552
5559
|
function EditingTools({ controller }) {
|
|
5553
5560
|
const labels = useLabels();
|
|
5554
5561
|
const store = useCanvasUiStore();
|
|
5555
|
-
const state =
|
|
5562
|
+
const state = chunkUKUAQJME_cjs.useEditorState(controller, chunkUKUAQJME_cjs.wholeState);
|
|
5556
5563
|
const viewport = useVisualViewport();
|
|
5557
5564
|
const roving = useRovingFocus();
|
|
5558
5565
|
const items = React7.useMemo(() => mobileItems(labels, () => store.set({ linkPopover: { open: true } })), [labels, store]);
|
|
@@ -5876,7 +5883,7 @@ function runHistoryKey(controller, event) {
|
|
|
5876
5883
|
}
|
|
5877
5884
|
function useBlockIndex(controller, blockId) {
|
|
5878
5885
|
const select = React7.useCallback((state) => state.doc.index.get(blockId) ?? -1, [blockId]);
|
|
5879
|
-
return
|
|
5886
|
+
return chunkUKUAQJME_cjs.useEditorState(controller, select);
|
|
5880
5887
|
}
|
|
5881
5888
|
var FOCUSABLE = [
|
|
5882
5889
|
"input:not([disabled])",
|
|
@@ -5903,8 +5910,8 @@ function useEditingFocus(root, editing, stop) {
|
|
|
5903
5910
|
const leaveUnlessInside = (event) => {
|
|
5904
5911
|
if (!inside.current.has(event)) stop();
|
|
5905
5912
|
};
|
|
5906
|
-
const unlistenCapture =
|
|
5907
|
-
const unlisten =
|
|
5913
|
+
const unlistenCapture = chunkUKUAQJME_cjs.listen(doc, { pointerdown: leaveForCanvas }, true);
|
|
5914
|
+
const unlisten = chunkUKUAQJME_cjs.listen(doc, { pointerdown: leaveUnlessInside, focusin: leaveUnlessInside });
|
|
5908
5915
|
return () => {
|
|
5909
5916
|
unlistenCapture();
|
|
5910
5917
|
unlisten();
|
|
@@ -5933,8 +5940,8 @@ function VoidEditor({ Editor, controller, ...props }) {
|
|
|
5933
5940
|
}
|
|
5934
5941
|
function VoidBlock({ block, controller, definition }) {
|
|
5935
5942
|
const { blockTypes, labels } = useQuoin();
|
|
5936
|
-
const { report } = React7.useContext(
|
|
5937
|
-
const readOnly =
|
|
5943
|
+
const { report } = React7.useContext(chunkUKUAQJME_cjs.BlockErrorContext);
|
|
5944
|
+
const readOnly = chunkUKUAQJME_cjs.useReadOnly(controller);
|
|
5938
5945
|
const { editor: Editor, alwaysEditing = false } = definition;
|
|
5939
5946
|
const name = blockTypeLabel(labels, block, blockTypes);
|
|
5940
5947
|
const blockId = block.id;
|
|
@@ -5998,7 +6005,7 @@ function VoidBlock({ block, controller, definition }) {
|
|
|
5998
6005
|
role: "group",
|
|
5999
6006
|
"aria-label": name,
|
|
6000
6007
|
tabIndex: editorShown ? -1 : void 0,
|
|
6001
|
-
...{ [
|
|
6008
|
+
...{ [chunkUKUAQJME_cjs.NATIVE_INTERACTION]: editorShown ? "" : void 0 },
|
|
6002
6009
|
onKeyDown,
|
|
6003
6010
|
...focusHandlers,
|
|
6004
6011
|
onClick,
|
|
@@ -6067,6 +6074,8 @@ function extensionUi(extension) {
|
|
|
6067
6074
|
const { ui } = extension;
|
|
6068
6075
|
return typeof ui === "object" && ui !== null ? ui : {};
|
|
6069
6076
|
}
|
|
6077
|
+
var list = (value) => Array.isArray(value) ? value : [];
|
|
6078
|
+
var record = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : {};
|
|
6070
6079
|
function mergeRender(uis) {
|
|
6071
6080
|
const given = uis.flatMap(({ render }) => render === void 0 ? [] : [render]);
|
|
6072
6081
|
if (given.length === 0) return void 0;
|
|
@@ -6079,14 +6088,14 @@ function mergeRender(uis) {
|
|
|
6079
6088
|
function collectUi(extensions, definitions, readOnly = false, onError) {
|
|
6080
6089
|
const uis = extensions.map(extensionUi);
|
|
6081
6090
|
return {
|
|
6082
|
-
slashItems: [...uis.flatMap((ui) => ui.slashItems
|
|
6083
|
-
bubbleItems: uis.flatMap((ui) => ui.bubbleItems
|
|
6084
|
-
blockMenuItems: uis.flatMap((ui) => ui.blockMenuItems
|
|
6085
|
-
renderers: Object.assign({}, canvasRenderers(definitions, readOnly), ...uis.map((ui) => ui.renderers)),
|
|
6086
|
-
blockNames: Object.assign({}, ...uis.map((ui) => ui.blockNames)),
|
|
6091
|
+
slashItems: [...uis.flatMap((ui) => list(ui.slashItems)), ...blockTypeSlashItems(definitions, onError)],
|
|
6092
|
+
bubbleItems: uis.flatMap((ui) => list(ui.bubbleItems)),
|
|
6093
|
+
blockMenuItems: uis.flatMap((ui) => list(ui.blockMenuItems)),
|
|
6094
|
+
renderers: Object.assign({}, canvasRenderers(definitions, readOnly), ...uis.map((ui) => record(ui.renderers))),
|
|
6095
|
+
blockNames: Object.assign({}, ...uis.map((ui) => record(ui.blockNames))),
|
|
6087
6096
|
render: mergeRender(uis),
|
|
6088
6097
|
overlays: [
|
|
6089
|
-
...uis.flatMap((ui) => ui.overlays
|
|
6098
|
+
...uis.flatMap((ui) => list(ui.overlays)),
|
|
6090
6099
|
...Object.entries(inPlaceOverlays).flatMap(([type, overlay]) => drawnInPlace(definitions, type) ? [overlay] : [])
|
|
6091
6100
|
]
|
|
6092
6101
|
};
|
|
@@ -6217,7 +6226,7 @@ function deletions(codec, tr) {
|
|
|
6217
6226
|
}
|
|
6218
6227
|
function useDeleteReporter(controller, onDelete) {
|
|
6219
6228
|
const latest = React7.useRef(onDelete);
|
|
6220
|
-
|
|
6229
|
+
chunkUKUAQJME_cjs.useIsomorphicLayoutEffect(() => {
|
|
6221
6230
|
latest.current = onDelete;
|
|
6222
6231
|
});
|
|
6223
6232
|
React7.useEffect(() => {
|
|
@@ -6294,19 +6303,22 @@ var BlockCanvas = React7.forwardRef(function BlockCanvas2({
|
|
|
6294
6303
|
);
|
|
6295
6304
|
useDefinitionWarnings(blockTypes, readOnly);
|
|
6296
6305
|
const [focusOnMount] = React7.useState(autoFocus);
|
|
6297
|
-
const controller =
|
|
6306
|
+
const controller = chunkUKUAQJME_cjs.useQuoinEditor({
|
|
6298
6307
|
blocks,
|
|
6299
6308
|
onChange,
|
|
6300
6309
|
readOnly,
|
|
6301
6310
|
extensions: allExtensions,
|
|
6302
6311
|
render: ui.render,
|
|
6303
|
-
onFiles
|
|
6304
|
-
|
|
6305
|
-
|
|
6306
|
-
|
|
6307
|
-
|
|
6308
|
-
|
|
6309
|
-
|
|
6312
|
+
onFiles(files, at) {
|
|
6313
|
+
const report = onError ?? console.error;
|
|
6314
|
+
void insertUploads(controller, files, at, {
|
|
6315
|
+
upload,
|
|
6316
|
+
resolveAssetUrl: resolveAssetUrl ?? String,
|
|
6317
|
+
onError: report,
|
|
6318
|
+
unavailable: labels.uploadsUnavailable,
|
|
6319
|
+
failed: labels.uploadFailed
|
|
6320
|
+
}).catch((reason) => report(toError(reason)));
|
|
6321
|
+
}
|
|
6310
6322
|
});
|
|
6311
6323
|
useDeleteReporter(controller, onDelete);
|
|
6312
6324
|
useBlockLinkTarget(controller, focusOnMount);
|
|
@@ -6338,7 +6350,7 @@ var BlockCanvas = React7.forwardRef(function BlockCanvas2({
|
|
|
6338
6350
|
[controller, resolveAssetUrl]
|
|
6339
6351
|
);
|
|
6340
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(
|
|
6341
|
-
|
|
6353
|
+
chunkUKUAQJME_cjs.EditorView,
|
|
6342
6354
|
{
|
|
6343
6355
|
controller,
|
|
6344
6356
|
renderers: ui.renderers,
|