ember-headless-table 0.0.0 → 1.0.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/addon-main.js +5 -0
- package/dist/-private/-type-tests/plugin-properties.test.d.ts +2 -0
- package/dist/-private/-type-tests/plugin-properties.test.d.ts.map +1 -0
- package/dist/-private/-type-tests/plugin-properties.test.js +31 -0
- package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -0
- package/dist/-private/-type-tests/plugin-with.test.d.ts +1 -0
- package/dist/-private/-type-tests/plugin-with.test.js +21 -0
- package/dist/-private/-type-tests/plugin-with.test.js.map +1 -0
- package/dist/-private/-type-tests/plugins-accessors.test.d.ts +1 -0
- package/dist/-private/-type-tests/plugins-accessors.test.js +36 -0
- package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -0
- package/dist/-private/-type-tests/plugins-signature-from.test.d.ts +1 -0
- package/dist/-private/-type-tests/plugins-signature-from.test.js +14 -0
- package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -0
- package/dist/-private/-type-tests/plugins-signature-utils.test.d.ts +1 -0
- package/dist/-private/-type-tests/plugins-signature-utils.test.js +36 -0
- package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -0
- package/dist/-private/-type-tests/table-api.test.d.ts +1 -0
- package/dist/-private/-type-tests/table-api.test.js +16 -0
- package/dist/-private/-type-tests/table-api.test.js.map +1 -0
- package/dist/-private/-type-tests/table-config.test.d.ts +1 -0
- package/dist/-private/-type-tests/table-config.test.js +58 -0
- package/dist/-private/-type-tests/table-config.test.js.map +1 -0
- package/dist/-private/column.d.ts +18 -0
- package/dist/-private/column.js +70 -0
- package/dist/-private/column.js.map +1 -0
- package/dist/-private/interfaces/column.d.ts +57 -0
- package/dist/-private/interfaces/column.js +2 -0
- package/dist/-private/interfaces/column.js.map +1 -0
- package/dist/-private/interfaces/index.d.ts +7 -0
- package/dist/-private/interfaces/index.js +2 -0
- package/dist/-private/interfaces/index.js.map +1 -0
- package/dist/-private/interfaces/modifier.d.ts +7 -0
- package/dist/-private/interfaces/modifier.js +2 -0
- package/dist/-private/interfaces/modifier.js.map +1 -0
- package/dist/-private/interfaces/pagination.d.ts +17 -0
- package/dist/-private/interfaces/pagination.js +2 -0
- package/dist/-private/interfaces/pagination.js.map +1 -0
- package/dist/-private/interfaces/plugins.d.ts +314 -0
- package/dist/-private/interfaces/plugins.js +2 -0
- package/dist/-private/interfaces/plugins.js.map +1 -0
- package/dist/-private/interfaces/preferences.d.ts +74 -0
- package/dist/-private/interfaces/preferences.js +2 -0
- package/dist/-private/interfaces/preferences.js.map +1 -0
- package/dist/-private/interfaces/selection.d.ts +35 -0
- package/dist/-private/interfaces/selection.js +2 -0
- package/dist/-private/interfaces/selection.js.map +1 -0
- package/dist/-private/interfaces/table.d.ts +109 -0
- package/dist/-private/interfaces/table.js +2 -0
- package/dist/-private/interfaces/table.js.map +1 -0
- package/dist/-private/js-helper.d.ts +39 -0
- package/dist/-private/js-helper.js +20 -0
- package/dist/-private/js-helper.js.map +1 -0
- package/dist/-private/preferences.d.ts +56 -0
- package/dist/-private/preferences.js +175 -0
- package/dist/-private/preferences.js.map +1 -0
- package/dist/-private/private-types.d.ts +6 -0
- package/dist/-private/private-types.js +2 -0
- package/dist/-private/private-types.js.map +1 -0
- package/dist/-private/row.d.ts +12 -0
- package/dist/-private/row.js +63 -0
- package/dist/-private/row.js.map +1 -0
- package/dist/-private/table.d.ts +0 -0
- package/dist/-private/table.js +18 -0
- package/dist/-private/table.js.map +1 -0
- package/dist/-private/utils.d.ts +3 -0
- package/dist/-private/utils.js +17 -0
- package/dist/-private/utils.js.map +1 -0
- package/dist/applyDecoratedDescriptor-e0489e2f.js +31 -0
- package/dist/applyDecoratedDescriptor-e0489e2f.js.map +1 -0
- package/dist/classPrivateFieldGet-af59a8ea.js +23 -0
- package/dist/classPrivateFieldGet-af59a8ea.js.map +1 -0
- package/dist/defineProperty-a0196711.js +17 -0
- package/dist/defineProperty-a0196711.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/-private/base.d.ts +267 -0
- package/dist/plugins/-private/base.js +486 -0
- package/dist/plugins/-private/base.js.map +1 -0
- package/dist/plugins/-private/utils.d.ts +21 -0
- package/dist/plugins/-private/utils.js +118 -0
- package/dist/plugins/-private/utils.js.map +1 -0
- package/dist/plugins/column-reordering/helpers.d.ts +28 -0
- package/dist/plugins/column-reordering/helpers.js +37 -0
- package/dist/plugins/column-reordering/helpers.js.map +1 -0
- package/dist/plugins/column-reordering/index.d.ts +3 -0
- package/dist/plugins/column-reordering/index.js +3 -0
- package/dist/plugins/column-reordering/index.js.map +1 -0
- package/dist/plugins/column-reordering/plugin.d.ts +133 -0
- package/dist/plugins/column-reordering/plugin.js +392 -0
- package/dist/plugins/column-reordering/plugin.js.map +1 -0
- package/dist/plugins/column-reordering/utils.d.ts +7 -0
- package/dist/plugins/column-reordering/utils.js +41 -0
- package/dist/plugins/column-reordering/utils.js.map +1 -0
- package/dist/plugins/column-resizing/handle.d.ts +116 -0
- package/dist/plugins/column-resizing/handle.js +251 -0
- package/dist/plugins/column-resizing/handle.js.map +1 -0
- package/dist/plugins/column-resizing/helpers.d.ts +17 -0
- package/dist/plugins/column-resizing/helpers.js +22 -0
- package/dist/plugins/column-resizing/helpers.js.map +1 -0
- package/dist/plugins/column-resizing/index.d.ts +4 -0
- package/dist/plugins/column-resizing/index.js +4 -0
- package/dist/plugins/column-resizing/index.js.map +1 -0
- package/dist/plugins/column-resizing/plugin.d.ts +144 -0
- package/dist/plugins/column-resizing/plugin.js +352 -0
- package/dist/plugins/column-resizing/plugin.js.map +1 -0
- package/dist/plugins/column-resizing/resize-observer.d.ts +14 -0
- package/dist/plugins/column-resizing/resize-observer.js +46 -0
- package/dist/plugins/column-resizing/resize-observer.js.map +1 -0
- package/dist/plugins/column-resizing/utils.d.ts +22 -0
- package/dist/plugins/column-resizing/utils.js +46 -0
- package/dist/plugins/column-resizing/utils.js.map +1 -0
- package/dist/plugins/column-visibility/helpers.d.ts +18 -0
- package/dist/plugins/column-visibility/helpers.js +25 -0
- package/dist/plugins/column-visibility/helpers.js.map +1 -0
- package/dist/plugins/column-visibility/index.d.ts +3 -0
- package/dist/plugins/column-visibility/index.js +3 -0
- package/dist/plugins/column-visibility/index.js.map +1 -0
- package/dist/plugins/column-visibility/plugin.d.ts +62 -0
- package/dist/plugins/column-visibility/plugin.js +124 -0
- package/dist/plugins/column-visibility/plugin.js.map +1 -0
- package/dist/plugins/data-sorting/helpers.d.ts +38 -0
- package/dist/plugins/data-sorting/helpers.js +49 -0
- package/dist/plugins/data-sorting/helpers.js.map +1 -0
- package/dist/plugins/data-sorting/index.d.ts +5 -0
- package/dist/plugins/data-sorting/index.js +4 -0
- package/dist/plugins/data-sorting/index.js.map +1 -0
- package/dist/plugins/data-sorting/plugin.d.ts +99 -0
- package/dist/plugins/data-sorting/plugin.js +165 -0
- package/dist/plugins/data-sorting/plugin.js.map +1 -0
- package/dist/plugins/data-sorting/types.d.ts +23 -0
- package/dist/plugins/data-sorting/types.js +17 -0
- package/dist/plugins/data-sorting/types.js.map +1 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/row-selection/helpers.d.ts +6 -0
- package/dist/plugins/row-selection/helpers.js +10 -0
- package/dist/plugins/row-selection/helpers.js.map +1 -0
- package/dist/plugins/row-selection/index.d.ts +3 -0
- package/dist/plugins/row-selection/index.js +3 -0
- package/dist/plugins/row-selection/index.js.map +1 -0
- package/dist/plugins/row-selection/plugin.d.ts +79 -0
- package/dist/plugins/row-selection/plugin.js +187 -0
- package/dist/plugins/row-selection/plugin.js.map +1 -0
- package/dist/plugins/sticky-columns/helpers.d.ts +4 -0
- package/dist/plugins/sticky-columns/helpers.js +8 -0
- package/dist/plugins/sticky-columns/helpers.js.map +1 -0
- package/dist/plugins/sticky-columns/index.d.ts +3 -0
- package/dist/plugins/sticky-columns/index.js +3 -0
- package/dist/plugins/sticky-columns/index.js.map +1 -0
- package/dist/plugins/sticky-columns/plugin.d.ts +53 -0
- package/dist/plugins/sticky-columns/plugin.js +132 -0
- package/dist/plugins/sticky-columns/plugin.js.map +1 -0
- package/dist/table-8e46554b.d.ts +127 -0
- package/dist/table-8e46554b.js +249 -0
- package/dist/table-8e46554b.js.map +1 -0
- package/dist/test-support/index.d.ts +14 -0
- package/dist/test-support/index.js +72 -0
- package/dist/test-support/index.js.map +1 -0
- package/dist/utils.d.ts +26 -0
- package/dist/utils.js +77 -0
- package/dist/utils.js.map +1 -0
- package/package.json +147 -51
- package/LICENSE.md +0 -9
- package/README.md +0 -38
- package/config/environment.js +0 -5
- package/index.js +0 -5
@@ -0,0 +1,251 @@
|
|
1
|
+
import { _ as _defineProperty } from '../../defineProperty-a0196711.js';
|
2
|
+
import { registerDestructor } from '@ember/destroyable';
|
3
|
+
import { buildWaiter } from '@ember/test-waiters';
|
4
|
+
import Modifier from 'ember-modifier';
|
5
|
+
import { meta } from '../-private/base.js';
|
6
|
+
import { ColumnResizing } from './plugin.js';
|
7
|
+
|
8
|
+
let waiter = buildWaiter('ColumnResizing#ResizeHandle');
|
9
|
+
/**
|
10
|
+
* - why are mouse events used instead of drag events?
|
11
|
+
* - why not use the "draggable" attribute?
|
12
|
+
*
|
13
|
+
* It seems drag events are more for files and/or moving images around on a page
|
14
|
+
* dragging an image, for example, has a ghost of that image until it is dropped.
|
15
|
+
* The same thing happens with text.
|
16
|
+
* This prevents us from having total control of the styling of how dragging works.
|
17
|
+
*
|
18
|
+
*
|
19
|
+
*
|
20
|
+
*/
|
21
|
+
|
22
|
+
class ResizeHandle extends Modifier {
|
23
|
+
constructor(...args) {
|
24
|
+
super(...args);
|
25
|
+
|
26
|
+
_defineProperty(this, "pointerStartX", 0);
|
27
|
+
|
28
|
+
_defineProperty(this, "pointerStartY", 0);
|
29
|
+
|
30
|
+
_defineProperty(this, "pointerX", 0);
|
31
|
+
|
32
|
+
_defineProperty(this, "pointerY", 0);
|
33
|
+
|
34
|
+
_defineProperty(this, "keyDistance", 0);
|
35
|
+
|
36
|
+
_defineProperty(this, "token", void 0);
|
37
|
+
|
38
|
+
_defineProperty(this, "isSetup", false);
|
39
|
+
|
40
|
+
_defineProperty(this, "setup", () => {
|
41
|
+
this.dragHandle.addEventListener('touchstart', this.dragStartHandler);
|
42
|
+
this.dragHandle.addEventListener('mousedown', this.dragStartHandler);
|
43
|
+
this.dragHandle.addEventListener('keydown', this.keyHandler);
|
44
|
+
registerDestructor(this, () => {
|
45
|
+
this.meta.isResizing = false;
|
46
|
+
|
47
|
+
if (this.token) {
|
48
|
+
waiter.endAsync(this.token);
|
49
|
+
this.token = undefined;
|
50
|
+
}
|
51
|
+
|
52
|
+
this.dragHandle.removeEventListener('touchstart', this.dragStartHandler);
|
53
|
+
this.dragHandle.removeEventListener('mousedown', this.dragStartHandler);
|
54
|
+
window.removeEventListener('touchmove', this.dragMove);
|
55
|
+
window.removeEventListener('touchend', this.dragEndHandler);
|
56
|
+
window.removeEventListener('mousemove', this.dragMove);
|
57
|
+
window.removeEventListener('mouseup', this.dragEndHandler);
|
58
|
+
this.dragHandle.removeEventListener('keydown', this.keyHandler);
|
59
|
+
});
|
60
|
+
});
|
61
|
+
|
62
|
+
_defineProperty(this, "setPosition", event => {
|
63
|
+
if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;
|
64
|
+
|
65
|
+
if ('TouchEvent' in window && event instanceof TouchEvent) {
|
66
|
+
let firstTouch = event.touches[0];
|
67
|
+
if (!firstTouch) return;
|
68
|
+
this.pointerX = firstTouch.clientX;
|
69
|
+
this.pointerY = firstTouch.clientY;
|
70
|
+
} else {
|
71
|
+
this.pointerX = event.clientX;
|
72
|
+
this.pointerY = event.clientY;
|
73
|
+
}
|
74
|
+
});
|
75
|
+
|
76
|
+
_defineProperty(this, "setStartPosition", event => {
|
77
|
+
if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;
|
78
|
+
|
79
|
+
if ('TouchEvent' in window && event instanceof TouchEvent) {
|
80
|
+
let firstTouch = event.touches[0];
|
81
|
+
if (!firstTouch) return;
|
82
|
+
this.pointerStartX = firstTouch.clientX;
|
83
|
+
this.pointerStartY = firstTouch.clientY;
|
84
|
+
} else {
|
85
|
+
this.pointerStartX = event.clientX;
|
86
|
+
this.pointerStartY = event.clientY;
|
87
|
+
}
|
88
|
+
});
|
89
|
+
|
90
|
+
_defineProperty(this, "queueUpdate", () => {
|
91
|
+
cancelAnimationFrame(this.dragFrame);
|
92
|
+
this.dragFrame = requestAnimationFrame(() => {
|
93
|
+
this.meta.resize(this.pointerX - this.pointerStartX);
|
94
|
+
this.pointerStartX = this.pointerX;
|
95
|
+
});
|
96
|
+
});
|
97
|
+
|
98
|
+
_defineProperty(this, "dragEndHandler", () => {
|
99
|
+
this.meta.isResizing = false;
|
100
|
+
this.queueUpdate();
|
101
|
+
|
102
|
+
if (this.token) {
|
103
|
+
waiter.endAsync(this.token);
|
104
|
+
this.token = undefined;
|
105
|
+
}
|
106
|
+
/**
|
107
|
+
* No need to listen if we aren't dragging
|
108
|
+
*/
|
109
|
+
|
110
|
+
|
111
|
+
window.removeEventListener('touchmove', this.dragMove);
|
112
|
+
window.removeEventListener('touchend', this.dragEndHandler);
|
113
|
+
window.removeEventListener('mousemove', this.dragMove);
|
114
|
+
window.removeEventListener('mouseup', this.dragEndHandler);
|
115
|
+
});
|
116
|
+
|
117
|
+
_defineProperty(this, "dragMove", event => {
|
118
|
+
if (!this.meta.isResizing) return;
|
119
|
+
this.setPosition(event);
|
120
|
+
this.queueUpdate();
|
121
|
+
});
|
122
|
+
|
123
|
+
_defineProperty(this, "dragStartHandler", event => {
|
124
|
+
if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;
|
125
|
+
this.meta.isResizing = true;
|
126
|
+
if (event.target !== this.dragHandle) return;
|
127
|
+
|
128
|
+
if (this.token) {
|
129
|
+
waiter.endAsync(this.token);
|
130
|
+
}
|
131
|
+
|
132
|
+
this.token = waiter.beginAsync();
|
133
|
+
this.setPosition(event);
|
134
|
+
this.setStartPosition(event);
|
135
|
+
window.addEventListener('touchend', this.dragEndHandler);
|
136
|
+
window.addEventListener('touchmove', this.dragMove);
|
137
|
+
window.addEventListener('mousemove', this.dragMove);
|
138
|
+
window.addEventListener('mouseup', this.dragEndHandler);
|
139
|
+
});
|
140
|
+
|
141
|
+
_defineProperty(this, "keyHandler", event => {
|
142
|
+
let deltaT = new Date().getTime() - this.lastKey;
|
143
|
+
let isRapid = deltaT < 50;
|
144
|
+
|
145
|
+
if (event.code === 'ArrowDown' || event.code === 'ArrowRight') {
|
146
|
+
this.keyDistance += isRapid ? 8 : 1;
|
147
|
+
this.lastKey = new Date().getTime();
|
148
|
+
}
|
149
|
+
|
150
|
+
if (event.code === 'ArrowUp' || event.code === 'ArrowLeft') {
|
151
|
+
this.keyDistance -= isRapid ? 8 : 1;
|
152
|
+
this.lastKey = new Date().getTime();
|
153
|
+
}
|
154
|
+
|
155
|
+
cancelAnimationFrame(this.keyFrame);
|
156
|
+
this.keyFrame = requestAnimationFrame(() => {
|
157
|
+
this.meta.resize(this.keyDistance);
|
158
|
+
this.keyDistance = 0;
|
159
|
+
});
|
160
|
+
});
|
161
|
+
}
|
162
|
+
|
163
|
+
modify(element, [column]) {
|
164
|
+
this.column = column;
|
165
|
+
this.meta = meta.forColumn(column, ColumnResizing);
|
166
|
+
this.dragHandle = element;
|
167
|
+
|
168
|
+
if (!this.isSetup) {
|
169
|
+
this.isSetup = true;
|
170
|
+
this.setup();
|
171
|
+
}
|
172
|
+
}
|
173
|
+
|
174
|
+
}
|
175
|
+
/**
|
176
|
+
* Modifier to attach to the column resize handles.
|
177
|
+
* This provides both keyboard and mouse support for resizing columns.
|
178
|
+
* (provided the resize handle element is focusable -- so consider using
|
179
|
+
* a button for the resize element)
|
180
|
+
*
|
181
|
+
* @example
|
182
|
+
* ```js
|
183
|
+
* import Component from '@glimmer/component';
|
184
|
+
* import { meta } from 'ember-headless-table/plugins';
|
185
|
+
* import { resizeHandle, ColumnResizing } from 'ember-headless-table/plugins/column-resizing';
|
186
|
+
*
|
187
|
+
* export default class TableHead extends Component {
|
188
|
+
* /* ✂️ *\/
|
189
|
+
*
|
190
|
+
* <template>
|
191
|
+
* <thead>
|
192
|
+
* <tr>
|
193
|
+
* {{#each this.columns as |column|}}
|
194
|
+
* <th>
|
195
|
+
* <span>{{column.name}}</span>
|
196
|
+
* <button {{resizeHandle column}}></button>
|
197
|
+
* </th>
|
198
|
+
* {{/each}}
|
199
|
+
* </tr>
|
200
|
+
* </thead>
|
201
|
+
* </template>
|
202
|
+
* }
|
203
|
+
* ```
|
204
|
+
*
|
205
|
+
* Width and isResizing state is maintained on the "meta"
|
206
|
+
* class so that the users may choose per-column stylings for
|
207
|
+
* isResizing and dragging behaviors.
|
208
|
+
*
|
209
|
+
* For example, while dragging, the user may add a class based on the
|
210
|
+
* isDragging property.
|
211
|
+
*
|
212
|
+
* @example
|
213
|
+
* ```js
|
214
|
+
* import Component from '@glimmer/component';
|
215
|
+
* import { meta } from 'ember-headless-table/plugins';
|
216
|
+
* import { resizeHandle, ColumnResizing } from 'ember-headless-table/plugins/column-resizing';
|
217
|
+
*
|
218
|
+
* export default class TableHead extends Component {
|
219
|
+
* /* ✂️ *\/
|
220
|
+
*
|
221
|
+
* isDragging = (column) => {
|
222
|
+
* return meta.forColumn(column, ColumnResizing).isDragging;
|
223
|
+
* }
|
224
|
+
*
|
225
|
+
* <template>
|
226
|
+
* <thead>
|
227
|
+
* <tr>
|
228
|
+
* {{#each this.columns as |column|}}
|
229
|
+
* <th class="header {{if (this.isDragging column) 'blue'}}">
|
230
|
+
* <span>{{column.name}}</span>
|
231
|
+
* <button {{resizeHandle column}}></button>
|
232
|
+
* </th>
|
233
|
+
* {{/each}}
|
234
|
+
* </tr>
|
235
|
+
* </thead>
|
236
|
+
* </template>
|
237
|
+
* }
|
238
|
+
* ```
|
239
|
+
*
|
240
|
+
*
|
241
|
+
* @note
|
242
|
+
* The logic here is copied from the drag slider in
|
243
|
+
* https://limber.glimdown.com/
|
244
|
+
* See: "resize-handle" on Limber's GitHub
|
245
|
+
*/
|
246
|
+
|
247
|
+
|
248
|
+
const resizeHandle = ResizeHandle;
|
249
|
+
|
250
|
+
export { resizeHandle };
|
251
|
+
//# sourceMappingURL=handle.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"handle.js","sources":["../../../src/plugins/column-resizing/handle.ts"],"sourcesContent":["import { registerDestructor } from '@ember/destroyable';\nimport { buildWaiter } from '@ember/test-waiters';\n\nimport Modifier from 'ember-modifier';\n\nimport { meta } from '../-private/base';\nimport { ColumnResizing } from './plugin';\n\nimport type { ColumnMeta } from './plugin';\nimport type { Column } from '#/column';\n\nlet waiter = buildWaiter('ColumnResizing#ResizeHandle');\n\n/**\n * - why are mouse events used instead of drag events?\n * - why not use the \"draggable\" attribute?\n *\n * It seems drag events are more for files and/or moving images around on a page\n * dragging an image, for example, has a ghost of that image until it is dropped.\n * The same thing happens with text.\n * This prevents us from having total control of the styling of how dragging works.\n *\n *\n *\n */\n\nclass ResizeHandle extends Modifier<{ Args: { Positional: [Column] } }> {\n declare dragHandle: HTMLElement;\n declare column: Column;\n declare meta: ColumnMeta;\n\n // Pointer\n pointerStartX = 0;\n pointerStartY = 0;\n pointerX = 0;\n pointerY = 0;\n declare dragFrame: number;\n\n // Keyboard\n keyDistance = 0;\n declare keyFrame: number; // ha\n declare lastKey: number;\n\n // waiter\n token?: unknown;\n\n isSetup = false;\n modify(element: Element, [column]: [Column]) {\n this.column = column;\n this.meta = meta.forColumn(column, ColumnResizing);\n this.dragHandle = element as HTMLElement;\n\n if (!this.isSetup) {\n this.isSetup = true;\n this.setup();\n }\n }\n\n setup = () => {\n this.dragHandle.addEventListener('touchstart', this.dragStartHandler);\n this.dragHandle.addEventListener('mousedown', this.dragStartHandler);\n this.dragHandle.addEventListener('keydown', this.keyHandler);\n\n registerDestructor(this, () => {\n this.meta.isResizing = false;\n\n if (this.token) {\n waiter.endAsync(this.token);\n this.token = undefined;\n }\n\n this.dragHandle.removeEventListener('touchstart', this.dragStartHandler);\n this.dragHandle.removeEventListener('mousedown', this.dragStartHandler);\n window.removeEventListener('touchmove', this.dragMove);\n window.removeEventListener('touchend', this.dragEndHandler);\n window.removeEventListener('mousemove', this.dragMove);\n window.removeEventListener('mouseup', this.dragEndHandler);\n this.dragHandle.removeEventListener('keydown', this.keyHandler);\n });\n };\n\n setPosition = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n if ('TouchEvent' in window && event instanceof TouchEvent) {\n let firstTouch = event.touches[0];\n\n if (!firstTouch) return;\n\n this.pointerX = firstTouch.clientX;\n this.pointerY = firstTouch.clientY;\n } else {\n this.pointerX = event.clientX;\n this.pointerY = event.clientY;\n }\n };\n\n setStartPosition = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n if ('TouchEvent' in window && event instanceof TouchEvent) {\n let firstTouch = event.touches[0];\n\n if (!firstTouch) return;\n\n this.pointerStartX = firstTouch.clientX;\n this.pointerStartY = firstTouch.clientY;\n } else {\n this.pointerStartX = event.clientX;\n this.pointerStartY = event.clientY;\n }\n };\n\n queueUpdate = () => {\n cancelAnimationFrame(this.dragFrame);\n this.dragFrame = requestAnimationFrame(() => {\n this.meta.resize(this.pointerX - this.pointerStartX);\n this.pointerStartX = this.pointerX;\n });\n };\n\n dragEndHandler = () => {\n this.meta.isResizing = false;\n this.queueUpdate();\n\n if (this.token) {\n waiter.endAsync(this.token);\n this.token = undefined;\n }\n\n /**\n * No need to listen if we aren't dragging\n */\n window.removeEventListener('touchmove', this.dragMove);\n window.removeEventListener('touchend', this.dragEndHandler);\n window.removeEventListener('mousemove', this.dragMove);\n window.removeEventListener('mouseup', this.dragEndHandler);\n };\n\n dragMove = (event: Event) => {\n if (!this.meta.isResizing) return;\n this.setPosition(event);\n this.queueUpdate();\n };\n\n dragStartHandler = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n this.meta.isResizing = true;\n if (event.target !== this.dragHandle) return;\n\n if (this.token) {\n waiter.endAsync(this.token);\n }\n\n this.token = waiter.beginAsync();\n\n this.setPosition(event);\n this.setStartPosition(event);\n\n window.addEventListener('touchend', this.dragEndHandler);\n window.addEventListener('touchmove', this.dragMove);\n window.addEventListener('mousemove', this.dragMove);\n window.addEventListener('mouseup', this.dragEndHandler);\n };\n\n keyHandler = (event: KeyboardEvent) => {\n let deltaT = new Date().getTime() - this.lastKey;\n let isRapid = deltaT < 50;\n\n if (event.code === 'ArrowDown' || event.code === 'ArrowRight') {\n this.keyDistance += isRapid ? 8 : 1;\n this.lastKey = new Date().getTime();\n }\n\n if (event.code === 'ArrowUp' || event.code === 'ArrowLeft') {\n this.keyDistance -= isRapid ? 8 : 1;\n this.lastKey = new Date().getTime();\n }\n\n cancelAnimationFrame(this.keyFrame);\n this.keyFrame = requestAnimationFrame(() => {\n this.meta.resize(this.keyDistance);\n\n this.keyDistance = 0;\n });\n };\n}\n\n/**\n * Modifier to attach to the column resize handles.\n * This provides both keyboard and mouse support for resizing columns.\n * (provided the resize handle element is focusable -- so consider using\n * a button for the resize element)\n *\n * @example\n * ```js\n * import Component from '@glimmer/component';\n * import { meta } from 'ember-headless-table/plugins';\n * import { resizeHandle, ColumnResizing } from 'ember-headless-table/plugins/column-resizing';\n *\n * export default class TableHead extends Component {\n * /* ✂️ *\\/\n *\n * <template>\n * <thead>\n * <tr>\n * {{#each this.columns as |column|}}\n * <th>\n * <span>{{column.name}}</span>\n * <button {{resizeHandle column}}></button>\n * </th>\n * {{/each}}\n * </tr>\n * </thead>\n * </template>\n * }\n * ```\n *\n * Width and isResizing state is maintained on the \"meta\"\n * class so that the users may choose per-column stylings for\n * isResizing and dragging behaviors.\n *\n * For example, while dragging, the user may add a class based on the\n * isDragging property.\n *\n * @example\n * ```js\n * import Component from '@glimmer/component';\n * import { meta } from 'ember-headless-table/plugins';\n * import { resizeHandle, ColumnResizing } from 'ember-headless-table/plugins/column-resizing';\n *\n * export default class TableHead extends Component {\n * /* ✂️ *\\/\n *\n * isDragging = (column) => {\n * return meta.forColumn(column, ColumnResizing).isDragging;\n * }\n *\n * <template>\n * <thead>\n * <tr>\n * {{#each this.columns as |column|}}\n * <th class=\"header {{if (this.isDragging column) 'blue'}}\">\n * <span>{{column.name}}</span>\n * <button {{resizeHandle column}}></button>\n * </th>\n * {{/each}}\n * </tr>\n * </thead>\n * </template>\n * }\n * ```\n *\n *\n * @note\n * The logic here is copied from the drag slider in\n * https://limber.glimdown.com/\n * See: \"resize-handle\" on Limber's GitHub\n */\nexport const resizeHandle = ResizeHandle;\n"],"names":["waiter","buildWaiter","ResizeHandle","Modifier","dragHandle","addEventListener","dragStartHandler","keyHandler","registerDestructor","meta","isResizing","token","endAsync","undefined","removeEventListener","window","dragMove","dragEndHandler","event","PointerEvent","MouseEvent","TouchEvent","firstTouch","touches","pointerX","clientX","pointerY","clientY","pointerStartX","pointerStartY","cancelAnimationFrame","dragFrame","requestAnimationFrame","resize","queueUpdate","setPosition","target","beginAsync","setStartPosition","deltaT","Date","getTime","lastKey","isRapid","code","keyDistance","keyFrame","modify","element","column","forColumn","ColumnResizing","isSetup","setup","resizeHandle"],"mappings":";;;;;;;AAWA,IAAIA,MAAM,GAAGC,WAAW,CAAC,6BAAD,CAAxB,CAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,YAAN,SAA2BC,QAA3B,CAAwE;AAAA,EAAA,WAAA,CAAA,GAAA,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAA,IAAA,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,eAAA,EAMtD,CANsD,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,eAAA,EAOtD,CAPsD,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EAQ3D,CAR2D,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EAS3D,CAT2D,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,aAAA,EAaxD,CAbwD,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,SAAA,EAoB5D,KApB4D,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,OAAA,EAgC9D,MAAM;AACZ,MAAA,IAAA,CAAKC,UAAL,CAAgBC,gBAAhB,CAAiC,YAAjC,EAA+C,KAAKC,gBAApD,CAAA,CAAA;AACA,MAAA,IAAA,CAAKF,UAAL,CAAgBC,gBAAhB,CAAiC,WAAjC,EAA8C,KAAKC,gBAAnD,CAAA,CAAA;AACA,MAAA,IAAA,CAAKF,UAAL,CAAgBC,gBAAhB,CAAiC,SAAjC,EAA4C,KAAKE,UAAjD,CAAA,CAAA;MAEAC,kBAAkB,CAAC,IAAD,EAAO,MAAM;AAC7B,QAAA,IAAA,CAAKC,IAAL,CAAUC,UAAV,GAAuB,KAAvB,CAAA;;QAEA,IAAI,IAAA,CAAKC,KAAT,EAAgB;AACdX,UAAAA,MAAM,CAACY,QAAP,CAAgB,IAAA,CAAKD,KAArB,CAAA,CAAA;UACA,IAAKA,CAAAA,KAAL,GAAaE,SAAb,CAAA;AACD,SAAA;;AAED,QAAA,IAAA,CAAKT,UAAL,CAAgBU,mBAAhB,CAAoC,YAApC,EAAkD,KAAKR,gBAAvD,CAAA,CAAA;AACA,QAAA,IAAA,CAAKF,UAAL,CAAgBU,mBAAhB,CAAoC,WAApC,EAAiD,KAAKR,gBAAtD,CAAA,CAAA;AACAS,QAAAA,MAAM,CAACD,mBAAP,CAA2B,WAA3B,EAAwC,KAAKE,QAA7C,CAAA,CAAA;AACAD,QAAAA,MAAM,CAACD,mBAAP,CAA2B,UAA3B,EAAuC,KAAKG,cAA5C,CAAA,CAAA;AACAF,QAAAA,MAAM,CAACD,mBAAP,CAA2B,WAA3B,EAAwC,KAAKE,QAA7C,CAAA,CAAA;AACAD,QAAAA,MAAM,CAACD,mBAAP,CAA2B,SAA3B,EAAsC,KAAKG,cAA3C,CAAA,CAAA;AACA,QAAA,IAAA,CAAKb,UAAL,CAAgBU,mBAAhB,CAAoC,SAApC,EAA+C,KAAKP,UAApD,CAAA,CAAA;AACD,OAfiB,CAAlB,CAAA;KArCoE,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,aAAA,EAuDvDW,KAAD,IAAkB;MAC9B,IAAI,EAAEA,KAAK,YAAYC,YAAjB,IAAiCD,KAAK,YAAYE,UAApD,CAAJ,EAAqE,OAAA;;AAErE,MAAA,IAAI,gBAAgBL,MAAhB,IAA0BG,KAAK,YAAYG,UAA/C,EAA2D;AACzD,QAAA,IAAIC,UAAU,GAAGJ,KAAK,CAACK,OAAN,CAAc,CAAd,CAAjB,CAAA;QAEA,IAAI,CAACD,UAAL,EAAiB,OAAA;AAEjB,QAAA,IAAA,CAAKE,QAAL,GAAgBF,UAAU,CAACG,OAA3B,CAAA;AACA,QAAA,IAAA,CAAKC,QAAL,GAAgBJ,UAAU,CAACK,OAA3B,CAAA;AACD,OAPD,MAOO;AACL,QAAA,IAAA,CAAKH,QAAL,GAAgBN,KAAK,CAACO,OAAtB,CAAA;AACA,QAAA,IAAA,CAAKC,QAAL,GAAgBR,KAAK,CAACS,OAAtB,CAAA;AACD,OAAA;KApEmE,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,kBAAA,EAuElDT,KAAD,IAAkB;MACnC,IAAI,EAAEA,KAAK,YAAYC,YAAjB,IAAiCD,KAAK,YAAYE,UAApD,CAAJ,EAAqE,OAAA;;AAErE,MAAA,IAAI,gBAAgBL,MAAhB,IAA0BG,KAAK,YAAYG,UAA/C,EAA2D;AACzD,QAAA,IAAIC,UAAU,GAAGJ,KAAK,CAACK,OAAN,CAAc,CAAd,CAAjB,CAAA;QAEA,IAAI,CAACD,UAAL,EAAiB,OAAA;AAEjB,QAAA,IAAA,CAAKM,aAAL,GAAqBN,UAAU,CAACG,OAAhC,CAAA;AACA,QAAA,IAAA,CAAKI,aAAL,GAAqBP,UAAU,CAACK,OAAhC,CAAA;AACD,OAPD,MAOO;AACL,QAAA,IAAA,CAAKC,aAAL,GAAqBV,KAAK,CAACO,OAA3B,CAAA;AACA,QAAA,IAAA,CAAKI,aAAL,GAAqBX,KAAK,CAACS,OAA3B,CAAA;AACD,OAAA;KApFmE,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,aAAA,EAuFxD,MAAM;MAClBG,oBAAoB,CAAC,IAAKC,CAAAA,SAAN,CAApB,CAAA;AACA,MAAA,IAAA,CAAKA,SAAL,GAAiBC,qBAAqB,CAAC,MAAM;QAC3C,IAAKvB,CAAAA,IAAL,CAAUwB,MAAV,CAAiB,KAAKT,QAAL,GAAgB,KAAKI,aAAtC,CAAA,CAAA;QACA,IAAKA,CAAAA,aAAL,GAAqB,IAAA,CAAKJ,QAA1B,CAAA;AACD,OAHqC,CAAtC,CAAA;KAzFoE,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,gBAAA,EA+FrD,MAAM;AACrB,MAAA,IAAA,CAAKf,IAAL,CAAUC,UAAV,GAAuB,KAAvB,CAAA;AACA,MAAA,IAAA,CAAKwB,WAAL,EAAA,CAAA;;MAEA,IAAI,IAAA,CAAKvB,KAAT,EAAgB;AACdX,QAAAA,MAAM,CAACY,QAAP,CAAgB,IAAA,CAAKD,KAArB,CAAA,CAAA;QACA,IAAKA,CAAAA,KAAL,GAAaE,SAAb,CAAA;AACD,OAAA;AAED;AACJ;AACA;;;AACIE,MAAAA,MAAM,CAACD,mBAAP,CAA2B,WAA3B,EAAwC,KAAKE,QAA7C,CAAA,CAAA;AACAD,MAAAA,MAAM,CAACD,mBAAP,CAA2B,UAA3B,EAAuC,KAAKG,cAA5C,CAAA,CAAA;AACAF,MAAAA,MAAM,CAACD,mBAAP,CAA2B,WAA3B,EAAwC,KAAKE,QAA7C,CAAA,CAAA;AACAD,MAAAA,MAAM,CAACD,mBAAP,CAA2B,SAA3B,EAAsC,KAAKG,cAA3C,CAAA,CAAA;KA9GoE,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EAiH1DC,KAAD,IAAkB;AAC3B,MAAA,IAAI,CAAC,IAAA,CAAKT,IAAL,CAAUC,UAAf,EAA2B,OAAA;MAC3B,IAAKyB,CAAAA,WAAL,CAAiBjB,KAAjB,CAAA,CAAA;AACA,MAAA,IAAA,CAAKgB,WAAL,EAAA,CAAA;KApHoE,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,kBAAA,EAuHlDhB,KAAD,IAAkB;MACnC,IAAI,EAAEA,KAAK,YAAYC,YAAjB,IAAiCD,KAAK,YAAYE,UAApD,CAAJ,EAAqE,OAAA;AAErE,MAAA,IAAA,CAAKX,IAAL,CAAUC,UAAV,GAAuB,IAAvB,CAAA;AACA,MAAA,IAAIQ,KAAK,CAACkB,MAAN,KAAiB,IAAA,CAAKhC,UAA1B,EAAsC,OAAA;;MAEtC,IAAI,IAAA,CAAKO,KAAT,EAAgB;AACdX,QAAAA,MAAM,CAACY,QAAP,CAAgB,IAAA,CAAKD,KAArB,CAAA,CAAA;AACD,OAAA;;AAED,MAAA,IAAA,CAAKA,KAAL,GAAaX,MAAM,CAACqC,UAAP,EAAb,CAAA;MAEA,IAAKF,CAAAA,WAAL,CAAiBjB,KAAjB,CAAA,CAAA;MACA,IAAKoB,CAAAA,gBAAL,CAAsBpB,KAAtB,CAAA,CAAA;AAEAH,MAAAA,MAAM,CAACV,gBAAP,CAAwB,UAAxB,EAAoC,KAAKY,cAAzC,CAAA,CAAA;AACAF,MAAAA,MAAM,CAACV,gBAAP,CAAwB,WAAxB,EAAqC,KAAKW,QAA1C,CAAA,CAAA;AACAD,MAAAA,MAAM,CAACV,gBAAP,CAAwB,WAAxB,EAAqC,KAAKW,QAA1C,CAAA,CAAA;AACAD,MAAAA,MAAM,CAACV,gBAAP,CAAwB,SAAxB,EAAmC,KAAKY,cAAxC,CAAA,CAAA;KAzIoE,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,YAAA,EA4IxDC,KAAD,IAA0B;MACrC,IAAIqB,MAAM,GAAG,IAAIC,IAAJ,GAAWC,OAAX,EAAA,GAAuB,KAAKC,OAAzC,CAAA;AACA,MAAA,IAAIC,OAAO,GAAGJ,MAAM,GAAG,EAAvB,CAAA;;MAEA,IAAIrB,KAAK,CAAC0B,IAAN,KAAe,WAAf,IAA8B1B,KAAK,CAAC0B,IAAN,KAAe,YAAjD,EAA+D;AAC7D,QAAA,IAAA,CAAKC,WAAL,IAAoBF,OAAO,GAAG,CAAH,GAAO,CAAlC,CAAA;AACA,QAAA,IAAA,CAAKD,OAAL,GAAe,IAAIF,IAAJ,EAAA,CAAWC,OAAX,EAAf,CAAA;AACD,OAAA;;MAED,IAAIvB,KAAK,CAAC0B,IAAN,KAAe,SAAf,IAA4B1B,KAAK,CAAC0B,IAAN,KAAe,WAA/C,EAA4D;AAC1D,QAAA,IAAA,CAAKC,WAAL,IAAoBF,OAAO,GAAG,CAAH,GAAO,CAAlC,CAAA;AACA,QAAA,IAAA,CAAKD,OAAL,GAAe,IAAIF,IAAJ,EAAA,CAAWC,OAAX,EAAf,CAAA;AACD,OAAA;;MAEDX,oBAAoB,CAAC,IAAKgB,CAAAA,QAAN,CAApB,CAAA;AACA,MAAA,IAAA,CAAKA,QAAL,GAAgBd,qBAAqB,CAAC,MAAM;AAC1C,QAAA,IAAA,CAAKvB,IAAL,CAAUwB,MAAV,CAAiB,KAAKY,WAAtB,CAAA,CAAA;QAEA,IAAKA,CAAAA,WAAL,GAAmB,CAAnB,CAAA;AACD,OAJoC,CAArC,CAAA;KA3JoE,CAAA,CAAA;AAAA,GAAA;;AAqBtEE,EAAAA,MAAM,CAACC,OAAD,EAAmB,CAACC,MAAD,CAAnB,EAAuC;IAC3C,IAAKA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKxC,CAAAA,IAAL,GAAYA,IAAI,CAACyC,SAAL,CAAeD,MAAf,EAAuBE,cAAvB,CAAZ,CAAA;IACA,IAAK/C,CAAAA,UAAL,GAAkB4C,OAAlB,CAAA;;IAEA,IAAI,CAAC,IAAKI,CAAAA,OAAV,EAAmB;MACjB,IAAKA,CAAAA,OAAL,GAAe,IAAf,CAAA;AACA,MAAA,IAAA,CAAKC,KAAL,EAAA,CAAA;AACD,KAAA;AACF,GAAA;;AA9BqE,CAAA;AAmKxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,YAAY,GAAGpD;;;;"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { Column } from "../../index";
|
2
|
+
/**
|
3
|
+
* The column actively being resized by the user.
|
4
|
+
*
|
5
|
+
* Note that during resizing, multiple columns are resized at once,
|
6
|
+
* dependending on the boundaries of the resize events.
|
7
|
+
*
|
8
|
+
* The other columns being resized as a consequence of "this" column will not
|
9
|
+
* be marked as isResizing, because this is a user-scoped question:
|
10
|
+
* "Is the user directly resizing this column?"
|
11
|
+
*/
|
12
|
+
declare const isResizing: (column: Column) => boolean;
|
13
|
+
/**
|
14
|
+
* Does the column have room to shrink?
|
15
|
+
*/
|
16
|
+
declare const canShrink: (column: Column) => boolean | 0;
|
17
|
+
export { isResizing, canShrink };
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { meta } from '../-private/base.js';
|
2
|
+
import { ColumnResizing } from './plugin.js';
|
3
|
+
|
4
|
+
/**
|
5
|
+
* The column actively being resized by the user.
|
6
|
+
*
|
7
|
+
* Note that during resizing, multiple columns are resized at once,
|
8
|
+
* dependending on the boundaries of the resize events.
|
9
|
+
*
|
10
|
+
* The other columns being resized as a consequence of "this" column will not
|
11
|
+
* be marked as isResizing, because this is a user-scoped question:
|
12
|
+
* "Is the user directly resizing this column?"
|
13
|
+
*/
|
14
|
+
const isResizing = column => meta.forColumn(column, ColumnResizing).isResizing;
|
15
|
+
/**
|
16
|
+
* Does the column have room to shrink?
|
17
|
+
*/
|
18
|
+
|
19
|
+
const canShrink = column => meta.forColumn(column, ColumnResizing).canShrink;
|
20
|
+
|
21
|
+
export { canShrink, isResizing };
|
22
|
+
//# sourceMappingURL=helpers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-resizing/helpers.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { ColumnResizing } from './plugin';\n\nimport type { Column } from '[public-types]';\n\n/**\n * The column actively being resized by the user.\n *\n * Note that during resizing, multiple columns are resized at once,\n * dependending on the boundaries of the resize events.\n *\n * The other columns being resized as a consequence of \"this\" column will not\n * be marked as isResizing, because this is a user-scoped question:\n * \"Is the user directly resizing this column?\"\n */\nexport const isResizing = (column: Column) => meta.forColumn(column, ColumnResizing).isResizing;\n\n/**\n * Does the column have room to shrink?\n */\nexport const canShrink = (column: Column) => meta.forColumn(column, ColumnResizing).canShrink;\n"],"names":["isResizing","column","meta","forColumn","ColumnResizing","canShrink"],"mappings":";;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaA,MAAAA,UAAU,GAAIC,MAAD,IAAoBC,IAAI,CAACC,SAAL,CAAeF,MAAf,EAAuBG,cAAvB,EAAuCJ,WAA9E;AAEP;AACA;AACA;;AACaK,MAAAA,SAAS,GAAIJ,MAAD,IAAoBC,IAAI,CAACC,SAAL,CAAeF,MAAf,EAAuBG,cAAvB,EAAuCC;;;;"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
@@ -0,0 +1,144 @@
|
|
1
|
+
import { BasePlugin } from "../-private/base";
|
2
|
+
import { ColumnApi } from "../index";
|
3
|
+
import { Column, Table } from "../../index";
|
4
|
+
interface ColumnOptions {
|
5
|
+
/**
|
6
|
+
* Force a starting width
|
7
|
+
* This may not be less than the minWidth
|
8
|
+
*/
|
9
|
+
width?: number;
|
10
|
+
/**
|
11
|
+
* Default: 128px
|
12
|
+
*/
|
13
|
+
minWidth?: number;
|
14
|
+
/**
|
15
|
+
* Flip if the column is resizable or not.
|
16
|
+
* The default is whatever the table's plugin option is set to
|
17
|
+
* (and then yet again true, if not set at all)
|
18
|
+
*/
|
19
|
+
isResizable?: boolean;
|
20
|
+
}
|
21
|
+
interface TableOptions {
|
22
|
+
/**
|
23
|
+
* Toggle whether the table is able to be resized at all
|
24
|
+
*
|
25
|
+
* default :true
|
26
|
+
*/
|
27
|
+
enabled?: boolean;
|
28
|
+
/**
|
29
|
+
* By default, each column's "handle" position is on the
|
30
|
+
* left-hand side of the column.
|
31
|
+
*
|
32
|
+
* If, for style-reasons, you want to move it to the right,
|
33
|
+
* this option should reflect that so that the calculations can be
|
34
|
+
* updated to match the expected behavior of which column(s) grow/shrink
|
35
|
+
*
|
36
|
+
* Valid values are 'left' or 'right'
|
37
|
+
*/
|
38
|
+
handlePosition?: string;
|
39
|
+
}
|
40
|
+
interface Signature {
|
41
|
+
Meta: {
|
42
|
+
Column: ColumnMeta;
|
43
|
+
Table: TableMeta;
|
44
|
+
};
|
45
|
+
Options: {
|
46
|
+
Plugin: TableOptions;
|
47
|
+
Column: ColumnOptions;
|
48
|
+
};
|
49
|
+
}
|
50
|
+
/**
|
51
|
+
* One instance of a plugin exists per table
|
52
|
+
* but a plugin can have a "Meta" for each column
|
53
|
+
*/
|
54
|
+
declare class ColumnResizing extends BasePlugin<Signature> {
|
55
|
+
name: string;
|
56
|
+
static features: string[];
|
57
|
+
meta: {
|
58
|
+
column: typeof ColumnMeta;
|
59
|
+
table: typeof TableMeta;
|
60
|
+
};
|
61
|
+
headerCellModifier: (element: HTMLElement, { column }: ColumnApi) => void;
|
62
|
+
/**
|
63
|
+
* This is what ends up calling resize when the browesr changes
|
64
|
+
* (assuming that the containing element's styles stretch to fill the space)
|
65
|
+
*
|
66
|
+
* Later, when container queries are more broadly supported, we'll want to watch
|
67
|
+
* the container instead of the window to prevent unneeded updates (as a window can change
|
68
|
+
* size without the container changing size)
|
69
|
+
*/
|
70
|
+
containerModifier: typeof resizeObserver;
|
71
|
+
reset(): void;
|
72
|
+
}
|
73
|
+
/**
|
74
|
+
* @private
|
75
|
+
*
|
76
|
+
* Contains resizable information for a particular column
|
77
|
+
*/
|
78
|
+
declare class ColumnMeta {
|
79
|
+
private column;
|
80
|
+
constructor(column: Column);
|
81
|
+
_width?: number;
|
82
|
+
isResizing: boolean;
|
83
|
+
get tableMeta(): TableMeta;
|
84
|
+
get options(): {
|
85
|
+
/**
|
86
|
+
* Force a starting width
|
87
|
+
* This may not be less than the minWidth
|
88
|
+
*/
|
89
|
+
width?: number | undefined;
|
90
|
+
minWidth: number;
|
91
|
+
/**
|
92
|
+
* Flip if the column is resizable or not.
|
93
|
+
* The default is whatever the table's plugin option is set to
|
94
|
+
* (and then yet again true, if not set at all)
|
95
|
+
*/
|
96
|
+
isResizable?: boolean | undefined;
|
97
|
+
};
|
98
|
+
get minWidth(): number;
|
99
|
+
get initialWidth(): number | undefined;
|
100
|
+
get canShrink(): boolean | 0;
|
101
|
+
get roomToShrink(): number;
|
102
|
+
get isResizable(): boolean;
|
103
|
+
get hasResizeHandle(): boolean;
|
104
|
+
get width(): number;
|
105
|
+
set width(value: number);
|
106
|
+
get style(): Partial<Pick<CSSStyleDeclaration, "minWidth" | "width">>;
|
107
|
+
resize(delta: number): void;
|
108
|
+
}
|
109
|
+
/**
|
110
|
+
* @private
|
111
|
+
*
|
112
|
+
* Contains resizable and width information regarding the table as a whole
|
113
|
+
*/
|
114
|
+
declare class TableMeta {
|
115
|
+
#private;
|
116
|
+
private table;
|
117
|
+
constructor(table: Table);
|
118
|
+
scrollContainerHeight?: number;
|
119
|
+
scrollContainerWidth?: number;
|
120
|
+
get options(): Partial<TableOptions>;
|
121
|
+
get isResizable(): boolean;
|
122
|
+
get defaultColumnWidth(): number | undefined;
|
123
|
+
get visibleColumnMetas(): ColumnMeta[];
|
124
|
+
get totalInitialColumnWidths(): number;
|
125
|
+
get columnsWithoutInitialWidth(): ColumnMeta[];
|
126
|
+
get totalVisibleColumnsWidth(): number;
|
127
|
+
reset(): void;
|
128
|
+
onTableResize(entry: ResizeObserverEntry): void;
|
129
|
+
resizeColumn(column: Column, delta: number): void;
|
130
|
+
}
|
131
|
+
/**
|
132
|
+
* @private
|
133
|
+
* included in the same file as the plugin due to circular dependency
|
134
|
+
*
|
135
|
+
* This goes on the containing element
|
136
|
+
*
|
137
|
+
* @example
|
138
|
+
* ```hbs
|
139
|
+
* <div {{resizeObserver @table}}>
|
140
|
+
* <table>
|
141
|
+
* ```
|
142
|
+
*/
|
143
|
+
declare function resizeObserver(element: HTMLElement, table: Table): () => void;
|
144
|
+
export { ColumnOptions, TableOptions, ColumnResizing, ColumnMeta, TableMeta };
|