@kopexa/extension-table 17.0.45 → 17.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-SNJF4UW6.mjs → chunk-2L3HZWWG.mjs} +4 -4
- package/dist/{chunk-BAQU2YT5.mjs → chunk-3XEOCAHB.mjs} +1 -1
- package/dist/{chunk-FKOIW52J.mjs → chunk-5W5ARI64.mjs} +1 -1
- package/dist/{chunk-IMRHHVEF.mjs → chunk-BTJ3DCGC.mjs} +2 -2
- package/dist/chunk-DR2GZJH6.mjs +70 -0
- package/dist/chunk-GHOJLOCF.mjs +247 -0
- package/dist/chunk-HWVA6DOK.mjs +20 -0
- package/dist/{chunk-DF6ZMJLL.mjs → chunk-KLUH6EZS.mjs} +1 -1
- package/dist/chunk-KNOMCS6F.mjs +57 -0
- package/dist/{chunk-OPDSKEZR.mjs → chunk-LPHCE6EI.mjs} +16 -17
- package/dist/chunk-POJFNXG7.mjs +44 -0
- package/dist/chunk-QHD3QTD2.mjs +61 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +456 -714
- package/dist/index.mjs +15 -12
- package/dist/kit.js +454 -714
- package/dist/kit.mjs +12 -12
- package/dist/table/index.d.mts +3 -0
- package/dist/table/index.d.ts +3 -0
- package/dist/table/index.js +411 -595
- package/dist/table/index.mjs +12 -9
- package/dist/table/{utilities → lib}/col-style.js +1 -1
- package/dist/{chunk-NTWXQSW6.mjs → table/lib/col-style.mjs} +2 -2
- package/dist/table/{utilities → lib}/delete-table-when-all-cells-selected.js +3 -3
- package/dist/table/{utilities → lib}/delete-table-when-all-cells-selected.mjs +2 -2
- package/dist/table/{utilities → lib}/get-table-node-types.js +1 -1
- package/dist/table/{utilities → lib}/get-table-node-types.mjs +1 -1
- package/dist/table/{icons.js → lib/icons.js} +1 -1
- package/dist/{chunk-7NEAULTF.mjs → table/lib/icons.mjs} +2 -2
- package/dist/table/{utilities → lib}/insert-line-above-table-action.js +1 -1
- package/dist/table/{utilities → lib}/insert-line-above-table-action.mjs +1 -1
- package/dist/table/{utilities → lib}/insert-line-below-table-action.js +1 -1
- package/dist/table/{utilities → lib}/insert-line-below-table-action.mjs +1 -1
- package/dist/table/{utilities → lib}/is-cell-selection.js +1 -1
- package/dist/table/{utilities → lib}/is-cell-selection.mjs +1 -1
- package/dist/table/{table-controls.js → lib/table-controls.js} +2 -2
- package/dist/table/lib/table-controls.mjs +8 -0
- package/dist/table/table.js +407 -593
- package/dist/table/table.mjs +7 -7
- package/dist/table/views/table-column-menu.d.mts +11 -0
- package/dist/table/views/table-column-menu.d.ts +11 -0
- package/dist/table/views/table-column-menu.js +84 -0
- package/dist/table/views/table-column-menu.mjs +8 -0
- package/dist/table/views/table-node-view.d.mts +25 -0
- package/dist/table/views/table-node-view.d.ts +25 -0
- package/dist/table/views/table-node-view.js +370 -0
- package/dist/table/views/table-node-view.mjs +10 -0
- package/dist/table/views/table-row-menu.d.mts +11 -0
- package/dist/table/views/table-row-menu.d.ts +11 -0
- package/dist/table/views/table-row-menu.js +80 -0
- package/dist/table/views/table-row-menu.mjs +8 -0
- package/dist/table-cell.js +18 -64
- package/dist/table-cell.mjs +1 -1
- package/dist/table-header.js +17 -54
- package/dist/table-header.mjs +1 -1
- package/dist/table-row.js +10 -1
- package/dist/table-row.mjs +1 -1
- package/package.json +10 -11
- package/dist/chunk-6NY5XWR7.mjs +0 -11
- package/dist/chunk-74O2ORPO.mjs +0 -81
- package/dist/chunk-ARSGMUXM.mjs +0 -116
- package/dist/chunk-GMNNSVR3.mjs +0 -540
- package/dist/table/icons.mjs +0 -8
- package/dist/table/table-controls.mjs +0 -8
- package/dist/table/table-view.d.mts +0 -43
- package/dist/table/table-view.d.ts +0 -43
- package/dist/table/table-view.js +0 -610
- package/dist/table/table-view.mjs +0 -12
- package/dist/table/utilities/col-style.mjs +0 -8
- /package/dist/{chunk-YSUOVRY4.mjs → chunk-RPPUD4R5.mjs} +0 -0
- /package/dist/table/{utilities → lib}/col-style.d.mts +0 -0
- /package/dist/table/{utilities → lib}/col-style.d.ts +0 -0
- /package/dist/table/{utilities → lib}/delete-table-when-all-cells-selected.d.mts +0 -0
- /package/dist/table/{utilities → lib}/delete-table-when-all-cells-selected.d.ts +0 -0
- /package/dist/table/{utilities → lib}/get-table-node-types.d.mts +0 -0
- /package/dist/table/{utilities → lib}/get-table-node-types.d.ts +0 -0
- /package/dist/table/{icons.d.mts → lib/icons.d.mts} +0 -0
- /package/dist/table/{icons.d.ts → lib/icons.d.ts} +0 -0
- /package/dist/table/{utilities → lib}/insert-line-above-table-action.d.mts +0 -0
- /package/dist/table/{utilities → lib}/insert-line-above-table-action.d.ts +0 -0
- /package/dist/table/{utilities → lib}/insert-line-below-table-action.d.mts +0 -0
- /package/dist/table/{utilities → lib}/insert-line-below-table-action.d.ts +0 -0
- /package/dist/table/{utilities → lib}/is-cell-selection.d.mts +0 -0
- /package/dist/table/{utilities → lib}/is-cell-selection.d.ts +0 -0
- /package/dist/table/{table-controls.d.mts → lib/table-controls.d.mts} +0 -0
- /package/dist/table/{table-controls.d.ts → lib/table-controls.d.ts} +0 -0
package/dist/table/table.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
Table
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-LPHCE6EI.mjs";
|
|
5
|
+
import "../chunk-GHOJLOCF.mjs";
|
|
6
|
+
import "../chunk-KNOMCS6F.mjs";
|
|
7
|
+
import "../chunk-3XEOCAHB.mjs";
|
|
8
|
+
import "../chunk-KLUH6EZS.mjs";
|
|
9
|
+
import "../chunk-BTJ3DCGC.mjs";
|
|
10
|
+
import "../chunk-QHD3QTD2.mjs";
|
|
11
11
|
import "../chunk-WKV76XOR.mjs";
|
|
12
12
|
export {
|
|
13
13
|
Table
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Editor } from '@tiptap/core';
|
|
3
|
+
|
|
4
|
+
interface TableColumnMenuProps {
|
|
5
|
+
editor: Editor;
|
|
6
|
+
cellPos?: number;
|
|
7
|
+
style?: React.CSSProperties;
|
|
8
|
+
}
|
|
9
|
+
declare function TableColumnMenu({ editor, cellPos, style, }: TableColumnMenuProps): react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { TableColumnMenu };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Editor } from '@tiptap/core';
|
|
3
|
+
|
|
4
|
+
interface TableColumnMenuProps {
|
|
5
|
+
editor: Editor;
|
|
6
|
+
cellPos?: number;
|
|
7
|
+
style?: React.CSSProperties;
|
|
8
|
+
}
|
|
9
|
+
declare function TableColumnMenu({ editor, cellPos, style, }: TableColumnMenuProps): react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { TableColumnMenu };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/table/views/table-column-menu.tsx
|
|
22
|
+
var table_column_menu_exports = {};
|
|
23
|
+
__export(table_column_menu_exports, {
|
|
24
|
+
TableColumnMenu: () => TableColumnMenu
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(table_column_menu_exports);
|
|
27
|
+
var import_dropdown_menu = require("@kopexa/dropdown-menu");
|
|
28
|
+
var import_tables = require("@tiptap/pm/tables");
|
|
29
|
+
var import_react = require("react");
|
|
30
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
31
|
+
function TableColumnMenu({
|
|
32
|
+
editor,
|
|
33
|
+
cellPos,
|
|
34
|
+
style
|
|
35
|
+
}) {
|
|
36
|
+
const [open, setOpen] = (0, import_react.useState)(false);
|
|
37
|
+
const chainAtCell = (0, import_react.useCallback)(() => {
|
|
38
|
+
const chain = editor.chain().focus();
|
|
39
|
+
if (cellPos != null) {
|
|
40
|
+
return chain.setTextSelection(cellPos + 1);
|
|
41
|
+
}
|
|
42
|
+
return chain;
|
|
43
|
+
}, [editor, cellPos]);
|
|
44
|
+
const handleToggleHeader = (0, import_react.useCallback)(() => {
|
|
45
|
+
chainAtCell().command(({ state, dispatch }) => (0, import_tables.toggleHeaderColumn)(state, dispatch)).run();
|
|
46
|
+
setOpen(false);
|
|
47
|
+
}, [chainAtCell]);
|
|
48
|
+
const handleAddBefore = (0, import_react.useCallback)(() => {
|
|
49
|
+
chainAtCell().addColumnBefore().run();
|
|
50
|
+
setOpen(false);
|
|
51
|
+
}, [chainAtCell]);
|
|
52
|
+
const handleAddAfter = (0, import_react.useCallback)(() => {
|
|
53
|
+
chainAtCell().addColumnAfter().run();
|
|
54
|
+
setOpen(false);
|
|
55
|
+
}, [chainAtCell]);
|
|
56
|
+
const handleDelete = (0, import_react.useCallback)(() => {
|
|
57
|
+
chainAtCell().deleteColumn().run();
|
|
58
|
+
setOpen(false);
|
|
59
|
+
}, [chainAtCell]);
|
|
60
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
61
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
62
|
+
"button",
|
|
63
|
+
{
|
|
64
|
+
type: "button",
|
|
65
|
+
className: "columns-control-div",
|
|
66
|
+
"aria-label": "Column actions",
|
|
67
|
+
style
|
|
68
|
+
}
|
|
69
|
+
) }),
|
|
70
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Content, { children: [
|
|
71
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Group, { children: [
|
|
72
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleToggleHeader, children: "Toggle header column" }),
|
|
73
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddBefore, children: "Insert column before" }),
|
|
74
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddAfter, children: "Insert column after" })
|
|
75
|
+
] }),
|
|
76
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Separator, {}),
|
|
77
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { variant: "destructive", onSelect: handleDelete, children: "Delete column" })
|
|
78
|
+
] })
|
|
79
|
+
] });
|
|
80
|
+
}
|
|
81
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
82
|
+
0 && (module.exports = {
|
|
83
|
+
TableColumnMenu
|
|
84
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { NodeViewProps } from '@tiptap/react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* React-based Table NodeView
|
|
6
|
+
*
|
|
7
|
+
* Replaces the old imperative JSX-DOM TableView with a React component.
|
|
8
|
+
* Handles:
|
|
9
|
+
* - Column width management via colgroup (for columnResizing plugin)
|
|
10
|
+
* - Column/row selection controls (via table-controls plugin decorations)
|
|
11
|
+
* - Hover-based add column/row bar buttons on table edges
|
|
12
|
+
*
|
|
13
|
+
* DOM structure:
|
|
14
|
+
* NodeViewWrapper.table-node-view (position: relative, no overflow)
|
|
15
|
+
* ├── div.table-controls (absolute, not clipped)
|
|
16
|
+
* │ ├── div.rows-control → TableRowMenu
|
|
17
|
+
* │ └── div.columns-control → TableColumnMenu
|
|
18
|
+
* ├── div.table-wrapper (overflow-x: auto, scrollable)
|
|
19
|
+
* │ └── <table> (NodeViewContent)
|
|
20
|
+
* ├── div add-column-bar (absolute, right edge)
|
|
21
|
+
* └── div add-row-bar (absolute, bottom edge)
|
|
22
|
+
*/
|
|
23
|
+
declare function TableNodeView({ editor, node, decorations, getPos, }: NodeViewProps): react_jsx_runtime.JSX.Element;
|
|
24
|
+
|
|
25
|
+
export { TableNodeView };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { NodeViewProps } from '@tiptap/react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* React-based Table NodeView
|
|
6
|
+
*
|
|
7
|
+
* Replaces the old imperative JSX-DOM TableView with a React component.
|
|
8
|
+
* Handles:
|
|
9
|
+
* - Column width management via colgroup (for columnResizing plugin)
|
|
10
|
+
* - Column/row selection controls (via table-controls plugin decorations)
|
|
11
|
+
* - Hover-based add column/row bar buttons on table edges
|
|
12
|
+
*
|
|
13
|
+
* DOM structure:
|
|
14
|
+
* NodeViewWrapper.table-node-view (position: relative, no overflow)
|
|
15
|
+
* ├── div.table-controls (absolute, not clipped)
|
|
16
|
+
* │ ├── div.rows-control → TableRowMenu
|
|
17
|
+
* │ └── div.columns-control → TableColumnMenu
|
|
18
|
+
* ├── div.table-wrapper (overflow-x: auto, scrollable)
|
|
19
|
+
* │ └── <table> (NodeViewContent)
|
|
20
|
+
* ├── div add-column-bar (absolute, right edge)
|
|
21
|
+
* └── div add-row-bar (absolute, bottom edge)
|
|
22
|
+
*/
|
|
23
|
+
declare function TableNodeView({ editor, node, decorations, getPos, }: NodeViewProps): react_jsx_runtime.JSX.Element;
|
|
24
|
+
|
|
25
|
+
export { TableNodeView };
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/table/views/table-node-view.tsx
|
|
22
|
+
var table_node_view_exports = {};
|
|
23
|
+
__export(table_node_view_exports, {
|
|
24
|
+
TableNodeView: () => TableNodeView
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(table_node_view_exports);
|
|
27
|
+
var import_tables3 = require("@tiptap/pm/tables");
|
|
28
|
+
var import_react3 = require("@tiptap/react");
|
|
29
|
+
var import_react4 = require("react");
|
|
30
|
+
|
|
31
|
+
// src/table/views/table-column-menu.tsx
|
|
32
|
+
var import_dropdown_menu = require("@kopexa/dropdown-menu");
|
|
33
|
+
var import_tables = require("@tiptap/pm/tables");
|
|
34
|
+
var import_react = require("react");
|
|
35
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
+
function TableColumnMenu({
|
|
37
|
+
editor,
|
|
38
|
+
cellPos,
|
|
39
|
+
style
|
|
40
|
+
}) {
|
|
41
|
+
const [open, setOpen] = (0, import_react.useState)(false);
|
|
42
|
+
const chainAtCell = (0, import_react.useCallback)(() => {
|
|
43
|
+
const chain = editor.chain().focus();
|
|
44
|
+
if (cellPos != null) {
|
|
45
|
+
return chain.setTextSelection(cellPos + 1);
|
|
46
|
+
}
|
|
47
|
+
return chain;
|
|
48
|
+
}, [editor, cellPos]);
|
|
49
|
+
const handleToggleHeader = (0, import_react.useCallback)(() => {
|
|
50
|
+
chainAtCell().command(({ state, dispatch }) => (0, import_tables.toggleHeaderColumn)(state, dispatch)).run();
|
|
51
|
+
setOpen(false);
|
|
52
|
+
}, [chainAtCell]);
|
|
53
|
+
const handleAddBefore = (0, import_react.useCallback)(() => {
|
|
54
|
+
chainAtCell().addColumnBefore().run();
|
|
55
|
+
setOpen(false);
|
|
56
|
+
}, [chainAtCell]);
|
|
57
|
+
const handleAddAfter = (0, import_react.useCallback)(() => {
|
|
58
|
+
chainAtCell().addColumnAfter().run();
|
|
59
|
+
setOpen(false);
|
|
60
|
+
}, [chainAtCell]);
|
|
61
|
+
const handleDelete = (0, import_react.useCallback)(() => {
|
|
62
|
+
chainAtCell().deleteColumn().run();
|
|
63
|
+
setOpen(false);
|
|
64
|
+
}, [chainAtCell]);
|
|
65
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
66
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
67
|
+
"button",
|
|
68
|
+
{
|
|
69
|
+
type: "button",
|
|
70
|
+
className: "columns-control-div",
|
|
71
|
+
"aria-label": "Column actions",
|
|
72
|
+
style
|
|
73
|
+
}
|
|
74
|
+
) }),
|
|
75
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Content, { children: [
|
|
76
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Group, { children: [
|
|
77
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleToggleHeader, children: "Toggle header column" }),
|
|
78
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddBefore, children: "Insert column before" }),
|
|
79
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddAfter, children: "Insert column after" })
|
|
80
|
+
] }),
|
|
81
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Separator, {}),
|
|
82
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { variant: "destructive", onSelect: handleDelete, children: "Delete column" })
|
|
83
|
+
] })
|
|
84
|
+
] });
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// src/table/views/table-row-menu.tsx
|
|
88
|
+
var import_dropdown_menu2 = require("@kopexa/dropdown-menu");
|
|
89
|
+
var import_tables2 = require("@tiptap/pm/tables");
|
|
90
|
+
var import_react2 = require("react");
|
|
91
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
92
|
+
function TableRowMenu({ editor, cellPos, style }) {
|
|
93
|
+
const [open, setOpen] = (0, import_react2.useState)(false);
|
|
94
|
+
const chainAtCell = (0, import_react2.useCallback)(() => {
|
|
95
|
+
const chain = editor.chain().focus();
|
|
96
|
+
if (cellPos != null) {
|
|
97
|
+
return chain.setTextSelection(cellPos + 1);
|
|
98
|
+
}
|
|
99
|
+
return chain;
|
|
100
|
+
}, [editor, cellPos]);
|
|
101
|
+
const handleToggleHeader = (0, import_react2.useCallback)(() => {
|
|
102
|
+
chainAtCell().command(({ state, dispatch }) => (0, import_tables2.toggleHeaderRow)(state, dispatch)).run();
|
|
103
|
+
setOpen(false);
|
|
104
|
+
}, [chainAtCell]);
|
|
105
|
+
const handleAddAbove = (0, import_react2.useCallback)(() => {
|
|
106
|
+
chainAtCell().addRowBefore().run();
|
|
107
|
+
setOpen(false);
|
|
108
|
+
}, [chainAtCell]);
|
|
109
|
+
const handleAddBelow = (0, import_react2.useCallback)(() => {
|
|
110
|
+
chainAtCell().addRowAfter().run();
|
|
111
|
+
setOpen(false);
|
|
112
|
+
}, [chainAtCell]);
|
|
113
|
+
const handleDelete = (0, import_react2.useCallback)(() => {
|
|
114
|
+
chainAtCell().deleteRow().run();
|
|
115
|
+
setOpen(false);
|
|
116
|
+
}, [chainAtCell]);
|
|
117
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dropdown_menu2.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
118
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
119
|
+
"button",
|
|
120
|
+
{
|
|
121
|
+
type: "button",
|
|
122
|
+
className: "rows-control-div",
|
|
123
|
+
"aria-label": "Row actions",
|
|
124
|
+
style
|
|
125
|
+
}
|
|
126
|
+
) }),
|
|
127
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dropdown_menu2.DropdownMenu.Content, { children: [
|
|
128
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dropdown_menu2.DropdownMenu.Group, { children: [
|
|
129
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { onSelect: handleToggleHeader, children: "Toggle header row" }),
|
|
130
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { onSelect: handleAddAbove, children: "Insert row above" }),
|
|
131
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { onSelect: handleAddBelow, children: "Insert row below" })
|
|
132
|
+
] }),
|
|
133
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Separator, {}),
|
|
134
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { variant: "destructive", onSelect: handleDelete, children: "Delete row" })
|
|
135
|
+
] })
|
|
136
|
+
] });
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// src/table/views/table-node-view.tsx
|
|
140
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
141
|
+
function extractHoverInfo(decorations) {
|
|
142
|
+
const info = {};
|
|
143
|
+
for (const dec of decorations) {
|
|
144
|
+
const spec = dec.spec;
|
|
145
|
+
if ((spec == null ? void 0 : spec.hoveredCell) !== void 0)
|
|
146
|
+
info.hoveredCell = spec.hoveredCell;
|
|
147
|
+
if ((spec == null ? void 0 : spec.hoveredTable) !== void 0)
|
|
148
|
+
info.hoveredTable = spec.hoveredTable;
|
|
149
|
+
}
|
|
150
|
+
return info;
|
|
151
|
+
}
|
|
152
|
+
function TableNodeView({
|
|
153
|
+
editor,
|
|
154
|
+
node,
|
|
155
|
+
decorations,
|
|
156
|
+
getPos
|
|
157
|
+
}) {
|
|
158
|
+
const wrapperRef = (0, import_react4.useRef)(null);
|
|
159
|
+
const scrollRef = (0, import_react4.useRef)(null);
|
|
160
|
+
const isEditable = (0, import_react3.useEditorState)({
|
|
161
|
+
editor,
|
|
162
|
+
selector: ({ editor: e }) => {
|
|
163
|
+
var _a;
|
|
164
|
+
return (_a = e == null ? void 0 : e.isEditable) != null ? _a : false;
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
const cellMinWidth = (0, import_react4.useMemo)(() => {
|
|
168
|
+
var _a, _b, _c;
|
|
169
|
+
return (_c = (_b = (_a = editor.extensionManager.extensions.find((ext) => ext.name === "table")) == null ? void 0 : _a.options) == null ? void 0 : _b.cellMinWidth) != null ? _c : 100;
|
|
170
|
+
}, [editor]);
|
|
171
|
+
const map = (0, import_react4.useMemo)(() => import_tables3.TableMap.get(node), [node]);
|
|
172
|
+
const [isSideHovered, setIsSideHovered] = (0, import_react4.useState)(false);
|
|
173
|
+
const [isBottomHovered, setIsBottomHovered] = (0, import_react4.useState)(false);
|
|
174
|
+
const { hoveredTable, hoveredCell } = (0, import_react4.useMemo)(
|
|
175
|
+
() => extractHoverInfo(decorations),
|
|
176
|
+
[decorations]
|
|
177
|
+
);
|
|
178
|
+
const controlsDisabled = !hoveredTable || !hoveredCell;
|
|
179
|
+
(0, import_react4.useEffect)(() => {
|
|
180
|
+
var _a;
|
|
181
|
+
const table = (_a = scrollRef.current) == null ? void 0 : _a.querySelector("table");
|
|
182
|
+
if (!table) return;
|
|
183
|
+
let colgroup = table.querySelector("colgroup");
|
|
184
|
+
if (!colgroup) {
|
|
185
|
+
colgroup = document.createElement("colgroup");
|
|
186
|
+
table.insertBefore(colgroup, table.firstChild);
|
|
187
|
+
}
|
|
188
|
+
const width = map.width;
|
|
189
|
+
while (colgroup.children.length < width) {
|
|
190
|
+
colgroup.appendChild(document.createElement("col"));
|
|
191
|
+
}
|
|
192
|
+
while (colgroup.children.length > width) {
|
|
193
|
+
if (colgroup.lastChild) colgroup.removeChild(colgroup.lastChild);
|
|
194
|
+
}
|
|
195
|
+
(0, import_tables3.updateColumnsOnResize)(node, colgroup, table, cellMinWidth);
|
|
196
|
+
}, [node, map.width, cellMinWidth]);
|
|
197
|
+
const [controlPos, setControlPos] = (0, import_react4.useState)(null);
|
|
198
|
+
const updatePositions = (0, import_react4.useCallback)(() => {
|
|
199
|
+
if (!hoveredCell || !wrapperRef.current) {
|
|
200
|
+
setControlPos(null);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const cellDom = editor.view.nodeDOM(hoveredCell.pos);
|
|
204
|
+
if (!cellDom) {
|
|
205
|
+
setControlPos(null);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const wrapperRect = wrapperRef.current.getBoundingClientRect();
|
|
209
|
+
const cellRect = cellDom.getBoundingClientRect();
|
|
210
|
+
setControlPos({
|
|
211
|
+
columnLeft: cellRect.left - wrapperRect.left,
|
|
212
|
+
columnWidth: cellRect.width,
|
|
213
|
+
rowTop: cellRect.top - wrapperRect.top,
|
|
214
|
+
rowHeight: cellRect.height
|
|
215
|
+
});
|
|
216
|
+
}, [hoveredCell, editor.view]);
|
|
217
|
+
(0, import_react4.useEffect)(() => {
|
|
218
|
+
updatePositions();
|
|
219
|
+
const scrollEl = scrollRef.current;
|
|
220
|
+
if (!scrollEl) return;
|
|
221
|
+
scrollEl.addEventListener("scroll", updatePositions, { passive: true });
|
|
222
|
+
return () => scrollEl.removeEventListener("scroll", updatePositions);
|
|
223
|
+
}, [updatePositions]);
|
|
224
|
+
const handleMouseMove = (0, import_react4.useCallback)(
|
|
225
|
+
(e) => {
|
|
226
|
+
if (!isEditable) return;
|
|
227
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
228
|
+
const x = e.clientX - rect.left;
|
|
229
|
+
const y = e.clientY - rect.top;
|
|
230
|
+
const threshold = 50;
|
|
231
|
+
setIsSideHovered(x >= rect.width - threshold);
|
|
232
|
+
setIsBottomHovered(y >= rect.height - threshold);
|
|
233
|
+
},
|
|
234
|
+
[isEditable]
|
|
235
|
+
);
|
|
236
|
+
const handleMouseLeave = (0, import_react4.useCallback)((e) => {
|
|
237
|
+
const relatedTarget = e.relatedTarget;
|
|
238
|
+
const currentTarget = e.currentTarget;
|
|
239
|
+
if (relatedTarget instanceof Node && currentTarget instanceof Node && currentTarget.contains(relatedTarget)) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (wrapperRef.current && relatedTarget instanceof Node && wrapperRef.current.contains(relatedTarget)) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
setIsSideHovered(false);
|
|
246
|
+
setIsBottomHovered(false);
|
|
247
|
+
}, []);
|
|
248
|
+
const focusTable = (0, import_react4.useCallback)(() => {
|
|
249
|
+
const pos = getPos();
|
|
250
|
+
if (pos === void 0) return false;
|
|
251
|
+
try {
|
|
252
|
+
const resolvedPos = editor.state.doc.resolve(pos + 1);
|
|
253
|
+
const table = resolvedPos.node(1);
|
|
254
|
+
if ((table == null ? void 0 : table.type.name) === "table") {
|
|
255
|
+
let cellPos = pos + 1;
|
|
256
|
+
table.descendants((n, nodePos) => {
|
|
257
|
+
if (n.type.name === "tableCell" || n.type.name === "tableHeader") {
|
|
258
|
+
cellPos = pos + 1 + nodePos + 1;
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
return true;
|
|
262
|
+
});
|
|
263
|
+
editor.chain().focus().setTextSelection(cellPos).run();
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
} catch {
|
|
267
|
+
}
|
|
268
|
+
return false;
|
|
269
|
+
}, [editor, getPos]);
|
|
270
|
+
const handleAddColumn = (0, import_react4.useCallback)(() => {
|
|
271
|
+
if (focusTable()) {
|
|
272
|
+
editor.chain().addColumnAfter().run();
|
|
273
|
+
} else {
|
|
274
|
+
editor.chain().focus().addColumnAfter().run();
|
|
275
|
+
}
|
|
276
|
+
}, [editor, focusTable]);
|
|
277
|
+
const handleAddRow = (0, import_react4.useCallback)(() => {
|
|
278
|
+
if (focusTable()) {
|
|
279
|
+
editor.chain().addRowAfter().run();
|
|
280
|
+
} else {
|
|
281
|
+
editor.chain().focus().addRowAfter().run();
|
|
282
|
+
}
|
|
283
|
+
}, [editor, focusTable]);
|
|
284
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
285
|
+
import_react3.NodeViewWrapper,
|
|
286
|
+
{
|
|
287
|
+
ref: wrapperRef,
|
|
288
|
+
className: [
|
|
289
|
+
"table-node-view pr-6 pb-6",
|
|
290
|
+
controlsDisabled ? "controls--disabled" : ""
|
|
291
|
+
].join(" "),
|
|
292
|
+
onMouseEnter: handleMouseMove,
|
|
293
|
+
onMouseMove: handleMouseMove,
|
|
294
|
+
onMouseLeave: handleMouseLeave,
|
|
295
|
+
"data-type": "table",
|
|
296
|
+
children: [
|
|
297
|
+
isEditable && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "table-controls", contentEditable: false, children: [
|
|
298
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
299
|
+
"div",
|
|
300
|
+
{
|
|
301
|
+
className: "rows-control",
|
|
302
|
+
style: controlPos ? {
|
|
303
|
+
top: `${controlPos.rowTop}px`,
|
|
304
|
+
height: `${controlPos.rowHeight}px`
|
|
305
|
+
} : void 0,
|
|
306
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TableRowMenu, { editor, cellPos: hoveredCell == null ? void 0 : hoveredCell.pos })
|
|
307
|
+
}
|
|
308
|
+
),
|
|
309
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
310
|
+
"div",
|
|
311
|
+
{
|
|
312
|
+
className: "columns-control",
|
|
313
|
+
style: controlPos ? {
|
|
314
|
+
left: `${controlPos.columnLeft}px`,
|
|
315
|
+
width: `${controlPos.columnWidth}px`
|
|
316
|
+
} : void 0,
|
|
317
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TableColumnMenu, { editor, cellPos: hoveredCell == null ? void 0 : hoveredCell.pos })
|
|
318
|
+
}
|
|
319
|
+
)
|
|
320
|
+
] }),
|
|
321
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
322
|
+
"div",
|
|
323
|
+
{
|
|
324
|
+
ref: scrollRef,
|
|
325
|
+
className: "table-wrapper horizontal-scrollbar scrollbar-md",
|
|
326
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react3.NodeViewContent, { as: "table" })
|
|
327
|
+
}
|
|
328
|
+
),
|
|
329
|
+
isEditable && isSideHovered && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
330
|
+
"div",
|
|
331
|
+
{
|
|
332
|
+
className: "absolute -right-6 top-0 h-full flex items-center",
|
|
333
|
+
contentEditable: false,
|
|
334
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
335
|
+
"button",
|
|
336
|
+
{
|
|
337
|
+
type: "button",
|
|
338
|
+
className: "w-4 h-full hover:bg-accent cursor-pointer flex items-center justify-center rounded-sm transition-colors text-muted-foreground text-xs",
|
|
339
|
+
onClick: handleAddColumn,
|
|
340
|
+
"aria-label": "Add column",
|
|
341
|
+
children: "+"
|
|
342
|
+
}
|
|
343
|
+
)
|
|
344
|
+
}
|
|
345
|
+
),
|
|
346
|
+
isEditable && isBottomHovered && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
347
|
+
"div",
|
|
348
|
+
{
|
|
349
|
+
className: "absolute -bottom-6 left-0 w-full flex justify-center",
|
|
350
|
+
contentEditable: false,
|
|
351
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
352
|
+
"button",
|
|
353
|
+
{
|
|
354
|
+
type: "button",
|
|
355
|
+
className: "h-4 w-full hover:bg-accent cursor-pointer flex items-center justify-center rounded-sm transition-colors text-muted-foreground text-xs",
|
|
356
|
+
onClick: handleAddRow,
|
|
357
|
+
"aria-label": "Add row",
|
|
358
|
+
children: "+"
|
|
359
|
+
}
|
|
360
|
+
)
|
|
361
|
+
}
|
|
362
|
+
)
|
|
363
|
+
]
|
|
364
|
+
}
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
368
|
+
0 && (module.exports = {
|
|
369
|
+
TableNodeView
|
|
370
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Editor } from '@tiptap/core';
|
|
3
|
+
|
|
4
|
+
interface TableRowMenuProps {
|
|
5
|
+
editor: Editor;
|
|
6
|
+
cellPos?: number;
|
|
7
|
+
style?: React.CSSProperties;
|
|
8
|
+
}
|
|
9
|
+
declare function TableRowMenu({ editor, cellPos, style }: TableRowMenuProps): react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { TableRowMenu };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Editor } from '@tiptap/core';
|
|
3
|
+
|
|
4
|
+
interface TableRowMenuProps {
|
|
5
|
+
editor: Editor;
|
|
6
|
+
cellPos?: number;
|
|
7
|
+
style?: React.CSSProperties;
|
|
8
|
+
}
|
|
9
|
+
declare function TableRowMenu({ editor, cellPos, style }: TableRowMenuProps): react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { TableRowMenu };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/table/views/table-row-menu.tsx
|
|
22
|
+
var table_row_menu_exports = {};
|
|
23
|
+
__export(table_row_menu_exports, {
|
|
24
|
+
TableRowMenu: () => TableRowMenu
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(table_row_menu_exports);
|
|
27
|
+
var import_dropdown_menu = require("@kopexa/dropdown-menu");
|
|
28
|
+
var import_tables = require("@tiptap/pm/tables");
|
|
29
|
+
var import_react = require("react");
|
|
30
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
31
|
+
function TableRowMenu({ editor, cellPos, style }) {
|
|
32
|
+
const [open, setOpen] = (0, import_react.useState)(false);
|
|
33
|
+
const chainAtCell = (0, import_react.useCallback)(() => {
|
|
34
|
+
const chain = editor.chain().focus();
|
|
35
|
+
if (cellPos != null) {
|
|
36
|
+
return chain.setTextSelection(cellPos + 1);
|
|
37
|
+
}
|
|
38
|
+
return chain;
|
|
39
|
+
}, [editor, cellPos]);
|
|
40
|
+
const handleToggleHeader = (0, import_react.useCallback)(() => {
|
|
41
|
+
chainAtCell().command(({ state, dispatch }) => (0, import_tables.toggleHeaderRow)(state, dispatch)).run();
|
|
42
|
+
setOpen(false);
|
|
43
|
+
}, [chainAtCell]);
|
|
44
|
+
const handleAddAbove = (0, import_react.useCallback)(() => {
|
|
45
|
+
chainAtCell().addRowBefore().run();
|
|
46
|
+
setOpen(false);
|
|
47
|
+
}, [chainAtCell]);
|
|
48
|
+
const handleAddBelow = (0, import_react.useCallback)(() => {
|
|
49
|
+
chainAtCell().addRowAfter().run();
|
|
50
|
+
setOpen(false);
|
|
51
|
+
}, [chainAtCell]);
|
|
52
|
+
const handleDelete = (0, import_react.useCallback)(() => {
|
|
53
|
+
chainAtCell().deleteRow().run();
|
|
54
|
+
setOpen(false);
|
|
55
|
+
}, [chainAtCell]);
|
|
56
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
57
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
58
|
+
"button",
|
|
59
|
+
{
|
|
60
|
+
type: "button",
|
|
61
|
+
className: "rows-control-div",
|
|
62
|
+
"aria-label": "Row actions",
|
|
63
|
+
style
|
|
64
|
+
}
|
|
65
|
+
) }),
|
|
66
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Content, { children: [
|
|
67
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Group, { children: [
|
|
68
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleToggleHeader, children: "Toggle header row" }),
|
|
69
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddAbove, children: "Insert row above" }),
|
|
70
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddBelow, children: "Insert row below" })
|
|
71
|
+
] }),
|
|
72
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Separator, {}),
|
|
73
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { variant: "destructive", onSelect: handleDelete, children: "Delete row" })
|
|
74
|
+
] })
|
|
75
|
+
] });
|
|
76
|
+
}
|
|
77
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
78
|
+
0 && (module.exports = {
|
|
79
|
+
TableRowMenu
|
|
80
|
+
});
|