@kopexa/extension-table 17.0.46 → 17.1.0

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 (209) hide show
  1. package/dist/chunk-2NBDRVYL.mjs +428 -0
  2. package/dist/chunk-3SWV7BGP.mjs +638 -0
  3. package/dist/chunk-4QSZXHZO.mjs +276 -0
  4. package/dist/chunk-5B5XIL2G.mjs +457 -0
  5. package/dist/chunk-62B2LU2Q.mjs +603 -0
  6. package/dist/chunk-6FHFDGJO.mjs +251 -0
  7. package/dist/chunk-CD62W5C3.mjs +165 -0
  8. package/dist/chunk-CN73TYHV.mjs +190 -0
  9. package/dist/chunk-CPDSPBS6.mjs +276 -0
  10. package/dist/chunk-E7W2KRZG.mjs +49 -0
  11. package/dist/chunk-G6GHC2WO.mjs +276 -0
  12. package/dist/chunk-GBTQVIN5.mjs +174 -0
  13. package/dist/chunk-GDEXPEW5.mjs +52 -0
  14. package/dist/chunk-GQLZBIWF.mjs +198 -0
  15. package/dist/chunk-IRJ6RAVQ.mjs +116 -0
  16. package/dist/chunk-J4VOSZCZ.mjs +59 -0
  17. package/dist/chunk-KIYFW7MP.mjs +122 -0
  18. package/dist/chunk-KTRZVXJC.mjs +306 -0
  19. package/dist/chunk-LUA32VH4.mjs +35 -0
  20. package/dist/{chunk-2L3HZWWG.mjs → chunk-MB52MZQ4.mjs} +7 -8
  21. package/dist/chunk-PTX5UYV6.mjs +10 -0
  22. package/dist/chunk-TEGO6KUS.mjs +96 -0
  23. package/dist/chunk-VIBVRWS4.mjs +197 -0
  24. package/dist/chunk-VQV757EG.mjs +113 -0
  25. package/dist/chunk-XRNQXADK.mjs +149 -0
  26. package/dist/chunk-ZVPJDJBO.mjs +134 -0
  27. package/dist/{kit.d.mts → extensions/kit.d.mts} +1 -3
  28. package/dist/{kit.d.ts → extensions/kit.d.ts} +1 -3
  29. package/dist/extensions/kit.js +1041 -0
  30. package/dist/extensions/kit.mjs +15 -0
  31. package/dist/extensions/table-cell.d.mts +6 -0
  32. package/dist/extensions/table-cell.d.ts +6 -0
  33. package/dist/extensions/table-cell.js +70 -0
  34. package/dist/extensions/table-cell.mjs +8 -0
  35. package/dist/extensions/table-handle-plugin.d.mts +46 -0
  36. package/dist/extensions/table-handle-plugin.d.ts +46 -0
  37. package/dist/extensions/table-handle-plugin.js +1100 -0
  38. package/dist/extensions/table-handle-plugin.mjs +18 -0
  39. package/dist/extensions/table-handle.d.mts +19 -0
  40. package/dist/extensions/table-handle.d.ts +19 -0
  41. package/dist/extensions/table-handle.js +865 -0
  42. package/dist/extensions/table-handle.mjs +11 -0
  43. package/dist/{table → extensions}/table.d.mts +2 -2
  44. package/dist/{table → extensions}/table.d.ts +2 -2
  45. package/dist/extensions/table.js +138 -0
  46. package/dist/extensions/table.mjs +9 -0
  47. package/dist/hooks/use-resize-overlay.d.mts +5 -0
  48. package/dist/hooks/use-resize-overlay.d.ts +5 -0
  49. package/dist/hooks/use-resize-overlay.js +83 -0
  50. package/dist/hooks/use-resize-overlay.mjs +9 -0
  51. package/dist/hooks/use-table-add-row-column.d.mts +57 -0
  52. package/dist/hooks/use-table-add-row-column.d.ts +57 -0
  53. package/dist/hooks/use-table-add-row-column.js +551 -0
  54. package/dist/hooks/use-table-add-row-column.mjs +11 -0
  55. package/dist/hooks/use-table-align-cell.d.mts +148 -0
  56. package/dist/hooks/use-table-align-cell.d.ts +148 -0
  57. package/dist/hooks/use-table-align-cell.js +655 -0
  58. package/dist/hooks/use-table-align-cell.mjs +13 -0
  59. package/dist/hooks/use-table-clear-row-column-content.d.mts +103 -0
  60. package/dist/hooks/use-table-clear-row-column-content.d.ts +103 -0
  61. package/dist/hooks/use-table-clear-row-column-content.js +681 -0
  62. package/dist/hooks/use-table-clear-row-column-content.mjs +11 -0
  63. package/dist/hooks/use-table-delete-row-column.d.mts +87 -0
  64. package/dist/hooks/use-table-delete-row-column.d.ts +87 -0
  65. package/dist/hooks/use-table-delete-row-column.js +459 -0
  66. package/dist/hooks/use-table-delete-row-column.mjs +11 -0
  67. package/dist/hooks/use-table-duplicate-row-column.d.mts +49 -0
  68. package/dist/hooks/use-table-duplicate-row-column.d.ts +49 -0
  69. package/dist/hooks/use-table-duplicate-row-column.js +758 -0
  70. package/dist/hooks/use-table-duplicate-row-column.mjs +11 -0
  71. package/dist/hooks/use-table-handle-positioning.d.mts +42 -0
  72. package/dist/hooks/use-table-handle-positioning.d.ts +42 -0
  73. package/dist/hooks/use-table-handle-positioning.js +190 -0
  74. package/dist/hooks/use-table-handle-positioning.mjs +10 -0
  75. package/dist/hooks/use-table-handle-state.d.mts +28 -0
  76. package/dist/hooks/use-table-handle-state.d.ts +28 -0
  77. package/dist/hooks/use-table-handle-state.js +76 -0
  78. package/dist/hooks/use-table-handle-state.mjs +9 -0
  79. package/dist/hooks/use-table-header-row-column.d.mts +58 -0
  80. package/dist/hooks/use-table-header-row-column.d.ts +58 -0
  81. package/dist/hooks/use-table-header-row-column.js +603 -0
  82. package/dist/hooks/use-table-header-row-column.mjs +13 -0
  83. package/dist/hooks/use-table-merge-split-cell.d.mts +123 -0
  84. package/dist/hooks/use-table-merge-split-cell.d.ts +123 -0
  85. package/dist/hooks/use-table-merge-split-cell.js +331 -0
  86. package/dist/hooks/use-table-merge-split-cell.mjs +12 -0
  87. package/dist/hooks/use-table-move-row-column.d.mts +101 -0
  88. package/dist/hooks/use-table-move-row-column.d.ts +101 -0
  89. package/dist/hooks/use-table-move-row-column.js +621 -0
  90. package/dist/hooks/use-table-move-row-column.mjs +13 -0
  91. package/dist/hooks/use-table-sort-row-column.d.mts +118 -0
  92. package/dist/hooks/use-table-sort-row-column.d.ts +118 -0
  93. package/dist/hooks/use-table-sort-row-column.js +623 -0
  94. package/dist/hooks/use-table-sort-row-column.mjs +13 -0
  95. package/dist/index.d.mts +17 -6
  96. package/dist/index.d.ts +17 -6
  97. package/dist/index.js +4947 -660
  98. package/dist/index.mjs +43 -21
  99. package/dist/lib/constants.d.mts +4 -0
  100. package/dist/lib/constants.d.ts +4 -0
  101. package/dist/{table/lib/is-cell-selection.js → lib/constants.js} +10 -10
  102. package/dist/lib/constants.mjs +10 -0
  103. package/dist/lib/create-image.d.mts +12 -0
  104. package/dist/lib/create-image.d.ts +12 -0
  105. package/dist/lib/create-image.js +221 -0
  106. package/dist/lib/create-image.mjs +8 -0
  107. package/dist/lib/table-utils.d.mts +263 -0
  108. package/dist/lib/table-utils.d.ts +263 -0
  109. package/dist/lib/table-utils.js +488 -0
  110. package/dist/lib/table-utils.mjs +40 -0
  111. package/dist/messages.d.mts +174 -0
  112. package/dist/messages.d.ts +174 -0
  113. package/dist/messages.js +213 -0
  114. package/dist/{table-row.mjs → messages.mjs} +3 -3
  115. package/dist/ui/table-alignment-menu.d.mts +25 -0
  116. package/dist/ui/table-alignment-menu.d.ts +25 -0
  117. package/dist/ui/table-alignment-menu.js +758 -0
  118. package/dist/ui/table-alignment-menu.mjs +14 -0
  119. package/dist/ui/table-cell-handle-menu.d.mts +12 -0
  120. package/dist/ui/table-cell-handle-menu.d.ts +12 -0
  121. package/dist/ui/table-cell-handle-menu.js +1317 -0
  122. package/dist/ui/table-cell-handle-menu.mjs +17 -0
  123. package/dist/ui/table-handle-menu.d.mts +23 -0
  124. package/dist/ui/table-handle-menu.d.ts +23 -0
  125. package/dist/ui/table-handle-menu.js +2598 -0
  126. package/dist/ui/table-handle-menu.mjs +21 -0
  127. package/dist/ui/table-handle.d.mts +48 -0
  128. package/dist/ui/table-handle.d.ts +48 -0
  129. package/dist/ui/table-handle.js +3126 -0
  130. package/dist/ui/table-handle.mjs +22 -0
  131. package/dist/ui/table-selection-overlay.d.mts +14 -0
  132. package/dist/ui/table-selection-overlay.d.ts +14 -0
  133. package/dist/ui/table-selection-overlay.js +553 -0
  134. package/dist/ui/table-selection-overlay.mjs +11 -0
  135. package/package.json +12 -7
  136. package/dist/chunk-3XEOCAHB.mjs +0 -41
  137. package/dist/chunk-5W5ARI64.mjs +0 -11
  138. package/dist/chunk-BTJ3DCGC.mjs +0 -113
  139. package/dist/chunk-DR2GZJH6.mjs +0 -70
  140. package/dist/chunk-GHOJLOCF.mjs +0 -247
  141. package/dist/chunk-HWVA6DOK.mjs +0 -20
  142. package/dist/chunk-KLUH6EZS.mjs +0 -40
  143. package/dist/chunk-KNOMCS6F.mjs +0 -57
  144. package/dist/chunk-LPHCE6EI.mjs +0 -92
  145. package/dist/chunk-POJFNXG7.mjs +0 -44
  146. package/dist/chunk-QHD3QTD2.mjs +0 -61
  147. package/dist/chunk-RPPUD4R5.mjs +0 -1
  148. package/dist/kit.js +0 -764
  149. package/dist/kit.mjs +0 -19
  150. package/dist/table/index.d.mts +0 -6
  151. package/dist/table/index.d.ts +0 -6
  152. package/dist/table/index.js +0 -625
  153. package/dist/table/index.mjs +0 -18
  154. package/dist/table/lib/col-style.d.mts +0 -3
  155. package/dist/table/lib/col-style.d.ts +0 -3
  156. package/dist/table/lib/col-style.js +0 -36
  157. package/dist/table/lib/col-style.mjs +0 -13
  158. package/dist/table/lib/delete-table-when-all-cells-selected.d.mts +0 -5
  159. package/dist/table/lib/delete-table-when-all-cells-selected.d.ts +0 -5
  160. package/dist/table/lib/delete-table-when-all-cells-selected.js +0 -66
  161. package/dist/table/lib/delete-table-when-all-cells-selected.mjs +0 -40
  162. package/dist/table/lib/get-table-node-types.d.mts +0 -7
  163. package/dist/table/lib/get-table-node-types.d.ts +0 -7
  164. package/dist/table/lib/get-table-node-types.js +0 -44
  165. package/dist/table/lib/get-table-node-types.mjs +0 -21
  166. package/dist/table/lib/icons.d.mts +0 -13
  167. package/dist/table/lib/icons.d.ts +0 -13
  168. package/dist/table/lib/icons.js +0 -81
  169. package/dist/table/lib/icons.mjs +0 -58
  170. package/dist/table/lib/insert-line-above-table-action.d.mts +0 -5
  171. package/dist/table/lib/insert-line-above-table-action.d.ts +0 -5
  172. package/dist/table/lib/insert-line-above-table-action.js +0 -64
  173. package/dist/table/lib/insert-line-above-table-action.mjs +0 -8
  174. package/dist/table/lib/insert-line-below-table-action.d.mts +0 -5
  175. package/dist/table/lib/insert-line-below-table-action.d.ts +0 -5
  176. package/dist/table/lib/insert-line-below-table-action.js +0 -63
  177. package/dist/table/lib/insert-line-below-table-action.mjs +0 -8
  178. package/dist/table/lib/is-cell-selection.d.mts +0 -5
  179. package/dist/table/lib/is-cell-selection.d.ts +0 -5
  180. package/dist/table/lib/is-cell-selection.mjs +0 -8
  181. package/dist/table/lib/table-controls.d.mts +0 -15
  182. package/dist/table/lib/table-controls.d.ts +0 -15
  183. package/dist/table/lib/table-controls.js +0 -131
  184. package/dist/table/lib/table-controls.mjs +0 -8
  185. package/dist/table/table.js +0 -621
  186. package/dist/table/table.mjs +0 -14
  187. package/dist/table/views/table-column-menu.d.mts +0 -11
  188. package/dist/table/views/table-column-menu.d.ts +0 -11
  189. package/dist/table/views/table-column-menu.js +0 -84
  190. package/dist/table/views/table-column-menu.mjs +0 -8
  191. package/dist/table/views/table-node-view.d.mts +0 -25
  192. package/dist/table/views/table-node-view.d.ts +0 -25
  193. package/dist/table/views/table-node-view.js +0 -370
  194. package/dist/table/views/table-node-view.mjs +0 -10
  195. package/dist/table/views/table-row-menu.d.mts +0 -11
  196. package/dist/table/views/table-row-menu.d.ts +0 -11
  197. package/dist/table/views/table-row-menu.js +0 -80
  198. package/dist/table/views/table-row-menu.mjs +0 -8
  199. package/dist/table-cell.d.mts +0 -8
  200. package/dist/table-cell.d.ts +0 -8
  201. package/dist/table-cell.js +0 -93
  202. package/dist/table-cell.mjs +0 -8
  203. package/dist/table-header.d.mts +0 -6
  204. package/dist/table-header.d.ts +0 -6
  205. package/dist/table-header.js +0 -67
  206. package/dist/table-header.mjs +0 -8
  207. package/dist/table-row.d.mts +0 -6
  208. package/dist/table-row.d.ts +0 -6
  209. package/dist/table-row.js +0 -43
@@ -1,621 +0,0 @@
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 __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
22
-
23
- // src/table/table.ts
24
- var table_exports = {};
25
- __export(table_exports, {
26
- Table: () => Table
27
- });
28
- module.exports = __toCommonJS(table_exports);
29
- var import_extension_table = require("@tiptap/extension-table");
30
- var import_tables4 = require("@tiptap/pm/tables");
31
- var import_react5 = require("@tiptap/react");
32
-
33
- // src/table/lib/insert-line-above-table-action.ts
34
- var import_editor_utils = require("@kopexa/editor-utils");
35
- var insertLineAboveTableAction = ({
36
- editor
37
- }) => {
38
- if (!editor.isActive("table")) return false;
39
- try {
40
- const { selection } = editor.state;
41
- const tableNode = (0, import_editor_utils.findParentNodeOfType)(selection, "table");
42
- if (!tableNode) return false;
43
- const tablePos = tableNode.pos;
44
- const firstRow = tableNode.node.child(0);
45
- const selectionPath = selection.$anchor.path;
46
- const selectionInFirstRow = selectionPath.includes(firstRow);
47
- if (!selectionInFirstRow) return false;
48
- if (tablePos === 0) {
49
- editor.chain().insertContentAt(tablePos, { type: "paragraph" }).run();
50
- editor.chain().setTextSelection(tablePos + 1).run();
51
- } else {
52
- const prevNodePos = tablePos - 1;
53
- if (prevNodePos <= 0) return false;
54
- const prevNode = editor.state.doc.nodeAt(prevNodePos - 1);
55
- if (prevNode && prevNode.type.name === "paragraph") {
56
- const endOfParagraphPos = tablePos - prevNode.nodeSize;
57
- editor.chain().setTextSelection(endOfParagraphPos).run();
58
- } else {
59
- return false;
60
- }
61
- }
62
- return true;
63
- } catch (e) {
64
- console.error("failed to insert line above table", e);
65
- return false;
66
- }
67
- };
68
-
69
- // src/table/lib/insert-line-below-table-action.ts
70
- var import_editor_utils2 = require("@kopexa/editor-utils");
71
- var insertLineBelowTableAction = ({
72
- editor
73
- }) => {
74
- if (!editor.isActive("table")) return false;
75
- try {
76
- const { selection } = editor.state;
77
- const tableNode = (0, import_editor_utils2.findParentNodeOfType)(selection, "table");
78
- if (!tableNode) return false;
79
- const tablePos = tableNode.pos;
80
- const table = tableNode.node;
81
- const rowCount = table.childCount;
82
- const lastRow = table.child(rowCount - 1);
83
- const selectionPath = selection.$anchor.path;
84
- const selectionInLastRow = selectionPath.includes(lastRow);
85
- if (!selectionInLastRow) return false;
86
- const nextNodePos = tablePos + table.nodeSize;
87
- const nextNode = editor.state.doc.nodeAt(nextNodePos);
88
- if (nextNode && nextNode.type.name === "paragraph") {
89
- const endOfParagraphPos = nextNodePos + nextNode.nodeSize - 1;
90
- editor.chain().setTextSelection(endOfParagraphPos).run();
91
- } else if (!nextNode) {
92
- editor.chain().insertContentAt(nextNodePos, { type: "paragraph" }).run();
93
- editor.chain().setTextSelection(nextNodePos + 1).run();
94
- } else {
95
- return false;
96
- }
97
- return true;
98
- } catch (e) {
99
- console.error("failed to insert line above table", e);
100
- return false;
101
- }
102
- };
103
-
104
- // src/table/lib/table-controls.ts
105
- var import_core = require("@tiptap/core");
106
- var import_state = require("@tiptap/pm/state");
107
- var import_view = require("@tiptap/pm/view");
108
- function tableControls() {
109
- const key = new import_state.PluginKey("tableControls");
110
- return new import_state.Plugin({
111
- key,
112
- state: {
113
- init() {
114
- return new TableControlsState(key);
115
- },
116
- apply(tr, prev) {
117
- return prev.apply(tr);
118
- }
119
- },
120
- props: {
121
- handleDOMEvents: {
122
- mousemove: (view, event) => {
123
- var _a;
124
- const pluginState = key.getState(view.state);
125
- if (!event.target.closest(".table-node-view") && pluginState.values.hoveredTable) {
126
- return view.dispatch(
127
- view.state.tr.setMeta(key, {
128
- setHoveredTable: null,
129
- setHoveredCell: null
130
- })
131
- );
132
- }
133
- const pos = view.posAtCoords({
134
- left: event.clientX,
135
- top: event.clientY
136
- });
137
- if (!pos || pos.pos < 0 || pos.pos > view.state.doc.content.size)
138
- return;
139
- const table = (0, import_core.findParentNode)((node) => node.type.name === "table")(
140
- import_state.TextSelection.create(view.state.doc, pos.pos)
141
- );
142
- const cell = (0, import_core.findParentNode)(
143
- (node) => node.type.name === "tableCell" || node.type.name === "tableHeader"
144
- )(import_state.TextSelection.create(view.state.doc, pos.pos));
145
- if (!table || !cell) return;
146
- if (((_a = pluginState.values.hoveredCell) == null ? void 0 : _a.pos) !== cell.pos) {
147
- return view.dispatch(
148
- view.state.tr.setMeta(key, {
149
- setHoveredTable: table,
150
- setHoveredCell: cell
151
- })
152
- );
153
- }
154
- }
155
- },
156
- decorations: (state) => {
157
- const pluginState = key.getState(state);
158
- if (!pluginState) {
159
- return null;
160
- }
161
- const { hoveredTable, hoveredCell } = pluginState.values;
162
- const docSize = state.doc.content.size;
163
- if (hoveredTable && hoveredCell && hoveredTable.pos < docSize && hoveredCell.pos < docSize) {
164
- const decorations = [
165
- import_view.Decoration.node(
166
- hoveredTable.pos,
167
- hoveredTable.pos + hoveredTable.node.nodeSize,
168
- {},
169
- {
170
- hoveredTable,
171
- hoveredCell
172
- }
173
- )
174
- ];
175
- return import_view.DecorationSet.create(state.doc, decorations);
176
- }
177
- return null;
178
- }
179
- }
180
- });
181
- }
182
- var TableControlsState = class {
183
- constructor(key, props = {}) {
184
- __publicField(this, "values");
185
- __publicField(this, "key");
186
- this.key = key;
187
- this.values = {
188
- hoveredTable: null,
189
- hoveredCell: null,
190
- ...props
191
- };
192
- }
193
- apply(tr) {
194
- const actions = tr.getMeta(this.key);
195
- if ((actions == null ? void 0 : actions.setHoveredTable) !== void 0) {
196
- this.values.hoveredTable = actions.setHoveredTable;
197
- }
198
- if ((actions == null ? void 0 : actions.setHoveredCell) !== void 0) {
199
- this.values.hoveredCell = actions.setHoveredCell;
200
- }
201
- return this;
202
- }
203
- };
204
-
205
- // src/table/views/table-node-view.tsx
206
- var import_tables3 = require("@tiptap/pm/tables");
207
- var import_react3 = require("@tiptap/react");
208
- var import_react4 = require("react");
209
-
210
- // src/table/views/table-column-menu.tsx
211
- var import_dropdown_menu = require("@kopexa/dropdown-menu");
212
- var import_tables = require("@tiptap/pm/tables");
213
- var import_react = require("react");
214
- var import_jsx_runtime = require("react/jsx-runtime");
215
- function TableColumnMenu({
216
- editor,
217
- cellPos,
218
- style
219
- }) {
220
- const [open, setOpen] = (0, import_react.useState)(false);
221
- const chainAtCell = (0, import_react.useCallback)(() => {
222
- const chain = editor.chain().focus();
223
- if (cellPos != null) {
224
- return chain.setTextSelection(cellPos + 1);
225
- }
226
- return chain;
227
- }, [editor, cellPos]);
228
- const handleToggleHeader = (0, import_react.useCallback)(() => {
229
- chainAtCell().command(({ state, dispatch }) => (0, import_tables.toggleHeaderColumn)(state, dispatch)).run();
230
- setOpen(false);
231
- }, [chainAtCell]);
232
- const handleAddBefore = (0, import_react.useCallback)(() => {
233
- chainAtCell().addColumnBefore().run();
234
- setOpen(false);
235
- }, [chainAtCell]);
236
- const handleAddAfter = (0, import_react.useCallback)(() => {
237
- chainAtCell().addColumnAfter().run();
238
- setOpen(false);
239
- }, [chainAtCell]);
240
- const handleDelete = (0, import_react.useCallback)(() => {
241
- chainAtCell().deleteColumn().run();
242
- setOpen(false);
243
- }, [chainAtCell]);
244
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
245
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
246
- "button",
247
- {
248
- type: "button",
249
- className: "columns-control-div",
250
- "aria-label": "Column actions",
251
- style
252
- }
253
- ) }),
254
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Content, { children: [
255
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Group, { children: [
256
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleToggleHeader, children: "Toggle header column" }),
257
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddBefore, children: "Insert column before" }),
258
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddAfter, children: "Insert column after" })
259
- ] }),
260
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Separator, {}),
261
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { variant: "destructive", onSelect: handleDelete, children: "Delete column" })
262
- ] })
263
- ] });
264
- }
265
-
266
- // src/table/views/table-row-menu.tsx
267
- var import_dropdown_menu2 = require("@kopexa/dropdown-menu");
268
- var import_tables2 = require("@tiptap/pm/tables");
269
- var import_react2 = require("react");
270
- var import_jsx_runtime2 = require("react/jsx-runtime");
271
- function TableRowMenu({ editor, cellPos, style }) {
272
- const [open, setOpen] = (0, import_react2.useState)(false);
273
- const chainAtCell = (0, import_react2.useCallback)(() => {
274
- const chain = editor.chain().focus();
275
- if (cellPos != null) {
276
- return chain.setTextSelection(cellPos + 1);
277
- }
278
- return chain;
279
- }, [editor, cellPos]);
280
- const handleToggleHeader = (0, import_react2.useCallback)(() => {
281
- chainAtCell().command(({ state, dispatch }) => (0, import_tables2.toggleHeaderRow)(state, dispatch)).run();
282
- setOpen(false);
283
- }, [chainAtCell]);
284
- const handleAddAbove = (0, import_react2.useCallback)(() => {
285
- chainAtCell().addRowBefore().run();
286
- setOpen(false);
287
- }, [chainAtCell]);
288
- const handleAddBelow = (0, import_react2.useCallback)(() => {
289
- chainAtCell().addRowAfter().run();
290
- setOpen(false);
291
- }, [chainAtCell]);
292
- const handleDelete = (0, import_react2.useCallback)(() => {
293
- chainAtCell().deleteRow().run();
294
- setOpen(false);
295
- }, [chainAtCell]);
296
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dropdown_menu2.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
297
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
298
- "button",
299
- {
300
- type: "button",
301
- className: "rows-control-div",
302
- "aria-label": "Row actions",
303
- style
304
- }
305
- ) }),
306
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dropdown_menu2.DropdownMenu.Content, { children: [
307
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dropdown_menu2.DropdownMenu.Group, { children: [
308
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { onSelect: handleToggleHeader, children: "Toggle header row" }),
309
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { onSelect: handleAddAbove, children: "Insert row above" }),
310
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { onSelect: handleAddBelow, children: "Insert row below" })
311
- ] }),
312
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Separator, {}),
313
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { variant: "destructive", onSelect: handleDelete, children: "Delete row" })
314
- ] })
315
- ] });
316
- }
317
-
318
- // src/table/views/table-node-view.tsx
319
- var import_jsx_runtime3 = require("react/jsx-runtime");
320
- function extractHoverInfo(decorations) {
321
- const info = {};
322
- for (const dec of decorations) {
323
- const spec = dec.spec;
324
- if ((spec == null ? void 0 : spec.hoveredCell) !== void 0)
325
- info.hoveredCell = spec.hoveredCell;
326
- if ((spec == null ? void 0 : spec.hoveredTable) !== void 0)
327
- info.hoveredTable = spec.hoveredTable;
328
- }
329
- return info;
330
- }
331
- function TableNodeView({
332
- editor,
333
- node,
334
- decorations,
335
- getPos
336
- }) {
337
- const wrapperRef = (0, import_react4.useRef)(null);
338
- const scrollRef = (0, import_react4.useRef)(null);
339
- const isEditable = (0, import_react3.useEditorState)({
340
- editor,
341
- selector: ({ editor: e }) => {
342
- var _a;
343
- return (_a = e == null ? void 0 : e.isEditable) != null ? _a : false;
344
- }
345
- });
346
- const cellMinWidth = (0, import_react4.useMemo)(() => {
347
- var _a, _b, _c;
348
- 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;
349
- }, [editor]);
350
- const map = (0, import_react4.useMemo)(() => import_tables3.TableMap.get(node), [node]);
351
- const [isSideHovered, setIsSideHovered] = (0, import_react4.useState)(false);
352
- const [isBottomHovered, setIsBottomHovered] = (0, import_react4.useState)(false);
353
- const { hoveredTable, hoveredCell } = (0, import_react4.useMemo)(
354
- () => extractHoverInfo(decorations),
355
- [decorations]
356
- );
357
- const controlsDisabled = !hoveredTable || !hoveredCell;
358
- (0, import_react4.useEffect)(() => {
359
- var _a;
360
- const table = (_a = scrollRef.current) == null ? void 0 : _a.querySelector("table");
361
- if (!table) return;
362
- let colgroup = table.querySelector("colgroup");
363
- if (!colgroup) {
364
- colgroup = document.createElement("colgroup");
365
- table.insertBefore(colgroup, table.firstChild);
366
- }
367
- const width = map.width;
368
- while (colgroup.children.length < width) {
369
- colgroup.appendChild(document.createElement("col"));
370
- }
371
- while (colgroup.children.length > width) {
372
- if (colgroup.lastChild) colgroup.removeChild(colgroup.lastChild);
373
- }
374
- (0, import_tables3.updateColumnsOnResize)(node, colgroup, table, cellMinWidth);
375
- }, [node, map.width, cellMinWidth]);
376
- const [controlPos, setControlPos] = (0, import_react4.useState)(null);
377
- const updatePositions = (0, import_react4.useCallback)(() => {
378
- if (!hoveredCell || !wrapperRef.current) {
379
- setControlPos(null);
380
- return;
381
- }
382
- const cellDom = editor.view.nodeDOM(hoveredCell.pos);
383
- if (!cellDom) {
384
- setControlPos(null);
385
- return;
386
- }
387
- const wrapperRect = wrapperRef.current.getBoundingClientRect();
388
- const cellRect = cellDom.getBoundingClientRect();
389
- setControlPos({
390
- columnLeft: cellRect.left - wrapperRect.left,
391
- columnWidth: cellRect.width,
392
- rowTop: cellRect.top - wrapperRect.top,
393
- rowHeight: cellRect.height
394
- });
395
- }, [hoveredCell, editor.view]);
396
- (0, import_react4.useEffect)(() => {
397
- updatePositions();
398
- const scrollEl = scrollRef.current;
399
- if (!scrollEl) return;
400
- scrollEl.addEventListener("scroll", updatePositions, { passive: true });
401
- return () => scrollEl.removeEventListener("scroll", updatePositions);
402
- }, [updatePositions]);
403
- const handleMouseMove = (0, import_react4.useCallback)(
404
- (e) => {
405
- if (!isEditable) return;
406
- const rect = e.currentTarget.getBoundingClientRect();
407
- const x = e.clientX - rect.left;
408
- const y = e.clientY - rect.top;
409
- const threshold = 50;
410
- setIsSideHovered(x >= rect.width - threshold);
411
- setIsBottomHovered(y >= rect.height - threshold);
412
- },
413
- [isEditable]
414
- );
415
- const handleMouseLeave = (0, import_react4.useCallback)((e) => {
416
- const relatedTarget = e.relatedTarget;
417
- const currentTarget = e.currentTarget;
418
- if (relatedTarget instanceof Node && currentTarget instanceof Node && currentTarget.contains(relatedTarget)) {
419
- return;
420
- }
421
- if (wrapperRef.current && relatedTarget instanceof Node && wrapperRef.current.contains(relatedTarget)) {
422
- return;
423
- }
424
- setIsSideHovered(false);
425
- setIsBottomHovered(false);
426
- }, []);
427
- const focusTable = (0, import_react4.useCallback)(() => {
428
- const pos = getPos();
429
- if (pos === void 0) return false;
430
- try {
431
- const resolvedPos = editor.state.doc.resolve(pos + 1);
432
- const table = resolvedPos.node(1);
433
- if ((table == null ? void 0 : table.type.name) === "table") {
434
- let cellPos = pos + 1;
435
- table.descendants((n, nodePos) => {
436
- if (n.type.name === "tableCell" || n.type.name === "tableHeader") {
437
- cellPos = pos + 1 + nodePos + 1;
438
- return false;
439
- }
440
- return true;
441
- });
442
- editor.chain().focus().setTextSelection(cellPos).run();
443
- return true;
444
- }
445
- } catch {
446
- }
447
- return false;
448
- }, [editor, getPos]);
449
- const handleAddColumn = (0, import_react4.useCallback)(() => {
450
- if (focusTable()) {
451
- editor.chain().addColumnAfter().run();
452
- } else {
453
- editor.chain().focus().addColumnAfter().run();
454
- }
455
- }, [editor, focusTable]);
456
- const handleAddRow = (0, import_react4.useCallback)(() => {
457
- if (focusTable()) {
458
- editor.chain().addRowAfter().run();
459
- } else {
460
- editor.chain().focus().addRowAfter().run();
461
- }
462
- }, [editor, focusTable]);
463
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
464
- import_react3.NodeViewWrapper,
465
- {
466
- ref: wrapperRef,
467
- className: [
468
- "table-node-view pr-6 pb-6",
469
- controlsDisabled ? "controls--disabled" : ""
470
- ].join(" "),
471
- onMouseEnter: handleMouseMove,
472
- onMouseMove: handleMouseMove,
473
- onMouseLeave: handleMouseLeave,
474
- "data-type": "table",
475
- children: [
476
- isEditable && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "table-controls", contentEditable: false, children: [
477
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
478
- "div",
479
- {
480
- className: "rows-control",
481
- style: controlPos ? {
482
- top: `${controlPos.rowTop}px`,
483
- height: `${controlPos.rowHeight}px`
484
- } : void 0,
485
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TableRowMenu, { editor, cellPos: hoveredCell == null ? void 0 : hoveredCell.pos })
486
- }
487
- ),
488
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
489
- "div",
490
- {
491
- className: "columns-control",
492
- style: controlPos ? {
493
- left: `${controlPos.columnLeft}px`,
494
- width: `${controlPos.columnWidth}px`
495
- } : void 0,
496
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TableColumnMenu, { editor, cellPos: hoveredCell == null ? void 0 : hoveredCell.pos })
497
- }
498
- )
499
- ] }),
500
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
501
- "div",
502
- {
503
- ref: scrollRef,
504
- className: "table-wrapper horizontal-scrollbar scrollbar-md",
505
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react3.NodeViewContent, { as: "table" })
506
- }
507
- ),
508
- isEditable && isSideHovered && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
509
- "div",
510
- {
511
- className: "absolute -right-6 top-0 h-full flex items-center",
512
- contentEditable: false,
513
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
514
- "button",
515
- {
516
- type: "button",
517
- className: "w-4 h-full hover:bg-accent cursor-pointer flex items-center justify-center rounded-sm transition-colors text-muted-foreground text-xs",
518
- onClick: handleAddColumn,
519
- "aria-label": "Add column",
520
- children: "+"
521
- }
522
- )
523
- }
524
- ),
525
- isEditable && isBottomHovered && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
526
- "div",
527
- {
528
- className: "absolute -bottom-6 left-0 w-full flex justify-center",
529
- contentEditable: false,
530
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
531
- "button",
532
- {
533
- type: "button",
534
- className: "h-4 w-full hover:bg-accent cursor-pointer flex items-center justify-center rounded-sm transition-colors text-muted-foreground text-xs",
535
- onClick: handleAddRow,
536
- "aria-label": "Add row",
537
- children: "+"
538
- }
539
- )
540
- }
541
- )
542
- ]
543
- }
544
- );
545
- }
546
-
547
- // src/table/table.ts
548
- var Table = import_extension_table.Table.extend({
549
- addOptions() {
550
- var _a;
551
- return {
552
- ...(_a = this.parent) == null ? void 0 : _a.call(this),
553
- HTMLAttributes: {},
554
- resizable: true,
555
- handleWidth: 5,
556
- cellMinWidth: 100,
557
- lastColumnResizable: true,
558
- allowTableNodeSelection: true,
559
- renderWrapper: true,
560
- View: null
561
- };
562
- },
563
- addKeyboardShortcuts() {
564
- var _a;
565
- return {
566
- ...(_a = this.parent) == null ? void 0 : _a.call(this),
567
- Tab: () => {
568
- if (this.editor.isActive("table")) {
569
- if (this.editor.isActive("listItem") || this.editor.isActive("taskItem")) {
570
- return false;
571
- }
572
- if (this.editor.commands.goToNextCell()) {
573
- return true;
574
- }
575
- if (!this.editor.can().addRowAfter()) {
576
- return false;
577
- }
578
- return this.editor.chain().addRowAfter().goToNextCell().run();
579
- }
580
- return false;
581
- },
582
- ArrowDown: insertLineBelowTableAction,
583
- ArrowUp: insertLineAboveTableAction
584
- };
585
- },
586
- addNodeView() {
587
- return (0, import_react5.ReactNodeViewRenderer)(TableNodeView, {
588
- contentDOMElementTag: "tbody",
589
- stopEvent: ({ event }) => {
590
- const target = event.target;
591
- if (target.closest("button, [role='button'], input, a")) {
592
- return true;
593
- }
594
- return false;
595
- }
596
- });
597
- },
598
- addProseMirrorPlugins() {
599
- const isResizable = this.options.resizable && this.editor.isEditable;
600
- const plugins = [
601
- (0, import_tables4.tableEditing)({
602
- allowTableNodeSelection: this.options.allowTableNodeSelection
603
- }),
604
- tableControls()
605
- ];
606
- if (isResizable) {
607
- plugins.unshift(
608
- (0, import_tables4.columnResizing)({
609
- handleWidth: this.options.handleWidth,
610
- cellMinWidth: this.options.cellMinWidth,
611
- lastColumnResizable: this.options.lastColumnResizable
612
- })
613
- );
614
- }
615
- return plugins;
616
- }
617
- });
618
- // Annotate the CommonJS export names for ESM import in node:
619
- 0 && (module.exports = {
620
- Table
621
- });
@@ -1,14 +0,0 @@
1
- "use client";
2
- import {
3
- Table
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
- import "../chunk-WKV76XOR.mjs";
12
- export {
13
- Table
14
- };
@@ -1,11 +0,0 @@
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 };
@@ -1,11 +0,0 @@
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 };