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.
Files changed (93) hide show
  1. package/LICENSE.md +9 -0
  2. package/dist/-private/-type-tests/plugin-properties.test.js +4 -8
  3. package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -1
  4. package/dist/-private/-type-tests/plugin-with.test.js.map +1 -1
  5. package/dist/-private/-type-tests/plugins-accessors.test.js +12 -11
  6. package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -1
  7. package/dist/-private/-type-tests/plugins-signature-from.test.js +7 -6
  8. package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -1
  9. package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -1
  10. package/dist/-private/-type-tests/table-api.test.js +3 -2
  11. package/dist/-private/-type-tests/table-api.test.js.map +1 -1
  12. package/dist/-private/-type-tests/table-config.test.js +8 -11
  13. package/dist/-private/-type-tests/table-config.test.js.map +1 -1
  14. package/dist/-private/column.d.ts +1 -1
  15. package/dist/-private/column.js +7 -15
  16. package/dist/-private/column.js.map +1 -1
  17. package/dist/-private/js-helper.d.ts +1 -1
  18. package/dist/-private/js-helper.js +2 -3
  19. package/dist/-private/js-helper.js.map +1 -1
  20. package/dist/-private/preferences.js +7 -39
  21. package/dist/-private/preferences.js.map +1 -1
  22. package/dist/-private/row.d.ts +1 -1
  23. package/dist/-private/row.js +4 -15
  24. package/dist/-private/row.js.map +1 -1
  25. package/dist/-private/table.js +3 -3
  26. package/dist/-private/utils.js +0 -2
  27. package/dist/-private/utils.js.map +1 -1
  28. package/dist/{applyDecoratedDescriptor-e0489e2f.js → applyDecoratedDescriptor-6b986a67.js} +1 -6
  29. package/dist/applyDecoratedDescriptor-6b986a67.js.map +1 -0
  30. package/dist/{classPrivateFieldGet-af59a8ea.js → classPrivateFieldGet-b4d7d334.js} +1 -3
  31. package/dist/{classPrivateFieldGet-af59a8ea.js.map → classPrivateFieldGet-b4d7d334.js.map} +1 -1
  32. package/dist/{defineProperty-a0196711.js → defineProperty-35ce617b.js} +1 -2
  33. package/dist/defineProperty-35ce617b.js.map +1 -0
  34. package/dist/index.d.ts +1 -1
  35. package/dist/plugins/-private/base.d.ts +1 -1
  36. package/dist/plugins/-private/base.js +18 -59
  37. package/dist/plugins/-private/base.js.map +1 -1
  38. package/dist/plugins/-private/utils.js +5 -20
  39. package/dist/plugins/-private/utils.js.map +1 -1
  40. package/dist/plugins/column-reordering/helpers.d.ts +9 -4
  41. package/dist/plugins/column-reordering/helpers.js +13 -6
  42. package/dist/plugins/column-reordering/helpers.js.map +1 -1
  43. package/dist/plugins/column-reordering/index.js +1 -1
  44. package/dist/plugins/column-reordering/plugin.d.ts +57 -11
  45. package/dist/plugins/column-reordering/plugin.js +109 -130
  46. package/dist/plugins/column-reordering/plugin.js.map +1 -1
  47. package/dist/plugins/column-reordering/utils.js +0 -7
  48. package/dist/plugins/column-reordering/utils.js.map +1 -1
  49. package/dist/plugins/column-resizing/handle.js +4 -33
  50. package/dist/plugins/column-resizing/handle.js.map +1 -1
  51. package/dist/plugins/column-resizing/helpers.js +2 -2
  52. package/dist/plugins/column-resizing/helpers.js.map +1 -1
  53. package/dist/plugins/column-resizing/plugin.js +15 -64
  54. package/dist/plugins/column-resizing/plugin.js.map +1 -1
  55. package/dist/plugins/column-resizing/resize-observer.js +1 -3
  56. package/dist/plugins/column-resizing/resize-observer.js.map +1 -1
  57. package/dist/plugins/column-resizing/utils.js +0 -2
  58. package/dist/plugins/column-resizing/utils.js.map +1 -1
  59. package/dist/plugins/column-visibility/helpers.js +3 -3
  60. package/dist/plugins/column-visibility/helpers.js.map +1 -1
  61. package/dist/plugins/column-visibility/plugin.js +6 -26
  62. package/dist/plugins/column-visibility/plugin.js.map +1 -1
  63. package/dist/plugins/data-sorting/helpers.js +7 -7
  64. package/dist/plugins/data-sorting/helpers.js.map +1 -1
  65. package/dist/plugins/data-sorting/plugin.js +2 -32
  66. package/dist/plugins/data-sorting/plugin.js.map +1 -1
  67. package/dist/plugins/data-sorting/types.js +0 -3
  68. package/dist/plugins/data-sorting/types.js.map +1 -1
  69. package/dist/plugins/metadata/helpers.d.ts +4 -0
  70. package/dist/plugins/metadata/helpers.js +12 -0
  71. package/dist/plugins/metadata/helpers.js.map +1 -0
  72. package/dist/plugins/metadata/index.d.ts +3 -0
  73. package/dist/plugins/metadata/index.js +3 -0
  74. package/dist/plugins/metadata/index.js.map +1 -0
  75. package/dist/plugins/metadata/plugin.d.ts +24 -0
  76. package/dist/plugins/metadata/plugin.js +25 -0
  77. package/dist/plugins/metadata/plugin.js.map +1 -0
  78. package/dist/plugins/row-selection/helpers.js.map +1 -1
  79. package/dist/plugins/row-selection/plugin.js +5 -42
  80. package/dist/plugins/row-selection/plugin.js.map +1 -1
  81. package/dist/plugins/sticky-columns/helpers.js.map +1 -1
  82. package/dist/plugins/sticky-columns/plugin.js +4 -28
  83. package/dist/plugins/sticky-columns/plugin.js.map +1 -1
  84. package/dist/{table-8e46554b.d.ts → table-222f44e7.d.ts} +0 -0
  85. package/dist/{table-8e46554b.js → table-222f44e7.js} +17 -33
  86. package/dist/{table-8e46554b.js.map → table-222f44e7.js.map} +1 -1
  87. package/dist/test-support/index.js +2 -6
  88. package/dist/test-support/index.js.map +1 -1
  89. package/dist/utils.js +2 -5
  90. package/dist/utils.js.map +1 -1
  91. package/package.json +18 -32
  92. package/dist/applyDecoratedDescriptor-e0489e2f.js.map +0 -1
  93. package/dist/defineProperty-a0196711.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { _ as _defineProperty } from '../../defineProperty-a0196711.js';
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,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,UAA7E;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AACaC,MAAAA,eAAe,GAAIL,MAAD,IAC7BC,IAAI,CAACC,SAAL,CAAeF,MAAf,EAAuBG,cAAvB,EAAuCE;;;;"}
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-af59a8ea.js';
2
- import { _ as _initializerDefineProperty } from '../../table-8e46554b.js';
3
- import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-e0489e2f.js';
4
- import { _ as _defineProperty } from '../../defineProperty-a0196711.js';
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 { ...DEFAULT_COLUMN_OPTIONS,
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); // TODO: extract this to card-list and remove it from the plugin
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;