@universal-ember/table 3.3.0 → 3.4.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.
Files changed (26) hide show
  1. package/declarations/plugins/column-reordering/helpers.d.ts +20 -1
  2. package/declarations/plugins/column-reordering/helpers.d.ts.map +1 -1
  3. package/declarations/plugins/column-reordering/plugin.d.ts +12 -12
  4. package/declarations/plugins/column-reordering/plugin.d.ts.map +1 -1
  5. package/declarations/plugins/column-resizing/handle.d.ts.map +1 -1
  6. package/declarations/plugins/column-resizing/helpers.d.ts +5 -0
  7. package/declarations/plugins/column-resizing/helpers.d.ts.map +1 -1
  8. package/declarations/plugins/column-resizing/plugin.d.ts.map +1 -1
  9. package/dist/plugins/column-reordering/helpers.js +33 -2
  10. package/dist/plugins/column-reordering/helpers.js.map +1 -1
  11. package/dist/plugins/column-reordering/index.js +1 -1
  12. package/dist/plugins/column-reordering/plugin.js +7 -2
  13. package/dist/plugins/column-reordering/plugin.js.map +1 -1
  14. package/dist/plugins/column-resizing/handle.js +3 -1
  15. package/dist/plugins/column-resizing/handle.js.map +1 -1
  16. package/dist/plugins/column-resizing/helpers.js +7 -1
  17. package/dist/plugins/column-resizing/helpers.js.map +1 -1
  18. package/dist/plugins/column-resizing/index.js +1 -1
  19. package/dist/plugins/column-resizing/plugin.js +11 -4
  20. package/dist/plugins/column-resizing/plugin.js.map +1 -1
  21. package/package.json +1 -1
  22. package/src/plugins/column-reordering/helpers.ts +42 -3
  23. package/src/plugins/column-reordering/plugin.ts +28 -32
  24. package/src/plugins/column-resizing/handle.ts +3 -1
  25. package/src/plugins/column-resizing/helpers.ts +7 -0
  26. package/src/plugins/column-resizing/plugin.ts +15 -7
@@ -13,7 +13,7 @@ export declare const moveRight: <DataType = unknown>(column: Column<DataType>) =
13
13
  /**
14
14
  * Override all column positions at once.
15
15
  */
16
- export declare const setColumnOrder: <DataType = unknown>(table: Table<DataType>, order: ColumnOrder) => void;
16
+ export declare const setColumnOrder: <DataType = unknown>(table: Table<DataType>, order: ColumnOrder<DataType>) => void;
17
17
  /**
18
18
  * Ask if the column cannot move to the left
19
19
  */
@@ -32,4 +32,23 @@ export declare const canMoveLeft: <DataType = unknown>(column: Column<DataType>)
32
32
  * (If your plugin doesn't expose `canMoveRight`, use `!cannotMoveRight`.)
33
33
  */
34
34
  export declare const canMoveRight: <DataType = unknown>(column: Column<DataType>) => boolean;
35
+ /**
36
+ * Get the columns in their current display order.
37
+ *
38
+ * This returns an array of columns sorted according to any reordering
39
+ * that has been applied via the ColumnReordering plugin. If no reordering
40
+ * has been applied, columns are returned in their original order.
41
+ *
42
+ * @param table - The table instance to get ordered columns from
43
+ * @returns Array of columns in their current display order
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * import { orderedColumnsFor } from '@universal-ember/table/plugins/column-reordering';
48
+ *
49
+ * const columns = orderedColumnsFor(table);
50
+ * // Use the ordered columns for rendering or other operations
51
+ * ```
52
+ */
53
+ export declare const orderedColumnsFor: <DataType = unknown>(table: Table<DataType>) => Column<DataType>[];
35
54
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-reordering/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,SAChB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,SAChB,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,OAAO,EAC/C,OAAO,KAAK,CAAC,QAAQ,CAAC,EACtB,OAAO,WAAW,SACuC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YAClB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YAClB,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YAGd,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YAGd,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-reordering/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,SAChB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,SAChB,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,OAAO,EAC/C,OAAO,KAAK,CAAC,QAAQ,CAAC,EACtB,OAAO,WAAW,CAAC,QAAQ,CAAC,SAS7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YAClB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YAClB,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YAGd,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YAGd,CAAC;AAE5D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,GAAG,OAAO,EAClD,OAAO,KAAK,CAAC,QAAQ,CAAC,KACrB,MAAM,CAAC,QAAQ,CAAC,EASlB,CAAC"}
@@ -29,10 +29,10 @@ export declare class ColumnReordering extends BasePlugin<Signature> {
29
29
  reset(): void;
30
30
  get columns(): Column<unknown>[];
31
31
  }
32
- export declare class ColumnMeta {
32
+ export declare class ColumnMeta<DataType = unknown> {
33
33
  #private;
34
34
  private column;
35
- constructor(column: Column);
35
+ constructor(column: Column<DataType>);
36
36
  get position(): number;
37
37
  set position(value: number);
38
38
  get canMoveLeft(): boolean;
@@ -48,9 +48,9 @@ export declare class ColumnMeta {
48
48
  */
49
49
  moveRight: () => void;
50
50
  }
51
- export declare class TableMeta {
51
+ export declare class TableMeta<DataType = unknown> {
52
52
  private table;
53
- constructor(table: Table);
53
+ constructor(table: Table<DataType>);
54
54
  /**
55
55
  * @private
56
56
  *
@@ -59,19 +59,19 @@ export declare class TableMeta {
59
59
  * When they do this, we want to maintain the order of the table, best we can.
60
60
  * This is also why the order of the columns is maintained via column key
61
61
  */
62
- columnOrder: ColumnOrder;
62
+ columnOrder: ColumnOrder<DataType>;
63
63
  /**
64
64
  * Get the curret order/position of a column
65
65
  */
66
- getPosition<DataType = unknown>(column: Column<DataType>): number;
66
+ getPosition(column: Column<DataType>): number;
67
67
  /**
68
68
  * Swap the column with the column at `newPosition`
69
69
  */
70
- setPosition<DataType = unknown>(column: Column<DataType>, newPosition: number): false | undefined;
70
+ setPosition(column: Column<DataType>, newPosition: number): false | undefined;
71
71
  /**
72
72
  * Using a `ColumnOrder` instance, set the order of all columns
73
73
  */
74
- setOrder: (order: ColumnOrder) => void;
74
+ setOrder: (order: ColumnOrder<DataType>) => void;
75
75
  /**
76
76
  * Revert to default config, delete preferences,
77
77
  * and clear the columnOrder
@@ -85,7 +85,7 @@ export declare class TableMeta {
85
85
  * @private
86
86
  */
87
87
  private read;
88
- get columns(): Column<unknown>[];
88
+ get columns(): Column<DataType>[];
89
89
  /**
90
90
  * @private
91
91
  * This isn't our data to expose, but it is useful to alias
@@ -97,7 +97,7 @@ export declare class TableMeta {
97
97
  * @private
98
98
  * Used for keeping track of and updating column order
99
99
  */
100
- export declare class ColumnOrder {
100
+ export declare class ColumnOrder<DataType = unknown> {
101
101
  private args;
102
102
  /**
103
103
  * This map will be empty until we re-order something.
@@ -116,7 +116,7 @@ export declare class ColumnOrder {
116
116
  * - Provide `visibleColumns` to indicate which are visible
117
117
  * - Hidden columns maintain their position when toggled
118
118
  */
119
- columns: () => Column[];
119
+ columns: () => Column<DataType>[];
120
120
  /**
121
121
  * Optional: Record of which columns are currently visible.
122
122
  * When provided, moveLeft/moveRight will skip over hidden columns.
@@ -171,7 +171,7 @@ export declare class ColumnOrder {
171
171
  * The same as this.map, but with all the columns' information
172
172
  */
173
173
  get orderedMap(): ReadonlyMap<string, number>;
174
- get orderedColumns(): Column[];
174
+ get orderedColumns(): Column<DataType>[];
175
175
  }
176
176
  /**
177
177
  * @private
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-reordering/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-reordering/plugin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-resizing/handle.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAKtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIvD;;;;;;;;;;;GAWG;AAEH,cAAM,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,QAAQ,CAAC;IACtD,IAAI,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;KAAE,CAAC;CAC1C,CAAC;IACQ,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;IAGzB,aAAa,SAAK;IAClB,aAAa,SAAK;IAClB,QAAQ,SAAK;IACb,QAAQ,SAAK;IACL,SAAS,EAAE,MAAM,CAAC;IAG1B,WAAW,SAAK;IACR,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAGxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,OAAO,UAAS;IAChB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAWrD,KAAK,aAqBH;IAEF,WAAW,GAAI,OAAO,KAAK,UAczB;IAEF,gBAAgB,GAAI,OAAO,KAAK,UAc9B;IAEF;;;;;;;;;;OAUG;IACH,WAAW,GAAI,WAAW,MAAM,IAAI,UAkBlC;IAEF,cAAc,aAYZ;IAEF,QAAQ,GAAI,OAAO,KAAK,UAItB;IAEF,gBAAgB,GAAI,OAAO,KAAK,UAmB9B;IAEF,UAAU,GAAI,OAAO,aAAa,UAoBhC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,YAA2B,CAAC"}
1
+ {"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-resizing/handle.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAKtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIvD;;;;;;;;;;;GAWG;AAEH,cAAM,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,QAAQ,CAAC;IACtD,IAAI,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;KAAE,CAAC;CAC1C,CAAC;IACQ,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;IAGzB,aAAa,SAAK;IAClB,aAAa,SAAK;IAClB,QAAQ,SAAK;IACb,QAAQ,SAAK;IACL,SAAS,EAAE,MAAM,CAAC;IAG1B,WAAW,SAAK;IACR,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAGxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,OAAO,UAAS;IAChB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAWrD,KAAK,aAuBH;IAEF,WAAW,GAAI,OAAO,KAAK,UAczB;IAEF,gBAAgB,GAAI,OAAO,KAAK,UAc9B;IAEF;;;;;;;;;;OAUG;IACH,WAAW,GAAI,WAAW,MAAM,IAAI,UAkBlC;IAEF,cAAc,aAYZ;IAEF,QAAQ,GAAI,OAAO,KAAK,UAItB;IAEF,gBAAgB,GAAI,OAAO,KAAK,UAmB9B;IAEF,UAAU,GAAI,OAAO,aAAa,UAoBhC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,YAA2B,CAAC"}
@@ -1,5 +1,10 @@
1
1
  import { htmlSafe } from '@ember/template';
2
2
  import type { Column } from '../../index.ts';
3
+ /**
4
+ * Is the column resizable?
5
+ * This checks if resizing is enabled for this specific column,
6
+ */
7
+ export declare const isResizable: <DataType = unknown>(column: Column<DataType>) => boolean;
3
8
  /**
4
9
  * The column actively being resized by the user.
5
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-resizing/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAK3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YACpB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,gBACpB,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YACpB,CAAC;AAEzD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,OAAO,EAC/C,QAAQ,MAAM,CAAC,QAAQ,CAAC,KACvB,UAAU,CAAC,OAAO,QAAQ,CAiB5B,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-resizing/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAK3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YACpB,CAAC;AAErD;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YACpB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,gBACpB,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YACpB,CAAC;AAEzD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,OAAO,EAC/C,QAAQ,MAAM,CAAC,QAAQ,CAAC,KACvB,UAAU,CAAC,OAAO,QAAQ,CAiB5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-resizing/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/column-resizing/plugin.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,12 @@ const moveRight = column => meta.forColumn(column, ColumnReordering).moveRight()
16
16
  /**
17
17
  * Override all column positions at once.
18
18
  */
19
- const setColumnOrder = (table, order) => meta.forTable(table, ColumnReordering).setOrder(order);
19
+ const setColumnOrder = (table, order) => {
20
+ // Note: The meta.forTable API doesn't preserve the DataType generic from the table parameter.
21
+ // We use a type assertion here to match the expected types.
22
+ const tableMeta = meta.forTable(table, ColumnReordering);
23
+ return tableMeta.setOrder(order);
24
+ };
20
25
 
21
26
  /**
22
27
  * Ask if the column cannot move to the left
@@ -46,5 +51,31 @@ const canMoveRight = column =>
46
51
  // meta.forColumn(column, ColumnReordering).canMoveRight
47
52
  !meta.forColumn(column, ColumnReordering).cannotMoveRight;
48
53
 
49
- export { canMoveLeft, canMoveRight, cannotMoveLeft, cannotMoveRight, moveLeft, moveRight, setColumnOrder };
54
+ /**
55
+ * Get the columns in their current display order.
56
+ *
57
+ * This returns an array of columns sorted according to any reordering
58
+ * that has been applied via the ColumnReordering plugin. If no reordering
59
+ * has been applied, columns are returned in their original order.
60
+ *
61
+ * @param table - The table instance to get ordered columns from
62
+ * @returns Array of columns in their current display order
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * import { orderedColumnsFor } from '@universal-ember/table/plugins/column-reordering';
67
+ *
68
+ * const columns = orderedColumnsFor(table);
69
+ * // Use the ordered columns for rendering or other operations
70
+ * ```
71
+ */
72
+ const orderedColumnsFor = table => {
73
+ // Note: The meta.forTable API doesn't preserve the DataType generic from the table parameter.
74
+ // This is a limitation of the current plugin meta system architecture.
75
+ // We use a type assertion here because we know the columns come from the same table.
76
+ const tableMeta = meta.forTable(table, ColumnReordering);
77
+ return tableMeta.columnOrder.orderedColumns;
78
+ };
79
+
80
+ export { canMoveLeft, canMoveRight, cannotMoveLeft, cannotMoveRight, moveLeft, moveRight, orderedColumnsFor, setColumnOrder };
50
81
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-reordering/helpers.ts"],"sourcesContent":["import { meta } from '../-private/base.ts';\nimport { ColumnReordering } from './plugin.ts';\n\nimport type { ColumnOrder } from './plugin.ts';\nimport type { Column, Table } from '../../index.ts';\n\n/**\n * Move the column one position to the left.\n * If the column is first, nothing will happen.\n */\nexport const moveLeft = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnReordering).moveLeft();\n\n/**\n * Move the column one position to the right.\n * If the column is last, nothing will happen.\n */\nexport const moveRight = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnReordering).moveRight();\n\n/**\n * Override all column positions at once.\n */\nexport const setColumnOrder = <DataType = unknown>(\n table: Table<DataType>,\n order: ColumnOrder,\n) => meta.forTable(table, ColumnReordering).setOrder(order);\n\n/**\n * Ask if the column cannot move to the left\n */\nexport const cannotMoveLeft = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column cannot move to the right\n */\nexport const cannotMoveRight = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnReordering).cannotMoveRight;\n\n/**\n * Ask if the column can move to the left\n * (If your plugin doesn't expose `canMoveLeft`, use `!cannotMoveLeft`.)\n */\nexport const canMoveLeft = <DataType = unknown>(column: Column<DataType>) =>\n // Prefer this if available:\n // meta.forColumn(column, ColumnReordering).canMoveLeft\n !meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column can move to the right\n * (If your plugin doesn't expose `canMoveRight`, use `!cannotMoveRight`.)\n */\nexport const canMoveRight = <DataType = unknown>(column: Column<DataType>) =>\n // Prefer this if available:\n // meta.forColumn(column, ColumnReordering).canMoveRight\n !meta.forColumn(column, ColumnReordering).cannotMoveRight;\n"],"names":["moveLeft","column","meta","forColumn","ColumnReordering","moveRight","setColumnOrder","table","order","forTable","setOrder","cannotMoveLeft","cannotMoveRight","canMoveLeft","canMoveRight"],"mappings":";;;AAMA;AACA;AACA;AACA;MACaA,QAAQ,GAAwBC,MAAwB,IACnEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACJ,QAAQ;;AAEnD;AACA;AACA;AACA;MACaK,SAAS,GAAwBJ,MAAwB,IACpEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACC,SAAS;;AAEpD;AACA;AACA;AACO,MAAMC,cAAc,GAAGA,CAC5BC,KAAsB,EACtBC,KAAkB,KACfN,IAAI,CAACO,QAAQ,CAACF,KAAK,EAAEH,gBAAgB,CAAC,CAACM,QAAQ,CAACF,KAAK;;AAE1D;AACA;AACA;AACaG,MAAAA,cAAc,GAAwBV,MAAwB,IACzEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACO;;AAE3C;AACA;AACA;AACaC,MAAAA,eAAe,GAAwBX,MAAwB,IAC1EC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ;;AAE3C;AACA;AACA;AACA;AACO,MAAMC,WAAW,GAAwBZ,MAAwB;AACtE;AACA;AACA,CAACC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACO;;AAE5C;AACA;AACA;AACA;AACO,MAAMG,YAAY,GAAwBb,MAAwB;AACvE;AACA;AACA,CAACC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ;;;;"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-reordering/helpers.ts"],"sourcesContent":["import { meta } from '../-private/base.ts';\nimport { ColumnReordering } from './plugin.ts';\n\nimport type { ColumnOrder, TableMeta } from './plugin.ts';\nimport type { Column, Table } from '../../index.ts';\n\n/**\n * Move the column one position to the left.\n * If the column is first, nothing will happen.\n */\nexport const moveLeft = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnReordering).moveLeft();\n\n/**\n * Move the column one position to the right.\n * If the column is last, nothing will happen.\n */\nexport const moveRight = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnReordering).moveRight();\n\n/**\n * Override all column positions at once.\n */\nexport const setColumnOrder = <DataType = unknown>(\n table: Table<DataType>,\n order: ColumnOrder<DataType>,\n) => {\n // Note: The meta.forTable API doesn't preserve the DataType generic from the table parameter.\n // We use a type assertion here to match the expected types.\n const tableMeta = meta.forTable(\n table,\n ColumnReordering,\n ) as TableMeta<DataType>;\n return tableMeta.setOrder(order);\n};\n\n/**\n * Ask if the column cannot move to the left\n */\nexport const cannotMoveLeft = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column cannot move to the right\n */\nexport const cannotMoveRight = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnReordering).cannotMoveRight;\n\n/**\n * Ask if the column can move to the left\n * (If your plugin doesn't expose `canMoveLeft`, use `!cannotMoveLeft`.)\n */\nexport const canMoveLeft = <DataType = unknown>(column: Column<DataType>) =>\n // Prefer this if available:\n // meta.forColumn(column, ColumnReordering).canMoveLeft\n !meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column can move to the right\n * (If your plugin doesn't expose `canMoveRight`, use `!cannotMoveRight`.)\n */\nexport const canMoveRight = <DataType = unknown>(column: Column<DataType>) =>\n // Prefer this if available:\n // meta.forColumn(column, ColumnReordering).canMoveRight\n !meta.forColumn(column, ColumnReordering).cannotMoveRight;\n\n/**\n * Get the columns in their current display order.\n *\n * This returns an array of columns sorted according to any reordering\n * that has been applied via the ColumnReordering plugin. If no reordering\n * has been applied, columns are returned in their original order.\n *\n * @param table - The table instance to get ordered columns from\n * @returns Array of columns in their current display order\n *\n * @example\n * ```ts\n * import { orderedColumnsFor } from '@universal-ember/table/plugins/column-reordering';\n *\n * const columns = orderedColumnsFor(table);\n * // Use the ordered columns for rendering or other operations\n * ```\n */\nexport const orderedColumnsFor = <DataType = unknown>(\n table: Table<DataType>,\n): Column<DataType>[] => {\n // Note: The meta.forTable API doesn't preserve the DataType generic from the table parameter.\n // This is a limitation of the current plugin meta system architecture.\n // We use a type assertion here because we know the columns come from the same table.\n const tableMeta = meta.forTable(\n table,\n ColumnReordering,\n ) as TableMeta<DataType>;\n return tableMeta.columnOrder.orderedColumns;\n};\n"],"names":["moveLeft","column","meta","forColumn","ColumnReordering","moveRight","setColumnOrder","table","order","tableMeta","forTable","setOrder","cannotMoveLeft","cannotMoveRight","canMoveLeft","canMoveRight","orderedColumnsFor","columnOrder","orderedColumns"],"mappings":";;;AAMA;AACA;AACA;AACA;MACaA,QAAQ,GAAwBC,MAAwB,IACnEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACJ,QAAQ;;AAEnD;AACA;AACA;AACA;MACaK,SAAS,GAAwBJ,MAAwB,IACpEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACC,SAAS;;AAEpD;AACA;AACA;MACaC,cAAc,GAAGA,CAC5BC,KAAsB,EACtBC,KAA4B,KACzB;AACH;AACA;EACA,MAAMC,SAAS,GAAGP,IAAI,CAACQ,QAAQ,CAC7BH,KAAK,EACLH,gBACF,CAAwB;AACxB,EAAA,OAAOK,SAAS,CAACE,QAAQ,CAACH,KAAK,CAAC;AAClC;;AAEA;AACA;AACA;AACaI,MAAAA,cAAc,GAAwBX,MAAwB,IACzEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ;;AAE3C;AACA;AACA;AACaC,MAAAA,eAAe,GAAwBZ,MAAwB,IAC1EC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACS;;AAE3C;AACA;AACA;AACA;AACO,MAAMC,WAAW,GAAwBb,MAAwB;AACtE;AACA;AACA,CAACC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ;;AAE5C;AACA;AACA;AACA;AACO,MAAMG,YAAY,GAAwBd,MAAwB;AACvE;AACA;AACA,CAACC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACS;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaG,MAAAA,iBAAiB,GAC5BT,KAAsB,IACC;AACvB;AACA;AACA;EACA,MAAME,SAAS,GAAGP,IAAI,CAACQ,QAAQ,CAC7BH,KAAK,EACLH,gBACF,CAAwB;AACxB,EAAA,OAAOK,SAAS,CAACQ,WAAW,CAACC,cAAc;AAC7C;;;;"}
@@ -1,3 +1,3 @@
1
- export { canMoveLeft, canMoveRight, cannotMoveLeft, cannotMoveRight, moveLeft, moveRight, setColumnOrder } from './helpers.js';
1
+ export { canMoveLeft, canMoveRight, cannotMoveLeft, cannotMoveRight, moveLeft, moveRight, orderedColumnsFor, setColumnOrder } from './helpers.js';
2
2
  export { ColumnOrder, ColumnReordering, ColumnReordering as Plugin, orderOf } from './plugin.js';
3
3
  //# sourceMappingURL=index.js.map
@@ -354,10 +354,15 @@ let ColumnOrder = (_class2 = class ColumnOrder {
354
354
  });
355
355
  for (const [key, position] of mergedOrder.entries()) {
356
356
  const column = columnsByKey[key];
357
- assert(`Could not find column for pair: ${key} @ @{position}`, column);
357
+
358
+ // Skip columns that no longer exist (they've been removed from the columns array)
359
+ if (!column) {
360
+ continue;
361
+ }
358
362
  result[position] = column;
359
363
  }
360
- assert(`Generated orderedColumns' length (${result.filter(Boolean).length}) ` + `does not match the length of all columns (${allColumns.length}). ` + `orderedColumns: ${result.filter(Boolean).map(c => c.key).join(', ')} -- ` + `all columns: ${allColumns.map(c => c.key).join(', ')}`, result.filter(Boolean).length === allColumns.length);
364
+
365
+ // Filter out undefined entries (from removed columns or gaps in positions)
361
366
  return result.filter(Boolean);
362
367
  }
363
368
  }, _applyDecoratedDescriptor(_class2.prototype, "moveLeft", [action], Object.getOwnPropertyDescriptor(_class2.prototype, "moveLeft"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "moveRight", [action], Object.getOwnPropertyDescriptor(_class2.prototype, "moveRight"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "swapWith", [action], Object.getOwnPropertyDescriptor(_class2.prototype, "swapWith"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "get", [action], Object.getOwnPropertyDescriptor(_class2.prototype, "get"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "orderedMap", [cached], Object.getOwnPropertyDescriptor(_class2.prototype, "orderedMap"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "orderedColumns", [cached], Object.getOwnPropertyDescriptor(_class2.prototype, "orderedColumns"), _class2.prototype), _class2);
@@ -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 '../../plugins/index.ts';\n\nimport { BasePlugin, columns, meta } from '../-private/base.ts';\n\nimport type { PluginPreferences } from '../../plugins/index.ts';\nimport type { Column, Table } from '../../index.ts';\n\ninterface ColumnReorderingPreferences extends PluginPreferences {\n table: {\n order?: Record<string, number>;\n };\n}\n\ndeclare module '@universal-ember/table/plugins' {\n interface Registry {\n ColumnReordering?: ColumnReorderingPreferences;\n 'column-reordering'?: 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 const 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 // Swaps this column with the column in the new position\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 (\n this.#tableMeta.getPosition(this.column) !==\n this.#tableMeta.columns.length - 1\n );\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.allColumns,\n visibleColumns: () => this.visibleColumns,\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<DataType = unknown>(column: Column<DataType>) {\n return this.columnOrder.get(column.key);\n }\n\n /**\n * Swap the column with the column at `newPosition`\n */\n @action\n setPosition<DataType = unknown>(\n column: Column<DataType>,\n newPosition: number,\n ) {\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.allColumns,\n visibleColumns: () => this.visibleColumns,\n save: this.save,\n });\n }\n\n /**\n * @private\n */\n @action\n save(map: Map<string, number>) {\n const order: Record<string, number> = {};\n\n for (const [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 const order = preferences\n .forTable(this.table, ColumnReordering)\n .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.filter(\n (column) => this.visibleColumns[column.key],\n );\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get visibleColumns() {\n return columns\n .for(this.table, ColumnReordering)\n .reduce<Record<string, boolean>>((acc, column) => {\n acc[column.key] = true;\n\n return acc;\n }, {});\n }\n\n private get allColumns() {\n return this.table.columns.values();\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 /**\n * All columns to track in the ordering.\n *\n * Backwards compatible usage (without ColumnVisibility):\n * - Pass only the columns you want to display\n * - All columns are treated as visible\n *\n * New usage (with ColumnVisibility):\n * - Pass ALL columns (including hidden ones)\n * - Provide `visibleColumns` to indicate which are visible\n * - Hidden columns maintain their position when toggled\n */\n columns: () => Column[];\n /**\n * Optional: Record of which columns are currently visible.\n * When provided, moveLeft/moveRight will skip over hidden columns.\n * When omitted, all columns from `columns` are treated as visible (backwards compatible).\n *\n * Example when using ColumnVisibility:\n * ```ts\n * visibleColumns: () => columns.reduce((acc, col) => {\n * acc[col.key] = meta(col).ColumnVisibility?.isVisible !== false;\n * return acc;\n * }, {})\n * ```\n */\n visibleColumns?: () => Record<string, boolean>;\n /**\n * Optional: Callback to persist the column order (e.g., to localStorage).\n */\n save?: (order: Map<string, number>) => void;\n /**\n * Optional: Previously saved column order to restore.\n */\n existingOrder?: Map<string, number>;\n },\n ) {\n let allColumns = this.args.columns();\n\n if (args.existingOrder) {\n let newOrder = new Map(args.existingOrder.entries());\n\n addMissingColumnsToMap(allColumns, newOrder);\n removeExtraColumnsFromMap(allColumns, newOrder);\n this.map = new TrackedMap(newOrder);\n } else {\n this.map = new TrackedMap(allColumns.map((column, i) => [column.key, i]));\n }\n }\n\n /**\n * @private\n * Helper to get visible columns, defaulting to all columns if not specified\n */\n private getVisibleColumns(): Record<string, boolean> {\n if (this.args.visibleColumns) {\n return this.args.visibleColumns();\n }\n\n // Default: all columns are visible\n return this.args.columns().reduce(\n (acc, col) => {\n acc[col.key] = true;\n return acc;\n },\n {} as Record<string, boolean>,\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 const orderedColumns = this.orderedColumns;\n if (this.map.get(key) === 0) {\n return;\n }\n\n let found = false;\n\n for (const column of orderedColumns.reverse()) {\n if (found) {\n // Shift moved column left\n let currentPosition = this.map.get(key);\n\n assert('current key must exist in map', currentPosition !== undefined);\n this.map.set(key, currentPosition - 1);\n\n // Shift displayed column right\n let displayedColumnPosition = this.map.get(column.key);\n\n assert(\n 'displaced key must exist in map',\n displayedColumnPosition !== undefined,\n );\n this.map.set(column.key, displayedColumnPosition + 1);\n\n if (this.getVisibleColumns()[column.key]) {\n break;\n }\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n this.args.save?.(this.map);\n }\n\n setAll = (map: Map<string, number>) => {\n let allColumns = this.args.columns();\n\n addMissingColumnsToMap(allColumns, map);\n removeExtraColumnsFromMap(allColumns, map);\n\n this.map.clear();\n\n for (const [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 const orderedColumns = this.orderedColumns;\n let found = false;\n\n for (const column of orderedColumns) {\n if (found) {\n // Shift moved column right\n let currentPosition = this.map.get(key);\n\n assert('current key must exist in map', currentPosition !== undefined);\n this.map.set(key, currentPosition + 1);\n\n // Shift displaced column left\n let displayedColumnPosition = this.map.get(column.key);\n\n assert(\n 'displaced key must exist in map',\n displayedColumnPosition !== undefined,\n );\n this.map.set(column.key, displayedColumnPosition - 1);\n\n if (this.getVisibleColumns()[column.key]) {\n break;\n }\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n this.args.save?.(this.map);\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 const 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 const 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()]\n .map((entry) => entry.join(' => '))\n .join(', ') +\n ` and the visibleColumns are: ` +\n Object.keys(this.getVisibleColumns()).join(', ') +\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 const keyByPosition = new Map<number, string>(\n [...this.orderedMap.entries()].map(\n (entry) => entry.reverse() as [number, string],\n ),\n );\n\n for (const [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 (const [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 const 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 const allColumns = this.args.columns();\n const columnsByKey = allColumns.reduce(\n (keyMap, column) => {\n keyMap[column.key] = column;\n return keyMap;\n },\n {} as Record<string, Column>,\n );\n const mergedOrder = orderOf(allColumns, this.map);\n\n const result: Column[] = Array.from({ length: allColumns.length });\n\n for (const [key, position] of mergedOrder.entries()) {\n const column = columnsByKey[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 all columns (${allColumns.length}). ` +\n `orderedColumns: ${result\n .filter(Boolean)\n .map((c) => c.key)\n .join(', ')} -- ` +\n `all columns: ${allColumns.map((c) => c.key).join(', ')}`,\n result.filter(Boolean).length === allColumns.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 *\n * This function adds missing columns but preserves extra columns in the map\n * (they might be hidden, not deleted).\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>,\n): Map<string, number> {\n // Create a copy to avoid mutating the input\n let workingOrder = new Map(currentOrder);\n\n // Add any missing columns to the end\n addMissingColumnsToMap(columns, workingOrder);\n\n // DON'T remove extra columns - they might be hidden columns, not deleted ones\n // The ColumnOrder constructor handles removal of truly deleted columns\n\n // Ensure positions are consecutive and zero based\n let inOrder = Array.from(workingOrder.entries()).sort(\n ([_keyA, positionA], [_keyB, positionB]) => positionA - positionB,\n );\n\n let orderedColumns = new Map<string, number>();\n\n let position = 0;\n\n for (let [key] of inOrder) {\n orderedColumns.set(key, position++);\n }\n\n return orderedColumns;\n}\n\n/**\n * @private\n *\n * Utility to add any missing columns to the position map. By calling this whenever\n * data is passed in to the system we can simplify the code within the system because\n * we know we are dealing with a full set of positions.\n *\n * @param columns - A list of all columns available to the table\n * @param map - A Map of `key` to position (as a zero based integer)\n */\nfunction addMissingColumnsToMap(\n columns: { key: string }[],\n map: Map<string, number>,\n): void {\n if (map.size < columns.length) {\n let maxAssignedColumn = Math.max(...map.values());\n\n for (let column of columns) {\n if (map.get(column.key) === undefined) {\n map.set(column.key, ++maxAssignedColumn);\n }\n }\n }\n}\n\n/**\n * @private\n *\n * Utility to remove any extra columns from the position map. By calling this whenever\n * data is passed in to the system we can simplify the code within the system because\n * we know we are dealing with a full set of positions.\n *\n * @param columns - A list of all columns available to the table\n * @param map - A Map of `key` to position (as a zero based integer)\n */\nfunction removeExtraColumnsFromMap(\n columns: { key: string }[],\n map: Map<string, number>,\n): void {\n let columnsLookup = columns.reduce(\n function (acc, { key }) {\n acc[key] = true;\n\n return acc;\n },\n {} as Record<string, boolean>,\n );\n\n for (let key of map.keys()) {\n if (!columnsLookup[key]) {\n map.delete(key);\n }\n }\n}\n"],"names":["ColumnReordering","BasePlugin","constructor","args","_defineProperty","column","ColumnMeta","table","TableMeta","reset","tableMeta","meta","forTable","columns","_ColumnMeta_brand","WeakSet","_classPrivateMethodInitSpec","_classPrivateGetter","_get_tableMeta","columnOrder","moveLeft","key","moveRight","position","getPosition","value","setPosition","canMoveLeft","canMoveRight","length","cannotMoveLeft","cannotMoveRight","_this","_class","_initializerDefineProperty","_descriptor","order","setAll","map","get","newPosition","swapWith","preferences","delete","ColumnOrder","allColumns","visibleColumns","save","entries","set","read","Map","Object","orderedColumns","filter","for","reduce","acc","values","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","existingOrder","action","getOwnPropertyDescriptor","_class2","TrackedMap","addMissingColumnsToMap","removeExtraColumnsFromMap","clear","newOrder","i","getVisibleColumns","col","found","reverse","currentPosition","assert","undefined","displayedColumnPosition","validPositions","orderedMap","includes","entry","join","keys","size","keyByPosition","existingPosition","has","result","orderOf","columnsByKey","keyMap","mergedOrder","Array","from","Boolean","c","cached","currentOrder","workingOrder","inOrder","sort","_keyA","positionA","_keyB","positionB","maxAssignedColumn","Math","max","columnsLookup"],"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 '../../plugins/index.ts';\n\nimport { BasePlugin, columns, meta } from '../-private/base.ts';\n\nimport type { PluginPreferences } from '../../plugins/index.ts';\nimport type { Column, Table } from '../../index.ts';\n\ninterface ColumnReorderingPreferences extends PluginPreferences {\n table: {\n order?: Record<string, number>;\n };\n}\n\ndeclare module '@universal-ember/table/plugins' {\n interface Registry {\n ColumnReordering?: ColumnReorderingPreferences;\n 'column-reordering'?: 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 const 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<DataType = unknown> {\n constructor(private column: Column<DataType>) {}\n\n get #tableMeta(): TableMeta<DataType> {\n return meta.forTable(\n this.column.table,\n ColumnReordering,\n ) as TableMeta<DataType>;\n }\n\n get position() {\n return this.#tableMeta.getPosition(this.column);\n }\n\n // Swaps this column with the column in the new position\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 (\n this.#tableMeta.getPosition(this.column) !==\n this.#tableMeta.columns.length - 1\n );\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<DataType = unknown> {\n constructor(private table: Table<DataType>) {}\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<DataType>({\n columns: () => this.allColumns,\n visibleColumns: () => this.visibleColumns,\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<DataType>) {\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<DataType>, 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<DataType>) => {\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<DataType>({\n columns: () => this.allColumns,\n visibleColumns: () => this.visibleColumns,\n save: this.save,\n });\n }\n\n /**\n * @private\n */\n @action\n save(map: Map<string, number>) {\n const order: Record<string, number> = {};\n\n for (const [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 const order = preferences\n .forTable(this.table, ColumnReordering)\n .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.filter(\n (column) => this.visibleColumns[column.key],\n );\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get visibleColumns() {\n return columns\n .for(this.table, ColumnReordering)\n .reduce<Record<string, boolean>>((acc, column) => {\n acc[column.key] = true;\n\n return acc;\n }, {});\n }\n\n private get allColumns() {\n return this.table.columns.values();\n }\n}\n\n/**\n * @private\n * Used for keeping track of and updating column order\n */\nexport class ColumnOrder<DataType = unknown> {\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 /**\n * All columns to track in the ordering.\n *\n * Backwards compatible usage (without ColumnVisibility):\n * - Pass only the columns you want to display\n * - All columns are treated as visible\n *\n * New usage (with ColumnVisibility):\n * - Pass ALL columns (including hidden ones)\n * - Provide `visibleColumns` to indicate which are visible\n * - Hidden columns maintain their position when toggled\n */\n columns: () => Column<DataType>[];\n /**\n * Optional: Record of which columns are currently visible.\n * When provided, moveLeft/moveRight will skip over hidden columns.\n * When omitted, all columns from `columns` are treated as visible (backwards compatible).\n *\n * Example when using ColumnVisibility:\n * ```ts\n * visibleColumns: () => columns.reduce((acc, col) => {\n * acc[col.key] = meta(col).ColumnVisibility?.isVisible !== false;\n * return acc;\n * }, {})\n * ```\n */\n visibleColumns?: () => Record<string, boolean>;\n /**\n * Optional: Callback to persist the column order (e.g., to localStorage).\n */\n save?: (order: Map<string, number>) => void;\n /**\n * Optional: Previously saved column order to restore.\n */\n existingOrder?: Map<string, number>;\n },\n ) {\n let allColumns = this.args.columns();\n\n if (args.existingOrder) {\n let newOrder = new Map(args.existingOrder.entries());\n\n addMissingColumnsToMap(allColumns, newOrder);\n removeExtraColumnsFromMap(allColumns, newOrder);\n this.map = new TrackedMap(newOrder);\n } else {\n this.map = new TrackedMap(allColumns.map((column, i) => [column.key, i]));\n }\n }\n\n /**\n * @private\n * Helper to get visible columns, defaulting to all columns if not specified\n */\n private getVisibleColumns(): Record<string, boolean> {\n if (this.args.visibleColumns) {\n return this.args.visibleColumns();\n }\n\n // Default: all columns are visible\n return this.args.columns().reduce(\n (acc, col) => {\n acc[col.key] = true;\n return acc;\n },\n {} as Record<string, boolean>,\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 const orderedColumns = this.orderedColumns;\n if (this.map.get(key) === 0) {\n return;\n }\n\n let found = false;\n\n for (const column of orderedColumns.reverse()) {\n if (found) {\n // Shift moved column left\n let currentPosition = this.map.get(key);\n\n assert('current key must exist in map', currentPosition !== undefined);\n this.map.set(key, currentPosition - 1);\n\n // Shift displayed column right\n let displayedColumnPosition = this.map.get(column.key);\n\n assert(\n 'displaced key must exist in map',\n displayedColumnPosition !== undefined,\n );\n this.map.set(column.key, displayedColumnPosition + 1);\n\n if (this.getVisibleColumns()[column.key]) {\n break;\n }\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n this.args.save?.(this.map);\n }\n\n setAll = (map: Map<string, number>) => {\n let allColumns = this.args.columns();\n\n addMissingColumnsToMap(allColumns, map);\n removeExtraColumnsFromMap(allColumns, map);\n\n this.map.clear();\n\n for (const [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 const orderedColumns = this.orderedColumns;\n let found = false;\n\n for (const column of orderedColumns) {\n if (found) {\n // Shift moved column right\n let currentPosition = this.map.get(key);\n\n assert('current key must exist in map', currentPosition !== undefined);\n this.map.set(key, currentPosition + 1);\n\n // Shift displaced column left\n let displayedColumnPosition = this.map.get(column.key);\n\n assert(\n 'displaced key must exist in map',\n displayedColumnPosition !== undefined,\n );\n this.map.set(column.key, displayedColumnPosition - 1);\n\n if (this.getVisibleColumns()[column.key]) {\n break;\n }\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n this.args.save?.(this.map);\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 const 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 const 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()]\n .map((entry) => entry.join(' => '))\n .join(', ') +\n ` and the visibleColumns are: ` +\n Object.keys(this.getVisibleColumns()).join(', ') +\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 const keyByPosition = new Map<number, string>(\n [...this.orderedMap.entries()].map(\n (entry) => entry.reverse() as [number, string],\n ),\n );\n\n for (const [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 (const [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 const 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<DataType>[] {\n const allColumns = this.args.columns();\n const columnsByKey = allColumns.reduce(\n (keyMap, column) => {\n keyMap[column.key] = column;\n return keyMap;\n },\n {} as Record<string, Column<DataType>>,\n );\n const mergedOrder = orderOf(allColumns, this.map);\n\n const result: Column<DataType>[] = Array.from({\n length: allColumns.length,\n });\n\n for (const [key, position] of mergedOrder.entries()) {\n const column = columnsByKey[key];\n\n // Skip columns that no longer exist (they've been removed from the columns array)\n if (!column) {\n continue;\n }\n\n result[position] = column;\n }\n\n // Filter out undefined entries (from removed columns or gaps in positions)\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 *\n * This function adds missing columns but preserves extra columns in the map\n * (they might be hidden, not deleted).\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>,\n): Map<string, number> {\n // Create a copy to avoid mutating the input\n let workingOrder = new Map(currentOrder);\n\n // Add any missing columns to the end\n addMissingColumnsToMap(columns, workingOrder);\n\n // DON'T remove extra columns - they might be hidden columns, not deleted ones\n // The ColumnOrder constructor handles removal of truly deleted columns\n\n // Ensure positions are consecutive and zero based\n let inOrder = Array.from(workingOrder.entries()).sort(\n ([_keyA, positionA], [_keyB, positionB]) => positionA - positionB,\n );\n\n let orderedColumns = new Map<string, number>();\n\n let position = 0;\n\n for (let [key] of inOrder) {\n orderedColumns.set(key, position++);\n }\n\n return orderedColumns;\n}\n\n/**\n * @private\n *\n * Utility to add any missing columns to the position map. By calling this whenever\n * data is passed in to the system we can simplify the code within the system because\n * we know we are dealing with a full set of positions.\n *\n * @param columns - A list of all columns available to the table\n * @param map - A Map of `key` to position (as a zero based integer)\n */\nfunction addMissingColumnsToMap(\n columns: { key: string }[],\n map: Map<string, number>,\n): void {\n if (map.size < columns.length) {\n let maxAssignedColumn = Math.max(...map.values());\n\n for (let column of columns) {\n if (map.get(column.key) === undefined) {\n map.set(column.key, ++maxAssignedColumn);\n }\n }\n }\n}\n\n/**\n * @private\n *\n * Utility to remove any extra columns from the position map. By calling this whenever\n * data is passed in to the system we can simplify the code within the system because\n * we know we are dealing with a full set of positions.\n *\n * @param columns - A list of all columns available to the table\n * @param map - A Map of `key` to position (as a zero based integer)\n */\nfunction removeExtraColumnsFromMap(\n columns: { key: string }[],\n map: Map<string, number>,\n): void {\n let columnsLookup = columns.reduce(\n function (acc, { key }) {\n acc[key] = true;\n\n return acc;\n },\n {} as Record<string, boolean>,\n );\n\n for (let key of map.keys()) {\n if (!columnsLookup[key]) {\n map.delete(key);\n }\n }\n}\n"],"names":["ColumnReordering","BasePlugin","constructor","args","_defineProperty","column","ColumnMeta","table","TableMeta","reset","tableMeta","meta","forTable","columns","_ColumnMeta_brand","WeakSet","_classPrivateMethodInitSpec","_classPrivateGetter","_get_tableMeta","columnOrder","moveLeft","key","moveRight","position","getPosition","value","setPosition","canMoveLeft","canMoveRight","length","cannotMoveLeft","cannotMoveRight","_this","_class","_initializerDefineProperty","_descriptor","order","setAll","map","get","newPosition","swapWith","preferences","delete","ColumnOrder","allColumns","visibleColumns","save","entries","set","read","Map","Object","orderedColumns","filter","for","reduce","acc","values","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","existingOrder","action","getOwnPropertyDescriptor","_class2","TrackedMap","addMissingColumnsToMap","removeExtraColumnsFromMap","clear","newOrder","i","getVisibleColumns","col","found","reverse","currentPosition","assert","undefined","displayedColumnPosition","validPositions","orderedMap","includes","entry","join","keys","size","keyByPosition","existingPosition","has","result","orderOf","columnsByKey","keyMap","mergedOrder","Array","from","Boolean","cached","currentOrder","workingOrder","inOrder","sort","_keyA","positionA","_keyB","positionB","maxAssignedColumn","Math","max","columnsLookup"],"mappings":"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"}
@@ -34,7 +34,9 @@ class ResizeHandle extends Modifier {
34
34
  _defineProperty(this, "token", void 0);
35
35
  _defineProperty(this, "isSetup", false);
36
36
  _defineProperty(this, "setup", () => {
37
- this.dragHandle.addEventListener('touchstart', this.dragStartHandler);
37
+ this.dragHandle.addEventListener('touchstart', this.dragStartHandler, {
38
+ passive: true
39
+ });
38
40
  this.dragHandle.addEventListener('mousedown', this.dragStartHandler);
39
41
  this.dragHandle.addEventListener('keydown', this.keyHandler);
40
42
  registerDestructor(this, () => {
@@ -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.ts';\nimport { ColumnResizing } from './plugin.ts';\n\nimport type { ColumnMeta } from './plugin.ts';\nimport type { Column } from '../../-private/column.ts';\n\nconst 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<DataType = unknown> extends Modifier<{\n Args: { Positional: [Column<DataType>] };\n}> {\n declare dragHandle: HTMLElement;\n declare column: Column<DataType>;\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<DataType>]) {\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 const 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 const 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 /**\n * queueUpdate takes an optional function argument that is called\n * in the requestAnimationFrame callback _after_ the resize function.\n *\n * We can use this to ensure that preferences are only ever saved after\n * we have completed column resizing.\n *\n * Because the requestAnimationFrame 'hides' these function calls from the\n * the ember test waiter, we also ensure that we track them by also cancelling\n * the waiter in the requestAnimationFrame callback.\n */\n queueUpdate = (callback?: () => void) => {\n if (this.dragFrame) {\n cancelAnimationFrame(this.dragFrame);\n }\n\n this.dragFrame = requestAnimationFrame(() => {\n this.meta.resize(this.pointerX - this.pointerStartX);\n this.pointerStartX = this.pointerX;\n\n if (callback) {\n callback();\n }\n\n if (this.token) {\n waiter.endAsync(this.token);\n this.token = undefined;\n }\n });\n };\n\n dragEndHandler = () => {\n this.meta.isResizing = false;\n\n this.queueUpdate(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 const deltaT = new Date().getTime() - this.lastKey;\n const 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 '@universal-ember/table/plugins';\n * import { resizeHandle, ColumnResizing } from '@universal-ember/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 '@universal-ember/table/plugins';\n * import { resizeHandle, ColumnResizing } from '@universal-ember/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: typeof 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","callback","dragFrame","cancelAnimationFrame","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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CAACD,OAAO,GAAG,IAAIF,IAAI,EAAE,CAACC,OAAO,EAAE;AACrC;AAEAX,MAAAA,oBAAoB,CAAC,IAAI,CAACgB,QAAQ,CAAC;AACnC,MAAA,IAAI,CAACA,QAAQ,GAAGf,qBAAqB,CAAC,MAAM;QAC1C,IAAI,CAACxB,IAAI,CAACyB,MAAM,CAAC,IAAI,CAACa,WAAW,CAAC;QAElC,IAAI,CAACA,WAAW,GAAG,CAAC;AACtB,OAAC,CAAC;KACH,CAAA;AAAA;AA9JDE,EAAAA,MAAMA,CAACC,OAAgB,EAAE,CAACC,MAAM,CAAqB,EAAE;IACrD,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAAC1C,IAAI,GAAGA,IAAI,CAAC2C,SAAS,CAACD,MAAM,EAAEE,cAAc,CAAC;IAClD,IAAI,CAACjD,UAAU,GAAG8C,OAAsB;AAExC,IAAA,IAAI,CAAC,IAAI,CAACI,OAAO,EAAE;MACjB,IAAI,CAACA,OAAO,GAAG,IAAI;MACnB,IAAI,CAACC,KAAK,EAAE;AACd;AACF;AAsJF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,YAAiC,GAAGzD;;;;"}
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.ts';\nimport { ColumnResizing } from './plugin.ts';\n\nimport type { ColumnMeta } from './plugin.ts';\nimport type { Column } from '../../-private/column.ts';\n\nconst 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<DataType = unknown> extends Modifier<{\n Args: { Positional: [Column<DataType>] };\n}> {\n declare dragHandle: HTMLElement;\n declare column: Column<DataType>;\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<DataType>]) {\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 passive: true,\n });\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 const 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 const 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 /**\n * queueUpdate takes an optional function argument that is called\n * in the requestAnimationFrame callback _after_ the resize function.\n *\n * We can use this to ensure that preferences are only ever saved after\n * we have completed column resizing.\n *\n * Because the requestAnimationFrame 'hides' these function calls from the\n * the ember test waiter, we also ensure that we track them by also cancelling\n * the waiter in the requestAnimationFrame callback.\n */\n queueUpdate = (callback?: () => void) => {\n if (this.dragFrame) {\n cancelAnimationFrame(this.dragFrame);\n }\n\n this.dragFrame = requestAnimationFrame(() => {\n this.meta.resize(this.pointerX - this.pointerStartX);\n this.pointerStartX = this.pointerX;\n\n if (callback) {\n callback();\n }\n\n if (this.token) {\n waiter.endAsync(this.token);\n this.token = undefined;\n }\n });\n };\n\n dragEndHandler = () => {\n this.meta.isResizing = false;\n\n this.queueUpdate(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 const deltaT = new Date().getTime() - this.lastKey;\n const 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 '@universal-ember/table/plugins';\n * import { resizeHandle, ColumnResizing } from '@universal-ember/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 '@universal-ember/table/plugins';\n * import { resizeHandle, ColumnResizing } from '@universal-ember/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: typeof ResizeHandle = ResizeHandle;\n"],"names":["waiter","buildWaiter","ResizeHandle","Modifier","constructor","args","_defineProperty","dragHandle","addEventListener","dragStartHandler","passive","keyHandler","registerDestructor","meta","isResizing","token","endAsync","undefined","removeEventListener","window","dragMove","dragEndHandler","event","PointerEvent","MouseEvent","TouchEvent","firstTouch","touches","pointerX","clientX","pointerY","clientY","pointerStartX","pointerStartY","callback","dragFrame","cancelAnimationFrame","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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AW,IAAIF,OAAO,GAAG,CAAC,GAAG,CAAC;QACnC,IAAI,CAACD,OAAO,GAAG,IAAIF,IAAI,EAAE,CAACC,OAAO,EAAE;AACrC;AAEAX,MAAAA,oBAAoB,CAAC,IAAI,CAACgB,QAAQ,CAAC;AACnC,MAAA,IAAI,CAACA,QAAQ,GAAGf,qBAAqB,CAAC,MAAM;QAC1C,IAAI,CAACxB,IAAI,CAACyB,MAAM,CAAC,IAAI,CAACa,WAAW,CAAC;QAElC,IAAI,CAACA,WAAW,GAAG,CAAC;AACtB,OAAC,CAAC;KACH,CAAA;AAAA;AAhKDE,EAAAA,MAAMA,CAACC,OAAgB,EAAE,CAACC,MAAM,CAAqB,EAAE;IACrD,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAAC1C,IAAI,GAAGA,IAAI,CAAC2C,SAAS,CAACD,MAAM,EAAEE,cAAc,CAAC;IAClD,IAAI,CAAClD,UAAU,GAAG+C,OAAsB;AAExC,IAAA,IAAI,CAAC,IAAI,CAACI,OAAO,EAAE;MACjB,IAAI,CAACA,OAAO,GAAG,IAAI;MACnB,IAAI,CAACC,KAAK,EAAE;AACd;AACF;AAwJF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,YAAiC,GAAG1D;;;;"}
@@ -2,6 +2,12 @@ import { htmlSafe } from '@ember/template';
2
2
  import { meta } from '../-private/base.js';
3
3
  import { ColumnResizing } from './plugin.js';
4
4
 
5
+ /**
6
+ * Is the column resizable?
7
+ * This checks if resizing is enabled for this specific column,
8
+ */
9
+ const isResizable = column => meta.forColumn(column, ColumnResizing).isResizable;
10
+
5
11
  /**
6
12
  * The column actively being resized by the user.
7
13
  *
@@ -67,5 +73,5 @@ const toStyle = key => {
67
73
  }
68
74
  };
69
75
 
70
- export { canShrink, hasResizeHandle, isResizing, styleStringFor };
76
+ export { canShrink, hasResizeHandle, isResizable, isResizing, styleStringFor };
71
77
  //# 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.ts';\nimport { ColumnResizing } from './plugin.ts';\n\nimport type { Column } from '../../index.ts';\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 = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnResizing).isResizing;\n\n/**\n * Does the column have room to shrink?\n */\nexport const canShrink = <DataType = unknown>(column: Column<DataType>) =>\n 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 = <DataType = unknown>(column: Column<DataType>) =>\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 const 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 (const [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,GAAwBC,MAAwB,IACrEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACJ;;AAEzC;AACA;AACA;AACaK,MAAAA,SAAS,GAAwBJ,MAAwB,IACpEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,eAAe,GAAwBL,MAAwB,IAC1EC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACE;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,cAAc,GACzBN,MAAwB,IACQ;EAChC,MAAMO,UAAU,GAAGN,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC;EAEzD,IAAIK,MAAM,GAAG,EAAE;;AAEf;AACF;AACA;AACA;AACA;AACE,EAAA,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,UAAU,CAACM,KAAK,CAAC,EAAE;IAC3DL,MAAM,IAAI,GAAGM,OAAO,CAACL,GAAG,CAAC,CAAA,CAAA,EAAIC,KAAK,CAAG,CAAA,CAAA;AACvC;EAEAF,MAAM,GAAG,GAAG,GAAGA,MAAM;EAErB,OAAOO,QAAQ,CAACP,MAAM,CAAC;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,OAAO,GAAIL,GAAW,IAAa;AACvC,EAAA,QAAQA,GAAG;AACT,IAAA,KAAK,UAAU;AACb,MAAA,OAAO,WAAW;AACpB,IAAA;AACE,MAAA,OAAOA,GAAG;AACd;AACF,CAAC;;;;"}
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.ts';\nimport { ColumnResizing } from './plugin.ts';\n\nimport type { Column } from '../../index.ts';\n\n/**\n * Is the column resizable?\n * This checks if resizing is enabled for this specific column,\n */\nexport const isResizable = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnResizing).isResizable;\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 = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, ColumnResizing).isResizing;\n\n/**\n * Does the column have room to shrink?\n */\nexport const canShrink = <DataType = unknown>(column: Column<DataType>) =>\n 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 = <DataType = unknown>(column: Column<DataType>) =>\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 const 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 (const [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":["isResizable","column","meta","forColumn","ColumnResizing","isResizing","canShrink","hasResizeHandle","styleStringFor","columnMeta","result","key","value","Object","entries","style","toStyle","htmlSafe"],"mappings":";;;;AAOA;AACA;AACA;AACA;AACaA,MAAAA,WAAW,GAAwBC,MAAwB,IACtEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACJ;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaK,MAAAA,UAAU,GAAwBJ,MAAwB,IACrEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACC;;AAEzC;AACA;AACA;AACaC,MAAAA,SAAS,GAAwBL,MAAwB,IACpEC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACE;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,eAAe,GAAwBN,MAAwB,IAC1EC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC,CAACG;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaC,MAAAA,cAAc,GACzBP,MAAwB,IACQ;EAChC,MAAMQ,UAAU,GAAGP,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,cAAc,CAAC;EAEzD,IAAIM,MAAM,GAAG,EAAE;;AAEf;AACF;AACA;AACA;AACA;AACE,EAAA,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,UAAU,CAACM,KAAK,CAAC,EAAE;IAC3DL,MAAM,IAAI,GAAGM,OAAO,CAACL,GAAG,CAAC,CAAA,CAAA,EAAIC,KAAK,CAAG,CAAA,CAAA;AACvC;EAEAF,MAAM,GAAG,GAAG,GAAGA,MAAM;EAErB,OAAOO,QAAQ,CAACP,MAAM,CAAC;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,OAAO,GAAIL,GAAW,IAAa;AACvC,EAAA,QAAQA,GAAG;AACT,IAAA,KAAK,UAAU;AACb,MAAA,OAAO,WAAW;AACpB,IAAA;AACE,MAAA,OAAOA,GAAG;AACd;AACF,CAAC;;;;"}
@@ -1,4 +1,4 @@
1
1
  export { resizeHandle } from './handle.js';
2
- export { canShrink, hasResizeHandle, isResizing, styleStringFor } from './helpers.js';
2
+ export { canShrink, hasResizeHandle, isResizable, isResizing, styleStringFor } from './helpers.js';
3
3
  export { ColumnResizing, ColumnResizing as Plugin } from './plugin.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -101,9 +101,16 @@ let ColumnMeta = (_class = class ColumnMeta {
101
101
  return this.options.isResizable ?? this.tableMeta.isResizable;
102
102
  }
103
103
  get hasResizeHandle() {
104
- const previous = columns.previous(this.column);
105
- if (!previous) return false;
106
- return this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable;
104
+ const position = this.tableMeta.options?.handlePosition ?? 'left';
105
+ if (position === 'right') {
106
+ const next = columns.next(this.column);
107
+ if (!next) return false;
108
+ return this.isResizable && meta.forColumn(next, ColumnResizing).isResizable;
109
+ } else {
110
+ const previous = columns.previous(this.column);
111
+ if (!previous) return false;
112
+ return this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable;
113
+ }
107
114
  }
108
115
  get width() {
109
116
  let width = this._width ?? this.initialWidth;
@@ -307,7 +314,7 @@ function _resizeColumnAuto(column, delta) {
307
314
  const position = this.options?.handlePosition ?? 'left';
308
315
  let growingColumn;
309
316
  if (position === 'right') {
310
- growingColumn = isDraggingRight ? columns.next(column) : column;
317
+ growingColumn = isDraggingRight ? column : columns.next(column);
311
318
  } else {
312
319
  growingColumn = isDraggingRight ? columns.previous(column) : column;
313
320
  }
@@ -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 { isDestroyed, isDestroying } from '@ember/destroyable';\nimport { action } from '@ember/object';\n\nimport { preferences } from '../../plugins/index.ts';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base.ts';\nimport { applyStyles } from '../-private/utils.ts';\nimport {\n getAccurateClientHeight,\n getAccurateClientWidth,\n totalGapOf,\n} from './utils.ts';\n\nimport type { ColumnApi, PluginPreferences } from '../../plugins/index.ts';\nimport type { Column, Table } from '../../index.ts';\n\ninterface ColumnResizePreferences extends PluginPreferences {\n columns: {\n [columnKey: string]: {\n width?: number;\n };\n };\n}\n\ndeclare module '@universal-ember/table/plugins' {\n interface Registry {\n ColumnResizing?: 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 /**\n * Specify the table layout strategy for column resizing.\n *\n * - 'auto': Uses complex redistribution logic where resizing one column\n * affects neighboring columns (default, preserves existing behavior)\n * - 'fixed': Simple per-column resizing suitable for CSS table-layout: fixed\n *\n * Valid values are 'auto' or 'fixed'\n *\n * default: 'auto'\n */\n tableLayout?: 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 const 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 const columnOptions = options.forColumn(this.column, ColumnResizing);\n const filteredOptions = Object.entries(columnOptions || {}).reduce(\n (result, [k, v]) => {\n if (ALLOWED_COLUMN_OPTIONS.includes(k)) {\n result[k] = v;\n }\n\n return result;\n },\n {} as Record<string, unknown>,\n ) 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 const savedWidth = preferences\n .forColumn(this.column, ColumnResizing)\n .get('width');\n\n if (!savedWidth) {\n return this.options.width;\n }\n\n if (typeof savedWidth !== 'string') {\n assert(\n 'saved width must be a number or string',\n typeof savedWidth === 'number',\n );\n return savedWidth;\n }\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 const previous = columns.previous(this.column);\n\n if (!previous) return false;\n\n return (\n this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable\n );\n }\n\n get width() {\n let width = this._width ?? this.initialWidth;\n\n if (!width) {\n const { defaultColumnWidth } = this.tableMeta;\n\n width = defaultColumnWidth\n ? Math.max(defaultColumnWidth, this.minWidth)\n : this.minWidth;\n }\n\n return width;\n }\n\n set width(value) {\n this._width = value;\n }\n\n get style() {\n const 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 // Use a tolerance threshold to prevent infinite resize loops from subpixel rounding\n // at different zoom levels. Treat deltas smaller than 0.5px as zero.\n if (Math.abs(delta) < 0.5) return;\n\n const metas = visibleColumns.map((column) =>\n meta.forColumn(column, ColumnResizing),\n );\n\n const resizableMetas = metas.filter(\n (meta) => meta.isResizable && (delta < 0 ? meta.canShrink : true),\n );\n\n const columnDelta = delta / resizableMetas.length;\n\n for (const 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) =>\n meta.forColumn(column, ColumnResizing),\n );\n }\n\n get totalInitialColumnWidths() {\n return this.visibleColumnMetas.reduce(\n (acc, meta) => (acc += meta.initialWidth ?? 0),\n 0,\n );\n }\n\n get columnsWithoutInitialWidth() {\n return this.visibleColumnMetas.filter((meta) => !meta.initialWidth);\n }\n\n get totalVisibleColumnsWidth() {\n return this.visibleColumnMetas.reduce(\n (acc, column) => (acc += column.width ?? 0),\n 0,\n );\n }\n\n @action\n saveColWidths(visibleColumnMetas: ColumnMeta[]) {\n const tablePrefs = this.table.preferences;\n\n for (const column of visibleColumnMetas) {\n const existing = tablePrefs.storage.forPlugin('ColumnResizing');\n const 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 (const column of this.visibleColumnMetas) {\n column._width = undefined;\n }\n }\n\n @action\n onTableResize(entry: ResizeObserverEntry) {\n assert(\n 'scroll container element must be an HTMLElement',\n entry.target instanceof HTMLElement,\n );\n\n // For fixed layout, columns have explicit widths and should not be auto-redistributed\n if (this.options?.tableLayout === 'fixed') {\n return;\n }\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 const totalGap = totalGapOf(entry.target.querySelector('[role=\"row\"]'));\n const diff =\n this.scrollContainerWidth - this.totalVisibleColumnsWidth - totalGap;\n\n distributeDelta(diff, this.#availableColumns);\n }\n\n @action\n resizeColumn<DataType = unknown>(column: Column<DataType>, delta: number) {\n if (delta === 0) return;\n\n const tableLayout = this.options?.tableLayout ?? 'auto';\n\n if (tableLayout === 'fixed') {\n this.#resizeColumnFixed(column, delta);\n } else {\n this.#resizeColumnAuto(column, delta);\n }\n }\n\n /**\n * Simple column resizing for table-layout: fixed\n * Only affects the target column and respects minimum width\n */\n #resizeColumnFixed<DataType = unknown>(\n column: Column<DataType>,\n delta: number,\n ) {\n const columnMeta = meta.forColumn(column, ColumnResizing);\n const newWidth = columnMeta.width + delta;\n\n if (newWidth >= columnMeta.minWidth) {\n columnMeta.width = newWidth;\n }\n }\n\n /**\n * Complex column resizing with redistribution logic\n * Preserves existing behavior for table-layout: auto\n */\n #resizeColumnAuto<DataType = unknown>(\n column: Column<DataType>,\n delta: number,\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 const isDraggingRight = delta > 0;\n const position = this.options?.handlePosition ?? 'left';\n\n let growingColumn: Column<DataType> | 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 const growingColumnMeta = meta.forColumn(growingColumn, ColumnResizing);\n\n assert(\n 'cannot resize a column that does not have a width',\n growingColumnMeta.width,\n );\n\n const shrinkableColumns =\n delta > 0\n ? columns.after(growingColumn)\n : columns.before(growingColumn).reverse();\n\n const 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 const shrinkingColumnMeta = shrinkableColumnsMetas.shift();\n\n assert(\n 'cannot resize a column that does not have a width',\n shrinkingColumnMeta?.width,\n );\n\n const 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 const observer = getObserver(element, table);\n\n observer.observe(element);\n\n return () => {\n observer.unobserve(element);\n };\n}\n\nconst 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 if (isDestroyed(table) || isDestroying(table)) {\n return;\n }\n\n for (const entry of entries) {\n meta.forTable(table, ColumnResizing).onTableResize(entry);\n }\n });\n\n return existing;\n}\n"],"names":["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","cached","getOwnPropertyDescriptor","action","distributeDelta","visibleColumns","abs","metas","map","resizableMetas","filter","columnDelta","length","_class2","_TableMeta_brand","WeakSet","_classPrivateMethodInitSpec","_descriptor3","_descriptor4","enabled","scrollContainerWidth","totalInitialColumnWidths","columnsWithoutInitialWidth","_classPrivateGetter","_get_availableColumns","acc","totalVisibleColumnsWidth","tablePrefs","existing","storage","forPlugin","columnPrefs","set","toString","persist","undefined","onTableResize","entry","target","HTMLElement","tableLayout","getAccurateClientWidth","scrollContainerHeight","getAccurateClientHeight","totalGap","totalGapOf","querySelector","diff","_assertClassBrand","_resizeColumnFixed","call","_resizeColumnAuto","_this","for","newWidth","isDraggingRight","position","handlePosition","growingColumn","next","growingColumnMeta","shrinkableColumns","after","before","reverse","shrinkableColumnsMetas","remainder","shrinkingColumnMeta","shift","actualDelta","min","observer","getObserver","observe","unobserve","CACHE","WeakMap","ResizeObserver","isDestroyed","isDestroying"],"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 { isDestroyed, isDestroying } from '@ember/destroyable';\nimport { action } from '@ember/object';\n\nimport { preferences } from '../../plugins/index.ts';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base.ts';\nimport { applyStyles } from '../-private/utils.ts';\nimport {\n getAccurateClientHeight,\n getAccurateClientWidth,\n totalGapOf,\n} from './utils.ts';\n\nimport type { ColumnApi, PluginPreferences } from '../../plugins/index.ts';\nimport type { Column, Table } from '../../index.ts';\n\ninterface ColumnResizePreferences extends PluginPreferences {\n columns: {\n [columnKey: string]: {\n width?: number;\n };\n };\n}\n\ndeclare module '@universal-ember/table/plugins' {\n interface Registry {\n ColumnResizing?: 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 /**\n * Specify the table layout strategy for column resizing.\n *\n * - 'auto': Uses complex redistribution logic where resizing one column\n * affects neighboring columns (default, preserves existing behavior)\n * - 'fixed': Simple per-column resizing suitable for CSS table-layout: fixed\n *\n * Valid values are 'auto' or 'fixed'\n *\n * default: 'auto'\n */\n tableLayout?: 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 const 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 const columnOptions = options.forColumn(this.column, ColumnResizing);\n const filteredOptions = Object.entries(columnOptions || {}).reduce(\n (result, [k, v]) => {\n if (ALLOWED_COLUMN_OPTIONS.includes(k)) {\n result[k] = v;\n }\n\n return result;\n },\n {} as Record<string, unknown>,\n ) 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 const savedWidth = preferences\n .forColumn(this.column, ColumnResizing)\n .get('width');\n\n if (!savedWidth) {\n return this.options.width;\n }\n\n if (typeof savedWidth !== 'string') {\n assert(\n 'saved width must be a number or string',\n typeof savedWidth === 'number',\n );\n return savedWidth;\n }\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 const position = this.tableMeta.options?.handlePosition ?? 'left';\n\n if (position === 'right') {\n const next = columns.next(this.column);\n if (!next) return false;\n return (\n this.isResizable && meta.forColumn(next, ColumnResizing).isResizable\n );\n } else {\n const previous = columns.previous(this.column);\n if (!previous) return false;\n return (\n this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable\n );\n }\n }\n\n get width() {\n let width = this._width ?? this.initialWidth;\n\n if (!width) {\n const { defaultColumnWidth } = this.tableMeta;\n\n width = defaultColumnWidth\n ? Math.max(defaultColumnWidth, this.minWidth)\n : this.minWidth;\n }\n\n return width;\n }\n\n set width(value) {\n this._width = value;\n }\n\n get style() {\n const 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 // Use a tolerance threshold to prevent infinite resize loops from subpixel rounding\n // at different zoom levels. Treat deltas smaller than 0.5px as zero.\n if (Math.abs(delta) < 0.5) return;\n\n const metas = visibleColumns.map((column) =>\n meta.forColumn(column, ColumnResizing),\n );\n\n const resizableMetas = metas.filter(\n (meta) => meta.isResizable && (delta < 0 ? meta.canShrink : true),\n );\n\n const columnDelta = delta / resizableMetas.length;\n\n for (const 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) =>\n meta.forColumn(column, ColumnResizing),\n );\n }\n\n get totalInitialColumnWidths() {\n return this.visibleColumnMetas.reduce(\n (acc, meta) => (acc += meta.initialWidth ?? 0),\n 0,\n );\n }\n\n get columnsWithoutInitialWidth() {\n return this.visibleColumnMetas.filter((meta) => !meta.initialWidth);\n }\n\n get totalVisibleColumnsWidth() {\n return this.visibleColumnMetas.reduce(\n (acc, column) => (acc += column.width ?? 0),\n 0,\n );\n }\n\n @action\n saveColWidths(visibleColumnMetas: ColumnMeta[]) {\n const tablePrefs = this.table.preferences;\n\n for (const column of visibleColumnMetas) {\n const existing = tablePrefs.storage.forPlugin('ColumnResizing');\n const 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 (const column of this.visibleColumnMetas) {\n column._width = undefined;\n }\n }\n\n @action\n onTableResize(entry: ResizeObserverEntry) {\n assert(\n 'scroll container element must be an HTMLElement',\n entry.target instanceof HTMLElement,\n );\n\n // For fixed layout, columns have explicit widths and should not be auto-redistributed\n if (this.options?.tableLayout === 'fixed') {\n return;\n }\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 const totalGap = totalGapOf(entry.target.querySelector('[role=\"row\"]'));\n const diff =\n this.scrollContainerWidth - this.totalVisibleColumnsWidth - totalGap;\n\n distributeDelta(diff, this.#availableColumns);\n }\n\n @action\n resizeColumn<DataType = unknown>(column: Column<DataType>, delta: number) {\n if (delta === 0) return;\n\n const tableLayout = this.options?.tableLayout ?? 'auto';\n\n if (tableLayout === 'fixed') {\n this.#resizeColumnFixed(column, delta);\n } else {\n this.#resizeColumnAuto(column, delta);\n }\n }\n\n /**\n * Simple column resizing for table-layout: fixed\n * Only affects the target column and respects minimum width\n */\n #resizeColumnFixed<DataType = unknown>(\n column: Column<DataType>,\n delta: number,\n ) {\n const columnMeta = meta.forColumn(column, ColumnResizing);\n const newWidth = columnMeta.width + delta;\n\n if (newWidth >= columnMeta.minWidth) {\n columnMeta.width = newWidth;\n }\n }\n\n /**\n * Complex column resizing with redistribution logic\n * Preserves existing behavior for table-layout: auto\n */\n #resizeColumnAuto<DataType = unknown>(\n column: Column<DataType>,\n delta: number,\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 const isDraggingRight = delta > 0;\n const position = this.options?.handlePosition ?? 'left';\n\n let growingColumn: Column<DataType> | null | undefined;\n\n if (position === 'right') {\n growingColumn = isDraggingRight ? column : columns.next(column);\n } else {\n growingColumn = isDraggingRight ? columns.previous(column) : column;\n }\n\n if (!growingColumn) return;\n\n const growingColumnMeta = meta.forColumn(growingColumn, ColumnResizing);\n\n assert(\n 'cannot resize a column that does not have a width',\n growingColumnMeta.width,\n );\n\n const shrinkableColumns =\n delta > 0\n ? columns.after(growingColumn)\n : columns.before(growingColumn).reverse();\n\n const 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 const shrinkingColumnMeta = shrinkableColumnsMetas.shift();\n\n assert(\n 'cannot resize a column that does not have a width',\n shrinkingColumnMeta?.width,\n );\n\n const 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 const observer = getObserver(element, table);\n\n observer.observe(element);\n\n return () => {\n observer.unobserve(element);\n };\n}\n\nconst 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 if (isDestroyed(table) || isDestroying(table)) {\n return;\n }\n\n for (const entry of entries) {\n meta.forTable(table, ColumnResizing).onTableResize(entry);\n }\n });\n\n return existing;\n}\n"],"names":["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","position","handlePosition","next","columns","previous","_width","defaultColumnWidth","Math","max","value","styles","resize","delta","resizeColumn","save","saveColWidths","visibleColumnMetas","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","cached","getOwnPropertyDescriptor","action","distributeDelta","visibleColumns","abs","metas","map","resizableMetas","filter","columnDelta","length","_class2","_TableMeta_brand","WeakSet","_classPrivateMethodInitSpec","_descriptor3","_descriptor4","enabled","scrollContainerWidth","totalInitialColumnWidths","columnsWithoutInitialWidth","_classPrivateGetter","_get_availableColumns","acc","totalVisibleColumnsWidth","tablePrefs","existing","storage","forPlugin","columnPrefs","set","toString","persist","undefined","onTableResize","entry","target","HTMLElement","tableLayout","getAccurateClientWidth","scrollContainerHeight","getAccurateClientHeight","totalGap","totalGapOf","querySelector","diff","_assertClassBrand","_resizeColumnFixed","call","_resizeColumnAuto","_this","for","newWidth","isDraggingRight","growingColumn","growingColumnMeta","shrinkableColumns","after","before","reverse","shrinkableColumnsMetas","remainder","shrinkingColumnMeta","shift","actualDelta","min","observer","getObserver","observe","unobserve","CACHE","WeakMap","ResizeObserver","isDestroyed","isDestroying"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@universal-ember/table",
3
- "version": "3.3.0",
3
+ "version": "3.4.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",
@@ -1,7 +1,7 @@
1
1
  import { meta } from '../-private/base.ts';
2
2
  import { ColumnReordering } from './plugin.ts';
3
3
 
4
- import type { ColumnOrder } from './plugin.ts';
4
+ import type { ColumnOrder, TableMeta } from './plugin.ts';
5
5
  import type { Column, Table } from '../../index.ts';
6
6
 
7
7
  /**
@@ -23,8 +23,16 @@ export const moveRight = <DataType = unknown>(column: Column<DataType>) =>
23
23
  */
24
24
  export const setColumnOrder = <DataType = unknown>(
25
25
  table: Table<DataType>,
26
- order: ColumnOrder,
27
- ) => meta.forTable(table, ColumnReordering).setOrder(order);
26
+ order: ColumnOrder<DataType>,
27
+ ) => {
28
+ // Note: The meta.forTable API doesn't preserve the DataType generic from the table parameter.
29
+ // We use a type assertion here to match the expected types.
30
+ const tableMeta = meta.forTable(
31
+ table,
32
+ ColumnReordering,
33
+ ) as TableMeta<DataType>;
34
+ return tableMeta.setOrder(order);
35
+ };
28
36
 
29
37
  /**
30
38
  * Ask if the column cannot move to the left
@@ -55,3 +63,34 @@ export const canMoveRight = <DataType = unknown>(column: Column<DataType>) =>
55
63
  // Prefer this if available:
56
64
  // meta.forColumn(column, ColumnReordering).canMoveRight
57
65
  !meta.forColumn(column, ColumnReordering).cannotMoveRight;
66
+
67
+ /**
68
+ * Get the columns in their current display order.
69
+ *
70
+ * This returns an array of columns sorted according to any reordering
71
+ * that has been applied via the ColumnReordering plugin. If no reordering
72
+ * has been applied, columns are returned in their original order.
73
+ *
74
+ * @param table - The table instance to get ordered columns from
75
+ * @returns Array of columns in their current display order
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * import { orderedColumnsFor } from '@universal-ember/table/plugins/column-reordering';
80
+ *
81
+ * const columns = orderedColumnsFor(table);
82
+ * // Use the ordered columns for rendering or other operations
83
+ * ```
84
+ */
85
+ export const orderedColumnsFor = <DataType = unknown>(
86
+ table: Table<DataType>,
87
+ ): Column<DataType>[] => {
88
+ // Note: The meta.forTable API doesn't preserve the DataType generic from the table parameter.
89
+ // This is a limitation of the current plugin meta system architecture.
90
+ // We use a type assertion here because we know the columns come from the same table.
91
+ const tableMeta = meta.forTable(
92
+ table,
93
+ ColumnReordering,
94
+ ) as TableMeta<DataType>;
95
+ return tableMeta.columnOrder.orderedColumns;
96
+ };
@@ -51,11 +51,14 @@ export class ColumnReordering extends BasePlugin<Signature> {
51
51
  }
52
52
  }
53
53
 
54
- export class ColumnMeta {
55
- constructor(private column: Column) {}
56
-
57
- get #tableMeta() {
58
- return meta.forTable(this.column.table, ColumnReordering);
54
+ export class ColumnMeta<DataType = unknown> {
55
+ constructor(private column: Column<DataType>) {}
56
+
57
+ get #tableMeta(): TableMeta<DataType> {
58
+ return meta.forTable(
59
+ this.column.table,
60
+ ColumnReordering,
61
+ ) as TableMeta<DataType>;
59
62
  }
60
63
 
61
64
  get position() {
@@ -101,8 +104,8 @@ export class ColumnMeta {
101
104
  };
102
105
  }
103
106
 
104
- export class TableMeta {
105
- constructor(private table: Table) {}
107
+ export class TableMeta<DataType = unknown> {
108
+ constructor(private table: Table<DataType>) {}
106
109
 
107
110
  /**
108
111
  * @private
@@ -113,7 +116,7 @@ export class TableMeta {
113
116
  * This is also why the order of the columns is maintained via column key
114
117
  */
115
118
  @tracked
116
- columnOrder = new ColumnOrder({
119
+ columnOrder = new ColumnOrder<DataType>({
117
120
  columns: () => this.allColumns,
118
121
  visibleColumns: () => this.visibleColumns,
119
122
  save: this.save,
@@ -124,7 +127,7 @@ export class TableMeta {
124
127
  * Get the curret order/position of a column
125
128
  */
126
129
  @action
127
- getPosition<DataType = unknown>(column: Column<DataType>) {
130
+ getPosition(column: Column<DataType>) {
128
131
  return this.columnOrder.get(column.key);
129
132
  }
130
133
 
@@ -132,17 +135,14 @@ export class TableMeta {
132
135
  * Swap the column with the column at `newPosition`
133
136
  */
134
137
  @action
135
- setPosition<DataType = unknown>(
136
- column: Column<DataType>,
137
- newPosition: number,
138
- ) {
138
+ setPosition(column: Column<DataType>, newPosition: number) {
139
139
  return this.columnOrder.swapWith(column.key, newPosition);
140
140
  }
141
141
 
142
142
  /**
143
143
  * Using a `ColumnOrder` instance, set the order of all columns
144
144
  */
145
- setOrder = (order: ColumnOrder) => {
145
+ setOrder = (order: ColumnOrder<DataType>) => {
146
146
  this.columnOrder.setAll(order.map);
147
147
  };
148
148
 
@@ -153,7 +153,7 @@ export class TableMeta {
153
153
  @action
154
154
  reset() {
155
155
  preferences.forTable(this.table, ColumnReordering).delete('order');
156
- this.columnOrder = new ColumnOrder({
156
+ this.columnOrder = new ColumnOrder<DataType>({
157
157
  columns: () => this.allColumns,
158
158
  visibleColumns: () => this.visibleColumns,
159
159
  save: this.save,
@@ -217,7 +217,7 @@ export class TableMeta {
217
217
  * @private
218
218
  * Used for keeping track of and updating column order
219
219
  */
220
- export class ColumnOrder {
220
+ export class ColumnOrder<DataType = unknown> {
221
221
  /**
222
222
  * This map will be empty until we re-order something.
223
223
  */
@@ -237,7 +237,7 @@ export class ColumnOrder {
237
237
  * - Provide `visibleColumns` to indicate which are visible
238
238
  * - Hidden columns maintain their position when toggled
239
239
  */
240
- columns: () => Column[];
240
+ columns: () => Column<DataType>[];
241
241
  /**
242
242
  * Optional: Record of which columns are currently visible.
243
243
  * When provided, moveLeft/moveRight will skip over hidden columns.
@@ -496,37 +496,33 @@ export class ColumnOrder {
496
496
  }
497
497
 
498
498
  @cached
499
- get orderedColumns(): Column[] {
499
+ get orderedColumns(): Column<DataType>[] {
500
500
  const allColumns = this.args.columns();
501
501
  const columnsByKey = allColumns.reduce(
502
502
  (keyMap, column) => {
503
503
  keyMap[column.key] = column;
504
504
  return keyMap;
505
505
  },
506
- {} as Record<string, Column>,
506
+ {} as Record<string, Column<DataType>>,
507
507
  );
508
508
  const mergedOrder = orderOf(allColumns, this.map);
509
509
 
510
- const result: Column[] = Array.from({ length: allColumns.length });
510
+ const result: Column<DataType>[] = Array.from({
511
+ length: allColumns.length,
512
+ });
511
513
 
512
514
  for (const [key, position] of mergedOrder.entries()) {
513
515
  const column = columnsByKey[key];
514
516
 
515
- assert(`Could not find column for pair: ${key} @ @{position}`, column);
517
+ // Skip columns that no longer exist (they've been removed from the columns array)
518
+ if (!column) {
519
+ continue;
520
+ }
521
+
516
522
  result[position] = column;
517
523
  }
518
524
 
519
- assert(
520
- `Generated orderedColumns' length (${result.filter(Boolean).length}) ` +
521
- `does not match the length of all columns (${allColumns.length}). ` +
522
- `orderedColumns: ${result
523
- .filter(Boolean)
524
- .map((c) => c.key)
525
- .join(', ')} -- ` +
526
- `all columns: ${allColumns.map((c) => c.key).join(', ')}`,
527
- result.filter(Boolean).length === allColumns.length,
528
- );
529
-
525
+ // Filter out undefined entries (from removed columns or gaps in positions)
530
526
  return result.filter(Boolean);
531
527
  }
532
528
  }
@@ -59,7 +59,9 @@ class ResizeHandle<DataType = unknown> extends Modifier<{
59
59
  }
60
60
 
61
61
  setup = () => {
62
- this.dragHandle.addEventListener('touchstart', this.dragStartHandler);
62
+ this.dragHandle.addEventListener('touchstart', this.dragStartHandler, {
63
+ passive: true,
64
+ });
63
65
  this.dragHandle.addEventListener('mousedown', this.dragStartHandler);
64
66
  this.dragHandle.addEventListener('keydown', this.keyHandler);
65
67
 
@@ -5,6 +5,13 @@ import { ColumnResizing } from './plugin.ts';
5
5
 
6
6
  import type { Column } from '../../index.ts';
7
7
 
8
+ /**
9
+ * Is the column resizable?
10
+ * This checks if resizing is enabled for this specific column,
11
+ */
12
+ export const isResizable = <DataType = unknown>(column: Column<DataType>) =>
13
+ meta.forColumn(column, ColumnResizing).isResizable;
14
+
8
15
  /**
9
16
  * The column actively being resized by the user.
10
17
  *
@@ -211,13 +211,21 @@ export class ColumnMeta {
211
211
  }
212
212
 
213
213
  get hasResizeHandle() {
214
- const previous = columns.previous(this.column);
214
+ const position = this.tableMeta.options?.handlePosition ?? 'left';
215
215
 
216
- if (!previous) return false;
217
-
218
- return (
219
- this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable
220
- );
216
+ if (position === 'right') {
217
+ const next = columns.next(this.column);
218
+ if (!next) return false;
219
+ return (
220
+ this.isResizable && meta.forColumn(next, ColumnResizing).isResizable
221
+ );
222
+ } else {
223
+ const previous = columns.previous(this.column);
224
+ if (!previous) return false;
225
+ return (
226
+ this.isResizable && meta.forColumn(previous, ColumnResizing).isResizable
227
+ );
228
+ }
221
229
  }
222
230
 
223
231
  get width() {
@@ -453,7 +461,7 @@ export class TableMeta {
453
461
  let growingColumn: Column<DataType> | null | undefined;
454
462
 
455
463
  if (position === 'right') {
456
- growingColumn = isDraggingRight ? columns.next(column) : column;
464
+ growingColumn = isDraggingRight ? column : columns.next(column);
457
465
  } else {
458
466
  growingColumn = isDraggingRight ? columns.previous(column) : column;
459
467
  }