@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.
- package/dist/chunk-2NBDRVYL.mjs +428 -0
- package/dist/chunk-3SWV7BGP.mjs +638 -0
- package/dist/chunk-4JC7NB5Y.mjs +96 -0
- package/dist/{chunk-2L3HZWWG.mjs → chunk-4XRAUUXQ.mjs} +7 -8
- package/dist/chunk-5B5XIL2G.mjs +457 -0
- package/dist/chunk-6FHFDGJO.mjs +251 -0
- package/dist/chunk-CD62W5C3.mjs +165 -0
- package/dist/chunk-CN73TYHV.mjs +190 -0
- package/dist/chunk-CPDSPBS6.mjs +276 -0
- package/dist/chunk-E7W2KRZG.mjs +49 -0
- package/dist/chunk-G6GHC2WO.mjs +276 -0
- package/dist/chunk-GBTQVIN5.mjs +174 -0
- package/dist/chunk-GDEXPEW5.mjs +52 -0
- package/dist/chunk-GQLZBIWF.mjs +198 -0
- package/dist/chunk-J4VOSZCZ.mjs +59 -0
- package/dist/chunk-JQEUL3LT.mjs +276 -0
- package/dist/chunk-JSUVBKCI.mjs +116 -0
- package/dist/chunk-KIYFW7MP.mjs +122 -0
- package/dist/chunk-KTRZVXJC.mjs +306 -0
- package/dist/chunk-LUA32VH4.mjs +35 -0
- package/dist/chunk-LULO6UOC.mjs +603 -0
- package/dist/chunk-PTX5UYV6.mjs +10 -0
- package/dist/chunk-QI7CA4YV.mjs +149 -0
- package/dist/chunk-VIBVRWS4.mjs +197 -0
- package/dist/chunk-VQV757EG.mjs +113 -0
- package/dist/chunk-ZVPJDJBO.mjs +134 -0
- package/dist/{kit.d.mts → extensions/kit.d.mts} +1 -3
- package/dist/{kit.d.ts → extensions/kit.d.ts} +1 -3
- package/dist/extensions/kit.js +1041 -0
- package/dist/extensions/kit.mjs +15 -0
- package/dist/extensions/table-cell.d.mts +6 -0
- package/dist/extensions/table-cell.d.ts +6 -0
- package/dist/extensions/table-cell.js +70 -0
- package/dist/extensions/table-cell.mjs +8 -0
- package/dist/extensions/table-handle-plugin.d.mts +46 -0
- package/dist/extensions/table-handle-plugin.d.ts +46 -0
- package/dist/extensions/table-handle-plugin.js +1100 -0
- package/dist/extensions/table-handle-plugin.mjs +18 -0
- package/dist/extensions/table-handle.d.mts +19 -0
- package/dist/extensions/table-handle.d.ts +19 -0
- package/dist/extensions/table-handle.js +865 -0
- package/dist/extensions/table-handle.mjs +11 -0
- package/dist/{table → extensions}/table.d.mts +2 -2
- package/dist/{table → extensions}/table.d.ts +2 -2
- package/dist/extensions/table.js +138 -0
- package/dist/extensions/table.mjs +9 -0
- package/dist/hooks/use-resize-overlay.d.mts +5 -0
- package/dist/hooks/use-resize-overlay.d.ts +5 -0
- package/dist/hooks/use-resize-overlay.js +83 -0
- package/dist/hooks/use-resize-overlay.mjs +9 -0
- package/dist/hooks/use-table-add-row-column.d.mts +57 -0
- package/dist/hooks/use-table-add-row-column.d.ts +57 -0
- package/dist/hooks/use-table-add-row-column.js +551 -0
- package/dist/hooks/use-table-add-row-column.mjs +11 -0
- package/dist/hooks/use-table-align-cell.d.mts +148 -0
- package/dist/hooks/use-table-align-cell.d.ts +148 -0
- package/dist/hooks/use-table-align-cell.js +655 -0
- package/dist/hooks/use-table-align-cell.mjs +13 -0
- package/dist/hooks/use-table-clear-row-column-content.d.mts +103 -0
- package/dist/hooks/use-table-clear-row-column-content.d.ts +103 -0
- package/dist/hooks/use-table-clear-row-column-content.js +681 -0
- package/dist/hooks/use-table-clear-row-column-content.mjs +11 -0
- package/dist/hooks/use-table-delete-row-column.d.mts +87 -0
- package/dist/hooks/use-table-delete-row-column.d.ts +87 -0
- package/dist/hooks/use-table-delete-row-column.js +459 -0
- package/dist/hooks/use-table-delete-row-column.mjs +11 -0
- package/dist/hooks/use-table-duplicate-row-column.d.mts +49 -0
- package/dist/hooks/use-table-duplicate-row-column.d.ts +49 -0
- package/dist/hooks/use-table-duplicate-row-column.js +758 -0
- package/dist/hooks/use-table-duplicate-row-column.mjs +11 -0
- package/dist/hooks/use-table-handle-positioning.d.mts +42 -0
- package/dist/hooks/use-table-handle-positioning.d.ts +42 -0
- package/dist/hooks/use-table-handle-positioning.js +190 -0
- package/dist/hooks/use-table-handle-positioning.mjs +10 -0
- package/dist/hooks/use-table-handle-state.d.mts +28 -0
- package/dist/hooks/use-table-handle-state.d.ts +28 -0
- package/dist/hooks/use-table-handle-state.js +76 -0
- package/dist/hooks/use-table-handle-state.mjs +9 -0
- package/dist/hooks/use-table-header-row-column.d.mts +58 -0
- package/dist/hooks/use-table-header-row-column.d.ts +58 -0
- package/dist/hooks/use-table-header-row-column.js +603 -0
- package/dist/hooks/use-table-header-row-column.mjs +13 -0
- package/dist/hooks/use-table-merge-split-cell.d.mts +123 -0
- package/dist/hooks/use-table-merge-split-cell.d.ts +123 -0
- package/dist/hooks/use-table-merge-split-cell.js +331 -0
- package/dist/hooks/use-table-merge-split-cell.mjs +12 -0
- package/dist/hooks/use-table-move-row-column.d.mts +101 -0
- package/dist/hooks/use-table-move-row-column.d.ts +101 -0
- package/dist/hooks/use-table-move-row-column.js +621 -0
- package/dist/hooks/use-table-move-row-column.mjs +13 -0
- package/dist/hooks/use-table-sort-row-column.d.mts +118 -0
- package/dist/hooks/use-table-sort-row-column.d.ts +118 -0
- package/dist/hooks/use-table-sort-row-column.js +623 -0
- package/dist/hooks/use-table-sort-row-column.mjs +13 -0
- package/dist/index.d.mts +17 -6
- package/dist/index.d.ts +17 -6
- package/dist/index.js +4947 -660
- package/dist/index.mjs +43 -21
- package/dist/lib/constants.d.mts +4 -0
- package/dist/lib/constants.d.ts +4 -0
- package/dist/{table/lib/is-cell-selection.js → lib/constants.js} +10 -10
- package/dist/lib/constants.mjs +10 -0
- package/dist/lib/create-image.d.mts +12 -0
- package/dist/lib/create-image.d.ts +12 -0
- package/dist/lib/create-image.js +221 -0
- package/dist/lib/create-image.mjs +8 -0
- package/dist/lib/table-utils.d.mts +263 -0
- package/dist/lib/table-utils.d.ts +263 -0
- package/dist/lib/table-utils.js +488 -0
- package/dist/lib/table-utils.mjs +40 -0
- package/dist/messages.d.mts +174 -0
- package/dist/messages.d.ts +174 -0
- package/dist/messages.js +213 -0
- package/dist/{table-row.mjs → messages.mjs} +3 -3
- package/dist/ui/table-alignment-menu.d.mts +25 -0
- package/dist/ui/table-alignment-menu.d.ts +25 -0
- package/dist/ui/table-alignment-menu.js +758 -0
- package/dist/ui/table-alignment-menu.mjs +14 -0
- package/dist/ui/table-cell-handle-menu.d.mts +12 -0
- package/dist/ui/table-cell-handle-menu.d.ts +12 -0
- package/dist/ui/table-cell-handle-menu.js +1317 -0
- package/dist/ui/table-cell-handle-menu.mjs +17 -0
- package/dist/ui/table-handle-menu.d.mts +23 -0
- package/dist/ui/table-handle-menu.d.ts +23 -0
- package/dist/ui/table-handle-menu.js +2598 -0
- package/dist/ui/table-handle-menu.mjs +21 -0
- package/dist/ui/table-handle.d.mts +48 -0
- package/dist/ui/table-handle.d.ts +48 -0
- package/dist/ui/table-handle.js +3126 -0
- package/dist/ui/table-handle.mjs +22 -0
- package/dist/ui/table-selection-overlay.d.mts +14 -0
- package/dist/ui/table-selection-overlay.d.ts +14 -0
- package/dist/ui/table-selection-overlay.js +553 -0
- package/dist/ui/table-selection-overlay.mjs +11 -0
- package/package.json +12 -7
- package/dist/chunk-3XEOCAHB.mjs +0 -41
- package/dist/chunk-5W5ARI64.mjs +0 -11
- package/dist/chunk-BTJ3DCGC.mjs +0 -113
- package/dist/chunk-DR2GZJH6.mjs +0 -70
- package/dist/chunk-GHOJLOCF.mjs +0 -247
- package/dist/chunk-HWVA6DOK.mjs +0 -20
- package/dist/chunk-KLUH6EZS.mjs +0 -40
- package/dist/chunk-KNOMCS6F.mjs +0 -57
- package/dist/chunk-LPHCE6EI.mjs +0 -92
- package/dist/chunk-POJFNXG7.mjs +0 -44
- package/dist/chunk-QHD3QTD2.mjs +0 -61
- package/dist/chunk-RPPUD4R5.mjs +0 -1
- package/dist/kit.js +0 -764
- package/dist/kit.mjs +0 -19
- package/dist/table/index.d.mts +0 -6
- package/dist/table/index.d.ts +0 -6
- package/dist/table/index.js +0 -625
- package/dist/table/index.mjs +0 -18
- package/dist/table/lib/col-style.d.mts +0 -3
- package/dist/table/lib/col-style.d.ts +0 -3
- package/dist/table/lib/col-style.js +0 -36
- package/dist/table/lib/col-style.mjs +0 -13
- package/dist/table/lib/delete-table-when-all-cells-selected.d.mts +0 -5
- package/dist/table/lib/delete-table-when-all-cells-selected.d.ts +0 -5
- package/dist/table/lib/delete-table-when-all-cells-selected.js +0 -66
- package/dist/table/lib/delete-table-when-all-cells-selected.mjs +0 -40
- package/dist/table/lib/get-table-node-types.d.mts +0 -7
- package/dist/table/lib/get-table-node-types.d.ts +0 -7
- package/dist/table/lib/get-table-node-types.js +0 -44
- package/dist/table/lib/get-table-node-types.mjs +0 -21
- package/dist/table/lib/icons.d.mts +0 -13
- package/dist/table/lib/icons.d.ts +0 -13
- package/dist/table/lib/icons.js +0 -81
- package/dist/table/lib/icons.mjs +0 -58
- package/dist/table/lib/insert-line-above-table-action.d.mts +0 -5
- package/dist/table/lib/insert-line-above-table-action.d.ts +0 -5
- package/dist/table/lib/insert-line-above-table-action.js +0 -64
- package/dist/table/lib/insert-line-above-table-action.mjs +0 -8
- package/dist/table/lib/insert-line-below-table-action.d.mts +0 -5
- package/dist/table/lib/insert-line-below-table-action.d.ts +0 -5
- package/dist/table/lib/insert-line-below-table-action.js +0 -63
- package/dist/table/lib/insert-line-below-table-action.mjs +0 -8
- package/dist/table/lib/is-cell-selection.d.mts +0 -5
- package/dist/table/lib/is-cell-selection.d.ts +0 -5
- package/dist/table/lib/is-cell-selection.mjs +0 -8
- package/dist/table/lib/table-controls.d.mts +0 -15
- package/dist/table/lib/table-controls.d.ts +0 -15
- package/dist/table/lib/table-controls.js +0 -131
- package/dist/table/lib/table-controls.mjs +0 -8
- package/dist/table/table.js +0 -621
- package/dist/table/table.mjs +0 -14
- package/dist/table/views/table-column-menu.d.mts +0 -11
- package/dist/table/views/table-column-menu.d.ts +0 -11
- package/dist/table/views/table-column-menu.js +0 -84
- package/dist/table/views/table-column-menu.mjs +0 -8
- package/dist/table/views/table-node-view.d.mts +0 -25
- package/dist/table/views/table-node-view.d.ts +0 -25
- package/dist/table/views/table-node-view.js +0 -370
- package/dist/table/views/table-node-view.mjs +0 -10
- package/dist/table/views/table-row-menu.d.mts +0 -11
- package/dist/table/views/table-row-menu.d.ts +0 -11
- package/dist/table/views/table-row-menu.js +0 -80
- package/dist/table/views/table-row-menu.mjs +0 -8
- package/dist/table-cell.d.mts +0 -8
- package/dist/table-cell.d.ts +0 -8
- package/dist/table-cell.js +0 -93
- package/dist/table-cell.mjs +0 -8
- package/dist/table-header.d.mts +0 -6
- package/dist/table-header.d.ts +0 -6
- package/dist/table-header.js +0 -67
- package/dist/table-header.mjs +0 -8
- package/dist/table-row.d.mts +0 -6
- package/dist/table-row.d.ts +0 -6
- package/dist/table-row.js +0 -43
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
"use client";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
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
|
+
|
|
22
|
+
// src/hooks/use-table-add-row-column.ts
|
|
23
|
+
var use_table_add_row_column_exports = {};
|
|
24
|
+
__export(use_table_add_row_column_exports, {
|
|
25
|
+
useTableAddRowColumn: () => useTableAddRowColumn
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(use_table_add_row_column_exports);
|
|
28
|
+
var import_editor_utils = require("@kopexa/editor-utils");
|
|
29
|
+
var import_i18n2 = require("@kopexa/i18n");
|
|
30
|
+
var import_icons = require("@kopexa/icons");
|
|
31
|
+
var import_tables2 = require("@tiptap/pm/tables");
|
|
32
|
+
var import_react = require("react");
|
|
33
|
+
|
|
34
|
+
// src/lib/table-utils.ts
|
|
35
|
+
var import_shared_utils = require("@kopexa/shared-utils");
|
|
36
|
+
var import_tables = require("@tiptap/pm/tables");
|
|
37
|
+
function getTable(editor, tablePos) {
|
|
38
|
+
if (!editor) return null;
|
|
39
|
+
let table = null;
|
|
40
|
+
if (typeof tablePos === "number") {
|
|
41
|
+
const tableNode = editor.state.doc.nodeAt(tablePos);
|
|
42
|
+
if ((tableNode == null ? void 0 : tableNode.type.name) === "table") {
|
|
43
|
+
table = {
|
|
44
|
+
node: tableNode,
|
|
45
|
+
pos: tablePos,
|
|
46
|
+
start: tablePos + 1,
|
|
47
|
+
depth: editor.state.doc.resolve(tablePos).depth
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (!table) {
|
|
52
|
+
const { state } = editor;
|
|
53
|
+
const $from = state.doc.resolve(state.selection.from);
|
|
54
|
+
table = (0, import_tables.findTable)($from);
|
|
55
|
+
}
|
|
56
|
+
if (!table) return null;
|
|
57
|
+
const tableMap = import_tables.TableMap.get(table.node);
|
|
58
|
+
if (!tableMap) return null;
|
|
59
|
+
return { ...table, map: tableMap };
|
|
60
|
+
}
|
|
61
|
+
function selectCellsByCoords(editor, tablePos, coords, options = { mode: "state" }) {
|
|
62
|
+
if (!editor) return;
|
|
63
|
+
const table = getTable(editor, tablePos);
|
|
64
|
+
if (!table) return;
|
|
65
|
+
const { state } = editor;
|
|
66
|
+
const tableMap = table.map;
|
|
67
|
+
const cleanedCoords = coords.map((coord) => ({
|
|
68
|
+
row: (0, import_shared_utils.clamp)(coord.row, 0, tableMap.height - 1),
|
|
69
|
+
col: (0, import_shared_utils.clamp)(coord.col, 0, tableMap.width - 1)
|
|
70
|
+
})).filter((coord) => isWithinBounds(coord.row, coord.col, tableMap));
|
|
71
|
+
if (cleanedCoords.length === 0) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const allRows = cleanedCoords.map((coord) => coord.row);
|
|
75
|
+
const topRow = Math.min(...allRows);
|
|
76
|
+
const bottomRow = Math.max(...allRows);
|
|
77
|
+
const allCols = cleanedCoords.map((coord) => coord.col);
|
|
78
|
+
const leftCol = Math.min(...allCols);
|
|
79
|
+
const rightCol = Math.max(...allCols);
|
|
80
|
+
const getCellPositionFromMap = (row, col) => {
|
|
81
|
+
const cellOffset = tableMap.map[row * tableMap.width + col];
|
|
82
|
+
if (cellOffset === void 0) return null;
|
|
83
|
+
return tablePos + 1 + cellOffset;
|
|
84
|
+
};
|
|
85
|
+
const anchorPosition = getCellPositionFromMap(topRow, leftCol);
|
|
86
|
+
if (anchorPosition === null) return;
|
|
87
|
+
let headPosition = getCellPositionFromMap(bottomRow, rightCol);
|
|
88
|
+
if (headPosition === null) return;
|
|
89
|
+
if (headPosition === anchorPosition) {
|
|
90
|
+
let foundDifferentCell = false;
|
|
91
|
+
for (let row = bottomRow; row >= topRow && !foundDifferentCell; row--) {
|
|
92
|
+
for (let col = rightCol; col >= leftCol && !foundDifferentCell; col--) {
|
|
93
|
+
const candidatePosition = getCellPositionFromMap(row, col);
|
|
94
|
+
if (candidatePosition !== null && candidatePosition !== anchorPosition) {
|
|
95
|
+
headPosition = candidatePosition;
|
|
96
|
+
foundDifferentCell = true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const anchorRef = state.doc.resolve(anchorPosition);
|
|
103
|
+
const headRef = state.doc.resolve(headPosition);
|
|
104
|
+
const cellSelection = new import_tables.CellSelection(anchorRef, headRef);
|
|
105
|
+
const transaction = state.tr.setSelection(cellSelection);
|
|
106
|
+
return applySelectionWithMode(state, transaction, options);
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error("Failed to create cell selection:", error);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function isWithinBounds(row, col, map) {
|
|
113
|
+
return row >= 0 && row < map.height && col >= 0 && col < map.width;
|
|
114
|
+
}
|
|
115
|
+
function applySelectionWithMode(state, transaction, options) {
|
|
116
|
+
var _a;
|
|
117
|
+
const mode = (_a = options.mode) != null ? _a : "state";
|
|
118
|
+
switch (mode) {
|
|
119
|
+
case "dispatch": {
|
|
120
|
+
const dispatchOptions = options;
|
|
121
|
+
if (typeof dispatchOptions.dispatch === "function") {
|
|
122
|
+
dispatchOptions.dispatch(transaction);
|
|
123
|
+
}
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
case "transaction":
|
|
127
|
+
return transaction;
|
|
128
|
+
default:
|
|
129
|
+
return state.apply(transaction);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function getTableSelectionType(editor, index, orientation, tablePos) {
|
|
133
|
+
if (typeof index === "number" && orientation) {
|
|
134
|
+
return { orientation, index };
|
|
135
|
+
}
|
|
136
|
+
if (!editor) return null;
|
|
137
|
+
const { state } = editor;
|
|
138
|
+
const table = getTable(editor, tablePos);
|
|
139
|
+
if (!table) return null;
|
|
140
|
+
if (state.selection instanceof import_tables.CellSelection) {
|
|
141
|
+
const rect = (0, import_tables.selectedRect)(state);
|
|
142
|
+
const map = import_tables.TableMap.get(table.node);
|
|
143
|
+
const width = rect.right - rect.left;
|
|
144
|
+
const height = rect.bottom - rect.top;
|
|
145
|
+
if (height === 1 && width === map.width) {
|
|
146
|
+
return { orientation: "row", index: rect.top };
|
|
147
|
+
}
|
|
148
|
+
if (width === 1 && height === map.height) {
|
|
149
|
+
return { orientation: "column", index: rect.left };
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
function updateSelectionAfterAction(editor, orientation, newIndex, tablePos) {
|
|
156
|
+
try {
|
|
157
|
+
const table = getTable(editor, tablePos);
|
|
158
|
+
if (!table) return;
|
|
159
|
+
const { state } = editor;
|
|
160
|
+
const { map } = table;
|
|
161
|
+
if (orientation === "row") {
|
|
162
|
+
if (newIndex >= 0 && newIndex < map.height) {
|
|
163
|
+
const startCol = 0;
|
|
164
|
+
const endCol = map.width - 1;
|
|
165
|
+
const startCellPos = table.start + map.positionAt(newIndex, startCol, table.node);
|
|
166
|
+
const endCellPos = table.start + map.positionAt(newIndex, endCol, table.node);
|
|
167
|
+
const $start = state.doc.resolve(startCellPos);
|
|
168
|
+
const $end = state.doc.resolve(endCellPos);
|
|
169
|
+
const newSelection = import_tables.CellSelection.create(
|
|
170
|
+
state.doc,
|
|
171
|
+
$start.pos,
|
|
172
|
+
$end.pos
|
|
173
|
+
);
|
|
174
|
+
const tr = state.tr.setSelection(newSelection);
|
|
175
|
+
editor.view.dispatch(tr);
|
|
176
|
+
}
|
|
177
|
+
} else if (orientation === "column") {
|
|
178
|
+
if (newIndex >= 0 && newIndex < map.width) {
|
|
179
|
+
const startRow = 0;
|
|
180
|
+
const endRow = map.height - 1;
|
|
181
|
+
const startCellPos = table.start + map.positionAt(startRow, newIndex, table.node);
|
|
182
|
+
const endCellPos = table.start + map.positionAt(endRow, newIndex, table.node);
|
|
183
|
+
const $start = state.doc.resolve(startCellPos);
|
|
184
|
+
const $end = state.doc.resolve(endCellPos);
|
|
185
|
+
const newSelection = import_tables.CellSelection.create(
|
|
186
|
+
state.doc,
|
|
187
|
+
$start.pos,
|
|
188
|
+
$end.pos
|
|
189
|
+
);
|
|
190
|
+
const tr = state.tr.setSelection(newSelection);
|
|
191
|
+
editor.view.dispatch(tr);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
} catch (error) {
|
|
195
|
+
console.warn("Failed to update selection after move:", error);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// src/messages.ts
|
|
200
|
+
var import_i18n = require("@kopexa/i18n");
|
|
201
|
+
var messages = (0, import_i18n.defineMessages)({
|
|
202
|
+
// Row/Column actions (aria labels)
|
|
203
|
+
row_actions: {
|
|
204
|
+
id: "editor.table.row_actions",
|
|
205
|
+
defaultMessage: "Row actions",
|
|
206
|
+
description: "ARIA label for row actions menu button"
|
|
207
|
+
},
|
|
208
|
+
column_actions: {
|
|
209
|
+
id: "editor.table.column_actions",
|
|
210
|
+
defaultMessage: "Column actions",
|
|
211
|
+
description: "ARIA label for column actions menu button"
|
|
212
|
+
},
|
|
213
|
+
cell_options: {
|
|
214
|
+
id: "editor.table.cell_options",
|
|
215
|
+
defaultMessage: "Table cells option",
|
|
216
|
+
description: "ARIA label for cell options menu button"
|
|
217
|
+
},
|
|
218
|
+
// Alignment
|
|
219
|
+
alignment: {
|
|
220
|
+
id: "editor.table.alignment",
|
|
221
|
+
defaultMessage: "Alignment",
|
|
222
|
+
description: "Label for alignment submenu"
|
|
223
|
+
},
|
|
224
|
+
align_left: {
|
|
225
|
+
id: "editor.table.align_left",
|
|
226
|
+
defaultMessage: "Align left",
|
|
227
|
+
description: "Label for align left action"
|
|
228
|
+
},
|
|
229
|
+
align_center: {
|
|
230
|
+
id: "editor.table.align_center",
|
|
231
|
+
defaultMessage: "Align center",
|
|
232
|
+
description: "Label for align center action"
|
|
233
|
+
},
|
|
234
|
+
align_right: {
|
|
235
|
+
id: "editor.table.align_right",
|
|
236
|
+
defaultMessage: "Align right",
|
|
237
|
+
description: "Label for align right action"
|
|
238
|
+
},
|
|
239
|
+
justify: {
|
|
240
|
+
id: "editor.table.justify",
|
|
241
|
+
defaultMessage: "Justify",
|
|
242
|
+
description: "Label for justify action"
|
|
243
|
+
},
|
|
244
|
+
align_top: {
|
|
245
|
+
id: "editor.table.align_top",
|
|
246
|
+
defaultMessage: "Align top",
|
|
247
|
+
description: "Label for vertical align top action"
|
|
248
|
+
},
|
|
249
|
+
align_middle: {
|
|
250
|
+
id: "editor.table.align_middle",
|
|
251
|
+
defaultMessage: "Align middle",
|
|
252
|
+
description: "Label for vertical align middle action"
|
|
253
|
+
},
|
|
254
|
+
align_bottom: {
|
|
255
|
+
id: "editor.table.align_bottom",
|
|
256
|
+
defaultMessage: "Align bottom",
|
|
257
|
+
description: "Label for vertical align bottom action"
|
|
258
|
+
},
|
|
259
|
+
// Add row/column
|
|
260
|
+
insert_row_above: {
|
|
261
|
+
id: "editor.table.insert_row_above",
|
|
262
|
+
defaultMessage: "Insert row above",
|
|
263
|
+
description: "Label for insert row above action"
|
|
264
|
+
},
|
|
265
|
+
insert_row_below: {
|
|
266
|
+
id: "editor.table.insert_row_below",
|
|
267
|
+
defaultMessage: "Insert row below",
|
|
268
|
+
description: "Label for insert row below action"
|
|
269
|
+
},
|
|
270
|
+
insert_column_left: {
|
|
271
|
+
id: "editor.table.insert_column_left",
|
|
272
|
+
defaultMessage: "Insert column left",
|
|
273
|
+
description: "Label for insert column left action"
|
|
274
|
+
},
|
|
275
|
+
insert_column_right: {
|
|
276
|
+
id: "editor.table.insert_column_right",
|
|
277
|
+
defaultMessage: "Insert column right",
|
|
278
|
+
description: "Label for insert column right action"
|
|
279
|
+
},
|
|
280
|
+
// Delete row/column
|
|
281
|
+
delete_row: {
|
|
282
|
+
id: "editor.table.delete_row",
|
|
283
|
+
defaultMessage: "Delete row",
|
|
284
|
+
description: "Label for delete row action"
|
|
285
|
+
},
|
|
286
|
+
delete_column: {
|
|
287
|
+
id: "editor.table.delete_column",
|
|
288
|
+
defaultMessage: "Delete column",
|
|
289
|
+
description: "Label for delete column action"
|
|
290
|
+
},
|
|
291
|
+
// Move row/column
|
|
292
|
+
move_row_up: {
|
|
293
|
+
id: "editor.table.move_row_up",
|
|
294
|
+
defaultMessage: "Move row up",
|
|
295
|
+
description: "Label for move row up action"
|
|
296
|
+
},
|
|
297
|
+
move_row_down: {
|
|
298
|
+
id: "editor.table.move_row_down",
|
|
299
|
+
defaultMessage: "Move row down",
|
|
300
|
+
description: "Label for move row down action"
|
|
301
|
+
},
|
|
302
|
+
move_column_left: {
|
|
303
|
+
id: "editor.table.move_column_left",
|
|
304
|
+
defaultMessage: "Move column left",
|
|
305
|
+
description: "Label for move column left action"
|
|
306
|
+
},
|
|
307
|
+
move_column_right: {
|
|
308
|
+
id: "editor.table.move_column_right",
|
|
309
|
+
defaultMessage: "Move column right",
|
|
310
|
+
description: "Label for move column right action"
|
|
311
|
+
},
|
|
312
|
+
// Sort
|
|
313
|
+
sort_row_asc: {
|
|
314
|
+
id: "editor.table.sort_row_asc",
|
|
315
|
+
defaultMessage: "Sort row A-Z",
|
|
316
|
+
description: "Label for sort row ascending action"
|
|
317
|
+
},
|
|
318
|
+
sort_row_desc: {
|
|
319
|
+
id: "editor.table.sort_row_desc",
|
|
320
|
+
defaultMessage: "Sort row Z-A",
|
|
321
|
+
description: "Label for sort row descending action"
|
|
322
|
+
},
|
|
323
|
+
sort_column_asc: {
|
|
324
|
+
id: "editor.table.sort_column_asc",
|
|
325
|
+
defaultMessage: "Sort column A-Z",
|
|
326
|
+
description: "Label for sort column ascending action"
|
|
327
|
+
},
|
|
328
|
+
sort_column_desc: {
|
|
329
|
+
id: "editor.table.sort_column_desc",
|
|
330
|
+
defaultMessage: "Sort column Z-A",
|
|
331
|
+
description: "Label for sort column descending action"
|
|
332
|
+
},
|
|
333
|
+
// Duplicate
|
|
334
|
+
duplicate_row: {
|
|
335
|
+
id: "editor.table.duplicate_row",
|
|
336
|
+
defaultMessage: "Duplicate row",
|
|
337
|
+
description: "Label for duplicate row action"
|
|
338
|
+
},
|
|
339
|
+
duplicate_column: {
|
|
340
|
+
id: "editor.table.duplicate_column",
|
|
341
|
+
defaultMessage: "Duplicate column",
|
|
342
|
+
description: "Label for duplicate column action"
|
|
343
|
+
},
|
|
344
|
+
// Header
|
|
345
|
+
header_row: {
|
|
346
|
+
id: "editor.table.header_row",
|
|
347
|
+
defaultMessage: "Header row",
|
|
348
|
+
description: "Label for toggle header row action"
|
|
349
|
+
},
|
|
350
|
+
header_column: {
|
|
351
|
+
id: "editor.table.header_column",
|
|
352
|
+
defaultMessage: "Header column",
|
|
353
|
+
description: "Label for toggle header column action"
|
|
354
|
+
},
|
|
355
|
+
// Merge/Split
|
|
356
|
+
merge_cells: {
|
|
357
|
+
id: "editor.table.merge_cells",
|
|
358
|
+
defaultMessage: "Merge cells",
|
|
359
|
+
description: "Label for merge cells action"
|
|
360
|
+
},
|
|
361
|
+
split_cell: {
|
|
362
|
+
id: "editor.table.split_cell",
|
|
363
|
+
defaultMessage: "Split cell",
|
|
364
|
+
description: "Label for split cell action"
|
|
365
|
+
},
|
|
366
|
+
// Clear contents
|
|
367
|
+
clear_row_contents: {
|
|
368
|
+
id: "editor.table.clear_row_contents",
|
|
369
|
+
defaultMessage: "Clear row contents",
|
|
370
|
+
description: "Label for clear row contents action"
|
|
371
|
+
},
|
|
372
|
+
clear_column_contents: {
|
|
373
|
+
id: "editor.table.clear_column_contents",
|
|
374
|
+
defaultMessage: "Clear column contents",
|
|
375
|
+
description: "Label for clear column contents action"
|
|
376
|
+
},
|
|
377
|
+
clear_contents: {
|
|
378
|
+
id: "editor.table.clear_contents",
|
|
379
|
+
defaultMessage: "Clear contents",
|
|
380
|
+
description: "Label for clear contents action (generic)"
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
// src/hooks/use-table-add-row-column.ts
|
|
385
|
+
var REQUIRED_EXTENSIONS = ["table"];
|
|
386
|
+
var addRowMessageKeys = {
|
|
387
|
+
above: messages.insert_row_above,
|
|
388
|
+
below: messages.insert_row_below
|
|
389
|
+
};
|
|
390
|
+
var addColumnMessageKeys = {
|
|
391
|
+
left: messages.insert_column_left,
|
|
392
|
+
right: messages.insert_column_right
|
|
393
|
+
};
|
|
394
|
+
function safeColumnIsHeader(map, node, index) {
|
|
395
|
+
try {
|
|
396
|
+
return (0, import_tables2.columnIsHeader)(map, node, index);
|
|
397
|
+
} catch {
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
function safeRowIsHeader(map, node, index) {
|
|
402
|
+
try {
|
|
403
|
+
return (0, import_tables2.rowIsHeader)(map, node, index);
|
|
404
|
+
} catch {
|
|
405
|
+
return false;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
function canAddRowColumn({
|
|
409
|
+
editor,
|
|
410
|
+
index,
|
|
411
|
+
orientation,
|
|
412
|
+
tablePos,
|
|
413
|
+
side
|
|
414
|
+
}) {
|
|
415
|
+
if (!editor || !editor.isEditable || !(0, import_editor_utils.isExtensionAvailable)(editor, REQUIRED_EXTENSIONS)) {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
const table = getTable(editor, tablePos);
|
|
419
|
+
if (!table) return false;
|
|
420
|
+
const selectionType = getTableSelectionType(editor, index, orientation);
|
|
421
|
+
if (!selectionType) return false;
|
|
422
|
+
const { map, node } = table;
|
|
423
|
+
const selIndex = selectionType.index;
|
|
424
|
+
const selOrient = selectionType.orientation;
|
|
425
|
+
if (typeof selIndex !== "number" || selIndex < 0) return false;
|
|
426
|
+
if (selOrient === "column" && selIndex >= map.width) return false;
|
|
427
|
+
if (selOrient === "row" && selIndex >= map.height) return false;
|
|
428
|
+
if (side === "left" && selOrient === "column") {
|
|
429
|
+
if (safeColumnIsHeader(map, node, selIndex)) return false;
|
|
430
|
+
}
|
|
431
|
+
if (side === "above" && selOrient === "row") {
|
|
432
|
+
if (safeRowIsHeader(map, node, selIndex)) return false;
|
|
433
|
+
}
|
|
434
|
+
return true;
|
|
435
|
+
}
|
|
436
|
+
function calculateNewIndex(index, orientation, side) {
|
|
437
|
+
if (orientation === "row") {
|
|
438
|
+
return side === "above" ? index : index + 1;
|
|
439
|
+
} else {
|
|
440
|
+
return side === "left" ? index : index + 1;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
function tableAddRowColumn({
|
|
444
|
+
editor,
|
|
445
|
+
index,
|
|
446
|
+
orientation,
|
|
447
|
+
side,
|
|
448
|
+
tablePos
|
|
449
|
+
}) {
|
|
450
|
+
if (!canAddRowColumn({ editor, index, orientation, tablePos, side }) || !editor) {
|
|
451
|
+
return false;
|
|
452
|
+
}
|
|
453
|
+
const selectionType = getTableSelectionType(editor, index, orientation);
|
|
454
|
+
if (!selectionType) return false;
|
|
455
|
+
const { orientation: finalOrientation, index: finalIndex } = selectionType;
|
|
456
|
+
const isRow = finalOrientation === "row";
|
|
457
|
+
const dispatch = (tr) => editor.view.dispatch(tr);
|
|
458
|
+
const addOperation = isRow ? side === "above" ? import_tables2.addRowBefore : import_tables2.addRowAfter : side === "left" ? import_tables2.addColumnBefore : import_tables2.addColumnAfter;
|
|
459
|
+
try {
|
|
460
|
+
let success = false;
|
|
461
|
+
if (editor.state.selection instanceof import_tables2.CellSelection) {
|
|
462
|
+
success = addOperation(editor.state, dispatch);
|
|
463
|
+
} else {
|
|
464
|
+
const table = getTable(editor, tablePos);
|
|
465
|
+
if (!table) return false;
|
|
466
|
+
const cellCoords = finalOrientation === "row" ? { row: finalIndex, col: 0 } : { row: 0, col: finalIndex };
|
|
467
|
+
const cellState = selectCellsByCoords(editor, table.pos, [cellCoords], {
|
|
468
|
+
mode: "state"
|
|
469
|
+
});
|
|
470
|
+
if (!cellState) return false;
|
|
471
|
+
success = addOperation(cellState, dispatch);
|
|
472
|
+
}
|
|
473
|
+
if (success) {
|
|
474
|
+
const newIndex = calculateNewIndex(finalIndex, finalOrientation, side);
|
|
475
|
+
updateSelectionAfterAction(editor, finalOrientation, newIndex, tablePos);
|
|
476
|
+
}
|
|
477
|
+
return success;
|
|
478
|
+
} catch (error) {
|
|
479
|
+
console.error("Error adding row/column:", error);
|
|
480
|
+
return false;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
function shouldShowButton({
|
|
484
|
+
editor,
|
|
485
|
+
index,
|
|
486
|
+
orientation,
|
|
487
|
+
tablePos,
|
|
488
|
+
side,
|
|
489
|
+
hideWhenUnavailable
|
|
490
|
+
}) {
|
|
491
|
+
if (!editor || !editor.isEditable) return false;
|
|
492
|
+
if (!(0, import_editor_utils.isExtensionAvailable)(editor, REQUIRED_EXTENSIONS)) return false;
|
|
493
|
+
if (hideWhenUnavailable) {
|
|
494
|
+
return canAddRowColumn({ editor, index, orientation, tablePos, side });
|
|
495
|
+
}
|
|
496
|
+
const selectionType = getTableSelectionType(editor, index, orientation);
|
|
497
|
+
return Boolean(selectionType);
|
|
498
|
+
}
|
|
499
|
+
function useTableAddRowColumn(config) {
|
|
500
|
+
const {
|
|
501
|
+
editor: providedEditor,
|
|
502
|
+
index,
|
|
503
|
+
orientation,
|
|
504
|
+
side,
|
|
505
|
+
tablePos,
|
|
506
|
+
hideWhenUnavailable = false,
|
|
507
|
+
onAdded
|
|
508
|
+
} = config;
|
|
509
|
+
const { editor } = (0, import_editor_utils.useTiptapEditor)(providedEditor);
|
|
510
|
+
const intl = (0, import_i18n2.useSafeIntl)();
|
|
511
|
+
const selectionType = getTableSelectionType(editor, index, orientation);
|
|
512
|
+
const isVisible = shouldShowButton({
|
|
513
|
+
editor,
|
|
514
|
+
index,
|
|
515
|
+
orientation,
|
|
516
|
+
tablePos,
|
|
517
|
+
side,
|
|
518
|
+
hideWhenUnavailable
|
|
519
|
+
});
|
|
520
|
+
const canPerformAdd = canAddRowColumn({
|
|
521
|
+
editor,
|
|
522
|
+
index,
|
|
523
|
+
orientation,
|
|
524
|
+
tablePos,
|
|
525
|
+
side
|
|
526
|
+
});
|
|
527
|
+
const handleAdd = (0, import_react.useCallback)(() => {
|
|
528
|
+
const success = tableAddRowColumn({
|
|
529
|
+
editor,
|
|
530
|
+
index,
|
|
531
|
+
orientation,
|
|
532
|
+
tablePos,
|
|
533
|
+
side
|
|
534
|
+
});
|
|
535
|
+
if (success) onAdded == null ? void 0 : onAdded();
|
|
536
|
+
return success;
|
|
537
|
+
}, [editor, index, orientation, tablePos, side, onAdded]);
|
|
538
|
+
const label = (selectionType == null ? void 0 : selectionType.orientation) === "row" ? intl.formatMessage(addRowMessageKeys[side]) : intl.formatMessage(addColumnMessageKeys[side]);
|
|
539
|
+
const Icon = (selectionType == null ? void 0 : selectionType.orientation) === "row" ? side === "above" ? import_icons.AddRowTopIcon : import_icons.AddRowBottomIcon : side === "left" ? import_icons.AddColLeftIcon : import_icons.AddColRightIcon;
|
|
540
|
+
return {
|
|
541
|
+
isVisible,
|
|
542
|
+
canAddRowColumn: canPerformAdd,
|
|
543
|
+
handleAdd,
|
|
544
|
+
label,
|
|
545
|
+
Icon
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
549
|
+
0 && (module.exports = {
|
|
550
|
+
useTableAddRowColumn
|
|
551
|
+
});
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { Editor } from '@tiptap/react';
|
|
3
|
+
import { Orientation } from '../lib/table-utils.mjs';
|
|
4
|
+
import '@tiptap/pm/model';
|
|
5
|
+
import '@tiptap/pm/state';
|
|
6
|
+
import '@tiptap/pm/tables';
|
|
7
|
+
|
|
8
|
+
type TextAlignment = "left" | "center" | "right" | "justify";
|
|
9
|
+
type VerticalAlignment = "top" | "middle" | "bottom";
|
|
10
|
+
type AlignmentType = "text" | "vertical";
|
|
11
|
+
interface UseTableAlignCellConfig {
|
|
12
|
+
/**
|
|
13
|
+
* The Tiptap editor instance. If omitted, the hook will use
|
|
14
|
+
* the context/editor from `useTiptapEditor`.
|
|
15
|
+
*/
|
|
16
|
+
editor?: Editor | null;
|
|
17
|
+
/**
|
|
18
|
+
* The type of alignment to apply.
|
|
19
|
+
*/
|
|
20
|
+
alignmentType: AlignmentType;
|
|
21
|
+
/**
|
|
22
|
+
* The alignment value to set.
|
|
23
|
+
*/
|
|
24
|
+
alignment: TextAlignment | VerticalAlignment;
|
|
25
|
+
/**
|
|
26
|
+
* Optional index of the row or column to align.
|
|
27
|
+
* If provided along with orientation, aligns all cells in that row/column.
|
|
28
|
+
* If not provided, aligns the currently selected cell(s).
|
|
29
|
+
*/
|
|
30
|
+
index?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Optional orientation when using index.
|
|
33
|
+
* Determines whether to align a row or column.
|
|
34
|
+
*/
|
|
35
|
+
orientation?: Orientation;
|
|
36
|
+
/**
|
|
37
|
+
* Hide the button when alignment isn't currently possible.
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
hideWhenUnavailable?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Callback function called after successful alignment change.
|
|
43
|
+
*/
|
|
44
|
+
onAligned?: (alignment: TextAlignment | VerticalAlignment) => void;
|
|
45
|
+
}
|
|
46
|
+
declare const tableAlignCellIcons: {
|
|
47
|
+
text: Record<TextAlignment, React.ComponentType<{
|
|
48
|
+
className?: string;
|
|
49
|
+
}>>;
|
|
50
|
+
vertical: Record<VerticalAlignment, React.ComponentType<{
|
|
51
|
+
className?: string;
|
|
52
|
+
}>>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Custom hook that provides **table cell alignment**
|
|
56
|
+
* functionality for the Tiptap editor.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```tsx
|
|
60
|
+
* // Simple text alignment button
|
|
61
|
+
* function AlignLeftButton() {
|
|
62
|
+
* const { isVisible, handleAlign, canAlignCell, isActive, label, Icon } = useTableAlignCell({
|
|
63
|
+
* alignmentType: "text",
|
|
64
|
+
* alignment: "left",
|
|
65
|
+
* hideWhenUnavailable: true,
|
|
66
|
+
* onAligned: (alignment) => console.log(`Aligned to: ${alignment}`),
|
|
67
|
+
* })
|
|
68
|
+
*
|
|
69
|
+
* if (!isVisible) return null
|
|
70
|
+
*
|
|
71
|
+
* return (
|
|
72
|
+
* <button
|
|
73
|
+
* onClick={handleAlign}
|
|
74
|
+
* disabled={!canAlignCell}
|
|
75
|
+
* aria-pressed={isActive}
|
|
76
|
+
* aria-label={label}
|
|
77
|
+
* >
|
|
78
|
+
* <Icon /> {label}
|
|
79
|
+
* </button>
|
|
80
|
+
* )
|
|
81
|
+
* }
|
|
82
|
+
*
|
|
83
|
+
* // Align entire row vertically
|
|
84
|
+
* function AlignRowTopButton({ rowIndex }: { rowIndex: number }) {
|
|
85
|
+
* const { isVisible, handleAlign, label, Icon } = useTableAlignCell({
|
|
86
|
+
* alignmentType: "vertical",
|
|
87
|
+
* alignment: "top",
|
|
88
|
+
* index: rowIndex,
|
|
89
|
+
* orientation: "row",
|
|
90
|
+
* hideWhenUnavailable: true,
|
|
91
|
+
* })
|
|
92
|
+
*
|
|
93
|
+
* if (!isVisible) return null
|
|
94
|
+
*
|
|
95
|
+
* return (
|
|
96
|
+
* <button onClick={handleAlign} aria-label={label}>
|
|
97
|
+
* <Icon /> {label}
|
|
98
|
+
* </button>
|
|
99
|
+
* )
|
|
100
|
+
* }
|
|
101
|
+
*
|
|
102
|
+
* // Alignment toolbar for selected cell
|
|
103
|
+
* function CellAlignmentToolbar() {
|
|
104
|
+
* const alignments: TextAlignment[] = ["left", "center", "right", "justify"]
|
|
105
|
+
*
|
|
106
|
+
* return (
|
|
107
|
+
* <div role="toolbar" aria-label="Text alignment">
|
|
108
|
+
* {alignments.map((alignment) => {
|
|
109
|
+
* const { isVisible, handleAlign, canAlignCell, isActive, Icon } = useTableAlignCell({
|
|
110
|
+
* alignmentType: "text",
|
|
111
|
+
* alignment,
|
|
112
|
+
* hideWhenUnavailable: true,
|
|
113
|
+
* })
|
|
114
|
+
*
|
|
115
|
+
* if (!isVisible) return null
|
|
116
|
+
*
|
|
117
|
+
* return (
|
|
118
|
+
* <button
|
|
119
|
+
* key={alignment}
|
|
120
|
+
* onClick={handleAlign}
|
|
121
|
+
* disabled={!canAlignCell}
|
|
122
|
+
* aria-pressed={isActive}
|
|
123
|
+
* title={`Align ${alignment}`}
|
|
124
|
+
* >
|
|
125
|
+
* <Icon />
|
|
126
|
+
* </button>
|
|
127
|
+
* )
|
|
128
|
+
* })}
|
|
129
|
+
* </div>
|
|
130
|
+
* )
|
|
131
|
+
* }
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
declare function useTableAlignCell(config: UseTableAlignCellConfig): {
|
|
135
|
+
isVisible: boolean;
|
|
136
|
+
canAlignCell: () => boolean;
|
|
137
|
+
handleAlign: () => boolean;
|
|
138
|
+
label: string;
|
|
139
|
+
Icon: react.ComponentClass<{
|
|
140
|
+
className?: string;
|
|
141
|
+
}, any> | react.FunctionComponent<{
|
|
142
|
+
className?: string;
|
|
143
|
+
}>;
|
|
144
|
+
isActive: boolean;
|
|
145
|
+
currentAlignment: TextAlignment | VerticalAlignment | null;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
export { type AlignmentType, type TextAlignment, type UseTableAlignCellConfig, type VerticalAlignment, tableAlignCellIcons, useTableAlignCell };
|