quoin-editor 1.0.2 → 1.1.1
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 +32 -0
- package/dist/ai.cjs +169 -249
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +38 -121
- package/dist/ai.js.map +1 -1
- package/dist/catalogue.cjs +29 -43
- package/dist/catalogue.cjs.map +1 -1
- package/dist/catalogue.js +21 -37
- package/dist/catalogue.js.map +1 -1
- package/dist/{chunk-DUE3HCZD.js → chunk-2EQ6FKSK.js} +19 -28
- package/dist/chunk-2EQ6FKSK.js.map +1 -0
- package/dist/{chunk-RJRX34BZ.js → chunk-3BXUGX5F.js} +4 -18
- package/dist/chunk-3BXUGX5F.js.map +1 -0
- package/dist/chunk-3QRVAI53.cjs +27 -0
- package/dist/chunk-3QRVAI53.cjs.map +1 -0
- package/dist/{chunk-U3LOLYAU.js → chunk-7FAVFJAS.js} +4 -10
- package/dist/chunk-7FAVFJAS.js.map +1 -0
- package/dist/{chunk-FDRUAL3Z.cjs → chunk-7NAONESM.cjs} +90 -153
- package/dist/chunk-7NAONESM.cjs.map +1 -0
- package/dist/{chunk-6V6GGBDK.cjs → chunk-7SVKLWDT.cjs} +24 -31
- package/dist/chunk-7SVKLWDT.cjs.map +1 -0
- package/dist/{chunk-CW3AFJBR.cjs → chunk-7XQGOCUG.cjs} +1332 -1772
- package/dist/chunk-7XQGOCUG.cjs.map +1 -0
- package/dist/{chunk-EH5KXQXY.cjs → chunk-A6PGQVTR.cjs} +36 -20
- package/dist/chunk-A6PGQVTR.cjs.map +1 -0
- package/dist/{chunk-4SLJNZSM.cjs → chunk-AIS37SL2.cjs} +201 -198
- package/dist/chunk-AIS37SL2.cjs.map +1 -0
- package/dist/{chunk-IQBMAE3F.js → chunk-CKHKCPGL.js} +34 -92
- package/dist/chunk-CKHKCPGL.js.map +1 -0
- package/dist/{chunk-T43RZTUT.js → chunk-DYWU4SQ2.js} +723 -1246
- package/dist/chunk-DYWU4SQ2.js.map +1 -0
- package/dist/chunk-EFRQMYZ6.cjs +33 -0
- package/dist/chunk-EFRQMYZ6.cjs.map +1 -0
- package/dist/{chunk-O4Z2WMFF.js → chunk-HDJ653LM.js} +25 -18
- package/dist/chunk-HDJ653LM.js.map +1 -0
- package/dist/chunk-HQ43EIYO.cjs +94 -0
- package/dist/chunk-HQ43EIYO.cjs.map +1 -0
- package/dist/{chunk-6NULZPVC.js → chunk-HTLWPSMU.js} +8 -61
- package/dist/chunk-HTLWPSMU.js.map +1 -0
- package/dist/{chunk-EPARJI4V.js → chunk-IEP7BPFN.js} +122 -267
- package/dist/chunk-IEP7BPFN.js.map +1 -0
- package/dist/{chunk-P6KYXFZC.cjs → chunk-IGZRZIAF.cjs} +440 -538
- package/dist/chunk-IGZRZIAF.cjs.map +1 -0
- package/dist/chunk-JCEFSTVG.cjs +483 -0
- package/dist/chunk-JCEFSTVG.cjs.map +1 -0
- package/dist/chunk-KXRGY5LK.cjs +612 -0
- package/dist/chunk-KXRGY5LK.cjs.map +1 -0
- package/dist/{chunk-JHQUHFLX.js → chunk-KZ6ZFCGO.js} +38 -120
- package/dist/chunk-KZ6ZFCGO.js.map +1 -0
- package/dist/{chunk-ADSJ42DO.js → chunk-L2QA2UTY.js} +17 -69
- package/dist/chunk-L2QA2UTY.js.map +1 -0
- package/dist/{chunk-OBMBSU2S.js → chunk-L4D23LM2.js} +5 -184
- package/dist/chunk-L4D23LM2.js.map +1 -0
- package/dist/{chunk-4XFXB37X.js → chunk-L6OW2FL3.js} +7 -90
- package/dist/chunk-L6OW2FL3.js.map +1 -0
- package/dist/chunk-LE5XMIFJ.cjs +4 -3
- package/dist/chunk-LE5XMIFJ.cjs.map +1 -1
- package/dist/chunk-MQUCCSWG.js +2 -3
- package/dist/chunk-MQUCCSWG.js.map +1 -1
- package/dist/{chunk-C23RQVRK.js → chunk-MUIPM26J.js} +66 -216
- package/dist/chunk-MUIPM26J.js.map +1 -0
- package/dist/{chunk-AUOEM3SF.cjs → chunk-OKWER2RV.cjs} +102 -155
- package/dist/chunk-OKWER2RV.cjs.map +1 -0
- package/dist/{chunk-TLGX43P6.cjs → chunk-OM7E43ZN.cjs} +89 -86
- package/dist/chunk-OM7E43ZN.cjs.map +1 -0
- package/dist/{chunk-NEZJ7ZP5.js → chunk-QSXPKZ2F.js} +4 -8
- package/dist/chunk-QSXPKZ2F.js.map +1 -0
- package/dist/{chunk-VCLL5C7J.js → chunk-RFLFRIPV.js} +14 -57
- package/dist/chunk-RFLFRIPV.js.map +1 -0
- package/dist/chunk-RIIXJWBR.cjs +24 -0
- package/dist/chunk-RIIXJWBR.cjs.map +1 -0
- package/dist/{chunk-VRS6WCEK.js → chunk-SFMORPWB.js} +60 -167
- package/dist/chunk-SFMORPWB.js.map +1 -0
- package/dist/{chunk-YBMUEEM5.js → chunk-TYZSB7JT.js} +4 -8
- package/dist/chunk-TYZSB7JT.js.map +1 -0
- package/dist/{chunk-BQANU5BH.cjs → chunk-U5BSCAMP.cjs} +34 -44
- package/dist/chunk-U5BSCAMP.cjs.map +1 -0
- package/dist/{chunk-OSHZQR3W.js → chunk-UEVR4B5S.js} +13 -45
- package/dist/chunk-UEVR4B5S.js.map +1 -0
- package/dist/{chunk-N4FGA3H4.js → chunk-VBJY2CSK.js} +38 -105
- package/dist/chunk-VBJY2CSK.js.map +1 -0
- package/dist/{chunk-ZKVOS57Q.cjs → chunk-VFSVN5IQ.cjs} +495 -551
- package/dist/chunk-VFSVN5IQ.cjs.map +1 -0
- package/dist/{chunk-X4HDKFW5.cjs → chunk-VNRI5DAL.cjs} +56 -105
- package/dist/chunk-VNRI5DAL.cjs.map +1 -0
- package/dist/chunk-W7B4WQ3L.cjs +200 -0
- package/dist/chunk-W7B4WQ3L.cjs.map +1 -0
- package/dist/{chunk-623AOJM2.js → chunk-WAGBELKA.js} +7 -25
- package/dist/chunk-WAGBELKA.js.map +1 -0
- package/dist/{chunk-WEYDDIBQ.cjs → chunk-WH56EW3H.cjs} +36 -64
- package/dist/chunk-WH56EW3H.cjs.map +1 -0
- package/dist/{chunk-5MAYUGTE.cjs → chunk-XAS7LANM.cjs} +233 -363
- package/dist/chunk-XAS7LANM.cjs.map +1 -0
- package/dist/comments.cjs +210 -290
- package/dist/comments.cjs.map +1 -1
- package/dist/comments.js +82 -186
- package/dist/comments.js.map +1 -1
- package/dist/diff.cjs +48 -65
- package/dist/diff.cjs.map +1 -1
- package/dist/diff.d.cts +2 -2
- package/dist/diff.d.ts +2 -2
- package/dist/diff.js +8 -32
- package/dist/diff.js.map +1 -1
- package/dist/docx.cjs +50 -63
- package/dist/docx.cjs.map +1 -1
- package/dist/docx.js +7 -22
- package/dist/docx.js.map +1 -1
- package/dist/embed.cjs +19 -12
- package/dist/embed.cjs.map +1 -1
- package/dist/embed.js +10 -16
- package/dist/embed.js.map +1 -1
- package/dist/emoji-data.cjs +7 -5
- package/dist/emoji-data.cjs.map +1 -1
- package/dist/emoji-data.js +3 -5
- package/dist/emoji-data.js.map +1 -1
- package/dist/emoji.cjs +26 -17
- package/dist/emoji.cjs.map +1 -1
- package/dist/emoji.js +9 -17
- package/dist/emoji.js.map +1 -1
- package/dist/engine.cjs +229 -118
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.js +4 -118
- package/dist/engine.js.map +1 -1
- package/dist/find.cjs +30 -19
- package/dist/find.cjs.map +1 -1
- package/dist/find.js +9 -19
- package/dist/find.js.map +1 -1
- package/dist/headless.cjs +291 -151
- package/dist/headless.cjs.map +1 -1
- package/dist/headless.d.cts +5 -1
- package/dist/headless.d.ts +5 -1
- package/dist/headless.js +6 -151
- package/dist/headless.js.map +1 -1
- package/dist/index.cjs +349 -183
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -4
- package/dist/index.d.ts +17 -4
- package/dist/index.js +8 -183
- package/dist/index.js.map +1 -1
- package/dist/math.cjs +20 -13
- package/dist/math.cjs.map +1 -1
- package/dist/math.js +11 -17
- package/dist/math.js.map +1 -1
- package/dist/mention.cjs +20 -13
- package/dist/mention.cjs.map +1 -1
- package/dist/mention.js +11 -17
- package/dist/mention.js.map +1 -1
- package/dist/presence.cjs +99 -132
- package/dist/presence.cjs.map +1 -1
- package/dist/presence.js +22 -78
- package/dist/presence.js.map +1 -1
- package/dist/{registry-CWBOSAHm.d.ts → registry-CXegaw5k.d.cts} +25 -2
- package/dist/{registry-CWBOSAHm.d.cts → registry-CXegaw5k.d.ts} +25 -2
- package/dist/stats.cjs +27 -18
- package/dist/stats.cjs.map +1 -1
- package/dist/stats.js +10 -18
- package/dist/stats.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/table.cjs +90 -49
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +9 -49
- package/dist/table.js.map +1 -1
- package/dist/toc.cjs +26 -17
- package/dist/toc.cjs.map +1 -1
- package/dist/toc.js +9 -17
- package/dist/toc.js.map +1 -1
- package/dist/view.cjs +13 -16
- package/dist/view.cjs.map +1 -1
- package/dist/view.d.cts +2 -2
- package/dist/view.d.ts +2 -2
- package/dist/view.js +7 -16
- package/dist/view.js.map +1 -1
- package/dist/yjs.cjs +186 -228
- package/dist/yjs.cjs.map +1 -1
- package/dist/yjs.js +12 -80
- package/dist/yjs.js.map +1 -1
- package/package.json +2 -1
- package/dist/chunk-4SLJNZSM.cjs.map +0 -1
- package/dist/chunk-4XFXB37X.js.map +0 -1
- package/dist/chunk-5MAYUGTE.cjs.map +0 -1
- package/dist/chunk-623AOJM2.js.map +0 -1
- package/dist/chunk-6NULZPVC.js.map +0 -1
- package/dist/chunk-6V6GGBDK.cjs.map +0 -1
- package/dist/chunk-73653CJ4.cjs +0 -34
- package/dist/chunk-73653CJ4.cjs.map +0 -1
- package/dist/chunk-ADSJ42DO.js.map +0 -1
- package/dist/chunk-AUOEM3SF.cjs.map +0 -1
- package/dist/chunk-BQANU5BH.cjs.map +0 -1
- package/dist/chunk-C23RQVRK.js.map +0 -1
- package/dist/chunk-CW3AFJBR.cjs.map +0 -1
- package/dist/chunk-DUE3HCZD.js.map +0 -1
- package/dist/chunk-EH5KXQXY.cjs.map +0 -1
- package/dist/chunk-EPARJI4V.js.map +0 -1
- package/dist/chunk-FDRUAL3Z.cjs.map +0 -1
- package/dist/chunk-IQBMAE3F.js.map +0 -1
- package/dist/chunk-JHQUHFLX.js.map +0 -1
- package/dist/chunk-KUYZMSMF.cjs +0 -100
- package/dist/chunk-KUYZMSMF.cjs.map +0 -1
- package/dist/chunk-LLTEGXWZ.cjs +0 -562
- package/dist/chunk-LLTEGXWZ.cjs.map +0 -1
- package/dist/chunk-N4FGA3H4.js.map +0 -1
- package/dist/chunk-NEZJ7ZP5.js.map +0 -1
- package/dist/chunk-O4Z2WMFF.js.map +0 -1
- package/dist/chunk-OBMBSU2S.js.map +0 -1
- package/dist/chunk-OSHZQR3W.js.map +0 -1
- package/dist/chunk-P6KYXFZC.cjs.map +0 -1
- package/dist/chunk-R2BLBV43.cjs +0 -239
- package/dist/chunk-R2BLBV43.cjs.map +0 -1
- package/dist/chunk-RJRX34BZ.js.map +0 -1
- package/dist/chunk-T43RZTUT.js.map +0 -1
- package/dist/chunk-TLGX43P6.cjs.map +0 -1
- package/dist/chunk-U3LOLYAU.js.map +0 -1
- package/dist/chunk-UEKXVCKC.cjs +0 -716
- package/dist/chunk-UEKXVCKC.cjs.map +0 -1
- package/dist/chunk-VCLL5C7J.js.map +0 -1
- package/dist/chunk-VRS6WCEK.js.map +0 -1
- package/dist/chunk-WEYDDIBQ.cjs.map +0 -1
- package/dist/chunk-X4HDKFW5.cjs.map +0 -1
- package/dist/chunk-X4P4TQXH.cjs +0 -30
- package/dist/chunk-X4P4TQXH.cjs.map +0 -1
- package/dist/chunk-XA3UEJIW.cjs +0 -25
- package/dist/chunk-XA3UEJIW.cjs.map +0 -1
- package/dist/chunk-YBMUEEM5.js.map +0 -1
- package/dist/chunk-ZKVOS57Q.cjs.map +0 -1
|
@@ -1,66 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
DropdownMenuTrigger,
|
|
10
|
-
FOCUS_RING,
|
|
11
|
-
MenuIcon,
|
|
12
|
-
bubblePart,
|
|
13
|
-
interceptKeys,
|
|
14
|
-
keepFocus,
|
|
15
|
-
returnFocusToText
|
|
16
|
-
} from "./chunk-T43RZTUT.js";
|
|
17
|
-
import {
|
|
18
|
-
EditableRegion,
|
|
19
|
-
NATIVE_INTERACTION,
|
|
20
|
-
caretClientRect,
|
|
21
|
-
caretFromPoint,
|
|
22
|
-
domToPos,
|
|
23
|
-
handleCopy,
|
|
24
|
-
isComposingKey,
|
|
25
|
-
isOnFirstLine,
|
|
26
|
-
isOnLastLine,
|
|
27
|
-
lineEdgeRect,
|
|
28
|
-
neighbourBlock,
|
|
29
|
-
posToDom,
|
|
30
|
-
useEditorState,
|
|
31
|
-
useIsomorphicLayoutEffect,
|
|
32
|
-
useReadOnly
|
|
33
|
-
} from "./chunk-EPARJI4V.js";
|
|
34
|
-
import {
|
|
35
|
-
Transaction,
|
|
36
|
-
createPluginKey,
|
|
37
|
-
defineExtension,
|
|
38
|
-
descendantsEnd,
|
|
39
|
-
headBlockId,
|
|
40
|
-
insertBlocksStep,
|
|
41
|
-
insertHardBreak,
|
|
42
|
-
insertTextAt,
|
|
43
|
-
isCollapsed,
|
|
44
|
-
isParagraph,
|
|
45
|
-
markCoverage,
|
|
46
|
-
primaryRegion,
|
|
47
|
-
regionLength,
|
|
48
|
-
replaceBlockStep,
|
|
49
|
-
replaceInlineStep,
|
|
50
|
-
setMark,
|
|
51
|
-
textSelection,
|
|
52
|
-
toggleMark
|
|
53
|
-
} from "./chunk-OBMBSU2S.js";
|
|
54
|
-
import {
|
|
55
|
-
blockById,
|
|
56
|
-
cellKey,
|
|
57
|
-
countOf,
|
|
58
|
-
equalInline,
|
|
59
|
-
inlineLength,
|
|
60
|
-
newId,
|
|
61
|
-
requireBlockIndex,
|
|
62
|
-
sameItems
|
|
63
|
-
} from "./chunk-4XFXB37X.js";
|
|
1
|
+
import { FOCUS_RING, interceptKeys, DropdownMenuCheckboxItem, DropdownMenuSeparator, DropdownMenuRadioGroup, DropdownMenuRadioItem, MenuIcon, keepFocus, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, bubblePart, returnFocusToText, DropdownMenuItem } from './chunk-DYWU4SQ2.js';
|
|
2
|
+
import { useEditorState, EditableRegion, useReadOnly, useIsomorphicLayoutEffect, isComposingKey, handleCopy, neighbourBlock, NATIVE_INTERACTION, posToDom, isOnFirstLine, isOnLastLine, caretClientRect, lineEdgeRect, caretFromPoint, domToPos } from './chunk-IEP7BPFN.js';
|
|
3
|
+
import { createPluginKey, markCoverage, toggleMark, setMark, Transaction, textSelection, headBlockId, isParagraph, regionLength, primaryRegion, replaceBlockStep, insertBlocksStep, descendantsEnd, defineExtension, replaceInlineStep, isCollapsed, insertHardBreak, insertTextAt } from './chunk-L4D23LM2.js';
|
|
4
|
+
import { cellKey, blockById, inlineLength, requireBlockIndex, newId, countOf, sameItems, equalInline } from './chunk-L6OW2FL3.js';
|
|
5
|
+
import { memo, useCallback, useRef, useState, useEffect, useSyncExternalStore, Fragment as Fragment$1 } from 'react';
|
|
6
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
|
+
import { createPortal } from 'react-dom';
|
|
8
|
+
import { Table, Plus, GripVertical, GripHorizontal, AlignLeft, AlignCenter, AlignRight, ArrowUpToLine, ArrowDownToLine, ArrowUp, ArrowDown, Trash, ArrowLeftToLine, ArrowRightToLine, ArrowLeft, ArrowRight } from 'lucide-react';
|
|
64
9
|
|
|
65
10
|
// src/engine/commands/table-shape.ts
|
|
66
11
|
var CELL = /^cell:(\d+):(\d+)$/;
|
|
@@ -217,16 +162,9 @@ function setCellsMark(type, attrs) {
|
|
|
217
162
|
};
|
|
218
163
|
}
|
|
219
164
|
|
|
220
|
-
// src/extensions/table/TableBlock.tsx
|
|
221
|
-
import { useRef } from "react";
|
|
222
|
-
|
|
223
165
|
// src/extensions/table/controls-slot.ts
|
|
224
166
|
var CONTROLS_SLOT = "data-quoin-table-controls";
|
|
225
167
|
var controlsSlot = (controller, blockId) => controller.blockElement(blockId)?.querySelector(`[${CONTROLS_SLOT}]`) ?? null;
|
|
226
|
-
|
|
227
|
-
// src/extensions/table/TableCell.tsx
|
|
228
|
-
import { memo, useCallback } from "react";
|
|
229
|
-
import { jsx } from "react/jsx-runtime";
|
|
230
168
|
var TableCell = memo(function TableCell2({ controller, blockId, row, col, header, align, label }) {
|
|
231
169
|
const inRange = useEditorState(
|
|
232
170
|
controller,
|
|
@@ -251,9 +189,6 @@ var TableCell = memo(function TableCell2({ controller, blockId, row, col, header
|
|
|
251
189
|
}
|
|
252
190
|
);
|
|
253
191
|
});
|
|
254
|
-
|
|
255
|
-
// src/extensions/table/table-ui-store.ts
|
|
256
|
-
import { useCallback as useCallback2, useSyncExternalStore } from "react";
|
|
257
192
|
function createTableUiStore() {
|
|
258
193
|
let state = { preview: null };
|
|
259
194
|
const listeners = /* @__PURE__ */ new Set();
|
|
@@ -280,16 +215,13 @@ function tableUiStore(controller) {
|
|
|
280
215
|
}
|
|
281
216
|
function useWidthPreview(controller, blockId) {
|
|
282
217
|
const store = tableUiStore(controller);
|
|
283
|
-
const read =
|
|
218
|
+
const read = useCallback(() => {
|
|
284
219
|
const { preview } = store.get();
|
|
285
220
|
return preview?.block === blockId ? preview.widths : null;
|
|
286
221
|
}, [store, blockId]);
|
|
287
222
|
return useSyncExternalStore(store.subscribe, read, read);
|
|
288
223
|
}
|
|
289
224
|
|
|
290
|
-
// src/extensions/table/use-cell-press.ts
|
|
291
|
-
import { useEffect } from "react";
|
|
292
|
-
|
|
293
225
|
// src/engine/commands/table-commands.ts
|
|
294
226
|
function changeTable(blockId, change, plan) {
|
|
295
227
|
return (state, dispatch) => {
|
|
@@ -529,13 +461,10 @@ function useCellPress(controller, blockId, table, editable) {
|
|
|
529
461
|
return () => element.removeEventListener("pointerdown", onPointerDown);
|
|
530
462
|
}, [controller, blockId, table, editable]);
|
|
531
463
|
}
|
|
532
|
-
|
|
533
|
-
// src/extensions/table/use-reveal-cell.ts
|
|
534
|
-
import { useCallback as useCallback3, useEffect as useEffect2 } from "react";
|
|
535
464
|
function useRevealCell(controller, blockId) {
|
|
536
465
|
const region = useEditorState(
|
|
537
466
|
controller,
|
|
538
|
-
|
|
467
|
+
useCallback(
|
|
539
468
|
(state) => {
|
|
540
469
|
const caret = headCell(state);
|
|
541
470
|
return caret?.block.id === blockId ? caret.head.region : null;
|
|
@@ -543,7 +472,7 @@ function useRevealCell(controller, blockId) {
|
|
|
543
472
|
[blockId]
|
|
544
473
|
)
|
|
545
474
|
);
|
|
546
|
-
|
|
475
|
+
useEffect(() => {
|
|
547
476
|
const host = region === null ? void 0 : controller.registry.get(blockId, region);
|
|
548
477
|
const root = controller.root;
|
|
549
478
|
if (!host || !root?.contains(root.ownerDocument.activeElement)) return;
|
|
@@ -551,9 +480,6 @@ function useRevealCell(controller, blockId) {
|
|
|
551
480
|
}, [controller, blockId, region]);
|
|
552
481
|
}
|
|
553
482
|
|
|
554
|
-
// src/extensions/table/use-table-keys.ts
|
|
555
|
-
import { useEffect as useEffect3 } from "react";
|
|
556
|
-
|
|
557
483
|
// src/extensions/table/vertical-cell-move.ts
|
|
558
484
|
var VERTICAL = { ArrowUp: -1, ArrowDown: 1 };
|
|
559
485
|
function caretAtGoal(controller, blockId, cell, direction) {
|
|
@@ -623,7 +549,7 @@ function typeOver(controller, blockId, event) {
|
|
|
623
549
|
return controller.run(typeOverCells(event.key));
|
|
624
550
|
}
|
|
625
551
|
function useTableKeys(controller, blockId, editable) {
|
|
626
|
-
|
|
552
|
+
useEffect(() => {
|
|
627
553
|
if (!editable) return;
|
|
628
554
|
const intercept = (event) => {
|
|
629
555
|
if (isComposingKey(controller, event)) return false;
|
|
@@ -634,9 +560,6 @@ function useTableKeys(controller, blockId, editable) {
|
|
|
634
560
|
return interceptKeys(controller, intercept);
|
|
635
561
|
}, [controller, blockId, editable]);
|
|
636
562
|
}
|
|
637
|
-
|
|
638
|
-
// src/extensions/table/TableBlock.tsx
|
|
639
|
-
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
640
563
|
var indexes = (from, to) => Array.from({ length: Math.max(to - from, 0) }, (_, i) => from + i);
|
|
641
564
|
function TableBlock({ block, controller, labels }) {
|
|
642
565
|
const readOnly = useReadOnly(controller);
|
|
@@ -649,7 +572,7 @@ function TableBlock({ block, controller, labels }) {
|
|
|
649
572
|
useTableKeys(controller, block.id, !readOnly);
|
|
650
573
|
useCellPress(controller, block.id, table, !readOnly);
|
|
651
574
|
useRevealCell(controller, block.id);
|
|
652
|
-
const row = (index) => /* @__PURE__ */
|
|
575
|
+
const row = (index) => /* @__PURE__ */ jsx("tr", { children: indexes(0, cols).map((col) => /* @__PURE__ */ jsx(
|
|
653
576
|
TableCell,
|
|
654
577
|
{
|
|
655
578
|
controller,
|
|
@@ -663,7 +586,7 @@ function TableBlock({ block, controller, labels }) {
|
|
|
663
586
|
col
|
|
664
587
|
)) }, index);
|
|
665
588
|
const scroller = readOnly ? { role: "region", "aria-label": labels.table, tabIndex: 0 } : void 0;
|
|
666
|
-
return /* @__PURE__ */
|
|
589
|
+
return /* @__PURE__ */ jsx("div", { contentEditable: false, className: "quoin-table", "data-readonly": readOnly ? "" : void 0, children: /* @__PURE__ */ jsxs("div", { className: `quoin-table-scroll ${readOnly ? FOCUS_RING : ""}`, ...scroller, children: [
|
|
667
590
|
/* @__PURE__ */ jsxs(
|
|
668
591
|
"table",
|
|
669
592
|
{
|
|
@@ -671,20 +594,16 @@ function TableBlock({ block, controller, labels }) {
|
|
|
671
594
|
"aria-label": readOnly ? void 0 : labels.table,
|
|
672
595
|
style: widths === null ? void 0 : { width: widths.reduce((sum, width) => sum + width, 0), tableLayout: "fixed" },
|
|
673
596
|
children: [
|
|
674
|
-
widths !== null && /* @__PURE__ */
|
|
675
|
-
header && /* @__PURE__ */
|
|
676
|
-
rows > (header ? 1 : 0) && /* @__PURE__ */
|
|
597
|
+
widths !== null && /* @__PURE__ */ jsx("colgroup", { children: widths.map((width, col) => /* @__PURE__ */ jsx("col", { style: { width } }, col)) }),
|
|
598
|
+
header && /* @__PURE__ */ jsx("thead", { children: row(0) }),
|
|
599
|
+
rows > (header ? 1 : 0) && /* @__PURE__ */ jsx("tbody", { children: indexes(header ? 1 : 0, rows).map(row) })
|
|
677
600
|
]
|
|
678
601
|
}
|
|
679
602
|
),
|
|
680
|
-
!readOnly && /* @__PURE__ */
|
|
603
|
+
!readOnly && /* @__PURE__ */ jsx("div", { className: "quoin-table-controls", ...{ [CONTROLS_SLOT]: "" } })
|
|
681
604
|
] }) });
|
|
682
605
|
}
|
|
683
606
|
|
|
684
|
-
// src/extensions/table/TableControls.tsx
|
|
685
|
-
import { useCallback as useCallback5, useEffect as useEffect7, useState as useState3 } from "react";
|
|
686
|
-
import { createPortal } from "react-dom";
|
|
687
|
-
|
|
688
607
|
// src/extensions/table/menu-cells.ts
|
|
689
608
|
var EMPTY = [];
|
|
690
609
|
function lineCells(block, index, axis) {
|
|
@@ -705,14 +624,6 @@ function sameMenuCells(opened, current, target, axis) {
|
|
|
705
624
|
const others = Array.from({ length: lines }, (_, other) => other);
|
|
706
625
|
return others.every((other) => other === index || sameLine(opened, current, other, axis));
|
|
707
626
|
}
|
|
708
|
-
|
|
709
|
-
// src/extensions/table/TableHandles.tsx
|
|
710
|
-
import { useRef as useRef3 } from "react";
|
|
711
|
-
import { Plus } from "lucide-react";
|
|
712
|
-
|
|
713
|
-
// src/extensions/table/ColumnResizer.tsx
|
|
714
|
-
import { useEffect as useEffect4, useRef as useRef2 } from "react";
|
|
715
|
-
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
716
627
|
var MIN_COLUMN_WIDTH = 48;
|
|
717
628
|
var MAX_COLUMN_WIDTH = 1200;
|
|
718
629
|
var STEP = 10;
|
|
@@ -720,7 +631,7 @@ var LARGE_STEP = 50;
|
|
|
720
631
|
var clampWidth = (px) => Math.min(MAX_COLUMN_WIDTH, Math.max(MIN_COLUMN_WIDTH, Math.round(px)));
|
|
721
632
|
function ColumnResizer(props) {
|
|
722
633
|
const { controller, labels, blockId, col, drawn, style, resizerRef, onHold, onBack } = props;
|
|
723
|
-
const drag =
|
|
634
|
+
const drag = useRef(null);
|
|
724
635
|
const width = Math.round(drawn[col] ?? 0);
|
|
725
636
|
const store = tableUiStore(controller);
|
|
726
637
|
const write = (px, widths) => {
|
|
@@ -758,7 +669,7 @@ function ColumnResizer(props) {
|
|
|
758
669
|
onHold(false);
|
|
759
670
|
return current;
|
|
760
671
|
};
|
|
761
|
-
|
|
672
|
+
useEffect(
|
|
762
673
|
() => () => {
|
|
763
674
|
if (drag.current !== null) store.set({ preview: null });
|
|
764
675
|
},
|
|
@@ -768,7 +679,7 @@ function ColumnResizer(props) {
|
|
|
768
679
|
const ended = stop();
|
|
769
680
|
if (ended?.to != null && ended.to !== Math.round(ended.widths[col])) write(ended.to, ended.widths);
|
|
770
681
|
};
|
|
771
|
-
return /* @__PURE__ */
|
|
682
|
+
return /* @__PURE__ */ jsx(
|
|
772
683
|
"div",
|
|
773
684
|
{
|
|
774
685
|
ref: resizerRef,
|
|
@@ -791,31 +702,26 @@ function ColumnResizer(props) {
|
|
|
791
702
|
}
|
|
792
703
|
);
|
|
793
704
|
}
|
|
794
|
-
|
|
795
|
-
// src/extensions/table/HandleMenu.tsx
|
|
796
|
-
import { Fragment } from "react";
|
|
797
|
-
import { GripHorizontal, GripVertical } from "lucide-react";
|
|
798
|
-
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
799
705
|
var DESTRUCTIVE = "text-destructive focus:text-destructive";
|
|
800
706
|
function HandleMenu({ controller, axis, label, style, items, open, onOpenChange, buttonRef, children }) {
|
|
801
707
|
const run = (item3) => {
|
|
802
708
|
if (controller.run(item3.command)) controller.announce(item3.done);
|
|
803
709
|
};
|
|
804
|
-
const item2 = (entry) => /* @__PURE__ */
|
|
710
|
+
const item2 = (entry) => /* @__PURE__ */ jsxs(
|
|
805
711
|
DropdownMenuItem,
|
|
806
712
|
{
|
|
807
713
|
disabled: entry.disabled,
|
|
808
714
|
className: entry.destructive ? DESTRUCTIVE : void 0,
|
|
809
715
|
onSelect: () => run(entry),
|
|
810
716
|
children: [
|
|
811
|
-
/* @__PURE__ */
|
|
717
|
+
/* @__PURE__ */ jsx(MenuIcon, { icon: entry.icon }),
|
|
812
718
|
entry.label
|
|
813
719
|
]
|
|
814
720
|
},
|
|
815
721
|
entry.id
|
|
816
722
|
);
|
|
817
|
-
return /* @__PURE__ */
|
|
818
|
-
/* @__PURE__ */
|
|
723
|
+
return /* @__PURE__ */ jsxs(DropdownMenu, { open, onOpenChange, children: [
|
|
724
|
+
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
819
725
|
"button",
|
|
820
726
|
{
|
|
821
727
|
ref: buttonRef,
|
|
@@ -825,10 +731,10 @@ function HandleMenu({ controller, axis, label, style, items, open, onOpenChange,
|
|
|
825
731
|
"data-axis": axis,
|
|
826
732
|
className: "quoin-table-handle",
|
|
827
733
|
style,
|
|
828
|
-
children: axis === "row" ? /* @__PURE__ */
|
|
734
|
+
children: axis === "row" ? /* @__PURE__ */ jsx(GripVertical, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx(GripHorizontal, { "aria-hidden": "true" })
|
|
829
735
|
}
|
|
830
736
|
) }),
|
|
831
|
-
open && /* @__PURE__ */
|
|
737
|
+
open && /* @__PURE__ */ jsxs(
|
|
832
738
|
DropdownMenuContent,
|
|
833
739
|
{
|
|
834
740
|
align: "start",
|
|
@@ -839,8 +745,8 @@ function HandleMenu({ controller, axis, label, style, items, open, onOpenChange,
|
|
|
839
745
|
children: [
|
|
840
746
|
items.filter((entry) => !entry.destructive).map(item2),
|
|
841
747
|
children,
|
|
842
|
-
items.filter((entry) => entry.destructive).map((entry) => /* @__PURE__ */
|
|
843
|
-
/* @__PURE__ */
|
|
748
|
+
items.filter((entry) => entry.destructive).map((entry) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
749
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
844
750
|
item2(entry)
|
|
845
751
|
] }, entry.id))
|
|
846
752
|
]
|
|
@@ -848,22 +754,6 @@ function HandleMenu({ controller, axis, label, style, items, open, onOpenChange,
|
|
|
848
754
|
)
|
|
849
755
|
] });
|
|
850
756
|
}
|
|
851
|
-
|
|
852
|
-
// src/extensions/table/table-menu-items.ts
|
|
853
|
-
import {
|
|
854
|
-
AlignCenter,
|
|
855
|
-
AlignLeft,
|
|
856
|
-
AlignRight,
|
|
857
|
-
ArrowDown,
|
|
858
|
-
ArrowDownToLine,
|
|
859
|
-
ArrowLeft,
|
|
860
|
-
ArrowLeftToLine,
|
|
861
|
-
ArrowRight,
|
|
862
|
-
ArrowRightToLine,
|
|
863
|
-
ArrowUp,
|
|
864
|
-
ArrowUpToLine,
|
|
865
|
-
Trash
|
|
866
|
-
} from "lucide-react";
|
|
867
757
|
var item = (id, label, icon, command, done, options = {}) => ({ id, label, icon, command, done, ...options });
|
|
868
758
|
function rowMenuItems(labels, blockId, row, { rows }) {
|
|
869
759
|
const { rowInserted, rowMoved, rowDeleted } = labels;
|
|
@@ -894,9 +784,6 @@ var alignItems = (labels) => [
|
|
|
894
784
|
{ value: "center", label: labels.alignCenter, icon: AlignCenter, done: labels.alignedCenter },
|
|
895
785
|
{ value: "right", label: labels.alignRight, icon: AlignRight, done: labels.alignedRight }
|
|
896
786
|
];
|
|
897
|
-
|
|
898
|
-
// src/extensions/table/TableHandles.tsx
|
|
899
|
-
import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
900
787
|
var BESIDE = 4;
|
|
901
788
|
var end = (span) => span.start + span.size;
|
|
902
789
|
function edgeOf(spans, edge) {
|
|
@@ -907,9 +794,9 @@ var middle = (span) => span.start + span.size / 2;
|
|
|
907
794
|
var isTab = (event) => event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey;
|
|
908
795
|
function TableHandles(props) {
|
|
909
796
|
const { controller, labels, block, target, geometry, menu, onMenu, onHold, focusRequested, onFocused } = props;
|
|
910
|
-
const rowHandle =
|
|
911
|
-
const columnHandle =
|
|
912
|
-
const resizer =
|
|
797
|
+
const rowHandle = useRef(null);
|
|
798
|
+
const columnHandle = useRef(null);
|
|
799
|
+
const resizer = useRef(null);
|
|
913
800
|
const shape = tableShape(block);
|
|
914
801
|
const row = Math.min(target.row, shape.rows - 1);
|
|
915
802
|
const col = Math.min(target.col, shape.cols - 1);
|
|
@@ -938,8 +825,8 @@ function TableHandles(props) {
|
|
|
938
825
|
};
|
|
939
826
|
const place = (left, top) => ({ left, top });
|
|
940
827
|
const opener = (kind) => (open) => onMenu(open ? kind : null);
|
|
941
|
-
return /* @__PURE__ */
|
|
942
|
-
geometry.cols.map((span, index) => /* @__PURE__ */
|
|
828
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
829
|
+
geometry.cols.map((span, index) => /* @__PURE__ */ jsx(
|
|
943
830
|
ColumnResizer,
|
|
944
831
|
{
|
|
945
832
|
controller,
|
|
@@ -954,8 +841,8 @@ function TableHandles(props) {
|
|
|
954
841
|
},
|
|
955
842
|
index
|
|
956
843
|
)),
|
|
957
|
-
/* @__PURE__ */
|
|
958
|
-
rowInsertAt === null && geometry.rows[row] && /* @__PURE__ */
|
|
844
|
+
/* @__PURE__ */ jsxs("div", { role: "toolbar", "aria-label": labels.tableControls, className: "quoin-table-toolbar", onKeyDown, children: [
|
|
845
|
+
rowInsertAt === null && geometry.rows[row] && /* @__PURE__ */ jsx(
|
|
959
846
|
HandleMenu,
|
|
960
847
|
{
|
|
961
848
|
controller,
|
|
@@ -966,7 +853,7 @@ function TableHandles(props) {
|
|
|
966
853
|
open: menu === "row",
|
|
967
854
|
onOpenChange: opener("row"),
|
|
968
855
|
buttonRef: rowHandle,
|
|
969
|
-
children: row === 0 && /* @__PURE__ */
|
|
856
|
+
children: row === 0 && /* @__PURE__ */ jsx(
|
|
970
857
|
DropdownMenuCheckboxItem,
|
|
971
858
|
{
|
|
972
859
|
checked: block.attrs.header !== false,
|
|
@@ -976,7 +863,7 @@ function TableHandles(props) {
|
|
|
976
863
|
)
|
|
977
864
|
}
|
|
978
865
|
),
|
|
979
|
-
columnInsertAt === null && geometry.cols[col] && /* @__PURE__ */
|
|
866
|
+
columnInsertAt === null && geometry.cols[col] && /* @__PURE__ */ jsxs(
|
|
980
867
|
HandleMenu,
|
|
981
868
|
{
|
|
982
869
|
controller,
|
|
@@ -988,14 +875,14 @@ function TableHandles(props) {
|
|
|
988
875
|
onOpenChange: opener("column"),
|
|
989
876
|
buttonRef: columnHandle,
|
|
990
877
|
children: [
|
|
991
|
-
/* @__PURE__ */
|
|
992
|
-
/* @__PURE__ */
|
|
878
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
879
|
+
/* @__PURE__ */ jsx(DropdownMenuRadioGroup, { value: align ?? "", children: alignItems(labels).map(({ value, label, icon, done }) => /* @__PURE__ */ jsxs(
|
|
993
880
|
DropdownMenuRadioItem,
|
|
994
881
|
{
|
|
995
882
|
value,
|
|
996
883
|
onSelect: () => align === value ? run(setColumnAlign(block.id, col, null), labels.alignmentCleared) : run(setColumnAlign(block.id, col, value), done),
|
|
997
884
|
children: [
|
|
998
|
-
/* @__PURE__ */
|
|
885
|
+
/* @__PURE__ */ jsx(MenuIcon, { icon }),
|
|
999
886
|
label
|
|
1000
887
|
]
|
|
1001
888
|
},
|
|
@@ -1005,7 +892,7 @@ function TableHandles(props) {
|
|
|
1005
892
|
}
|
|
1006
893
|
)
|
|
1007
894
|
] }),
|
|
1008
|
-
rowEdge !== null && rowInsertAt !== null && /* @__PURE__ */
|
|
895
|
+
rowEdge !== null && rowInsertAt !== null && /* @__PURE__ */ jsx(
|
|
1009
896
|
"button",
|
|
1010
897
|
{
|
|
1011
898
|
type: "button",
|
|
@@ -1017,10 +904,10 @@ function TableHandles(props) {
|
|
|
1017
904
|
onPointerDown: keepFocus,
|
|
1018
905
|
onMouseDown: keepFocus,
|
|
1019
906
|
onClick: () => run(addRow(block.id, rowEdge), labels.rowInserted),
|
|
1020
|
-
children: /* @__PURE__ */
|
|
907
|
+
children: /* @__PURE__ */ jsx(Plus, { "aria-hidden": "true" })
|
|
1021
908
|
}
|
|
1022
909
|
),
|
|
1023
|
-
colEdge !== null && columnInsertAt !== null && /* @__PURE__ */
|
|
910
|
+
colEdge !== null && columnInsertAt !== null && /* @__PURE__ */ jsx(
|
|
1024
911
|
"button",
|
|
1025
912
|
{
|
|
1026
913
|
type: "button",
|
|
@@ -1032,15 +919,12 @@ function TableHandles(props) {
|
|
|
1032
919
|
onPointerDown: keepFocus,
|
|
1033
920
|
onMouseDown: keepFocus,
|
|
1034
921
|
onClick: () => run(addColumn(block.id, colEdge), labels.columnInserted),
|
|
1035
|
-
children: /* @__PURE__ */
|
|
922
|
+
children: /* @__PURE__ */ jsx(Plus, { "aria-hidden": "true" })
|
|
1036
923
|
}
|
|
1037
924
|
)
|
|
1038
925
|
] });
|
|
1039
926
|
}
|
|
1040
927
|
|
|
1041
|
-
// src/extensions/table/use-table-geometry.ts
|
|
1042
|
-
import { useState } from "react";
|
|
1043
|
-
|
|
1044
928
|
// src/extensions/table/table-geometry.ts
|
|
1045
929
|
function measureTable(table, origin) {
|
|
1046
930
|
const box = table.getBoundingClientRect();
|
|
@@ -1103,11 +987,8 @@ function useTableGeometry(controller, blockId, slot) {
|
|
|
1103
987
|
}, [controller, blockId, slot]);
|
|
1104
988
|
return geometry;
|
|
1105
989
|
}
|
|
1106
|
-
|
|
1107
|
-
// src/extensions/table/use-cut-cells.ts
|
|
1108
|
-
import { useEffect as useEffect5 } from "react";
|
|
1109
990
|
function useCutCells(controller) {
|
|
1110
|
-
|
|
991
|
+
useEffect(() => {
|
|
1111
992
|
const root = controller.root;
|
|
1112
993
|
if (root === null) return;
|
|
1113
994
|
const onCut = (event) => {
|
|
@@ -1120,9 +1001,6 @@ function useCutCells(controller) {
|
|
|
1120
1001
|
return () => root.removeEventListener("cut", onCut, true);
|
|
1121
1002
|
}, [controller]);
|
|
1122
1003
|
}
|
|
1123
|
-
|
|
1124
|
-
// src/extensions/table/use-table-target.ts
|
|
1125
|
-
import { useCallback as useCallback4, useEffect as useEffect6, useState as useState2 } from "react";
|
|
1126
1004
|
var EDGE_ZONE = 24;
|
|
1127
1005
|
var EDGE_REACH = 8;
|
|
1128
1006
|
var VIEWPORT = { left: 0, top: 0 };
|
|
@@ -1158,16 +1036,16 @@ function focusOf(root) {
|
|
|
1158
1036
|
return active.closest(CONTROLS) === null ? "editor" : "controls";
|
|
1159
1037
|
}
|
|
1160
1038
|
function useTableTarget(controller, held) {
|
|
1161
|
-
const [hovered, setHovered] =
|
|
1162
|
-
const [focus, setFocus] =
|
|
1039
|
+
const [hovered, setHovered] = useState(null);
|
|
1040
|
+
const [focus, setFocus] = useState("none");
|
|
1163
1041
|
const caret = useEditorState(controller, caretTarget, sameTarget);
|
|
1164
1042
|
const hoveredBlock = hovered?.target.block ?? null;
|
|
1165
1043
|
const shape = useEditorState(
|
|
1166
1044
|
controller,
|
|
1167
|
-
|
|
1045
|
+
useCallback((state) => hoveredBlock === null ? null : shapeOf(state, hoveredBlock), [hoveredBlock])
|
|
1168
1046
|
);
|
|
1169
1047
|
const pointed = hovered !== null && hovered.shape === shape ? hovered.target : null;
|
|
1170
|
-
|
|
1048
|
+
useEffect(() => {
|
|
1171
1049
|
const root = controller.root;
|
|
1172
1050
|
if (root === null) return;
|
|
1173
1051
|
const onPointerMove = (event) => {
|
|
@@ -1200,32 +1078,29 @@ function useTableTarget(controller, held) {
|
|
|
1200
1078
|
if (focus === "controls") return caret ?? pointed;
|
|
1201
1079
|
return pointed ?? (focus === "editor" ? caret : null);
|
|
1202
1080
|
}
|
|
1203
|
-
|
|
1204
|
-
// src/extensions/table/TableControls.tsx
|
|
1205
|
-
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
1206
1081
|
var isFocusKey = (event) => event.key === "F10" && event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey;
|
|
1207
1082
|
var takesFocusKey = (state) => isCollapsed(state.selection) || cellSelection(state) !== null;
|
|
1208
1083
|
function TableControls({ controller, labels }) {
|
|
1209
1084
|
const readOnly = useReadOnly(controller);
|
|
1210
|
-
const [held, setHeld] =
|
|
1211
|
-
const [focusFor, setFocusFor] =
|
|
1212
|
-
const [slot, setSlot] =
|
|
1085
|
+
const [held, setHeld] = useState(null);
|
|
1086
|
+
const [focusFor, setFocusFor] = useState(null);
|
|
1087
|
+
const [slot, setSlot] = useState(null);
|
|
1213
1088
|
const target = useTableTarget(controller, held?.target ?? null);
|
|
1214
1089
|
useCutCells(controller);
|
|
1215
1090
|
const blockId = target?.block ?? null;
|
|
1216
1091
|
const block = useEditorState(
|
|
1217
1092
|
controller,
|
|
1218
|
-
|
|
1093
|
+
useCallback((state) => blockId === null ? null : tableBlock(state.doc, blockId), [blockId])
|
|
1219
1094
|
);
|
|
1220
1095
|
if (held?.menu && held.opened && block && held.opened !== block) {
|
|
1221
1096
|
setHeld(sameMenuCells(held.opened, block, held.target, held.menu) ? { ...held, opened: block } : null);
|
|
1222
1097
|
}
|
|
1223
|
-
|
|
1098
|
+
useEffect(() => {
|
|
1224
1099
|
if (!readOnly && block !== null) return;
|
|
1225
1100
|
setHeld(null);
|
|
1226
1101
|
setFocusFor(null);
|
|
1227
1102
|
}, [readOnly, block]);
|
|
1228
|
-
|
|
1103
|
+
useEffect(() => {
|
|
1229
1104
|
if (readOnly) return;
|
|
1230
1105
|
const intercept = (event) => {
|
|
1231
1106
|
const { state } = controller.editor;
|
|
@@ -1238,12 +1113,12 @@ function TableControls({ controller, labels }) {
|
|
|
1238
1113
|
};
|
|
1239
1114
|
return interceptKeys(controller, intercept);
|
|
1240
1115
|
}, [controller, readOnly]);
|
|
1241
|
-
const onMenu =
|
|
1116
|
+
const onMenu = useCallback(
|
|
1242
1117
|
(menu) => setHeld(menu === null || target === null || block === null ? null : { target, menu, opened: block }),
|
|
1243
1118
|
[target, block]
|
|
1244
1119
|
);
|
|
1245
|
-
const onHold =
|
|
1246
|
-
const onFocused =
|
|
1120
|
+
const onHold = useCallback((hold) => setHeld(hold && target !== null ? { target, menu: null } : null), [target]);
|
|
1121
|
+
const onFocused = useCallback(() => {
|
|
1247
1122
|
setFocusFor(null);
|
|
1248
1123
|
setHeld((current) => current?.menu === null ? null : current);
|
|
1249
1124
|
}, []);
|
|
@@ -1253,7 +1128,7 @@ function TableControls({ controller, labels }) {
|
|
|
1253
1128
|
});
|
|
1254
1129
|
if (target === null || block === null || readOnly || slot === null || !slot.isConnected) return null;
|
|
1255
1130
|
return createPortal(
|
|
1256
|
-
/* @__PURE__ */
|
|
1131
|
+
/* @__PURE__ */ jsx(
|
|
1257
1132
|
PlacedHandles,
|
|
1258
1133
|
{
|
|
1259
1134
|
controller,
|
|
@@ -1274,7 +1149,7 @@ function TableControls({ controller, labels }) {
|
|
|
1274
1149
|
}
|
|
1275
1150
|
function PlacedHandles({ slot, ...props }) {
|
|
1276
1151
|
const geometry = useTableGeometry(props.controller, props.block.id, slot);
|
|
1277
|
-
return geometry === null ? null : /* @__PURE__ */
|
|
1152
|
+
return geometry === null ? null : /* @__PURE__ */ jsx(TableHandles, { ...props, geometry });
|
|
1278
1153
|
}
|
|
1279
1154
|
|
|
1280
1155
|
// src/extensions/table/table-labels.ts
|
|
@@ -1320,9 +1195,6 @@ function resolveTableLabels(overrides) {
|
|
|
1320
1195
|
const given = Object.entries(overrides ?? {}).filter(([, value]) => value !== void 0);
|
|
1321
1196
|
return given.length === 0 ? englishTableLabels : { ...englishTableLabels, ...Object.fromEntries(given) };
|
|
1322
1197
|
}
|
|
1323
|
-
|
|
1324
|
-
// src/extensions/table/table-slash-item.ts
|
|
1325
|
-
import { Table } from "lucide-react";
|
|
1326
1198
|
var NEW_TABLE = { rows: 3, cols: 3 };
|
|
1327
1199
|
var tableSlashItem = (labels) => ({
|
|
1328
1200
|
id: "table",
|
|
@@ -1333,9 +1205,6 @@ var tableSlashItem = (labels) => ({
|
|
|
1333
1205
|
keywords: ["grid", "rows", "columns", "spreadsheet", "|"],
|
|
1334
1206
|
command: () => insertTable(NEW_TABLE.rows, NEW_TABLE.cols)
|
|
1335
1207
|
});
|
|
1336
|
-
|
|
1337
|
-
// src/extensions/table/table-extension.tsx
|
|
1338
|
-
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
1339
1208
|
var ABOVE_CORE_KEYS = 200;
|
|
1340
1209
|
var pasteOverCells = {
|
|
1341
1210
|
name: "table-cells",
|
|
@@ -1343,8 +1212,8 @@ var pasteOverCells = {
|
|
|
1343
1212
|
};
|
|
1344
1213
|
function tableExtension(options = {}) {
|
|
1345
1214
|
const labels = resolveTableLabels(options.labels);
|
|
1346
|
-
const TableRenderer = (props) => /* @__PURE__ */
|
|
1347
|
-
const TableOverlay = ({ controller }) => /* @__PURE__ */
|
|
1215
|
+
const TableRenderer = (props) => /* @__PURE__ */ jsx(TableBlock, { ...props, labels });
|
|
1216
|
+
const TableOverlay = ({ controller }) => /* @__PURE__ */ jsx(TableControls, { controller, labels });
|
|
1348
1217
|
const ui = {
|
|
1349
1218
|
slashItems: [tableSlashItem(labels)],
|
|
1350
1219
|
renderers: { TABLE: TableRenderer },
|
|
@@ -1361,25 +1230,6 @@ function tableExtension(options = {}) {
|
|
|
1361
1230
|
});
|
|
1362
1231
|
}
|
|
1363
1232
|
|
|
1364
|
-
export {
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
cellSelection,
|
|
1368
|
-
cellsInRange,
|
|
1369
|
-
selectCells,
|
|
1370
|
-
deleteCellContents,
|
|
1371
|
-
setCellsMark,
|
|
1372
|
-
addRow,
|
|
1373
|
-
removeRow,
|
|
1374
|
-
moveRow,
|
|
1375
|
-
addColumn,
|
|
1376
|
-
removeColumn,
|
|
1377
|
-
moveColumn,
|
|
1378
|
-
toggleHeaderRow,
|
|
1379
|
-
setColumnAlign,
|
|
1380
|
-
setColumnWidth,
|
|
1381
|
-
insertTable,
|
|
1382
|
-
englishTableLabels,
|
|
1383
|
-
tableExtension
|
|
1384
|
-
};
|
|
1385
|
-
//# sourceMappingURL=chunk-C23RQVRK.js.map
|
|
1233
|
+
export { addColumn, addRow, cellSelection, cellSelectionKey, cellSelectionPlugin, cellsInRange, deleteCellContents, englishTableLabels, insertTable, moveColumn, moveRow, removeColumn, removeRow, selectCells, setCellsMark, setColumnAlign, setColumnWidth, tableExtension, toggleHeaderRow };
|
|
1234
|
+
//# sourceMappingURL=chunk-MUIPM26J.js.map
|
|
1235
|
+
//# sourceMappingURL=chunk-MUIPM26J.js.map
|