ember-headless-table 2.0.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/-private/base.d.ts +16 -4
- package/dist/plugins/-private/base.js +38 -3
- package/dist/plugins/-private/base.js.map +1 -1
- package/dist/plugins/column-resizing/handle.js +1 -0
- package/dist/plugins/column-resizing/handle.js.map +1 -1
- package/dist/plugins/column-resizing/plugin.d.ts +17 -2
- package/dist/plugins/column-resizing/plugin.js +26 -7
- package/dist/plugins/column-resizing/plugin.js.map +1 -1
- package/dist/plugins/column-visibility/plugin.js +2 -11
- package/dist/plugins/column-visibility/plugin.js.map +1 -1
- package/dist/test-support/index.js +1 -0
- package/dist/test-support/index.js.map +1 -1
- package/package.json +3 -3
@@ -131,6 +131,18 @@ declare const preferences: {
|
|
131
131
|
*/
|
132
132
|
set(key: string, value: unknown): void;
|
133
133
|
};
|
134
|
+
/**
|
135
|
+
* @public
|
136
|
+
*
|
137
|
+
* returns an object for bulk updating preferences data
|
138
|
+
* for all columns (scoped to key and table)
|
139
|
+
*/
|
140
|
+
forAllColumns<P_1 extends BasePlugin<any>, Data_1 = unknown>(table: Table<Data_1>, klass: Class<P_1>): {
|
141
|
+
/**
|
142
|
+
* delete an entry on every column in the underlying column `Map` for this table-plugin pair
|
143
|
+
*/
|
144
|
+
delete(key: string): void | undefined;
|
145
|
+
};
|
134
146
|
/**
|
135
147
|
* @public
|
136
148
|
*
|
@@ -141,17 +153,17 @@ declare const preferences: {
|
|
141
153
|
* (though, if other plugins can guess how the underlying plugin access
|
142
154
|
* works, they can access this data, too. No security guaranteed)
|
143
155
|
*/
|
144
|
-
forTable<
|
156
|
+
forTable<P_2 extends BasePlugin<any>, Data_2 = unknown>(table: Table<Data_2>, klass: Class<P_2>): {
|
145
157
|
/**
|
146
|
-
* delete an entry on the underlying `Map` used for this
|
158
|
+
* delete an entry on the underlying `Map` used for this table-plugin pair
|
147
159
|
*/
|
148
160
|
delete(key: string): void | undefined;
|
149
161
|
/**
|
150
|
-
* get an entry on the underlying `Map` used for this
|
162
|
+
* get an entry on the underlying `Map` used for this table-plugin pair
|
151
163
|
*/
|
152
164
|
get(key: string): unknown;
|
153
165
|
/**
|
154
|
-
* set an entry on the underlying `Map` used for this
|
166
|
+
* set an entry on the underlying `Map` used for this table-plugin pair
|
155
167
|
*/
|
156
168
|
set(key: string, value: unknown): void | undefined;
|
157
169
|
};
|
@@ -118,6 +118,29 @@ const preferences = {
|
|
118
118
|
}
|
119
119
|
};
|
120
120
|
},
|
121
|
+
/**
|
122
|
+
* @public
|
123
|
+
*
|
124
|
+
* returns an object for bulk updating preferences data
|
125
|
+
* for all columns (scoped to key and table)
|
126
|
+
*/
|
127
|
+
forAllColumns(table, klass) {
|
128
|
+
return {
|
129
|
+
/**
|
130
|
+
* delete an entry on every column in the underlying column `Map` for this table-plugin pair
|
131
|
+
*/
|
132
|
+
delete(key) {
|
133
|
+
let tablePrefs = table.preferences;
|
134
|
+
for (let column of table.columns) {
|
135
|
+
let prefs = column.table.preferences;
|
136
|
+
let existing = prefs.storage.forPlugin(klass.name);
|
137
|
+
let columnPrefs = existing.forColumn(column.key);
|
138
|
+
columnPrefs.delete(key);
|
139
|
+
}
|
140
|
+
return tablePrefs.persist();
|
141
|
+
}
|
142
|
+
};
|
143
|
+
},
|
121
144
|
/**
|
122
145
|
* @public
|
123
146
|
*
|
@@ -131,7 +154,7 @@ const preferences = {
|
|
131
154
|
forTable(table, klass) {
|
132
155
|
return {
|
133
156
|
/**
|
134
|
-
* delete an entry on the underlying `Map` used for this
|
157
|
+
* delete an entry on the underlying `Map` used for this table-plugin pair
|
135
158
|
*/
|
136
159
|
delete(key) {
|
137
160
|
let prefs = table.preferences;
|
@@ -140,7 +163,7 @@ const preferences = {
|
|
140
163
|
return prefs.persist();
|
141
164
|
},
|
142
165
|
/**
|
143
|
-
* get an entry on the underlying `Map` used for this
|
166
|
+
* get an entry on the underlying `Map` used for this table-plugin pair
|
144
167
|
*/
|
145
168
|
get(key) {
|
146
169
|
let prefs = table.preferences;
|
@@ -148,7 +171,7 @@ const preferences = {
|
|
148
171
|
return existing.table.get(key);
|
149
172
|
},
|
150
173
|
/**
|
151
|
-
* set an entry on the underlying `Map` used for this
|
174
|
+
* set an entry on the underlying `Map` used for this table-plugin pair
|
152
175
|
*/
|
153
176
|
set(key, value) {
|
154
177
|
let prefs = table.preferences;
|
@@ -181,6 +204,7 @@ function columnsFor(table, requester) {
|
|
181
204
|
assert(`First argument passed to columns.for must be an instance of Table`, table[TABLE_KEY]);
|
182
205
|
let visibility = findPlugin(table.plugins, 'columnVisibility');
|
183
206
|
let reordering = findPlugin(table.plugins, 'columnOrder');
|
207
|
+
let sizing = findPlugin(table.plugins, 'columnResizing');
|
184
208
|
|
185
209
|
// TODO: actually resolve the graph, rather than use the hardcoded feature names
|
186
210
|
// atm, this only "happens" to work based on expectations of
|
@@ -188,6 +212,9 @@ function columnsFor(table, requester) {
|
|
188
212
|
|
189
213
|
if (requester) {
|
190
214
|
assert(`[${requester.name}] requested columns from the table, but the plugin, ${requester.name}, ` + `is not used in this table`, table.plugins.some(plugin => plugin instanceof requester));
|
215
|
+
if (sizing && sizing.constructor === requester) {
|
216
|
+
return table.columns.values();
|
217
|
+
}
|
191
218
|
if (visibility && visibility.constructor === requester) {
|
192
219
|
return table.columns.values();
|
193
220
|
}
|
@@ -206,6 +233,10 @@ function columnsFor(table, requester) {
|
|
206
233
|
assert(`<#${visibility.name}> defined a 'columns' property, but did not return valid data.`, visibility.columns && Array.isArray(visibility.columns));
|
207
234
|
return visibility.columns;
|
208
235
|
}
|
236
|
+
if (sizing) {
|
237
|
+
assert(`<#${sizing.name}> defined a 'columns' property, but did not return valid data.`, sizing.columns && Array.isArray(sizing.columns));
|
238
|
+
return sizing.columns;
|
239
|
+
}
|
209
240
|
return table.columns.values();
|
210
241
|
}
|
211
242
|
|
@@ -221,6 +252,10 @@ function columnsFor(table, requester) {
|
|
221
252
|
assert(`<#${visibility.name}> defined a 'columns' property, but did not return valid data.`, visibility.columns && Array.isArray(visibility.columns));
|
222
253
|
return visibility.columns;
|
223
254
|
}
|
255
|
+
if (sizing) {
|
256
|
+
assert(`<#${sizing.name}> defined a 'columns' property, but did not return valid data.`, sizing.columns && Array.isArray(sizing.columns));
|
257
|
+
return sizing.columns;
|
258
|
+
}
|
224
259
|
return table.columns.values();
|
225
260
|
}
|
226
261
|
const columns = {
|
@@ -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","_defineProperty","hasPlugin","klass","Boolean","pluginOf","preferences","column","delete","key","prefs","existing","storage","forPlugin","name","columnPrefs","persist","get","set","value","forTable","columnsFor","requester","assert","TABLE_KEY","visibility","findPlugin","plugins","reordering","some","plugin","columns","values","Array","isArray","for","next","current","referenceIndex","indexOf","length","undefined","previous","before","slice","after","meta","columnMeta","COLUMN_META_KEY","getPluginInstance","forRow","row","rowMeta","ROW_META_KEY","tableMeta","TABLE_META_KEY","keys","includes","withFeature","featureName","provider","availableFeatures","find","features","allFeatures","map","flat","filter","join","options","normalized","normalizePluginsConfig","config","tuple","option","t","fn","pluginOptions","args","mapKey","rootKey","factory","Error","bucket","WeakMap","Map","instance"],"mappings":"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"}
|
1
|
+
{"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 bulk updating preferences data\n * for all columns (scoped to key and table)\n */\n forAllColumns<P extends BasePlugin<any>, Data = unknown>(table: Table<Data>, klass: Class<P>) {\n return {\n /**\n * delete an entry on every column in the underlying column `Map` for this table-plugin pair\n */\n delete(key: string) {\n let tablePrefs = table.preferences;\n\n for (let column of table.columns) {\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\n return tablePrefs.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 table-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 table-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 table-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 let sizing = findPlugin(table.plugins, 'columnResizing');\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 (sizing && sizing.constructor === requester) {\n return table.columns.values();\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 if (sizing) {\n assert(\n `<#${sizing.name}> defined a 'columns' property, but did not return valid data.`,\n sizing.columns && Array.isArray(sizing.columns)\n );\n\n return sizing.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 if (sizing) {\n assert(\n `<#${sizing.name}> defined a 'columns' property, but did not return valid data.`,\n sizing.columns && Array.isArray(sizing.columns)\n );\n\n return sizing.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","forAllColumns","tablePrefs","columns","forTable","columnsFor","requester","assert","TABLE_KEY","visibility","findPlugin","plugins","reordering","sizing","some","plugin","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 +1 @@
|
|
1
|
-
{"version":3,"file":"handle.js","sources":["../../../src/plugins/column-resizing/handle.ts"],"sourcesContent":["import { registerDestructor } from '@ember/destroyable';\nimport { buildWaiter } from '@ember/test-waiters';\n\nimport Modifier from 'ember-modifier';\n\nimport { meta } from '../-private/base';\nimport { ColumnResizing } from './plugin';\n\nimport type { ColumnMeta } from './plugin';\nimport type { Column } from '#/column';\n\nlet waiter = buildWaiter('ColumnResizing#ResizeHandle');\n\n/**\n * - why are mouse events used instead of drag events?\n * - why not use the \"draggable\" attribute?\n *\n * It seems drag events are more for files and/or moving images around on a page\n * dragging an image, for example, has a ghost of that image until it is dropped.\n * The same thing happens with text.\n * This prevents us from having total control of the styling of how dragging works.\n *\n *\n *\n */\n\nclass ResizeHandle extends Modifier<{ Args: { Positional: [Column] } }> {\n declare dragHandle: HTMLElement;\n declare column: Column;\n declare meta: ColumnMeta;\n\n // Pointer\n pointerStartX = 0;\n pointerStartY = 0;\n pointerX = 0;\n pointerY = 0;\n declare dragFrame: number;\n\n // Keyboard\n keyDistance = 0;\n declare keyFrame: number; // ha\n declare lastKey: number;\n\n // waiter\n token?: unknown;\n\n isSetup = false;\n modify(element: Element, [column]: [Column]) {\n this.column = column;\n this.meta = meta.forColumn(column, ColumnResizing);\n this.dragHandle = element as HTMLElement;\n\n if (!this.isSetup) {\n this.isSetup = true;\n this.setup();\n }\n }\n\n setup = () => {\n this.dragHandle.addEventListener('touchstart', this.dragStartHandler);\n this.dragHandle.addEventListener('mousedown', this.dragStartHandler);\n this.dragHandle.addEventListener('keydown', this.keyHandler);\n\n registerDestructor(this, () => {\n this.meta.isResizing = false;\n\n if (this.token) {\n waiter.endAsync(this.token);\n this.token = undefined;\n }\n\n this.dragHandle.removeEventListener('touchstart', this.dragStartHandler);\n this.dragHandle.removeEventListener('mousedown', this.dragStartHandler);\n window.removeEventListener('touchmove', this.dragMove);\n window.removeEventListener('touchend', this.dragEndHandler);\n window.removeEventListener('mousemove', this.dragMove);\n window.removeEventListener('mouseup', this.dragEndHandler);\n this.dragHandle.removeEventListener('keydown', this.keyHandler);\n });\n };\n\n setPosition = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n if ('TouchEvent' in window && event instanceof TouchEvent) {\n let firstTouch = event.touches[0];\n\n if (!firstTouch) return;\n\n this.pointerX = firstTouch.clientX;\n this.pointerY = firstTouch.clientY;\n } else {\n this.pointerX = event.clientX;\n this.pointerY = event.clientY;\n }\n };\n\n setStartPosition = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n if ('TouchEvent' in window && event instanceof TouchEvent) {\n let firstTouch = event.touches[0];\n\n if (!firstTouch) return;\n\n this.pointerStartX = firstTouch.clientX;\n this.pointerStartY = firstTouch.clientY;\n } else {\n this.pointerStartX = event.clientX;\n this.pointerStartY = event.clientY;\n }\n };\n\n queueUpdate = () => {\n cancelAnimationFrame(this.dragFrame);\n this.dragFrame = requestAnimationFrame(() => {\n this.meta.resize(this.pointerX - this.pointerStartX);\n this.pointerStartX = this.pointerX;\n });\n };\n\n dragEndHandler = () => {\n this.meta.isResizing = false;\n this.queueUpdate();\n\n if (this.token) {\n waiter.endAsync(this.token);\n this.token = undefined;\n }\n\n /**\n * No need to listen if we aren't dragging\n */\n window.removeEventListener('touchmove', this.dragMove);\n window.removeEventListener('touchend', this.dragEndHandler);\n window.removeEventListener('mousemove', this.dragMove);\n window.removeEventListener('mouseup', this.dragEndHandler);\n };\n\n dragMove = (event: Event) => {\n if (!this.meta.isResizing) return;\n this.setPosition(event);\n this.queueUpdate();\n };\n\n dragStartHandler = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n this.meta.isResizing = true;\n if (event.target !== this.dragHandle) return;\n\n if (this.token) {\n waiter.endAsync(this.token);\n }\n\n this.token = waiter.beginAsync();\n\n this.setPosition(event);\n this.setStartPosition(event);\n\n window.addEventListener('touchend', this.dragEndHandler);\n window.addEventListener('touchmove', this.dragMove);\n window.addEventListener('mousemove', this.dragMove);\n window.addEventListener('mouseup', this.dragEndHandler);\n };\n\n keyHandler = (event: KeyboardEvent) => {\n let deltaT = new Date().getTime() - this.lastKey;\n let isRapid = deltaT < 50;\n\n if (event.code === 'ArrowDown' || event.code === 'ArrowRight') {\n this.keyDistance += isRapid ? 8 : 1;\n this.lastKey = new Date().getTime();\n }\n\n if (event.code === 'ArrowUp' || event.code === 'ArrowLeft') {\n this.keyDistance -= isRapid ? 8 : 1;\n this.lastKey = new Date().getTime();\n }\n\n cancelAnimationFrame(this.keyFrame);\n this.keyFrame = requestAnimationFrame(() => {\n this.meta.resize(this.keyDistance);\n\n this.keyDistance = 0;\n });\n };\n}\n\n/**\n * Modifier to attach to the column resize handles.\n * This provides both keyboard and mouse support for resizing columns.\n * (provided the resize handle element is focusable -- so consider using\n * a button for the resize element)\n *\n * @example\n * ```js\n * import Component from '@glimmer/component';\n * import { meta } from 'ember-headless-table/plugins';\n * import { resizeHandle, ColumnResizing } from 'ember-headless-table/plugins/column-resizing';\n *\n * export default class TableHead extends Component {\n * /* ✂️ *\\/\n *\n * <template>\n * <thead>\n * <tr>\n * {{#each this.columns as |column|}}\n * <th>\n * <span>{{column.name}}</span>\n * <button {{resizeHandle column}}></button>\n * </th>\n * {{/each}}\n * </tr>\n * </thead>\n * </template>\n * }\n * ```\n *\n * Width and isResizing state is maintained on the \"meta\"\n * class so that the users may choose per-column stylings for\n * isResizing and dragging behaviors.\n *\n * For example, while dragging, the user may add a class based on the\n * isDragging property.\n *\n * @example\n * ```js\n * import Component from '@glimmer/component';\n * import { meta } from 'ember-headless-table/plugins';\n * import { resizeHandle, ColumnResizing } from 'ember-headless-table/plugins/column-resizing';\n *\n * export default class TableHead extends Component {\n * /* ✂️ *\\/\n *\n * isDragging = (column) => {\n * return meta.forColumn(column, ColumnResizing).isDragging;\n * }\n *\n * <template>\n * <thead>\n * <tr>\n * {{#each this.columns as |column|}}\n * <th class=\"header {{if (this.isDragging column) 'blue'}}\">\n * <span>{{column.name}}</span>\n * <button {{resizeHandle column}}></button>\n * </th>\n * {{/each}}\n * </tr>\n * </thead>\n * </template>\n * }\n * ```\n *\n *\n * @note\n * The logic here is copied from the drag slider in\n * https://limber.glimdown.com/\n * See: \"resize-handle\" on Limber's GitHub\n */\nexport const resizeHandle = ResizeHandle;\n"],"names":["waiter","buildWaiter","ResizeHandle","Modifier","constructor","args","_defineProperty","dragHandle","addEventListener","dragStartHandler","keyHandler","registerDestructor","meta","isResizing","token","endAsync","undefined","removeEventListener","window","dragMove","dragEndHandler","event","PointerEvent","MouseEvent","TouchEvent","firstTouch","touches","pointerX","clientX","pointerY","clientY","pointerStartX","pointerStartY","cancelAnimationFrame","dragFrame","requestAnimationFrame","resize","queueUpdate","setPosition","target","beginAsync","setStartPosition","deltaT","Date","getTime","lastKey","isRapid","code","keyDistance","keyFrame","modify","element","column","forColumn","ColumnResizing","isSetup","setup","resizeHandle"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"handle.js","sources":["../../../src/plugins/column-resizing/handle.ts"],"sourcesContent":["import { registerDestructor } from '@ember/destroyable';\nimport { buildWaiter } from '@ember/test-waiters';\n\nimport Modifier from 'ember-modifier';\n\nimport { meta } from '../-private/base';\nimport { ColumnResizing } from './plugin';\n\nimport type { ColumnMeta } from './plugin';\nimport type { Column } from '#/column';\n\nlet waiter = buildWaiter('ColumnResizing#ResizeHandle');\n\n/**\n * - why are mouse events used instead of drag events?\n * - why not use the \"draggable\" attribute?\n *\n * It seems drag events are more for files and/or moving images around on a page\n * dragging an image, for example, has a ghost of that image until it is dropped.\n * The same thing happens with text.\n * This prevents us from having total control of the styling of how dragging works.\n *\n *\n *\n */\n\nclass ResizeHandle extends Modifier<{ Args: { Positional: [Column] } }> {\n declare dragHandle: HTMLElement;\n declare column: Column;\n declare meta: ColumnMeta;\n\n // Pointer\n pointerStartX = 0;\n pointerStartY = 0;\n pointerX = 0;\n pointerY = 0;\n declare dragFrame: number;\n\n // Keyboard\n keyDistance = 0;\n declare keyFrame: number; // ha\n declare lastKey: number;\n\n // waiter\n token?: unknown;\n\n isSetup = false;\n modify(element: Element, [column]: [Column]) {\n this.column = column;\n this.meta = meta.forColumn(column, ColumnResizing);\n this.dragHandle = element as HTMLElement;\n\n if (!this.isSetup) {\n this.isSetup = true;\n this.setup();\n }\n }\n\n setup = () => {\n this.dragHandle.addEventListener('touchstart', this.dragStartHandler);\n this.dragHandle.addEventListener('mousedown', this.dragStartHandler);\n this.dragHandle.addEventListener('keydown', this.keyHandler);\n\n registerDestructor(this, () => {\n this.meta.isResizing = false;\n\n if (this.token) {\n waiter.endAsync(this.token);\n this.token = undefined;\n }\n\n this.dragHandle.removeEventListener('touchstart', this.dragStartHandler);\n this.dragHandle.removeEventListener('mousedown', this.dragStartHandler);\n window.removeEventListener('touchmove', this.dragMove);\n window.removeEventListener('touchend', this.dragEndHandler);\n window.removeEventListener('mousemove', this.dragMove);\n window.removeEventListener('mouseup', this.dragEndHandler);\n this.dragHandle.removeEventListener('keydown', this.keyHandler);\n });\n };\n\n setPosition = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n if ('TouchEvent' in window && event instanceof TouchEvent) {\n let firstTouch = event.touches[0];\n\n if (!firstTouch) return;\n\n this.pointerX = firstTouch.clientX;\n this.pointerY = firstTouch.clientY;\n } else {\n this.pointerX = event.clientX;\n this.pointerY = event.clientY;\n }\n };\n\n setStartPosition = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n if ('TouchEvent' in window && event instanceof TouchEvent) {\n let firstTouch = event.touches[0];\n\n if (!firstTouch) return;\n\n this.pointerStartX = firstTouch.clientX;\n this.pointerStartY = firstTouch.clientY;\n } else {\n this.pointerStartX = event.clientX;\n this.pointerStartY = event.clientY;\n }\n };\n\n queueUpdate = () => {\n cancelAnimationFrame(this.dragFrame);\n this.dragFrame = requestAnimationFrame(() => {\n this.meta.resize(this.pointerX - this.pointerStartX);\n this.pointerStartX = this.pointerX;\n });\n };\n\n dragEndHandler = () => {\n this.meta.isResizing = false;\n this.queueUpdate();\n\n if (this.token) {\n waiter.endAsync(this.token);\n this.token = undefined;\n }\n\n this.meta.save();\n\n /**\n * No need to listen if we aren't dragging\n */\n window.removeEventListener('touchmove', this.dragMove);\n window.removeEventListener('touchend', this.dragEndHandler);\n window.removeEventListener('mousemove', this.dragMove);\n window.removeEventListener('mouseup', this.dragEndHandler);\n };\n\n dragMove = (event: Event) => {\n if (!this.meta.isResizing) return;\n this.setPosition(event);\n this.queueUpdate();\n };\n\n dragStartHandler = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n this.meta.isResizing = true;\n if (event.target !== this.dragHandle) return;\n\n if (this.token) {\n waiter.endAsync(this.token);\n }\n\n this.token = waiter.beginAsync();\n\n this.setPosition(event);\n this.setStartPosition(event);\n\n window.addEventListener('touchend', this.dragEndHandler);\n window.addEventListener('touchmove', this.dragMove);\n window.addEventListener('mousemove', this.dragMove);\n window.addEventListener('mouseup', this.dragEndHandler);\n };\n\n keyHandler = (event: KeyboardEvent) => {\n let deltaT = new Date().getTime() - this.lastKey;\n let isRapid = deltaT < 50;\n\n if (event.code === 'ArrowDown' || event.code === 'ArrowRight') {\n this.keyDistance += isRapid ? 8 : 1;\n this.lastKey = new Date().getTime();\n }\n\n if (event.code === 'ArrowUp' || event.code === 'ArrowLeft') {\n this.keyDistance -= isRapid ? 8 : 1;\n this.lastKey = new Date().getTime();\n }\n\n cancelAnimationFrame(this.keyFrame);\n this.keyFrame = requestAnimationFrame(() => {\n this.meta.resize(this.keyDistance);\n\n this.keyDistance = 0;\n });\n };\n}\n\n/**\n * Modifier to attach to the column resize handles.\n * This provides both keyboard and mouse support for resizing columns.\n * (provided the resize handle element is focusable -- so consider using\n * a button for the resize element)\n *\n * @example\n * ```js\n * import Component from '@glimmer/component';\n * import { meta } from 'ember-headless-table/plugins';\n * import { resizeHandle, ColumnResizing } from 'ember-headless-table/plugins/column-resizing';\n *\n * export default class TableHead extends Component {\n * /* ✂️ *\\/\n *\n * <template>\n * <thead>\n * <tr>\n * {{#each this.columns as |column|}}\n * <th>\n * <span>{{column.name}}</span>\n * <button {{resizeHandle column}}></button>\n * </th>\n * {{/each}}\n * </tr>\n * </thead>\n * </template>\n * }\n * ```\n *\n * Width and isResizing state is maintained on the \"meta\"\n * class so that the users may choose per-column stylings for\n * isResizing and dragging behaviors.\n *\n * For example, while dragging, the user may add a class based on the\n * isDragging property.\n *\n * @example\n * ```js\n * import Component from '@glimmer/component';\n * import { meta } from 'ember-headless-table/plugins';\n * import { resizeHandle, ColumnResizing } from 'ember-headless-table/plugins/column-resizing';\n *\n * export default class TableHead extends Component {\n * /* ✂️ *\\/\n *\n * isDragging = (column) => {\n * return meta.forColumn(column, ColumnResizing).isDragging;\n * }\n *\n * <template>\n * <thead>\n * <tr>\n * {{#each this.columns as |column|}}\n * <th class=\"header {{if (this.isDragging column) 'blue'}}\">\n * <span>{{column.name}}</span>\n * <button {{resizeHandle column}}></button>\n * </th>\n * {{/each}}\n * </tr>\n * </thead>\n * </template>\n * }\n * ```\n *\n *\n * @note\n * The logic here is copied from the drag slider in\n * https://limber.glimdown.com/\n * See: \"resize-handle\" on Limber's GitHub\n */\nexport const resizeHandle = ResizeHandle;\n"],"names":["waiter","buildWaiter","ResizeHandle","Modifier","constructor","args","_defineProperty","dragHandle","addEventListener","dragStartHandler","keyHandler","registerDestructor","meta","isResizing","token","endAsync","undefined","removeEventListener","window","dragMove","dragEndHandler","event","PointerEvent","MouseEvent","TouchEvent","firstTouch","touches","pointerX","clientX","pointerY","clientY","pointerStartX","pointerStartY","cancelAnimationFrame","dragFrame","requestAnimationFrame","resize","queueUpdate","save","setPosition","target","beginAsync","setStartPosition","deltaT","Date","getTime","lastKey","isRapid","code","keyDistance","keyFrame","modify","element","column","forColumn","ColumnResizing","isSetup","setup","resizeHandle"],"mappings":"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"}
|
@@ -1,6 +1,18 @@
|
|
1
1
|
import { BasePlugin } from "../-private/base.js";
|
2
|
-
import { ColumnApi } from "../index.js";
|
2
|
+
import { ColumnApi, PluginPreferences } from "../index.js";
|
3
3
|
import { Column, Table } from "../../index.js";
|
4
|
+
interface ColumnResizePreferences extends PluginPreferences {
|
5
|
+
columns: {
|
6
|
+
[columnKey: string]: {
|
7
|
+
width?: number;
|
8
|
+
};
|
9
|
+
};
|
10
|
+
}
|
11
|
+
declare module "plugins/index" {
|
12
|
+
interface Registry {
|
13
|
+
ColumnResize?: ColumnResizePreferences;
|
14
|
+
}
|
15
|
+
}
|
4
16
|
interface ColumnOptions {
|
5
17
|
/**
|
6
18
|
* Force a starting width
|
@@ -60,7 +72,7 @@ declare class ColumnResizing extends BasePlugin<Signature> {
|
|
60
72
|
};
|
61
73
|
headerCellModifier: (element: HTMLElement, { column }: ColumnApi) => void;
|
62
74
|
/**
|
63
|
-
* This is what ends up calling resize when the
|
75
|
+
* This is what ends up calling resize when the browser changes
|
64
76
|
* (assuming that the containing element's styles stretch to fill the space)
|
65
77
|
*
|
66
78
|
* Later, when container queries are more broadly supported, we'll want to watch
|
@@ -95,6 +107,7 @@ declare class ColumnMeta {
|
|
95
107
|
*/
|
96
108
|
isResizable?: boolean | undefined;
|
97
109
|
};
|
110
|
+
get key(): string;
|
98
111
|
get minWidth(): number;
|
99
112
|
get initialWidth(): number | undefined;
|
100
113
|
get canShrink(): boolean | 0;
|
@@ -105,6 +118,7 @@ declare class ColumnMeta {
|
|
105
118
|
set width(value: number);
|
106
119
|
get style(): Partial<Pick<CSSStyleDeclaration, "minWidth" | "width">>;
|
107
120
|
resize(delta: number): void;
|
121
|
+
save(): void;
|
108
122
|
}
|
109
123
|
/**
|
110
124
|
* @private
|
@@ -124,6 +138,7 @@ declare class TableMeta {
|
|
124
138
|
get totalInitialColumnWidths(): number;
|
125
139
|
get columnsWithoutInitialWidth(): ColumnMeta[];
|
126
140
|
get totalVisibleColumnsWidth(): number;
|
141
|
+
saveColWidths(visibleColumnMetas: ColumnMeta[]): void;
|
127
142
|
reset(): void;
|
128
143
|
onTableResize(entry: ResizeObserverEntry): void;
|
129
144
|
resizeColumn(column: Column, delta: number): void;
|
@@ -6,7 +6,7 @@ import { macroCondition, dependencySatisfies, importSync } from '@embroider/macr
|
|
6
6
|
import { tracked } from '@glimmer/tracking';
|
7
7
|
import { assert } from '@ember/debug';
|
8
8
|
import { action } from '@ember/object';
|
9
|
-
import { BasePlugin, meta, options, columns } from '../-private/base.js';
|
9
|
+
import { BasePlugin, meta, preferences, options, columns } from '../-private/base.js';
|
10
10
|
import { applyStyles } from '../-private/utils.js';
|
11
11
|
import { getAccurateClientWidth, getAccurateClientHeight, totalGapOf } from './utils.js';
|
12
12
|
|
@@ -34,7 +34,7 @@ class ColumnResizing extends BasePlugin {
|
|
34
34
|
applyStyles(element, columnMeta.style);
|
35
35
|
});
|
36
36
|
/**
|
37
|
-
* This is what ends up calling resize when the
|
37
|
+
* This is what ends up calling resize when the browser changes
|
38
38
|
* (assuming that the containing element's styles stretch to fill the space)
|
39
39
|
*
|
40
40
|
* Later, when container queries are more broadly supported, we'll want to watch
|
@@ -44,8 +44,7 @@ class ColumnResizing extends BasePlugin {
|
|
44
44
|
_defineProperty(this, "containerModifier", resizeObserver);
|
45
45
|
}
|
46
46
|
reset() {
|
47
|
-
|
48
|
-
tableMeta.reset();
|
47
|
+
preferences.forAllColumns(this.table, ColumnResizing).delete('width');
|
49
48
|
}
|
50
49
|
}
|
51
50
|
_defineProperty(ColumnResizing, "features", ['columnWidth']);
|
@@ -81,11 +80,19 @@ let ColumnMeta = (_class = class ColumnMeta {
|
|
81
80
|
...filteredOptions
|
82
81
|
};
|
83
82
|
}
|
83
|
+
get key() {
|
84
|
+
return this.column.key;
|
85
|
+
}
|
84
86
|
get minWidth() {
|
85
87
|
return this.options.minWidth;
|
86
88
|
}
|
87
89
|
get initialWidth() {
|
88
|
-
|
90
|
+
let savedWidth = preferences.forColumn(this.column, ColumnResizing).get('width');
|
91
|
+
if (!savedWidth) {
|
92
|
+
return this.options.width;
|
93
|
+
}
|
94
|
+
assert('saved width must be a string', typeof savedWidth === 'string');
|
95
|
+
return parseInt(savedWidth, 10);
|
89
96
|
}
|
90
97
|
get canShrink() {
|
91
98
|
return this.width && this.width > this.minWidth;
|
@@ -123,6 +130,9 @@ let ColumnMeta = (_class = class ColumnMeta {
|
|
123
130
|
resize(delta) {
|
124
131
|
this.tableMeta.resizeColumn(this.column, delta);
|
125
132
|
}
|
133
|
+
save() {
|
134
|
+
this.tableMeta.saveColWidths(this.tableMeta.visibleColumnMetas);
|
135
|
+
}
|
126
136
|
}, (_descriptor = _applyDecoratedDescriptor(_class.prototype, "_width", [tracked], {
|
127
137
|
configurable: true,
|
128
138
|
enumerable: true,
|
@@ -135,7 +145,7 @@ let ColumnMeta = (_class = class ColumnMeta {
|
|
135
145
|
initializer: function () {
|
136
146
|
return false;
|
137
147
|
}
|
138
|
-
}), _applyDecoratedDescriptor(_class.prototype, "options", [cached], Object.getOwnPropertyDescriptor(_class.prototype, "options"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "resize", [action], Object.getOwnPropertyDescriptor(_class.prototype, "resize"), _class.prototype)), _class);
|
148
|
+
}), _applyDecoratedDescriptor(_class.prototype, "options", [cached], Object.getOwnPropertyDescriptor(_class.prototype, "options"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "resize", [action], Object.getOwnPropertyDescriptor(_class.prototype, "resize"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "save", [action], Object.getOwnPropertyDescriptor(_class.prototype, "save"), _class.prototype)), _class);
|
139
149
|
|
140
150
|
/**
|
141
151
|
* @private
|
@@ -196,6 +206,15 @@ let TableMeta = (_class3 = (_availableColumns = /*#__PURE__*/new WeakMap(), clas
|
|
196
206
|
get totalVisibleColumnsWidth() {
|
197
207
|
return this.visibleColumnMetas.reduce((acc, column) => acc += column.width ?? 0, 0);
|
198
208
|
}
|
209
|
+
saveColWidths(visibleColumnMetas) {
|
210
|
+
let tablePrefs = this.table.preferences;
|
211
|
+
for (let column of visibleColumnMetas) {
|
212
|
+
let existing = tablePrefs.storage.forPlugin('ColumnResizing');
|
213
|
+
let columnPrefs = existing.forColumn(column.key);
|
214
|
+
columnPrefs.set('width', column.width.toString());
|
215
|
+
}
|
216
|
+
tablePrefs.persist();
|
217
|
+
}
|
199
218
|
reset() {
|
200
219
|
if (!this.scrollContainerWidth) return;
|
201
220
|
for (let column of this.visibleColumnMetas) {
|
@@ -266,7 +285,7 @@ let TableMeta = (_class3 = (_availableColumns = /*#__PURE__*/new WeakMap(), clas
|
|
266
285
|
enumerable: true,
|
267
286
|
writable: true,
|
268
287
|
initializer: null
|
269
|
-
}), _applyDecoratedDescriptor(_class3.prototype, "reset", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "reset"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "onTableResize", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "onTableResize"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "resizeColumn", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "resizeColumn"), _class3.prototype)), _class3);
|
288
|
+
}), _applyDecoratedDescriptor(_class3.prototype, "saveColWidths", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "saveColWidths"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "reset", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "reset"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "onTableResize", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "onTableResize"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "resizeColumn", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "resizeColumn"), _class3.prototype)), _class3);
|
270
289
|
|
271
290
|
/**
|
272
291
|
* @private
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-resizing/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base';\nimport { applyStyles } from '../-private/utils';\nimport { getAccurateClientHeight, getAccurateClientWidth, totalGapOf } from './utils';\n\nimport type { ColumnApi } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\nexport interface ColumnOptions {\n /**\n * Force a starting width\n * This may not be less than the minWidth\n */\n width?: number;\n /**\n * Default: 128px\n */\n minWidth?: number;\n /**\n * Flip if the column is resizable or not.\n * The default is whatever the table's plugin option is set to\n * (and then yet again true, if not set at all)\n */\n isResizable?: boolean;\n}\n\nexport interface TableOptions {\n /**\n * Toggle whether the table is able to be resized at all\n *\n * default :true\n */\n enabled?: boolean;\n\n /**\n * By default, each column's \"handle\" position is on the\n * left-hand side of the column.\n *\n * If, for style-reasons, you want to move it to the right,\n * this option should reflect that so that the calculations can be\n * updated to match the expected behavior of which column(s) grow/shrink\n *\n * Valid values are 'left' or 'right'\n */\n handlePosition?: string;\n}\n\ninterface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n Options: {\n Plugin: TableOptions;\n Column: ColumnOptions;\n };\n}\n\n/**\n * One instance of a plugin exists per table\n * but a plugin can have a \"Meta\" for each column\n */\nexport class ColumnResizing extends BasePlugin<Signature> {\n name = 'column-resizing';\n static features = ['columnWidth'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n };\n\n headerCellModifier = (element: HTMLElement, { column }: ColumnApi) => {\n let columnMeta = meta.forColumn(column, ColumnResizing);\n\n element.setAttribute('data-test-is-resizable', `${columnMeta.isResizable}`);\n\n applyStyles(element, columnMeta.style);\n };\n\n /**\n * This is what ends up calling resize when the browesr changes\n * (assuming that the containing element's styles stretch to fill the space)\n *\n * Later, when container queries are more broadly supported, we'll want to watch\n * the container instead of the window to prevent unneeded updates (as a window can change\n * size without the container changing size)\n */\n containerModifier = resizeObserver;\n\n reset() {\n let tableMeta = meta.forTable(this.table, ColumnResizing);\n\n tableMeta.reset();\n }\n}\n\nconst DEFAULT_COLUMN_OPTIONS = {\n minWidth: 128,\n};\n\nconst ALLOWED_COLUMN_OPTIONS = ['minWidth', 'width', 'isResizable'];\n\n/**\n * @private\n *\n * Contains resizable information for a particular column\n */\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n @tracked _width?: number;\n @tracked isResizing = false;\n\n get tableMeta() {\n return meta.forTable(this.column.table, ColumnResizing);\n }\n\n @cached\n get options() {\n let columnOptions = options.forColumn(this.column, ColumnResizing);\n let filteredOptions = Object.entries(columnOptions || {}).reduce((result, [k, v]) => {\n if (ALLOWED_COLUMN_OPTIONS.includes(k)) {\n result[k] = v;\n }\n\n return result;\n }, {} as Record<string, unknown>) as ColumnOptions;\n\n return {\n ...DEFAULT_COLUMN_OPTIONS,\n ...filteredOptions,\n };\n }\n\n get minWidth() {\n return this.options.minWidth;\n }\n\n get initialWidth() {\n return this.options.width;\n }\n\n get canShrink() {\n return this.width && this.width > this.minWidth;\n }\n\n get roomToShrink() {\n return this.width ? this.width - this.minWidth : 0;\n }\n\n get isResizable() {\n return this.options.isResizable ?? this.tableMeta.isResizable;\n }\n\n get hasResizeHandle() {\n let previous = columns.previous(this.column);\n\n if (!previous) return false;\n\n return this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable;\n }\n\n get width() {\n let width = this._width ?? this.initialWidth;\n\n if (!width) {\n let { defaultColumnWidth } = this.tableMeta;\n\n width = defaultColumnWidth ? Math.max(defaultColumnWidth, this.minWidth) : this.minWidth;\n }\n\n return width;\n }\n\n set width(value) {\n this._width = value;\n }\n\n get style() {\n let styles: Partial<Pick<CSSStyleDeclaration, 'width' | 'minWidth'>> = {};\n\n if (this.width) styles.width = `${this.width}px`;\n if (this.minWidth) styles.minWidth = `${this.minWidth}px`;\n\n return styles;\n }\n\n @action\n resize(delta: number) {\n this.tableMeta.resizeColumn(this.column, delta);\n }\n}\n\n/**\n * @private\n *\n * individual column width must exclude:\n * - padding\n * - margin\n * - gap (partial)\n * - any other positioning offsets\n *\n * Otherwise the table will infinitely resize itself\n */\nfunction distributeDelta(delta: number, visibleColumns: Column[]) {\n if (delta === 0) return;\n\n let metas = visibleColumns.map((column) => meta.forColumn(column, ColumnResizing));\n\n let resizableMetas = metas.filter(\n (meta) => meta.isResizable && (delta < 0 ? meta.canShrink : true)\n );\n\n let columnDelta = delta / resizableMetas.length;\n\n for (let meta of resizableMetas) {\n assert('cannot resize a column that does not have a width', meta.width);\n meta.width = Math.max(meta.width + columnDelta, meta.minWidth);\n }\n}\n\n/**\n * @private\n *\n * Contains resizable and width information regarding the table as a whole\n */\nexport class TableMeta {\n constructor(private table: Table) {}\n\n @tracked scrollContainerHeight?: number;\n @tracked scrollContainerWidth?: number;\n\n get options() {\n return options.forTable(this.table, ColumnResizing);\n }\n\n get isResizable() {\n return this.options?.enabled ?? true;\n }\n\n get defaultColumnWidth() {\n if (!this.scrollContainerWidth) return;\n\n return (\n (this.scrollContainerWidth - this.totalInitialColumnWidths) /\n this.columnsWithoutInitialWidth.length\n );\n }\n\n get #availableColumns() {\n return columns.for(this.table, ColumnResizing);\n }\n\n get visibleColumnMetas() {\n return this.#availableColumns.map((column) => meta.forColumn(column, ColumnResizing));\n }\n\n get totalInitialColumnWidths() {\n return this.visibleColumnMetas.reduce((acc, meta) => (acc += meta.initialWidth ?? 0), 0);\n }\n\n get columnsWithoutInitialWidth() {\n return this.visibleColumnMetas.filter((meta) => !meta.initialWidth);\n }\n\n get totalVisibleColumnsWidth() {\n return this.visibleColumnMetas.reduce((acc, column) => (acc += column.width ?? 0), 0);\n }\n\n @action\n reset() {\n if (!this.scrollContainerWidth) return;\n\n for (let column of this.visibleColumnMetas) {\n column._width = undefined;\n }\n }\n\n @action\n onTableResize(entry: ResizeObserverEntry) {\n assert('scroll container element must be an HTMLElement', entry.target instanceof HTMLElement);\n\n this.scrollContainerWidth = getAccurateClientWidth(entry.target);\n this.scrollContainerHeight = getAccurateClientHeight(entry.target);\n\n // TODO: extract this to card-list and remove it from the plugin\n // card-list will provide its own column-resizing plugin\n // by sub-classing this one, and defining its own way of calculating the \"diff\"\n let totalGap = totalGapOf(entry.target.querySelector('[role=\"row\"]'));\n let diff = this.scrollContainerWidth - this.totalVisibleColumnsWidth - totalGap;\n\n distributeDelta(diff, this.#availableColumns);\n }\n\n @action\n resizeColumn(column: Column, delta: number) {\n if (delta === 0) return;\n\n /**\n * When the delta is negative, we are dragging to the next\n * when positive, we are dragging to the right\n * when dragging to the right, we want to grow the column\n * when dragging to the left, we grow the \"next\" column,\n * which shrinks the column we're dragging\n *\n * This assumes the resize handle for any column is on the right-hand\n * side of the column header\n *\n * If the resize handle were on the left-hand side of the column header\n * we'd want the column.next to be column.previous\n *\n * This is CSS dependent, and can be configured in plugin\n * options\n */\n let isDraggingRight = delta > 0;\n let position = this.options?.handlePosition ?? 'left';\n\n let growingColumn: Column | null | undefined;\n\n if (position === 'right') {\n growingColumn = isDraggingRight ? columns.next(column) : column;\n } else {\n growingColumn = isDraggingRight ? columns.previous(column) : column;\n }\n\n if (!growingColumn) return;\n\n let growingColumnMeta = meta.forColumn(growingColumn, ColumnResizing);\n\n assert('cannot resize a column that does not have a width', growingColumnMeta.width);\n\n let shrinkableColumns =\n delta > 0 ? columns.after(growingColumn) : columns.before(growingColumn).reverse();\n\n let shrinkableColumnsMetas = shrinkableColumns\n .map((column) => meta.forColumn(column, ColumnResizing))\n .filter((meta) => meta.canShrink);\n\n let remainder = Math.abs(delta);\n\n while (shrinkableColumnsMetas.length > 0) {\n let shrinkingColumnMeta = shrinkableColumnsMetas.shift();\n\n assert('cannot resize a column that does not have a width', shrinkingColumnMeta?.width);\n\n let actualDelta = Math.min(remainder, shrinkingColumnMeta.roomToShrink);\n\n growingColumnMeta.width += actualDelta;\n shrinkingColumnMeta.width -= actualDelta;\n remainder -= actualDelta;\n }\n }\n}\n\n/**\n * @private\n * included in the same file as the plugin due to circular dependency\n *\n * This goes on the containing element\n *\n * @example\n * ```hbs\n * <div {{resizeObserver @table}}>\n * <table>\n * ```\n */\nfunction resizeObserver(element: HTMLElement, table: Table) {\n let observer = getObserver(element, table);\n\n observer.observe(element);\n\n return () => {\n observer.unobserve(element);\n };\n}\n\nlet CACHE = new WeakMap<HTMLElement, ResizeObserver>();\n\n/**\n * This is technically \"inefficient\" as you don't want too many resize\n * observers on a page, but tables are so big, that I don't see too many use cases\n * where you'd have 10+ tables on a page\n */\nfunction getObserver(element: HTMLElement, table: Table): ResizeObserver {\n let existing = CACHE.get(element);\n\n if (existing) return existing;\n\n existing = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (let entry of entries) {\n meta.forTable(table, ColumnResizing).onTableResize(entry);\n }\n });\n\n return existing;\n}\n"],"names":["cached","macroCondition","dependencySatisfies","importSync","ColumnResizing","BasePlugin","constructor","args","_defineProperty","column","ColumnMeta","table","TableMeta","element","columnMeta","meta","forColumn","setAttribute","isResizable","applyStyles","style","resizeObserver","reset","tableMeta","forTable","DEFAULT_COLUMN_OPTIONS","minWidth","ALLOWED_COLUMN_OPTIONS","_class","_initializerDefineProperty","_descriptor","_descriptor2","options","columnOptions","filteredOptions","Object","entries","reduce","result","k","v","includes","initialWidth","width","canShrink","roomToShrink","hasResizeHandle","previous","columns","_width","defaultColumnWidth","Math","max","value","styles","resize","delta","resizeColumn","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","getOwnPropertyDescriptor","action","distributeDelta","visibleColumns","metas","map","resizableMetas","filter","columnDelta","length","assert","_class3","_availableColumns","WeakMap","_classPrivateFieldInitSpec","get","_get_availableColumns","set","_descriptor3","_descriptor4","enabled","scrollContainerWidth","totalInitialColumnWidths","columnsWithoutInitialWidth","visibleColumnMetas","_classPrivateFieldGet","acc","totalVisibleColumnsWidth","undefined","onTableResize","entry","target","HTMLElement","getAccurateClientWidth","scrollContainerHeight","getAccurateClientHeight","totalGap","totalGapOf","querySelector","diff","isDraggingRight","position","handlePosition","growingColumn","next","growingColumnMeta","shrinkableColumns","after","before","reverse","shrinkableColumnsMetas","remainder","abs","shrinkingColumnMeta","shift","actualDelta","min","for","observer","getObserver","observe","unobserve","CACHE","existing","ResizeObserver"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-resizing/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { preferences } from '[public-plugin-types]';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base';\nimport { applyStyles } from '../-private/utils';\nimport { getAccurateClientHeight, getAccurateClientWidth, totalGapOf } from './utils';\n\nimport type { ColumnApi, PluginPreferences } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\ninterface ColumnResizePreferences extends PluginPreferences {\n columns: {\n [columnKey: string]: {\n width?: number;\n };\n };\n}\n\ndeclare module 'ember-headless-table/plugins' {\n interface Registry {\n ColumnResize?: ColumnResizePreferences;\n }\n}\n\nexport interface ColumnOptions {\n /**\n * Force a starting width\n * This may not be less than the minWidth\n */\n width?: number;\n /**\n * Default: 128px\n */\n minWidth?: number;\n /**\n * Flip if the column is resizable or not.\n * The default is whatever the table's plugin option is set to\n * (and then yet again true, if not set at all)\n */\n isResizable?: boolean;\n}\n\nexport interface TableOptions {\n /**\n * Toggle whether the table is able to be resized at all\n *\n * default :true\n */\n enabled?: boolean;\n\n /**\n * By default, each column's \"handle\" position is on the\n * left-hand side of the column.\n *\n * If, for style-reasons, you want to move it to the right,\n * this option should reflect that so that the calculations can be\n * updated to match the expected behavior of which column(s) grow/shrink\n *\n * Valid values are 'left' or 'right'\n */\n handlePosition?: string;\n}\n\ninterface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n Options: {\n Plugin: TableOptions;\n Column: ColumnOptions;\n };\n}\n\n/**\n * One instance of a plugin exists per table\n * but a plugin can have a \"Meta\" for each column\n */\nexport class ColumnResizing extends BasePlugin<Signature> {\n name = 'column-resizing';\n static features = ['columnWidth'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n };\n\n headerCellModifier = (element: HTMLElement, { column }: ColumnApi) => {\n let columnMeta = meta.forColumn(column, ColumnResizing);\n\n element.setAttribute('data-test-is-resizable', `${columnMeta.isResizable}`);\n\n applyStyles(element, columnMeta.style);\n };\n\n /**\n * This is what ends up calling resize when the browser changes\n * (assuming that the containing element's styles stretch to fill the space)\n *\n * Later, when container queries are more broadly supported, we'll want to watch\n * the container instead of the window to prevent unneeded updates (as a window can change\n * size without the container changing size)\n */\n containerModifier = resizeObserver;\n\n reset() {\n preferences.forAllColumns(this.table, ColumnResizing).delete('width');\n }\n}\n\nconst DEFAULT_COLUMN_OPTIONS = {\n minWidth: 128,\n};\n\nconst ALLOWED_COLUMN_OPTIONS = ['minWidth', 'width', 'isResizable'];\n\n/**\n * @private\n *\n * Contains resizable information for a particular column\n */\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n @tracked _width?: number;\n @tracked isResizing = false;\n\n get tableMeta() {\n return meta.forTable(this.column.table, ColumnResizing);\n }\n\n @cached\n get options() {\n let columnOptions = options.forColumn(this.column, ColumnResizing);\n let filteredOptions = Object.entries(columnOptions || {}).reduce((result, [k, v]) => {\n if (ALLOWED_COLUMN_OPTIONS.includes(k)) {\n result[k] = v;\n }\n\n return result;\n }, {} as Record<string, unknown>) as ColumnOptions;\n\n return {\n ...DEFAULT_COLUMN_OPTIONS,\n ...filteredOptions,\n };\n }\n\n get key() {\n return this.column.key;\n }\n\n get minWidth() {\n return this.options.minWidth;\n }\n\n get initialWidth() {\n let savedWidth = preferences.forColumn(this.column, ColumnResizing).get('width');\n\n if (!savedWidth) {\n return this.options.width;\n }\n\n assert('saved width must be a string', typeof savedWidth === 'string');\n\n return parseInt(savedWidth, 10);\n }\n\n get canShrink() {\n return this.width && this.width > this.minWidth;\n }\n\n get roomToShrink() {\n return this.width ? this.width - this.minWidth : 0;\n }\n\n get isResizable() {\n return this.options.isResizable ?? this.tableMeta.isResizable;\n }\n\n get hasResizeHandle() {\n let previous = columns.previous(this.column);\n\n if (!previous) return false;\n\n return this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable;\n }\n\n get width() {\n let width = this._width ?? this.initialWidth;\n\n if (!width) {\n let { defaultColumnWidth } = this.tableMeta;\n\n width = defaultColumnWidth ? Math.max(defaultColumnWidth, this.minWidth) : this.minWidth;\n }\n\n return width;\n }\n\n set width(value) {\n this._width = value;\n }\n\n get style() {\n let styles: Partial<Pick<CSSStyleDeclaration, 'width' | 'minWidth'>> = {};\n\n if (this.width) styles.width = `${this.width}px`;\n if (this.minWidth) styles.minWidth = `${this.minWidth}px`;\n\n return styles;\n }\n\n @action\n resize(delta: number) {\n this.tableMeta.resizeColumn(this.column, delta);\n }\n\n @action\n save() {\n this.tableMeta.saveColWidths(this.tableMeta.visibleColumnMetas);\n }\n}\n\n/**\n * @private\n *\n * individual column width must exclude:\n * - padding\n * - margin\n * - gap (partial)\n * - any other positioning offsets\n *\n * Otherwise the table will infinitely resize itself\n */\nfunction distributeDelta(delta: number, visibleColumns: Column[]) {\n if (delta === 0) return;\n\n let metas = visibleColumns.map((column) => meta.forColumn(column, ColumnResizing));\n\n let resizableMetas = metas.filter(\n (meta) => meta.isResizable && (delta < 0 ? meta.canShrink : true)\n );\n\n let columnDelta = delta / resizableMetas.length;\n\n for (let meta of resizableMetas) {\n assert('cannot resize a column that does not have a width', meta.width);\n meta.width = Math.max(meta.width + columnDelta, meta.minWidth);\n }\n}\n\n/**\n * @private\n *\n * Contains resizable and width information regarding the table as a whole\n */\nexport class TableMeta {\n constructor(private table: Table) {}\n\n @tracked scrollContainerHeight?: number;\n @tracked scrollContainerWidth?: number;\n\n get options() {\n return options.forTable(this.table, ColumnResizing);\n }\n\n get isResizable() {\n return this.options?.enabled ?? true;\n }\n\n get defaultColumnWidth() {\n if (!this.scrollContainerWidth) return;\n\n return (\n (this.scrollContainerWidth - this.totalInitialColumnWidths) /\n this.columnsWithoutInitialWidth.length\n );\n }\n\n get #availableColumns() {\n return columns.for(this.table, ColumnResizing);\n }\n\n get visibleColumnMetas() {\n return this.#availableColumns.map((column) => meta.forColumn(column, ColumnResizing));\n }\n\n get totalInitialColumnWidths() {\n return this.visibleColumnMetas.reduce((acc, meta) => (acc += meta.initialWidth ?? 0), 0);\n }\n\n get columnsWithoutInitialWidth() {\n return this.visibleColumnMetas.filter((meta) => !meta.initialWidth);\n }\n\n get totalVisibleColumnsWidth() {\n return this.visibleColumnMetas.reduce((acc, column) => (acc += column.width ?? 0), 0);\n }\n\n @action\n saveColWidths(visibleColumnMetas: ColumnMeta[]) {\n let tablePrefs = this.table.preferences;\n\n for (let column of visibleColumnMetas) {\n let existing = tablePrefs.storage.forPlugin('ColumnResizing');\n let columnPrefs = existing.forColumn(column.key);\n\n columnPrefs.set('width', column.width.toString());\n }\n\n tablePrefs.persist();\n }\n\n @action\n reset() {\n if (!this.scrollContainerWidth) return;\n\n for (let column of this.visibleColumnMetas) {\n column._width = undefined;\n }\n }\n\n @action\n onTableResize(entry: ResizeObserverEntry) {\n assert('scroll container element must be an HTMLElement', entry.target instanceof HTMLElement);\n\n this.scrollContainerWidth = getAccurateClientWidth(entry.target);\n this.scrollContainerHeight = getAccurateClientHeight(entry.target);\n\n // TODO: extract this to card-list and remove it from the plugin\n // card-list will provide its own column-resizing plugin\n // by sub-classing this one, and defining its own way of calculating the \"diff\"\n let totalGap = totalGapOf(entry.target.querySelector('[role=\"row\"]'));\n let diff = this.scrollContainerWidth - this.totalVisibleColumnsWidth - totalGap;\n\n distributeDelta(diff, this.#availableColumns);\n }\n\n @action\n resizeColumn(column: Column, delta: number) {\n if (delta === 0) return;\n\n /**\n * When the delta is negative, we are dragging to the next\n * when positive, we are dragging to the right\n * when dragging to the right, we want to grow the column\n * when dragging to the left, we grow the \"next\" column,\n * which shrinks the column we're dragging\n *\n * This assumes the resize handle for any column is on the right-hand\n * side of the column header\n *\n * If the resize handle were on the left-hand side of the column header\n * we'd want the column.next to be column.previous\n *\n * This is CSS dependent, and can be configured in plugin\n * options\n */\n let isDraggingRight = delta > 0;\n let position = this.options?.handlePosition ?? 'left';\n\n let growingColumn: Column | null | undefined;\n\n if (position === 'right') {\n growingColumn = isDraggingRight ? columns.next(column) : column;\n } else {\n growingColumn = isDraggingRight ? columns.previous(column) : column;\n }\n\n if (!growingColumn) return;\n\n let growingColumnMeta = meta.forColumn(growingColumn, ColumnResizing);\n\n assert('cannot resize a column that does not have a width', growingColumnMeta.width);\n\n let shrinkableColumns =\n delta > 0 ? columns.after(growingColumn) : columns.before(growingColumn).reverse();\n\n let shrinkableColumnsMetas = shrinkableColumns\n .map((column) => meta.forColumn(column, ColumnResizing))\n .filter((meta) => meta.canShrink);\n\n let remainder = Math.abs(delta);\n\n while (shrinkableColumnsMetas.length > 0) {\n let shrinkingColumnMeta = shrinkableColumnsMetas.shift();\n\n assert('cannot resize a column that does not have a width', shrinkingColumnMeta?.width);\n\n let actualDelta = Math.min(remainder, shrinkingColumnMeta.roomToShrink);\n\n growingColumnMeta.width += actualDelta;\n shrinkingColumnMeta.width -= actualDelta;\n remainder -= actualDelta;\n }\n }\n}\n\n/**\n * @private\n * included in the same file as the plugin due to circular dependency\n *\n * This goes on the containing element\n *\n * @example\n * ```hbs\n * <div {{resizeObserver @table}}>\n * <table>\n * ```\n */\nfunction resizeObserver(element: HTMLElement, table: Table) {\n let observer = getObserver(element, table);\n\n observer.observe(element);\n\n return () => {\n observer.unobserve(element);\n };\n}\n\nlet CACHE = new WeakMap<HTMLElement, ResizeObserver>();\n\n/**\n * This is technically \"inefficient\" as you don't want too many resize\n * observers on a page, but tables are so big, that I don't see too many use cases\n * where you'd have 10+ tables on a page\n */\nfunction getObserver(element: HTMLElement, table: Table): ResizeObserver {\n let existing = CACHE.get(element);\n\n if (existing) return existing;\n\n existing = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (let entry of entries) {\n meta.forTable(table, ColumnResizing).onTableResize(entry);\n }\n });\n\n return existing;\n}\n"],"names":["cached","macroCondition","dependencySatisfies","importSync","ColumnResizing","BasePlugin","constructor","args","_defineProperty","column","ColumnMeta","table","TableMeta","element","columnMeta","meta","forColumn","setAttribute","isResizable","applyStyles","style","resizeObserver","reset","preferences","forAllColumns","delete","DEFAULT_COLUMN_OPTIONS","minWidth","ALLOWED_COLUMN_OPTIONS","_class","_initializerDefineProperty","_descriptor","_descriptor2","tableMeta","forTable","options","columnOptions","filteredOptions","Object","entries","reduce","result","k","v","includes","key","initialWidth","savedWidth","get","width","assert","parseInt","canShrink","roomToShrink","hasResizeHandle","previous","columns","_width","defaultColumnWidth","Math","max","value","styles","resize","delta","resizeColumn","save","saveColWidths","visibleColumnMetas","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","getOwnPropertyDescriptor","action","distributeDelta","visibleColumns","metas","map","resizableMetas","filter","columnDelta","length","_class3","_availableColumns","WeakMap","_classPrivateFieldInitSpec","_get_availableColumns","set","_descriptor3","_descriptor4","enabled","scrollContainerWidth","totalInitialColumnWidths","columnsWithoutInitialWidth","_classPrivateFieldGet","acc","totalVisibleColumnsWidth","tablePrefs","existing","storage","forPlugin","columnPrefs","toString","persist","undefined","onTableResize","entry","target","HTMLElement","getAccurateClientWidth","scrollContainerHeight","getAccurateClientHeight","totalGap","totalGapOf","querySelector","diff","isDraggingRight","position","handlePosition","growingColumn","next","growingColumnMeta","shrinkableColumns","after","before","reverse","shrinkableColumnsMetas","remainder","abs","shrinkingColumnMeta","shift","actualDelta","min","for","observer","getObserver","observe","unobserve","CACHE","ResizeObserver"],"mappings":"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"}
|
@@ -3,7 +3,7 @@ import { _ as _defineProperty } from '../../defineProperty-4f0781e1.js';
|
|
3
3
|
import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';
|
4
4
|
import '@glimmer/tracking';
|
5
5
|
import { action } from '@ember/object';
|
6
|
-
import { BasePlugin,
|
6
|
+
import { BasePlugin, preferences, meta, options } from '../-private/base.js';
|
7
7
|
|
8
8
|
var _class;
|
9
9
|
let cached = macroCondition(dependencySatisfies('ember-source', '>= 4.1.0-alpha.0')) ? importSync('@glimmer/tracking').cached : importSync('ember-cached-decorator-polyfill').cached;
|
@@ -17,16 +17,7 @@ class ColumnVisibility extends BasePlugin {
|
|
17
17
|
});
|
18
18
|
}
|
19
19
|
reset() {
|
20
|
-
|
21
|
-
* Global preference, not scoped to plugin
|
22
|
-
*/
|
23
|
-
for (let column of this.table.columns) {
|
24
|
-
let defaultValue = options.forColumn(column, ColumnVisibility)?.isVisible;
|
25
|
-
let current = meta.forColumn(column, ColumnVisibility).isVisible;
|
26
|
-
if (defaultValue !== current) {
|
27
|
-
preferences.forColumn(column, ColumnVisibility).delete('isVisible');
|
28
|
-
}
|
29
|
-
}
|
20
|
+
preferences.forAllColumns(this.table, ColumnVisibility).delete('isVisible');
|
30
21
|
}
|
31
22
|
get columns() {
|
32
23
|
return meta.forTable(this.table, ColumnVisibility).visibleColumns;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-visibility/plugin.ts"],"sourcesContent":["import { cached } from '@glimmer/tracking';\nimport { action } from '@ember/object';\n\nimport { BasePlugin, meta, options, preferences } from '../-private/base';\n\nimport type { Plugin, PluginPreferences } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\ninterface ColumnVisibilityPreferences extends PluginPreferences {\n columns: {\n [columnKey: string]: {\n isVisible?: boolean;\n };\n };\n}\n\ndeclare module 'ember-headless-table/plugins' {\n interface Registry {\n ColumnVisibility?: ColumnVisibilityPreferences;\n }\n}\n\nexport interface Signature {\n Meta: {\n Table: TableMeta;\n Column: ColumnMeta;\n };\n Options: {\n Plugin: {\n enabled?: boolean;\n };\n Column: {\n /**\n * The default visibilty of the column, when rendered.\n * The column can still be toggled on and off.\n *\n * When interacting with preferences, the value stored in preferenced\n * will be the inverse of this value (to save space in storage).\n */\n isVisible?: boolean;\n };\n };\n}\n\nexport class ColumnVisibility extends BasePlugin<Signature> implements Plugin<Signature> {\n name = 'column-visibility';\n static features = ['columnVisibility'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n };\n\n reset() {\n
|
1
|
+
{"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-visibility/plugin.ts"],"sourcesContent":["import { cached } from '@glimmer/tracking';\nimport { action } from '@ember/object';\n\nimport { BasePlugin, meta, options, preferences } from '../-private/base';\n\nimport type { Plugin, PluginPreferences } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\ninterface ColumnVisibilityPreferences extends PluginPreferences {\n columns: {\n [columnKey: string]: {\n isVisible?: boolean;\n };\n };\n}\n\ndeclare module 'ember-headless-table/plugins' {\n interface Registry {\n ColumnVisibility?: ColumnVisibilityPreferences;\n }\n}\n\nexport interface Signature {\n Meta: {\n Table: TableMeta;\n Column: ColumnMeta;\n };\n Options: {\n Plugin: {\n enabled?: boolean;\n };\n Column: {\n /**\n * The default visibilty of the column, when rendered.\n * The column can still be toggled on and off.\n *\n * When interacting with preferences, the value stored in preferenced\n * will be the inverse of this value (to save space in storage).\n */\n isVisible?: boolean;\n };\n };\n}\n\nexport class ColumnVisibility extends BasePlugin<Signature> implements Plugin<Signature> {\n name = 'column-visibility';\n static features = ['columnVisibility'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n };\n\n reset() {\n preferences.forAllColumns(this.table, ColumnVisibility).delete('isVisible');\n }\n\n get columns() {\n return meta.forTable(this.table, ColumnVisibility).visibleColumns;\n }\n}\n\nexport class ColumnMeta<Data = unknown> {\n constructor(private column: Column<Data>) {}\n\n get isVisible(): boolean {\n let columnPreferences = preferences.forColumn(this.column, ColumnVisibility);\n let columnOptions = options.forColumn(this.column, ColumnVisibility);\n\n return Boolean(columnPreferences.get('isVisible') ?? columnOptions?.isVisible ?? true);\n }\n\n get isHidden(): boolean {\n return !this.isVisible;\n }\n\n hide = () => {\n if (!this.isVisible) return;\n\n let myPreferences = preferences.forColumn(this.column, ColumnVisibility);\n let myOptions = options.forColumn(this.column, ColumnVisibility);\n let currentSaved = myPreferences.get('isVisible');\n let willBeDefault = Boolean(currentSaved) === !myOptions?.isVisible;\n\n if (willBeDefault) {\n myPreferences.set('isVisible', false);\n // TODO: open an issue about tracked-built-ins' delete not being reactive\n // myPreferences.delete('isVisible');\n\n return;\n }\n\n myPreferences.set('isVisible', false);\n };\n\n show = () => {\n if (this.isVisible) return;\n\n let myPreferences = preferences.forColumn(this.column, ColumnVisibility);\n let myOptions = options.forColumn(this.column, ColumnVisibility);\n let currentSaved = myPreferences.get('isVisible');\n let willBeDefault = currentSaved === !myOptions?.isVisible;\n\n if (willBeDefault) {\n myPreferences.set('isVisible', true);\n // TODO: open an issue about tracked-built-ins' delete not being reactive\n // myPreferences.delete('isVisible');\n\n return;\n }\n\n myPreferences.set('isVisible', true);\n };\n\n toggle = () => {\n if (this.isVisible) {\n this.hide();\n\n return;\n }\n\n this.show();\n };\n}\n\nexport class TableMeta<Data = unknown> {\n constructor(private table: Table<Data>) {}\n\n @cached\n get visibleColumns(): Column<Data>[] {\n let allColumns = this.table.columns.values();\n\n return allColumns.filter((column) => {\n let columnMeta = meta.forColumn(column, ColumnVisibility);\n\n return columnMeta.isVisible;\n });\n }\n\n @action\n toggleColumnVisibility(column: Column<Data>) {\n let columnMeta = meta.forColumn(column, ColumnVisibility);\n\n columnMeta.toggle();\n }\n}\n"],"names":["cached","macroCondition","dependencySatisfies","importSync","ColumnVisibility","BasePlugin","constructor","args","_defineProperty","column","ColumnMeta","table","TableMeta","reset","preferences","forAllColumns","delete","columns","meta","forTable","visibleColumns","isVisible","myPreferences","forColumn","myOptions","options","currentSaved","get","willBeDefault","Boolean","set","hide","show","columnPreferences","columnOptions","isHidden","_class","allColumns","values","filter","columnMeta","toggleColumnVisibility","toggle","_applyDecoratedDescriptor","prototype","Object","getOwnPropertyDescriptor","action"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/test-support/index.ts"],"sourcesContent":["import { assert } from '@ember/debug';\nimport { find, settled, triggerEvent } from '@ember/test-helpers';\n\ninterface Selectors {\n resizeHandle?: string;\n scrollContainer?: string;\n}\n\nexport function createHelpers(selectors: Selectors) {\n async function resize(parent: Element, delta: number) {\n assert(\n `Can't use the dragLeft/dragRight/resize helpers without a \\`resizeHandle\\` selector`,\n selectors.resizeHandle\n );\n\n let element = parent.querySelector(selectors.resizeHandle);\n\n assert(`Can't resize without a handle`, element);\n\n /**\n * Start the click in exactly the middle of the element.\n * \"startX\" is the horizontal middle of \"element\"\n */\n let rect = element.getBoundingClientRect();\n let startX = (rect.right + rect.left) / 2;\n\n let targetX = startX + delta;\n\n triggerEvent(element, 'mousedown', { clientX: startX, button: 0 });\n triggerEvent(element, 'mousemove', { clientX: targetX, button: 0 });\n triggerEvent(element, 'mouseup', { clientX: targetX, button: 0 });\n\n await settled();\n\n /**\n * This has been super finnicky... :(\n */\n await new Promise((resolve) => setTimeout(resolve, 100));\n await requestAnimationFrameSettled();\n }\n\n function horizontalScrollElement() {\n assert(\n `Can't use scrollRight/swipeLeft helpers without a \\`scrollContainer\\` selector`,\n selectors.scrollContainer\n );\n\n let element = find(selectors.scrollContainer);\n\n assert(`scroll container not found`, element instanceof HTMLElement);\n\n return element;\n }\n\n async function scrollRight(distance: number) {\n let element = horizontalScrollElement();\n\n element.scrollLeft += distance;\n await requestAnimationFrameSettled();\n }\n\n async function scrollLeft(distance: number) {\n let element = horizontalScrollElement();\n\n element.scrollLeft -= distance;\n await requestAnimationFrameSettled();\n }\n\n return {\n dragLeft: (column: Element, amount: number) => resize(column, -amount),\n dragRight: (column: Element, amount: number) => resize(column, amount),\n scrollLeft,\n scrollRight,\n swipeLeft: scrollRight,\n swipeRight: scrollLeft,\n };\n}\n\nexport async function requestAnimationFrameSettled() {\n await new Promise(requestAnimationFrame);\n await settled();\n}\n"],"names":["createHelpers","selectors","resize","parent","delta","assert","resizeHandle","element","querySelector","rect","getBoundingClientRect","startX","right","left","targetX","triggerEvent","clientX","button","
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/test-support/index.ts"],"sourcesContent":["import { assert } from '@ember/debug';\nimport { find, settled, triggerEvent } from '@ember/test-helpers';\n\ninterface Selectors {\n resizeHandle?: string;\n scrollContainer?: string;\n}\n\nexport function createHelpers(selectors: Selectors) {\n async function resize(parent: Element, delta: number) {\n assert(\n `Can't use the dragLeft/dragRight/resize helpers without a \\`resizeHandle\\` selector`,\n selectors.resizeHandle\n );\n\n let element = parent.querySelector(selectors.resizeHandle);\n\n assert(`Can't resize without a handle`, element);\n\n /**\n * Start the click in exactly the middle of the element.\n * \"startX\" is the horizontal middle of \"element\"\n */\n let rect = element.getBoundingClientRect();\n let startX = (rect.right + rect.left) / 2;\n\n let targetX = startX + delta;\n\n triggerEvent(element, 'mousedown', { clientX: startX, button: 0 });\n triggerEvent(element, 'mousemove', { clientX: targetX, button: 0 });\n\n await new Promise((resolve) => setTimeout(resolve, 50));\n\n triggerEvent(element, 'mouseup', { clientX: targetX, button: 0 });\n\n await settled();\n\n /**\n * This has been super finnicky... :(\n */\n await new Promise((resolve) => setTimeout(resolve, 100));\n await requestAnimationFrameSettled();\n }\n\n function horizontalScrollElement() {\n assert(\n `Can't use scrollRight/swipeLeft helpers without a \\`scrollContainer\\` selector`,\n selectors.scrollContainer\n );\n\n let element = find(selectors.scrollContainer);\n\n assert(`scroll container not found`, element instanceof HTMLElement);\n\n return element;\n }\n\n async function scrollRight(distance: number) {\n let element = horizontalScrollElement();\n\n element.scrollLeft += distance;\n await requestAnimationFrameSettled();\n }\n\n async function scrollLeft(distance: number) {\n let element = horizontalScrollElement();\n\n element.scrollLeft -= distance;\n await requestAnimationFrameSettled();\n }\n\n return {\n dragLeft: (column: Element, amount: number) => resize(column, -amount),\n dragRight: (column: Element, amount: number) => resize(column, amount),\n scrollLeft,\n scrollRight,\n swipeLeft: scrollRight,\n swipeRight: scrollLeft,\n };\n}\n\nexport async function requestAnimationFrameSettled() {\n await new Promise(requestAnimationFrame);\n await settled();\n}\n"],"names":["createHelpers","selectors","resize","parent","delta","assert","resizeHandle","element","querySelector","rect","getBoundingClientRect","startX","right","left","targetX","triggerEvent","clientX","button","Promise","resolve","setTimeout","settled","requestAnimationFrameSettled","horizontalScrollElement","scrollContainer","find","HTMLElement","scrollRight","distance","scrollLeft","dragLeft","column","amount","dragRight","swipeLeft","swipeRight","requestAnimationFrame"],"mappings":";;;AAQO,SAASA,aAAaA,CAACC,SAAoB,EAAE;AAClD,EAAA,eAAeC,MAAMA,CAACC,MAAe,EAAEC,KAAa,EAAE;AACpDC,IAAAA,MAAM,CACH,CAAoF,mFAAA,CAAA,EACrFJ,SAAS,CAACK,YAAY,CACvB,CAAA;IAED,IAAIC,OAAO,GAAGJ,MAAM,CAACK,aAAa,CAACP,SAAS,CAACK,YAAY,CAAC,CAAA;AAE1DD,IAAAA,MAAM,CAAE,CAAA,6BAAA,CAA8B,EAAEE,OAAO,CAAC,CAAA;;AAEhD;AACJ;AACA;AACA;AACI,IAAA,IAAIE,IAAI,GAAGF,OAAO,CAACG,qBAAqB,EAAE,CAAA;IAC1C,IAAIC,MAAM,GAAG,CAACF,IAAI,CAACG,KAAK,GAAGH,IAAI,CAACI,IAAI,IAAI,CAAC,CAAA;AAEzC,IAAA,IAAIC,OAAO,GAAGH,MAAM,GAAGP,KAAK,CAAA;AAE5BW,IAAAA,YAAY,CAACR,OAAO,EAAE,WAAW,EAAE;AAAES,MAAAA,OAAO,EAAEL,MAAM;AAAEM,MAAAA,MAAM,EAAE,CAAA;AAAE,KAAC,CAAC,CAAA;AAClEF,IAAAA,YAAY,CAACR,OAAO,EAAE,WAAW,EAAE;AAAES,MAAAA,OAAO,EAAEF,OAAO;AAAEG,MAAAA,MAAM,EAAE,CAAA;AAAE,KAAC,CAAC,CAAA;IAEnE,MAAM,IAAIC,OAAO,CAAEC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAEvDJ,IAAAA,YAAY,CAACR,OAAO,EAAE,SAAS,EAAE;AAAES,MAAAA,OAAO,EAAEF,OAAO;AAAEG,MAAAA,MAAM,EAAE,CAAA;AAAE,KAAC,CAAC,CAAA;AAEjE,IAAA,MAAMI,OAAO,EAAE,CAAA;;AAEf;AACJ;AACA;IACI,MAAM,IAAIH,OAAO,CAAEC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;AACxD,IAAA,MAAMG,4BAA4B,EAAE,CAAA;AACtC,GAAA;EAEA,SAASC,uBAAuBA,GAAG;AACjClB,IAAAA,MAAM,CACH,CAA+E,8EAAA,CAAA,EAChFJ,SAAS,CAACuB,eAAe,CAC1B,CAAA;AAED,IAAA,IAAIjB,OAAO,GAAGkB,IAAI,CAACxB,SAAS,CAACuB,eAAe,CAAC,CAAA;AAE7CnB,IAAAA,MAAM,CAAE,CAA2B,0BAAA,CAAA,EAAEE,OAAO,YAAYmB,WAAW,CAAC,CAAA;AAEpE,IAAA,OAAOnB,OAAO,CAAA;AAChB,GAAA;EAEA,eAAeoB,WAAWA,CAACC,QAAgB,EAAE;IAC3C,IAAIrB,OAAO,GAAGgB,uBAAuB,EAAE,CAAA;IAEvChB,OAAO,CAACsB,UAAU,IAAID,QAAQ,CAAA;AAC9B,IAAA,MAAMN,4BAA4B,EAAE,CAAA;AACtC,GAAA;EAEA,eAAeO,UAAUA,CAACD,QAAgB,EAAE;IAC1C,IAAIrB,OAAO,GAAGgB,uBAAuB,EAAE,CAAA;IAEvChB,OAAO,CAACsB,UAAU,IAAID,QAAQ,CAAA;AAC9B,IAAA,MAAMN,4BAA4B,EAAE,CAAA;AACtC,GAAA;EAEA,OAAO;AACLQ,IAAAA,QAAQ,EAAEA,CAACC,MAAe,EAAEC,MAAc,KAAK9B,MAAM,CAAC6B,MAAM,EAAE,CAACC,MAAM,CAAC;IACtEC,SAAS,EAAEA,CAACF,MAAe,EAAEC,MAAc,KAAK9B,MAAM,CAAC6B,MAAM,EAAEC,MAAM,CAAC;IACtEH,UAAU;IACVF,WAAW;AACXO,IAAAA,SAAS,EAAEP,WAAW;AACtBQ,IAAAA,UAAU,EAAEN,UAAAA;GACb,CAAA;AACH,CAAA;AAEO,eAAeP,4BAA4BA,GAAG;AACnD,EAAA,MAAM,IAAIJ,OAAO,CAACkB,qBAAqB,CAAC,CAAA;AACxC,EAAA,MAAMf,OAAO,EAAE,CAAA;AACjB;;;;"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ember-headless-table",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.1.1",
|
4
4
|
"description": "An implementation of table behaviors for driving any table or table-like UI -- all without a UI (headless)",
|
5
5
|
"keywords": [
|
6
6
|
"ember-addon",
|
@@ -102,7 +102,7 @@
|
|
102
102
|
"@glimmer/component": "^1.1.2",
|
103
103
|
"@glimmer/tracking": "^1.1.2",
|
104
104
|
"@glint/template": "^1.0.2",
|
105
|
-
"@nullvoxpopuli/eslint-configs": "~2.
|
105
|
+
"@nullvoxpopuli/eslint-configs": "~2.3.0",
|
106
106
|
"@rollup/plugin-babel": "^6.0.0",
|
107
107
|
"@tsconfig/ember": "^2.0.0",
|
108
108
|
"@types/ember__application": "^4.0.1",
|
@@ -116,7 +116,7 @@
|
|
116
116
|
"@types/ember__utils": "^4.0.1",
|
117
117
|
"browserslist": "^4.21.4",
|
118
118
|
"caniuse-lite": "^1.0.30001420",
|
119
|
-
"concurrently": "^
|
119
|
+
"concurrently": "^8.0.0",
|
120
120
|
"ember-cached-decorator-polyfill": "^1.0.1",
|
121
121
|
"ember-source": "^4.0.0",
|
122
122
|
"ember-template-lint": "^4.0.0",
|