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,5 +1,5 @@
1
- import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-e0489e2f.js';
2
- import { _ as _defineProperty } from '../../defineProperty-a0196711.js';
1
+ import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-6b986a67.js';
2
+ import { _ as _defineProperty } from '../../defineProperty-35ce617b.js';
3
3
  import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';
4
4
  import '@glimmer/tracking';
5
5
  import { assert } from '@ember/debug';
@@ -11,101 +11,81 @@ let cached = macroCondition(dependencySatisfies('ember-source', '>= 4.1.0-alpha.
11
11
  class StickyColumns extends BasePlugin {
12
12
  constructor(...args) {
13
13
  super(...args);
14
-
15
14
  _defineProperty(this, "name", 'sticky-columns');
16
-
17
15
  _defineProperty(this, "meta", {
18
16
  table: TableMeta,
19
17
  column: ColumnMeta
20
18
  });
21
-
22
19
  _defineProperty(this, "headerCellModifier", (element, {
23
20
  column
24
21
  }) => {
25
22
  let columnMeta = meta.forColumn(column, StickyColumns);
26
-
27
23
  if (columnMeta.isSticky) {
28
24
  applyStyles(element, columnMeta.style);
29
25
  } else {
30
26
  if (element.style.getPropertyValue('position') === 'sticky') {
31
27
  element.style.removeProperty('position');
32
28
  }
33
-
34
29
  if (element.style.getPropertyValue('left')) {
35
30
  element.style.left = '';
36
31
  }
37
-
38
32
  if (element.style.getPropertyValue('right')) {
39
33
  element.style.right = '';
40
34
  }
41
-
42
35
  if (element.style.zIndex === '8') {
43
36
  element.style.zIndex = '';
44
37
  }
45
38
  }
46
39
  });
47
40
  }
48
-
49
41
  }
42
+
50
43
  /**
51
44
  * @private
52
45
  *
53
46
  * Contains state and behaviors for the sticiness
54
47
  */
55
-
56
48
  _defineProperty(StickyColumns, "requires", ['columnWidth']);
57
-
58
49
  let ColumnMeta = (_class = class ColumnMeta {
59
50
  constructor(column) {
60
51
  this.column = column;
61
52
  }
62
-
63
53
  get isSticky() {
64
54
  return this.position !== 'none';
65
55
  }
66
-
67
56
  get position() {
68
57
  let sticky = options.forColumn(this.column, StickyColumns)?.sticky;
69
58
  assert(`Invalid sticky value, ${sticky}. Valid values: 'left', 'right', false`, sticky === 'left' || sticky === 'right' || sticky === false || sticky === undefined);
70
59
  return sticky || 'none';
71
60
  }
72
-
73
61
  get offset() {
74
62
  if (!this.isSticky) {
75
63
  return;
76
64
  }
77
-
78
65
  if (this.position === 'left') {
79
66
  let leftColumns = columns.before(this.column);
80
67
  let left = leftColumns.reduce((acc, column) => {
81
68
  let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');
82
-
83
69
  if (hasWidth(columnMeta)) {
84
70
  return acc + (columnMeta.width ?? 0);
85
71
  }
86
-
87
72
  return acc;
88
73
  }, 0);
89
74
  return `${left}px`;
90
75
  }
91
-
92
76
  if (this.position === 'right') {
93
77
  let rightColumns = columns.after(this.column);
94
78
  let right = rightColumns.reduce((acc, column) => {
95
79
  let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');
96
-
97
80
  if (hasWidth(columnMeta)) {
98
81
  return acc + (columnMeta.width ?? 0);
99
82
  }
100
-
101
83
  return acc;
102
84
  }, 0);
103
85
  return `${right}px`;
104
86
  }
105
-
106
87
  return;
107
88
  }
108
-
109
89
  get style() {
110
90
  if (this.isSticky) {
111
91
  return {
@@ -114,18 +94,14 @@ let ColumnMeta = (_class = class ColumnMeta {
114
94
  zIndex: '8'
115
95
  };
116
96
  }
117
-
118
97
  return {};
119
98
  }
120
-
121
99
  }, (_applyDecoratedDescriptor(_class.prototype, "offset", [cached], Object.getOwnPropertyDescriptor(_class.prototype, "offset"), _class.prototype)), _class);
122
-
123
100
  function hasWidth(obj) {
124
101
  return typeof obj === 'object' && obj && 'width' in obj;
125
102
  }
126
- /* This Plugin does not need table state */
127
-
128
103
 
104
+ /* This Plugin does not need table state */
129
105
  class TableMeta {}
130
106
 
131
107
  export { ColumnMeta, StickyColumns, TableMeta };
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../src/plugins/sticky-columns/plugin.ts"],"sourcesContent":["import { cached } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base';\nimport { applyStyles } from '../-private/utils';\n\nimport type { ColumnApi } from '[public-plugin-types]';\nimport type { Column } from '[public-types]';\n\ninterface ColumnOptions {\n /**\n * Whether or not to enable stickiness on the column\n * (default is false)\n *\n * valid values: 'left', 'right', false\n */\n sticky?: boolean | string;\n}\n\nexport interface Signature {\n Options: {\n Column: ColumnOptions;\n };\n Meta: {\n Table: TableMeta;\n Column: ColumnMeta;\n };\n}\n\nexport class StickyColumns extends BasePlugin<Signature> {\n name = 'sticky-columns';\n\n /**\n * This plugin requires that the resizing plugin be present, because the resizing plugin is\n * what manages the base width of the columns.\n *\n * Other width-management plugins can be used instead of ColumnResizing, but they must declare\n * that they manage the width of the columns.\n */\n static requires = ['columnWidth'];\n\n meta = {\n table: TableMeta,\n column: ColumnMeta,\n };\n\n headerCellModifier = (element: HTMLElement, { column }: ColumnApi) => {\n let columnMeta = meta.forColumn(column, StickyColumns);\n\n if (columnMeta.isSticky) {\n applyStyles(element, columnMeta.style);\n } else {\n if (element.style.getPropertyValue('position') === 'sticky') {\n element.style.removeProperty('position');\n }\n\n if (element.style.getPropertyValue('left')) {\n element.style.left = '';\n }\n\n if (element.style.getPropertyValue('right')) {\n element.style.right = '';\n }\n\n if (element.style.zIndex === '8') {\n element.style.zIndex = '';\n }\n }\n };\n}\n\n/**\n * @private\n *\n * Contains state and behaviors for the sticiness\n */\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get isSticky() {\n return this.position !== 'none';\n }\n\n get position(): 'left' | 'right' | 'none' {\n let sticky = options.forColumn(this.column, StickyColumns)?.sticky;\n\n assert(\n `Invalid sticky value, ${sticky}. Valid values: 'left', 'right', false`,\n sticky === 'left' || sticky === 'right' || sticky === false || sticky === undefined\n );\n\n return sticky || 'none';\n }\n\n @cached\n get offset() {\n if (!this.isSticky) {\n return;\n }\n\n if (this.position === 'left') {\n let leftColumns = columns.before(this.column);\n let left = leftColumns.reduce((acc, column) => {\n let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');\n\n if (hasWidth(columnMeta)) {\n return acc + (columnMeta.width ?? 0);\n }\n\n return acc;\n }, 0);\n\n return `${left}px`;\n }\n\n if (this.position === 'right') {\n let rightColumns = columns.after(this.column);\n let right = rightColumns.reduce((acc, column) => {\n let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');\n\n if (hasWidth(columnMeta)) {\n return acc + (columnMeta.width ?? 0);\n }\n\n return acc;\n }, 0);\n\n return `${right}px`;\n }\n\n return;\n }\n\n get style(): Partial<Pick<CSSStyleDeclaration, 'position' | 'left' | 'right' | 'zIndex'>> {\n if (this.isSticky) {\n return {\n position: 'sticky',\n [this.position]: this.offset,\n zIndex: '8',\n };\n }\n\n return {};\n }\n}\n\nfunction hasWidth(obj: any): obj is { width?: number } {\n return typeof obj === 'object' && obj && 'width' in obj;\n}\n\n/* This Plugin does not need table state */\nexport class TableMeta {}\n"],"names":["StickyColumns","BasePlugin","table","TableMeta","column","ColumnMeta","element","columnMeta","meta","forColumn","isSticky","applyStyles","style","getPropertyValue","removeProperty","left","right","zIndex","constructor","position","sticky","options","assert","undefined","offset","leftColumns","columns","before","reduce","acc","withFeature","hasWidth","width","rightColumns","after","cached","obj"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../src/plugins/sticky-columns/plugin.ts"],"sourcesContent":["import { cached } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base';\nimport { applyStyles } from '../-private/utils';\n\nimport type { ColumnApi } from '[public-plugin-types]';\nimport type { Column } from '[public-types]';\n\ninterface ColumnOptions {\n /**\n * Whether or not to enable stickiness on the column\n * (default is false)\n *\n * valid values: 'left', 'right', false\n */\n sticky?: boolean | string;\n}\n\nexport interface Signature {\n Options: {\n Column: ColumnOptions;\n };\n Meta: {\n Table: TableMeta;\n Column: ColumnMeta;\n };\n}\n\nexport class StickyColumns extends BasePlugin<Signature> {\n name = 'sticky-columns';\n\n /**\n * This plugin requires that the resizing plugin be present, because the resizing plugin is\n * what manages the base width of the columns.\n *\n * Other width-management plugins can be used instead of ColumnResizing, but they must declare\n * that they manage the width of the columns.\n */\n static requires = ['columnWidth'];\n\n meta = {\n table: TableMeta,\n column: ColumnMeta,\n };\n\n headerCellModifier = (element: HTMLElement, { column }: ColumnApi) => {\n let columnMeta = meta.forColumn(column, StickyColumns);\n\n if (columnMeta.isSticky) {\n applyStyles(element, columnMeta.style);\n } else {\n if (element.style.getPropertyValue('position') === 'sticky') {\n element.style.removeProperty('position');\n }\n\n if (element.style.getPropertyValue('left')) {\n element.style.left = '';\n }\n\n if (element.style.getPropertyValue('right')) {\n element.style.right = '';\n }\n\n if (element.style.zIndex === '8') {\n element.style.zIndex = '';\n }\n }\n };\n}\n\n/**\n * @private\n *\n * Contains state and behaviors for the sticiness\n */\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get isSticky() {\n return this.position !== 'none';\n }\n\n get position(): 'left' | 'right' | 'none' {\n let sticky = options.forColumn(this.column, StickyColumns)?.sticky;\n\n assert(\n `Invalid sticky value, ${sticky}. Valid values: 'left', 'right', false`,\n sticky === 'left' || sticky === 'right' || sticky === false || sticky === undefined\n );\n\n return sticky || 'none';\n }\n\n @cached\n get offset() {\n if (!this.isSticky) {\n return;\n }\n\n if (this.position === 'left') {\n let leftColumns = columns.before(this.column);\n let left = leftColumns.reduce((acc, column) => {\n let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');\n\n if (hasWidth(columnMeta)) {\n return acc + (columnMeta.width ?? 0);\n }\n\n return acc;\n }, 0);\n\n return `${left}px`;\n }\n\n if (this.position === 'right') {\n let rightColumns = columns.after(this.column);\n let right = rightColumns.reduce((acc, column) => {\n let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');\n\n if (hasWidth(columnMeta)) {\n return acc + (columnMeta.width ?? 0);\n }\n\n return acc;\n }, 0);\n\n return `${right}px`;\n }\n\n return;\n }\n\n get style(): Partial<Pick<CSSStyleDeclaration, 'position' | 'left' | 'right' | 'zIndex'>> {\n if (this.isSticky) {\n return {\n position: 'sticky',\n [this.position]: this.offset,\n zIndex: '8',\n };\n }\n\n return {};\n }\n}\n\nfunction hasWidth(obj: any): obj is { width?: number } {\n return typeof obj === 'object' && obj && 'width' in obj;\n}\n\n/* This Plugin does not need table state */\nexport class TableMeta {}\n"],"names":["StickyColumns","BasePlugin","table","TableMeta","column","ColumnMeta","element","columnMeta","meta","forColumn","isSticky","applyStyles","style","getPropertyValue","removeProperty","left","right","zIndex","constructor","position","sticky","options","assert","undefined","offset","leftColumns","columns","before","reduce","acc","withFeature","hasWidth","width","rightColumns","after","cached","obj"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { _ as _defineProperty } from './defineProperty-a0196711.js';
2
- import { _ as _applyDecoratedDescriptor } from './applyDecoratedDescriptor-e0489e2f.js';
1
+ import { _ as _defineProperty } from './defineProperty-35ce617b.js';
2
+ import { _ as _applyDecoratedDescriptor } from './applyDecoratedDescriptor-6b986a67.js';
3
3
  import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';
4
4
  import { tracked } from '@glimmer/tracking';
5
5
  import { getOwner, setOwner } from '@ember/application';
@@ -31,7 +31,6 @@ const DEFAULT_COLUMN_CONFIG = {
31
31
  isVisible: true,
32
32
  minWidth: 128
33
33
  };
34
-
35
34
  /**
36
35
  * Because the table is our entry-point object to all the table behaviors,
37
36
  * we need a stable way to know which table we have.
@@ -42,28 +41,19 @@ const DEFAULT_COLUMN_CONFIG = {
42
41
  * ember-resources.
43
42
  */
44
43
  const TABLE_KEY = Symbol('__TABLE_KEY__');
45
-
46
44
  const attachContainer = (element, table) => {
47
45
  assert('Must be installed on an HTMLElement', element instanceof HTMLElement);
48
46
  table.scrollContainerElement = element;
49
47
  };
50
-
51
48
  let Table = (_class = class Table extends Resource {
52
49
  constructor(...args) {
53
50
  super(...args);
54
-
55
51
  _defineProperty(this, TABLE_KEY, guidFor(this));
56
-
57
52
  _initializerDefineProperty(this, "scrollContainerHeight", _descriptor, this);
58
-
59
53
  _initializerDefineProperty(this, "scrollContainerWidth", _descriptor2, this);
60
-
61
54
  _initializerDefineProperty(this, "args", _descriptor3, this);
62
-
63
55
  _defineProperty(this, "defaultColumnConfig", DEFAULT_COLUMN_CONFIG);
64
-
65
56
  _defineProperty(this, "scrollContainerElement", void 0);
66
-
67
57
  _defineProperty(this, "modifiers", {
68
58
  container: modifier(element => {
69
59
  let modifiers = this.plugins.map(plugin => plugin.containerModifier);
@@ -102,7 +92,6 @@ let Table = (_class = class Table extends Resource {
102
92
  eager: false
103
93
  })
104
94
  });
105
-
106
95
  _defineProperty(this, "rows", map(this, {
107
96
  data: () => {
108
97
  let dataFn = this.args.named?.data;
@@ -111,7 +100,6 @@ let Table = (_class = class Table extends Resource {
111
100
  },
112
101
  map: datum => new Row(this, datum)
113
102
  }));
114
-
115
103
  _defineProperty(this, "columns", map(this, {
116
104
  data: () => {
117
105
  let configFn = this.args.named?.columns;
@@ -119,35 +107,38 @@ let Table = (_class = class Table extends Resource {
119
107
  return configFn() ?? [];
120
108
  },
121
109
  map: config => {
122
- return new Column(this, { ...this.defaultColumnConfig,
110
+ return new Column(this, {
111
+ ...this.defaultColumnConfig,
123
112
  ...config
124
113
  });
125
114
  }
126
115
  }));
127
116
  }
128
-
129
117
  /**
130
118
  * @private
131
119
  */
132
120
  modify(_, named) {
133
121
  this.args = {
134
122
  named
135
- }; // only set the preferences once
123
+ };
136
124
 
125
+ // only set the preferences once
137
126
  if (!this.preferences) {
138
127
  let {
139
128
  key = guidFor(this),
140
129
  adapter
141
- } = named?.preferences ?? {}; // TODO: when no key is present,
130
+ } = named?.preferences ?? {};
131
+
132
+ // TODO: when no key is present,
142
133
  // use "local-storage" preferences.
143
134
  // it does not make sense to use a guid in a user's preferences
144
-
145
135
  this.preferences = new TablePreferences(key, adapter);
146
136
  } else {
147
137
  // subsequent updates to args
148
138
  this.resetScrollContainer();
149
139
  }
150
140
  }
141
+
151
142
  /**
152
143
  * Collection of utility modifiers that are the result of composing modifiers
153
144
  * from plugins.
@@ -158,7 +149,6 @@ let Table = (_class = class Table extends Resource {
158
149
  * These are all no-use, no-cost utilities
159
150
  */
160
151
 
161
-
162
152
  /**
163
153
  * @private
164
154
  *
@@ -172,27 +162,26 @@ let Table = (_class = class Table extends Resource {
172
162
  return plugins.map(tuple => {
173
163
  // We don't need the options here
174
164
  let [PluginClass] = tuple;
175
-
176
165
  if (typeof PluginClass === 'function') {
177
166
  let plugin = new PluginClass(this);
178
167
  let owner = getOwner(this);
179
168
  assert(`The Table does not have an owner. cannot create a plugin without an owner`, owner);
180
169
  setOwner(plugin, owner);
181
170
  return plugin;
182
- } // This is a plugin object, rather than a class
183
- // TODO: add test coverage around using classless plugins
184
-
171
+ }
185
172
 
173
+ // This is a plugin object, rather than a class
174
+ // TODO: add test coverage around using classless plugins
186
175
  return PluginClass;
187
176
  });
188
177
  }
178
+
189
179
  /**
190
180
  * Get the active plugin instance for the given plugin class
191
181
  */
192
-
193
-
194
182
  pluginOf(klass) {
195
183
  let result = this.plugins.find(plugin => plugin instanceof klass);
184
+
196
185
  /**
197
186
  * This is an unsafe cast, because Instance could be unrelated to any of the types
198
187
  * that matches Plugin[]
@@ -202,20 +191,17 @@ let Table = (_class = class Table extends Resource {
202
191
  * effectively narrow for what we want (combined with TS being clunky around
203
192
  * comparing Instance and Class types).
204
193
  */
205
-
206
194
  return result;
207
195
  }
196
+
208
197
  /**
209
198
  * @private
210
199
  *
211
200
  * used by other private APIs
212
201
  */
213
-
214
-
215
202
  get config() {
216
203
  return this.args.named;
217
204
  }
218
-
219
205
  /**
220
206
  * @private
221
207
  */
@@ -223,11 +209,9 @@ let Table = (_class = class Table extends Resource {
223
209
  if (!this.scrollContainerElement) return;
224
210
  this.scrollContainerElement.scrollTop = 0;
225
211
  }
226
-
227
212
  resetToDefaults() {
228
213
  this.plugins.forEach(plugin => plugin.reset?.());
229
214
  }
230
-
231
215
  }, (_descriptor = _applyDecoratedDescriptor(_class.prototype, "scrollContainerHeight", [tracked], {
232
216
  configurable: true,
233
217
  enumerable: true,
@@ -246,4 +230,4 @@ let Table = (_class = class Table extends Resource {
246
230
  }), _applyDecoratedDescriptor(_class.prototype, "plugins", [cached], Object.getOwnPropertyDescriptor(_class.prototype, "plugins"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "resetScrollContainer", [action], Object.getOwnPropertyDescriptor(_class.prototype, "resetScrollContainer"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "resetToDefaults", [action], Object.getOwnPropertyDescriptor(_class.prototype, "resetToDefaults"), _class.prototype)), _class);
247
231
 
248
232
  export { TABLE_KEY as T, _initializerDefineProperty as _, Table as a };
249
- //# sourceMappingURL=table-8e46554b.js.map
233
+ //# sourceMappingURL=table-222f44e7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-8e46554b.js","sources":["../../node_modules/.pnpm/@babel+runtime@7.19.4/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js","../src/-private/table.ts"],"sourcesContent":["export default function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}","import { cached, tracked } from '@glimmer/tracking';\nimport { getOwner, setOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\n\nimport { modifier } from 'ember-modifier';\nimport { Resource } from 'ember-resources/core';\nimport { map } from 'ember-resources/util/map';\n\nimport { normalizePluginsConfig, verifyPlugins } from '../plugins/-private/utils';\nimport { Column } from './column';\nimport { TablePreferences } from './preferences';\nimport { Row } from './row';\nimport { composeFunctionModifiers } from './utils';\n\nimport type { BasePlugin, Plugin } from '../plugins';\nimport type { Class } from '[private-types]';\nimport type { Destructor, TableConfig } from '#interfaces';\n\nconst DEFAULT_COLUMN_CONFIG = {\n isVisible: true,\n minWidth: 128,\n};\n\ninterface Signature<DataType> {\n Named: TableConfig<DataType>;\n}\n\n/**\n * Because the table is our entry-point object to all the table behaviors,\n * we need a stable way to know which table we have.\n * Normally, this could be done with referential integrity / identity.\n * However, due to how resources are implemented, if the consumer opts to\n * not use the `@use` decorator, then proxies get involved.\n * The proxies don't maintain instanceof checks, which may be a bug in\n * ember-resources.\n */\nexport const TABLE_KEY = Symbol('__TABLE_KEY__');\n\nconst attachContainer = (element: Element, table: Table) => {\n assert('Must be installed on an HTMLElement', element instanceof HTMLElement);\n\n table.scrollContainerElement = element;\n};\n\nexport class Table<DataType = unknown> extends Resource<Signature<DataType>> {\n /**\n * @private\n */\n [TABLE_KEY] = guidFor(this);\n\n /**\n * @private\n */\n @tracked scrollContainerHeight?: number;\n\n /**\n * @private\n */\n @tracked scrollContainerWidth?: number;\n\n /**\n * @private\n */\n @tracked declare args: { named: Signature<DataType>['Named'] };\n\n /**\n * @private\n */\n defaultColumnConfig = DEFAULT_COLUMN_CONFIG;\n\n /**\n * @private\n */\n scrollContainerElement?: HTMLElement;\n\n /**\n * Interact with, save, modify, etc the preferences for the table,\n * plugins, columns, etc\n */\n declare preferences: TablePreferences;\n\n /**\n * @private\n */\n modify(_: [] | undefined, named: Signature<DataType>['Named']) {\n this.args = { named };\n\n // only set the preferences once\n if (!this.preferences) {\n let { key = guidFor(this), adapter } = named?.preferences ?? {};\n\n // TODO: when no key is present,\n // use \"local-storage\" preferences.\n // it does not make sense to use a guid in a user's preferences\n this.preferences = new TablePreferences(key, adapter);\n } else {\n // subsequent updates to args\n this.resetScrollContainer();\n }\n }\n\n /**\n * Collection of utility modifiers that are the result of composing modifiers\n * from plugins.\n *\n * Using this is optional, and you can \"just\" use modifiers from specific plugins\n * in specific places if you wish -- but these exists as a \"convenience\".\n *\n * These are all no-use, no-cost utilities\n */\n modifiers = {\n container: modifier(\n (element: HTMLElement): Destructor => {\n let modifiers = this.plugins.map((plugin) => plugin.containerModifier);\n let composed = composeFunctionModifiers([attachContainer, ...modifiers]);\n\n return composed(element, this);\n },\n { eager: false }\n ),\n\n // resize: ResizeModifier,\n // TODO: switch to composing real modifiers once \"curry\" and \"compose\"\n // RFCs are accepted and implemented\n //\n // Atm the moment, if _any_ header modifier's tracked data changes,\n // all the functions for all of the plugins run again.\n //\n // With curried+composed modifiers, only the plugin's headerModifier\n // that has tracked changes would run, leaving the other modifiers alone\n columnHeader: modifier(\n (element: HTMLElement, [column]: [Column<DataType>]): Destructor => {\n let modifiers = this.plugins.map((plugin) => plugin.headerCellModifier);\n let composed = composeFunctionModifiers(modifiers);\n\n return composed(element, { column, table: this });\n },\n { eager: false }\n ),\n\n row: modifier(\n (element: HTMLElement, [row]: [Row<DataType>]): Destructor => {\n let modifiers = this.plugins.map((plugin) => plugin.rowModifier);\n let composed = composeFunctionModifiers(modifiers);\n\n return composed(element, { row, table: this });\n },\n { eager: false }\n ),\n };\n\n /**\n * @private\n *\n * For all configured plugins, instantiates each one.\n * If the plugins argument changes to the Table (either directly or through\n * headlessTable, all state is lost and re-created)\n */\n @cached\n get plugins(): Plugin[] {\n let plugins = normalizePluginsConfig(this.args.named?.plugins);\n\n verifyPlugins(plugins);\n\n return plugins.map((tuple) => {\n // We don't need the options here\n let [PluginClass] = tuple;\n\n if (typeof PluginClass === 'function') {\n let plugin = new PluginClass(this);\n\n let owner = getOwner(this);\n\n assert(`The Table does not have an owner. cannot create a plugin without an owner`, owner);\n setOwner(plugin, owner);\n\n return plugin;\n }\n\n // This is a plugin object, rather than a class\n // TODO: add test coverage around using classless plugins\n return PluginClass;\n });\n }\n\n /**\n * Get the active plugin instance for the given plugin class\n */\n pluginOf<Instance extends BasePlugin<any>>(klass: Class<Instance>): Instance | undefined {\n let result = this.plugins.find((plugin) => plugin instanceof klass);\n\n /**\n * This is an unsafe cast, because Instance could be unrelated to any of the types\n * that matches Plugin[]\n *\n * For example, `table.pluginOf(MyCustomPlugin)`, where MyCustomPlugin isn't in the\n * `plugins` list. This partially a problem with how Array.prototype.find doesn't\n * effectively narrow for what we want (combined with TS being clunky around\n * comparing Instance and Class types).\n */\n return result as unknown as Instance | undefined;\n }\n\n /**\n * @private\n *\n * used by other private APIs\n */\n get config() {\n return this.args.named;\n }\n\n rows = map(this, {\n data: () => {\n let dataFn = this.args.named?.data;\n\n if (!dataFn) return [];\n\n return dataFn() ?? [];\n },\n map: (datum) => new Row(this, datum),\n });\n\n columns = map(this, {\n data: () => {\n let configFn = this.args.named?.columns;\n\n if (!configFn) return [];\n\n return configFn() ?? [];\n },\n map: (config) => {\n return new Column<DataType>(this, { ...this.defaultColumnConfig, ...config });\n },\n });\n\n /**\n * @private\n */\n @action\n resetScrollContainer() {\n if (!this.scrollContainerElement) return;\n\n this.scrollContainerElement.scrollTop = 0;\n }\n\n @action\n resetToDefaults() {\n this.plugins.forEach((plugin) => plugin.reset?.());\n }\n}\n"],"names":["_initializerDefineProperty","target","property","descriptor","context","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","DEFAULT_COLUMN_CONFIG","isVisible","minWidth","TABLE_KEY","Symbol","attachContainer","element","table","assert","HTMLElement","scrollContainerElement","Table","Resource","guidFor","container","modifier","modifiers","plugins","map","plugin","containerModifier","composed","composeFunctionModifiers","eager","columnHeader","column","headerCellModifier","row","rowModifier","data","dataFn","args","named","datum","Row","configFn","columns","config","Column","defaultColumnConfig","modify","_","preferences","key","adapter","TablePreferences","resetScrollContainer","normalizePluginsConfig","verifyPlugins","tuple","PluginClass","owner","getOwner","setOwner","pluginOf","klass","result","find","scrollTop","resetToDefaults","forEach","reset","tracked","cached","action"],"mappings":"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"}
1
+ {"version":3,"file":"table-222f44e7.js","sources":["../../node_modules/.pnpm/@babel+runtime@7.20.1/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js","../src/-private/table.ts"],"sourcesContent":["export default function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}","import { cached, tracked } from '@glimmer/tracking';\nimport { getOwner, setOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\n\nimport { modifier } from 'ember-modifier';\nimport { Resource } from 'ember-resources/core';\nimport { map } from 'ember-resources/util/map';\n\nimport { normalizePluginsConfig, verifyPlugins } from '../plugins/-private/utils';\nimport { Column } from './column';\nimport { TablePreferences } from './preferences';\nimport { Row } from './row';\nimport { composeFunctionModifiers } from './utils';\n\nimport type { BasePlugin, Plugin } from '../plugins';\nimport type { Class } from '[private-types]';\nimport type { Destructor, TableConfig } from '#interfaces';\n\nconst DEFAULT_COLUMN_CONFIG = {\n isVisible: true,\n minWidth: 128,\n};\n\ninterface Signature<DataType> {\n Named: TableConfig<DataType>;\n}\n\n/**\n * Because the table is our entry-point object to all the table behaviors,\n * we need a stable way to know which table we have.\n * Normally, this could be done with referential integrity / identity.\n * However, due to how resources are implemented, if the consumer opts to\n * not use the `@use` decorator, then proxies get involved.\n * The proxies don't maintain instanceof checks, which may be a bug in\n * ember-resources.\n */\nexport const TABLE_KEY = Symbol('__TABLE_KEY__');\n\nconst attachContainer = (element: Element, table: Table) => {\n assert('Must be installed on an HTMLElement', element instanceof HTMLElement);\n\n table.scrollContainerElement = element;\n};\n\nexport class Table<DataType = unknown> extends Resource<Signature<DataType>> {\n /**\n * @private\n */\n [TABLE_KEY] = guidFor(this);\n\n /**\n * @private\n */\n @tracked scrollContainerHeight?: number;\n\n /**\n * @private\n */\n @tracked scrollContainerWidth?: number;\n\n /**\n * @private\n */\n @tracked declare args: { named: Signature<DataType>['Named'] };\n\n /**\n * @private\n */\n defaultColumnConfig = DEFAULT_COLUMN_CONFIG;\n\n /**\n * @private\n */\n scrollContainerElement?: HTMLElement;\n\n /**\n * Interact with, save, modify, etc the preferences for the table,\n * plugins, columns, etc\n */\n declare preferences: TablePreferences;\n\n /**\n * @private\n */\n modify(_: [] | undefined, named: Signature<DataType>['Named']) {\n this.args = { named };\n\n // only set the preferences once\n if (!this.preferences) {\n let { key = guidFor(this), adapter } = named?.preferences ?? {};\n\n // TODO: when no key is present,\n // use \"local-storage\" preferences.\n // it does not make sense to use a guid in a user's preferences\n this.preferences = new TablePreferences(key, adapter);\n } else {\n // subsequent updates to args\n this.resetScrollContainer();\n }\n }\n\n /**\n * Collection of utility modifiers that are the result of composing modifiers\n * from plugins.\n *\n * Using this is optional, and you can \"just\" use modifiers from specific plugins\n * in specific places if you wish -- but these exists as a \"convenience\".\n *\n * These are all no-use, no-cost utilities\n */\n modifiers = {\n container: modifier(\n (element: HTMLElement): Destructor => {\n let modifiers = this.plugins.map((plugin) => plugin.containerModifier);\n let composed = composeFunctionModifiers([attachContainer, ...modifiers]);\n\n return composed(element, this);\n },\n { eager: false }\n ),\n\n // resize: ResizeModifier,\n // TODO: switch to composing real modifiers once \"curry\" and \"compose\"\n // RFCs are accepted and implemented\n //\n // Atm the moment, if _any_ header modifier's tracked data changes,\n // all the functions for all of the plugins run again.\n //\n // With curried+composed modifiers, only the plugin's headerModifier\n // that has tracked changes would run, leaving the other modifiers alone\n columnHeader: modifier(\n (element: HTMLElement, [column]: [Column<DataType>]): Destructor => {\n let modifiers = this.plugins.map((plugin) => plugin.headerCellModifier);\n let composed = composeFunctionModifiers(modifiers);\n\n return composed(element, { column, table: this });\n },\n { eager: false }\n ),\n\n row: modifier(\n (element: HTMLElement, [row]: [Row<DataType>]): Destructor => {\n let modifiers = this.plugins.map((plugin) => plugin.rowModifier);\n let composed = composeFunctionModifiers(modifiers);\n\n return composed(element, { row, table: this });\n },\n { eager: false }\n ),\n };\n\n /**\n * @private\n *\n * For all configured plugins, instantiates each one.\n * If the plugins argument changes to the Table (either directly or through\n * headlessTable, all state is lost and re-created)\n */\n @cached\n get plugins(): Plugin[] {\n let plugins = normalizePluginsConfig(this.args.named?.plugins);\n\n verifyPlugins(plugins);\n\n return plugins.map((tuple) => {\n // We don't need the options here\n let [PluginClass] = tuple;\n\n if (typeof PluginClass === 'function') {\n let plugin = new PluginClass(this);\n\n let owner = getOwner(this);\n\n assert(`The Table does not have an owner. cannot create a plugin without an owner`, owner);\n setOwner(plugin, owner);\n\n return plugin;\n }\n\n // This is a plugin object, rather than a class\n // TODO: add test coverage around using classless plugins\n return PluginClass;\n });\n }\n\n /**\n * Get the active plugin instance for the given plugin class\n */\n pluginOf<Instance extends BasePlugin<any>>(klass: Class<Instance>): Instance | undefined {\n let result = this.plugins.find((plugin) => plugin instanceof klass);\n\n /**\n * This is an unsafe cast, because Instance could be unrelated to any of the types\n * that matches Plugin[]\n *\n * For example, `table.pluginOf(MyCustomPlugin)`, where MyCustomPlugin isn't in the\n * `plugins` list. This partially a problem with how Array.prototype.find doesn't\n * effectively narrow for what we want (combined with TS being clunky around\n * comparing Instance and Class types).\n */\n return result as unknown as Instance | undefined;\n }\n\n /**\n * @private\n *\n * used by other private APIs\n */\n get config() {\n return this.args.named;\n }\n\n rows = map(this, {\n data: () => {\n let dataFn = this.args.named?.data;\n\n if (!dataFn) return [];\n\n return dataFn() ?? [];\n },\n map: (datum) => new Row(this, datum),\n });\n\n columns = map(this, {\n data: () => {\n let configFn = this.args.named?.columns;\n\n if (!configFn) return [];\n\n return configFn() ?? [];\n },\n map: (config) => {\n return new Column<DataType>(this, { ...this.defaultColumnConfig, ...config });\n },\n });\n\n /**\n * @private\n */\n @action\n resetScrollContainer() {\n if (!this.scrollContainerElement) return;\n\n this.scrollContainerElement.scrollTop = 0;\n }\n\n @action\n resetToDefaults() {\n this.plugins.forEach((plugin) => plugin.reset?.());\n }\n}\n"],"names":["_initializerDefineProperty","target","property","descriptor","context","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","DEFAULT_COLUMN_CONFIG","isVisible","minWidth","TABLE_KEY","Symbol","attachContainer","element","table","assert","HTMLElement","scrollContainerElement","Table","Resource","guidFor","container","modifier","modifiers","plugins","map","plugin","containerModifier","composed","composeFunctionModifiers","eager","columnHeader","column","headerCellModifier","row","rowModifier","data","dataFn","args","named","datum","Row","configFn","columns","config","Column","defaultColumnConfig","modify","_","preferences","key","adapter","TablePreferences","resetScrollContainer","normalizePluginsConfig","verifyPlugins","tuple","PluginClass","owner","getOwner","setOwner","pluginOf","klass","result","find","scrollTop","resetToDefaults","forEach","reset","tracked","cached","action"],"mappings":"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"}
@@ -6,11 +6,11 @@ function createHelpers(selectors) {
6
6
  assert(`Can't use the dragLeft/dragRight/resize helpers without a \`resizeHandle\` selector`, selectors.resizeHandle);
7
7
  let element = parent.querySelector(selectors.resizeHandle);
8
8
  assert(`Can't resize without a handle`, element);
9
+
9
10
  /**
10
11
  * Start the click in exactly the middle of the element.
11
12
  * "startX" is the horizontal middle of "element"
12
13
  */
13
-
14
14
  let rect = element.getBoundingClientRect();
15
15
  let startX = (rect.right + rect.left) / 2;
16
16
  let targetX = startX + delta;
@@ -27,33 +27,29 @@ function createHelpers(selectors) {
27
27
  button: 0
28
28
  });
29
29
  await settled();
30
+
30
31
  /**
31
32
  * This has been super finnicky... :(
32
33
  */
33
-
34
34
  await new Promise(resolve => setTimeout(resolve, 100));
35
35
  await requestAnimationFrameSettled();
36
36
  }
37
-
38
37
  function horizontalScrollElement() {
39
38
  assert(`Can't use scrollRight/swipeLeft helpers without a \`scrollContainer\` selector`, selectors.scrollContainer);
40
39
  let element = find(selectors.scrollContainer);
41
40
  assert(`scroll container not found`, element instanceof HTMLElement);
42
41
  return element;
43
42
  }
44
-
45
43
  async function scrollRight(distance) {
46
44
  let element = horizontalScrollElement();
47
45
  element.scrollLeft += distance;
48
46
  await requestAnimationFrameSettled();
49
47
  }
50
-
51
48
  async function scrollLeft(distance) {
52
49
  let element = horizontalScrollElement();
53
50
  element.scrollLeft -= distance;
54
51
  await requestAnimationFrameSettled();
55
52
  }
56
-
57
53
  return {
58
54
  dragLeft: (column, amount) => resize(column, -amount),
59
55
  dragRight: (column, amount) => resize(column, amount),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/test-support/index.ts"],"sourcesContent":["import { assert } from '@ember/debug';\nimport { find, settled, triggerEvent } from '@ember/test-helpers';\n\ninterface Selectors {\n resizeHandle?: string;\n scrollContainer?: string;\n}\n\nexport function createHelpers(selectors: Selectors) {\n async function resize(parent: Element, delta: number) {\n assert(\n `Can't use the dragLeft/dragRight/resize helpers without a \\`resizeHandle\\` selector`,\n selectors.resizeHandle\n );\n\n let element = parent.querySelector(selectors.resizeHandle);\n\n assert(`Can't resize without a handle`, element);\n\n /**\n * Start the click in exactly the middle of the element.\n * \"startX\" is the horizontal middle of \"element\"\n */\n let rect = element.getBoundingClientRect();\n let startX = (rect.right + rect.left) / 2;\n\n let targetX = startX + delta;\n\n triggerEvent(element, 'mousedown', { clientX: startX, button: 0 });\n triggerEvent(element, 'mousemove', { clientX: targetX, button: 0 });\n triggerEvent(element, 'mouseup', { clientX: targetX, button: 0 });\n\n await settled();\n\n /**\n * This has been super finnicky... :(\n */\n await new Promise((resolve) => setTimeout(resolve, 100));\n await requestAnimationFrameSettled();\n }\n\n function horizontalScrollElement() {\n assert(\n `Can't use scrollRight/swipeLeft helpers without a \\`scrollContainer\\` selector`,\n selectors.scrollContainer\n );\n\n let element = find(selectors.scrollContainer);\n\n assert(`scroll container not found`, element instanceof HTMLElement);\n\n return element;\n }\n\n async function scrollRight(distance: number) {\n let element = horizontalScrollElement();\n\n element.scrollLeft += distance;\n await requestAnimationFrameSettled();\n }\n\n async function scrollLeft(distance: number) {\n let element = horizontalScrollElement();\n\n element.scrollLeft -= distance;\n await requestAnimationFrameSettled();\n }\n\n return {\n dragLeft: (column: Element, amount: number) => resize(column, -amount),\n dragRight: (column: Element, amount: number) => resize(column, amount),\n scrollLeft,\n scrollRight,\n swipeLeft: scrollRight,\n swipeRight: scrollLeft,\n };\n}\n\nexport async function requestAnimationFrameSettled() {\n await new Promise(requestAnimationFrame);\n await settled();\n}\n"],"names":["createHelpers","selectors","resize","parent","delta","assert","resizeHandle","element","querySelector","rect","getBoundingClientRect","startX","right","left","targetX","triggerEvent","clientX","button","settled","Promise","resolve","setTimeout","requestAnimationFrameSettled","horizontalScrollElement","scrollContainer","find","HTMLElement","scrollRight","distance","scrollLeft","dragLeft","column","amount","dragRight","swipeLeft","swipeRight","requestAnimationFrame"],"mappings":";;;AAQO,SAASA,aAAT,CAAuBC,SAAvB,EAA6C;AAClD,EAAA,eAAeC,MAAf,CAAsBC,MAAtB,EAAuCC,KAAvC,EAAsD;AACpDC,IAAAA,MAAM,CACH,CADG,mFAAA,CAAA,EAEJJ,SAAS,CAACK,YAFN,CAAN,CAAA;IAKA,IAAIC,OAAO,GAAGJ,MAAM,CAACK,aAAP,CAAqBP,SAAS,CAACK,YAA/B,CAAd,CAAA;AAEAD,IAAAA,MAAM,CAAE,CAAA,6BAAA,CAAF,EAAkCE,OAAlC,CAAN,CAAA;AAEA;AACJ;AACA;AACA;;AACI,IAAA,IAAIE,IAAI,GAAGF,OAAO,CAACG,qBAAR,EAAX,CAAA;IACA,IAAIC,MAAM,GAAG,CAACF,IAAI,CAACG,KAAL,GAAaH,IAAI,CAACI,IAAnB,IAA2B,CAAxC,CAAA;AAEA,IAAA,IAAIC,OAAO,GAAGH,MAAM,GAAGP,KAAvB,CAAA;AAEAW,IAAAA,YAAY,CAACR,OAAD,EAAU,WAAV,EAAuB;AAAES,MAAAA,OAAO,EAAEL,MAAX;AAAmBM,MAAAA,MAAM,EAAE,CAAA;AAA3B,KAAvB,CAAZ,CAAA;AACAF,IAAAA,YAAY,CAACR,OAAD,EAAU,WAAV,EAAuB;AAAES,MAAAA,OAAO,EAAEF,OAAX;AAAoBG,MAAAA,MAAM,EAAE,CAAA;AAA5B,KAAvB,CAAZ,CAAA;AACAF,IAAAA,YAAY,CAACR,OAAD,EAAU,SAAV,EAAqB;AAAES,MAAAA,OAAO,EAAEF,OAAX;AAAoBG,MAAAA,MAAM,EAAE,CAAA;AAA5B,KAArB,CAAZ,CAAA;AAEA,IAAA,MAAMC,OAAO,EAAb,CAAA;AAEA;AACJ;AACA;;IACI,MAAM,IAAIC,OAAJ,CAAaC,OAAD,IAAaC,UAAU,CAACD,OAAD,EAAU,GAAV,CAAnC,CAAN,CAAA;AACA,IAAA,MAAME,4BAA4B,EAAlC,CAAA;AACD,GAAA;;AAED,EAAA,SAASC,uBAAT,GAAmC;AACjClB,IAAAA,MAAM,CACH,CADG,8EAAA,CAAA,EAEJJ,SAAS,CAACuB,eAFN,CAAN,CAAA;AAKA,IAAA,IAAIjB,OAAO,GAAGkB,IAAI,CAACxB,SAAS,CAACuB,eAAX,CAAlB,CAAA;AAEAnB,IAAAA,MAAM,CAAE,CAAF,0BAAA,CAAA,EAA+BE,OAAO,YAAYmB,WAAlD,CAAN,CAAA;AAEA,IAAA,OAAOnB,OAAP,CAAA;AACD,GAAA;;EAED,eAAeoB,WAAf,CAA2BC,QAA3B,EAA6C;IAC3C,IAAIrB,OAAO,GAAGgB,uBAAuB,EAArC,CAAA;IAEAhB,OAAO,CAACsB,UAAR,IAAsBD,QAAtB,CAAA;AACA,IAAA,MAAMN,4BAA4B,EAAlC,CAAA;AACD,GAAA;;EAED,eAAeO,UAAf,CAA0BD,QAA1B,EAA4C;IAC1C,IAAIrB,OAAO,GAAGgB,uBAAuB,EAArC,CAAA;IAEAhB,OAAO,CAACsB,UAAR,IAAsBD,QAAtB,CAAA;AACA,IAAA,MAAMN,4BAA4B,EAAlC,CAAA;AACD,GAAA;;EAED,OAAO;AACLQ,IAAAA,QAAQ,EAAE,CAACC,MAAD,EAAkBC,MAAlB,KAAqC9B,MAAM,CAAC6B,MAAD,EAAS,CAACC,MAAV,CADhD;IAELC,SAAS,EAAE,CAACF,MAAD,EAAkBC,MAAlB,KAAqC9B,MAAM,CAAC6B,MAAD,EAASC,MAAT,CAFjD;IAGLH,UAHK;IAILF,WAJK;AAKLO,IAAAA,SAAS,EAAEP,WALN;AAMLQ,IAAAA,UAAU,EAAEN,UAAAA;GANd,CAAA;AAQD,CAAA;AAEM,eAAeP,4BAAf,GAA8C;AACnD,EAAA,MAAM,IAAIH,OAAJ,CAAYiB,qBAAZ,CAAN,CAAA;AACA,EAAA,MAAMlB,OAAO,EAAb,CAAA;AACD;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/test-support/index.ts"],"sourcesContent":["import { assert } from '@ember/debug';\nimport { find, settled, triggerEvent } from '@ember/test-helpers';\n\ninterface Selectors {\n resizeHandle?: string;\n scrollContainer?: string;\n}\n\nexport function createHelpers(selectors: Selectors) {\n async function resize(parent: Element, delta: number) {\n assert(\n `Can't use the dragLeft/dragRight/resize helpers without a \\`resizeHandle\\` selector`,\n selectors.resizeHandle\n );\n\n let element = parent.querySelector(selectors.resizeHandle);\n\n assert(`Can't resize without a handle`, element);\n\n /**\n * Start the click in exactly the middle of the element.\n * \"startX\" is the horizontal middle of \"element\"\n */\n let rect = element.getBoundingClientRect();\n let startX = (rect.right + rect.left) / 2;\n\n let targetX = startX + delta;\n\n triggerEvent(element, 'mousedown', { clientX: startX, button: 0 });\n triggerEvent(element, 'mousemove', { clientX: targetX, button: 0 });\n triggerEvent(element, 'mouseup', { clientX: targetX, button: 0 });\n\n await settled();\n\n /**\n * This has been super finnicky... :(\n */\n await new Promise((resolve) => setTimeout(resolve, 100));\n await requestAnimationFrameSettled();\n }\n\n function horizontalScrollElement() {\n assert(\n `Can't use scrollRight/swipeLeft helpers without a \\`scrollContainer\\` selector`,\n selectors.scrollContainer\n );\n\n let element = find(selectors.scrollContainer);\n\n assert(`scroll container not found`, element instanceof HTMLElement);\n\n return element;\n }\n\n async function scrollRight(distance: number) {\n let element = horizontalScrollElement();\n\n element.scrollLeft += distance;\n await requestAnimationFrameSettled();\n }\n\n async function scrollLeft(distance: number) {\n let element = horizontalScrollElement();\n\n element.scrollLeft -= distance;\n await requestAnimationFrameSettled();\n }\n\n return {\n dragLeft: (column: Element, amount: number) => resize(column, -amount),\n dragRight: (column: Element, amount: number) => resize(column, amount),\n scrollLeft,\n scrollRight,\n swipeLeft: scrollRight,\n swipeRight: scrollLeft,\n };\n}\n\nexport async function requestAnimationFrameSettled() {\n await new Promise(requestAnimationFrame);\n await settled();\n}\n"],"names":["createHelpers","selectors","resize","parent","delta","assert","resizeHandle","element","querySelector","rect","getBoundingClientRect","startX","right","left","targetX","triggerEvent","clientX","button","settled","Promise","resolve","setTimeout","requestAnimationFrameSettled","horizontalScrollElement","scrollContainer","find","HTMLElement","scrollRight","distance","scrollLeft","dragLeft","column","amount","dragRight","swipeLeft","swipeRight","requestAnimationFrame"],"mappings":"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"}
package/dist/utils.js CHANGED
@@ -13,6 +13,7 @@ import { SortDirection } from './plugins/data-sorting/types.js';
13
13
  * // => [{ property: 'lastName', direction: 'descending' }]
14
14
  * ```
15
15
  */
16
+
16
17
  const deserializeSorts = (sortString, options = {
17
18
  separator: '.',
18
19
  transform: 'camelize'
@@ -23,18 +24,17 @@ const deserializeSorts = (sortString, options = {
23
24
  } = options;
24
25
  let [key, direction] = sortString.split(separator);
25
26
  assert(`No key found for input: \`${sortString}\` using \`${separator}\` as a separator`, key);
26
-
27
27
  if (transform === 'camelize') {
28
28
  key = camelize(key);
29
29
  } else if (transform === 'underscore') {
30
30
  key = underscore(key);
31
31
  }
32
-
33
32
  return [{
34
33
  property: key,
35
34
  direction: direction === 'asc' ? SortDirection.Ascending : SortDirection.Descending
36
35
  }];
37
36
  };
37
+
38
38
  /**
39
39
  * @example
40
40
  *
@@ -46,7 +46,6 @@ const deserializeSorts = (sortString, options = {
46
46
  * // => 'last_name.desc'
47
47
  * ```
48
48
  */
49
-
50
49
  function serializeSorts(sorts, options = {
51
50
  separator: '.',
52
51
  transform: 'underscore'
@@ -61,13 +60,11 @@ function serializeSorts(sorts, options = {
61
60
  }) => {
62
61
  let shortDirection = direction === 'ascending' ? 'asc' : 'desc';
63
62
  let sortField = property;
64
-
65
63
  if (transform === 'underscore') {
66
64
  sortField = underscore(property);
67
65
  } else if (transform === 'camelize') {
68
66
  sortField = camelize(property);
69
67
  }
70
-
71
68
  return `${sortField}${separator}${shortDirection}`;
72
69
  });
73
70
  return sortParameters.join('+');
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../src/utils.ts"],"sourcesContent":["import { assert } from '@ember/debug';\nimport { camelize, underscore } from '@ember/string';\n\nimport { SortDirection } from './plugins/data-sorting/types';\n\nimport type { Sort, SortsOptions } from './plugins/data-sorting/types';\n\n/**\n * @example\n *\n * ```ts\n * deserializeSorts('first_name.asc', { separator: '.', transform: 'camelize' });\n * // => [{ property: 'firstName', direction: 'ascending' }]\n *\n * deserializeSorts('last_name.desc', { separator: '.', transform: 'camelize' });\n * // => [{ property: 'lastName', direction: 'descending' }]\n * ```\n */\n\nexport const deserializeSorts = (\n sortString: string,\n options: SortsOptions = { separator: '.', transform: 'camelize' }\n): Sort[] => {\n const { transform, separator } = options;\n let [key, direction] = sortString.split(separator);\n\n assert(`No key found for input: \\`${sortString}\\` using \\`${separator}\\` as a separator`, key);\n\n if (transform === 'camelize') {\n key = camelize(key);\n } else if (transform === 'underscore') {\n key = underscore(key);\n }\n\n return [\n {\n property: key,\n direction: direction === 'asc' ? SortDirection.Ascending : SortDirection.Descending,\n },\n ];\n};\n\n/**\n * @example\n *\n * ```ts\n * serializeSorts([{ property: 'firstName', direction: 'ascending' }],{ separator: '.', transform: 'camelize' });\n * // => 'first_name.asc'\n *\n * serializeSorts([{ property: 'lastName', direction: 'descending' }],{ separator: '.', transform: 'camelize' });\n * // => 'last_name.desc'\n * ```\n */\nexport function serializeSorts(\n sorts: Sort[],\n options: SortsOptions = { separator: '.', transform: 'underscore' }\n): string {\n const { transform, separator } = options;\n\n let sortParameters = sorts.map(({ direction, property }) => {\n let shortDirection = direction === 'ascending' ? 'asc' : 'desc';\n\n let sortField = property;\n\n if (transform === 'underscore') {\n sortField = underscore(property);\n } else if (transform === 'camelize') {\n sortField = camelize(property);\n }\n\n return `${sortField}${separator}${shortDirection}`;\n });\n\n return sortParameters.join('+');\n}\n"],"names":["deserializeSorts","sortString","options","separator","transform","key","direction","split","assert","camelize","underscore","property","SortDirection","Ascending","Descending","serializeSorts","sorts","sortParameters","map","shortDirection","sortField","join"],"mappings":";;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAEaA,gBAAgB,GAAG,CAC9BC,UAD8B,EAE9BC,OAAqB,GAAG;AAAEC,EAAAA,SAAS,EAAE,GAAb;AAAkBC,EAAAA,SAAS,EAAE,UAAA;AAA7B,CAFM,KAGnB;EACX,MAAM;IAAEA,SAAF;AAAaD,IAAAA,SAAAA;AAAb,GAAA,GAA2BD,OAAjC,CAAA;EACA,IAAI,CAACG,GAAD,EAAMC,SAAN,CAAA,GAAmBL,UAAU,CAACM,KAAX,CAAiBJ,SAAjB,CAAvB,CAAA;EAEAK,MAAM,CAAE,6BAA4BP,UAAW,CAAA,WAAA,EAAaE,SAAU,CAAhE,iBAAA,CAAA,EAAoFE,GAApF,CAAN,CAAA;;EAEA,IAAID,SAAS,KAAK,UAAlB,EAA8B;AAC5BC,IAAAA,GAAG,GAAGI,QAAQ,CAACJ,GAAD,CAAd,CAAA;AACD,GAFD,MAEO,IAAID,SAAS,KAAK,YAAlB,EAAgC;AACrCC,IAAAA,GAAG,GAAGK,UAAU,CAACL,GAAD,CAAhB,CAAA;AACD,GAAA;;AAED,EAAA,OAAO,CACL;AACEM,IAAAA,QAAQ,EAAEN,GADZ;IAEEC,SAAS,EAAEA,SAAS,KAAK,KAAd,GAAsBM,aAAa,CAACC,SAApC,GAAgDD,aAAa,CAACE,UAAAA;AAF3E,GADK,CAAP,CAAA;AAMD,EArBM;AAuBP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASC,cAAT,CACLC,KADK,EAELd,OAAqB,GAAG;AAAEC,EAAAA,SAAS,EAAE,GAAb;AAAkBC,EAAAA,SAAS,EAAE,YAAA;AAA7B,CAFnB,EAGG;EACR,MAAM;IAAEA,SAAF;AAAaD,IAAAA,SAAAA;AAAb,GAAA,GAA2BD,OAAjC,CAAA;AAEA,EAAA,IAAIe,cAAc,GAAGD,KAAK,CAACE,GAAN,CAAU,CAAC;IAAEZ,SAAF;AAAaK,IAAAA,QAAAA;AAAb,GAAD,KAA6B;IAC1D,IAAIQ,cAAc,GAAGb,SAAS,KAAK,WAAd,GAA4B,KAA5B,GAAoC,MAAzD,CAAA;IAEA,IAAIc,SAAS,GAAGT,QAAhB,CAAA;;IAEA,IAAIP,SAAS,KAAK,YAAlB,EAAgC;AAC9BgB,MAAAA,SAAS,GAAGV,UAAU,CAACC,QAAD,CAAtB,CAAA;AACD,KAFD,MAEO,IAAIP,SAAS,KAAK,UAAlB,EAA8B;AACnCgB,MAAAA,SAAS,GAAGX,QAAQ,CAACE,QAAD,CAApB,CAAA;AACD,KAAA;;AAED,IAAA,OAAQ,GAAES,SAAU,CAAA,EAAEjB,SAAU,CAAA,EAAEgB,cAAe,CAAjD,CAAA,CAAA;AACD,GAZoB,CAArB,CAAA;AAcA,EAAA,OAAOF,cAAc,CAACI,IAAf,CAAoB,GAApB,CAAP,CAAA;AACD;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../src/utils.ts"],"sourcesContent":["import { assert } from '@ember/debug';\nimport { camelize, underscore } from '@ember/string';\n\nimport { SortDirection } from './plugins/data-sorting/types';\n\nimport type { Sort, SortsOptions } from './plugins/data-sorting/types';\n\n/**\n * @example\n *\n * ```ts\n * deserializeSorts('first_name.asc', { separator: '.', transform: 'camelize' });\n * // => [{ property: 'firstName', direction: 'ascending' }]\n *\n * deserializeSorts('last_name.desc', { separator: '.', transform: 'camelize' });\n * // => [{ property: 'lastName', direction: 'descending' }]\n * ```\n */\n\nexport const deserializeSorts = (\n sortString: string,\n options: SortsOptions = { separator: '.', transform: 'camelize' }\n): Sort[] => {\n const { transform, separator } = options;\n let [key, direction] = sortString.split(separator);\n\n assert(`No key found for input: \\`${sortString}\\` using \\`${separator}\\` as a separator`, key);\n\n if (transform === 'camelize') {\n key = camelize(key);\n } else if (transform === 'underscore') {\n key = underscore(key);\n }\n\n return [\n {\n property: key,\n direction: direction === 'asc' ? SortDirection.Ascending : SortDirection.Descending,\n },\n ];\n};\n\n/**\n * @example\n *\n * ```ts\n * serializeSorts([{ property: 'firstName', direction: 'ascending' }],{ separator: '.', transform: 'camelize' });\n * // => 'first_name.asc'\n *\n * serializeSorts([{ property: 'lastName', direction: 'descending' }],{ separator: '.', transform: 'camelize' });\n * // => 'last_name.desc'\n * ```\n */\nexport function serializeSorts(\n sorts: Sort[],\n options: SortsOptions = { separator: '.', transform: 'underscore' }\n): string {\n const { transform, separator } = options;\n\n let sortParameters = sorts.map(({ direction, property }) => {\n let shortDirection = direction === 'ascending' ? 'asc' : 'desc';\n\n let sortField = property;\n\n if (transform === 'underscore') {\n sortField = underscore(property);\n } else if (transform === 'camelize') {\n sortField = camelize(property);\n }\n\n return `${sortField}${separator}${shortDirection}`;\n });\n\n return sortParameters.join('+');\n}\n"],"names":["deserializeSorts","sortString","options","separator","transform","key","direction","split","assert","camelize","underscore","property","SortDirection","Ascending","Descending","serializeSorts","sorts","sortParameters","map","shortDirection","sortField","join"],"mappings":";;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;MAEaA,gBAAgB,GAAG,CAC9BC,UAAkB,EAClBC,OAAqB,GAAG;AAAEC,EAAAA,SAAS,EAAE,GAAG;AAAEC,EAAAA,SAAS,EAAE,UAAA;AAAW,CAAC,KACtD;EACX,MAAM;IAAEA,SAAS;AAAED,IAAAA,SAAAA;AAAU,GAAC,GAAGD,OAAO,CAAA;EACxC,IAAI,CAACG,GAAG,EAAEC,SAAS,CAAC,GAAGL,UAAU,CAACM,KAAK,CAACJ,SAAS,CAAC,CAAA;EAElDK,MAAM,CAAE,6BAA4BP,UAAW,CAAA,WAAA,EAAaE,SAAU,CAAkB,iBAAA,CAAA,EAAEE,GAAG,CAAC,CAAA;EAE9F,IAAID,SAAS,KAAK,UAAU,EAAE;AAC5BC,IAAAA,GAAG,GAAGI,QAAQ,CAACJ,GAAG,CAAC,CAAA;AACrB,GAAC,MAAM,IAAID,SAAS,KAAK,YAAY,EAAE;AACrCC,IAAAA,GAAG,GAAGK,UAAU,CAACL,GAAG,CAAC,CAAA;AACvB,GAAA;AAEA,EAAA,OAAO,CACL;AACEM,IAAAA,QAAQ,EAAEN,GAAG;IACbC,SAAS,EAAEA,SAAS,KAAK,KAAK,GAAGM,aAAa,CAACC,SAAS,GAAGD,aAAa,CAACE,UAAAA;AAC3E,GAAC,CACF,CAAA;AACH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,cAAc,CAC5BC,KAAa,EACbd,OAAqB,GAAG;AAAEC,EAAAA,SAAS,EAAE,GAAG;AAAEC,EAAAA,SAAS,EAAE,YAAA;AAAa,CAAC,EAC3D;EACR,MAAM;IAAEA,SAAS;AAAED,IAAAA,SAAAA;AAAU,GAAC,GAAGD,OAAO,CAAA;AAExC,EAAA,IAAIe,cAAc,GAAGD,KAAK,CAACE,GAAG,CAAC,CAAC;IAAEZ,SAAS;AAAEK,IAAAA,QAAAA;AAAS,GAAC,KAAK;IAC1D,IAAIQ,cAAc,GAAGb,SAAS,KAAK,WAAW,GAAG,KAAK,GAAG,MAAM,CAAA;IAE/D,IAAIc,SAAS,GAAGT,QAAQ,CAAA;IAExB,IAAIP,SAAS,KAAK,YAAY,EAAE;AAC9BgB,MAAAA,SAAS,GAAGV,UAAU,CAACC,QAAQ,CAAC,CAAA;AAClC,KAAC,MAAM,IAAIP,SAAS,KAAK,UAAU,EAAE;AACnCgB,MAAAA,SAAS,GAAGX,QAAQ,CAACE,QAAQ,CAAC,CAAA;AAChC,KAAA;AAEA,IAAA,OAAQ,GAAES,SAAU,CAAA,EAAEjB,SAAU,CAAA,EAAEgB,cAAe,CAAC,CAAA,CAAA;AACpD,GAAC,CAAC,CAAA;AAEF,EAAA,OAAOF,cAAc,CAACI,IAAI,CAAC,GAAG,CAAC,CAAA;AACjC;;;;"}