ember-headless-table 1.4.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -176,6 +176,7 @@ let ColumnOrder = (_class3 = class ColumnOrder {
176
176
  for (let [key, value] of map.entries()) {
177
177
  this.map.set(key, value);
178
178
  }
179
+ this.args.save?.(map);
179
180
  });
180
181
  this.args = args;
181
182
  if (args.existingOrder) {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-reordering/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { TrackedMap } from 'tracked-built-ins';\n\nimport { preferences } from '[public-plugin-types]';\n\nimport { BasePlugin, columns, meta } from '../-private/base';\n\nimport type { PluginPreferences } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\ninterface ColumnReorderingPreferences extends PluginPreferences {\n table: {\n order?: Record<string, number>;\n };\n}\n\ndeclare module 'ember-headless-table/plugins' {\n interface Registry {\n ColumnReordering?: ColumnReorderingPreferences;\n }\n}\n\nexport interface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n}\n\nexport class ColumnReordering extends BasePlugin<Signature> {\n name = 'column-reordering';\n static features = ['columnOrder'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n } as const;\n\n reset() {\n let tableMeta = meta.forTable(this.table, ColumnReordering);\n\n tableMeta.reset();\n }\n\n get columns() {\n return meta.forTable(this.table, ColumnReordering).columns;\n }\n}\n\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get #tableMeta() {\n return meta.forTable(this.column.table, ColumnReordering);\n }\n\n get position() {\n return this.#tableMeta.getPosition(this.column);\n }\n\n set position(value: number) {\n this.#tableMeta.setPosition(this.column, value);\n }\n\n get canMoveLeft() {\n return this.#tableMeta.getPosition(this.column) !== 0;\n }\n\n get canMoveRight() {\n return this.#tableMeta.getPosition(this.column) !== this.#tableMeta.columns.length - 1;\n }\n\n get cannotMoveLeft() {\n return !this.canMoveLeft;\n }\n\n get cannotMoveRight() {\n return !this.canMoveRight;\n }\n\n /**\n * Move the column one spot to the left\n */\n moveLeft = () => {\n this.#tableMeta.columnOrder.moveLeft(this.column.key);\n };\n\n /**\n * Move the column one spot to the right\n */\n moveRight = () => {\n this.#tableMeta.columnOrder.moveRight(this.column.key);\n };\n}\n\nexport class TableMeta {\n constructor(private table: Table) {}\n\n /**\n * @private\n *\n * We want to maintain the instance of this ColumnOrder class because\n * we allow the consumer of the table to swap out columns at any time.\n * When they do this, we want to maintain the order of the table, best we can.\n * This is also why the order of the columns is maintained via column key\n */\n @tracked\n columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n existingOrder: this.read(),\n });\n\n /**\n * Get the curret order/position of a column\n */\n @action\n getPosition(column: Column) {\n return this.columnOrder.get(column.key);\n }\n\n /**\n * Swap the column with the column at `newPosition`\n */\n @action\n setPosition(column: Column, newPosition: number) {\n return this.columnOrder.swapWith(column.key, newPosition);\n }\n\n /**\n * Using a `ColumnOrder` instance, set the order of all columns\n */\n setOrder = (order: ColumnOrder) => {\n this.columnOrder.setAll(order.map);\n };\n\n /**\n * Revert to default config, delete preferences,\n * and clear the columnOrder\n */\n @action\n reset() {\n preferences.forTable(this.table, ColumnReordering).delete('order');\n this.columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n });\n }\n\n /**\n * @private\n */\n @action\n save(map: Map<string, number>) {\n let order: Record<string, number> = {};\n\n for (let [key, position] of map.entries()) {\n order[key] = position;\n }\n\n preferences.forTable(this.table, ColumnReordering).set('order', order);\n }\n\n /**\n * @private\n */\n @action\n private read() {\n let order = preferences.forTable(this.table, ColumnReordering).get('order');\n\n if (!order) return;\n\n return new Map<string, number>(Object.entries(order));\n }\n\n get columns() {\n return this.columnOrder.orderedColumns;\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get availableColumns() {\n return columns.for(this.table, ColumnReordering);\n }\n}\n\n/**\n * @private\n * Used for keeping track of and updating column order\n */\nexport class ColumnOrder {\n /**\n * This map will be empty until we re-order something.\n */\n map = new TrackedMap<string, number>();\n\n constructor(\n private args: {\n columns: () => Column[];\n save?: (order: Map<string, number>) => void;\n existingOrder?: Map<string, number>;\n }\n ) {\n if (args.existingOrder) {\n this.map = new TrackedMap(args.existingOrder);\n }\n }\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the previous \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveLeft(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns.reverse()) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n setAll = (map: Map<string, number>) => {\n this.map.clear();\n\n for (let [key, value] of map.entries()) {\n this.map.set(key, value);\n }\n };\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the next \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveRight(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n /**\n * Performs a swap of the column's position with the column at position\n */\n @action\n swapWith(key: string, position: number) {\n let validPositions = [...this.orderedMap.values()];\n\n /**\n * Position to swap to must exist\n */\n if (!validPositions.includes(position)) {\n return;\n }\n\n /**\n * Where did this column `key` come from? we can find out\n * by reading orderedMap\n */\n let currentPosition = this.orderedMap.get(key);\n\n assert(\n `Pre-existing position for ${key} could not be found. Does the column exist? ` +\n `The current positions are: ` +\n [...this.orderedMap.entries()].map((entry) => entry.join(' => ')).join(', ') +\n ` and the availableColumns are: ` +\n this.args.columns().map((column) => column.key) +\n ` and current \"map\" (${this.map.size}) is: ` +\n [...this.map.entries()].map((entry) => entry.join(' => ')).join(', '),\n undefined !== currentPosition\n );\n\n /**\n * No need to change anything if the position is the same\n * This helps reduce @tracked invalidations, which in turn reduces DOM thrashing.\n */\n if (currentPosition === position) {\n return false;\n }\n\n let keyByPosition = new Map<number, string>(\n [...this.orderedMap.entries()].map((entry) => entry.reverse() as [number, string])\n );\n\n for (let [existingPosition, key] of keyByPosition.entries()) {\n if (existingPosition === position) {\n /**\n * We swap positions because the positions are not incremental\n * meaning we can have gaps, intentionally, due to hidden columns\n */\n this.map.set(key, currentPosition);\n\n break;\n }\n }\n\n /**\n * Finally, set the position for the requested column\n */\n this.map.set(key, position);\n\n /**\n * Now that we've set the value for one column,\n * we need to make sure that all columns have a recorded position.\n */\n for (let [key, position] of this.orderedMap.entries()) {\n if (this.map.has(key)) continue;\n\n this.map.set(key, position);\n }\n\n this.args.save?.(this.map);\n }\n\n @action\n get(key: string) {\n let result = this.orderedMap.get(key);\n\n assert(\n `No position found for ${key}. Is the column used within this table?`,\n /* 0 is falsey, but it's a valid value for position */\n undefined !== result\n );\n\n return result;\n }\n\n /**\n * The same as this.map, but with all the columns' information\n */\n @cached\n get orderedMap(): ReadonlyMap<string, number> {\n return orderOf(this.args.columns(), this.map);\n }\n\n @cached\n get orderedColumns(): Column[] {\n let availableColumns = this.args.columns();\n let availableByKey = availableColumns.reduce((keyMap, column) => {\n keyMap[column.key] = column;\n\n return keyMap;\n }, {} as Record<string, Column>);\n let mergedOrder = orderOf(availableColumns, this.map);\n\n let result: Column[] = Array.from({ length: availableColumns.length });\n\n for (let [key, position] of mergedOrder.entries()) {\n let column = availableByKey[key];\n\n assert(`Could not find column for pair: ${key} @ @{position}`, column);\n result[position] = column;\n }\n\n assert(\n `Generated orderedColumns' length (${result.filter(Boolean).length}) ` +\n `does not match the length of available columns (${availableColumns.length}). ` +\n `orderedColumns: ${result\n .filter(Boolean)\n .map((c) => c.key)\n .join(', ')} -- ` +\n `available columns: ${availableColumns.map((c) => c.key).join(', ')}`,\n result.filter(Boolean).length === availableColumns.length\n );\n\n return result.filter(Boolean);\n }\n}\n\n/**\n * @private\n *\n * Utility for helping determine the percieved order of a set of columns\n * given the original (default) ordering, and then user-configurations\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>\n): Map<string, number> {\n let result = new Map<string, number>();\n let availableColumns = columns.map((column) => column.key);\n let availableSet = new Set(availableColumns);\n let current = new Map<number, string>(\n [...currentOrder.entries()].map(([key, position]) => [position, key])\n );\n\n /**\n * O(n * log(n)) ?\n */\n for (let i = 0; i < Math.max(columns.length, current.size); i++) {\n let orderedKey = current.get(i);\n\n if (orderedKey) {\n /**\n * If the currentOrder specifies columns not presently available,\n * ignore them\n */\n if (availableSet.has(orderedKey)) {\n result.set(orderedKey, i);\n continue;\n }\n }\n\n let availableKey: string | undefined;\n\n while ((availableKey = availableColumns.shift())) {\n if (result.has(availableKey) || currentOrder.has(availableKey)) {\n continue;\n }\n\n break;\n }\n\n if (!availableKey) {\n /**\n * The rest of our columns likely have their order set\n */\n continue;\n }\n\n result.set(availableKey, i);\n }\n\n return result;\n}\n"],"names":["cached","macroCondition","dependencySatisfies","importSync","ColumnReordering","BasePlugin","constructor","args","_defineProperty","column","ColumnMeta","table","TableMeta","reset","tableMeta","meta","forTable","columns","_tableMeta","WeakMap","_classPrivateFieldInitSpec","get","_get_tableMeta","set","_classPrivateFieldGet","columnOrder","moveLeft","key","moveRight","position","getPosition","value","setPosition","canMoveLeft","canMoveRight","length","cannotMoveLeft","cannotMoveRight","_class","_initializerDefineProperty","_descriptor","order","setAll","map","newPosition","swapWith","preferences","delete","ColumnOrder","availableColumns","save","entries","read","Map","Object","orderedColumns","for","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","existingOrder","action","getOwnPropertyDescriptor","_class3","TrackedMap","clear","found","nextColumn","reverse","nextPosition","validPositions","orderedMap","values","includes","currentPosition","assert","entry","join","size","undefined","keyByPosition","existingPosition","has","result","orderOf","availableByKey","reduce","keyMap","mergedOrder","Array","from","filter","Boolean","c","currentOrder","availableSet","Set","current","i","Math","max","orderedKey","availableKey","shift"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-reordering/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { TrackedMap } from 'tracked-built-ins';\n\nimport { preferences } from '[public-plugin-types]';\n\nimport { BasePlugin, columns, meta } from '../-private/base';\n\nimport type { PluginPreferences } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\ninterface ColumnReorderingPreferences extends PluginPreferences {\n table: {\n order?: Record<string, number>;\n };\n}\n\ndeclare module 'ember-headless-table/plugins' {\n interface Registry {\n ColumnReordering?: ColumnReorderingPreferences;\n }\n}\n\nexport interface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n}\n\nexport class ColumnReordering extends BasePlugin<Signature> {\n name = 'column-reordering';\n static features = ['columnOrder'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n } as const;\n\n reset() {\n let tableMeta = meta.forTable(this.table, ColumnReordering);\n\n tableMeta.reset();\n }\n\n get columns() {\n return meta.forTable(this.table, ColumnReordering).columns;\n }\n}\n\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get #tableMeta() {\n return meta.forTable(this.column.table, ColumnReordering);\n }\n\n get position() {\n return this.#tableMeta.getPosition(this.column);\n }\n\n set position(value: number) {\n this.#tableMeta.setPosition(this.column, value);\n }\n\n get canMoveLeft() {\n return this.#tableMeta.getPosition(this.column) !== 0;\n }\n\n get canMoveRight() {\n return this.#tableMeta.getPosition(this.column) !== this.#tableMeta.columns.length - 1;\n }\n\n get cannotMoveLeft() {\n return !this.canMoveLeft;\n }\n\n get cannotMoveRight() {\n return !this.canMoveRight;\n }\n\n /**\n * Move the column one spot to the left\n */\n moveLeft = () => {\n this.#tableMeta.columnOrder.moveLeft(this.column.key);\n };\n\n /**\n * Move the column one spot to the right\n */\n moveRight = () => {\n this.#tableMeta.columnOrder.moveRight(this.column.key);\n };\n}\n\nexport class TableMeta {\n constructor(private table: Table) {}\n\n /**\n * @private\n *\n * We want to maintain the instance of this ColumnOrder class because\n * we allow the consumer of the table to swap out columns at any time.\n * When they do this, we want to maintain the order of the table, best we can.\n * This is also why the order of the columns is maintained via column key\n */\n @tracked\n columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n existingOrder: this.read(),\n });\n\n /**\n * Get the curret order/position of a column\n */\n @action\n getPosition(column: Column) {\n return this.columnOrder.get(column.key);\n }\n\n /**\n * Swap the column with the column at `newPosition`\n */\n @action\n setPosition(column: Column, newPosition: number) {\n return this.columnOrder.swapWith(column.key, newPosition);\n }\n\n /**\n * Using a `ColumnOrder` instance, set the order of all columns\n */\n setOrder = (order: ColumnOrder) => {\n this.columnOrder.setAll(order.map);\n };\n\n /**\n * Revert to default config, delete preferences,\n * and clear the columnOrder\n */\n @action\n reset() {\n preferences.forTable(this.table, ColumnReordering).delete('order');\n this.columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n });\n }\n\n /**\n * @private\n */\n @action\n save(map: Map<string, number>) {\n let order: Record<string, number> = {};\n\n for (let [key, position] of map.entries()) {\n order[key] = position;\n }\n\n preferences.forTable(this.table, ColumnReordering).set('order', order);\n }\n\n /**\n * @private\n */\n @action\n private read() {\n let order = preferences.forTable(this.table, ColumnReordering).get('order');\n\n if (!order) return;\n\n return new Map<string, number>(Object.entries(order));\n }\n\n get columns() {\n return this.columnOrder.orderedColumns;\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get availableColumns() {\n return columns.for(this.table, ColumnReordering);\n }\n}\n\n/**\n * @private\n * Used for keeping track of and updating column order\n */\nexport class ColumnOrder {\n /**\n * This map will be empty until we re-order something.\n */\n map = new TrackedMap<string, number>();\n\n constructor(\n private args: {\n columns: () => Column[];\n save?: (order: Map<string, number>) => void;\n existingOrder?: Map<string, number>;\n }\n ) {\n if (args.existingOrder) {\n this.map = new TrackedMap(args.existingOrder);\n }\n }\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the previous \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveLeft(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns.reverse()) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n setAll = (map: Map<string, number>) => {\n this.map.clear();\n\n for (let [key, value] of map.entries()) {\n this.map.set(key, value);\n }\n\n this.args.save?.(map);\n };\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the next \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveRight(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n /**\n * Performs a swap of the column's position with the column at position\n */\n @action\n swapWith(key: string, position: number) {\n let validPositions = [...this.orderedMap.values()];\n\n /**\n * Position to swap to must exist\n */\n if (!validPositions.includes(position)) {\n return;\n }\n\n /**\n * Where did this column `key` come from? we can find out\n * by reading orderedMap\n */\n let currentPosition = this.orderedMap.get(key);\n\n assert(\n `Pre-existing position for ${key} could not be found. Does the column exist? ` +\n `The current positions are: ` +\n [...this.orderedMap.entries()].map((entry) => entry.join(' => ')).join(', ') +\n ` and the availableColumns are: ` +\n this.args.columns().map((column) => column.key) +\n ` and current \"map\" (${this.map.size}) is: ` +\n [...this.map.entries()].map((entry) => entry.join(' => ')).join(', '),\n undefined !== currentPosition\n );\n\n /**\n * No need to change anything if the position is the same\n * This helps reduce @tracked invalidations, which in turn reduces DOM thrashing.\n */\n if (currentPosition === position) {\n return false;\n }\n\n let keyByPosition = new Map<number, string>(\n [...this.orderedMap.entries()].map((entry) => entry.reverse() as [number, string])\n );\n\n for (let [existingPosition, key] of keyByPosition.entries()) {\n if (existingPosition === position) {\n /**\n * We swap positions because the positions are not incremental\n * meaning we can have gaps, intentionally, due to hidden columns\n */\n this.map.set(key, currentPosition);\n\n break;\n }\n }\n\n /**\n * Finally, set the position for the requested column\n */\n this.map.set(key, position);\n\n /**\n * Now that we've set the value for one column,\n * we need to make sure that all columns have a recorded position.\n */\n for (let [key, position] of this.orderedMap.entries()) {\n if (this.map.has(key)) continue;\n\n this.map.set(key, position);\n }\n\n this.args.save?.(this.map);\n }\n\n @action\n get(key: string) {\n let result = this.orderedMap.get(key);\n\n assert(\n `No position found for ${key}. Is the column used within this table?`,\n /* 0 is falsey, but it's a valid value for position */\n undefined !== result\n );\n\n return result;\n }\n\n /**\n * The same as this.map, but with all the columns' information\n */\n @cached\n get orderedMap(): ReadonlyMap<string, number> {\n return orderOf(this.args.columns(), this.map);\n }\n\n @cached\n get orderedColumns(): Column[] {\n let availableColumns = this.args.columns();\n let availableByKey = availableColumns.reduce((keyMap, column) => {\n keyMap[column.key] = column;\n\n return keyMap;\n }, {} as Record<string, Column>);\n let mergedOrder = orderOf(availableColumns, this.map);\n\n let result: Column[] = Array.from({ length: availableColumns.length });\n\n for (let [key, position] of mergedOrder.entries()) {\n let column = availableByKey[key];\n\n assert(`Could not find column for pair: ${key} @ @{position}`, column);\n result[position] = column;\n }\n\n assert(\n `Generated orderedColumns' length (${result.filter(Boolean).length}) ` +\n `does not match the length of available columns (${availableColumns.length}). ` +\n `orderedColumns: ${result\n .filter(Boolean)\n .map((c) => c.key)\n .join(', ')} -- ` +\n `available columns: ${availableColumns.map((c) => c.key).join(', ')}`,\n result.filter(Boolean).length === availableColumns.length\n );\n\n return result.filter(Boolean);\n }\n}\n\n/**\n * @private\n *\n * Utility for helping determine the percieved order of a set of columns\n * given the original (default) ordering, and then user-configurations\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>\n): Map<string, number> {\n let result = new Map<string, number>();\n let availableColumns = columns.map((column) => column.key);\n let availableSet = new Set(availableColumns);\n let current = new Map<number, string>(\n [...currentOrder.entries()].map(([key, position]) => [position, key])\n );\n\n /**\n * O(n * log(n)) ?\n */\n for (let i = 0; i < Math.max(columns.length, current.size); i++) {\n let orderedKey = current.get(i);\n\n if (orderedKey) {\n /**\n * If the currentOrder specifies columns not presently available,\n * ignore them\n */\n if (availableSet.has(orderedKey)) {\n result.set(orderedKey, i);\n continue;\n }\n }\n\n let availableKey: string | undefined;\n\n while ((availableKey = availableColumns.shift())) {\n if (result.has(availableKey) || currentOrder.has(availableKey)) {\n continue;\n }\n\n break;\n }\n\n if (!availableKey) {\n /**\n * The rest of our columns likely have their order set\n */\n continue;\n }\n\n result.set(availableKey, i);\n }\n\n return result;\n}\n"],"names":["cached","macroCondition","dependencySatisfies","importSync","ColumnReordering","BasePlugin","constructor","args","_defineProperty","column","ColumnMeta","table","TableMeta","reset","tableMeta","meta","forTable","columns","_tableMeta","WeakMap","_classPrivateFieldInitSpec","get","_get_tableMeta","set","_classPrivateFieldGet","columnOrder","moveLeft","key","moveRight","position","getPosition","value","setPosition","canMoveLeft","canMoveRight","length","cannotMoveLeft","cannotMoveRight","_class","_initializerDefineProperty","_descriptor","order","setAll","map","newPosition","swapWith","preferences","delete","ColumnOrder","availableColumns","save","entries","read","Map","Object","orderedColumns","for","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","existingOrder","action","getOwnPropertyDescriptor","_class3","TrackedMap","clear","found","nextColumn","reverse","nextPosition","validPositions","orderedMap","values","includes","currentPosition","assert","entry","join","size","undefined","keyByPosition","existingPosition","has","result","orderOf","availableByKey","reduce","keyMap","mergedOrder","Array","from","filter","Boolean","c","currentOrder","availableSet","Set","current","i","Math","max","orderedKey","availableKey","shift"],"mappings":"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"}
@@ -46,11 +46,26 @@ const styleStringFor = column => {
46
46
  * have the same width
47
47
  */
48
48
  for (let [key, value] of Object.entries(columnMeta.style)) {
49
- result += `${key}:${value};`;
49
+ result += `${toStyle(key)}:${value};`;
50
50
  }
51
51
  result = ';' + result;
52
52
  return htmlSafe(result);
53
53
  };
54
54
 
55
+ /**
56
+ * the JS API for styles is camel case,
57
+ * but CSS is kebab-case. To save on complexity and
58
+ * amount of code, we have a super small conversion function
59
+ * for only the properties relevant to the sticky plugin.
60
+ */
61
+ const toStyle = key => {
62
+ switch (key) {
63
+ case 'minWidth':
64
+ return 'min-width';
65
+ default:
66
+ return key;
67
+ }
68
+ };
69
+
55
70
  export { canShrink, hasResizeHandle, isResizing, styleStringFor };
56
71
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-resizing/helpers.ts"],"sourcesContent":["import { htmlSafe } from '@ember/template';\n\nimport { meta } from '../-private/base';\nimport { ColumnResizing } from './plugin';\n\nimport type { Column } from '[public-types]';\n\n/**\n * The column actively being resized by the user.\n *\n * Note that during resizing, multiple columns are resized at once,\n * dependending on the boundaries of the resize events.\n *\n * The other columns being resized as a consequence of \"this\" column will not\n * be marked as isResizing, because this is a user-scoped question:\n * \"Is the user directly resizing this column?\"\n */\nexport const isResizing = (column: Column) => meta.forColumn(column, ColumnResizing).isResizing;\n\n/**\n * Does the column have room to shrink?\n */\nexport const canShrink = (column: Column) => meta.forColumn(column, ColumnResizing).canShrink;\n\n/**\n * Does the column have a resize handle?\n * The return value of this function can be determined by\n * - if resizing is enabled for the column\n * - if resizing is enabled for the whole table\n * - or if we're asking about the first column (resize handles may only be \"between\" columns)\n */\nexport const hasResizeHandle = (column: Column) =>\n meta.forColumn(column, ColumnResizing).hasResizeHandle;\n\n/**\n * In this plugin (by default), styles are only applied to the headers automatically.\n * in <Table> UIs, the header cells control the widths of all cells in that column.\n * There are other kinds of tabular-like markup that may want to grab the widths of columns,\n * because The Platform does not manage that automatically (like if divs and roles were used manually)\n *\n * This utility is meant to be applied to the `style` attribute of a particular td-like element.\n */\nexport const styleStringFor = <DataType = unknown>(\n column: Column<DataType>\n): ReturnType<typeof htmlSafe> => {\n let columnMeta = meta.forColumn(column, ColumnResizing);\n\n let result = '';\n\n /**\n * Styles are applied regardless of the \"table\" being resizable or not\n * because in non-<table> UIs, we need to ensure that all cells in a column\n * have the same width\n */\n for (let [key, value] of Object.entries(columnMeta.style)) {\n result += `${key}:${value};`;\n }\n\n result = ';' + result;\n\n return htmlSafe(result);\n};\n"],"names":["isResizing","column","meta","forColumn","ColumnResizing","canShrink","hasResizeHandle","styleStringFor","columnMeta","result","key","value","Object","entries","style","htmlSafe"],"mappings":";;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaA,MAAAA,UAAU,GAAIC,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACJ,WAAU;;AAE/F;AACA;AACA;AACaK,MAAAA,SAAS,GAAIJ,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACC,UAAS;;AAE7F;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,eAAe,GAAIL,MAAc,IAC5CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACE,gBAAe;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,cAAc,GACzBN,MAAwB,IACQ;EAChC,IAAIO,UAAU,GAAGN,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAAA;EAEvD,IAAIK,MAAM,GAAG,EAAE,CAAA;;AAEf;AACF;AACA;AACA;AACA;AACE,EAAA,KAAK,IAAI,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,UAAU,CAACM,KAAK,CAAC,EAAE;AACzDL,IAAAA,MAAM,IAAK,CAAA,EAAEC,GAAI,CAAA,CAAA,EAAGC,KAAM,CAAE,CAAA,CAAA,CAAA;AAC9B,GAAA;EAEAF,MAAM,GAAG,GAAG,GAAGA,MAAM,CAAA;EAErB,OAAOM,QAAQ,CAACN,MAAM,CAAC,CAAA;AACzB;;;;"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-resizing/helpers.ts"],"sourcesContent":["import { htmlSafe } from '@ember/template';\n\nimport { meta } from '../-private/base';\nimport { ColumnResizing } from './plugin';\n\nimport type { Column } from '[public-types]';\n\n/**\n * The column actively being resized by the user.\n *\n * Note that during resizing, multiple columns are resized at once,\n * dependending on the boundaries of the resize events.\n *\n * The other columns being resized as a consequence of \"this\" column will not\n * be marked as isResizing, because this is a user-scoped question:\n * \"Is the user directly resizing this column?\"\n */\nexport const isResizing = (column: Column) => meta.forColumn(column, ColumnResizing).isResizing;\n\n/**\n * Does the column have room to shrink?\n */\nexport const canShrink = (column: Column) => meta.forColumn(column, ColumnResizing).canShrink;\n\n/**\n * Does the column have a resize handle?\n * The return value of this function can be determined by\n * - if resizing is enabled for the column\n * - if resizing is enabled for the whole table\n * - or if we're asking about the first column (resize handles may only be \"between\" columns)\n */\nexport const hasResizeHandle = (column: Column) =>\n meta.forColumn(column, ColumnResizing).hasResizeHandle;\n\n/**\n * In this plugin (by default), styles are only applied to the headers automatically.\n * in <Table> UIs, the header cells control the widths of all cells in that column.\n * There are other kinds of tabular-like markup that may want to grab the widths of columns,\n * because The Platform does not manage that automatically (like if divs and roles were used manually)\n *\n * This utility is meant to be applied to the `style` attribute of a particular td-like element.\n */\nexport const styleStringFor = <DataType = unknown>(\n column: Column<DataType>\n): ReturnType<typeof htmlSafe> => {\n let columnMeta = meta.forColumn(column, ColumnResizing);\n\n let result = '';\n\n /**\n * Styles are applied regardless of the \"table\" being resizable or not\n * because in non-<table> UIs, we need to ensure that all cells in a column\n * have the same width\n */\n for (let [key, value] of Object.entries(columnMeta.style)) {\n result += `${toStyle(key)}:${value};`;\n }\n\n result = ';' + result;\n\n return htmlSafe(result);\n};\n\n/**\n * the JS API for styles is camel case,\n * but CSS is kebab-case. To save on complexity and\n * amount of code, we have a super small conversion function\n * for only the properties relevant to the sticky plugin.\n */\nconst toStyle = (key: string): string => {\n switch (key) {\n case 'minWidth':\n return 'min-width';\n default:\n return key;\n }\n};\n"],"names":["isResizing","column","meta","forColumn","ColumnResizing","canShrink","hasResizeHandle","styleStringFor","columnMeta","result","key","value","Object","entries","style","toStyle","htmlSafe"],"mappings":";;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaA,MAAAA,UAAU,GAAIC,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACJ,WAAU;;AAE/F;AACA;AACA;AACaK,MAAAA,SAAS,GAAIJ,MAAc,IAAKC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACC,UAAS;;AAE7F;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,eAAe,GAAIL,MAAc,IAC5CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACE,gBAAe;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,cAAc,GACzBN,MAAwB,IACQ;EAChC,IAAIO,UAAU,GAAGN,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAAA;EAEvD,IAAIK,MAAM,GAAG,EAAE,CAAA;;AAEf;AACF;AACA;AACA;AACA;AACE,EAAA,KAAK,IAAI,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,UAAU,CAACM,KAAK,CAAC,EAAE;IACzDL,MAAM,IAAK,GAAEM,OAAO,CAACL,GAAG,CAAE,CAAA,CAAA,EAAGC,KAAM,CAAE,CAAA,CAAA,CAAA;AACvC,GAAA;EAEAF,MAAM,GAAG,GAAG,GAAGA,MAAM,CAAA;EAErB,OAAOO,QAAQ,CAACP,MAAM,CAAC,CAAA;AACzB,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,OAAO,GAAIL,GAAW,IAAa;AACvC,EAAA,QAAQA,GAAG;AACT,IAAA,KAAK,UAAU;AACb,MAAA,OAAO,WAAW,CAAA;AACpB,IAAA;AACE,MAAA,OAAOA,GAAG,CAAA;AAAC,GAAA;AAEjB,CAAC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-headless-table",
3
- "version": "1.4.4",
3
+ "version": "2.0.0",
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",
@@ -101,7 +101,7 @@
101
101
  "@embroider/addon-dev": "^3.0.0",
102
102
  "@glimmer/component": "^1.1.2",
103
103
  "@glimmer/tracking": "^1.1.2",
104
- "@glint/template": "^0.9.4",
104
+ "@glint/template": "^1.0.2",
105
105
  "@nullvoxpopuli/eslint-configs": "~2.2.57",
106
106
  "@rollup/plugin-babel": "^6.0.0",
107
107
  "@tsconfig/ember": "^2.0.0",