ember-headless-table 1.4.2 → 1.4.4

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 (98) hide show
  1. package/dist/-private/-type-tests/plugin-properties.test.js +1 -1
  2. package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -1
  3. package/dist/-private/-type-tests/plugin-with.test.js +0 -1
  4. package/dist/-private/-type-tests/plugin-with.test.js.map +1 -1
  5. package/dist/-private/-type-tests/plugins-accessors.test.js +1 -2
  6. package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -1
  7. package/dist/-private/-type-tests/table-api.test.js +0 -1
  8. package/dist/-private/-type-tests/table-api.test.js.map +1 -1
  9. package/dist/-private/-type-tests/table-config.test.js +1 -2
  10. package/dist/-private/-type-tests/table-config.test.js.map +1 -1
  11. package/dist/-private/column.d.ts +3 -3
  12. package/dist/-private/column.js.map +1 -1
  13. package/dist/-private/interfaces/column.d.ts +5 -5
  14. package/dist/-private/interfaces/index.d.ts +7 -7
  15. package/dist/-private/interfaces/plugins.d.ts +3 -3
  16. package/dist/-private/interfaces/table.d.ts +5 -5
  17. package/dist/-private/js-helper.d.ts +2 -2
  18. package/dist/-private/js-helper.js +37 -1
  19. package/dist/-private/js-helper.js.map +1 -1
  20. package/dist/-private/preferences.d.ts +2 -2
  21. package/dist/-private/preferences.js +1 -1
  22. package/dist/-private/preferences.js.map +1 -1
  23. package/dist/-private/row.d.ts +1 -1
  24. package/dist/-private/row.js +1 -1
  25. package/dist/-private/row.js.map +1 -1
  26. package/dist/-private/table.js +2 -2
  27. package/dist/-private/utils.d.ts +1 -1
  28. package/dist/-private/utils.js.map +1 -1
  29. package/dist/applyDecoratedDescriptor-6b986a67.js.map +1 -1
  30. package/dist/{classPrivateFieldGet-b4d7d334.js → classPrivateFieldGet-0bfc0262.js} +2 -2
  31. package/dist/{classPrivateFieldGet-b4d7d334.js.map → classPrivateFieldGet-0bfc0262.js.map} +1 -1
  32. package/dist/defineProperty-4f0781e1.js +43 -0
  33. package/dist/defineProperty-4f0781e1.js.map +1 -0
  34. package/dist/index.d.ts +7 -7
  35. package/dist/plugins/-private/base.d.ts +6 -6
  36. package/dist/plugins/-private/base.js +51 -18
  37. package/dist/plugins/-private/base.js.map +1 -1
  38. package/dist/plugins/-private/utils.d.ts +2 -2
  39. package/dist/plugins/-private/utils.js.map +1 -1
  40. package/dist/plugins/column-reordering/helpers.d.ts +2 -2
  41. package/dist/plugins/column-reordering/helpers.js.map +1 -1
  42. package/dist/plugins/column-reordering/index.d.ts +3 -3
  43. package/dist/plugins/column-reordering/plugin.d.ts +3 -3
  44. package/dist/plugins/column-reordering/plugin.js +23 -26
  45. package/dist/plugins/column-reordering/plugin.js.map +1 -1
  46. package/dist/plugins/column-reordering/utils.d.ts +1 -1
  47. package/dist/plugins/column-reordering/utils.js.map +1 -1
  48. package/dist/plugins/column-resizing/handle.d.ts +2 -2
  49. package/dist/plugins/column-resizing/handle.js +4 -1
  50. package/dist/plugins/column-resizing/handle.js.map +1 -1
  51. package/dist/plugins/column-resizing/helpers.d.ts +1 -1
  52. package/dist/plugins/column-resizing/index.d.ts +4 -4
  53. package/dist/plugins/column-resizing/plugin.d.ts +3 -3
  54. package/dist/plugins/column-resizing/plugin.js +11 -3
  55. package/dist/plugins/column-resizing/plugin.js.map +1 -1
  56. package/dist/plugins/column-resizing/resize-observer.js.map +1 -1
  57. package/dist/plugins/column-visibility/helpers.d.ts +1 -1
  58. package/dist/plugins/column-visibility/index.d.ts +3 -3
  59. package/dist/plugins/column-visibility/plugin.d.ts +3 -3
  60. package/dist/plugins/column-visibility/plugin.js +1 -1
  61. package/dist/plugins/column-visibility/plugin.js.map +1 -1
  62. package/dist/plugins/data-sorting/helpers.d.ts +2 -2
  63. package/dist/plugins/data-sorting/index.d.ts +5 -5
  64. package/dist/plugins/data-sorting/plugin.d.ts +4 -4
  65. package/dist/plugins/data-sorting/plugin.js +1 -1
  66. package/dist/plugins/data-sorting/plugin.js.map +1 -1
  67. package/dist/plugins/data-sorting/types.d.ts +1 -1
  68. package/dist/plugins/data-sorting/types.js +6 -6
  69. package/dist/plugins/data-sorting/types.js.map +1 -1
  70. package/dist/plugins/index.d.ts +5 -5
  71. package/dist/plugins/metadata/helpers.d.ts +1 -1
  72. package/dist/plugins/metadata/helpers.js.map +1 -1
  73. package/dist/plugins/metadata/index.d.ts +3 -3
  74. package/dist/plugins/metadata/plugin.d.ts +1 -1
  75. package/dist/plugins/metadata/plugin.js +1 -1
  76. package/dist/plugins/metadata/plugin.js.map +1 -1
  77. package/dist/plugins/row-selection/helpers.d.ts +1 -1
  78. package/dist/plugins/row-selection/index.d.ts +3 -3
  79. package/dist/plugins/row-selection/plugin.d.ts +3 -3
  80. package/dist/plugins/row-selection/plugin.js +2 -2
  81. package/dist/plugins/row-selection/plugin.js.map +1 -1
  82. package/dist/plugins/sticky-columns/helpers.d.ts +1 -1
  83. package/dist/plugins/sticky-columns/helpers.js +2 -0
  84. package/dist/plugins/sticky-columns/helpers.js.map +1 -1
  85. package/dist/plugins/sticky-columns/index.d.ts +3 -3
  86. package/dist/plugins/sticky-columns/plugin.d.ts +3 -3
  87. package/dist/plugins/sticky-columns/plugin.js +13 -1
  88. package/dist/plugins/sticky-columns/plugin.js.map +1 -1
  89. package/dist/{table-0cbd2720.d.ts → table-443deac1.d.ts} +22 -7
  90. package/dist/{table-0cbd2720.js → table-443deac1.js} +56 -14
  91. package/dist/table-443deac1.js.map +1 -0
  92. package/dist/test-support/index.js.map +1 -1
  93. package/dist/utils.d.ts +1 -1
  94. package/dist/utils.js.map +1 -1
  95. package/package.json +2 -2
  96. package/dist/defineProperty-35ce617b.js +0 -16
  97. package/dist/defineProperty-35ce617b.js.map +0 -1
  98. package/dist/table-0cbd2720.js.map +0 -1
@@ -1,11 +1,27 @@
1
- import { _ as _defineProperty } from '../../defineProperty-35ce617b.js';
1
+ import { _ as _defineProperty } from '../../defineProperty-4f0781e1.js';
2
2
  import { assert } from '@ember/debug';
3
- import { T as TABLE_KEY } from '../../table-0cbd2720.js';
3
+ import { C as COLUMN_META_KEY, R as ROW_META_KEY, a as TABLE_META_KEY, b as TABLE_KEY } from '../../table-443deac1.js';
4
4
  import { normalizePluginsConfig } from './utils.js';
5
5
 
6
- const TABLE_META = new Map();
7
- const COLUMN_META = new WeakMap();
8
- const ROW_META = new WeakMap();
6
+ /**
7
+ * @public
8
+ *
9
+ * list of interfaces by feature name that consumers may provide alternative
10
+ * implementation for
11
+ */
12
+
13
+ /**
14
+ * @public
15
+ *
16
+ * list of interfaces by feature name that consumers may provide alternative
17
+ * implementation for
18
+ */
19
+
20
+ /**
21
+ * @private utility type
22
+ *
23
+ */
24
+
9
25
  /**
10
26
  * @public
11
27
  *
@@ -17,7 +33,6 @@ const ROW_META = new WeakMap();
17
33
  */
18
34
  class BasePlugin {
19
35
  constructor(table) {
20
- _defineProperty(this, "name", void 0);
21
36
  this.table = table;
22
37
  }
23
38
 
@@ -285,7 +300,8 @@ const meta = {
285
300
  * Note that this requires the column instance to exist on the table.
286
301
  */
287
302
  forColumn(column, klass) {
288
- return getPluginInstance(COLUMN_META, column, klass, () => {
303
+ let columnMeta = column.table[COLUMN_META_KEY];
304
+ return getPluginInstance(columnMeta, column, klass, () => {
289
305
  let plugin = column.table.pluginOf(klass);
290
306
  assert(`[${klass.name}] cannot get plugin instance of unregistered plugin class`, plugin);
291
307
  assert(`<#${plugin.name}> plugin does not have meta specified`, plugin.meta);
@@ -302,7 +318,8 @@ const meta = {
302
318
  * Note that this requires the row instance to exist on the table.
303
319
  */
304
320
  forRow(row, klass) {
305
- return getPluginInstance(ROW_META, row, klass, () => {
321
+ let rowMeta = row.table[ROW_META_KEY];
322
+ return getPluginInstance(rowMeta, row, klass, () => {
306
323
  let plugin = row.table.pluginOf(klass);
307
324
  assert(`[${klass.name}] cannot get plugin instance of unregistered plugin class`, plugin);
308
325
  assert(`<#${plugin.name}> plugin does not have meta specified`, plugin.meta);
@@ -317,12 +334,13 @@ const meta = {
317
334
  * plugin<->table instance pair.
318
335
  */
319
336
  forTable(table, klass) {
320
- return getPluginInstance(TABLE_META, table[TABLE_KEY], klass, () => {
337
+ let tableMeta = table[TABLE_META_KEY];
338
+ return getPluginInstance(tableMeta, klass, () => {
321
339
  let plugin = table.pluginOf(klass);
322
340
  assert(`[${klass.name}] cannot get plugin instance of unregistered plugin class`, plugin);
323
341
  assert(`<#${plugin.name}> plugin does not have meta specified`, plugin.meta);
324
342
  assert(`<#${plugin.name}> plugin does not specify table meta`, plugin.meta.table);
325
- assert(`<#${plugin.name}> plugin already exists for the table. ` + `A plugin may only be instantiated once per table.`, ![...(TABLE_META.get(table[TABLE_KEY])?.keys() ?? [])].includes(klass));
343
+ assert(`<#${plugin.name}> plugin already exists for the table. ` + `A plugin may only be instantiated once per table.`, ![...tableMeta.keys()].includes(klass));
326
344
  return new plugin.meta.table(table);
327
345
  });
328
346
  },
@@ -426,22 +444,37 @@ const options = {
426
444
  /**
427
445
  * @private
428
446
  */
429
- function getPluginInstance(map, rootKey, mapKey, factory) {
447
+
448
+ function getPluginInstance(...args) {
449
+ let map;
450
+ let mapKey;
451
+ let rootKey;
452
+ let factory;
453
+ if (args.length === 3) {
454
+ map = args[0];
455
+ mapKey = args[1];
456
+ factory = args[2];
457
+ } else if (args.length === 4) {
458
+ map = args[0];
459
+ rootKey = args[1];
460
+ mapKey = args[2];
461
+ factory = args[3];
462
+ } else {
463
+ throw new Error(
464
+ // TS says args is of type "never", but TS can't protect against general misuse
465
+ // (esp without TS)
466
+ `Incorrect arity passed to getPluginInstance. Expected 3 or 4, received ${args.length}`);
467
+ }
430
468
  let bucket;
431
469
  if (map instanceof WeakMap) {
432
- assert(`Cannot use string key with WeakMap`, typeof rootKey !== 'string');
470
+ assert(`rootKey is missing`, rootKey);
433
471
  bucket = map.get(rootKey);
434
472
  if (!bucket) {
435
473
  bucket = new Map();
436
474
  map.set(rootKey, bucket);
437
475
  }
438
476
  } else {
439
- assert(`Cannot use object key with Map`, typeof rootKey === 'string');
440
- bucket = map.get(rootKey);
441
- if (!bucket) {
442
- bucket = new Map();
443
- map.set(rootKey, bucket);
444
- }
477
+ bucket = map;
445
478
  }
446
479
  let instance = bucket.get(mapKey);
447
480
  if (instance) {
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sources":["../../../src/plugins/-private/base.ts"],"sourcesContent":["import { assert } from '@ember/debug';\n\nimport { TABLE_KEY } from '../../-private/table';\nimport { normalizePluginsConfig } from './utils';\n\nimport type { Table } from '../../-private/table';\nimport type { ColumnReordering } from '../column-reordering';\nimport type { ColumnVisibility } from '../column-visibility';\nimport type { Class, Constructor } from '[private-types]';\nimport type { Column, Row } from '[public-types]';\nimport type {\n ColumnMetaFor,\n ColumnOptionsFor,\n OptionsFor,\n Plugin,\n RowMetaFor,\n TableMetaFor,\n} from '#interfaces';\n\nconst TABLE_META = new Map<string, Map<Class<unknown>, any>>();\nconst COLUMN_META = new WeakMap<Column, Map<Class<unknown>, any>>();\nconst ROW_META = new WeakMap<Row, Map<Class<unknown>, any>>();\n\ntype InstanceOf<T> = T extends Class<infer Instance> ? Instance : T;\n\n/**\n * @public\n *\n * list of interfaces by feature name that consumers may provide alternative\n * implementation for\n */\nexport interface TableFeatures extends Record<string, unknown | undefined> {\n /**\n * @public\n *\n * interface for the table meta of a \"column visibility plugin\"\n */\n columnVisibility: InstanceOf<ColumnVisibility['meta']['table']>;\n /**\n * @public\n *\n * interface for the table meta of a \"column order plugin\"\n */\n columnOrder: InstanceOf<ColumnReordering['meta']['table']>;\n}\n\n/**\n * @public\n *\n * list of interfaces by feature name that consumers may provide alternative\n * implementation for\n */\nexport interface ColumnFeatures extends Record<string, unknown | undefined> {\n /**\n * @public\n *\n * interface for the column meta of a \"column visibility plugin\"\n */\n columnVisibility: InstanceOf<ColumnVisibility['meta']['column']>;\n /**\n * @public\n *\n * interface for the column meta of a \"column order plugin\"\n */\n columnOrder: InstanceOf<ColumnReordering['meta']['column']>;\n}\n\n/**\n * @private utility type\n *\n */\nexport type SignatureFrom<Klass extends BasePlugin<any>> = Klass extends BasePlugin<infer Signature>\n ? Signature\n : never;\n\ndeclare const __Signature__: unique symbol;\n\n/**\n * @public\n *\n * If your table plugin is a class, you may extend from BasePlugin, which provides\n * small utility methods and properties for getting the metadata for your plugin\n * for the table and each column\n *\n * One instance of a plugin exists per table\n */\nexport abstract class BasePlugin<Signature = unknown> implements Plugin<Signature> {\n constructor(protected table: Table) {}\n\n /**\n * @private (secret)\n *\n * Because classes are kind of like interfaces,\n * we need \"something\" to help TS know what a Resource is.\n *\n * This isn't a real API, but does help with type inference\n * with the SignatureFrom utility above\n */\n declare [__Signature__]: Signature;\n\n /**\n * Helper for specifying plugins on `headlessTable` with the plugin-level options\n */\n static with<T extends BasePlugin<any>>(\n this: Constructor<T>,\n configFn: () => OptionsFor<SignatureFrom<T>>\n ): [Constructor<T>, () => OptionsFor<SignatureFrom<T>>] {\n return [this, configFn];\n }\n\n /**\n * Helper for specifying column-level configurations for a plugin on `headlessTable`'s\n * columns option\n */\n static forColumn<T extends BasePlugin<any>>(\n this: Constructor<T>,\n configFn: () => ColumnOptionsFor<SignatureFrom<T>>\n ): [Constructor<T>, () => ColumnOptionsFor<SignatureFrom<T>>] {\n return [this, configFn];\n }\n\n declare meta?: {\n column?: Constructor<ColumnMetaFor<Signature>>;\n table?: Constructor<TableMetaFor<Signature>>;\n row?: Constructor<RowMetaFor<Signature>>;\n };\n\n abstract name: string;\n static features?: string[];\n static requires?: string[];\n}\n\n/**\n * @public\n *\n * returns boolean if the passed table has an instance of the configured passed plugin class.\n * This can be used to help guard against accessing public-specific APIs if those plugins\n * are not configured for a particular table instance\n */\nexport function hasPlugin<P extends BasePlugin<any>, Data = unknown>(\n table: Table<Data>,\n klass: Class<P>\n) {\n return Boolean(table.pluginOf(klass));\n}\n\nexport const preferences = {\n /**\n * @public\n *\n * returns an object for getting and setting preferences data\n * based on the column (scoped to key)\n *\n * Only the provided plugin will have access to these preferences\n * (though, if other plugins can guess how the underlying plugin access\n * works, they can access this data, too. No security guaranteed)\n */\n forColumn<P extends BasePlugin<any>, Data = unknown>(column: Column<Data>, klass: Class<P>) {\n return {\n /**\n * delete an entry on the underlying `Map` used for this column-plugin pair\n */\n delete(key: string) {\n let prefs = column.table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n let columnPrefs = existing.forColumn(column.key);\n\n columnPrefs.delete(key);\n\n return prefs.persist();\n },\n /**\n * get an entry on the underlying `Map` used for this column-plugin pair\n */\n get(key: string) {\n let prefs = column.table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n let columnPrefs = existing.forColumn(column.key);\n\n return columnPrefs.get(key);\n },\n /**\n * set an entry on the underlying `Map` used for this column-plugin pair\n */\n set(key: string, value: unknown) {\n let prefs = column.table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n let columnPrefs = existing.forColumn(column.key);\n\n columnPrefs.set(key, value);\n\n prefs.persist();\n },\n };\n },\n\n /**\n * @public\n *\n * returns an object for getting and setting preferences data\n * based on the table (scoped to the key: \"table\")\n *\n * Only the provided plugin will have access to these preferences\n * (though, if other plugins can guess how the underlying plugin access\n * works, they can access this data, too. No security guaranteed)\n */\n forTable<P extends BasePlugin<any>, Data = unknown>(table: Table<Data>, klass: Class<P>) {\n return {\n /**\n * delete an entry on the underlying `Map` used for this column-plugin pair\n */\n delete(key: string) {\n let prefs = table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n\n existing.table.delete(key);\n\n return prefs.persist();\n },\n /**\n * get an entry on the underlying `Map` used for this column-plugin pair\n */\n get(key: string) {\n let prefs = table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n\n return existing.table.get(key);\n },\n /**\n * set an entry on the underlying `Map` used for this column-plugin pair\n */\n set(key: string, value: unknown) {\n let prefs = table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n\n existing.table.set(key, value);\n\n return prefs.persist();\n },\n };\n },\n};\n\n/**\n * if a `requester` is not provided,\n * Get the columns for the table, considering any and all plugins that could modify columns.\n *\n * If you are an end-consumer of ember-headless-table, this is the function to use.\n * If you are a plugin-author, you'll want to pass your plugin class as the second parameter.\n *\n * For a given plugin, `requester`, determine what columns should be returned.\n * Since multiple plugins could be used in a table, there is an implicit hierarchy of\n * column modifications that can occur from each of those plugins.\n *\n * If a plugin defines other plugins as either *requirements* or *optional requirements*,\n * and that upstream plugin defines a `columns` property, then those columns will be returned here.\n *\n * This works recursively up the plugin tree up until a plugin has no requirements, and then\n * all columns from the table are returned.\n */\nfunction columnsFor<DataType = any>(\n table: Table<DataType>,\n requester?: Plugin<any> | undefined\n): Column<DataType>[] {\n assert(`First argument passed to columns.for must be an instance of Table`, table[TABLE_KEY]);\n\n let visibility = findPlugin(table.plugins, 'columnVisibility');\n let reordering = findPlugin(table.plugins, 'columnOrder');\n\n // TODO: actually resolve the graph, rather than use the hardcoded feature names\n // atm, this only \"happens\" to work based on expectations of\n // of the currently implemented plugins' capabilities and implied hierarchy.\n\n if (requester) {\n assert(\n `[${requester.name}] requested columns from the table, but the plugin, ${requester.name}, ` +\n `is not used in this table`,\n table.plugins.some((plugin) => plugin instanceof (requester as Class<Plugin>))\n );\n\n if (visibility && visibility.constructor === requester) {\n return table.columns.values();\n }\n\n if (reordering && reordering.constructor === requester) {\n if (visibility) {\n assert(\n `<#${visibility.name}> defined a 'columns' property, but did not return valid data.`,\n visibility.columns && Array.isArray(visibility.columns)\n );\n\n return visibility.columns;\n }\n\n return table.columns.values();\n }\n\n if (reordering) {\n assert(\n `<#${reordering.name}> defined a 'columns' property, but did not return valid data.`,\n reordering.columns && Array.isArray(reordering.columns)\n );\n\n return reordering.columns;\n }\n\n if (visibility) {\n assert(\n `<#${visibility.name}> defined a 'columns' property, but did not return valid data.`,\n visibility.columns && Array.isArray(visibility.columns)\n );\n\n return visibility.columns;\n }\n\n return table.columns.values();\n }\n\n /**\n * This flow is the inverse of when we have a requester\n */\n\n if (reordering) {\n assert(\n `<#${reordering.name}> defined a 'columns' property, but did not return valid data.`,\n reordering.columns && Array.isArray(reordering.columns)\n );\n\n return reordering.columns;\n }\n\n if (visibility) {\n assert(\n `<#${visibility.name}> defined a 'columns' property, but did not return valid data.`,\n visibility.columns && Array.isArray(visibility.columns)\n );\n\n return visibility.columns;\n }\n\n return table.columns.values();\n}\n\nexport const columns = {\n for: columnsFor,\n\n /**\n * for a given current or reference column, return the column that\n * is immediately next, or to the right of that column.\n *\n * If a plugin class is provided, the hierarchy of column list modifications\n * will be respected.\n */\n next: <Data = unknown>(\n current: Column<Data>,\n requester?: Plugin<any>\n ): Column<Data> | undefined => {\n let columns = requester ? columnsFor(current.table, requester) : columnsFor(current.table);\n\n let referenceIndex = columns.indexOf(current);\n\n assert(\n `index of reference column must be >= 0. column likely not a part of the table`,\n referenceIndex >= 0\n );\n\n /**\n * There can be nothing after the last column\n */\n if (referenceIndex >= columns.length - 1) {\n return undefined;\n }\n\n return columns[referenceIndex + 1];\n },\n\n /**\n * for a given current or reference column, return the column that\n * is immediately previous, or to the left of that column.\n *\n * If a plugin class is provided, the hierarchy of column list modifications\n * will be respected.\n */\n previous: <Data = unknown>(\n current: Column<Data>,\n requester?: Plugin<any>\n ): Column<Data> | undefined => {\n let columns = requester ? columnsFor(current.table, requester) : columnsFor(current.table);\n let referenceIndex = columns.indexOf(current);\n\n assert(\n `index of reference column must be >= 0. column likely not a part of the table`,\n referenceIndex >= 0\n );\n\n /**\n * There can be nothing before the first column\n */\n if (referenceIndex === 0) {\n return undefined;\n }\n\n return columns[referenceIndex - 1];\n },\n /**\n * for a given current or reference column, return the columns that\n * should appear before, or to the left of that column.\n *\n * if a plugin class is provided, the hierarchy of column list modifications\n * will be respected.\n */\n before: <Data = unknown>(current: Column<Data>, requester?: Plugin<any>): Column<Data>[] => {\n let columns = requester ? columnsFor(current.table, requester) : columnsFor(current.table);\n\n let referenceIndex = columns.indexOf(current);\n\n return columns.slice(0, referenceIndex);\n },\n /**\n * for a given current or reference column, return the columns that\n * should appear after, or to the right of that column.\n *\n * if a plugin class is provided, the hierarchy of column list modifications\n * will be respected.\n */\n after: <Data = unknown>(current: Column<Data>, requester?: Plugin<any>): Column<Data>[] => {\n let columns = requester ? columnsFor(current.table, requester) : columnsFor(current.table);\n\n let referenceIndex = columns.indexOf(current);\n\n return columns.slice(referenceIndex + 1);\n },\n};\n\nexport const meta = {\n /**\n * @public\n *\n * For a given column and plugin, return the meta / state bucket for the\n * plugin<->column instance pair.\n *\n * Note that this requires the column instance to exist on the table.\n */\n forColumn<P extends BasePlugin<any>, Data = unknown>(\n column: Column<Data>,\n klass: Class<P>\n ): ColumnMetaFor<SignatureFrom<P>> {\n return getPluginInstance(COLUMN_META, column, klass, () => {\n let plugin = column.table.pluginOf(klass);\n\n assert(`[${klass.name}] cannot get plugin instance of unregistered plugin class`, plugin);\n assert(`<#${plugin.name}> plugin does not have meta specified`, plugin.meta);\n assert(`<#${plugin.name}> plugin does not specify column meta`, plugin.meta.column);\n\n return new plugin.meta.column(column);\n });\n },\n\n /**\n * @public\n *\n * For a given row and plugin, return the meta / state bucket for the\n * plugin<->row instance pair.\n *\n * Note that this requires the row instance to exist on the table.\n */\n forRow<P extends BasePlugin<any>, Data = unknown>(\n row: Row<Data>,\n klass: Class<P>\n ): RowMetaFor<SignatureFrom<P>> {\n return getPluginInstance(ROW_META, row, klass, () => {\n let plugin = row.table.pluginOf(klass);\n\n assert(`[${klass.name}] cannot get plugin instance of unregistered plugin class`, plugin);\n assert(`<#${plugin.name}> plugin does not have meta specified`, plugin.meta);\n assert(`<#${plugin.name}> plugin does not specify row meta`, plugin.meta.row);\n\n return new plugin.meta.row(row);\n });\n },\n\n /**\n * @public\n *\n * For a given table and plugin, return the meta / state bucket for the\n * plugin<->table instance pair.\n */\n forTable<P extends BasePlugin<any>, Data = unknown>(\n table: Table<Data>,\n klass: Class<P>\n ): TableMetaFor<SignatureFrom<P>> {\n return getPluginInstance(TABLE_META, table[TABLE_KEY], klass, () => {\n let plugin = table.pluginOf(klass);\n\n assert(`[${klass.name}] cannot get plugin instance of unregistered plugin class`, plugin);\n assert(`<#${plugin.name}> plugin does not have meta specified`, plugin.meta);\n assert(`<#${plugin.name}> plugin does not specify table meta`, plugin.meta.table);\n assert(\n `<#${plugin.name}> plugin already exists for the table. ` +\n `A plugin may only be instantiated once per table.`,\n ![...(TABLE_META.get(table[TABLE_KEY])?.keys() ?? [])].includes(klass)\n );\n\n return new plugin.meta.table(table);\n });\n },\n\n /**\n * Instead of finding meta based on column or table instances,\n * you can search for meta based on feature strings, such as `columnWidth`\n */\n withFeature: {\n /**\n * @public\n *\n * for a given column and feature name, return the \"ColumnMeta\" for that feature.\n * This is useful when plugins may depend on one another but may not necessarily care which\n * plugin is providing what behavior.\n *\n * For example, multiple column-focused plugins may care about width or visibility\n */\n forColumn<FeatureName extends string, Data = unknown>(\n column: Column<Data>,\n featureName: FeatureName\n ): ColumnFeatures[FeatureName] {\n let { plugins } = column.table;\n\n let provider = findPlugin(plugins, featureName);\n\n assert(\n `Could not find plugin with feature: ${featureName}. ` +\n `Available features: ${availableFeatures(plugins)}`,\n provider\n );\n\n // TS doesn't believe in the constructor property?\n return meta.forColumn(column, (provider as any).constructor);\n },\n\n /**\n * @public\n *\n * for a given table and feature name, return the \"TableMeta\" for that feature.\n * This is useful when plugins may depend on one another but may not necessarily care\n * which plugin is providing that behavior.\n *\n * For example, multiple column-focused plugins may care about width or visibility.\n */\n forTable<FeatureName extends string, Data = unknown>(\n table: Table<Data>,\n featureName: FeatureName\n ): TableFeatures[FeatureName] {\n let { plugins } = table;\n\n let provider = findPlugin(plugins, featureName);\n\n assert(\n `Could not find plugin with feature: ${featureName}. ` +\n `Available features: ${availableFeatures(plugins)}`,\n provider\n );\n\n // TS doesn't believe in the constructor property?\n return meta.forTable(table, (provider as any).constructor);\n },\n },\n};\n\nfunction findPlugin(plugins: Plugin[], featureName: string) {\n let provider = plugins.find((plugin) => {\n /*\n * have to cast in order to get static properties, but we may not have a base plugin\n * so we must rely on nullish coalesting to protect from throwing exceptions\n *\n * (Plugin || BasePlugin).features)\n */\n let features = plugin.features || (plugin.constructor as typeof BasePlugin).features;\n\n return features?.includes(featureName);\n });\n\n return provider;\n}\n\nfunction availableFeatures(plugins: Plugin[]): string {\n let allFeatures = plugins\n .map((plugin) => {\n /*\n * have to cast in order to get static properties, but we may not have a base plugin\n * so we must rely on nullish coalesting to protect from throwing exceptions\n *\n * (Plugin || BasePlugin).features)\n */\n let features = plugin.features || (plugin.constructor as typeof BasePlugin).features;\n\n return features;\n })\n .flat()\n .filter(Boolean);\n\n return allFeatures.length > 0 ? allFeatures.join(', ') : '[none]';\n}\n\nexport const options = {\n /**\n * @public\n *\n * For a given table and plugin, return the options, if any were given from the user\n * during construction of the table.\n */\n forTable<P extends BasePlugin<any>, Data = unknown>(\n table: Table<Data>,\n klass: Class<P>\n ): Partial<OptionsFor<SignatureFrom<P>>> {\n let normalized = normalizePluginsConfig(table?.config?.plugins);\n let tuple = normalized?.find((option) => option[0] === klass);\n let t = tuple as [Class<P>, () => OptionsFor<SignatureFrom<P>>];\n\n // Plugin not provided, likely\n if (!t) return {};\n\n let fn = t[1];\n\n return fn() ?? {};\n },\n\n forColumn<P extends BasePlugin<any>, Data = unknown>(\n column: Column<Data>,\n klass: Class<P>\n ): Partial<ColumnOptionsFor<SignatureFrom<P>>> {\n let tuple = column.config.pluginOptions?.find((option) => option[0] === klass);\n let t = tuple as [unknown, () => ColumnOptionsFor<SignatureFrom<P>>];\n\n let fn = t?.[1];\n\n if (!fn) return {};\n\n return fn() ?? {};\n },\n};\n\n/**\n * @private\n */\nfunction getPluginInstance<RootKey extends string | Column<any> | Row<any>, Instance>(\n map: RootKey extends string\n ? Map<string, Map<Class<Instance>, Instance>>\n : WeakMap<Column | Row, Map<Class<Instance>, Instance>>,\n rootKey: RootKey,\n mapKey: Class<Instance>,\n factory: () => Instance\n): Instance {\n let bucket: Map<Class<Instance>, Instance> | undefined;\n\n if (map instanceof WeakMap) {\n assert(`Cannot use string key with WeakMap`, typeof rootKey !== 'string');\n\n bucket = map.get(rootKey);\n\n if (!bucket) {\n bucket = new Map();\n\n map.set(rootKey, bucket);\n }\n } else {\n assert(`Cannot use object key with Map`, typeof rootKey === 'string');\n bucket = map.get(rootKey);\n\n if (!bucket) {\n bucket = new Map();\n\n map.set(rootKey, bucket);\n }\n }\n\n let instance = bucket.get(mapKey);\n\n if (instance) {\n return instance;\n }\n\n instance = factory();\n\n bucket.set(mapKey, instance);\n\n return instance;\n}\n"],"names":["TABLE_META","Map","COLUMN_META","WeakMap","ROW_META","BasePlugin","constructor","table","with","configFn","forColumn","hasPlugin","klass","Boolean","pluginOf","preferences","column","delete","key","prefs","existing","storage","forPlugin","name","columnPrefs","persist","get","set","value","forTable","columnsFor","requester","assert","TABLE_KEY","visibility","findPlugin","plugins","reordering","some","plugin","columns","values","Array","isArray","for","next","current","referenceIndex","indexOf","length","undefined","previous","before","slice","after","meta","getPluginInstance","forRow","row","keys","includes","withFeature","featureName","provider","availableFeatures","find","features","allFeatures","map","flat","filter","join","options","normalized","normalizePluginsConfig","config","tuple","option","t","fn","pluginOptions","rootKey","mapKey","factory","bucket","instance"],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sources":["../../../src/plugins/-private/base.ts"],"sourcesContent":["import { assert } from '@ember/debug';\n\nimport { COLUMN_META_KEY, ROW_META_KEY, TABLE_KEY, TABLE_META_KEY } from '../../-private/table';\nimport { normalizePluginsConfig } from './utils';\n\nimport type { Table } from '../../-private/table';\nimport type { ColumnReordering } from '../column-reordering';\nimport type { ColumnVisibility } from '../column-visibility';\nimport type { Class, Constructor } from '[private-types]';\nimport type { Column, Row } from '[public-types]';\nimport type {\n ColumnMetaFor,\n ColumnOptionsFor,\n OptionsFor,\n Plugin,\n RowMetaFor,\n TableMetaFor,\n} from '#interfaces';\n\ntype InstanceOf<T> = T extends Class<infer Instance> ? Instance : T;\n\n/**\n * @public\n *\n * list of interfaces by feature name that consumers may provide alternative\n * implementation for\n */\nexport interface TableFeatures extends Record<string, unknown | undefined> {\n /**\n * @public\n *\n * interface for the table meta of a \"column visibility plugin\"\n */\n columnVisibility: InstanceOf<ColumnVisibility['meta']['table']>;\n /**\n * @public\n *\n * interface for the table meta of a \"column order plugin\"\n */\n columnOrder: InstanceOf<ColumnReordering['meta']['table']>;\n}\n\n/**\n * @public\n *\n * list of interfaces by feature name that consumers may provide alternative\n * implementation for\n */\nexport interface ColumnFeatures extends Record<string, unknown | undefined> {\n /**\n * @public\n *\n * interface for the column meta of a \"column visibility plugin\"\n */\n columnVisibility: InstanceOf<ColumnVisibility['meta']['column']>;\n /**\n * @public\n *\n * interface for the column meta of a \"column order plugin\"\n */\n columnOrder: InstanceOf<ColumnReordering['meta']['column']>;\n}\n\n/**\n * @private utility type\n *\n */\nexport type SignatureFrom<Klass extends BasePlugin<any>> = Klass extends BasePlugin<infer Signature>\n ? Signature\n : never;\n\ndeclare const __Signature__: unique symbol;\n\n/**\n * @public\n *\n * If your table plugin is a class, you may extend from BasePlugin, which provides\n * small utility methods and properties for getting the metadata for your plugin\n * for the table and each column\n *\n * One instance of a plugin exists per table\n */\nexport abstract class BasePlugin<Signature = unknown> implements Plugin<Signature> {\n constructor(protected table: Table) {}\n\n /**\n * @private (secret)\n *\n * Because classes are kind of like interfaces,\n * we need \"something\" to help TS know what a Resource is.\n *\n * This isn't a real API, but does help with type inference\n * with the SignatureFrom utility above\n */\n declare [__Signature__]: Signature;\n\n /**\n * Helper for specifying plugins on `headlessTable` with the plugin-level options\n */\n static with<T extends BasePlugin<any>>(\n this: Constructor<T>,\n configFn: () => OptionsFor<SignatureFrom<T>>\n ): [Constructor<T>, () => OptionsFor<SignatureFrom<T>>] {\n return [this, configFn];\n }\n\n /**\n * Helper for specifying column-level configurations for a plugin on `headlessTable`'s\n * columns option\n */\n static forColumn<T extends BasePlugin<any>>(\n this: Constructor<T>,\n configFn: () => ColumnOptionsFor<SignatureFrom<T>>\n ): [Constructor<T>, () => ColumnOptionsFor<SignatureFrom<T>>] {\n return [this, configFn];\n }\n\n declare meta?: {\n column?: Constructor<ColumnMetaFor<Signature>>;\n table?: Constructor<TableMetaFor<Signature>>;\n row?: Constructor<RowMetaFor<Signature>>;\n };\n\n abstract name: string;\n static features?: string[];\n static requires?: string[];\n}\n\n/**\n * @public\n *\n * returns boolean if the passed table has an instance of the configured passed plugin class.\n * This can be used to help guard against accessing public-specific APIs if those plugins\n * are not configured for a particular table instance\n */\nexport function hasPlugin<P extends BasePlugin<any>, Data = unknown>(\n table: Table<Data>,\n klass: Class<P>\n) {\n return Boolean(table.pluginOf(klass));\n}\n\nexport const preferences = {\n /**\n * @public\n *\n * returns an object for getting and setting preferences data\n * based on the column (scoped to key)\n *\n * Only the provided plugin will have access to these preferences\n * (though, if other plugins can guess how the underlying plugin access\n * works, they can access this data, too. No security guaranteed)\n */\n forColumn<P extends BasePlugin<any>, Data = unknown>(column: Column<Data>, klass: Class<P>) {\n return {\n /**\n * delete an entry on the underlying `Map` used for this column-plugin pair\n */\n delete(key: string) {\n let prefs = column.table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n let columnPrefs = existing.forColumn(column.key);\n\n columnPrefs.delete(key);\n\n return prefs.persist();\n },\n /**\n * get an entry on the underlying `Map` used for this column-plugin pair\n */\n get(key: string) {\n let prefs = column.table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n let columnPrefs = existing.forColumn(column.key);\n\n return columnPrefs.get(key);\n },\n /**\n * set an entry on the underlying `Map` used for this column-plugin pair\n */\n set(key: string, value: unknown) {\n let prefs = column.table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n let columnPrefs = existing.forColumn(column.key);\n\n columnPrefs.set(key, value);\n\n prefs.persist();\n },\n };\n },\n\n /**\n * @public\n *\n * returns an object for getting and setting preferences data\n * based on the table (scoped to the key: \"table\")\n *\n * Only the provided plugin will have access to these preferences\n * (though, if other plugins can guess how the underlying plugin access\n * works, they can access this data, too. No security guaranteed)\n */\n forTable<P extends BasePlugin<any>, Data = unknown>(table: Table<Data>, klass: Class<P>) {\n return {\n /**\n * delete an entry on the underlying `Map` used for this column-plugin pair\n */\n delete(key: string) {\n let prefs = table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n\n existing.table.delete(key);\n\n return prefs.persist();\n },\n /**\n * get an entry on the underlying `Map` used for this column-plugin pair\n */\n get(key: string) {\n let prefs = table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n\n return existing.table.get(key);\n },\n /**\n * set an entry on the underlying `Map` used for this column-plugin pair\n */\n set(key: string, value: unknown) {\n let prefs = table.preferences;\n let existing = prefs.storage.forPlugin(klass.name);\n\n existing.table.set(key, value);\n\n return prefs.persist();\n },\n };\n },\n};\n\n/**\n * if a `requester` is not provided,\n * Get the columns for the table, considering any and all plugins that could modify columns.\n *\n * If you are an end-consumer of ember-headless-table, this is the function to use.\n * If you are a plugin-author, you'll want to pass your plugin class as the second parameter.\n *\n * For a given plugin, `requester`, determine what columns should be returned.\n * Since multiple plugins could be used in a table, there is an implicit hierarchy of\n * column modifications that can occur from each of those plugins.\n *\n * If a plugin defines other plugins as either *requirements* or *optional requirements*,\n * and that upstream plugin defines a `columns` property, then those columns will be returned here.\n *\n * This works recursively up the plugin tree up until a plugin has no requirements, and then\n * all columns from the table are returned.\n */\nfunction columnsFor<DataType = any>(\n table: Table<DataType>,\n requester?: Plugin<any> | undefined\n): Column<DataType>[] {\n assert(`First argument passed to columns.for must be an instance of Table`, table[TABLE_KEY]);\n\n let visibility = findPlugin(table.plugins, 'columnVisibility');\n let reordering = findPlugin(table.plugins, 'columnOrder');\n\n // TODO: actually resolve the graph, rather than use the hardcoded feature names\n // atm, this only \"happens\" to work based on expectations of\n // of the currently implemented plugins' capabilities and implied hierarchy.\n\n if (requester) {\n assert(\n `[${requester.name}] requested columns from the table, but the plugin, ${requester.name}, ` +\n `is not used in this table`,\n table.plugins.some((plugin) => plugin instanceof (requester as Class<Plugin>))\n );\n\n if (visibility && visibility.constructor === requester) {\n return table.columns.values();\n }\n\n if (reordering && reordering.constructor === requester) {\n if (visibility) {\n assert(\n `<#${visibility.name}> defined a 'columns' property, but did not return valid data.`,\n visibility.columns && Array.isArray(visibility.columns)\n );\n\n return visibility.columns;\n }\n\n return table.columns.values();\n }\n\n if (reordering) {\n assert(\n `<#${reordering.name}> defined a 'columns' property, but did not return valid data.`,\n reordering.columns && Array.isArray(reordering.columns)\n );\n\n return reordering.columns;\n }\n\n if (visibility) {\n assert(\n `<#${visibility.name}> defined a 'columns' property, but did not return valid data.`,\n visibility.columns && Array.isArray(visibility.columns)\n );\n\n return visibility.columns;\n }\n\n return table.columns.values();\n }\n\n /**\n * This flow is the inverse of when we have a requester\n */\n\n if (reordering) {\n assert(\n `<#${reordering.name}> defined a 'columns' property, but did not return valid data.`,\n reordering.columns && Array.isArray(reordering.columns)\n );\n\n return reordering.columns;\n }\n\n if (visibility) {\n assert(\n `<#${visibility.name}> defined a 'columns' property, but did not return valid data.`,\n visibility.columns && Array.isArray(visibility.columns)\n );\n\n return visibility.columns;\n }\n\n return table.columns.values();\n}\n\nexport const columns = {\n for: columnsFor,\n\n /**\n * for a given current or reference column, return the column that\n * is immediately next, or to the right of that column.\n *\n * If a plugin class is provided, the hierarchy of column list modifications\n * will be respected.\n */\n next: <Data = unknown>(\n current: Column<Data>,\n requester?: Plugin<any>\n ): Column<Data> | undefined => {\n let columns = requester ? columnsFor(current.table, requester) : columnsFor(current.table);\n\n let referenceIndex = columns.indexOf(current);\n\n assert(\n `index of reference column must be >= 0. column likely not a part of the table`,\n referenceIndex >= 0\n );\n\n /**\n * There can be nothing after the last column\n */\n if (referenceIndex >= columns.length - 1) {\n return undefined;\n }\n\n return columns[referenceIndex + 1];\n },\n\n /**\n * for a given current or reference column, return the column that\n * is immediately previous, or to the left of that column.\n *\n * If a plugin class is provided, the hierarchy of column list modifications\n * will be respected.\n */\n previous: <Data = unknown>(\n current: Column<Data>,\n requester?: Plugin<any>\n ): Column<Data> | undefined => {\n let columns = requester ? columnsFor(current.table, requester) : columnsFor(current.table);\n let referenceIndex = columns.indexOf(current);\n\n assert(\n `index of reference column must be >= 0. column likely not a part of the table`,\n referenceIndex >= 0\n );\n\n /**\n * There can be nothing before the first column\n */\n if (referenceIndex === 0) {\n return undefined;\n }\n\n return columns[referenceIndex - 1];\n },\n /**\n * for a given current or reference column, return the columns that\n * should appear before, or to the left of that column.\n *\n * if a plugin class is provided, the hierarchy of column list modifications\n * will be respected.\n */\n before: <Data = unknown>(current: Column<Data>, requester?: Plugin<any>): Column<Data>[] => {\n let columns = requester ? columnsFor(current.table, requester) : columnsFor(current.table);\n\n let referenceIndex = columns.indexOf(current);\n\n return columns.slice(0, referenceIndex);\n },\n /**\n * for a given current or reference column, return the columns that\n * should appear after, or to the right of that column.\n *\n * if a plugin class is provided, the hierarchy of column list modifications\n * will be respected.\n */\n after: <Data = unknown>(current: Column<Data>, requester?: Plugin<any>): Column<Data>[] => {\n let columns = requester ? columnsFor(current.table, requester) : columnsFor(current.table);\n\n let referenceIndex = columns.indexOf(current);\n\n return columns.slice(referenceIndex + 1);\n },\n};\n\nexport const meta = {\n /**\n * @public\n *\n * For a given column and plugin, return the meta / state bucket for the\n * plugin<->column instance pair.\n *\n * Note that this requires the column instance to exist on the table.\n */\n forColumn<P extends BasePlugin<any>, Data = unknown>(\n column: Column<Data>,\n klass: Class<P>\n ): ColumnMetaFor<SignatureFrom<P>> {\n let columnMeta = column.table[COLUMN_META_KEY];\n\n return getPluginInstance(columnMeta, column, klass, () => {\n let plugin = column.table.pluginOf(klass);\n\n assert(`[${klass.name}] cannot get plugin instance of unregistered plugin class`, plugin);\n assert(`<#${plugin.name}> plugin does not have meta specified`, plugin.meta);\n assert(`<#${plugin.name}> plugin does not specify column meta`, plugin.meta.column);\n\n return new plugin.meta.column(column);\n });\n },\n\n /**\n * @public\n *\n * For a given row and plugin, return the meta / state bucket for the\n * plugin<->row instance pair.\n *\n * Note that this requires the row instance to exist on the table.\n */\n forRow<P extends BasePlugin<any>, Data = unknown>(\n row: Row<Data>,\n klass: Class<P>\n ): RowMetaFor<SignatureFrom<P>> {\n let rowMeta = row.table[ROW_META_KEY];\n\n return getPluginInstance(rowMeta, row, klass, () => {\n let plugin = row.table.pluginOf(klass);\n\n assert(`[${klass.name}] cannot get plugin instance of unregistered plugin class`, plugin);\n assert(`<#${plugin.name}> plugin does not have meta specified`, plugin.meta);\n assert(`<#${plugin.name}> plugin does not specify row meta`, plugin.meta.row);\n\n return new plugin.meta.row(row);\n });\n },\n\n /**\n * @public\n *\n * For a given table and plugin, return the meta / state bucket for the\n * plugin<->table instance pair.\n */\n forTable<P extends BasePlugin<any>, Data = unknown>(\n table: Table<Data>,\n klass: Class<P>\n ): TableMetaFor<SignatureFrom<P>> {\n let tableMeta = table[TABLE_META_KEY];\n\n return getPluginInstance(tableMeta, klass, () => {\n let plugin = table.pluginOf(klass);\n\n assert(`[${klass.name}] cannot get plugin instance of unregistered plugin class`, plugin);\n assert(`<#${plugin.name}> plugin does not have meta specified`, plugin.meta);\n assert(`<#${plugin.name}> plugin does not specify table meta`, plugin.meta.table);\n assert(\n `<#${plugin.name}> plugin already exists for the table. ` +\n `A plugin may only be instantiated once per table.`,\n ![...tableMeta.keys()].includes(klass)\n );\n\n return new plugin.meta.table(table);\n });\n },\n\n /**\n * Instead of finding meta based on column or table instances,\n * you can search for meta based on feature strings, such as `columnWidth`\n */\n withFeature: {\n /**\n * @public\n *\n * for a given column and feature name, return the \"ColumnMeta\" for that feature.\n * This is useful when plugins may depend on one another but may not necessarily care which\n * plugin is providing what behavior.\n *\n * For example, multiple column-focused plugins may care about width or visibility\n */\n forColumn<FeatureName extends string, Data = unknown>(\n column: Column<Data>,\n featureName: FeatureName\n ): ColumnFeatures[FeatureName] {\n let { plugins } = column.table;\n\n let provider = findPlugin(plugins, featureName);\n\n assert(\n `Could not find plugin with feature: ${featureName}. ` +\n `Available features: ${availableFeatures(plugins)}`,\n provider\n );\n\n // TS doesn't believe in the constructor property?\n return meta.forColumn(column, (provider as any).constructor);\n },\n\n /**\n * @public\n *\n * for a given table and feature name, return the \"TableMeta\" for that feature.\n * This is useful when plugins may depend on one another but may not necessarily care\n * which plugin is providing that behavior.\n *\n * For example, multiple column-focused plugins may care about width or visibility.\n */\n forTable<FeatureName extends string, Data = unknown>(\n table: Table<Data>,\n featureName: FeatureName\n ): TableFeatures[FeatureName] {\n let { plugins } = table;\n\n let provider = findPlugin(plugins, featureName);\n\n assert(\n `Could not find plugin with feature: ${featureName}. ` +\n `Available features: ${availableFeatures(plugins)}`,\n provider\n );\n\n // TS doesn't believe in the constructor property?\n return meta.forTable(table, (provider as any).constructor);\n },\n },\n};\n\nfunction findPlugin(plugins: Plugin[], featureName: string) {\n let provider = plugins.find((plugin) => {\n /*\n * have to cast in order to get static properties, but we may not have a base plugin\n * so we must rely on nullish coalesting to protect from throwing exceptions\n *\n * (Plugin || BasePlugin).features)\n */\n let features = plugin.features || (plugin.constructor as typeof BasePlugin).features;\n\n return features?.includes(featureName);\n });\n\n return provider;\n}\n\nfunction availableFeatures(plugins: Plugin[]): string {\n let allFeatures = plugins\n .map((plugin) => {\n /*\n * have to cast in order to get static properties, but we may not have a base plugin\n * so we must rely on nullish coalesting to protect from throwing exceptions\n *\n * (Plugin || BasePlugin).features)\n */\n let features = plugin.features || (plugin.constructor as typeof BasePlugin).features;\n\n return features;\n })\n .flat()\n .filter(Boolean);\n\n return allFeatures.length > 0 ? allFeatures.join(', ') : '[none]';\n}\n\nexport const options = {\n /**\n * @public\n *\n * For a given table and plugin, return the options, if any were given from the user\n * during construction of the table.\n */\n forTable<P extends BasePlugin<any>, Data = unknown>(\n table: Table<Data>,\n klass: Class<P>\n ): Partial<OptionsFor<SignatureFrom<P>>> {\n let normalized = normalizePluginsConfig(table?.config?.plugins);\n let tuple = normalized?.find((option) => option[0] === klass);\n let t = tuple as [Class<P>, () => OptionsFor<SignatureFrom<P>>];\n\n // Plugin not provided, likely\n if (!t) return {};\n\n let fn = t[1];\n\n return fn() ?? {};\n },\n\n forColumn<P extends BasePlugin<any>, Data = unknown>(\n column: Column<Data>,\n klass: Class<P>\n ): Partial<ColumnOptionsFor<SignatureFrom<P>>> {\n let tuple = column.config.pluginOptions?.find((option) => option[0] === klass);\n let t = tuple as [unknown, () => ColumnOptionsFor<SignatureFrom<P>>];\n\n let fn = t?.[1];\n\n if (!fn) return {};\n\n return fn() ?? {};\n },\n};\n\ntype FactoryMap<Instance> = Map<Class<Instance>, Instance>;\n\n/**\n * @private\n */\nfunction getPluginInstance<Instance>(\n map: Map<Class<Instance>, Instance>,\n mapKey: Class<Instance>,\n factory: () => Instance\n): Instance;\nfunction getPluginInstance<RootKey extends Column<any> | Row<any>, Instance>(\n map: WeakMap<Column | Row, Map<Class<Instance>, Instance>>,\n rootKey: RootKey,\n mapKey: Class<Instance>,\n factory: () => Instance\n): Instance;\nfunction getPluginInstance<RootKey extends Column<any> | Row<any>, Instance>(\n ...args:\n | [FactoryMap<Instance>, Class<Instance>, () => Instance]\n | [WeakMap<Column | Row, FactoryMap<Instance>>, RootKey, Class<Instance>, () => Instance]\n): Instance {\n let map: WeakMap<Column | Row, FactoryMap<Instance>> | FactoryMap<Instance>;\n let mapKey: Class<Instance>;\n let rootKey: RootKey | undefined;\n let factory: () => Instance;\n\n if (args.length === 3) {\n map = args[0];\n mapKey = args[1];\n factory = args[2];\n } else if (args.length === 4) {\n map = args[0];\n rootKey = args[1];\n mapKey = args[2];\n factory = args[3];\n } else {\n throw new Error(\n // TS says args is of type \"never\", but TS can't protect against general misuse\n // (esp without TS)\n `Incorrect arity passed to getPluginInstance. Expected 3 or 4, received ${\n (args as any).length\n }`\n );\n }\n\n let bucket: FactoryMap<Instance> | undefined;\n\n if (map instanceof WeakMap) {\n assert(`rootKey is missing`, rootKey);\n\n bucket = map.get(rootKey);\n\n if (!bucket) {\n bucket = new Map();\n\n map.set(rootKey, bucket);\n }\n } else {\n bucket = map;\n }\n\n let instance = bucket.get(mapKey);\n\n if (instance) {\n return instance;\n }\n\n instance = factory();\n\n bucket.set(mapKey, instance);\n\n return instance;\n}\n"],"names":["BasePlugin","constructor","table","with","configFn","forColumn","_defineProperty","hasPlugin","klass","Boolean","pluginOf","preferences","column","delete","key","prefs","existing","storage","forPlugin","name","columnPrefs","persist","get","set","value","forTable","columnsFor","requester","assert","TABLE_KEY","visibility","findPlugin","plugins","reordering","some","plugin","columns","values","Array","isArray","for","next","current","referenceIndex","indexOf","length","undefined","previous","before","slice","after","meta","columnMeta","COLUMN_META_KEY","getPluginInstance","forRow","row","rowMeta","ROW_META_KEY","tableMeta","TABLE_META_KEY","keys","includes","withFeature","featureName","provider","availableFeatures","find","features","allFeatures","map","flat","filter","join","options","normalized","normalizePluginsConfig","config","tuple","option","t","fn","pluginOptions","args","mapKey","rootKey","factory","Error","bucket","WeakMap","Map","instance"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { Constructor } from "../../-private/private-types";
2
- import { Plugin } from "../index";
1
+ import { Constructor } from "../../-private/private-types.js";
2
+ import { Plugin } from "../index.js";
3
3
  type PluginOption = Constructor<Plugin<any>> | [Constructor<Plugin<any>>, () => any];
4
4
  type ExpandedPluginOption = [Constructor<Plugin<any>>, () => any];
5
5
  type Plugins = PluginOption[];
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/plugins/-private/utils.ts"],"sourcesContent":["import { assert } from '@ember/debug';\n\nimport type { BasePlugin } from './base';\nimport type { Constructor } from '[private-types]';\nimport type { Plugin } from '[public-plugin-types]';\n\ntype PluginOption = Constructor<Plugin<any>> | [Constructor<Plugin<any>>, () => any];\n\ntype ExpandedPluginOption = [Constructor<Plugin<any>>, () => any];\n\nexport type Plugins = PluginOption[];\n\nexport function normalizePluginsConfig(plugins?: Plugins): ExpandedPluginOption[] {\n if (!plugins) return [];\n\n let result: ExpandedPluginOption[] = [];\n\n for (let plugin of plugins) {\n if (!Array.isArray(plugin)) {\n result.push([plugin, () => ({})]);\n\n continue;\n }\n\n if (plugin.length === 2) {\n result.push([plugin[0], plugin[1]]);\n\n continue;\n }\n\n result.push([plugin[0], () => ({})]);\n }\n\n assert(\n `Every entry in the plugins config must be invokable`,\n result.every((tuple) => typeof tuple[0] === 'function' && typeof tuple[1] === 'function')\n );\n\n return result;\n}\n\n/**\n * Creates a map of featureName => [plugins providing said feature name]\n */\nfunction collectFeatures(plugins: ExpandedPluginOption[]) {\n let result: Record<string, { name: string }[]> = {};\n\n for (let [plugin] of plugins) {\n if ('features' in plugin) {\n for (let feature of (plugin as unknown as typeof BasePlugin).features || []) {\n result[feature] = [...(result[feature] || []), plugin];\n }\n }\n }\n\n return result;\n}\n\n/**\n * Creates a map of requirement => [plugins requesting the feature / requirement]\n */\nfunction collectRequirements(plugins: ExpandedPluginOption[]) {\n let result: Record<string, { name: string }[]> = {};\n\n for (let [plugin] of plugins) {\n if ('requires' in plugin) {\n for (let requirement of (plugin as unknown as typeof BasePlugin).requires || []) {\n result[requirement] = [...(result[requirement] || []), plugin];\n }\n }\n }\n\n return result;\n}\n\nexport function verifyPlugins(plugins: ExpandedPluginOption[]) {\n let features = collectFeatures(plugins);\n let requirements = collectRequirements(plugins);\n let allFeatures = Object.keys(features);\n let errors: string[] = [];\n\n // Only one plugin can provide each feature\n for (let [feature, providingPlugins] of Object.entries(features)) {\n if (providingPlugins.length > 1) {\n errors.push(\n `More than one plugin is providing the feature: ${feature}. ` +\n `Please remove one of ${providingPlugins.map((p) => p.name).join(', ')}`\n );\n }\n }\n\n for (let [requirement, requestingPlugins] of Object.entries(requirements)) {\n if (!allFeatures.includes(requirement)) {\n errors.push(\n `Configuration is missing requirement: ${requirement}, ` +\n `And is requested by ${requestingPlugins.map((p) => p.name).join(', ')}. ` +\n `Please add a plugin with the ${requirement} feature`\n );\n }\n }\n\n if (errors.length > 0) {\n throw new Error(errors.join('\\n'));\n }\n}\n\ntype AssignableStyles = Omit<CSSStyleDeclaration, 'length' | 'parentRule'>;\n\n/**\n * @public\n *\n * Utility that helps safely apply styles to an element\n */\nexport function applyStyles(element: HTMLElement | SVGElement, styles: Partial<AssignableStyles>) {\n for (let [name, value] of Object.entries(styles)) {\n if (name in element.style) {\n assignStyle(\n element,\n name as keyof CSSStyleDeclaration,\n value as CSSStyleDeclaration[keyof CSSStyleDeclaration]\n );\n }\n }\n}\n\ntype StyleDeclarationFor<MaybeStyle> = MaybeStyle extends keyof CSSStyleDeclaration\n ? MaybeStyle\n : never;\n\nfunction assignStyle<StyleName>(\n element: HTMLElement | SVGElement,\n styleName: StyleDeclarationFor<StyleName>,\n value: CSSStyleDeclaration[StyleDeclarationFor<StyleName>]\n) {\n element.style[styleName] = value;\n}\n\nfunction removeStyle(element: HTMLElement | SVGElement, styleName: string) {\n element.style.removeProperty(styleName);\n}\n\n/**\n * @public\n *\n * Utility that helps safely remove styles from an element\n */\nexport function removeStyles(\n element: HTMLElement | SVGElement,\n styles: Array<keyof AssignableStyles>\n) {\n for (let name of styles) {\n if (typeof name !== 'string') continue;\n removeStyle(element, name);\n }\n}\n"],"names":["normalizePluginsConfig","plugins","result","plugin","Array","isArray","push","length","assert","every","tuple","collectFeatures","feature","features","collectRequirements","requirement","requires","verifyPlugins","requirements","allFeatures","Object","keys","errors","providingPlugins","entries","map","p","name","join","requestingPlugins","includes","Error","applyStyles","element","styles","value","style","assignStyle","styleName","removeStyle","removeProperty","removeStyles"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../src/plugins/-private/utils.ts"],"sourcesContent":["import { assert } from '@ember/debug';\n\nimport type { BasePlugin } from './base';\nimport type { Constructor } from '[private-types]';\nimport type { Plugin } from '[public-plugin-types]';\n\ntype PluginOption = Constructor<Plugin<any>> | [Constructor<Plugin<any>>, () => any];\n\ntype ExpandedPluginOption = [Constructor<Plugin<any>>, () => any];\n\nexport type Plugins = PluginOption[];\n\nexport function normalizePluginsConfig(plugins?: Plugins): ExpandedPluginOption[] {\n if (!plugins) return [];\n\n let result: ExpandedPluginOption[] = [];\n\n for (let plugin of plugins) {\n if (!Array.isArray(plugin)) {\n result.push([plugin, () => ({})]);\n\n continue;\n }\n\n if (plugin.length === 2) {\n result.push([plugin[0], plugin[1]]);\n\n continue;\n }\n\n result.push([plugin[0], () => ({})]);\n }\n\n assert(\n `Every entry in the plugins config must be invokable`,\n result.every((tuple) => typeof tuple[0] === 'function' && typeof tuple[1] === 'function')\n );\n\n return result;\n}\n\n/**\n * Creates a map of featureName => [plugins providing said feature name]\n */\nfunction collectFeatures(plugins: ExpandedPluginOption[]) {\n let result: Record<string, { name: string }[]> = {};\n\n for (let [plugin] of plugins) {\n if ('features' in plugin) {\n for (let feature of (plugin as unknown as typeof BasePlugin).features || []) {\n result[feature] = [...(result[feature] || []), plugin];\n }\n }\n }\n\n return result;\n}\n\n/**\n * Creates a map of requirement => [plugins requesting the feature / requirement]\n */\nfunction collectRequirements(plugins: ExpandedPluginOption[]) {\n let result: Record<string, { name: string }[]> = {};\n\n for (let [plugin] of plugins) {\n if ('requires' in plugin) {\n for (let requirement of (plugin as unknown as typeof BasePlugin).requires || []) {\n result[requirement] = [...(result[requirement] || []), plugin];\n }\n }\n }\n\n return result;\n}\n\nexport function verifyPlugins(plugins: ExpandedPluginOption[]) {\n let features = collectFeatures(plugins);\n let requirements = collectRequirements(plugins);\n let allFeatures = Object.keys(features);\n let errors: string[] = [];\n\n // Only one plugin can provide each feature\n for (let [feature, providingPlugins] of Object.entries(features)) {\n if (providingPlugins.length > 1) {\n errors.push(\n `More than one plugin is providing the feature: ${feature}. ` +\n `Please remove one of ${providingPlugins.map((p) => p.name).join(', ')}`\n );\n }\n }\n\n for (let [requirement, requestingPlugins] of Object.entries(requirements)) {\n if (!allFeatures.includes(requirement)) {\n errors.push(\n `Configuration is missing requirement: ${requirement}, ` +\n `And is requested by ${requestingPlugins.map((p) => p.name).join(', ')}. ` +\n `Please add a plugin with the ${requirement} feature`\n );\n }\n }\n\n if (errors.length > 0) {\n throw new Error(errors.join('\\n'));\n }\n}\n\ntype AssignableStyles = Omit<CSSStyleDeclaration, 'length' | 'parentRule'>;\n\n/**\n * @public\n *\n * Utility that helps safely apply styles to an element\n */\nexport function applyStyles(element: HTMLElement | SVGElement, styles: Partial<AssignableStyles>) {\n for (let [name, value] of Object.entries(styles)) {\n if (name in element.style) {\n assignStyle(\n element,\n name as keyof CSSStyleDeclaration,\n value as CSSStyleDeclaration[keyof CSSStyleDeclaration]\n );\n }\n }\n}\n\ntype StyleDeclarationFor<MaybeStyle> = MaybeStyle extends keyof CSSStyleDeclaration\n ? MaybeStyle\n : never;\n\nfunction assignStyle<StyleName>(\n element: HTMLElement | SVGElement,\n styleName: StyleDeclarationFor<StyleName>,\n value: CSSStyleDeclaration[StyleDeclarationFor<StyleName>]\n) {\n element.style[styleName] = value;\n}\n\nfunction removeStyle(element: HTMLElement | SVGElement, styleName: string) {\n element.style.removeProperty(styleName);\n}\n\n/**\n * @public\n *\n * Utility that helps safely remove styles from an element\n */\nexport function removeStyles(\n element: HTMLElement | SVGElement,\n styles: Array<keyof AssignableStyles>\n) {\n for (let name of styles) {\n if (typeof name !== 'string') continue;\n removeStyle(element, name);\n }\n}\n"],"names":["normalizePluginsConfig","plugins","result","plugin","Array","isArray","push","length","assert","every","tuple","collectFeatures","feature","features","collectRequirements","requirement","requires","verifyPlugins","requirements","allFeatures","Object","keys","errors","providingPlugins","entries","map","p","name","join","requestingPlugins","includes","Error","applyStyles","element","styles","value","style","assignStyle","styleName","removeStyle","removeProperty","removeStyles"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { ColumnOrder } from "./plugin";
2
- import { Column, Table } from "../../index";
1
+ import { ColumnOrder } from "./plugin.js";
2
+ import { Column, Table } from "../../index.js";
3
3
  /**
4
4
  * Move the column one position to the left.
5
5
  * If the column is first, nothing will happen.
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-reordering/helpers.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { ColumnReordering } from './plugin';\n\nimport type { ColumnOrder } from './plugin';\nimport type { Column, Table } from '[public-types]';\n\n/**\n * Move the column one position to the left.\n * If the column is first, nothing will happen.\n */\nexport const moveLeft = (column: Column) => meta.forColumn(column, ColumnReordering).moveLeft();\n\n/**\n * Move the column one position to the right.\n * If the column is last, nothing will happen.\n */\nexport const moveRight = (column: Column) => meta.forColumn(column, ColumnReordering).moveRight();\n\n/**\n * Override all column positions at once.\n */\nexport const setColumnOrder = (table: Table, order: ColumnOrder) => {\n return meta.forTable(table, ColumnReordering).setOrder(order);\n};\n\n/**\n * Ask if the column cannot move to the left\n */\nexport const cannotMoveLeft = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column cannot move to the right\n */\nexport const cannotMoveRight = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveRight;\n\n/**\n * Ask if the column can move to the left\n */\nexport const canMoveLeft = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column can move to the right\n */\nexport const canMoveRight = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveRight;\n"],"names":["moveLeft","column","meta","forColumn","ColumnReordering","moveRight","setColumnOrder","table","order","forTable","setOrder","cannotMoveLeft","cannotMoveRight","canMoveLeft","canMoveRight"],"mappings":";;;AAMA;AACA;AACA;AACA;AACaA,MAAAA,QAAQ,GAAIC,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACJ,QAAQ,GAAE;;AAE/F;AACA;AACA;AACA;AACaK,MAAAA,SAAS,GAAIJ,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACC,SAAS,GAAE;;AAEjG;AACA;AACA;MACaC,cAAc,GAAG,CAACC,KAAY,EAAEC,KAAkB,KAAK;AAClE,EAAA,OAAON,IAAI,CAACO,QAAQ,CAACF,KAAK,EAAEH,gBAAgB,CAAC,CAACM,QAAQ,CAACF,KAAK,CAAC,CAAA;AAC/D,EAAC;;AAED;AACA;AACA;AACaG,MAAAA,cAAc,GAAIV,MAAc,IAC3CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACO,eAAc;;AAEzD;AACA;AACA;AACaC,MAAAA,eAAe,GAAIX,MAAc,IAC5CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ,gBAAe;;AAE1D;AACA;AACA;AACaC,MAAAA,WAAW,GAAIZ,MAAc,IACxCC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACO,eAAc;;AAEzD;AACA;AACA;AACaG,MAAAA,YAAY,GAAIb,MAAc,IACzCC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ;;;;"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-reordering/helpers.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { ColumnReordering } from './plugin';\n\nimport type { ColumnOrder } from './plugin';\nimport type { Column, Table } from '[public-types]';\n\n/**\n * Move the column one position to the left.\n * If the column is first, nothing will happen.\n */\nexport const moveLeft = (column: Column) => meta.forColumn(column, ColumnReordering).moveLeft();\n\n/**\n * Move the column one position to the right.\n * If the column is last, nothing will happen.\n */\nexport const moveRight = (column: Column) => meta.forColumn(column, ColumnReordering).moveRight();\n\n/**\n * Override all column positions at once.\n */\nexport const setColumnOrder = (table: Table, order: ColumnOrder) => {\n return meta.forTable(table, ColumnReordering).setOrder(order);\n};\n\n/**\n * Ask if the column cannot move to the left\n */\nexport const cannotMoveLeft = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column cannot move to the right\n */\nexport const cannotMoveRight = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveRight;\n\n/**\n * Ask if the column can move to the left\n */\nexport const canMoveLeft = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column can move to the right\n */\nexport const canMoveRight = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveRight;\n"],"names":["moveLeft","column","meta","forColumn","ColumnReordering","moveRight","setColumnOrder","table","order","forTable","setOrder","cannotMoveLeft","cannotMoveRight","canMoveLeft","canMoveRight"],"mappings":";;;AAMA;AACA;AACA;AACA;AACaA,MAAAA,QAAQ,GAAIC,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACJ,QAAQ,GAAE;;AAE/F;AACA;AACA;AACA;AACaK,MAAAA,SAAS,GAAIJ,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACC,SAAS,GAAE;;AAEjG;AACA;AACA;MACaC,cAAc,GAAGA,CAACC,KAAY,EAAEC,KAAkB,KAAK;AAClE,EAAA,OAAON,IAAI,CAACO,QAAQ,CAACF,KAAK,EAAEH,gBAAgB,CAAC,CAACM,QAAQ,CAACF,KAAK,CAAC,CAAA;AAC/D,EAAC;;AAED;AACA;AACA;AACaG,MAAAA,cAAc,GAAIV,MAAc,IAC3CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACO,eAAc;;AAEzD;AACA;AACA;AACaC,MAAAA,eAAe,GAAIX,MAAc,IAC5CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ,gBAAe;;AAE1D;AACA;AACA;AACaC,MAAAA,WAAW,GAAIZ,MAAc,IACxCC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACO,eAAc;;AAEzD;AACA;AACA;AACaG,MAAAA,YAAY,GAAIb,MAAc,IACzCC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ;;;;"}
@@ -1,3 +1,3 @@
1
- export * from "./helpers";
2
- export { ColumnOrder, ColumnReordering, ColumnReordering as Plugin, orderOf } from "./plugin";
3
- export type { Signature } from "./plugin";
1
+ export * from "./helpers.js";
2
+ export { ColumnOrder, ColumnReordering, ColumnReordering as Plugin, orderOf } from "./plugin.js";
3
+ export type { Signature } from "./plugin.js";
@@ -1,7 +1,7 @@
1
1
  import { TrackedMap } from 'tracked-built-ins';
2
- import { BasePlugin } from "../-private/base";
3
- import { PluginPreferences } from "../index";
4
- import { Column, Table } from "../../index";
2
+ import { BasePlugin } from "../-private/base.js";
3
+ import { PluginPreferences } from "../index.js";
4
+ import { Column, Table } from "../../index.js";
5
5
  interface ColumnReorderingPreferences extends PluginPreferences {
6
6
  table: {
7
7
  order?: Record<string, number>;
@@ -1,7 +1,7 @@
1
- import { _ as _initializerDefineProperty } from '../../table-0cbd2720.js';
1
+ import { _ as _initializerDefineProperty } from '../../table-443deac1.js';
2
2
  import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-6b986a67.js';
3
- import { a as _classPrivateFieldGet } from '../../classPrivateFieldGet-b4d7d334.js';
4
- import { _ as _defineProperty } from '../../defineProperty-35ce617b.js';
3
+ import { _ as _classPrivateFieldGet } from '../../classPrivateFieldGet-0bfc0262.js';
4
+ import { _ as _defineProperty } from '../../defineProperty-4f0781e1.js';
5
5
  import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';
6
6
  import { tracked } from '@glimmer/tracking';
7
7
  import { assert } from '@ember/debug';
@@ -38,9 +38,15 @@ class ColumnMeta {
38
38
  get: _get_tableMeta,
39
39
  set: void 0
40
40
  });
41
+ /**
42
+ * Move the column one spot to the left
43
+ */
41
44
  _defineProperty(this, "moveLeft", () => {
42
45
  _classPrivateFieldGet(this, _tableMeta).columnOrder.moveLeft(this.column.key);
43
46
  });
47
+ /**
48
+ * Move the column one spot to the right
49
+ */
44
50
  _defineProperty(this, "moveRight", () => {
45
51
  _classPrivateFieldGet(this, _tableMeta).columnOrder.moveRight(this.column.key);
46
52
  });
@@ -64,32 +70,29 @@ class ColumnMeta {
64
70
  get cannotMoveRight() {
65
71
  return !this.canMoveRight;
66
72
  }
67
-
68
- /**
69
- * Move the column one spot to the left
70
- */
71
73
  }
72
74
  function _get_tableMeta() {
73
75
  return meta.forTable(this.column.table, ColumnReordering);
74
76
  }
75
77
  let TableMeta = (_class = class TableMeta {
76
78
  constructor(table) {
79
+ /**
80
+ * @private
81
+ *
82
+ * We want to maintain the instance of this ColumnOrder class because
83
+ * we allow the consumer of the table to swap out columns at any time.
84
+ * When they do this, we want to maintain the order of the table, best we can.
85
+ * This is also why the order of the columns is maintained via column key
86
+ */
77
87
  _initializerDefineProperty(this, "columnOrder", _descriptor, this);
88
+ /**
89
+ * Using a `ColumnOrder` instance, set the order of all columns
90
+ */
78
91
  _defineProperty(this, "setOrder", order => {
79
92
  this.columnOrder.setAll(order.map);
80
93
  });
81
94
  this.table = table;
82
95
  }
83
-
84
- /**
85
- * @private
86
- *
87
- * We want to maintain the instance of this ColumnOrder class because
88
- * we allow the consumer of the table to swap out columns at any time.
89
- * When they do this, we want to maintain the order of the table, best we can.
90
- * This is also why the order of the columns is maintained via column key
91
- */
92
-
93
96
  /**
94
97
  * Get the curret order/position of a column
95
98
  */
@@ -103,11 +106,6 @@ let TableMeta = (_class = class TableMeta {
103
106
  setPosition(column, newPosition) {
104
107
  return this.columnOrder.swapWith(column.key, newPosition);
105
108
  }
106
-
107
- /**
108
- * Using a `ColumnOrder` instance, set the order of all columns
109
- */
110
-
111
109
  /**
112
110
  * Revert to default config, delete preferences,
113
111
  * and clear the columnOrder
@@ -168,11 +166,10 @@ let TableMeta = (_class = class TableMeta {
168
166
  * Used for keeping track of and updating column order
169
167
  */
170
168
  let ColumnOrder = (_class3 = class ColumnOrder {
171
- /**
172
- * This map will be empty until we re-order something.
173
- */
174
-
175
169
  constructor(args) {
170
+ /**
171
+ * This map will be empty until we re-order something.
172
+ */
176
173
  _defineProperty(this, "map", new TrackedMap());
177
174
  _defineProperty(this, "setAll", map => {
178
175
  this.map.clear();