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.
Files changed (169) hide show
  1. package/addon-main.js +5 -0
  2. package/dist/-private/-type-tests/plugin-properties.test.d.ts +2 -0
  3. package/dist/-private/-type-tests/plugin-properties.test.d.ts.map +1 -0
  4. package/dist/-private/-type-tests/plugin-properties.test.js +31 -0
  5. package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -0
  6. package/dist/-private/-type-tests/plugin-with.test.d.ts +1 -0
  7. package/dist/-private/-type-tests/plugin-with.test.js +21 -0
  8. package/dist/-private/-type-tests/plugin-with.test.js.map +1 -0
  9. package/dist/-private/-type-tests/plugins-accessors.test.d.ts +1 -0
  10. package/dist/-private/-type-tests/plugins-accessors.test.js +36 -0
  11. package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -0
  12. package/dist/-private/-type-tests/plugins-signature-from.test.d.ts +1 -0
  13. package/dist/-private/-type-tests/plugins-signature-from.test.js +14 -0
  14. package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -0
  15. package/dist/-private/-type-tests/plugins-signature-utils.test.d.ts +1 -0
  16. package/dist/-private/-type-tests/plugins-signature-utils.test.js +36 -0
  17. package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -0
  18. package/dist/-private/-type-tests/table-api.test.d.ts +1 -0
  19. package/dist/-private/-type-tests/table-api.test.js +16 -0
  20. package/dist/-private/-type-tests/table-api.test.js.map +1 -0
  21. package/dist/-private/-type-tests/table-config.test.d.ts +1 -0
  22. package/dist/-private/-type-tests/table-config.test.js +58 -0
  23. package/dist/-private/-type-tests/table-config.test.js.map +1 -0
  24. package/dist/-private/column.d.ts +18 -0
  25. package/dist/-private/column.js +70 -0
  26. package/dist/-private/column.js.map +1 -0
  27. package/dist/-private/interfaces/column.d.ts +57 -0
  28. package/dist/-private/interfaces/column.js +2 -0
  29. package/dist/-private/interfaces/column.js.map +1 -0
  30. package/dist/-private/interfaces/index.d.ts +7 -0
  31. package/dist/-private/interfaces/index.js +2 -0
  32. package/dist/-private/interfaces/index.js.map +1 -0
  33. package/dist/-private/interfaces/modifier.d.ts +7 -0
  34. package/dist/-private/interfaces/modifier.js +2 -0
  35. package/dist/-private/interfaces/modifier.js.map +1 -0
  36. package/dist/-private/interfaces/pagination.d.ts +17 -0
  37. package/dist/-private/interfaces/pagination.js +2 -0
  38. package/dist/-private/interfaces/pagination.js.map +1 -0
  39. package/dist/-private/interfaces/plugins.d.ts +314 -0
  40. package/dist/-private/interfaces/plugins.js +2 -0
  41. package/dist/-private/interfaces/plugins.js.map +1 -0
  42. package/dist/-private/interfaces/preferences.d.ts +74 -0
  43. package/dist/-private/interfaces/preferences.js +2 -0
  44. package/dist/-private/interfaces/preferences.js.map +1 -0
  45. package/dist/-private/interfaces/selection.d.ts +35 -0
  46. package/dist/-private/interfaces/selection.js +2 -0
  47. package/dist/-private/interfaces/selection.js.map +1 -0
  48. package/dist/-private/interfaces/table.d.ts +109 -0
  49. package/dist/-private/interfaces/table.js +2 -0
  50. package/dist/-private/interfaces/table.js.map +1 -0
  51. package/dist/-private/js-helper.d.ts +39 -0
  52. package/dist/-private/js-helper.js +20 -0
  53. package/dist/-private/js-helper.js.map +1 -0
  54. package/dist/-private/preferences.d.ts +56 -0
  55. package/dist/-private/preferences.js +175 -0
  56. package/dist/-private/preferences.js.map +1 -0
  57. package/dist/-private/private-types.d.ts +6 -0
  58. package/dist/-private/private-types.js +2 -0
  59. package/dist/-private/private-types.js.map +1 -0
  60. package/dist/-private/row.d.ts +12 -0
  61. package/dist/-private/row.js +63 -0
  62. package/dist/-private/row.js.map +1 -0
  63. package/dist/-private/table.d.ts +0 -0
  64. package/dist/-private/table.js +18 -0
  65. package/dist/-private/table.js.map +1 -0
  66. package/dist/-private/utils.d.ts +3 -0
  67. package/dist/-private/utils.js +17 -0
  68. package/dist/-private/utils.js.map +1 -0
  69. package/dist/applyDecoratedDescriptor-e0489e2f.js +31 -0
  70. package/dist/applyDecoratedDescriptor-e0489e2f.js.map +1 -0
  71. package/dist/classPrivateFieldGet-af59a8ea.js +23 -0
  72. package/dist/classPrivateFieldGet-af59a8ea.js.map +1 -0
  73. package/dist/defineProperty-a0196711.js +17 -0
  74. package/dist/defineProperty-a0196711.js.map +1 -0
  75. package/dist/index.d.ts +13 -0
  76. package/dist/index.js +4 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/plugins/-private/base.d.ts +267 -0
  79. package/dist/plugins/-private/base.js +486 -0
  80. package/dist/plugins/-private/base.js.map +1 -0
  81. package/dist/plugins/-private/utils.d.ts +21 -0
  82. package/dist/plugins/-private/utils.js +118 -0
  83. package/dist/plugins/-private/utils.js.map +1 -0
  84. package/dist/plugins/column-reordering/helpers.d.ts +28 -0
  85. package/dist/plugins/column-reordering/helpers.js +37 -0
  86. package/dist/plugins/column-reordering/helpers.js.map +1 -0
  87. package/dist/plugins/column-reordering/index.d.ts +3 -0
  88. package/dist/plugins/column-reordering/index.js +3 -0
  89. package/dist/plugins/column-reordering/index.js.map +1 -0
  90. package/dist/plugins/column-reordering/plugin.d.ts +133 -0
  91. package/dist/plugins/column-reordering/plugin.js +392 -0
  92. package/dist/plugins/column-reordering/plugin.js.map +1 -0
  93. package/dist/plugins/column-reordering/utils.d.ts +7 -0
  94. package/dist/plugins/column-reordering/utils.js +41 -0
  95. package/dist/plugins/column-reordering/utils.js.map +1 -0
  96. package/dist/plugins/column-resizing/handle.d.ts +116 -0
  97. package/dist/plugins/column-resizing/handle.js +251 -0
  98. package/dist/plugins/column-resizing/handle.js.map +1 -0
  99. package/dist/plugins/column-resizing/helpers.d.ts +17 -0
  100. package/dist/plugins/column-resizing/helpers.js +22 -0
  101. package/dist/plugins/column-resizing/helpers.js.map +1 -0
  102. package/dist/plugins/column-resizing/index.d.ts +4 -0
  103. package/dist/plugins/column-resizing/index.js +4 -0
  104. package/dist/plugins/column-resizing/index.js.map +1 -0
  105. package/dist/plugins/column-resizing/plugin.d.ts +144 -0
  106. package/dist/plugins/column-resizing/plugin.js +352 -0
  107. package/dist/plugins/column-resizing/plugin.js.map +1 -0
  108. package/dist/plugins/column-resizing/resize-observer.d.ts +14 -0
  109. package/dist/plugins/column-resizing/resize-observer.js +46 -0
  110. package/dist/plugins/column-resizing/resize-observer.js.map +1 -0
  111. package/dist/plugins/column-resizing/utils.d.ts +22 -0
  112. package/dist/plugins/column-resizing/utils.js +46 -0
  113. package/dist/plugins/column-resizing/utils.js.map +1 -0
  114. package/dist/plugins/column-visibility/helpers.d.ts +18 -0
  115. package/dist/plugins/column-visibility/helpers.js +25 -0
  116. package/dist/plugins/column-visibility/helpers.js.map +1 -0
  117. package/dist/plugins/column-visibility/index.d.ts +3 -0
  118. package/dist/plugins/column-visibility/index.js +3 -0
  119. package/dist/plugins/column-visibility/index.js.map +1 -0
  120. package/dist/plugins/column-visibility/plugin.d.ts +62 -0
  121. package/dist/plugins/column-visibility/plugin.js +124 -0
  122. package/dist/plugins/column-visibility/plugin.js.map +1 -0
  123. package/dist/plugins/data-sorting/helpers.d.ts +38 -0
  124. package/dist/plugins/data-sorting/helpers.js +49 -0
  125. package/dist/plugins/data-sorting/helpers.js.map +1 -0
  126. package/dist/plugins/data-sorting/index.d.ts +5 -0
  127. package/dist/plugins/data-sorting/index.js +4 -0
  128. package/dist/plugins/data-sorting/index.js.map +1 -0
  129. package/dist/plugins/data-sorting/plugin.d.ts +99 -0
  130. package/dist/plugins/data-sorting/plugin.js +165 -0
  131. package/dist/plugins/data-sorting/plugin.js.map +1 -0
  132. package/dist/plugins/data-sorting/types.d.ts +23 -0
  133. package/dist/plugins/data-sorting/types.js +17 -0
  134. package/dist/plugins/data-sorting/types.js.map +1 -0
  135. package/dist/plugins/index.d.ts +5 -0
  136. package/dist/plugins/index.js +3 -0
  137. package/dist/plugins/index.js.map +1 -0
  138. package/dist/plugins/row-selection/helpers.d.ts +6 -0
  139. package/dist/plugins/row-selection/helpers.js +10 -0
  140. package/dist/plugins/row-selection/helpers.js.map +1 -0
  141. package/dist/plugins/row-selection/index.d.ts +3 -0
  142. package/dist/plugins/row-selection/index.js +3 -0
  143. package/dist/plugins/row-selection/index.js.map +1 -0
  144. package/dist/plugins/row-selection/plugin.d.ts +79 -0
  145. package/dist/plugins/row-selection/plugin.js +187 -0
  146. package/dist/plugins/row-selection/plugin.js.map +1 -0
  147. package/dist/plugins/sticky-columns/helpers.d.ts +4 -0
  148. package/dist/plugins/sticky-columns/helpers.js +8 -0
  149. package/dist/plugins/sticky-columns/helpers.js.map +1 -0
  150. package/dist/plugins/sticky-columns/index.d.ts +3 -0
  151. package/dist/plugins/sticky-columns/index.js +3 -0
  152. package/dist/plugins/sticky-columns/index.js.map +1 -0
  153. package/dist/plugins/sticky-columns/plugin.d.ts +53 -0
  154. package/dist/plugins/sticky-columns/plugin.js +132 -0
  155. package/dist/plugins/sticky-columns/plugin.js.map +1 -0
  156. package/dist/table-8e46554b.d.ts +127 -0
  157. package/dist/table-8e46554b.js +249 -0
  158. package/dist/table-8e46554b.js.map +1 -0
  159. package/dist/test-support/index.d.ts +14 -0
  160. package/dist/test-support/index.js +72 -0
  161. package/dist/test-support/index.js.map +1 -0
  162. package/dist/utils.d.ts +26 -0
  163. package/dist/utils.js +77 -0
  164. package/dist/utils.js.map +1 -0
  165. package/package.json +147 -51
  166. package/LICENSE.md +0 -9
  167. package/README.md +0 -38
  168. package/config/environment.js +0 -5
  169. 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":"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"}
@@ -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,4 @@
1
+ export { resizeHandle } from "./handle";
2
+ export * from "./helpers";
3
+ export { ColumnResizing, ColumnResizing as Plugin } from "./plugin";
4
+ export type { ColumnOptions, TableOptions } from "./plugin";
@@ -0,0 +1,4 @@
1
+ export { resizeHandle } from './handle.js';
2
+ export { canShrink, isResizing } from './helpers.js';
3
+ export { ColumnResizing, ColumnResizing as Plugin } from './plugin.js';
4
+ //# sourceMappingURL=index.js.map
@@ -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 };