ember-headless-table 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +9 -0
- package/dist/-private/-type-tests/plugin-properties.test.js +4 -8
- package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -1
- package/dist/-private/-type-tests/plugin-with.test.js.map +1 -1
- package/dist/-private/-type-tests/plugins-accessors.test.js +12 -11
- package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -1
- package/dist/-private/-type-tests/plugins-signature-from.test.js +7 -6
- package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -1
- package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -1
- package/dist/-private/-type-tests/table-api.test.js +3 -2
- package/dist/-private/-type-tests/table-api.test.js.map +1 -1
- package/dist/-private/-type-tests/table-config.test.js +8 -11
- package/dist/-private/-type-tests/table-config.test.js.map +1 -1
- package/dist/-private/column.d.ts +1 -1
- package/dist/-private/column.js +7 -15
- package/dist/-private/column.js.map +1 -1
- package/dist/-private/js-helper.d.ts +1 -1
- package/dist/-private/js-helper.js +2 -3
- package/dist/-private/js-helper.js.map +1 -1
- package/dist/-private/preferences.js +7 -39
- package/dist/-private/preferences.js.map +1 -1
- package/dist/-private/row.d.ts +1 -1
- package/dist/-private/row.js +4 -15
- package/dist/-private/row.js.map +1 -1
- package/dist/-private/table.js +3 -3
- package/dist/-private/utils.js +0 -2
- package/dist/-private/utils.js.map +1 -1
- package/dist/{applyDecoratedDescriptor-e0489e2f.js → applyDecoratedDescriptor-6b986a67.js} +1 -6
- package/dist/applyDecoratedDescriptor-6b986a67.js.map +1 -0
- package/dist/{classPrivateFieldGet-af59a8ea.js → classPrivateFieldGet-b4d7d334.js} +1 -3
- package/dist/{classPrivateFieldGet-af59a8ea.js.map → classPrivateFieldGet-b4d7d334.js.map} +1 -1
- package/dist/{defineProperty-a0196711.js → defineProperty-35ce617b.js} +1 -2
- package/dist/defineProperty-35ce617b.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/plugins/-private/base.d.ts +1 -1
- package/dist/plugins/-private/base.js +18 -59
- package/dist/plugins/-private/base.js.map +1 -1
- package/dist/plugins/-private/utils.js +5 -20
- package/dist/plugins/-private/utils.js.map +1 -1
- package/dist/plugins/column-reordering/helpers.d.ts +9 -4
- package/dist/plugins/column-reordering/helpers.js +13 -6
- package/dist/plugins/column-reordering/helpers.js.map +1 -1
- package/dist/plugins/column-reordering/index.js +1 -1
- package/dist/plugins/column-reordering/plugin.d.ts +57 -11
- package/dist/plugins/column-reordering/plugin.js +109 -130
- package/dist/plugins/column-reordering/plugin.js.map +1 -1
- package/dist/plugins/column-reordering/utils.js +0 -7
- package/dist/plugins/column-reordering/utils.js.map +1 -1
- package/dist/plugins/column-resizing/handle.js +4 -33
- package/dist/plugins/column-resizing/handle.js.map +1 -1
- package/dist/plugins/column-resizing/helpers.js +2 -2
- package/dist/plugins/column-resizing/helpers.js.map +1 -1
- package/dist/plugins/column-resizing/plugin.js +15 -64
- package/dist/plugins/column-resizing/plugin.js.map +1 -1
- package/dist/plugins/column-resizing/resize-observer.js +1 -3
- package/dist/plugins/column-resizing/resize-observer.js.map +1 -1
- package/dist/plugins/column-resizing/utils.js +0 -2
- package/dist/plugins/column-resizing/utils.js.map +1 -1
- package/dist/plugins/column-visibility/helpers.js +3 -3
- package/dist/plugins/column-visibility/helpers.js.map +1 -1
- package/dist/plugins/column-visibility/plugin.js +6 -26
- package/dist/plugins/column-visibility/plugin.js.map +1 -1
- package/dist/plugins/data-sorting/helpers.js +7 -7
- package/dist/plugins/data-sorting/helpers.js.map +1 -1
- package/dist/plugins/data-sorting/plugin.js +2 -32
- package/dist/plugins/data-sorting/plugin.js.map +1 -1
- package/dist/plugins/data-sorting/types.js +0 -3
- package/dist/plugins/data-sorting/types.js.map +1 -1
- package/dist/plugins/metadata/helpers.d.ts +4 -0
- package/dist/plugins/metadata/helpers.js +12 -0
- package/dist/plugins/metadata/helpers.js.map +1 -0
- package/dist/plugins/metadata/index.d.ts +3 -0
- package/dist/plugins/metadata/index.js +3 -0
- package/dist/plugins/metadata/index.js.map +1 -0
- package/dist/plugins/metadata/plugin.d.ts +24 -0
- package/dist/plugins/metadata/plugin.js +25 -0
- package/dist/plugins/metadata/plugin.js.map +1 -0
- package/dist/plugins/row-selection/helpers.js.map +1 -1
- package/dist/plugins/row-selection/plugin.js +5 -42
- package/dist/plugins/row-selection/plugin.js.map +1 -1
- package/dist/plugins/sticky-columns/helpers.js.map +1 -1
- package/dist/plugins/sticky-columns/plugin.js +4 -28
- package/dist/plugins/sticky-columns/plugin.js.map +1 -1
- package/dist/{table-8e46554b.d.ts → table-222f44e7.d.ts} +0 -0
- package/dist/{table-8e46554b.js → table-222f44e7.js} +17 -33
- package/dist/{table-8e46554b.js.map → table-222f44e7.js.map} +1 -1
- package/dist/test-support/index.js +2 -6
- package/dist/test-support/index.js.map +1 -1
- package/dist/utils.js +2 -5
- package/dist/utils.js.map +1 -1
- package/package.json +18 -32
- package/dist/applyDecoratedDescriptor-e0489e2f.js.map +0 -1
- package/dist/defineProperty-a0196711.js.map +0 -1
@@ -1,4 +1,4 @@
|
|
1
|
-
import { _ as _defineProperty } from '../../defineProperty-
|
1
|
+
import { _ as _defineProperty } from '../../defineProperty-35ce617b.js';
|
2
2
|
import { registerDestructor } from '@ember/destroyable';
|
3
3
|
import { buildWaiter } from '@ember/test-waiters';
|
4
4
|
import Modifier from 'ember-modifier';
|
@@ -6,6 +6,7 @@ import { meta } from '../-private/base.js';
|
|
6
6
|
import { ColumnResizing } from './plugin.js';
|
7
7
|
|
8
8
|
let waiter = buildWaiter('ColumnResizing#ResizeHandle');
|
9
|
+
|
9
10
|
/**
|
10
11
|
* - why are mouse events used instead of drag events?
|
11
12
|
* - why not use the "draggable" attribute?
|
@@ -22,33 +23,23 @@ let waiter = buildWaiter('ColumnResizing#ResizeHandle');
|
|
22
23
|
class ResizeHandle extends Modifier {
|
23
24
|
constructor(...args) {
|
24
25
|
super(...args);
|
25
|
-
|
26
26
|
_defineProperty(this, "pointerStartX", 0);
|
27
|
-
|
28
27
|
_defineProperty(this, "pointerStartY", 0);
|
29
|
-
|
30
28
|
_defineProperty(this, "pointerX", 0);
|
31
|
-
|
32
29
|
_defineProperty(this, "pointerY", 0);
|
33
|
-
|
34
30
|
_defineProperty(this, "keyDistance", 0);
|
35
|
-
|
36
31
|
_defineProperty(this, "token", void 0);
|
37
|
-
|
38
32
|
_defineProperty(this, "isSetup", false);
|
39
|
-
|
40
33
|
_defineProperty(this, "setup", () => {
|
41
34
|
this.dragHandle.addEventListener('touchstart', this.dragStartHandler);
|
42
35
|
this.dragHandle.addEventListener('mousedown', this.dragStartHandler);
|
43
36
|
this.dragHandle.addEventListener('keydown', this.keyHandler);
|
44
37
|
registerDestructor(this, () => {
|
45
38
|
this.meta.isResizing = false;
|
46
|
-
|
47
39
|
if (this.token) {
|
48
40
|
waiter.endAsync(this.token);
|
49
41
|
this.token = undefined;
|
50
42
|
}
|
51
|
-
|
52
43
|
this.dragHandle.removeEventListener('touchstart', this.dragStartHandler);
|
53
44
|
this.dragHandle.removeEventListener('mousedown', this.dragStartHandler);
|
54
45
|
window.removeEventListener('touchmove', this.dragMove);
|
@@ -58,10 +49,8 @@ class ResizeHandle extends Modifier {
|
|
58
49
|
this.dragHandle.removeEventListener('keydown', this.keyHandler);
|
59
50
|
});
|
60
51
|
});
|
61
|
-
|
62
52
|
_defineProperty(this, "setPosition", event => {
|
63
53
|
if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;
|
64
|
-
|
65
54
|
if ('TouchEvent' in window && event instanceof TouchEvent) {
|
66
55
|
let firstTouch = event.touches[0];
|
67
56
|
if (!firstTouch) return;
|
@@ -72,10 +61,8 @@ class ResizeHandle extends Modifier {
|
|
72
61
|
this.pointerY = event.clientY;
|
73
62
|
}
|
74
63
|
});
|
75
|
-
|
76
64
|
_defineProperty(this, "setStartPosition", event => {
|
77
65
|
if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;
|
78
|
-
|
79
66
|
if ('TouchEvent' in window && event instanceof TouchEvent) {
|
80
67
|
let firstTouch = event.touches[0];
|
81
68
|
if (!firstTouch) return;
|
@@ -86,7 +73,6 @@ class ResizeHandle extends Modifier {
|
|
86
73
|
this.pointerStartY = event.clientY;
|
87
74
|
}
|
88
75
|
});
|
89
|
-
|
90
76
|
_defineProperty(this, "queueUpdate", () => {
|
91
77
|
cancelAnimationFrame(this.dragFrame);
|
92
78
|
this.dragFrame = requestAnimationFrame(() => {
|
@@ -94,41 +80,34 @@ class ResizeHandle extends Modifier {
|
|
94
80
|
this.pointerStartX = this.pointerX;
|
95
81
|
});
|
96
82
|
});
|
97
|
-
|
98
83
|
_defineProperty(this, "dragEndHandler", () => {
|
99
84
|
this.meta.isResizing = false;
|
100
85
|
this.queueUpdate();
|
101
|
-
|
102
86
|
if (this.token) {
|
103
87
|
waiter.endAsync(this.token);
|
104
88
|
this.token = undefined;
|
105
89
|
}
|
90
|
+
|
106
91
|
/**
|
107
92
|
* No need to listen if we aren't dragging
|
108
93
|
*/
|
109
|
-
|
110
|
-
|
111
94
|
window.removeEventListener('touchmove', this.dragMove);
|
112
95
|
window.removeEventListener('touchend', this.dragEndHandler);
|
113
96
|
window.removeEventListener('mousemove', this.dragMove);
|
114
97
|
window.removeEventListener('mouseup', this.dragEndHandler);
|
115
98
|
});
|
116
|
-
|
117
99
|
_defineProperty(this, "dragMove", event => {
|
118
100
|
if (!this.meta.isResizing) return;
|
119
101
|
this.setPosition(event);
|
120
102
|
this.queueUpdate();
|
121
103
|
});
|
122
|
-
|
123
104
|
_defineProperty(this, "dragStartHandler", event => {
|
124
105
|
if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;
|
125
106
|
this.meta.isResizing = true;
|
126
107
|
if (event.target !== this.dragHandle) return;
|
127
|
-
|
128
108
|
if (this.token) {
|
129
109
|
waiter.endAsync(this.token);
|
130
110
|
}
|
131
|
-
|
132
111
|
this.token = waiter.beginAsync();
|
133
112
|
this.setPosition(event);
|
134
113
|
this.setStartPosition(event);
|
@@ -137,21 +116,17 @@ class ResizeHandle extends Modifier {
|
|
137
116
|
window.addEventListener('mousemove', this.dragMove);
|
138
117
|
window.addEventListener('mouseup', this.dragEndHandler);
|
139
118
|
});
|
140
|
-
|
141
119
|
_defineProperty(this, "keyHandler", event => {
|
142
120
|
let deltaT = new Date().getTime() - this.lastKey;
|
143
121
|
let isRapid = deltaT < 50;
|
144
|
-
|
145
122
|
if (event.code === 'ArrowDown' || event.code === 'ArrowRight') {
|
146
123
|
this.keyDistance += isRapid ? 8 : 1;
|
147
124
|
this.lastKey = new Date().getTime();
|
148
125
|
}
|
149
|
-
|
150
126
|
if (event.code === 'ArrowUp' || event.code === 'ArrowLeft') {
|
151
127
|
this.keyDistance -= isRapid ? 8 : 1;
|
152
128
|
this.lastKey = new Date().getTime();
|
153
129
|
}
|
154
|
-
|
155
130
|
cancelAnimationFrame(this.keyFrame);
|
156
131
|
this.keyFrame = requestAnimationFrame(() => {
|
157
132
|
this.meta.resize(this.keyDistance);
|
@@ -159,19 +134,17 @@ class ResizeHandle extends Modifier {
|
|
159
134
|
});
|
160
135
|
});
|
161
136
|
}
|
162
|
-
|
163
137
|
modify(element, [column]) {
|
164
138
|
this.column = column;
|
165
139
|
this.meta = meta.forColumn(column, ColumnResizing);
|
166
140
|
this.dragHandle = element;
|
167
|
-
|
168
141
|
if (!this.isSetup) {
|
169
142
|
this.isSetup = true;
|
170
143
|
this.setup();
|
171
144
|
}
|
172
145
|
}
|
173
|
-
|
174
146
|
}
|
147
|
+
|
175
148
|
/**
|
176
149
|
* Modifier to attach to the column resize handles.
|
177
150
|
* This provides both keyboard and mouse support for resizing columns.
|
@@ -243,8 +216,6 @@ class ResizeHandle extends Modifier {
|
|
243
216
|
* https://limber.glimdown.com/
|
244
217
|
* See: "resize-handle" on Limber's GitHub
|
245
218
|
*/
|
246
|
-
|
247
|
-
|
248
219
|
const resizeHandle = ResizeHandle;
|
249
220
|
|
250
221
|
export { resizeHandle };
|
@@ -1 +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":"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"}
|
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":"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"}
|
@@ -12,11 +12,12 @@ import { ColumnResizing } from './plugin.js';
|
|
12
12
|
* "Is the user directly resizing this column?"
|
13
13
|
*/
|
14
14
|
const isResizing = column => meta.forColumn(column, ColumnResizing).isResizing;
|
15
|
+
|
15
16
|
/**
|
16
17
|
* Does the column have room to shrink?
|
17
18
|
*/
|
18
|
-
|
19
19
|
const canShrink = column => meta.forColumn(column, ColumnResizing).canShrink;
|
20
|
+
|
20
21
|
/**
|
21
22
|
* Does the column have a resize handle?
|
22
23
|
* The return value of this function can be determined by
|
@@ -24,7 +25,6 @@ const canShrink = column => meta.forColumn(column, ColumnResizing).canShrink;
|
|
24
25
|
* - if resizing is enabled for the whole table
|
25
26
|
* - or if we're asking about the first column (resize handles may only be "between" columns)
|
26
27
|
*/
|
27
|
-
|
28
28
|
const hasResizeHandle = column => meta.forColumn(column, ColumnResizing).hasResizeHandle;
|
29
29
|
|
30
30
|
export { canShrink, hasResizeHandle, isResizing };
|
@@ -1 +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\n/**\n * Does the column have a resize handle?\n * The return value of this function can be determined by\n * - if resizing is enabled for the column\n * - if resizing is enabled for the whole table\n * - or if we're asking about the first column (resize handles may only be \"between\" columns)\n */\nexport const hasResizeHandle = (column: Column) =>\n meta.forColumn(column, ColumnResizing).hasResizeHandle;\n"],"names":["isResizing","column","meta","forColumn","ColumnResizing","canShrink","hasResizeHandle"],"mappings":";;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaA,MAAAA,UAAU,GAAIC,
|
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\n/**\n * Does the column have a resize handle?\n * The return value of this function can be determined by\n * - if resizing is enabled for the column\n * - if resizing is enabled for the whole table\n * - or if we're asking about the first column (resize handles may only be \"between\" columns)\n */\nexport const hasResizeHandle = (column: Column) =>\n meta.forColumn(column, ColumnResizing).hasResizeHandle;\n"],"names":["isResizing","column","meta","forColumn","ColumnResizing","canShrink","hasResizeHandle"],"mappings":";;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaA,MAAAA,UAAU,GAAIC,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACJ,WAAU;;AAE/F;AACA;AACA;AACaK,MAAAA,SAAS,GAAIJ,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACC,UAAS;;AAE7F;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,eAAe,GAAIL,MAAc,IAC5CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACE;;;;"}
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import { a as _classPrivateFieldGet } from '../../classPrivateFieldGet-
|
2
|
-
import { _ as _initializerDefineProperty } from '../../table-
|
3
|
-
import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-
|
4
|
-
import { _ as _defineProperty } from '../../defineProperty-
|
1
|
+
import { a as _classPrivateFieldGet } from '../../classPrivateFieldGet-b4d7d334.js';
|
2
|
+
import { _ as _initializerDefineProperty } from '../../table-222f44e7.js';
|
3
|
+
import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-6b986a67.js';
|
4
|
+
import { _ as _defineProperty } from '../../defineProperty-35ce617b.js';
|
5
5
|
import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';
|
6
6
|
import { tracked } from '@glimmer/tracking';
|
7
7
|
import { assert } from '@ember/debug';
|
@@ -11,12 +11,9 @@ import { applyStyles } from '../-private/utils.js';
|
|
11
11
|
import { getAccurateClientWidth, getAccurateClientHeight, totalGapOf } from './utils.js';
|
12
12
|
|
13
13
|
var _class, _descriptor, _descriptor2, _class3, _descriptor3, _descriptor4, _availableColumns;
|
14
|
-
|
15
14
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
16
|
-
|
17
15
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
18
16
|
let cached = macroCondition(dependencySatisfies('ember-source', '>= 4.1.0-alpha.0')) ? importSync('@glimmer/tracking').cached : importSync('ember-cached-decorator-polyfill').cached;
|
19
|
-
|
20
17
|
/**
|
21
18
|
* One instance of a plugin exists per table
|
22
19
|
* but a plugin can have a "Meta" for each column
|
@@ -24,14 +21,11 @@ let cached = macroCondition(dependencySatisfies('ember-source', '>= 4.1.0-alpha.
|
|
24
21
|
class ColumnResizing extends BasePlugin {
|
25
22
|
constructor(...args) {
|
26
23
|
super(...args);
|
27
|
-
|
28
24
|
_defineProperty(this, "name", 'column-resizing');
|
29
|
-
|
30
25
|
_defineProperty(this, "meta", {
|
31
26
|
column: ColumnMeta,
|
32
27
|
table: TableMeta
|
33
28
|
});
|
34
|
-
|
35
29
|
_defineProperty(this, "headerCellModifier", (element, {
|
36
30
|
column
|
37
31
|
}) => {
|
@@ -39,109 +33,87 @@ class ColumnResizing extends BasePlugin {
|
|
39
33
|
element.setAttribute('data-test-is-resizable', `${columnMeta.isResizable}`);
|
40
34
|
applyStyles(element, columnMeta.style);
|
41
35
|
});
|
42
|
-
|
43
36
|
_defineProperty(this, "containerModifier", resizeObserver);
|
44
37
|
}
|
45
|
-
|
46
38
|
reset() {
|
47
39
|
let tableMeta = meta.forTable(this.table, ColumnResizing);
|
48
40
|
tableMeta.reset();
|
49
41
|
}
|
50
|
-
|
51
42
|
}
|
52
|
-
|
53
43
|
_defineProperty(ColumnResizing, "features", ['columnWidth']);
|
54
|
-
|
55
44
|
const DEFAULT_COLUMN_OPTIONS = {
|
56
45
|
minWidth: 128
|
57
46
|
};
|
47
|
+
|
58
48
|
/**
|
59
49
|
* @private
|
60
50
|
*
|
61
51
|
* Contains resizable information for a particular column
|
62
52
|
*/
|
63
|
-
|
64
53
|
let ColumnMeta = (_class = class ColumnMeta {
|
65
54
|
constructor(column) {
|
66
55
|
_initializerDefineProperty(this, "_width", _descriptor, this);
|
67
|
-
|
68
56
|
_initializerDefineProperty(this, "isResizing", _descriptor2, this);
|
69
|
-
|
70
57
|
this.column = column;
|
71
58
|
}
|
72
|
-
|
73
59
|
get tableMeta() {
|
74
60
|
return meta.forTable(this.column.table, ColumnResizing);
|
75
61
|
}
|
76
|
-
|
77
62
|
get options() {
|
78
63
|
let columnOptions = options.forColumn(this.column, ColumnResizing);
|
79
64
|
let filteredOptions = Object.entries(columnOptions || {}).reduce((result, [k, v]) => {
|
80
65
|
if (v) {
|
81
66
|
result[k] = v;
|
82
67
|
}
|
83
|
-
|
84
68
|
return result;
|
85
69
|
}, {});
|
86
|
-
return {
|
70
|
+
return {
|
71
|
+
...DEFAULT_COLUMN_OPTIONS,
|
87
72
|
...filteredOptions
|
88
73
|
};
|
89
74
|
}
|
90
|
-
|
91
75
|
get minWidth() {
|
92
76
|
return this.options.minWidth;
|
93
77
|
}
|
94
|
-
|
95
78
|
get initialWidth() {
|
96
79
|
return this.options.width;
|
97
80
|
}
|
98
|
-
|
99
81
|
get canShrink() {
|
100
82
|
return this.width && this.width > this.minWidth;
|
101
83
|
}
|
102
|
-
|
103
84
|
get roomToShrink() {
|
104
85
|
return this.width ? this.width - this.minWidth : 0;
|
105
86
|
}
|
106
|
-
|
107
87
|
get isResizable() {
|
108
88
|
return this.options.isResizable ?? this.tableMeta.isResizable;
|
109
89
|
}
|
110
|
-
|
111
90
|
get hasResizeHandle() {
|
112
91
|
let previous = columns.previous(this.column);
|
113
92
|
if (!previous) return false;
|
114
93
|
return this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable;
|
115
94
|
}
|
116
|
-
|
117
95
|
get width() {
|
118
96
|
let width = this._width ?? this.initialWidth;
|
119
|
-
|
120
97
|
if (!width) {
|
121
98
|
let {
|
122
99
|
defaultColumnWidth
|
123
100
|
} = this.tableMeta;
|
124
101
|
width = defaultColumnWidth ? Math.max(defaultColumnWidth, this.minWidth) : this.minWidth;
|
125
102
|
}
|
126
|
-
|
127
103
|
return width;
|
128
104
|
}
|
129
|
-
|
130
105
|
set width(value) {
|
131
106
|
this._width = value;
|
132
107
|
}
|
133
|
-
|
134
108
|
get style() {
|
135
109
|
let styles = {};
|
136
110
|
if (this.width) styles.width = `${this.width}px`;
|
137
111
|
if (this.minWidth) styles.minWidth = `${this.minWidth}px`;
|
138
112
|
return styles;
|
139
113
|
}
|
140
|
-
|
141
114
|
resize(delta) {
|
142
115
|
this.tableMeta.resizeColumn(this.column, delta);
|
143
116
|
}
|
144
|
-
|
145
117
|
}, (_descriptor = _applyDecoratedDescriptor(_class.prototype, "_width", [tracked], {
|
146
118
|
configurable: true,
|
147
119
|
enumerable: true,
|
@@ -155,6 +127,7 @@ let ColumnMeta = (_class = class ColumnMeta {
|
|
155
127
|
return false;
|
156
128
|
}
|
157
129
|
}), _applyDecoratedDescriptor(_class.prototype, "options", [cached], Object.getOwnPropertyDescriptor(_class.prototype, "options"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "resize", [action], Object.getOwnPropertyDescriptor(_class.prototype, "resize"), _class.prototype)), _class);
|
130
|
+
|
158
131
|
/**
|
159
132
|
* @private
|
160
133
|
*
|
@@ -166,90 +139,75 @@ let ColumnMeta = (_class = class ColumnMeta {
|
|
166
139
|
*
|
167
140
|
* Otherwise the table will infinitely resize itself
|
168
141
|
*/
|
169
|
-
|
170
142
|
function distributeDelta(delta, visibleColumns) {
|
171
143
|
if (delta === 0) return;
|
172
144
|
let metas = visibleColumns.map(column => meta.forColumn(column, ColumnResizing));
|
173
145
|
let resizableMetas = metas.filter(meta => meta.isResizable && (delta < 0 ? meta.canShrink : true));
|
174
146
|
let columnDelta = delta / resizableMetas.length;
|
175
|
-
|
176
147
|
for (let meta of resizableMetas) {
|
177
148
|
assert('cannot resize a column that does not have a width', meta.width);
|
178
149
|
meta.width = Math.max(meta.width + columnDelta, meta.minWidth);
|
179
150
|
}
|
180
151
|
}
|
152
|
+
|
181
153
|
/**
|
182
154
|
* @private
|
183
155
|
*
|
184
156
|
* Contains resizable and width information regarding the table as a whole
|
185
157
|
*/
|
186
|
-
|
187
|
-
|
188
158
|
let TableMeta = (_class3 = (_availableColumns = /*#__PURE__*/new WeakMap(), class TableMeta {
|
189
159
|
constructor(table) {
|
190
160
|
_classPrivateFieldInitSpec(this, _availableColumns, {
|
191
161
|
get: _get_availableColumns,
|
192
162
|
set: void 0
|
193
163
|
});
|
194
|
-
|
195
164
|
_initializerDefineProperty(this, "scrollContainerHeight", _descriptor3, this);
|
196
|
-
|
197
165
|
_initializerDefineProperty(this, "scrollContainerWidth", _descriptor4, this);
|
198
|
-
|
199
166
|
this.table = table;
|
200
167
|
}
|
201
|
-
|
202
168
|
get options() {
|
203
169
|
return options.forTable(this.table, ColumnResizing);
|
204
170
|
}
|
205
|
-
|
206
171
|
get isResizable() {
|
207
172
|
return this.options?.enabled ?? true;
|
208
173
|
}
|
209
|
-
|
210
174
|
get defaultColumnWidth() {
|
211
175
|
if (!this.scrollContainerWidth) return;
|
212
176
|
return (this.scrollContainerWidth - this.totalInitialColumnWidths) / this.columnsWithoutInitialWidth.length;
|
213
177
|
}
|
214
|
-
|
215
178
|
get visibleColumnMetas() {
|
216
179
|
return _classPrivateFieldGet(this, _availableColumns).map(column => meta.forColumn(column, ColumnResizing));
|
217
180
|
}
|
218
|
-
|
219
181
|
get totalInitialColumnWidths() {
|
220
182
|
return this.visibleColumnMetas.reduce((acc, meta) => acc += meta.initialWidth ?? 0, 0);
|
221
183
|
}
|
222
|
-
|
223
184
|
get columnsWithoutInitialWidth() {
|
224
185
|
return this.visibleColumnMetas.filter(meta => !meta.initialWidth);
|
225
186
|
}
|
226
|
-
|
227
187
|
get totalVisibleColumnsWidth() {
|
228
188
|
return this.visibleColumnMetas.reduce((acc, column) => acc += column.width ?? 0, 0);
|
229
189
|
}
|
230
|
-
|
231
190
|
reset() {
|
232
191
|
if (!this.scrollContainerWidth) return;
|
233
|
-
|
234
192
|
for (let column of this.visibleColumnMetas) {
|
235
193
|
column._width = undefined;
|
236
194
|
}
|
237
195
|
}
|
238
|
-
|
239
196
|
onTableResize(entry) {
|
240
197
|
assert('scroll container element must be an HTMLElement', entry.target instanceof HTMLElement);
|
241
198
|
this.scrollContainerWidth = getAccurateClientWidth(entry.target);
|
242
|
-
this.scrollContainerHeight = getAccurateClientHeight(entry.target);
|
199
|
+
this.scrollContainerHeight = getAccurateClientHeight(entry.target);
|
200
|
+
|
201
|
+
// TODO: extract this to card-list and remove it from the plugin
|
243
202
|
// card-list will provide its own column-resizing plugin
|
244
203
|
// by sub-classing this one, and defining its own way of calculating the "diff"
|
245
|
-
|
246
204
|
let totalGap = totalGapOf(entry.target.querySelector('[role="row"]'));
|
247
205
|
let diff = this.scrollContainerWidth - this.totalVisibleColumnsWidth - totalGap;
|
248
206
|
distributeDelta(diff, _classPrivateFieldGet(this, _availableColumns));
|
249
207
|
}
|
250
|
-
|
251
208
|
resizeColumn(column, delta) {
|
252
209
|
if (delta === 0) return;
|
210
|
+
|
253
211
|
/**
|
254
212
|
* When the delta is negative, we are dragging to the next
|
255
213
|
* when positive, we are dragging to the right
|
@@ -266,24 +224,20 @@ let TableMeta = (_class3 = (_availableColumns = /*#__PURE__*/new WeakMap(), clas
|
|
266
224
|
* This is CSS dependent, and can be configured in plugin
|
267
225
|
* options
|
268
226
|
*/
|
269
|
-
|
270
227
|
let isDraggingRight = delta > 0;
|
271
228
|
let position = this.options?.handlePosition ?? 'left';
|
272
229
|
let growingColumn;
|
273
|
-
|
274
230
|
if (position === 'right') {
|
275
231
|
growingColumn = isDraggingRight ? columns.next(column) : column;
|
276
232
|
} else {
|
277
233
|
growingColumn = isDraggingRight ? columns.previous(column) : column;
|
278
234
|
}
|
279
|
-
|
280
235
|
if (!growingColumn) return;
|
281
236
|
let growingColumnMeta = meta.forColumn(growingColumn, ColumnResizing);
|
282
237
|
assert('cannot resize a column that does not have a width', growingColumnMeta.width);
|
283
238
|
let shrinkableColumns = delta > 0 ? columns.after(growingColumn) : columns.before(growingColumn).reverse();
|
284
239
|
let shrinkableColumnsMetas = shrinkableColumns.map(column => meta.forColumn(column, ColumnResizing)).filter(meta => meta.canShrink);
|
285
240
|
let remainder = Math.abs(delta);
|
286
|
-
|
287
241
|
while (shrinkableColumnsMetas.length > 0) {
|
288
242
|
let shrinkingColumnMeta = shrinkableColumnsMetas.shift();
|
289
243
|
assert('cannot resize a column that does not have a width', shrinkingColumnMeta?.width);
|
@@ -293,7 +247,6 @@ let TableMeta = (_class3 = (_availableColumns = /*#__PURE__*/new WeakMap(), clas
|
|
293
247
|
remainder -= actualDelta;
|
294
248
|
}
|
295
249
|
}
|
296
|
-
|
297
250
|
}), (_descriptor3 = _applyDecoratedDescriptor(_class3.prototype, "scrollContainerHeight", [tracked], {
|
298
251
|
configurable: true,
|
299
252
|
enumerable: true,
|
@@ -305,6 +258,7 @@ let TableMeta = (_class3 = (_availableColumns = /*#__PURE__*/new WeakMap(), clas
|
|
305
258
|
writable: true,
|
306
259
|
initializer: null
|
307
260
|
}), _applyDecoratedDescriptor(_class3.prototype, "reset", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "reset"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "onTableResize", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "onTableResize"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "resizeColumn", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "resizeColumn"), _class3.prototype)), _class3);
|
261
|
+
|
308
262
|
/**
|
309
263
|
* @private
|
310
264
|
* included in the same file as the plugin due to circular dependency
|
@@ -317,11 +271,9 @@ let TableMeta = (_class3 = (_availableColumns = /*#__PURE__*/new WeakMap(), clas
|
|
317
271
|
* <table>
|
318
272
|
* ```
|
319
273
|
*/
|
320
|
-
|
321
274
|
function _get_availableColumns() {
|
322
275
|
return columns.for(this.table, ColumnResizing);
|
323
276
|
}
|
324
|
-
|
325
277
|
function resizeObserver(element, table) {
|
326
278
|
let observer = getObserver(element, table);
|
327
279
|
observer.observe(element);
|
@@ -329,14 +281,13 @@ function resizeObserver(element, table) {
|
|
329
281
|
observer.unobserve(element);
|
330
282
|
};
|
331
283
|
}
|
332
|
-
|
333
284
|
let CACHE = new WeakMap();
|
285
|
+
|
334
286
|
/**
|
335
287
|
* This is technically "inefficient" as you don't want too many resize
|
336
288
|
* observers on a page, but tables are so big, that I don't see too many use cases
|
337
289
|
* where you'd have 10+ tables on a page
|
338
290
|
*/
|
339
|
-
|
340
291
|
function getObserver(element, table) {
|
341
292
|
let existing = CACHE.get(element);
|
342
293
|
if (existing) return existing;
|