@quadrats/react 1.0.0 → 1.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 (119) hide show
  1. package/card/components/Card.js +83 -75
  2. package/card/index.cjs.js +82 -74
  3. package/carousel/components/Carousel.js +32 -28
  4. package/carousel/index.cjs.js +32 -28
  5. package/components/Tooltip/index.js +5 -2
  6. package/components/index.cjs.js +5 -2
  7. package/core/components/Quadrats.js +5 -2
  8. package/core/contexts/modal/CarouselModal/CarouselModal.js +14 -17
  9. package/embed/renderers/base/components/BaseEmbedElement.js +51 -43
  10. package/embed/renderers/base/index.cjs.js +50 -42
  11. package/image/components/Image.js +34 -26
  12. package/image/createReactImage.js +1 -1
  13. package/image/index.cjs.js +34 -26
  14. package/index.cjs.js +19 -19
  15. package/package.json +4 -4
  16. package/table/components/ColumnDragButton.d.ts +10 -0
  17. package/table/components/ColumnDragButton.js +41 -0
  18. package/table/components/RowDragButton.d.ts +10 -0
  19. package/table/components/RowDragButton.js +42 -0
  20. package/table/components/Table.d.ts +9 -0
  21. package/table/components/Table.js +236 -0
  22. package/table/components/TableBody.d.ts +5 -0
  23. package/table/components/TableBody.js +8 -0
  24. package/table/components/TableCell.d.ts +5 -0
  25. package/table/components/TableCell.js +297 -0
  26. package/table/components/TableDragLayer.d.ts +6 -0
  27. package/table/components/TableDragLayer.js +89 -0
  28. package/table/components/TableHeader.d.ts +5 -0
  29. package/table/components/TableHeader.js +13 -0
  30. package/table/components/TableMain.d.ts +5 -0
  31. package/table/components/TableMain.js +233 -0
  32. package/table/components/TableRow.d.ts +5 -0
  33. package/table/components/TableRow.js +8 -0
  34. package/table/components/TableTitle.d.ts +5 -0
  35. package/table/components/TableTitle.js +18 -0
  36. package/table/contexts/TableActionsContext.d.ts +3 -0
  37. package/table/contexts/TableActionsContext.js +5 -0
  38. package/table/contexts/TableDragContext.d.ts +26 -0
  39. package/table/contexts/TableDragContext.js +26 -0
  40. package/table/contexts/TableHeaderContext.d.ts +2 -0
  41. package/table/contexts/TableHeaderContext.js +7 -0
  42. package/table/contexts/TableMetadataContext.d.ts +3 -0
  43. package/table/contexts/TableMetadataContext.js +5 -0
  44. package/table/contexts/TableScrollContext.d.ts +2 -0
  45. package/table/contexts/TableScrollContext.js +9 -0
  46. package/table/contexts/TableStateContext.d.ts +3 -0
  47. package/table/contexts/TableStateContext.js +5 -0
  48. package/table/createReactTable.d.ts +4 -0
  49. package/table/createReactTable.js +297 -0
  50. package/table/defaultRenderTableElements.d.ts +2 -0
  51. package/table/defaultRenderTableElements.js +20 -0
  52. package/table/hooks/useColumnResize.d.ts +12 -0
  53. package/table/hooks/useColumnResize.js +168 -0
  54. package/table/hooks/useTableActions.d.ts +27 -0
  55. package/table/hooks/useTableActions.js +1092 -0
  56. package/table/hooks/useTableActionsContext.d.ts +1 -0
  57. package/table/hooks/useTableActionsContext.js +12 -0
  58. package/table/hooks/useTableCell.d.ts +16 -0
  59. package/table/hooks/useTableCell.js +166 -0
  60. package/table/hooks/useTableCellToolbarActions.d.ts +34 -0
  61. package/table/hooks/useTableCellToolbarActions.js +526 -0
  62. package/table/hooks/useTableMetadata.d.ts +1 -0
  63. package/table/hooks/useTableMetadata.js +12 -0
  64. package/table/hooks/useTableStateContext.d.ts +1 -0
  65. package/table/hooks/useTableStateContext.js +12 -0
  66. package/table/hooks/useTableStates.d.ts +18 -0
  67. package/table/hooks/useTableStates.js +14 -0
  68. package/table/index.cjs.js +4002 -0
  69. package/table/index.d.ts +16 -0
  70. package/table/index.js +27 -0
  71. package/table/jsx-serializer/components/Table.d.ts +3 -0
  72. package/table/jsx-serializer/components/Table.js +7 -0
  73. package/table/jsx-serializer/components/TableBody.d.ts +3 -0
  74. package/table/jsx-serializer/components/TableBody.js +7 -0
  75. package/table/jsx-serializer/components/TableCell.d.ts +5 -0
  76. package/table/jsx-serializer/components/TableCell.js +33 -0
  77. package/table/jsx-serializer/components/TableHeader.d.ts +3 -0
  78. package/table/jsx-serializer/components/TableHeader.js +10 -0
  79. package/table/jsx-serializer/components/TableMain.d.ts +6 -0
  80. package/table/jsx-serializer/components/TableMain.js +18 -0
  81. package/table/jsx-serializer/components/TableRow.d.ts +3 -0
  82. package/table/jsx-serializer/components/TableRow.js +7 -0
  83. package/table/jsx-serializer/components/TableTitle.d.ts +3 -0
  84. package/table/jsx-serializer/components/TableTitle.js +7 -0
  85. package/table/jsx-serializer/contexts/TableHeaderContext.d.ts +1 -0
  86. package/table/jsx-serializer/contexts/TableHeaderContext.js +5 -0
  87. package/table/jsx-serializer/contexts/TableScrollContext.d.ts +2 -0
  88. package/table/jsx-serializer/contexts/TableScrollContext.js +7 -0
  89. package/table/jsx-serializer/createJsxSerializeTable.d.ts +5 -0
  90. package/table/jsx-serializer/createJsxSerializeTable.js +113 -0
  91. package/table/jsx-serializer/defaultRenderTableElements.d.ts +2 -0
  92. package/table/jsx-serializer/defaultRenderTableElements.js +20 -0
  93. package/table/jsx-serializer/index.cjs.js +195 -0
  94. package/table/jsx-serializer/index.d.ts +3 -0
  95. package/table/jsx-serializer/index.js +2 -0
  96. package/table/jsx-serializer/package.json +7 -0
  97. package/table/jsx-serializer/typings.d.ts +12 -0
  98. package/table/package.json +10 -0
  99. package/table/table.css +1 -0
  100. package/table/table.scss +428 -0
  101. package/table/toolbar/TableToolbarIcon.d.ts +8 -0
  102. package/table/toolbar/TableToolbarIcon.js +12 -0
  103. package/table/toolbar/index.cjs.js +24 -0
  104. package/table/toolbar/index.d.ts +2 -0
  105. package/table/toolbar/index.js +2 -0
  106. package/table/toolbar/package.json +7 -0
  107. package/table/toolbar/useTableTool.d.ts +4 -0
  108. package/table/toolbar/useTableTool.js +13 -0
  109. package/table/typings.d.ts +68 -0
  110. package/table/utils/helper.d.ts +186 -0
  111. package/table/utils/helper.js +799 -0
  112. package/toolbar/components/InlineToolbar.d.ts +12 -11
  113. package/toolbar/components/InlineToolbar.js +23 -19
  114. package/toolbar/components/Toolbar.js +2 -2
  115. package/toolbar/index.cjs.js +24 -21
  116. package/toolbar/toolbar.css +1 -1
  117. package/toolbar/toolbar.scss +4 -1
  118. package/utils/index.cjs.js +7 -1
  119. package/utils/removePreviousElement.js +7 -1
@@ -0,0 +1,428 @@
1
+ $cell-action-z-index: 9;
2
+ $toolbar-z-index: 10;
3
+
4
+ @mixin add-btn {
5
+ position: absolute;
6
+ z-index: 0;
7
+ cursor: pointer;
8
+ padding: 0;
9
+ background-color: var(--qdr-block);
10
+ border-radius: var(--qdr-radius-1);
11
+ border: 1px solid var(--qdr-divider);
12
+ display: flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+
16
+ &:hover {
17
+ background-color: var(--qdr-bg);
18
+
19
+ .qdr-table__btn-icon {
20
+ color: var(--qdr-text-secondary);
21
+ }
22
+ }
23
+
24
+ &:active {
25
+ background-color: var(--qdr-divider);
26
+ border: 1px solid var(--qdr-border);
27
+
28
+ .qdr-table__btn-icon {
29
+ color: var(--qdr-text-secondary);
30
+ }
31
+ }
32
+ }
33
+
34
+ @mixin cell-action {
35
+ position: absolute;
36
+ z-index: $cell-action-z-index;
37
+ width: 20px;
38
+ height: 24px;
39
+ padding: 0;
40
+ border-radius: var(--qdr-radius-1);
41
+ border: 1px solid var(--qdr-primary-active-bg);
42
+ background-color: var(--qdr-primary-hover-bg);
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ pointer-events: auto;
47
+ cursor: pointer;
48
+ opacity: 1;
49
+
50
+ &--dragging {
51
+ border: 1px solid var(--qdr-divider);
52
+ background-color: var(--qdr-bg);
53
+ cursor: grabbing;
54
+ }
55
+ }
56
+
57
+ @mixin cell-selected($border-position) {
58
+ border-#{$border-position}: 2px solid var(--qdr-primary-light) !important;
59
+ }
60
+
61
+ @mixin title-bg {
62
+ background-color: var(--qdr-bg);
63
+ }
64
+
65
+ .qdr-table__table-toolbar {
66
+ right: unset;
67
+ left: 50%;
68
+ top: -4px;
69
+ transform: translate(-50%, -100%);
70
+ }
71
+
72
+ .qdr-table {
73
+ display: flex;
74
+ flex-flow: column;
75
+ align-items: flex-start;
76
+ gap: var(--qdr-spacing-4);
77
+ margin: var(--qdr-spacing-11) 0;
78
+ position: relative;
79
+
80
+ &__selection {
81
+ padding: 0;
82
+ position: absolute;
83
+ left: -22px;
84
+ top: 0;
85
+ z-index: 0;
86
+ width: 20px;
87
+ height: 20px;
88
+ color: var(--qdr-action-inactive);
89
+ border: none;
90
+ border-radius: var(--qdr-radius-1);
91
+ background-color: transparent;
92
+ display: flex;
93
+ align-items: center;
94
+ justify-content: center;
95
+ cursor: pointer;
96
+
97
+ &:hover {
98
+ background-color: var(--qdr-secondary-active-bg);
99
+ color: var(--qdr-action-active);
100
+ }
101
+ }
102
+
103
+ &__portal-container {
104
+ position: relative;
105
+ pointer-events: none;
106
+ }
107
+
108
+ &__title {
109
+ width: 100%;
110
+ display: block;
111
+ position: relative;
112
+ margin: 0;
113
+ font-size: var(--qdr-typography-article-h6-font-size);
114
+ line-height: var(--qdr-typography-article-h6-line-height);
115
+ letter-spacing: var(--qdr-typography-article-h6-letter-spacing);
116
+ font-weight: var(--qdr-typography-article-h6-font-weight);
117
+ color: var(--qdr-text-primary);
118
+ background-color: var(--qdr-surface-secondary);
119
+
120
+ &__placeholder {
121
+ position: absolute;
122
+ left: 0;
123
+ top: 0;
124
+ color: var(--qdr-text-secondary);
125
+ pointer-events: none;
126
+ }
127
+ }
128
+
129
+ &__header {
130
+ @include title-bg();
131
+
132
+ &--pinned {
133
+ position: sticky;
134
+ z-index: 2;
135
+ top: 0;
136
+ box-shadow: 0 2px 4px -2px #00000026;
137
+ }
138
+ }
139
+
140
+ &__scrollContainer {
141
+ width: 100%;
142
+ max-width: 100%;
143
+ max-height: 420px;
144
+ overflow: auto;
145
+ scrollbar-width: thin;
146
+ position: relative;
147
+ }
148
+
149
+ &__main {
150
+ margin: 0;
151
+ border-collapse: separate;
152
+ border-spacing: 0;
153
+ table-layout: fixed;
154
+
155
+ th:not(:first-child),
156
+ td:not(:first-child) {
157
+ border-left: none;
158
+ }
159
+
160
+ thead tr:not(:last-child) th,
161
+ tbody tr:not(:last-child) td {
162
+ border-bottom: none;
163
+ }
164
+ }
165
+
166
+ &__inline-table-toolbar,
167
+ &__cell__inline-table-toolbar {
168
+ pointer-events: none;
169
+ top: -50px;
170
+ left: 0;
171
+ right: unset;
172
+ }
173
+
174
+ &__mainWrapper {
175
+ width: 100%;
176
+ max-width: 100%;
177
+ height: 100%;
178
+ position: relative;
179
+
180
+ &--selected {
181
+ .qdr-table__main {
182
+ border: 2px solid var(--qdr-primary);
183
+ }
184
+
185
+ .qdr-table__table-toolbar {
186
+ opacity: 1;
187
+ pointer-events: auto;
188
+ }
189
+ }
190
+ }
191
+
192
+ &__body {
193
+ background-color: var(--qdr-surface-primary);
194
+ }
195
+
196
+ &__cell {
197
+ position: relative;
198
+ padding: var(--qdr-spacing-3) var(--qdr-spacing-4);
199
+ font-size: var(--qdr-typography-article-body1-font-size);
200
+ line-height: var(--qdr-typography-article-body1-line-height);
201
+ letter-spacing: var(--qdr-typography-article-body1-letter-spacing);
202
+ font-weight: var(--qdr-typography-article-body1-font-weight);
203
+ color: var(--qdr-text-primary);
204
+ text-align: left;
205
+ border-top: 1px solid var(--qdr-border);
206
+ border-right: 1px solid var(--qdr-border);
207
+ border-bottom: 1px solid var(--qdr-border);
208
+ border-left: 1px solid var(--qdr-border);
209
+ vertical-align: top;
210
+ word-break: break-all;
211
+
212
+ p,
213
+ ul,
214
+ ol {
215
+ margin: 0;
216
+ }
217
+
218
+ &--resizing {
219
+ &::after {
220
+ content: '';
221
+ position: absolute;
222
+ right: 0;
223
+ top: 0;
224
+ width: 2px;
225
+ height: 100%;
226
+ background-color: var(--qdr-primary-light);
227
+ pointer-events: none;
228
+ opacity: 1;
229
+ }
230
+ }
231
+
232
+ &__resize-handle {
233
+ position: absolute;
234
+ right: 0;
235
+ top: 0;
236
+ width: 6px;
237
+ height: 100%;
238
+ transform: translateX(0);
239
+ cursor: col-resize;
240
+ z-index: 1;
241
+ }
242
+
243
+ &--header {
244
+ font-weight: var(--qdr-typography-article-h6-font-weight);
245
+ color: var(--qdr-text-primary);
246
+ @include title-bg();
247
+ }
248
+
249
+ &--pinned {
250
+ position: sticky;
251
+ z-index: 1;
252
+ left: 0;
253
+ box-shadow: 2px 0 4px -2px #00000026;
254
+ }
255
+
256
+ &--top-active {
257
+ @include cell-selected('top');
258
+ }
259
+
260
+ &--right-active {
261
+ @include cell-selected('right');
262
+ }
263
+
264
+ &--bottom-active {
265
+ @include cell-selected('bottom');
266
+ }
267
+
268
+ &--left-active {
269
+ @include cell-selected('left');
270
+ }
271
+
272
+ &--drag-row-target-top {
273
+ border-top: 2px solid var(--qdr-error) !important;
274
+ }
275
+
276
+ &--drag-row-target-bottom {
277
+ border-bottom: 2px solid var(--qdr-error) !important;
278
+ }
279
+
280
+ &--drag-column-target-left {
281
+ border-left: 2px solid var(--qdr-error) !important;
282
+ }
283
+
284
+ &--drag-column-target-right {
285
+ border-right: 2px solid var(--qdr-error) !important;
286
+ }
287
+ }
288
+
289
+ &__drag-overlay {
290
+ position: fixed;
291
+ pointer-events: none;
292
+ z-index: 9999;
293
+ will-change: transform;
294
+
295
+ .qdr-table__drag-overlay-content {
296
+ width: 100%;
297
+ height: 100%;
298
+ background-color: var(--qdr-primary-hover-bg);
299
+ }
300
+ }
301
+
302
+ &__btn-icon {
303
+ color: var(--qdr-action-disabled);
304
+ pointer-events: none;
305
+ }
306
+
307
+ &__add-column {
308
+ @include add-btn();
309
+
310
+ right: -24px;
311
+ top: 0;
312
+ width: 20px;
313
+ height: 100%;
314
+ }
315
+
316
+ &__add-row {
317
+ @include add-btn();
318
+
319
+ bottom: -24px;
320
+ left: 0;
321
+ width: 100%;
322
+ height: 20px;
323
+ }
324
+
325
+ &__add-both {
326
+ @include add-btn();
327
+
328
+ right: -24px;
329
+ bottom: -24px;
330
+ width: 20px;
331
+ height: 20px;
332
+ }
333
+
334
+ &__delete {
335
+ color: var(--qdr-error);
336
+ }
337
+ }
338
+
339
+ // 為了解決 toolbar 顯示時,因為位置錯誤而導致的閃爍問題
340
+ // 讓 toolbar 出現時稍晚一些
341
+ @keyframes fade-in {
342
+ 0% {
343
+ opacity: 0;
344
+ }
345
+
346
+ 100% {
347
+ opacity: 1;
348
+ }
349
+ }
350
+
351
+ .qdr-table__cell__focus-toolbar,
352
+ .qdr-table__cell__inline-table-toolbar {
353
+ position: absolute;
354
+ right: unset;
355
+ transform: translate(-10%, -100%);
356
+ padding: 4px;
357
+ border-radius: 10px;
358
+ border: 1px solid var(--qdr-border);
359
+ background: var(--qdr-bg);
360
+ box-shadow:
361
+ 0 4px 8px -2px #0000001a,
362
+ 0 2px 4px -2px #0000000a;
363
+ animation-name: fade-in;
364
+ animation-duration: 0.1s;
365
+ animation-delay: 0.1s;
366
+ animation-iteration-count: 1;
367
+ animation-fill-mode: forwards;
368
+ animation-timing-function: linear;
369
+ pointer-events: auto;
370
+ z-index: $toolbar-z-index;
371
+ }
372
+
373
+ .qdr-table__cell-row-action {
374
+ @include cell-action();
375
+ }
376
+
377
+ .qdr-table__cell-column-action {
378
+ @include cell-action();
379
+
380
+ transform: rotate(90deg);
381
+ transform-origin: center;
382
+ }
383
+
384
+ .qdr-table__size-indicators {
385
+ display: none;
386
+ overflow: hidden;
387
+ position: absolute;
388
+ z-index: 1;
389
+ left: 0;
390
+ top: 0;
391
+ width: 100%;
392
+ max-width: 100%;
393
+ padding: 8px 0;
394
+ pointer-events: none;
395
+ transform: translateY(-100%);
396
+ flex-flow: row nowrap;
397
+ align-items: center;
398
+ }
399
+
400
+ .qdr-table__size-indicator {
401
+ display: flex;
402
+ align-items: center;
403
+ justify-content: center;
404
+ position: relative;
405
+ }
406
+
407
+ .qdr-table__size {
408
+ background-color: var(--qdr-action-inactive);
409
+ color: var(--qdr-on-primary);
410
+ padding: 4px 8px;
411
+ font-size: 12px;
412
+ white-space: pre-wrap;
413
+ position: relative;
414
+
415
+ &::after {
416
+ position: absolute;
417
+ content: '';
418
+ z-index: -1;
419
+ top: calc(100% - 2px);
420
+ left: 50%;
421
+ width: 10px;
422
+ height: 10px;
423
+ background-color: var(--qdr-action-inactive);
424
+ border-right: 1px solid var(--qdr-action-inactive);
425
+ border-bottom: 1px solid var(--qdr-action-inactive);
426
+ transform: translateX(-50%) translateY(-50%) rotate(45deg);
427
+ }
428
+ }
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { ToolbarIconProps } from '@quadrats/react/toolbar';
3
+ import { ReactTable } from '@quadrats/react/table';
4
+ export interface TableToolbarIconProps extends Omit<ToolbarIconProps, 'active' | 'onClick'> {
5
+ controller: ReactTable;
6
+ }
7
+ declare function TableToolbarIcon(props: TableToolbarIconProps): React.JSX.Element;
8
+ export default TableToolbarIcon;
@@ -0,0 +1,12 @@
1
+ import { __rest } from 'tslib';
2
+ import React from 'react';
3
+ import { ToolbarIcon } from '@quadrats/react/toolbar';
4
+ import { useTableTool } from './useTableTool.js';
5
+
6
+ function TableToolbarIcon(props) {
7
+ const { controller } = props, rest = __rest(props, ["controller"]);
8
+ const { insert } = useTableTool(controller);
9
+ return React.createElement(ToolbarIcon, Object.assign({}, rest, { onClick: insert }));
10
+ }
11
+
12
+ export { TableToolbarIcon as default };
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var react = require('@quadrats/react');
5
+ var tslib = require('tslib');
6
+ var toolbar = require('@quadrats/react/toolbar');
7
+
8
+ function useTableTool(table) {
9
+ const editor = react.useQuadrats();
10
+ const insert = React.useCallback(() => {
11
+ // Insert a 3x3 table
12
+ table.insertTable(editor, 3, 3);
13
+ }, [editor, table]);
14
+ return { insert };
15
+ }
16
+
17
+ function TableToolbarIcon(props) {
18
+ const { controller } = props, rest = tslib.__rest(props, ["controller"]);
19
+ const { insert } = useTableTool(controller);
20
+ return React.createElement(toolbar.ToolbarIcon, Object.assign({}, rest, { onClick: insert }));
21
+ }
22
+
23
+ exports.TableToolbarIcon = TableToolbarIcon;
24
+ exports.useTableTool = useTableTool;
@@ -0,0 +1,2 @@
1
+ export { useTableTool } from './useTableTool';
2
+ export { default as TableToolbarIcon } from './TableToolbarIcon';
@@ -0,0 +1,2 @@
1
+ export { useTableTool } from './useTableTool.js';
2
+ export { default as TableToolbarIcon } from './TableToolbarIcon.js';
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "@quadrats/react/table/toolbar",
3
+ "sideEffects": false,
4
+ "main": "./index.cjs.js",
5
+ "module": "./index.js",
6
+ "typings": "./index.d.ts"
7
+ }
@@ -0,0 +1,4 @@
1
+ import { ReactTable } from '@quadrats/react/table';
2
+ export declare function useTableTool(table: ReactTable): {
3
+ insert: () => void;
4
+ };
@@ -0,0 +1,13 @@
1
+ import { useCallback } from 'react';
2
+ import { useQuadrats } from '@quadrats/react';
3
+
4
+ function useTableTool(table) {
5
+ const editor = useQuadrats();
6
+ const insert = useCallback(() => {
7
+ // Insert a 3x3 table
8
+ table.insertTable(editor, 3, 3);
9
+ }, [editor, table]);
10
+ return { insert };
11
+ }
12
+
13
+ export { useTableTool };
@@ -0,0 +1,68 @@
1
+ import { Editor } from '@quadrats/core';
2
+ import { Table, TableElement, TableTypeKey, TableTitleTypeKey, TableMainTypeKey, TableHeaderTypeKey, TableRowTypeKey, TableCellTypeKey, TableBodyTypeKey } from '@quadrats/common/table';
3
+ import { WithCreateHandlers, WithCreateRenderElement, RenderElementProps, ReactWithable } from '@quadrats/react';
4
+ import { Dispatch, SetStateAction, RefObject } from 'react';
5
+ export type TableHeaderContextType = {
6
+ isHeader: boolean;
7
+ };
8
+ export type TableContextType = {
9
+ tableElement: TableElement;
10
+ columnCount: number;
11
+ rowCount: number;
12
+ portalContainerRef: RefObject<HTMLDivElement | null>;
13
+ pinnedColumns: Set<number>;
14
+ pinnedRows: Set<number>;
15
+ cellPositions: Map<TableElement, {
16
+ columnIndex: number;
17
+ rowIndex: number;
18
+ }>;
19
+ addColumn: (options?: {
20
+ position?: 'left' | 'right';
21
+ columnIndex?: number;
22
+ }) => void;
23
+ addRow: (options?: {
24
+ position?: 'top' | 'bottom';
25
+ rowIndex?: number;
26
+ }) => void;
27
+ addColumnAndRow: VoidFunction;
28
+ deleteRow: (rowIndex: number) => void;
29
+ deleteColumn: (columnIndex: number) => void;
30
+ moveRowToBody: (rowIndex: number) => void;
31
+ moveRowToHeader: (rowIndex: number, customProps?: Pick<TableElement, 'pinned'>) => void;
32
+ unsetColumnAsTitle: (columnIndex: number) => void;
33
+ setColumnAsTitle: (columnIndex: number, customProps?: Pick<TableElement, 'pinned'>) => void;
34
+ pinColumn: (columnIndex: number) => void;
35
+ unpinColumn: () => void;
36
+ pinRow: (rowIndex: number) => void;
37
+ unpinRow: () => void;
38
+ moveOrSwapRow: (sourceRowIndex: number, targetRowIndex: number, mode?: 'swap' | 'move') => void;
39
+ moveOrSwapColumn: (sourceColumnIndex: number, targetColumnIndex: number, mode?: 'swap' | 'move') => void;
40
+ isColumnPinned: (columnIndex: number) => boolean;
41
+ isRowPinned: (rowIndex: number) => boolean;
42
+ isReachMaximumColumns: boolean;
43
+ isReachMaximumRows: boolean;
44
+ isReachMinimumNormalColumns: boolean;
45
+ isReachMinimumBodyRows: boolean;
46
+ tableSelectedOn: {
47
+ region: 'table' | 'header' | 'row' | 'column';
48
+ index?: number;
49
+ } | undefined;
50
+ setTableSelectedOn: Dispatch<SetStateAction<TableContextType['tableSelectedOn']>>;
51
+ tableHoveredOn: {
52
+ columnIndex: number;
53
+ rowIndex: number;
54
+ } | undefined;
55
+ setTableHoveredOn: Dispatch<SetStateAction<TableContextType['tableHoveredOn']>>;
56
+ };
57
+ export type TableScrollContextType = {
58
+ scrollRef: RefObject<HTMLDivElement | null>;
59
+ scrollTop: number;
60
+ scrollLeft: number;
61
+ };
62
+ export type RenderTableElementProps = RenderElementProps<TableElement>;
63
+ export type TableRenderElements = Record<TableTypeKey, (props: RenderElementProps<TableElement>) => JSX.Element | null | undefined> & Record<TableTitleTypeKey, (props: RenderElementProps<TableElement>) => JSX.Element | null | undefined> & Record<TableMainTypeKey, (props: RenderElementProps<TableElement>) => JSX.Element | null | undefined> & Record<TableHeaderTypeKey, (props: RenderElementProps<TableElement>) => JSX.Element | null | undefined> & Record<TableBodyTypeKey, (props: RenderElementProps<TableElement>) => JSX.Element | null | undefined> & Record<TableRowTypeKey, (props: RenderElementProps<TableElement>) => JSX.Element | null | undefined> & Record<TableCellTypeKey, (props: RenderElementProps<TableElement>) => JSX.Element | null | undefined>;
64
+ export type ReactTableCreateRenderElementOptions = {
65
+ [K in TableTypeKey | TableTitleTypeKey | TableMainTypeKey | TableHeaderTypeKey | TableBodyTypeKey | TableRowTypeKey | TableCellTypeKey]?: TableRenderElements[K];
66
+ };
67
+ export interface ReactTable extends Omit<Table<Editor>, 'with'>, WithCreateHandlers, WithCreateRenderElement<[ReactTableCreateRenderElementOptions?]>, ReactWithable {
68
+ }