@kopexa/extension-table 17.0.46 → 17.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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-4JC7NB5Y.mjs +96 -0
  4. package/dist/{chunk-2L3HZWWG.mjs → chunk-4XRAUUXQ.mjs} +7 -8
  5. package/dist/chunk-5B5XIL2G.mjs +457 -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-J4VOSZCZ.mjs +59 -0
  16. package/dist/chunk-JQEUL3LT.mjs +276 -0
  17. package/dist/chunk-JSUVBKCI.mjs +116 -0
  18. package/dist/chunk-KIYFW7MP.mjs +122 -0
  19. package/dist/chunk-KTRZVXJC.mjs +306 -0
  20. package/dist/chunk-LUA32VH4.mjs +35 -0
  21. package/dist/chunk-LULO6UOC.mjs +603 -0
  22. package/dist/chunk-PTX5UYV6.mjs +10 -0
  23. package/dist/chunk-QI7CA4YV.mjs +149 -0
  24. package/dist/chunk-VIBVRWS4.mjs +197 -0
  25. package/dist/chunk-VQV757EG.mjs +113 -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
package/dist/kit.js DELETED
@@ -1,764 +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/kit.ts
24
- var kit_exports = {};
25
- __export(kit_exports, {
26
- TableKit: () => TableKit
27
- });
28
- module.exports = __toCommonJS(kit_exports);
29
- var import_react6 = require("@tiptap/react");
30
-
31
- // src/table/table.ts
32
- var import_extension_table = require("@tiptap/extension-table");
33
- var import_tables4 = require("@tiptap/pm/tables");
34
- var import_react5 = require("@tiptap/react");
35
-
36
- // src/table/lib/insert-line-above-table-action.ts
37
- var import_editor_utils = require("@kopexa/editor-utils");
38
- var insertLineAboveTableAction = ({
39
- editor
40
- }) => {
41
- if (!editor.isActive("table")) return false;
42
- try {
43
- const { selection } = editor.state;
44
- const tableNode = (0, import_editor_utils.findParentNodeOfType)(selection, "table");
45
- if (!tableNode) return false;
46
- const tablePos = tableNode.pos;
47
- const firstRow = tableNode.node.child(0);
48
- const selectionPath = selection.$anchor.path;
49
- const selectionInFirstRow = selectionPath.includes(firstRow);
50
- if (!selectionInFirstRow) return false;
51
- if (tablePos === 0) {
52
- editor.chain().insertContentAt(tablePos, { type: "paragraph" }).run();
53
- editor.chain().setTextSelection(tablePos + 1).run();
54
- } else {
55
- const prevNodePos = tablePos - 1;
56
- if (prevNodePos <= 0) return false;
57
- const prevNode = editor.state.doc.nodeAt(prevNodePos - 1);
58
- if (prevNode && prevNode.type.name === "paragraph") {
59
- const endOfParagraphPos = tablePos - prevNode.nodeSize;
60
- editor.chain().setTextSelection(endOfParagraphPos).run();
61
- } else {
62
- return false;
63
- }
64
- }
65
- return true;
66
- } catch (e) {
67
- console.error("failed to insert line above table", e);
68
- return false;
69
- }
70
- };
71
-
72
- // src/table/lib/insert-line-below-table-action.ts
73
- var import_editor_utils2 = require("@kopexa/editor-utils");
74
- var insertLineBelowTableAction = ({
75
- editor
76
- }) => {
77
- if (!editor.isActive("table")) return false;
78
- try {
79
- const { selection } = editor.state;
80
- const tableNode = (0, import_editor_utils2.findParentNodeOfType)(selection, "table");
81
- if (!tableNode) return false;
82
- const tablePos = tableNode.pos;
83
- const table = tableNode.node;
84
- const rowCount = table.childCount;
85
- const lastRow = table.child(rowCount - 1);
86
- const selectionPath = selection.$anchor.path;
87
- const selectionInLastRow = selectionPath.includes(lastRow);
88
- if (!selectionInLastRow) return false;
89
- const nextNodePos = tablePos + table.nodeSize;
90
- const nextNode = editor.state.doc.nodeAt(nextNodePos);
91
- if (nextNode && nextNode.type.name === "paragraph") {
92
- const endOfParagraphPos = nextNodePos + nextNode.nodeSize - 1;
93
- editor.chain().setTextSelection(endOfParagraphPos).run();
94
- } else if (!nextNode) {
95
- editor.chain().insertContentAt(nextNodePos, { type: "paragraph" }).run();
96
- editor.chain().setTextSelection(nextNodePos + 1).run();
97
- } else {
98
- return false;
99
- }
100
- return true;
101
- } catch (e) {
102
- console.error("failed to insert line above table", e);
103
- return false;
104
- }
105
- };
106
-
107
- // src/table/lib/table-controls.ts
108
- var import_core = require("@tiptap/core");
109
- var import_state = require("@tiptap/pm/state");
110
- var import_view = require("@tiptap/pm/view");
111
- function tableControls() {
112
- const key = new import_state.PluginKey("tableControls");
113
- return new import_state.Plugin({
114
- key,
115
- state: {
116
- init() {
117
- return new TableControlsState(key);
118
- },
119
- apply(tr, prev) {
120
- return prev.apply(tr);
121
- }
122
- },
123
- props: {
124
- handleDOMEvents: {
125
- mousemove: (view, event) => {
126
- var _a;
127
- const pluginState = key.getState(view.state);
128
- if (!event.target.closest(".table-node-view") && pluginState.values.hoveredTable) {
129
- return view.dispatch(
130
- view.state.tr.setMeta(key, {
131
- setHoveredTable: null,
132
- setHoveredCell: null
133
- })
134
- );
135
- }
136
- const pos = view.posAtCoords({
137
- left: event.clientX,
138
- top: event.clientY
139
- });
140
- if (!pos || pos.pos < 0 || pos.pos > view.state.doc.content.size)
141
- return;
142
- const table = (0, import_core.findParentNode)((node) => node.type.name === "table")(
143
- import_state.TextSelection.create(view.state.doc, pos.pos)
144
- );
145
- const cell = (0, import_core.findParentNode)(
146
- (node) => node.type.name === "tableCell" || node.type.name === "tableHeader"
147
- )(import_state.TextSelection.create(view.state.doc, pos.pos));
148
- if (!table || !cell) return;
149
- if (((_a = pluginState.values.hoveredCell) == null ? void 0 : _a.pos) !== cell.pos) {
150
- return view.dispatch(
151
- view.state.tr.setMeta(key, {
152
- setHoveredTable: table,
153
- setHoveredCell: cell
154
- })
155
- );
156
- }
157
- }
158
- },
159
- decorations: (state) => {
160
- const pluginState = key.getState(state);
161
- if (!pluginState) {
162
- return null;
163
- }
164
- const { hoveredTable, hoveredCell } = pluginState.values;
165
- const docSize = state.doc.content.size;
166
- if (hoveredTable && hoveredCell && hoveredTable.pos < docSize && hoveredCell.pos < docSize) {
167
- const decorations = [
168
- import_view.Decoration.node(
169
- hoveredTable.pos,
170
- hoveredTable.pos + hoveredTable.node.nodeSize,
171
- {},
172
- {
173
- hoveredTable,
174
- hoveredCell
175
- }
176
- )
177
- ];
178
- return import_view.DecorationSet.create(state.doc, decorations);
179
- }
180
- return null;
181
- }
182
- }
183
- });
184
- }
185
- var TableControlsState = class {
186
- constructor(key, props = {}) {
187
- __publicField(this, "values");
188
- __publicField(this, "key");
189
- this.key = key;
190
- this.values = {
191
- hoveredTable: null,
192
- hoveredCell: null,
193
- ...props
194
- };
195
- }
196
- apply(tr) {
197
- const actions = tr.getMeta(this.key);
198
- if ((actions == null ? void 0 : actions.setHoveredTable) !== void 0) {
199
- this.values.hoveredTable = actions.setHoveredTable;
200
- }
201
- if ((actions == null ? void 0 : actions.setHoveredCell) !== void 0) {
202
- this.values.hoveredCell = actions.setHoveredCell;
203
- }
204
- return this;
205
- }
206
- };
207
-
208
- // src/table/views/table-node-view.tsx
209
- var import_tables3 = require("@tiptap/pm/tables");
210
- var import_react3 = require("@tiptap/react");
211
- var import_react4 = require("react");
212
-
213
- // src/table/views/table-column-menu.tsx
214
- var import_dropdown_menu = require("@kopexa/dropdown-menu");
215
- var import_tables = require("@tiptap/pm/tables");
216
- var import_react = require("react");
217
- var import_jsx_runtime = require("react/jsx-runtime");
218
- function TableColumnMenu({
219
- editor,
220
- cellPos,
221
- style
222
- }) {
223
- const [open, setOpen] = (0, import_react.useState)(false);
224
- const chainAtCell = (0, import_react.useCallback)(() => {
225
- const chain = editor.chain().focus();
226
- if (cellPos != null) {
227
- return chain.setTextSelection(cellPos + 1);
228
- }
229
- return chain;
230
- }, [editor, cellPos]);
231
- const handleToggleHeader = (0, import_react.useCallback)(() => {
232
- chainAtCell().command(({ state, dispatch }) => (0, import_tables.toggleHeaderColumn)(state, dispatch)).run();
233
- setOpen(false);
234
- }, [chainAtCell]);
235
- const handleAddBefore = (0, import_react.useCallback)(() => {
236
- chainAtCell().addColumnBefore().run();
237
- setOpen(false);
238
- }, [chainAtCell]);
239
- const handleAddAfter = (0, import_react.useCallback)(() => {
240
- chainAtCell().addColumnAfter().run();
241
- setOpen(false);
242
- }, [chainAtCell]);
243
- const handleDelete = (0, import_react.useCallback)(() => {
244
- chainAtCell().deleteColumn().run();
245
- setOpen(false);
246
- }, [chainAtCell]);
247
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
248
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
249
- "button",
250
- {
251
- type: "button",
252
- className: "columns-control-div",
253
- "aria-label": "Column actions",
254
- style
255
- }
256
- ) }),
257
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Content, { children: [
258
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_dropdown_menu.DropdownMenu.Group, { children: [
259
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleToggleHeader, children: "Toggle header column" }),
260
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddBefore, children: "Insert column before" }),
261
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { onSelect: handleAddAfter, children: "Insert column after" })
262
- ] }),
263
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Separator, {}),
264
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dropdown_menu.DropdownMenu.Item, { variant: "destructive", onSelect: handleDelete, children: "Delete column" })
265
- ] })
266
- ] });
267
- }
268
-
269
- // src/table/views/table-row-menu.tsx
270
- var import_dropdown_menu2 = require("@kopexa/dropdown-menu");
271
- var import_tables2 = require("@tiptap/pm/tables");
272
- var import_react2 = require("react");
273
- var import_jsx_runtime2 = require("react/jsx-runtime");
274
- function TableRowMenu({ editor, cellPos, style }) {
275
- const [open, setOpen] = (0, import_react2.useState)(false);
276
- const chainAtCell = (0, import_react2.useCallback)(() => {
277
- const chain = editor.chain().focus();
278
- if (cellPos != null) {
279
- return chain.setTextSelection(cellPos + 1);
280
- }
281
- return chain;
282
- }, [editor, cellPos]);
283
- const handleToggleHeader = (0, import_react2.useCallback)(() => {
284
- chainAtCell().command(({ state, dispatch }) => (0, import_tables2.toggleHeaderRow)(state, dispatch)).run();
285
- setOpen(false);
286
- }, [chainAtCell]);
287
- const handleAddAbove = (0, import_react2.useCallback)(() => {
288
- chainAtCell().addRowBefore().run();
289
- setOpen(false);
290
- }, [chainAtCell]);
291
- const handleAddBelow = (0, import_react2.useCallback)(() => {
292
- chainAtCell().addRowAfter().run();
293
- setOpen(false);
294
- }, [chainAtCell]);
295
- const handleDelete = (0, import_react2.useCallback)(() => {
296
- chainAtCell().deleteRow().run();
297
- setOpen(false);
298
- }, [chainAtCell]);
299
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dropdown_menu2.DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
300
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
301
- "button",
302
- {
303
- type: "button",
304
- className: "rows-control-div",
305
- "aria-label": "Row actions",
306
- style
307
- }
308
- ) }),
309
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dropdown_menu2.DropdownMenu.Content, { children: [
310
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dropdown_menu2.DropdownMenu.Group, { children: [
311
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { onSelect: handleToggleHeader, children: "Toggle header row" }),
312
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { onSelect: handleAddAbove, children: "Insert row above" }),
313
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { onSelect: handleAddBelow, children: "Insert row below" })
314
- ] }),
315
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Separator, {}),
316
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dropdown_menu2.DropdownMenu.Item, { variant: "destructive", onSelect: handleDelete, children: "Delete row" })
317
- ] })
318
- ] });
319
- }
320
-
321
- // src/table/views/table-node-view.tsx
322
- var import_jsx_runtime3 = require("react/jsx-runtime");
323
- function extractHoverInfo(decorations) {
324
- const info = {};
325
- for (const dec of decorations) {
326
- const spec = dec.spec;
327
- if ((spec == null ? void 0 : spec.hoveredCell) !== void 0)
328
- info.hoveredCell = spec.hoveredCell;
329
- if ((spec == null ? void 0 : spec.hoveredTable) !== void 0)
330
- info.hoveredTable = spec.hoveredTable;
331
- }
332
- return info;
333
- }
334
- function TableNodeView({
335
- editor,
336
- node,
337
- decorations,
338
- getPos
339
- }) {
340
- const wrapperRef = (0, import_react4.useRef)(null);
341
- const scrollRef = (0, import_react4.useRef)(null);
342
- const isEditable = (0, import_react3.useEditorState)({
343
- editor,
344
- selector: ({ editor: e }) => {
345
- var _a;
346
- return (_a = e == null ? void 0 : e.isEditable) != null ? _a : false;
347
- }
348
- });
349
- const cellMinWidth = (0, import_react4.useMemo)(() => {
350
- var _a, _b, _c;
351
- 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;
352
- }, [editor]);
353
- const map = (0, import_react4.useMemo)(() => import_tables3.TableMap.get(node), [node]);
354
- const [isSideHovered, setIsSideHovered] = (0, import_react4.useState)(false);
355
- const [isBottomHovered, setIsBottomHovered] = (0, import_react4.useState)(false);
356
- const { hoveredTable, hoveredCell } = (0, import_react4.useMemo)(
357
- () => extractHoverInfo(decorations),
358
- [decorations]
359
- );
360
- const controlsDisabled = !hoveredTable || !hoveredCell;
361
- (0, import_react4.useEffect)(() => {
362
- var _a;
363
- const table = (_a = scrollRef.current) == null ? void 0 : _a.querySelector("table");
364
- if (!table) return;
365
- let colgroup = table.querySelector("colgroup");
366
- if (!colgroup) {
367
- colgroup = document.createElement("colgroup");
368
- table.insertBefore(colgroup, table.firstChild);
369
- }
370
- const width = map.width;
371
- while (colgroup.children.length < width) {
372
- colgroup.appendChild(document.createElement("col"));
373
- }
374
- while (colgroup.children.length > width) {
375
- if (colgroup.lastChild) colgroup.removeChild(colgroup.lastChild);
376
- }
377
- (0, import_tables3.updateColumnsOnResize)(node, colgroup, table, cellMinWidth);
378
- }, [node, map.width, cellMinWidth]);
379
- const [controlPos, setControlPos] = (0, import_react4.useState)(null);
380
- const updatePositions = (0, import_react4.useCallback)(() => {
381
- if (!hoveredCell || !wrapperRef.current) {
382
- setControlPos(null);
383
- return;
384
- }
385
- const cellDom = editor.view.nodeDOM(hoveredCell.pos);
386
- if (!cellDom) {
387
- setControlPos(null);
388
- return;
389
- }
390
- const wrapperRect = wrapperRef.current.getBoundingClientRect();
391
- const cellRect = cellDom.getBoundingClientRect();
392
- setControlPos({
393
- columnLeft: cellRect.left - wrapperRect.left,
394
- columnWidth: cellRect.width,
395
- rowTop: cellRect.top - wrapperRect.top,
396
- rowHeight: cellRect.height
397
- });
398
- }, [hoveredCell, editor.view]);
399
- (0, import_react4.useEffect)(() => {
400
- updatePositions();
401
- const scrollEl = scrollRef.current;
402
- if (!scrollEl) return;
403
- scrollEl.addEventListener("scroll", updatePositions, { passive: true });
404
- return () => scrollEl.removeEventListener("scroll", updatePositions);
405
- }, [updatePositions]);
406
- const handleMouseMove = (0, import_react4.useCallback)(
407
- (e) => {
408
- if (!isEditable) return;
409
- const rect = e.currentTarget.getBoundingClientRect();
410
- const x = e.clientX - rect.left;
411
- const y = e.clientY - rect.top;
412
- const threshold = 50;
413
- setIsSideHovered(x >= rect.width - threshold);
414
- setIsBottomHovered(y >= rect.height - threshold);
415
- },
416
- [isEditable]
417
- );
418
- const handleMouseLeave = (0, import_react4.useCallback)((e) => {
419
- const relatedTarget = e.relatedTarget;
420
- const currentTarget = e.currentTarget;
421
- if (relatedTarget instanceof Node && currentTarget instanceof Node && currentTarget.contains(relatedTarget)) {
422
- return;
423
- }
424
- if (wrapperRef.current && relatedTarget instanceof Node && wrapperRef.current.contains(relatedTarget)) {
425
- return;
426
- }
427
- setIsSideHovered(false);
428
- setIsBottomHovered(false);
429
- }, []);
430
- const focusTable = (0, import_react4.useCallback)(() => {
431
- const pos = getPos();
432
- if (pos === void 0) return false;
433
- try {
434
- const resolvedPos = editor.state.doc.resolve(pos + 1);
435
- const table = resolvedPos.node(1);
436
- if ((table == null ? void 0 : table.type.name) === "table") {
437
- let cellPos = pos + 1;
438
- table.descendants((n, nodePos) => {
439
- if (n.type.name === "tableCell" || n.type.name === "tableHeader") {
440
- cellPos = pos + 1 + nodePos + 1;
441
- return false;
442
- }
443
- return true;
444
- });
445
- editor.chain().focus().setTextSelection(cellPos).run();
446
- return true;
447
- }
448
- } catch {
449
- }
450
- return false;
451
- }, [editor, getPos]);
452
- const handleAddColumn = (0, import_react4.useCallback)(() => {
453
- if (focusTable()) {
454
- editor.chain().addColumnAfter().run();
455
- } else {
456
- editor.chain().focus().addColumnAfter().run();
457
- }
458
- }, [editor, focusTable]);
459
- const handleAddRow = (0, import_react4.useCallback)(() => {
460
- if (focusTable()) {
461
- editor.chain().addRowAfter().run();
462
- } else {
463
- editor.chain().focus().addRowAfter().run();
464
- }
465
- }, [editor, focusTable]);
466
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
467
- import_react3.NodeViewWrapper,
468
- {
469
- ref: wrapperRef,
470
- className: [
471
- "table-node-view pr-6 pb-6",
472
- controlsDisabled ? "controls--disabled" : ""
473
- ].join(" "),
474
- onMouseEnter: handleMouseMove,
475
- onMouseMove: handleMouseMove,
476
- onMouseLeave: handleMouseLeave,
477
- "data-type": "table",
478
- children: [
479
- isEditable && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "table-controls", contentEditable: false, children: [
480
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
481
- "div",
482
- {
483
- className: "rows-control",
484
- style: controlPos ? {
485
- top: `${controlPos.rowTop}px`,
486
- height: `${controlPos.rowHeight}px`
487
- } : void 0,
488
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TableRowMenu, { editor, cellPos: hoveredCell == null ? void 0 : hoveredCell.pos })
489
- }
490
- ),
491
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
492
- "div",
493
- {
494
- className: "columns-control",
495
- style: controlPos ? {
496
- left: `${controlPos.columnLeft}px`,
497
- width: `${controlPos.columnWidth}px`
498
- } : void 0,
499
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TableColumnMenu, { editor, cellPos: hoveredCell == null ? void 0 : hoveredCell.pos })
500
- }
501
- )
502
- ] }),
503
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
504
- "div",
505
- {
506
- ref: scrollRef,
507
- className: "table-wrapper horizontal-scrollbar scrollbar-md",
508
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react3.NodeViewContent, { as: "table" })
509
- }
510
- ),
511
- isEditable && isSideHovered && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
512
- "div",
513
- {
514
- className: "absolute -right-6 top-0 h-full flex items-center",
515
- contentEditable: false,
516
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
517
- "button",
518
- {
519
- type: "button",
520
- className: "w-4 h-full hover:bg-accent cursor-pointer flex items-center justify-center rounded-sm transition-colors text-muted-foreground text-xs",
521
- onClick: handleAddColumn,
522
- "aria-label": "Add column",
523
- children: "+"
524
- }
525
- )
526
- }
527
- ),
528
- isEditable && isBottomHovered && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
529
- "div",
530
- {
531
- className: "absolute -bottom-6 left-0 w-full flex justify-center",
532
- contentEditable: false,
533
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
534
- "button",
535
- {
536
- type: "button",
537
- className: "h-4 w-full hover:bg-accent cursor-pointer flex items-center justify-center rounded-sm transition-colors text-muted-foreground text-xs",
538
- onClick: handleAddRow,
539
- "aria-label": "Add row",
540
- children: "+"
541
- }
542
- )
543
- }
544
- )
545
- ]
546
- }
547
- );
548
- }
549
-
550
- // src/table/table.ts
551
- var Table = import_extension_table.Table.extend({
552
- addOptions() {
553
- var _a;
554
- return {
555
- ...(_a = this.parent) == null ? void 0 : _a.call(this),
556
- HTMLAttributes: {},
557
- resizable: true,
558
- handleWidth: 5,
559
- cellMinWidth: 100,
560
- lastColumnResizable: true,
561
- allowTableNodeSelection: true,
562
- renderWrapper: true,
563
- View: null
564
- };
565
- },
566
- addKeyboardShortcuts() {
567
- var _a;
568
- return {
569
- ...(_a = this.parent) == null ? void 0 : _a.call(this),
570
- Tab: () => {
571
- if (this.editor.isActive("table")) {
572
- if (this.editor.isActive("listItem") || this.editor.isActive("taskItem")) {
573
- return false;
574
- }
575
- if (this.editor.commands.goToNextCell()) {
576
- return true;
577
- }
578
- if (!this.editor.can().addRowAfter()) {
579
- return false;
580
- }
581
- return this.editor.chain().addRowAfter().goToNextCell().run();
582
- }
583
- return false;
584
- },
585
- ArrowDown: insertLineBelowTableAction,
586
- ArrowUp: insertLineAboveTableAction
587
- };
588
- },
589
- addNodeView() {
590
- return (0, import_react5.ReactNodeViewRenderer)(TableNodeView, {
591
- contentDOMElementTag: "tbody",
592
- stopEvent: ({ event }) => {
593
- const target = event.target;
594
- if (target.closest("button, [role='button'], input, a")) {
595
- return true;
596
- }
597
- return false;
598
- }
599
- });
600
- },
601
- addProseMirrorPlugins() {
602
- const isResizable = this.options.resizable && this.editor.isEditable;
603
- const plugins = [
604
- (0, import_tables4.tableEditing)({
605
- allowTableNodeSelection: this.options.allowTableNodeSelection
606
- }),
607
- tableControls()
608
- ];
609
- if (isResizable) {
610
- plugins.unshift(
611
- (0, import_tables4.columnResizing)({
612
- handleWidth: this.options.handleWidth,
613
- cellMinWidth: this.options.cellMinWidth,
614
- lastColumnResizable: this.options.lastColumnResizable
615
- })
616
- );
617
- }
618
- return plugins;
619
- }
620
- });
621
-
622
- // src/table-cell.ts
623
- var import_core2 = require("@tiptap/core");
624
- var TableCell = import_core2.Node.create({
625
- name: "tableCell",
626
- content: "block+",
627
- tableRole: "cell",
628
- isolating: true,
629
- addOptions() {
630
- return {
631
- HTMLAttributes: {}
632
- };
633
- },
634
- parseHTML() {
635
- return [{ tag: "td" }];
636
- },
637
- renderHTML({ node, HTMLAttributes }) {
638
- const attrs = {};
639
- if (node.attrs.align) {
640
- attrs["data-align"] = node.attrs.align;
641
- attrs.style = `text-align: ${node.attrs.align}`;
642
- }
643
- if (node.attrs.backgroundColor) {
644
- attrs["data-background-color"] = node.attrs.backgroundColor;
645
- }
646
- return [
647
- "td",
648
- (0, import_core2.mergeAttributes)(this.options.HTMLAttributes, HTMLAttributes, attrs),
649
- 0
650
- ];
651
- },
652
- addAttributes() {
653
- return {
654
- colspan: {
655
- default: 1,
656
- parseHTML: (element) => {
657
- const colspan = element.getAttribute("colspan");
658
- return colspan ? Number.parseInt(colspan, 10) : 1;
659
- }
660
- },
661
- rowspan: {
662
- default: 1,
663
- parseHTML: (element) => {
664
- const rowspan = element.getAttribute("rowspan");
665
- return rowspan ? Number.parseInt(rowspan, 10) : 1;
666
- }
667
- },
668
- colwidth: {
669
- default: null,
670
- parseHTML: (element) => {
671
- const colwidth = element.getAttribute("colwidth");
672
- return colwidth ? colwidth.split(",").map((w) => Number.parseInt(w, 10)) : null;
673
- }
674
- },
675
- align: {
676
- default: null,
677
- parseHTML: (element) => element.getAttribute("data-align")
678
- },
679
- backgroundColor: {
680
- default: null,
681
- parseHTML: (element) => element.getAttribute("data-background-color")
682
- }
683
- };
684
- }
685
- });
686
-
687
- // src/table-header.ts
688
- var import_core3 = require("@tiptap/core");
689
- var import_extension_table2 = require("@tiptap/extension-table");
690
- var TableHeader = import_extension_table2.TableHeader.extend({
691
- renderHTML({ node, HTMLAttributes }) {
692
- const attrs = {};
693
- if (node.attrs.align) {
694
- attrs["data-align"] = node.attrs.align;
695
- attrs.style = `text-align: ${node.attrs.align}`;
696
- }
697
- return [
698
- "th",
699
- (0, import_core3.mergeAttributes)(this.options.HTMLAttributes, HTMLAttributes, attrs),
700
- 0
701
- ];
702
- },
703
- addAttributes() {
704
- return {
705
- colspan: {
706
- default: 1
707
- },
708
- rowspan: {
709
- default: 1
710
- },
711
- colwidth: {
712
- default: null,
713
- parseHTML: (element) => {
714
- const colwidth = element.getAttribute("colwidth");
715
- return colwidth ? colwidth.split(",").map((w) => Number.parseInt(w, 10)) : null;
716
- }
717
- },
718
- align: {
719
- default: null,
720
- parseHTML: (element) => element.getAttribute("data-align")
721
- }
722
- };
723
- }
724
- });
725
-
726
- // src/table-row.ts
727
- var import_extension_table3 = require("@tiptap/extension-table");
728
- var TableRow = import_extension_table3.TableRow.extend({
729
- content: "(tableCell | tableHeader)*",
730
- addOptions() {
731
- var _a;
732
- return {
733
- ...(_a = this.parent) == null ? void 0 : _a.call(this),
734
- HTMLAttributes: {
735
- class: "min-w-full"
736
- }
737
- };
738
- }
739
- });
740
-
741
- // src/kit.ts
742
- var TableKit = import_react6.Extension.create({
743
- name: "tableKit",
744
- addExtensions() {
745
- const extensions = [];
746
- if (this.options.table !== false) {
747
- extensions.push(Table.configure(this.options.table));
748
- }
749
- if (this.options.tableCell !== false) {
750
- extensions.push(TableCell.configure(this.options.tableCell));
751
- }
752
- if (this.options.tableHeader !== false) {
753
- extensions.push(TableHeader.configure(this.options.tableHeader));
754
- }
755
- if (this.options.tableRow !== false) {
756
- extensions.push(TableRow.configure(this.options.tableRow));
757
- }
758
- return extensions;
759
- }
760
- });
761
- // Annotate the CommonJS export names for ESM import in node:
762
- 0 && (module.exports = {
763
- TableKit
764
- });