ember-headless-table 1.4.3 → 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 (97) 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 +26 -3
  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-dde25960.d.ts → table-443deac1.d.ts} +6 -6
  90. package/dist/{table-dde25960.js → table-443deac1.js} +50 -14
  91. package/dist/{table-dde25960.js.map → table-443deac1.js.map} +1 -1
  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
@@ -1,8 +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 { C as COLUMN_META_KEY, R as ROW_META_KEY, T as TABLE_META_KEY, a as TABLE_KEY } from '../../table-dde25960.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
+ /**
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
+
6
25
  /**
7
26
  * @public
8
27
  *
@@ -14,7 +33,6 @@ import { normalizePluginsConfig } from './utils.js';
14
33
  */
15
34
  class BasePlugin {
16
35
  constructor(table) {
17
- _defineProperty(this, "name", void 0);
18
36
  this.table = table;
19
37
  }
20
38
 
@@ -422,6 +440,11 @@ const options = {
422
440
  return fn() ?? {};
423
441
  }
424
442
  };
443
+
444
+ /**
445
+ * @private
446
+ */
447
+
425
448
  function getPluginInstance(...args) {
426
449
  let map;
427
450
  let mapKey;
@@ -1 +1 @@
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","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
+ {"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":";;;;;AAqBA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAeA,UAAU,CAAmD;EACjFC,WAAWA,CAAWC,KAAY,EAAE;IAAA,IAAdA,CAAAA,KAAY,GAAZA,KAAY,CAAA;AAAG,GAAA;;AAErC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;EACE,OAAOC,IAAIA,CAETC,QAA4C,EACU;AACtD,IAAA,OAAO,CAAC,IAAI,EAAEA,QAAQ,CAAC,CAAA;AACzB,GAAA;;AAEA;AACF;AACA;AACA;EACE,OAAOC,SAASA,CAEdD,QAAkD,EACU;AAC5D,IAAA,OAAO,CAAC,IAAI,EAAEA,QAAQ,CAAC,CAAA;AACzB,GAAA;AAWF,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANAE,eAAA,CA9CsBN,UAAU,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAAAM,eAAA,CAAVN,UAAU,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAqDzB,SAASO,SAASA,CACvBL,KAAkB,EAClBM,KAAe,EACf;EACA,OAAOC,OAAO,CAACP,KAAK,CAACQ,QAAQ,CAACF,KAAK,CAAC,CAAC,CAAA;AACvC,CAAA;AAEO,MAAMG,WAAW,GAAG;AACzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEN,EAAAA,SAASA,CAA4CO,MAAoB,EAAEJ,KAAe,EAAE;IAC1F,OAAO;AACL;AACN;AACA;MACMK,MAAMA,CAACC,GAAW,EAAE;AAClB,QAAA,IAAIC,KAAK,GAAGH,MAAM,CAACV,KAAK,CAACS,WAAW,CAAA;QACpC,IAAIK,QAAQ,GAAGD,KAAK,CAACE,OAAO,CAACC,SAAS,CAACV,KAAK,CAACW,IAAI,CAAC,CAAA;QAClD,IAAIC,WAAW,GAAGJ,QAAQ,CAACX,SAAS,CAACO,MAAM,CAACE,GAAG,CAAC,CAAA;AAEhDM,QAAAA,WAAW,CAACP,MAAM,CAACC,GAAG,CAAC,CAAA;QAEvB,OAAOC,KAAK,CAACM,OAAO,EAAE,CAAA;OACvB;AACD;AACN;AACA;MACMC,GAAGA,CAACR,GAAW,EAAE;AACf,QAAA,IAAIC,KAAK,GAAGH,MAAM,CAACV,KAAK,CAACS,WAAW,CAAA;QACpC,IAAIK,QAAQ,GAAGD,KAAK,CAACE,OAAO,CAACC,SAAS,CAACV,KAAK,CAACW,IAAI,CAAC,CAAA;QAClD,IAAIC,WAAW,GAAGJ,QAAQ,CAACX,SAAS,CAACO,MAAM,CAACE,GAAG,CAAC,CAAA;AAEhD,QAAA,OAAOM,WAAW,CAACE,GAAG,CAACR,GAAG,CAAC,CAAA;OAC5B;AACD;AACN;AACA;AACMS,MAAAA,GAAGA,CAACT,GAAW,EAAEU,KAAc,EAAE;AAC/B,QAAA,IAAIT,KAAK,GAAGH,MAAM,CAACV,KAAK,CAACS,WAAW,CAAA;QACpC,IAAIK,QAAQ,GAAGD,KAAK,CAACE,OAAO,CAACC,SAAS,CAACV,KAAK,CAACW,IAAI,CAAC,CAAA;QAClD,IAAIC,WAAW,GAAGJ,QAAQ,CAACX,SAAS,CAACO,MAAM,CAACE,GAAG,CAAC,CAAA;AAEhDM,QAAAA,WAAW,CAACG,GAAG,CAACT,GAAG,EAAEU,KAAK,CAAC,CAAA;QAE3BT,KAAK,CAACM,OAAO,EAAE,CAAA;AACjB,OAAA;KACD,CAAA;GACF;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEI,EAAAA,QAAQA,CAA4CvB,KAAkB,EAAEM,KAAe,EAAE;IACvF,OAAO;AACL;AACN;AACA;MACMK,MAAMA,CAACC,GAAW,EAAE;AAClB,QAAA,IAAIC,KAAK,GAAGb,KAAK,CAACS,WAAW,CAAA;QAC7B,IAAIK,QAAQ,GAAGD,KAAK,CAACE,OAAO,CAACC,SAAS,CAACV,KAAK,CAACW,IAAI,CAAC,CAAA;AAElDH,QAAAA,QAAQ,CAACd,KAAK,CAACW,MAAM,CAACC,GAAG,CAAC,CAAA;QAE1B,OAAOC,KAAK,CAACM,OAAO,EAAE,CAAA;OACvB;AACD;AACN;AACA;MACMC,GAAGA,CAACR,GAAW,EAAE;AACf,QAAA,IAAIC,KAAK,GAAGb,KAAK,CAACS,WAAW,CAAA;QAC7B,IAAIK,QAAQ,GAAGD,KAAK,CAACE,OAAO,CAACC,SAAS,CAACV,KAAK,CAACW,IAAI,CAAC,CAAA;AAElD,QAAA,OAAOH,QAAQ,CAACd,KAAK,CAACoB,GAAG,CAACR,GAAG,CAAC,CAAA;OAC/B;AACD;AACN;AACA;AACMS,MAAAA,GAAGA,CAACT,GAAW,EAAEU,KAAc,EAAE;AAC/B,QAAA,IAAIT,KAAK,GAAGb,KAAK,CAACS,WAAW,CAAA;QAC7B,IAAIK,QAAQ,GAAGD,KAAK,CAACE,OAAO,CAACC,SAAS,CAACV,KAAK,CAACW,IAAI,CAAC,CAAA;QAElDH,QAAQ,CAACd,KAAK,CAACqB,GAAG,CAACT,GAAG,EAAEU,KAAK,CAAC,CAAA;QAE9B,OAAOT,KAAK,CAACM,OAAO,EAAE,CAAA;AACxB,OAAA;KACD,CAAA;AACH,GAAA;AACF,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASK,UAAUA,CACjBxB,KAAsB,EACtByB,SAAmC,EACf;AACpBC,EAAAA,MAAM,CAAE,CAAkE,iEAAA,CAAA,EAAE1B,KAAK,CAAC2B,SAAS,CAAC,CAAC,CAAA;EAE7F,IAAIC,UAAU,GAAGC,UAAU,CAAC7B,KAAK,CAAC8B,OAAO,EAAE,kBAAkB,CAAC,CAAA;EAC9D,IAAIC,UAAU,GAAGF,UAAU,CAAC7B,KAAK,CAAC8B,OAAO,EAAE,aAAa,CAAC,CAAA;;AAEzD;AACA;AACA;;AAEA,EAAA,IAAIL,SAAS,EAAE;IACbC,MAAM,CACH,CAAGD,CAAAA,EAAAA,SAAS,CAACR,IAAK,uDAAsDQ,SAAS,CAACR,IAAK,CAAA,EAAA,CAAG,GACxF,CAAA,yBAAA,CAA0B,EAC7BjB,KAAK,CAAC8B,OAAO,CAACE,IAAI,CAAEC,MAAM,IAAKA,MAAM,YAAaR,SAA2B,CAAC,CAC/E,CAAA;AAED,IAAA,IAAIG,UAAU,IAAIA,UAAU,CAAC7B,WAAW,KAAK0B,SAAS,EAAE;AACtD,MAAA,OAAOzB,KAAK,CAACkC,OAAO,CAACC,MAAM,EAAE,CAAA;AAC/B,KAAA;AAEA,IAAA,IAAIJ,UAAU,IAAIA,UAAU,CAAChC,WAAW,KAAK0B,SAAS,EAAE;AACtD,MAAA,IAAIG,UAAU,EAAE;AACdF,QAAAA,MAAM,CACH,CAAIE,EAAAA,EAAAA,UAAU,CAACX,IAAK,CAAA,8DAAA,CAA+D,EACpFW,UAAU,CAACM,OAAO,IAAIE,KAAK,CAACC,OAAO,CAACT,UAAU,CAACM,OAAO,CAAC,CACxD,CAAA;QAED,OAAON,UAAU,CAACM,OAAO,CAAA;AAC3B,OAAA;AAEA,MAAA,OAAOlC,KAAK,CAACkC,OAAO,CAACC,MAAM,EAAE,CAAA;AAC/B,KAAA;AAEA,IAAA,IAAIJ,UAAU,EAAE;AACdL,MAAAA,MAAM,CACH,CAAIK,EAAAA,EAAAA,UAAU,CAACd,IAAK,CAAA,8DAAA,CAA+D,EACpFc,UAAU,CAACG,OAAO,IAAIE,KAAK,CAACC,OAAO,CAACN,UAAU,CAACG,OAAO,CAAC,CACxD,CAAA;MAED,OAAOH,UAAU,CAACG,OAAO,CAAA;AAC3B,KAAA;AAEA,IAAA,IAAIN,UAAU,EAAE;AACdF,MAAAA,MAAM,CACH,CAAIE,EAAAA,EAAAA,UAAU,CAACX,IAAK,CAAA,8DAAA,CAA+D,EACpFW,UAAU,CAACM,OAAO,IAAIE,KAAK,CAACC,OAAO,CAACT,UAAU,CAACM,OAAO,CAAC,CACxD,CAAA;MAED,OAAON,UAAU,CAACM,OAAO,CAAA;AAC3B,KAAA;AAEA,IAAA,OAAOlC,KAAK,CAACkC,OAAO,CAACC,MAAM,EAAE,CAAA;AAC/B,GAAA;;AAEA;AACF;AACA;;AAEE,EAAA,IAAIJ,UAAU,EAAE;AACdL,IAAAA,MAAM,CACH,CAAIK,EAAAA,EAAAA,UAAU,CAACd,IAAK,CAAA,8DAAA,CAA+D,EACpFc,UAAU,CAACG,OAAO,IAAIE,KAAK,CAACC,OAAO,CAACN,UAAU,CAACG,OAAO,CAAC,CACxD,CAAA;IAED,OAAOH,UAAU,CAACG,OAAO,CAAA;AAC3B,GAAA;AAEA,EAAA,IAAIN,UAAU,EAAE;AACdF,IAAAA,MAAM,CACH,CAAIE,EAAAA,EAAAA,UAAU,CAACX,IAAK,CAAA,8DAAA,CAA+D,EACpFW,UAAU,CAACM,OAAO,IAAIE,KAAK,CAACC,OAAO,CAACT,UAAU,CAACM,OAAO,CAAC,CACxD,CAAA;IAED,OAAON,UAAU,CAACM,OAAO,CAAA;AAC3B,GAAA;AAEA,EAAA,OAAOlC,KAAK,CAACkC,OAAO,CAACC,MAAM,EAAE,CAAA;AAC/B,CAAA;AAEO,MAAMD,OAAO,GAAG;AACrBI,EAAAA,GAAG,EAAEd,UAAU;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACEe,EAAAA,IAAI,EAAEA,CACJC,OAAqB,EACrBf,SAAuB,KACM;AAC7B,IAAA,IAAIS,OAAO,GAAGT,SAAS,GAAGD,UAAU,CAACgB,OAAO,CAACxC,KAAK,EAAEyB,SAAS,CAAC,GAAGD,UAAU,CAACgB,OAAO,CAACxC,KAAK,CAAC,CAAA;AAE1F,IAAA,IAAIyC,cAAc,GAAGP,OAAO,CAACQ,OAAO,CAACF,OAAO,CAAC,CAAA;AAE7Cd,IAAAA,MAAM,CACH,CAA8E,6EAAA,CAAA,EAC/Ee,cAAc,IAAI,CAAC,CACpB,CAAA;;AAED;AACJ;AACA;AACI,IAAA,IAAIA,cAAc,IAAIP,OAAO,CAACS,MAAM,GAAG,CAAC,EAAE;AACxC,MAAA,OAAOC,SAAS,CAAA;AAClB,KAAA;AAEA,IAAA,OAAOV,OAAO,CAACO,cAAc,GAAG,CAAC,CAAC,CAAA;GACnC;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACEI,EAAAA,QAAQ,EAAEA,CACRL,OAAqB,EACrBf,SAAuB,KACM;AAC7B,IAAA,IAAIS,OAAO,GAAGT,SAAS,GAAGD,UAAU,CAACgB,OAAO,CAACxC,KAAK,EAAEyB,SAAS,CAAC,GAAGD,UAAU,CAACgB,OAAO,CAACxC,KAAK,CAAC,CAAA;AAC1F,IAAA,IAAIyC,cAAc,GAAGP,OAAO,CAACQ,OAAO,CAACF,OAAO,CAAC,CAAA;AAE7Cd,IAAAA,MAAM,CACH,CAA8E,6EAAA,CAAA,EAC/Ee,cAAc,IAAI,CAAC,CACpB,CAAA;;AAED;AACJ;AACA;IACI,IAAIA,cAAc,KAAK,CAAC,EAAE;AACxB,MAAA,OAAOG,SAAS,CAAA;AAClB,KAAA;AAEA,IAAA,OAAOV,OAAO,CAACO,cAAc,GAAG,CAAC,CAAC,CAAA;GACnC;AACD;AACF;AACA;AACA;AACA;AACA;AACA;AACEK,EAAAA,MAAM,EAAEA,CAAiBN,OAAqB,EAAEf,SAAuB,KAAqB;AAC1F,IAAA,IAAIS,OAAO,GAAGT,SAAS,GAAGD,UAAU,CAACgB,OAAO,CAACxC,KAAK,EAAEyB,SAAS,CAAC,GAAGD,UAAU,CAACgB,OAAO,CAACxC,KAAK,CAAC,CAAA;AAE1F,IAAA,IAAIyC,cAAc,GAAGP,OAAO,CAACQ,OAAO,CAACF,OAAO,CAAC,CAAA;AAE7C,IAAA,OAAON,OAAO,CAACa,KAAK,CAAC,CAAC,EAAEN,cAAc,CAAC,CAAA;GACxC;AACD;AACF;AACA;AACA;AACA;AACA;AACA;AACEO,EAAAA,KAAK,EAAEA,CAAiBR,OAAqB,EAAEf,SAAuB,KAAqB;AACzF,IAAA,IAAIS,OAAO,GAAGT,SAAS,GAAGD,UAAU,CAACgB,OAAO,CAACxC,KAAK,EAAEyB,SAAS,CAAC,GAAGD,UAAU,CAACgB,OAAO,CAACxC,KAAK,CAAC,CAAA;AAE1F,IAAA,IAAIyC,cAAc,GAAGP,OAAO,CAACQ,OAAO,CAACF,OAAO,CAAC,CAAA;AAE7C,IAAA,OAAON,OAAO,CAACa,KAAK,CAACN,cAAc,GAAG,CAAC,CAAC,CAAA;AAC1C,GAAA;AACF,EAAC;AAEM,MAAMQ,IAAI,GAAG;AAClB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE9C,EAAAA,SAASA,CACPO,MAAoB,EACpBJ,KAAe,EACkB;AACjC,IAAA,IAAI4C,UAAU,GAAGxC,MAAM,CAACV,KAAK,CAACmD,eAAe,CAAC,CAAA;IAE9C,OAAOC,iBAAiB,CAACF,UAAU,EAAExC,MAAM,EAAEJ,KAAK,EAAE,MAAM;MACxD,IAAI2B,MAAM,GAAGvB,MAAM,CAACV,KAAK,CAACQ,QAAQ,CAACF,KAAK,CAAC,CAAA;MAEzCoB,MAAM,CAAE,IAAGpB,KAAK,CAACW,IAAK,CAA0D,yDAAA,CAAA,EAAEgB,MAAM,CAAC,CAAA;MACzFP,MAAM,CAAE,CAAIO,EAAAA,EAAAA,MAAM,CAAChB,IAAK,uCAAsC,EAAEgB,MAAM,CAACgB,IAAI,CAAC,CAAA;AAC5EvB,MAAAA,MAAM,CAAE,CAAA,EAAA,EAAIO,MAAM,CAAChB,IAAK,CAAA,qCAAA,CAAsC,EAAEgB,MAAM,CAACgB,IAAI,CAACvC,MAAM,CAAC,CAAA;MAEnF,OAAO,IAAIuB,MAAM,CAACgB,IAAI,CAACvC,MAAM,CAACA,MAAM,CAAC,CAAA;AACvC,KAAC,CAAC,CAAA;GACH;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE2C,EAAAA,MAAMA,CACJC,GAAc,EACdhD,KAAe,EACe;AAC9B,IAAA,IAAIiD,OAAO,GAAGD,GAAG,CAACtD,KAAK,CAACwD,YAAY,CAAC,CAAA;IAErC,OAAOJ,iBAAiB,CAACG,OAAO,EAAED,GAAG,EAAEhD,KAAK,EAAE,MAAM;MAClD,IAAI2B,MAAM,GAAGqB,GAAG,CAACtD,KAAK,CAACQ,QAAQ,CAACF,KAAK,CAAC,CAAA;MAEtCoB,MAAM,CAAE,IAAGpB,KAAK,CAACW,IAAK,CAA0D,yDAAA,CAAA,EAAEgB,MAAM,CAAC,CAAA;MACzFP,MAAM,CAAE,CAAIO,EAAAA,EAAAA,MAAM,CAAChB,IAAK,uCAAsC,EAAEgB,MAAM,CAACgB,IAAI,CAAC,CAAA;AAC5EvB,MAAAA,MAAM,CAAE,CAAA,EAAA,EAAIO,MAAM,CAAChB,IAAK,CAAA,kCAAA,CAAmC,EAAEgB,MAAM,CAACgB,IAAI,CAACK,GAAG,CAAC,CAAA;MAE7E,OAAO,IAAIrB,MAAM,CAACgB,IAAI,CAACK,GAAG,CAACA,GAAG,CAAC,CAAA;AACjC,KAAC,CAAC,CAAA;GACH;AAED;AACF;AACA;AACA;AACA;AACA;AACE/B,EAAAA,QAAQA,CACNvB,KAAkB,EAClBM,KAAe,EACiB;AAChC,IAAA,IAAImD,SAAS,GAAGzD,KAAK,CAAC0D,cAAc,CAAC,CAAA;AAErC,IAAA,OAAON,iBAAiB,CAACK,SAAS,EAAEnD,KAAK,EAAE,MAAM;AAC/C,MAAA,IAAI2B,MAAM,GAAGjC,KAAK,CAACQ,QAAQ,CAACF,KAAK,CAAC,CAAA;MAElCoB,MAAM,CAAE,IAAGpB,KAAK,CAACW,IAAK,CAA0D,yDAAA,CAAA,EAAEgB,MAAM,CAAC,CAAA;MACzFP,MAAM,CAAE,CAAIO,EAAAA,EAAAA,MAAM,CAAChB,IAAK,uCAAsC,EAAEgB,MAAM,CAACgB,IAAI,CAAC,CAAA;AAC5EvB,MAAAA,MAAM,CAAE,CAAA,EAAA,EAAIO,MAAM,CAAChB,IAAK,CAAA,oCAAA,CAAqC,EAAEgB,MAAM,CAACgB,IAAI,CAACjD,KAAK,CAAC,CAAA;MACjF0B,MAAM,CACH,KAAIO,MAAM,CAAChB,IAAK,CAAwC,uCAAA,CAAA,GACtD,CAAkD,iDAAA,CAAA,EACrD,CAAC,CAAC,GAAGwC,SAAS,CAACE,IAAI,EAAE,CAAC,CAACC,QAAQ,CAACtD,KAAK,CAAC,CACvC,CAAA;MAED,OAAO,IAAI2B,MAAM,CAACgB,IAAI,CAACjD,KAAK,CAACA,KAAK,CAAC,CAAA;AACrC,KAAC,CAAC,CAAA;GACH;AAED;AACF;AACA;AACA;AACE6D,EAAAA,WAAW,EAAE;AACX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI1D,IAAAA,SAASA,CACPO,MAAoB,EACpBoD,WAAwB,EACK;MAC7B,IAAI;AAAEhC,QAAAA,OAAAA;OAAS,GAAGpB,MAAM,CAACV,KAAK,CAAA;AAE9B,MAAA,IAAI+D,QAAQ,GAAGlC,UAAU,CAACC,OAAO,EAAEgC,WAAW,CAAC,CAAA;AAE/CpC,MAAAA,MAAM,CACH,CAAA,oCAAA,EAAsCoC,WAAY,CAAA,EAAA,CAAG,GACnD,CAAA,oBAAA,EAAsBE,iBAAiB,CAAClC,OAAO,CAAE,CAAC,CAAA,EACrDiC,QAAQ,CACT,CAAA;;AAED;MACA,OAAOd,IAAI,CAAC9C,SAAS,CAACO,MAAM,EAAGqD,QAAQ,CAAShE,WAAW,CAAC,CAAA;KAC7D;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACIwB,IAAAA,QAAQA,CACNvB,KAAkB,EAClB8D,WAAwB,EACI;MAC5B,IAAI;AAAEhC,QAAAA,OAAAA;AAAQ,OAAC,GAAG9B,KAAK,CAAA;AAEvB,MAAA,IAAI+D,QAAQ,GAAGlC,UAAU,CAACC,OAAO,EAAEgC,WAAW,CAAC,CAAA;AAE/CpC,MAAAA,MAAM,CACH,CAAA,oCAAA,EAAsCoC,WAAY,CAAA,EAAA,CAAG,GACnD,CAAA,oBAAA,EAAsBE,iBAAiB,CAAClC,OAAO,CAAE,CAAC,CAAA,EACrDiC,QAAQ,CACT,CAAA;;AAED;MACA,OAAOd,IAAI,CAAC1B,QAAQ,CAACvB,KAAK,EAAG+D,QAAQ,CAAShE,WAAW,CAAC,CAAA;AAC5D,KAAA;AACF,GAAA;AACF,EAAC;AAED,SAAS8B,UAAUA,CAACC,OAAiB,EAAEgC,WAAmB,EAAE;AAC1D,EAAA,IAAIC,QAAQ,GAAGjC,OAAO,CAACmC,IAAI,CAAEhC,MAAM,IAAK;AACtC;AACJ;AACA;AACA;AACA;AACA;IACI,IAAIiC,QAAQ,GAAGjC,MAAM,CAACiC,QAAQ,IAAKjC,MAAM,CAAClC,WAAW,CAAuBmE,QAAQ,CAAA;AAEpF,IAAA,OAAOA,QAAQ,EAAEN,QAAQ,CAACE,WAAW,CAAC,CAAA;AACxC,GAAC,CAAC,CAAA;AAEF,EAAA,OAAOC,QAAQ,CAAA;AACjB,CAAA;AAEA,SAASC,iBAAiBA,CAAClC,OAAiB,EAAU;AACpD,EAAA,IAAIqC,WAAW,GAAGrC,OAAO,CACtBsC,GAAG,CAAEnC,MAAM,IAAK;AACf;AACN;AACA;AACA;AACA;AACA;IACM,IAAIiC,QAAQ,GAAGjC,MAAM,CAACiC,QAAQ,IAAKjC,MAAM,CAAClC,WAAW,CAAuBmE,QAAQ,CAAA;AAEpF,IAAA,OAAOA,QAAQ,CAAA;GAChB,CAAC,CACDG,IAAI,EAAE,CACNC,MAAM,CAAC/D,OAAO,CAAC,CAAA;AAElB,EAAA,OAAO4D,WAAW,CAACxB,MAAM,GAAG,CAAC,GAAGwB,WAAW,CAACI,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAA;AACnE,CAAA;AAEO,MAAMC,OAAO,GAAG;AACrB;AACF;AACA;AACA;AACA;AACA;AACEjD,EAAAA,QAAQA,CACNvB,KAAkB,EAClBM,KAAe,EACwB;IACvC,IAAImE,UAAU,GAAGC,sBAAsB,CAAC1E,KAAK,EAAE2E,MAAM,EAAE7C,OAAO,CAAC,CAAA;AAC/D,IAAA,IAAI8C,KAAK,GAAGH,UAAU,EAAER,IAAI,CAAEY,MAAM,IAAKA,MAAM,CAAC,CAAC,CAAC,KAAKvE,KAAK,CAAC,CAAA;IAC7D,IAAIwE,CAAC,GAAGF,KAAuD,CAAA;;AAE/D;AACA,IAAA,IAAI,CAACE,CAAC,EAAE,OAAO,EAAE,CAAA;AAEjB,IAAA,IAAIC,EAAE,GAAGD,CAAC,CAAC,CAAC,CAAC,CAAA;AAEb,IAAA,OAAOC,EAAE,EAAE,IAAI,EAAE,CAAA;GAClB;AAED5E,EAAAA,SAASA,CACPO,MAAoB,EACpBJ,KAAe,EAC8B;AAC7C,IAAA,IAAIsE,KAAK,GAAGlE,MAAM,CAACiE,MAAM,CAACK,aAAa,EAAEf,IAAI,CAAEY,MAAM,IAAKA,MAAM,CAAC,CAAC,CAAC,KAAKvE,KAAK,CAAC,CAAA;IAC9E,IAAIwE,CAAC,GAAGF,KAA4D,CAAA;AAEpE,IAAA,IAAIG,EAAE,GAAGD,CAAC,GAAG,CAAC,CAAC,CAAA;AAEf,IAAA,IAAI,CAACC,EAAE,EAAE,OAAO,EAAE,CAAA;AAElB,IAAA,OAAOA,EAAE,EAAE,IAAI,EAAE,CAAA;AACnB,GAAA;AACF,EAAC;;AAID;AACA;AACA;;AAYA,SAAS3B,iBAAiBA,CACxB,GAAG6B,IAEwF,EACjF;AACV,EAAA,IAAIb,GAAuE,CAAA;AAC3E,EAAA,IAAIc,MAAuB,CAAA;AAC3B,EAAA,IAAIC,OAA4B,CAAA;AAChC,EAAA,IAAIC,OAAuB,CAAA;AAE3B,EAAA,IAAIH,IAAI,CAACtC,MAAM,KAAK,CAAC,EAAE;AACrByB,IAAAA,GAAG,GAAGa,IAAI,CAAC,CAAC,CAAC,CAAA;AACbC,IAAAA,MAAM,GAAGD,IAAI,CAAC,CAAC,CAAC,CAAA;AAChBG,IAAAA,OAAO,GAAGH,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,GAAC,MAAM,IAAIA,IAAI,CAACtC,MAAM,KAAK,CAAC,EAAE;AAC5ByB,IAAAA,GAAG,GAAGa,IAAI,CAAC,CAAC,CAAC,CAAA;AACbE,IAAAA,OAAO,GAAGF,IAAI,CAAC,CAAC,CAAC,CAAA;AACjBC,IAAAA,MAAM,GAAGD,IAAI,CAAC,CAAC,CAAC,CAAA;AAChBG,IAAAA,OAAO,GAAGH,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,GAAC,MAAM;AACL,IAAA,MAAM,IAAII,KAAK;AACb;AACA;AACC,IAAA,CAAA,uEAAA,EACEJ,IAAI,CAAStC,MACf,CAAA,CAAC,CACH,CAAA;AACH,GAAA;AAEA,EAAA,IAAI2C,MAAwC,CAAA;EAE5C,IAAIlB,GAAG,YAAYmB,OAAO,EAAE;AAC1B7D,IAAAA,MAAM,CAAE,CAAA,kBAAA,CAAmB,EAAEyD,OAAO,CAAC,CAAA;AAErCG,IAAAA,MAAM,GAAGlB,GAAG,CAAChD,GAAG,CAAC+D,OAAO,CAAC,CAAA;IAEzB,IAAI,CAACG,MAAM,EAAE;MACXA,MAAM,GAAG,IAAIE,GAAG,EAAE,CAAA;AAElBpB,MAAAA,GAAG,CAAC/C,GAAG,CAAC8D,OAAO,EAAEG,MAAM,CAAC,CAAA;AAC1B,KAAA;AACF,GAAC,MAAM;AACLA,IAAAA,MAAM,GAAGlB,GAAG,CAAA;AACd,GAAA;AAEA,EAAA,IAAIqB,QAAQ,GAAGH,MAAM,CAAClE,GAAG,CAAC8D,MAAM,CAAC,CAAA;AAEjC,EAAA,IAAIO,QAAQ,EAAE;AACZ,IAAA,OAAOA,QAAQ,CAAA;AACjB,GAAA;EAEAA,QAAQ,GAAGL,OAAO,EAAE,CAAA;AAEpBE,EAAAA,MAAM,CAACjE,GAAG,CAAC6D,MAAM,EAAEO,QAAQ,CAAC,CAAA;AAE5B,EAAA,OAAOA,QAAQ,CAAA;AACjB;;;;"}
@@ -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-dde25960.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();
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-reordering/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { TrackedMap } from 'tracked-built-ins';\n\nimport { preferences } from '[public-plugin-types]';\n\nimport { BasePlugin, columns, meta } from '../-private/base';\n\nimport type { PluginPreferences } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\ninterface ColumnReorderingPreferences extends PluginPreferences {\n table: {\n order?: Record<string, number>;\n };\n}\n\ndeclare module 'ember-headless-table/plugins' {\n interface Registry {\n ColumnReordering?: ColumnReorderingPreferences;\n }\n}\n\nexport interface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n}\n\nexport class ColumnReordering extends BasePlugin<Signature> {\n name = 'column-reordering';\n static features = ['columnOrder'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n } as const;\n\n reset() {\n let tableMeta = meta.forTable(this.table, ColumnReordering);\n\n tableMeta.reset();\n }\n\n get columns() {\n return meta.forTable(this.table, ColumnReordering).columns;\n }\n}\n\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get #tableMeta() {\n return meta.forTable(this.column.table, ColumnReordering);\n }\n\n get position() {\n return this.#tableMeta.getPosition(this.column);\n }\n\n set position(value: number) {\n this.#tableMeta.setPosition(this.column, value);\n }\n\n get canMoveLeft() {\n return this.#tableMeta.getPosition(this.column) !== 0;\n }\n\n get canMoveRight() {\n return this.#tableMeta.getPosition(this.column) !== this.#tableMeta.columns.length - 1;\n }\n\n get cannotMoveLeft() {\n return !this.canMoveLeft;\n }\n\n get cannotMoveRight() {\n return !this.canMoveRight;\n }\n\n /**\n * Move the column one spot to the left\n */\n moveLeft = () => {\n this.#tableMeta.columnOrder.moveLeft(this.column.key);\n };\n\n /**\n * Move the column one spot to the right\n */\n moveRight = () => {\n this.#tableMeta.columnOrder.moveRight(this.column.key);\n };\n}\n\nexport class TableMeta {\n constructor(private table: Table) {}\n\n /**\n * @private\n *\n * We want to maintain the instance of this ColumnOrder class because\n * we allow the consumer of the table to swap out columns at any time.\n * When they do this, we want to maintain the order of the table, best we can.\n * This is also why the order of the columns is maintained via column key\n */\n @tracked\n columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n existingOrder: this.read(),\n });\n\n /**\n * Get the curret order/position of a column\n */\n @action\n getPosition(column: Column) {\n return this.columnOrder.get(column.key);\n }\n\n /**\n * Swap the column with the column at `newPosition`\n */\n @action\n setPosition(column: Column, newPosition: number) {\n return this.columnOrder.swapWith(column.key, newPosition);\n }\n\n /**\n * Using a `ColumnOrder` instance, set the order of all columns\n */\n setOrder = (order: ColumnOrder) => {\n this.columnOrder.setAll(order.map);\n };\n\n /**\n * Revert to default config, delete preferences,\n * and clear the columnOrder\n */\n @action\n reset() {\n preferences.forTable(this.table, ColumnReordering).delete('order');\n this.columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n });\n }\n\n /**\n * @private\n */\n @action\n save(map: Map<string, number>) {\n let order: Record<string, number> = {};\n\n for (let [key, position] of map.entries()) {\n order[key] = position;\n }\n\n preferences.forTable(this.table, ColumnReordering).set('order', order);\n }\n\n /**\n * @private\n */\n @action\n private read() {\n let order = preferences.forTable(this.table, ColumnReordering).get('order');\n\n if (!order) return;\n\n return new Map<string, number>(Object.entries(order));\n }\n\n get columns() {\n return this.columnOrder.orderedColumns;\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get availableColumns() {\n return columns.for(this.table, ColumnReordering);\n }\n}\n\n/**\n * @private\n * Used for keeping track of and updating column order\n */\nexport class ColumnOrder {\n /**\n * This map will be empty until we re-order something.\n */\n map = new TrackedMap<string, number>();\n\n constructor(\n private args: {\n columns: () => Column[];\n save?: (order: Map<string, number>) => void;\n existingOrder?: Map<string, number>;\n }\n ) {\n if (args.existingOrder) {\n this.map = new TrackedMap(args.existingOrder);\n }\n }\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the previous \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveLeft(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns.reverse()) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n setAll = (map: Map<string, number>) => {\n this.map.clear();\n\n for (let [key, value] of map.entries()) {\n this.map.set(key, value);\n }\n };\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the next \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveRight(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n /**\n * Performs a swap of the column's position with the column at position\n */\n @action\n swapWith(key: string, position: number) {\n let validPositions = [...this.orderedMap.values()];\n\n /**\n * Position to swap to must exist\n */\n if (!validPositions.includes(position)) {\n return;\n }\n\n /**\n * Where did this column `key` come from? we can find out\n * by reading orderedMap\n */\n let currentPosition = this.orderedMap.get(key);\n\n assert(\n `Pre-existing position for ${key} could not be found. Does the column exist? ` +\n `The current positions are: ` +\n [...this.orderedMap.entries()].map((entry) => entry.join(' => ')).join(', ') +\n ` and the availableColumns are: ` +\n this.args.columns().map((column) => column.key) +\n ` and current \"map\" (${this.map.size}) is: ` +\n [...this.map.entries()].map((entry) => entry.join(' => ')).join(', '),\n undefined !== currentPosition\n );\n\n /**\n * No need to change anything if the position is the same\n * This helps reduce @tracked invalidations, which in turn reduces DOM thrashing.\n */\n if (currentPosition === position) {\n return false;\n }\n\n let keyByPosition = new Map<number, string>(\n [...this.orderedMap.entries()].map((entry) => entry.reverse() as [number, string])\n );\n\n for (let [existingPosition, key] of keyByPosition.entries()) {\n if (existingPosition === position) {\n /**\n * We swap positions because the positions are not incremental\n * meaning we can have gaps, intentionally, due to hidden columns\n */\n this.map.set(key, currentPosition);\n\n break;\n }\n }\n\n /**\n * Finally, set the position for the requested column\n */\n this.map.set(key, position);\n\n /**\n * Now that we've set the value for one column,\n * we need to make sure that all columns have a recorded position.\n */\n for (let [key, position] of this.orderedMap.entries()) {\n if (this.map.has(key)) continue;\n\n this.map.set(key, position);\n }\n\n this.args.save?.(this.map);\n }\n\n @action\n get(key: string) {\n let result = this.orderedMap.get(key);\n\n assert(\n `No position found for ${key}. Is the column used within this table?`,\n /* 0 is falsey, but it's a valid value for position */\n undefined !== result\n );\n\n return result;\n }\n\n /**\n * The same as this.map, but with all the columns' information\n */\n @cached\n get orderedMap(): ReadonlyMap<string, number> {\n return orderOf(this.args.columns(), this.map);\n }\n\n @cached\n get orderedColumns(): Column[] {\n let availableColumns = this.args.columns();\n let availableByKey = availableColumns.reduce((keyMap, column) => {\n keyMap[column.key] = column;\n\n return keyMap;\n }, {} as Record<string, Column>);\n let mergedOrder = orderOf(availableColumns, this.map);\n\n let result: Column[] = Array.from({ length: availableColumns.length });\n\n for (let [key, position] of mergedOrder.entries()) {\n let column = availableByKey[key];\n\n assert(`Could not find column for pair: ${key} @ @{position}`, column);\n result[position] = column;\n }\n\n assert(\n `Generated orderedColumns' length (${result.filter(Boolean).length}) ` +\n `does not match the length of available columns (${availableColumns.length}). ` +\n `orderedColumns: ${result\n .filter(Boolean)\n .map((c) => c.key)\n .join(', ')} -- ` +\n `available columns: ${availableColumns.map((c) => c.key).join(', ')}`,\n result.filter(Boolean).length === availableColumns.length\n );\n\n return result.filter(Boolean);\n }\n}\n\n/**\n * @private\n *\n * Utility for helping determine the percieved order of a set of columns\n * given the original (default) ordering, and then user-configurations\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>\n): Map<string, number> {\n let result = new Map<string, number>();\n let availableColumns = columns.map((column) => column.key);\n let availableSet = new Set(availableColumns);\n let current = new Map<number, string>(\n [...currentOrder.entries()].map(([key, position]) => [position, key])\n );\n\n /**\n * O(n * log(n)) ?\n */\n for (let i = 0; i < Math.max(columns.length, current.size); i++) {\n let orderedKey = current.get(i);\n\n if (orderedKey) {\n /**\n * If the currentOrder specifies columns not presently available,\n * ignore them\n */\n if (availableSet.has(orderedKey)) {\n result.set(orderedKey, i);\n continue;\n }\n }\n\n let availableKey: string | undefined;\n\n while ((availableKey = availableColumns.shift())) {\n if (result.has(availableKey) || currentOrder.has(availableKey)) {\n continue;\n }\n\n break;\n }\n\n if (!availableKey) {\n /**\n * The rest of our columns likely have their order set\n */\n continue;\n }\n\n result.set(availableKey, i);\n }\n\n return result;\n}\n"],"names":["ColumnReordering","BasePlugin","column","ColumnMeta","table","TableMeta","reset","tableMeta","meta","forTable","columns","constructor","columnOrder","moveLeft","key","moveRight","position","getPosition","value","setPosition","canMoveLeft","canMoveRight","length","cannotMoveLeft","cannotMoveRight","order","setAll","map","get","newPosition","swapWith","preferences","delete","ColumnOrder","availableColumns","save","entries","set","read","Map","Object","orderedColumns","for","tracked","existingOrder","action","args","TrackedMap","clear","found","nextColumn","reverse","nextPosition","validPositions","orderedMap","values","includes","currentPosition","assert","entry","join","size","undefined","keyByPosition","existingPosition","has","result","orderOf","availableByKey","reduce","keyMap","mergedOrder","Array","from","filter","Boolean","c","cached","currentOrder","availableSet","Set","current","i","Math","max","orderedKey","availableKey","shift"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-reordering/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { TrackedMap } from 'tracked-built-ins';\n\nimport { preferences } from '[public-plugin-types]';\n\nimport { BasePlugin, columns, meta } from '../-private/base';\n\nimport type { PluginPreferences } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\ninterface ColumnReorderingPreferences extends PluginPreferences {\n table: {\n order?: Record<string, number>;\n };\n}\n\ndeclare module 'ember-headless-table/plugins' {\n interface Registry {\n ColumnReordering?: ColumnReorderingPreferences;\n }\n}\n\nexport interface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n}\n\nexport class ColumnReordering extends BasePlugin<Signature> {\n name = 'column-reordering';\n static features = ['columnOrder'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n } as const;\n\n reset() {\n let tableMeta = meta.forTable(this.table, ColumnReordering);\n\n tableMeta.reset();\n }\n\n get columns() {\n return meta.forTable(this.table, ColumnReordering).columns;\n }\n}\n\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get #tableMeta() {\n return meta.forTable(this.column.table, ColumnReordering);\n }\n\n get position() {\n return this.#tableMeta.getPosition(this.column);\n }\n\n set position(value: number) {\n this.#tableMeta.setPosition(this.column, value);\n }\n\n get canMoveLeft() {\n return this.#tableMeta.getPosition(this.column) !== 0;\n }\n\n get canMoveRight() {\n return this.#tableMeta.getPosition(this.column) !== this.#tableMeta.columns.length - 1;\n }\n\n get cannotMoveLeft() {\n return !this.canMoveLeft;\n }\n\n get cannotMoveRight() {\n return !this.canMoveRight;\n }\n\n /**\n * Move the column one spot to the left\n */\n moveLeft = () => {\n this.#tableMeta.columnOrder.moveLeft(this.column.key);\n };\n\n /**\n * Move the column one spot to the right\n */\n moveRight = () => {\n this.#tableMeta.columnOrder.moveRight(this.column.key);\n };\n}\n\nexport class TableMeta {\n constructor(private table: Table) {}\n\n /**\n * @private\n *\n * We want to maintain the instance of this ColumnOrder class because\n * we allow the consumer of the table to swap out columns at any time.\n * When they do this, we want to maintain the order of the table, best we can.\n * This is also why the order of the columns is maintained via column key\n */\n @tracked\n columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n existingOrder: this.read(),\n });\n\n /**\n * Get the curret order/position of a column\n */\n @action\n getPosition(column: Column) {\n return this.columnOrder.get(column.key);\n }\n\n /**\n * Swap the column with the column at `newPosition`\n */\n @action\n setPosition(column: Column, newPosition: number) {\n return this.columnOrder.swapWith(column.key, newPosition);\n }\n\n /**\n * Using a `ColumnOrder` instance, set the order of all columns\n */\n setOrder = (order: ColumnOrder) => {\n this.columnOrder.setAll(order.map);\n };\n\n /**\n * Revert to default config, delete preferences,\n * and clear the columnOrder\n */\n @action\n reset() {\n preferences.forTable(this.table, ColumnReordering).delete('order');\n this.columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n });\n }\n\n /**\n * @private\n */\n @action\n save(map: Map<string, number>) {\n let order: Record<string, number> = {};\n\n for (let [key, position] of map.entries()) {\n order[key] = position;\n }\n\n preferences.forTable(this.table, ColumnReordering).set('order', order);\n }\n\n /**\n * @private\n */\n @action\n private read() {\n let order = preferences.forTable(this.table, ColumnReordering).get('order');\n\n if (!order) return;\n\n return new Map<string, number>(Object.entries(order));\n }\n\n get columns() {\n return this.columnOrder.orderedColumns;\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get availableColumns() {\n return columns.for(this.table, ColumnReordering);\n }\n}\n\n/**\n * @private\n * Used for keeping track of and updating column order\n */\nexport class ColumnOrder {\n /**\n * This map will be empty until we re-order something.\n */\n map = new TrackedMap<string, number>();\n\n constructor(\n private args: {\n columns: () => Column[];\n save?: (order: Map<string, number>) => void;\n existingOrder?: Map<string, number>;\n }\n ) {\n if (args.existingOrder) {\n this.map = new TrackedMap(args.existingOrder);\n }\n }\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the previous \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveLeft(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns.reverse()) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n setAll = (map: Map<string, number>) => {\n this.map.clear();\n\n for (let [key, value] of map.entries()) {\n this.map.set(key, value);\n }\n };\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the next \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveRight(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n /**\n * Performs a swap of the column's position with the column at position\n */\n @action\n swapWith(key: string, position: number) {\n let validPositions = [...this.orderedMap.values()];\n\n /**\n * Position to swap to must exist\n */\n if (!validPositions.includes(position)) {\n return;\n }\n\n /**\n * Where did this column `key` come from? we can find out\n * by reading orderedMap\n */\n let currentPosition = this.orderedMap.get(key);\n\n assert(\n `Pre-existing position for ${key} could not be found. Does the column exist? ` +\n `The current positions are: ` +\n [...this.orderedMap.entries()].map((entry) => entry.join(' => ')).join(', ') +\n ` and the availableColumns are: ` +\n this.args.columns().map((column) => column.key) +\n ` and current \"map\" (${this.map.size}) is: ` +\n [...this.map.entries()].map((entry) => entry.join(' => ')).join(', '),\n undefined !== currentPosition\n );\n\n /**\n * No need to change anything if the position is the same\n * This helps reduce @tracked invalidations, which in turn reduces DOM thrashing.\n */\n if (currentPosition === position) {\n return false;\n }\n\n let keyByPosition = new Map<number, string>(\n [...this.orderedMap.entries()].map((entry) => entry.reverse() as [number, string])\n );\n\n for (let [existingPosition, key] of keyByPosition.entries()) {\n if (existingPosition === position) {\n /**\n * We swap positions because the positions are not incremental\n * meaning we can have gaps, intentionally, due to hidden columns\n */\n this.map.set(key, currentPosition);\n\n break;\n }\n }\n\n /**\n * Finally, set the position for the requested column\n */\n this.map.set(key, position);\n\n /**\n * Now that we've set the value for one column,\n * we need to make sure that all columns have a recorded position.\n */\n for (let [key, position] of this.orderedMap.entries()) {\n if (this.map.has(key)) continue;\n\n this.map.set(key, position);\n }\n\n this.args.save?.(this.map);\n }\n\n @action\n get(key: string) {\n let result = this.orderedMap.get(key);\n\n assert(\n `No position found for ${key}. Is the column used within this table?`,\n /* 0 is falsey, but it's a valid value for position */\n undefined !== result\n );\n\n return result;\n }\n\n /**\n * The same as this.map, but with all the columns' information\n */\n @cached\n get orderedMap(): ReadonlyMap<string, number> {\n return orderOf(this.args.columns(), this.map);\n }\n\n @cached\n get orderedColumns(): Column[] {\n let availableColumns = this.args.columns();\n let availableByKey = availableColumns.reduce((keyMap, column) => {\n keyMap[column.key] = column;\n\n return keyMap;\n }, {} as Record<string, Column>);\n let mergedOrder = orderOf(availableColumns, this.map);\n\n let result: Column[] = Array.from({ length: availableColumns.length });\n\n for (let [key, position] of mergedOrder.entries()) {\n let column = availableByKey[key];\n\n assert(`Could not find column for pair: ${key} @ @{position}`, column);\n result[position] = column;\n }\n\n assert(\n `Generated orderedColumns' length (${result.filter(Boolean).length}) ` +\n `does not match the length of available columns (${availableColumns.length}). ` +\n `orderedColumns: ${result\n .filter(Boolean)\n .map((c) => c.key)\n .join(', ')} -- ` +\n `available columns: ${availableColumns.map((c) => c.key).join(', ')}`,\n result.filter(Boolean).length === availableColumns.length\n );\n\n return result.filter(Boolean);\n }\n}\n\n/**\n * @private\n *\n * Utility for helping determine the percieved order of a set of columns\n * given the original (default) ordering, and then user-configurations\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>\n): Map<string, number> {\n let result = new Map<string, number>();\n let availableColumns = columns.map((column) => column.key);\n let availableSet = new Set(availableColumns);\n let current = new Map<number, string>(\n [...currentOrder.entries()].map(([key, position]) => [position, key])\n );\n\n /**\n * O(n * log(n)) ?\n */\n for (let i = 0; i < Math.max(columns.length, current.size); i++) {\n let orderedKey = current.get(i);\n\n if (orderedKey) {\n /**\n * If the currentOrder specifies columns not presently available,\n * ignore them\n */\n if (availableSet.has(orderedKey)) {\n result.set(orderedKey, i);\n continue;\n }\n }\n\n let availableKey: string | undefined;\n\n while ((availableKey = availableColumns.shift())) {\n if (result.has(availableKey) || currentOrder.has(availableKey)) {\n continue;\n }\n\n break;\n }\n\n if (!availableKey) {\n /**\n * The rest of our columns likely have their order set\n */\n continue;\n }\n\n result.set(availableKey, i);\n }\n\n return result;\n}\n"],"names":["cached","macroCondition","dependencySatisfies","importSync","ColumnReordering","BasePlugin","constructor","args","_defineProperty","column","ColumnMeta","table","TableMeta","reset","tableMeta","meta","forTable","columns","_tableMeta","WeakMap","_classPrivateFieldInitSpec","get","_get_tableMeta","set","_classPrivateFieldGet","columnOrder","moveLeft","key","moveRight","position","getPosition","value","setPosition","canMoveLeft","canMoveRight","length","cannotMoveLeft","cannotMoveRight","_class","_initializerDefineProperty","_descriptor","order","setAll","map","newPosition","swapWith","preferences","delete","ColumnOrder","availableColumns","save","entries","read","Map","Object","orderedColumns","for","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","existingOrder","action","getOwnPropertyDescriptor","_class3","TrackedMap","clear","found","nextColumn","reverse","nextPosition","validPositions","orderedMap","values","includes","currentPosition","assert","entry","join","size","undefined","keyByPosition","existingPosition","has","result","orderOf","availableByKey","reduce","keyMap","mergedOrder","Array","from","filter","Boolean","c","currentOrder","availableSet","Set","current","i","Math","max","orderedKey","availableKey","shift"],"mappings":";;;;;;;;;;;;;;AAAoD,IAAAA,MAAA,GAAAC,cAAA,CAAAC,mBAAA,CAAA,cAAA,EAAA,kBAAA,CAAA,CAAA,GAAAC,UAAA,CAAA,mBAAA,CAAA,CAAAH,MAAA,GAAAG,UAAA,CAAA,iCAAA,CAAA,CAAAH,MAAA,CAAA;AAgC7C,MAAMI,gBAAgB,SAASC,UAAU,CAAY;AAAAC,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA,CAAA;AAAAC,IAAAA,eAAA,eACnD,mBAAmB,CAAA,CAAA;AAAAA,IAAAA,eAAA,CAGnB,IAAA,EAAA,MAAA,EAAA;AACLC,MAAAA,MAAM,EAAEC,UAAU;AAClBC,MAAAA,KAAK,EAAEC,SAAAA;KACR,CAAA,CAAA;AAAA,GAAA;AAEDC,EAAAA,KAAKA,GAAG;IACN,IAAIC,SAAS,GAAGC,IAAI,CAACC,QAAQ,CAAC,IAAI,CAACL,KAAK,EAAEP,gBAAgB,CAAC,CAAA;IAE3DU,SAAS,CAACD,KAAK,EAAE,CAAA;AACnB,GAAA;EAEA,IAAII,OAAOA,GAAG;IACZ,OAAOF,IAAI,CAACC,QAAQ,CAAC,IAAI,CAACL,KAAK,EAAEP,gBAAgB,CAAC,CAACa,OAAO,CAAA;AAC5D,GAAA;AACF,CAAA;AAACT,eAAA,CAlBYJ,gBAAgB,EAET,UAAA,EAAA,CAAC,aAAa,CAAC,CAAA,CAAA;AAAA,IAAAc,UAAA,oBAAAC,OAAA,EAAA,CAAA;AAkB5B,MAAMT,UAAU,CAAC;EACtBJ,WAAWA,CAASG,MAAc,EAAE;AAAAW,IAAAA,0BAAA,OAAAF,UAAA,EAAA;AAAAG,MAAAA,GAAA,EAAAC,cAAA;MAAAC,GAAA,EAAA,KAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AA8BpC;AACF;AACA;AAFEf,IAAAA,eAAA,mBAGW,MAAM;AACfgB,MAAAA,qBAAA,CAAI,IAAA,EAAAN,UAAA,CAAA,CAAYO,WAAW,CAACC,QAAQ,CAAC,IAAI,CAACjB,MAAM,CAACkB,GAAG,CAAC,CAAA;KACtD,CAAA,CAAA;AAED;AACF;AACA;AAFEnB,IAAAA,eAAA,oBAGY,MAAM;AAChBgB,MAAAA,qBAAA,CAAI,IAAA,EAAAN,UAAA,CAAA,CAAYO,WAAW,CAACG,SAAS,CAAC,IAAI,CAACnB,MAAM,CAACkB,GAAG,CAAC,CAAA;KACvD,CAAA,CAAA;IAAA,IA1CmBlB,CAAAA,MAAc,GAAdA,MAAc,CAAA;AAAG,GAAA;EAMrC,IAAIoB,QAAQA,GAAG;IACb,OAAOL,qBAAA,CAAI,IAAA,EAAAN,UAAA,CAAA,CAAYY,WAAW,CAAC,IAAI,CAACrB,MAAM,CAAC,CAAA;AACjD,GAAA;EAEA,IAAIoB,QAAQA,CAACE,KAAa,EAAE;IAC1BP,qBAAA,CAAA,IAAI,EAAAN,UAAA,CAAYc,CAAAA,WAAW,CAAC,IAAI,CAACvB,MAAM,EAAEsB,KAAK,CAAC,CAAA;AACjD,GAAA;EAEA,IAAIE,WAAWA,GAAG;AAChB,IAAA,OAAOT,qBAAA,CAAA,IAAI,EAAAN,UAAA,CAAYY,CAAAA,WAAW,CAAC,IAAI,CAACrB,MAAM,CAAC,KAAK,CAAC,CAAA;AACvD,GAAA;EAEA,IAAIyB,YAAYA,GAAG;IACjB,OAAOV,qBAAA,KAAI,EAAAN,UAAA,EAAYY,WAAW,CAAC,IAAI,CAACrB,MAAM,CAAC,KAAKe,qBAAA,KAAI,EAAAN,UAAA,EAAYD,OAAO,CAACkB,MAAM,GAAG,CAAC,CAAA;AACxF,GAAA;EAEA,IAAIC,cAAcA,GAAG;IACnB,OAAO,CAAC,IAAI,CAACH,WAAW,CAAA;AAC1B,GAAA;EAEA,IAAII,eAAeA,GAAG;IACpB,OAAO,CAAC,IAAI,CAACH,YAAY,CAAA;AAC3B,GAAA;AAeF,CAAA;AAAC,SAAAZ,iBAzCkB;EACf,OAAOP,IAAI,CAACC,QAAQ,CAAC,IAAI,CAACP,MAAM,CAACE,KAAK,EAAEP,gBAAgB,CAAC,CAAA;AAC3D,CAAA;AAyCF,IAAaQ,SAAS,IAAA0B,MAAA,GAAf,MAAM1B,SAAS,CAAC;EACrBN,WAAWA,CAASK,KAAY,EAAE;AAElC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AAPE4B,IAAAA,0BAAA,sBAAAC,WAAA,EAAA,IAAA,CAAA,CAAA;AA+BA;AACF;AACA;IAFEhC,eAAA,CAAA,IAAA,EAAA,UAAA,EAGYiC,KAAkB,IAAK;MACjC,IAAI,CAAChB,WAAW,CAACiB,MAAM,CAACD,KAAK,CAACE,GAAG,CAAC,CAAA;KACnC,CAAA,CAAA;IAAA,IAtCmBhC,CAAAA,KAAY,GAAZA,KAAY,CAAA;AAAG,GAAA;AAiBnC;AACF;AACA;EAEEmB,WAAWA,CAACrB,MAAc,EAAE;IAC1B,OAAO,IAAI,CAACgB,WAAW,CAACJ,GAAG,CAACZ,MAAM,CAACkB,GAAG,CAAC,CAAA;AACzC,GAAA;;AAEA;AACF;AACA;AAEEK,EAAAA,WAAWA,CAACvB,MAAc,EAAEmC,WAAmB,EAAE;IAC/C,OAAO,IAAI,CAACnB,WAAW,CAACoB,QAAQ,CAACpC,MAAM,CAACkB,GAAG,EAAEiB,WAAW,CAAC,CAAA;AAC3D,GAAA;AASA;AACF;AACA;AACA;AAEE/B,EAAAA,KAAKA,GAAG;AACNiC,IAAAA,WAAW,CAAC9B,QAAQ,CAAC,IAAI,CAACL,KAAK,EAAEP,gBAAgB,CAAC,CAAC2C,MAAM,CAAC,OAAO,CAAC,CAAA;AAClE,IAAA,IAAI,CAACtB,WAAW,GAAG,IAAIuB,WAAW,CAAC;AACjC/B,MAAAA,OAAO,EAAEA,MAAM,IAAI,CAACgC,gBAAgB;MACpCC,IAAI,EAAE,IAAI,CAACA,IAAAA;AACb,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;EAEEA,IAAIA,CAACP,GAAwB,EAAE;IAC7B,IAAIF,KAA6B,GAAG,EAAE,CAAA;IAEtC,KAAK,IAAI,CAACd,GAAG,EAAEE,QAAQ,CAAC,IAAIc,GAAG,CAACQ,OAAO,EAAE,EAAE;AACzCV,MAAAA,KAAK,CAACd,GAAG,CAAC,GAAGE,QAAQ,CAAA;AACvB,KAAA;AAEAiB,IAAAA,WAAW,CAAC9B,QAAQ,CAAC,IAAI,CAACL,KAAK,EAAEP,gBAAgB,CAAC,CAACmB,GAAG,CAAC,OAAO,EAAEkB,KAAK,CAAC,CAAA;AACxE,GAAA;;AAEA;AACF;AACA;AAEUW,EAAAA,IAAIA,GAAG;AACb,IAAA,IAAIX,KAAK,GAAGK,WAAW,CAAC9B,QAAQ,CAAC,IAAI,CAACL,KAAK,EAAEP,gBAAgB,CAAC,CAACiB,GAAG,CAAC,OAAO,CAAC,CAAA;IAE3E,IAAI,CAACoB,KAAK,EAAE,OAAA;IAEZ,OAAO,IAAIY,GAAG,CAAiBC,MAAM,CAACH,OAAO,CAACV,KAAK,CAAC,CAAC,CAAA;AACvD,GAAA;EAEA,IAAIxB,OAAOA,GAAG;AACZ,IAAA,OAAO,IAAI,CAACQ,WAAW,CAAC8B,cAAc,CAAA;AACxC,GAAA;;AAEA;AACF;AACA;AACA;EACE,IAAYN,gBAAgBA,GAAG;IAC7B,OAAOhC,OAAO,CAACuC,GAAG,CAAC,IAAI,CAAC7C,KAAK,EAAEP,gBAAgB,CAAC,CAAA;AAClD,GAAA;AACF,CAAC,GAAAoC,WAAA,GAAAiB,yBAAA,CAAAnB,MAAA,CAAAoB,SAAA,EAAA,aAAA,EAAA,CAhFEC,OAAO,CAAA,EAAA;EAAAC,YAAA,EAAA,IAAA;EAAAC,UAAA,EAAA,IAAA;EAAAC,QAAA,EAAA,IAAA;AAAAC,EAAAA,WAAA,cAAA;IAAA,OACM,IAAIf,WAAW,CAAC;AAC5B/B,MAAAA,OAAO,EAAEA,MAAM,IAAI,CAACgC,gBAAgB;MACpCC,IAAI,EAAE,IAAI,CAACA,IAAI;MACfc,aAAa,EAAE,IAAI,CAACZ,IAAI,EAAA;AAC1B,KAAC,CAAC,CAAA;AAAA,GAAA;AAAA,CAAAK,CAAAA,EAAAA,yBAAA,CAAAnB,MAAA,CAAAoB,SAAA,EAKDO,aAAAA,EAAAA,CAAAA,MAAM,CAAAX,EAAAA,MAAA,CAAAY,wBAAA,CAAA5B,MAAA,CAAAoB,SAAA,EAAApB,aAAAA,CAAAA,EAAAA,MAAA,CAAAoB,SAAA,CAAA,EAAAD,yBAAA,CAAAnB,MAAA,CAAAoB,SAAA,EAQNO,aAAAA,EAAAA,CAAAA,MAAM,GAAAX,MAAA,CAAAY,wBAAA,CAAA5B,MAAA,CAAAoB,SAAA,EAAApB,aAAAA,CAAAA,EAAAA,MAAA,CAAAoB,SAAA,CAAA,EAAAD,yBAAA,CAAAnB,MAAA,CAAAoB,SAAA,EAAA,OAAA,EAAA,CAgBNO,MAAM,CAAA,EAAAX,MAAA,CAAAY,wBAAA,CAAA5B,MAAA,CAAAoB,SAAA,EAAA,OAAA,CAAA,EAAApB,MAAA,CAAAoB,SAAA,CAAAD,EAAAA,yBAAA,CAAAnB,MAAA,CAAAoB,SAAA,EAAA,MAAA,EAAA,CAYNO,MAAM,CAAAX,EAAAA,MAAA,CAAAY,wBAAA,CAAA5B,MAAA,CAAAoB,SAAA,EAAA,MAAA,CAAA,EAAApB,MAAA,CAAAoB,SAAA,GAAAD,yBAAA,CAAAnB,MAAA,CAAAoB,SAAA,EAcNO,MAAAA,EAAAA,CAAAA,MAAM,CAAAX,EAAAA,MAAA,CAAAY,wBAAA,CAAA5B,MAAA,CAAAoB,SAAA,WAAApB,MAAA,CAAAoB,SAAA,CAAA,GAAApB,MAAA,EAAA;;AAsBT;AACA;AACA;AACA;AACA,IAAaU,WAAW,IAAAmB,OAAA,GAAjB,MAAMnB,WAAW,CAAC;EAMvB1C,WAAWA,CACDC,IAIP,EACD;AAXF;AACF;AACA;IAFEC,eAAA,CAAA,IAAA,EAAA,KAAA,EAGM,IAAI4D,UAAU,EAAkB,CAAA,CAAA;IAAA5D,eAAA,CAAA,IAAA,EAAA,QAAA,EA+C5BmC,GAAwB,IAAK;AACrC,MAAA,IAAI,CAACA,GAAG,CAAC0B,KAAK,EAAE,CAAA;MAEhB,KAAK,IAAI,CAAC1C,GAAG,EAAEI,KAAK,CAAC,IAAIY,GAAG,CAACQ,OAAO,EAAE,EAAE;QACtC,IAAI,CAACR,GAAG,CAACpB,GAAG,CAACI,GAAG,EAAEI,KAAK,CAAC,CAAA;AAC1B,OAAA;KACD,CAAA,CAAA;IAAA,IAlDSxB,CAAAA,IAIP,GAJOA,IAIP,CAAA;IAED,IAAIA,IAAI,CAACyD,aAAa,EAAE;MACtB,IAAI,CAACrB,GAAG,GAAG,IAAIyB,UAAU,CAAC7D,IAAI,CAACyD,aAAa,CAAC,CAAA;AAC/C,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;EAEEtC,QAAQA,CAACC,GAAW,EAAE;AACpB,IAAA,IAAI4B,cAAc,GAAG,IAAI,CAACA,cAAc,CAAA;IAExC,IAAIe,KAAK,GAAG,KAAK,CAAA;AACjB,IAAA,IAAIC,UAAuC,CAAA;AAE3C,IAAA,KAAK,IAAI9D,MAAM,IAAI8C,cAAc,CAACiB,OAAO,EAAE,EAAE;AAC3C,MAAA,IAAIF,KAAK,EAAE;AACTC,QAAAA,UAAU,GAAG9D,MAAM,CAAA;AAEnB,QAAA,MAAA;AACF,OAAA;AAEA,MAAA,IAAIA,MAAM,CAACkB,GAAG,KAAKA,GAAG,EAAE;AACtB2C,QAAAA,KAAK,GAAG,IAAI,CAAA;AACd,OAAA;AACF,KAAA;IAEA,IAAI,CAACC,UAAU,EAAE,OAAA;IAEjB,IAAIE,YAAY,GAAG,IAAI,CAACpD,GAAG,CAACkD,UAAU,CAAC5C,GAAG,CAAC,CAAA;AAE3C,IAAA,IAAI,CAACkB,QAAQ,CAAClB,GAAG,EAAE8C,YAAY,CAAC,CAAA;AAClC,GAAA;AAUA;AACF;AACA;AACA;AACA;AACA;AACA;EAEE7C,SAASA,CAACD,GAAW,EAAE;AACrB,IAAA,IAAI4B,cAAc,GAAG,IAAI,CAACA,cAAc,CAAA;IAExC,IAAIe,KAAK,GAAG,KAAK,CAAA;AACjB,IAAA,IAAIC,UAAuC,CAAA;AAE3C,IAAA,KAAK,IAAI9D,MAAM,IAAI8C,cAAc,EAAE;AACjC,MAAA,IAAIe,KAAK,EAAE;AACTC,QAAAA,UAAU,GAAG9D,MAAM,CAAA;AAEnB,QAAA,MAAA;AACF,OAAA;AAEA,MAAA,IAAIA,MAAM,CAACkB,GAAG,KAAKA,GAAG,EAAE;AACtB2C,QAAAA,KAAK,GAAG,IAAI,CAAA;AACd,OAAA;AACF,KAAA;IAEA,IAAI,CAACC,UAAU,EAAE,OAAA;IAEjB,IAAIE,YAAY,GAAG,IAAI,CAACpD,GAAG,CAACkD,UAAU,CAAC5C,GAAG,CAAC,CAAA;AAE3C,IAAA,IAAI,CAACkB,QAAQ,CAAClB,GAAG,EAAE8C,YAAY,CAAC,CAAA;AAClC,GAAA;;AAEA;AACF;AACA;AAEE5B,EAAAA,QAAQA,CAAClB,GAAW,EAAEE,QAAgB,EAAE;IACtC,IAAI6C,cAAc,GAAG,CAAC,GAAG,IAAI,CAACC,UAAU,CAACC,MAAM,EAAE,CAAC,CAAA;;AAElD;AACJ;AACA;AACI,IAAA,IAAI,CAACF,cAAc,CAACG,QAAQ,CAAChD,QAAQ,CAAC,EAAE;AACtC,MAAA,OAAA;AACF,KAAA;;AAEA;AACJ;AACA;AACA;IACI,IAAIiD,eAAe,GAAG,IAAI,CAACH,UAAU,CAACtD,GAAG,CAACM,GAAG,CAAC,CAAA;AAE9CoD,IAAAA,MAAM,CACH,CAA4BpD,0BAAAA,EAAAA,GAAI,8CAA6C,GAC3E,CAAA,2BAAA,CAA4B,GAC7B,CAAC,GAAG,IAAI,CAACgD,UAAU,CAACxB,OAAO,EAAE,CAAC,CAACR,GAAG,CAAEqC,KAAK,IAAKA,KAAK,CAACC,IAAI,CAAC,MAAM,CAAC,CAAC,CAACA,IAAI,CAAC,IAAI,CAAC,GAC3E,CAAgC,+BAAA,CAAA,GACjC,IAAI,CAAC1E,IAAI,CAACU,OAAO,EAAE,CAAC0B,GAAG,CAAElC,MAAM,IAAKA,MAAM,CAACkB,GAAG,CAAC,GAC9C,CAAA,oBAAA,EAAsB,IAAI,CAACgB,GAAG,CAACuC,IAAK,CAAA,MAAA,CAAO,GAC5C,CAAC,GAAG,IAAI,CAACvC,GAAG,CAACQ,OAAO,EAAE,CAAC,CAACR,GAAG,CAAEqC,KAAK,IAAKA,KAAK,CAACC,IAAI,CAAC,MAAM,CAAC,CAAC,CAACA,IAAI,CAAC,IAAI,CAAC,EACvEE,SAAS,KAAKL,eAAe,CAC9B,CAAA;;AAED;AACJ;AACA;AACA;IACI,IAAIA,eAAe,KAAKjD,QAAQ,EAAE;AAChC,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;IAEA,IAAIuD,aAAa,GAAG,IAAI/B,GAAG,CACzB,CAAC,GAAG,IAAI,CAACsB,UAAU,CAACxB,OAAO,EAAE,CAAC,CAACR,GAAG,CAAEqC,KAAK,IAAKA,KAAK,CAACR,OAAO,EAAsB,CAAC,CACnF,CAAA;IAED,KAAK,IAAI,CAACa,gBAAgB,EAAE1D,GAAG,CAAC,IAAIyD,aAAa,CAACjC,OAAO,EAAE,EAAE;MAC3D,IAAIkC,gBAAgB,KAAKxD,QAAQ,EAAE;AACjC;AACR;AACA;AACA;QACQ,IAAI,CAACc,GAAG,CAACpB,GAAG,CAACI,GAAG,EAAEmD,eAAe,CAAC,CAAA;AAElC,QAAA,MAAA;AACF,OAAA;AACF,KAAA;;AAEA;AACJ;AACA;IACI,IAAI,CAACnC,GAAG,CAACpB,GAAG,CAACI,GAAG,EAAEE,QAAQ,CAAC,CAAA;;AAE3B;AACJ;AACA;AACA;AACI,IAAA,KAAK,IAAI,CAACF,GAAG,EAAEE,QAAQ,CAAC,IAAI,IAAI,CAAC8C,UAAU,CAACxB,OAAO,EAAE,EAAE;MACrD,IAAI,IAAI,CAACR,GAAG,CAAC2C,GAAG,CAAC3D,GAAG,CAAC,EAAE,SAAA;MAEvB,IAAI,CAACgB,GAAG,CAACpB,GAAG,CAACI,GAAG,EAAEE,QAAQ,CAAC,CAAA;AAC7B,KAAA;IAEA,IAAI,CAACtB,IAAI,CAAC2C,IAAI,GAAG,IAAI,CAACP,GAAG,CAAC,CAAA;AAC5B,GAAA;EAGAtB,GAAGA,CAACM,GAAW,EAAE;IACf,IAAI4D,MAAM,GAAG,IAAI,CAACZ,UAAU,CAACtD,GAAG,CAACM,GAAG,CAAC,CAAA;AAErCoD,IAAAA,MAAM,CACH,CAAA,sBAAA,EAAwBpD,GAAI,CAAA,uCAAA,CAAwC;IAErEwD,SAAS,KAAKI,MAAM,CACrB,CAAA;AAED,IAAA,OAAOA,MAAM,CAAA;AACf,GAAA;;AAEA;AACF;AACA;EACE,IACIZ,UAAUA,GAAgC;AAC5C,IAAA,OAAOa,OAAO,CAAC,IAAI,CAACjF,IAAI,CAACU,OAAO,EAAE,EAAE,IAAI,CAAC0B,GAAG,CAAC,CAAA;AAC/C,GAAA;EAEA,IACIY,cAAcA,GAAa;AAC7B,IAAA,IAAIN,gBAAgB,GAAG,IAAI,CAAC1C,IAAI,CAACU,OAAO,EAAE,CAAA;IAC1C,IAAIwE,cAAc,GAAGxC,gBAAgB,CAACyC,MAAM,CAAC,CAACC,MAAM,EAAElF,MAAM,KAAK;AAC/DkF,MAAAA,MAAM,CAAClF,MAAM,CAACkB,GAAG,CAAC,GAAGlB,MAAM,CAAA;AAE3B,MAAA,OAAOkF,MAAM,CAAA;KACd,EAAE,EAAE,CAA2B,CAAA;IAChC,IAAIC,WAAW,GAAGJ,OAAO,CAACvC,gBAAgB,EAAE,IAAI,CAACN,GAAG,CAAC,CAAA;AAErD,IAAA,IAAI4C,MAAgB,GAAGM,KAAK,CAACC,IAAI,CAAC;MAAE3D,MAAM,EAAEc,gBAAgB,CAACd,MAAAA;AAAO,KAAC,CAAC,CAAA;IAEtE,KAAK,IAAI,CAACR,GAAG,EAAEE,QAAQ,CAAC,IAAI+D,WAAW,CAACzC,OAAO,EAAE,EAAE;AACjD,MAAA,IAAI1C,MAAM,GAAGgF,cAAc,CAAC9D,GAAG,CAAC,CAAA;AAEhCoD,MAAAA,MAAM,CAAE,CAAkCpD,gCAAAA,EAAAA,GAAI,CAAe,cAAA,CAAA,EAAElB,MAAM,CAAC,CAAA;AACtE8E,MAAAA,MAAM,CAAC1D,QAAQ,CAAC,GAAGpB,MAAM,CAAA;AAC3B,KAAA;AAEAsE,IAAAA,MAAM,CACH,CAAA,kCAAA,EAAoCQ,MAAM,CAACQ,MAAM,CAACC,OAAO,CAAC,CAAC7D,MAAO,CAAA,EAAA,CAAG,GACnE,CAAA,gDAAA,EAAkDc,gBAAgB,CAACd,MAAO,CAAI,GAAA,CAAA,GAC9E,CAAkBoD,gBAAAA,EAAAA,MAAM,CACtBQ,MAAM,CAACC,OAAO,CAAC,CACfrD,GAAG,CAAEsD,CAAC,IAAKA,CAAC,CAACtE,GAAG,CAAC,CACjBsD,IAAI,CAAC,IAAI,CAAE,CAAK,IAAA,CAAA,GAClB,sBAAqBhC,gBAAgB,CAACN,GAAG,CAAEsD,CAAC,IAAKA,CAAC,CAACtE,GAAG,CAAC,CAACsD,IAAI,CAAC,IAAI,CAAE,CAAA,CAAC,EACvEM,MAAM,CAACQ,MAAM,CAACC,OAAO,CAAC,CAAC7D,MAAM,KAAKc,gBAAgB,CAACd,MAAM,CAC1D,CAAA;AAED,IAAA,OAAOoD,MAAM,CAACQ,MAAM,CAACC,OAAO,CAAC,CAAA;AAC/B,GAAA;AACF,CAAC,GAAAvC,yBAAA,CAAAU,OAAA,CAAAT,SAAA,EAAA,UAAA,EAAA,CAjMEO,MAAM,CAAA,EAAAX,MAAA,CAAAY,wBAAA,CAAAC,OAAA,CAAAT,SAAA,EAAA,UAAA,CAAA,EAAAS,OAAA,CAAAT,SAAA,CAAA,EAAAD,yBAAA,CAAAU,OAAA,CAAAT,SAAA,EAAA,WAAA,EAAA,CAyCNO,MAAM,CAAA,EAAAX,MAAA,CAAAY,wBAAA,CAAAC,OAAA,CAAAT,SAAA,EAAAS,WAAAA,CAAAA,EAAAA,OAAA,CAAAT,SAAA,CAAAD,EAAAA,yBAAA,CAAAU,OAAA,CAAAT,SAAA,EA6BNO,UAAAA,EAAAA,CAAAA,MAAM,CAAAX,EAAAA,MAAA,CAAAY,wBAAA,CAAAC,OAAA,CAAAT,SAAA,EAAAS,UAAAA,CAAAA,EAAAA,OAAA,CAAAT,SAAA,GAAAD,yBAAA,CAAAU,OAAA,CAAAT,SAAA,EAAA,KAAA,EAAA,CAsENO,MAAM,CAAA,EAAAX,MAAA,CAAAY,wBAAA,CAAAC,OAAA,CAAAT,SAAA,EAAA,KAAA,CAAA,EAAAS,OAAA,CAAAT,SAAA,CAAA,EAAAD,yBAAA,CAAAU,OAAA,CAAAT,SAAA,EAAA,YAAA,EAAA,CAgBN1D,MAAM,CAAA,EAAAsD,MAAA,CAAAY,wBAAA,CAAAC,OAAA,CAAAT,SAAA,EAAA,YAAA,CAAA,EAAAS,OAAA,CAAAT,SAAA,CAAA,EAAAD,yBAAA,CAAAU,OAAA,CAAAT,SAAA,EAAA,gBAAA,EAAA,CAKN1D,MAAM,CAAA,EAAAsD,MAAA,CAAAY,wBAAA,CAAAC,OAAA,CAAAT,SAAA,EAAA,gBAAA,CAAA,EAAAS,OAAA,CAAAT,SAAA,CAAA,GAAAS,OAAA,EAAA;;AAkCT;AACA;AACA;AACA;AACA;AACA;AACO,SAASqB,OAAOA,CACrBvE,OAA0B,EAC1BiF,YAAiC,EACZ;AACrB,EAAA,IAAIX,MAAM,GAAG,IAAIlC,GAAG,EAAkB,CAAA;EACtC,IAAIJ,gBAAgB,GAAGhC,OAAO,CAAC0B,GAAG,CAAElC,MAAM,IAAKA,MAAM,CAACkB,GAAG,CAAC,CAAA;AAC1D,EAAA,IAAIwE,YAAY,GAAG,IAAIC,GAAG,CAACnD,gBAAgB,CAAC,CAAA;AAC5C,EAAA,IAAIoD,OAAO,GAAG,IAAIhD,GAAG,CACnB,CAAC,GAAG6C,YAAY,CAAC/C,OAAO,EAAE,CAAC,CAACR,GAAG,CAAC,CAAC,CAAChB,GAAG,EAAEE,QAAQ,CAAC,KAAK,CAACA,QAAQ,EAAEF,GAAG,CAAC,CAAC,CACtE,CAAA;;AAED;AACF;AACA;EACE,KAAK,IAAI2E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGC,IAAI,CAACC,GAAG,CAACvF,OAAO,CAACkB,MAAM,EAAEkE,OAAO,CAACnB,IAAI,CAAC,EAAEoB,CAAC,EAAE,EAAE;AAC/D,IAAA,IAAIG,UAAU,GAAGJ,OAAO,CAAChF,GAAG,CAACiF,CAAC,CAAC,CAAA;AAE/B,IAAA,IAAIG,UAAU,EAAE;AACd;AACN;AACA;AACA;AACM,MAAA,IAAIN,YAAY,CAACb,GAAG,CAACmB,UAAU,CAAC,EAAE;AAChClB,QAAAA,MAAM,CAAChE,GAAG,CAACkF,UAAU,EAAEH,CAAC,CAAC,CAAA;AACzB,QAAA,SAAA;AACF,OAAA;AACF,KAAA;AAEA,IAAA,IAAII,YAAgC,CAAA;AAEpC,IAAA,OAAQA,YAAY,GAAGzD,gBAAgB,CAAC0D,KAAK,EAAE,EAAG;AAChD,MAAA,IAAIpB,MAAM,CAACD,GAAG,CAACoB,YAAY,CAAC,IAAIR,YAAY,CAACZ,GAAG,CAACoB,YAAY,CAAC,EAAE;AAC9D,QAAA,SAAA;AACF,OAAA;AAEA,MAAA,MAAA;AACF,KAAA;IAEA,IAAI,CAACA,YAAY,EAAE;AACjB;AACN;AACA;AACM,MAAA,SAAA;AACF,KAAA;AAEAnB,IAAAA,MAAM,CAAChE,GAAG,CAACmF,YAAY,EAAEJ,CAAC,CAAC,CAAA;AAC7B,GAAA;AAEA,EAAA,OAAOf,MAAM,CAAA;AACf;;;;"}
@@ -1,4 +1,4 @@
1
- import { Column } from "../../index";
1
+ import { Column } from "../../index.js";
2
2
  type ColumnOrder = {
3
3
  key: string;
4
4
  position: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/plugins/column-reordering/utils.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { ColumnReordering } from './plugin';\n\nimport type { Column } from '[public-types]';\n\ntype ColumnOrder = { key: string; position: number | undefined }[];\n\nexport function reorderColumns(columns: Column[], orderedColumns: ColumnOrder | undefined) {\n if (orderedColumns === undefined) {\n return columns;\n }\n\n let repositionedColumns: Column[] = Array.from({\n length: columns.length,\n });\n\n for (const column of columns) {\n const orderedColumn = orderedColumns.find((orderedColumn) => column.key === orderedColumn.key);\n const currentMeta = meta.forColumn(column, ColumnReordering);\n\n if (orderedColumn === undefined) {\n if (currentMeta.position !== undefined && currentMeta.position >= 0) {\n repositionedColumns[currentMeta.position] = column;\n }\n\n continue;\n }\n\n const { position } = orderedColumn;\n\n if (position !== undefined && !repositionedColumns[position]) {\n repositionedColumns[position] = column;\n } else {\n repositionedColumns.push(column);\n }\n }\n\n repositionedColumns = repositionedColumns.filter((column) => column !== undefined);\n\n return repositionedColumns;\n}\n"],"names":["reorderColumns","columns","orderedColumns","undefined","repositionedColumns","Array","from","length","column","orderedColumn","find","key","currentMeta","meta","forColumn","ColumnReordering","position","push","filter"],"mappings":";;;AAOO,SAASA,cAAc,CAACC,OAAiB,EAAEC,cAAuC,EAAE;EACzF,IAAIA,cAAc,KAAKC,SAAS,EAAE;AAChC,IAAA,OAAOF,OAAO,CAAA;AAChB,GAAA;AAEA,EAAA,IAAIG,mBAA6B,GAAGC,KAAK,CAACC,IAAI,CAAC;IAC7CC,MAAM,EAAEN,OAAO,CAACM,MAAAA;AAClB,GAAC,CAAC,CAAA;AAEF,EAAA,KAAK,MAAMC,MAAM,IAAIP,OAAO,EAAE;AAC5B,IAAA,MAAMQ,aAAa,GAAGP,cAAc,CAACQ,IAAI,CAAED,aAAa,IAAKD,MAAM,CAACG,GAAG,KAAKF,aAAa,CAACE,GAAG,CAAC,CAAA;IAC9F,MAAMC,WAAW,GAAGC,IAAI,CAACC,SAAS,CAACN,MAAM,EAAEO,gBAAgB,CAAC,CAAA;IAE5D,IAAIN,aAAa,KAAKN,SAAS,EAAE;MAC/B,IAAIS,WAAW,CAACI,QAAQ,KAAKb,SAAS,IAAIS,WAAW,CAACI,QAAQ,IAAI,CAAC,EAAE;AACnEZ,QAAAA,mBAAmB,CAACQ,WAAW,CAACI,QAAQ,CAAC,GAAGR,MAAM,CAAA;AACpD,OAAA;AAEA,MAAA,SAAA;AACF,KAAA;IAEA,MAAM;AAAEQ,MAAAA,QAAAA;AAAS,KAAC,GAAGP,aAAa,CAAA;IAElC,IAAIO,QAAQ,KAAKb,SAAS,IAAI,CAACC,mBAAmB,CAACY,QAAQ,CAAC,EAAE;AAC5DZ,MAAAA,mBAAmB,CAACY,QAAQ,CAAC,GAAGR,MAAM,CAAA;AACxC,KAAC,MAAM;AACLJ,MAAAA,mBAAmB,CAACa,IAAI,CAACT,MAAM,CAAC,CAAA;AAClC,KAAA;AACF,GAAA;EAEAJ,mBAAmB,GAAGA,mBAAmB,CAACc,MAAM,CAAEV,MAAM,IAAKA,MAAM,KAAKL,SAAS,CAAC,CAAA;AAElF,EAAA,OAAOC,mBAAmB,CAAA;AAC5B;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../src/plugins/column-reordering/utils.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { ColumnReordering } from './plugin';\n\nimport type { Column } from '[public-types]';\n\ntype ColumnOrder = { key: string; position: number | undefined }[];\n\nexport function reorderColumns(columns: Column[], orderedColumns: ColumnOrder | undefined) {\n if (orderedColumns === undefined) {\n return columns;\n }\n\n let repositionedColumns: Column[] = Array.from({\n length: columns.length,\n });\n\n for (const column of columns) {\n const orderedColumn = orderedColumns.find((orderedColumn) => column.key === orderedColumn.key);\n const currentMeta = meta.forColumn(column, ColumnReordering);\n\n if (orderedColumn === undefined) {\n if (currentMeta.position !== undefined && currentMeta.position >= 0) {\n repositionedColumns[currentMeta.position] = column;\n }\n\n continue;\n }\n\n const { position } = orderedColumn;\n\n if (position !== undefined && !repositionedColumns[position]) {\n repositionedColumns[position] = column;\n } else {\n repositionedColumns.push(column);\n }\n }\n\n repositionedColumns = repositionedColumns.filter((column) => column !== undefined);\n\n return repositionedColumns;\n}\n"],"names":["reorderColumns","columns","orderedColumns","undefined","repositionedColumns","Array","from","length","column","orderedColumn","find","key","currentMeta","meta","forColumn","ColumnReordering","position","push","filter"],"mappings":";;;AAOO,SAASA,cAAcA,CAACC,OAAiB,EAAEC,cAAuC,EAAE;EACzF,IAAIA,cAAc,KAAKC,SAAS,EAAE;AAChC,IAAA,OAAOF,OAAO,CAAA;AAChB,GAAA;AAEA,EAAA,IAAIG,mBAA6B,GAAGC,KAAK,CAACC,IAAI,CAAC;IAC7CC,MAAM,EAAEN,OAAO,CAACM,MAAAA;AAClB,GAAC,CAAC,CAAA;AAEF,EAAA,KAAK,MAAMC,MAAM,IAAIP,OAAO,EAAE;AAC5B,IAAA,MAAMQ,aAAa,GAAGP,cAAc,CAACQ,IAAI,CAAED,aAAa,IAAKD,MAAM,CAACG,GAAG,KAAKF,aAAa,CAACE,GAAG,CAAC,CAAA;IAC9F,MAAMC,WAAW,GAAGC,IAAI,CAACC,SAAS,CAACN,MAAM,EAAEO,gBAAgB,CAAC,CAAA;IAE5D,IAAIN,aAAa,KAAKN,SAAS,EAAE;MAC/B,IAAIS,WAAW,CAACI,QAAQ,KAAKb,SAAS,IAAIS,WAAW,CAACI,QAAQ,IAAI,CAAC,EAAE;AACnEZ,QAAAA,mBAAmB,CAACQ,WAAW,CAACI,QAAQ,CAAC,GAAGR,MAAM,CAAA;AACpD,OAAA;AAEA,MAAA,SAAA;AACF,KAAA;IAEA,MAAM;AAAEQ,MAAAA,QAAAA;AAAS,KAAC,GAAGP,aAAa,CAAA;IAElC,IAAIO,QAAQ,KAAKb,SAAS,IAAI,CAACC,mBAAmB,CAACY,QAAQ,CAAC,EAAE;AAC5DZ,MAAAA,mBAAmB,CAACY,QAAQ,CAAC,GAAGR,MAAM,CAAA;AACxC,KAAC,MAAM;AACLJ,MAAAA,mBAAmB,CAACa,IAAI,CAACT,MAAM,CAAC,CAAA;AAClC,KAAA;AACF,GAAA;EAEAJ,mBAAmB,GAAGA,mBAAmB,CAACc,MAAM,CAAEV,MAAM,IAAKA,MAAM,KAAKL,SAAS,CAAC,CAAA;AAElF,EAAA,OAAOC,mBAAmB,CAAA;AAC5B;;;;"}
@@ -1,6 +1,6 @@
1
1
  import Modifier from 'ember-modifier';
2
- import { ColumnMeta } from "./plugin";
3
- import { Column } from "../../-private/column";
2
+ import { ColumnMeta } from "./plugin.js";
3
+ import { Column } from "../../-private/column.js";
4
4
  /**
5
5
  * - why are mouse events used instead of drag events?
6
6
  * - why not use the "draggable" attribute?