@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.
Files changed (87) hide show
  1. package/dist/{chunk-SNJF4UW6.mjs → chunk-2L3HZWWG.mjs} +4 -4
  2. package/dist/{chunk-BAQU2YT5.mjs → chunk-3XEOCAHB.mjs} +1 -1
  3. package/dist/{chunk-FKOIW52J.mjs → chunk-5W5ARI64.mjs} +1 -1
  4. package/dist/{chunk-IMRHHVEF.mjs → chunk-BTJ3DCGC.mjs} +2 -2
  5. package/dist/chunk-DR2GZJH6.mjs +70 -0
  6. package/dist/chunk-GHOJLOCF.mjs +247 -0
  7. package/dist/chunk-HWVA6DOK.mjs +20 -0
  8. package/dist/{chunk-DF6ZMJLL.mjs → chunk-KLUH6EZS.mjs} +1 -1
  9. package/dist/chunk-KNOMCS6F.mjs +57 -0
  10. package/dist/{chunk-OPDSKEZR.mjs → chunk-LPHCE6EI.mjs} +16 -17
  11. package/dist/chunk-POJFNXG7.mjs +44 -0
  12. package/dist/chunk-QHD3QTD2.mjs +61 -0
  13. package/dist/index.d.mts +2 -0
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.js +456 -714
  16. package/dist/index.mjs +15 -12
  17. package/dist/kit.js +454 -714
  18. package/dist/kit.mjs +12 -12
  19. package/dist/table/index.d.mts +3 -0
  20. package/dist/table/index.d.ts +3 -0
  21. package/dist/table/index.js +411 -595
  22. package/dist/table/index.mjs +12 -9
  23. package/dist/table/{utilities → lib}/col-style.js +1 -1
  24. package/dist/{chunk-NTWXQSW6.mjs → table/lib/col-style.mjs} +2 -2
  25. package/dist/table/{utilities → lib}/delete-table-when-all-cells-selected.js +3 -3
  26. package/dist/table/{utilities → lib}/delete-table-when-all-cells-selected.mjs +2 -2
  27. package/dist/table/{utilities → lib}/get-table-node-types.js +1 -1
  28. package/dist/table/{utilities → lib}/get-table-node-types.mjs +1 -1
  29. package/dist/table/{icons.js → lib/icons.js} +1 -1
  30. package/dist/{chunk-7NEAULTF.mjs → table/lib/icons.mjs} +2 -2
  31. package/dist/table/{utilities → lib}/insert-line-above-table-action.js +1 -1
  32. package/dist/table/{utilities → lib}/insert-line-above-table-action.mjs +1 -1
  33. package/dist/table/{utilities → lib}/insert-line-below-table-action.js +1 -1
  34. package/dist/table/{utilities → lib}/insert-line-below-table-action.mjs +1 -1
  35. package/dist/table/{utilities → lib}/is-cell-selection.js +1 -1
  36. package/dist/table/{utilities → lib}/is-cell-selection.mjs +1 -1
  37. package/dist/table/{table-controls.js → lib/table-controls.js} +2 -2
  38. package/dist/table/lib/table-controls.mjs +8 -0
  39. package/dist/table/table.js +407 -593
  40. package/dist/table/table.mjs +7 -7
  41. package/dist/table/views/table-column-menu.d.mts +11 -0
  42. package/dist/table/views/table-column-menu.d.ts +11 -0
  43. package/dist/table/views/table-column-menu.js +84 -0
  44. package/dist/table/views/table-column-menu.mjs +8 -0
  45. package/dist/table/views/table-node-view.d.mts +25 -0
  46. package/dist/table/views/table-node-view.d.ts +25 -0
  47. package/dist/table/views/table-node-view.js +370 -0
  48. package/dist/table/views/table-node-view.mjs +10 -0
  49. package/dist/table/views/table-row-menu.d.mts +11 -0
  50. package/dist/table/views/table-row-menu.d.ts +11 -0
  51. package/dist/table/views/table-row-menu.js +80 -0
  52. package/dist/table/views/table-row-menu.mjs +8 -0
  53. package/dist/table-cell.js +18 -64
  54. package/dist/table-cell.mjs +1 -1
  55. package/dist/table-header.js +17 -54
  56. package/dist/table-header.mjs +1 -1
  57. package/dist/table-row.js +10 -1
  58. package/dist/table-row.mjs +1 -1
  59. package/package.json +10 -11
  60. package/dist/chunk-6NY5XWR7.mjs +0 -11
  61. package/dist/chunk-74O2ORPO.mjs +0 -81
  62. package/dist/chunk-ARSGMUXM.mjs +0 -116
  63. package/dist/chunk-GMNNSVR3.mjs +0 -540
  64. package/dist/table/icons.mjs +0 -8
  65. package/dist/table/table-controls.mjs +0 -8
  66. package/dist/table/table-view.d.mts +0 -43
  67. package/dist/table/table-view.d.ts +0 -43
  68. package/dist/table/table-view.js +0 -610
  69. package/dist/table/table-view.mjs +0 -12
  70. package/dist/table/utilities/col-style.mjs +0 -8
  71. /package/dist/{chunk-YSUOVRY4.mjs → chunk-RPPUD4R5.mjs} +0 -0
  72. /package/dist/table/{utilities → lib}/col-style.d.mts +0 -0
  73. /package/dist/table/{utilities → lib}/col-style.d.ts +0 -0
  74. /package/dist/table/{utilities → lib}/delete-table-when-all-cells-selected.d.mts +0 -0
  75. /package/dist/table/{utilities → lib}/delete-table-when-all-cells-selected.d.ts +0 -0
  76. /package/dist/table/{utilities → lib}/get-table-node-types.d.mts +0 -0
  77. /package/dist/table/{utilities → lib}/get-table-node-types.d.ts +0 -0
  78. /package/dist/table/{icons.d.mts → lib/icons.d.mts} +0 -0
  79. /package/dist/table/{icons.d.ts → lib/icons.d.ts} +0 -0
  80. /package/dist/table/{utilities → lib}/insert-line-above-table-action.d.mts +0 -0
  81. /package/dist/table/{utilities → lib}/insert-line-above-table-action.d.ts +0 -0
  82. /package/dist/table/{utilities → lib}/insert-line-below-table-action.d.mts +0 -0
  83. /package/dist/table/{utilities → lib}/insert-line-below-table-action.d.ts +0 -0
  84. /package/dist/table/{utilities → lib}/is-cell-selection.d.mts +0 -0
  85. /package/dist/table/{utilities → lib}/is-cell-selection.d.ts +0 -0
  86. /package/dist/table/{table-controls.d.mts → lib/table-controls.d.mts} +0 -0
  87. /package/dist/table/{table-controls.d.ts → lib/table-controls.d.ts} +0 -0
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import {
3
3
  Table
4
- } from "../chunk-OPDSKEZR.mjs";
5
- import "../chunk-GMNNSVR3.mjs";
6
- import "../chunk-NTWXQSW6.mjs";
7
- import "../chunk-BAQU2YT5.mjs";
8
- import "../chunk-DF6ZMJLL.mjs";
9
- import "../chunk-7NEAULTF.mjs";
10
- import "../chunk-IMRHHVEF.mjs";
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,8 @@
1
+ "use client";
2
+ import {
3
+ TableColumnMenu
4
+ } from "../../chunk-QHD3QTD2.mjs";
5
+ import "../../chunk-WKV76XOR.mjs";
6
+ export {
7
+ TableColumnMenu
8
+ };
@@ -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,10 @@
1
+ "use client";
2
+ import {
3
+ TableNodeView
4
+ } from "../../chunk-GHOJLOCF.mjs";
5
+ import "../../chunk-KNOMCS6F.mjs";
6
+ import "../../chunk-QHD3QTD2.mjs";
7
+ import "../../chunk-WKV76XOR.mjs";
8
+ export {
9
+ TableNodeView
10
+ };
@@ -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
+ });