@universal-ember/table 3.0.2 → 3.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declarations/-private/-type-tests/plugin-properties.test.d.ts +2 -0
- package/declarations/-private/-type-tests/plugin-properties.test.d.ts.map +1 -0
- package/declarations/-private/-type-tests/plugin-with.test.d.ts +2 -0
- package/declarations/-private/-type-tests/plugin-with.test.d.ts.map +1 -0
- package/declarations/-private/-type-tests/plugins-accessors.test.d.ts +2 -0
- package/declarations/-private/-type-tests/plugins-accessors.test.d.ts.map +1 -0
- package/declarations/-private/-type-tests/plugins-signature-from.test.d.ts +2 -0
- package/declarations/-private/-type-tests/plugins-signature-from.test.d.ts.map +1 -0
- package/declarations/-private/-type-tests/plugins-signature-utils.test.d.ts +2 -0
- package/declarations/-private/-type-tests/plugins-signature-utils.test.d.ts.map +1 -0
- package/declarations/-private/-type-tests/table-api.test.d.ts +2 -0
- package/declarations/-private/-type-tests/table-api.test.d.ts.map +1 -0
- package/declarations/-private/-type-tests/table-config.test.d.ts +2 -0
- package/declarations/-private/-type-tests/table-config.test.d.ts.map +1 -0
- package/declarations/-private/column.d.ts +18 -0
- package/declarations/-private/column.d.ts.map +1 -0
- package/declarations/-private/ember-compat.d.ts +8 -0
- package/declarations/-private/ember-compat.d.ts.map +1 -0
- package/declarations/-private/interfaces/column.d.ts +63 -0
- package/declarations/-private/interfaces/column.d.ts.map +1 -0
- package/declarations/-private/interfaces/index.d.ts +8 -0
- package/declarations/-private/interfaces/index.d.ts.map +1 -0
- package/declarations/-private/interfaces/modifier.d.ts +7 -0
- package/declarations/-private/interfaces/modifier.d.ts.map +1 -0
- package/declarations/-private/interfaces/pagination.d.ts +17 -0
- package/declarations/-private/interfaces/pagination.d.ts.map +1 -0
- package/declarations/-private/interfaces/plugins.d.ts +315 -0
- package/declarations/-private/interfaces/plugins.d.ts.map +1 -0
- package/declarations/-private/interfaces/preferences.d.ts +74 -0
- package/declarations/-private/interfaces/preferences.d.ts.map +1 -0
- package/declarations/-private/interfaces/selection.d.ts +36 -0
- package/declarations/-private/interfaces/selection.d.ts.map +1 -0
- package/declarations/-private/interfaces/table.d.ts +109 -0
- package/declarations/-private/interfaces/table.d.ts.map +1 -0
- package/declarations/-private/js-helper.d.ts +39 -0
- package/declarations/-private/js-helper.d.ts.map +1 -0
- package/declarations/-private/preferences.d.ts +45 -0
- package/declarations/-private/preferences.d.ts.map +1 -0
- package/declarations/-private/private-types.d.ts +6 -0
- package/declarations/-private/private-types.d.ts.map +1 -0
- package/declarations/-private/row.d.ts +12 -0
- package/declarations/-private/row.d.ts.map +1 -0
- package/declarations/-private/table.d.ts +136 -0
- package/declarations/-private/table.d.ts.map +1 -0
- package/declarations/-private/utils.d.ts +3 -0
- package/declarations/-private/utils.d.ts.map +1 -0
- package/declarations/index.d.ts +14 -0
- package/declarations/index.d.ts.map +1 -0
- package/declarations/plugins/-private/base.d.ts +281 -0
- package/declarations/plugins/-private/base.d.ts.map +1 -0
- package/declarations/plugins/-private/utils.d.ts +22 -0
- package/declarations/plugins/-private/utils.d.ts.map +1 -0
- package/declarations/plugins/column-reordering/helpers.d.ts +35 -0
- package/declarations/plugins/column-reordering/helpers.d.ts.map +1 -0
- package/declarations/plugins/column-reordering/index.d.ts +5 -0
- package/declarations/plugins/column-reordering/index.d.ts.map +1 -0
- package/declarations/plugins/column-reordering/plugin.d.ts +148 -0
- package/declarations/plugins/column-reordering/plugin.d.ts.map +1 -0
- package/declarations/plugins/column-reordering/utils.d.ts +8 -0
- package/declarations/plugins/column-reordering/utils.d.ts.map +1 -0
- package/declarations/plugins/column-resizing/handle.d.ts +128 -0
- package/declarations/plugins/column-resizing/handle.d.ts.map +1 -0
- package/declarations/plugins/column-resizing/helpers.d.ts +35 -0
- package/declarations/plugins/column-resizing/helpers.d.ts.map +1 -0
- package/declarations/plugins/column-resizing/index.d.ts +6 -0
- package/declarations/plugins/column-resizing/index.d.ts.map +1 -0
- package/declarations/plugins/column-resizing/plugin.d.ts +160 -0
- package/declarations/plugins/column-resizing/plugin.d.ts.map +1 -0
- package/declarations/plugins/column-resizing/resize-observer.d.ts +14 -0
- package/declarations/plugins/column-resizing/resize-observer.d.ts.map +1 -0
- package/declarations/plugins/column-resizing/utils.d.ts +22 -0
- package/declarations/plugins/column-resizing/utils.d.ts.map +1 -0
- package/declarations/plugins/column-visibility/helpers.d.ts +18 -0
- package/declarations/plugins/column-visibility/helpers.d.ts.map +1 -0
- package/declarations/plugins/column-visibility/index.d.ts +5 -0
- package/declarations/plugins/column-visibility/index.d.ts.map +1 -0
- package/declarations/plugins/column-visibility/plugin.d.ts +64 -0
- package/declarations/plugins/column-visibility/plugin.d.ts.map +1 -0
- package/declarations/plugins/data-sorting/helpers.d.ts +38 -0
- package/declarations/plugins/data-sorting/helpers.d.ts.map +1 -0
- package/declarations/plugins/data-sorting/index.d.ts +7 -0
- package/declarations/plugins/data-sorting/index.d.ts.map +1 -0
- package/declarations/plugins/data-sorting/plugin.d.ts +102 -0
- package/declarations/plugins/data-sorting/plugin.d.ts.map +1 -0
- package/declarations/plugins/data-sorting/types.d.ts +23 -0
- package/declarations/plugins/data-sorting/types.d.ts.map +1 -0
- package/declarations/plugins/index.d.ts +6 -0
- package/declarations/plugins/index.d.ts.map +1 -0
- package/declarations/plugins/metadata/helpers.d.ts +4 -0
- package/declarations/plugins/metadata/helpers.d.ts.map +1 -0
- package/declarations/plugins/metadata/index.d.ts +5 -0
- package/declarations/plugins/metadata/index.d.ts.map +1 -0
- package/declarations/plugins/metadata/plugin.d.ts +25 -0
- package/declarations/plugins/metadata/plugin.d.ts.map +1 -0
- package/declarations/plugins/row-selection/helpers.d.ts +6 -0
- package/declarations/plugins/row-selection/helpers.d.ts.map +1 -0
- package/declarations/plugins/row-selection/index.d.ts +5 -0
- package/declarations/plugins/row-selection/index.d.ts.map +1 -0
- package/declarations/plugins/row-selection/plugin.d.ts +80 -0
- package/declarations/plugins/row-selection/plugin.d.ts.map +1 -0
- package/declarations/plugins/sticky-columns/helpers.d.ts +17 -0
- package/declarations/plugins/sticky-columns/helpers.d.ts.map +1 -0
- package/declarations/plugins/sticky-columns/index.d.ts +5 -0
- package/declarations/plugins/sticky-columns/index.d.ts.map +1 -0
- package/declarations/plugins/sticky-columns/plugin.d.ts +70 -0
- package/declarations/plugins/sticky-columns/plugin.d.ts.map +1 -0
- package/declarations/test-support/index.d.ts +15 -0
- package/declarations/test-support/index.d.ts.map +1 -0
- package/declarations/utils.d.ts +26 -0
- package/declarations/utils.d.ts.map +1 -0
- package/dist/plugins/column-reordering/helpers.js +11 -5
- package/dist/plugins/column-reordering/helpers.js.map +1 -1
- package/dist/plugins/column-reordering/plugin.js.map +1 -1
- package/dist/plugins/column-resizing/handle.js.map +1 -1
- package/dist/plugins/column-resizing/helpers.js.map +1 -1
- package/dist/plugins/column-resizing/plugin.js.map +1 -1
- package/dist/plugins/column-visibility/helpers.js.map +1 -1
- package/dist/plugins/data-sorting/helpers.js.map +1 -1
- package/dist/plugins/data-sorting/plugin.js.map +1 -1
- package/package.json +2 -1
- package/src/plugins/column-reordering/helpers.ts +18 -11
- package/src/plugins/column-reordering/plugin.ts +5 -2
- package/src/plugins/column-resizing/handle.ts +6 -4
- package/src/plugins/column-resizing/helpers.ts +3 -3
- package/src/plugins/column-resizing/plugin.ts +2 -2
- package/src/plugins/column-visibility/helpers.ts +4 -4
- package/src/plugins/data-sorting/helpers.ts +8 -8
- package/src/plugins/data-sorting/plugin.ts +3 -3
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { BasePlugin } from '../-private/base.ts';
|
|
2
|
+
import type { Row, Table } from '../../index.ts';
|
|
3
|
+
import type { PluginSignature, RowApi } from '../../-private/interfaces';
|
|
4
|
+
export interface Signature<DataType = any, Key = DataType> extends PluginSignature {
|
|
5
|
+
Meta: {
|
|
6
|
+
Table: TableMeta;
|
|
7
|
+
Row: RowMeta;
|
|
8
|
+
};
|
|
9
|
+
Options: {
|
|
10
|
+
Plugin: {
|
|
11
|
+
/**
|
|
12
|
+
* A set of selected things using the same type of Identifier
|
|
13
|
+
* returned from `key`
|
|
14
|
+
*/
|
|
15
|
+
selection: Set<Key> | Array<Key>;
|
|
16
|
+
} & ({
|
|
17
|
+
/**
|
|
18
|
+
* For a given row's data, how should the key be determined?
|
|
19
|
+
* this could be a remote id from a database, or some other attribute
|
|
20
|
+
*
|
|
21
|
+
* This could be useful for indicating in UI if a particular item is selected.
|
|
22
|
+
*
|
|
23
|
+
* If not provided, the row's data will be used as the key
|
|
24
|
+
*/
|
|
25
|
+
key: (data: DataType) => Key;
|
|
26
|
+
/**
|
|
27
|
+
* When a row is clicked, this will be invoked,
|
|
28
|
+
* allowing you to update your selection object
|
|
29
|
+
*/
|
|
30
|
+
onSelect: (item: Key, row: Row<DataType>) => void;
|
|
31
|
+
/**
|
|
32
|
+
* When a row is clicked (and the row is selected), this will be invoked,
|
|
33
|
+
* allowing you to update your selection object
|
|
34
|
+
*/
|
|
35
|
+
onDeselect: (item: Key, row: Row<DataType>) => void;
|
|
36
|
+
} | {
|
|
37
|
+
/**
|
|
38
|
+
* When a row is clicked (and the row is not selected), this will be invoked,
|
|
39
|
+
* allowing you to update your selection object
|
|
40
|
+
*/
|
|
41
|
+
onSelect: (item: DataType | any, row: Row<DataType>) => void;
|
|
42
|
+
/**
|
|
43
|
+
* When a row is clicked (and the row is selected), this will be invoked,
|
|
44
|
+
* allowing you to update your selection object
|
|
45
|
+
*/
|
|
46
|
+
onDeselect: (item: DataType | any, row: Row<DataType>) => void;
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* This plugin provides a means of managing selection of a single row in a table.
|
|
52
|
+
*
|
|
53
|
+
* The state of what is actually selected is managed by you, but this plugin
|
|
54
|
+
* will wire up the click listeners as well as let you know which *data* is clicked.
|
|
55
|
+
*/
|
|
56
|
+
export declare class RowSelection<DataType = any, Key = DataType> extends BasePlugin<Signature<DataType, Key>> {
|
|
57
|
+
#private;
|
|
58
|
+
name: string;
|
|
59
|
+
meta: {
|
|
60
|
+
row: typeof RowMeta;
|
|
61
|
+
table: typeof TableMeta;
|
|
62
|
+
};
|
|
63
|
+
constructor(table: Table);
|
|
64
|
+
rowModifier: (element: HTMLElement, { row }: RowApi<Table<any>>) => () => void;
|
|
65
|
+
}
|
|
66
|
+
declare class TableMeta {
|
|
67
|
+
#private;
|
|
68
|
+
constructor(table: Table);
|
|
69
|
+
get selection(): Set<unknown>;
|
|
70
|
+
}
|
|
71
|
+
declare class RowMeta {
|
|
72
|
+
#private;
|
|
73
|
+
constructor(row: Row<any>);
|
|
74
|
+
get isSelected(): boolean;
|
|
75
|
+
toggle: () => void;
|
|
76
|
+
select: () => void;
|
|
77
|
+
deselect: () => void;
|
|
78
|
+
}
|
|
79
|
+
export {};
|
|
80
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/row-selection/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAEhE,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEzE,MAAM,WAAW,SAAS,CAAC,QAAQ,GAAG,GAAG,EAAE,GAAG,GAAG,QAAQ,CACvD,SAAQ,eAAe;IACvB,IAAI,EAAE;QACJ,KAAK,EAAE,SAAS,CAAC;QACjB,GAAG,EAAE,OAAO,CAAC;KACd,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE;YACN;;;eAGG;YACH,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;SAClC,GAAG,CACA;YACE;;;;;;;eAOG;YACH,GAAG,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,GAAG,CAAC;YAC7B;;;eAGG;YACH,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;YAClD;;;eAGG;YACH,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;SACrD,GACD;YACE;;;eAGG;YACH,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;YAC7D;;;eAGG;YACH,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;SAChE,CACJ,CAAC;KACH,CAAC;CACH;AAED;;;;;GAKG;AACH,qBAAa,YAAY,CAAC,QAAQ,GAAG,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAE,SAAQ,UAAU,CAC1E,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CACzB;;IACC,IAAI,SAAmB;IAEvB,IAAI;;;MAGF;gBAEU,KAAK,EAAE,KAAK;IAcxB,WAAW,GAAI,SAAS,WAAW,EAAE,SAAS,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,gBAU9D;CAiCH;AAED,cAAM,SAAS;;gBAGD,KAAK,EAAE,KAAK;IAIxB,IACI,SAAS,IAAI,GAAG,CAAC,OAAO,CAAC,CAa5B;CACF;AAED,cAAM,OAAO;;gBAGC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IAIzB,IAAI,UAAU,IAAI,OAAO,CAaxB;IAED,MAAM,aAQJ;IAEF,MAAM,aAYJ;IAEF,QAAQ,aAYN;CACH"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { htmlSafe } from '@ember/template';
|
|
2
|
+
import type { Column } from '../../index.ts';
|
|
3
|
+
export declare const isSticky: <DataType = unknown>(column: Column<DataType>) => boolean;
|
|
4
|
+
export declare const styleFor: <DataType = unknown>(column: Column<DataType>) => Partial<CSSStyleDeclaration>;
|
|
5
|
+
/**
|
|
6
|
+
* In this plugin, both header and cells have the same styles,
|
|
7
|
+
* if applicable.
|
|
8
|
+
*
|
|
9
|
+
* Until this RFC https://github.com/emberjs/rfcs/pull/883
|
|
10
|
+
* is merged and implemented, we can't performantly
|
|
11
|
+
* use modifiers for apply styles.
|
|
12
|
+
*
|
|
13
|
+
* In the mean time, we'll need to append style strings, which is more work
|
|
14
|
+
* for consumers, but is a reasonable trade-off for now.
|
|
15
|
+
*/
|
|
16
|
+
export declare const styleStringFor: <DataType = unknown>(column: Column<DataType>) => ReturnType<typeof htmlSafe>;
|
|
17
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/plugins/sticky-columns/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAK3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,QAAQ,GAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,YACrB,CAAC;AAEjD,eAAO,MAAM,QAAQ,GAAI,QAAQ,GAAG,OAAO,EACzC,QAAQ,MAAM,CAAC,QAAQ,CAAC,KACvB,OAAO,CAAC,mBAAmB,CAAgD,CAAC;AAE/E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,OAAO,EAC/C,QAAQ,MAAM,CAAC,QAAQ,CAAC,KACvB,UAAU,CAAC,OAAO,QAAQ,CAc5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/sticky-columns/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAGtD,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { BasePlugin } from '../-private/base.ts';
|
|
2
|
+
import type { ColumnApi } from '../../plugins/index.ts';
|
|
3
|
+
import type { Column } from '../../index.ts';
|
|
4
|
+
interface ColumnOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Whether or not to enable stickiness on the column
|
|
7
|
+
* (default is false)
|
|
8
|
+
*
|
|
9
|
+
* valid values: 'left', 'right', false
|
|
10
|
+
*/
|
|
11
|
+
sticky?: boolean | string;
|
|
12
|
+
}
|
|
13
|
+
export interface Signature {
|
|
14
|
+
Options: {
|
|
15
|
+
Column: ColumnOptions;
|
|
16
|
+
Plugin: {
|
|
17
|
+
/**
|
|
18
|
+
* Opts this plugin out of engaging in the modifier system
|
|
19
|
+
* and instead requires setting a `style` attribute on
|
|
20
|
+
* th / td tags for getting the "position: sticky" behovior
|
|
21
|
+
* on columns.
|
|
22
|
+
*/
|
|
23
|
+
workaroundForModifierTimingUpdateRFC883?: boolean;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
Meta: {
|
|
27
|
+
Table: TableMeta;
|
|
28
|
+
Column: ColumnMeta;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export declare class StickyColumns extends BasePlugin<Signature> {
|
|
32
|
+
name: string;
|
|
33
|
+
/**
|
|
34
|
+
* This plugin requires that the resizing plugin be present, because the resizing plugin is
|
|
35
|
+
* what manages the base width of the columns.
|
|
36
|
+
*
|
|
37
|
+
* Other width-management plugins can be used instead of ColumnResizing, but they must declare
|
|
38
|
+
* that they manage the width of the columns.
|
|
39
|
+
*/
|
|
40
|
+
static requires: string[];
|
|
41
|
+
meta: {
|
|
42
|
+
table: typeof TableMeta;
|
|
43
|
+
column: typeof ColumnMeta;
|
|
44
|
+
};
|
|
45
|
+
conditionallyRemoveStyles: (element: HTMLElement) => void;
|
|
46
|
+
headerCellModifier: (element: HTMLElement, { column, table }: ColumnApi) => void;
|
|
47
|
+
/**
|
|
48
|
+
* Not yet supported. Pending Ember RFC #883
|
|
49
|
+
*
|
|
50
|
+
* TODO: switch ColumnApi to "RowApi", add the row's data
|
|
51
|
+
*/
|
|
52
|
+
cellModifier: (element: HTMLElement, { column, table }: ColumnApi) => void;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @private
|
|
56
|
+
*
|
|
57
|
+
* Contains state and behaviors for the sticiness
|
|
58
|
+
*/
|
|
59
|
+
export declare class ColumnMeta {
|
|
60
|
+
private column;
|
|
61
|
+
constructor(column: Column);
|
|
62
|
+
get isSticky(): boolean;
|
|
63
|
+
get position(): 'left' | 'right' | 'none';
|
|
64
|
+
get offset(): string | undefined;
|
|
65
|
+
get style(): Partial<Pick<CSSStyleDeclaration, 'position' | 'left' | 'right' | 'zIndex'>>;
|
|
66
|
+
}
|
|
67
|
+
export declare class TableMeta {
|
|
68
|
+
}
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/sticky-columns/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAA0B,MAAM,qBAAqB,CAAC;AAGzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,UAAU,aAAa;IACrB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE;QACP,MAAM,EAAE,aAAa,CAAC;QACtB,MAAM,EAAE;YACN;;;;;eAKG;YACH,uCAAuC,CAAC,EAAE,OAAO,CAAC;SACnD,CAAC;KACH,CAAC;IACF,IAAI,EAAE;QACJ,KAAK,EAAE,SAAS,CAAC;QACjB,MAAM,EAAE,UAAU,CAAC;KACpB,CAAC;CACH;AAED,qBAAa,aAAc,SAAQ,UAAU,CAAC,SAAS,CAAC;IACtD,IAAI,SAAoB;IAExB;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,WAAmB;IAElC,IAAI;;;MAGF;IAEF,yBAAyB,GAAI,SAAS,WAAW,UAgB/C;IAEF,kBAAkB,GAAI,SAAS,WAAW,EAAE,mBAAmB,SAAS,UAetE;IAEF;;;;OAIG;IACH,YAAY,GAAI,SAAS,WAAW,EAAE,mBAAmB,SAAS,UAehE;CACH;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC,IAAI,QAAQ,YAEX;IAED,IAAI,QAAQ,IAAI,MAAM,GAAG,OAAO,GAAG,MAAM,CAYxC;IAED,IACI,MAAM,uBAoCT;IAED,IAAI,KAAK,IAAI,OAAO,CAClB,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,CACpE,CAUA;CACF;AAOD,qBAAa,SAAS;CAAG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface Selectors {
|
|
2
|
+
resizeHandle?: string;
|
|
3
|
+
scrollContainer?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function createHelpers(selectors: Selectors): {
|
|
6
|
+
dragLeft: (column: Element, amount: number) => Promise<void>;
|
|
7
|
+
dragRight: (column: Element, amount: number) => Promise<void>;
|
|
8
|
+
scrollLeft: (distance: number) => Promise<void>;
|
|
9
|
+
scrollRight: (distance: number) => Promise<void>;
|
|
10
|
+
swipeLeft: (distance: number) => Promise<void>;
|
|
11
|
+
swipeRight: (distance: number) => Promise<void>;
|
|
12
|
+
};
|
|
13
|
+
export declare function requestAnimationFrameSettled(): Promise<void>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-support/index.ts"],"names":[],"mappings":"AAGA,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS;uBAuD3B,OAAO,UAAU,MAAM;wBACtB,OAAO,UAAU,MAAM;2BATT,MAAM;4BAPL,MAAM;0BAAN,MAAM;2BAOP,MAAM;EAe3C;AAED,wBAAsB,4BAA4B,kBAGjD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Sort, SortsOptions } from './plugins/data-sorting/types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* @example
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* deserializeSorts('first_name.asc', { separator: '.', transform: 'camelize' });
|
|
7
|
+
* // => [{ property: 'firstName', direction: 'ascending' }]
|
|
8
|
+
*
|
|
9
|
+
* deserializeSorts('last_name.desc', { separator: '.', transform: 'camelize' });
|
|
10
|
+
* // => [{ property: 'lastName', direction: 'descending' }]
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare const deserializeSorts: (sortString: string, options?: SortsOptions) => Sort[];
|
|
14
|
+
/**
|
|
15
|
+
* @example
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* serializeSorts([{ property: 'firstName', direction: 'ascending' }],{ separator: '.', transform: 'camelize' });
|
|
19
|
+
* // => 'first_name.asc'
|
|
20
|
+
*
|
|
21
|
+
* serializeSorts([{ property: 'lastName', direction: 'descending' }],{ separator: '.', transform: 'camelize' });
|
|
22
|
+
* // => 'last_name.desc'
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function serializeSorts(sorts: Sort[], options?: SortsOptions): string;
|
|
26
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,gBAAgB,GAC3B,YAAY,MAAM,EAClB,UAAS,YAAwD,KAChE,IAAI,EA4BN,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,YAA0D,GAClE,MAAM,CAkBR"}
|
|
@@ -16,9 +16,7 @@ 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) =>
|
|
20
|
-
return meta.forTable(table, ColumnReordering).setOrder(order);
|
|
21
|
-
};
|
|
19
|
+
const setColumnOrder = (table, order) => meta.forTable(table, ColumnReordering).setOrder(order);
|
|
22
20
|
|
|
23
21
|
/**
|
|
24
22
|
* Ask if the column cannot move to the left
|
|
@@ -32,13 +30,21 @@ const cannotMoveRight = column => meta.forColumn(column, ColumnReordering).canno
|
|
|
32
30
|
|
|
33
31
|
/**
|
|
34
32
|
* Ask if the column can move to the left
|
|
33
|
+
* (If your plugin doesn't expose `canMoveLeft`, use `!cannotMoveLeft`.)
|
|
35
34
|
*/
|
|
36
|
-
const canMoveLeft = column =>
|
|
35
|
+
const canMoveLeft = column =>
|
|
36
|
+
// Prefer this if available:
|
|
37
|
+
// meta.forColumn(column, ColumnReordering).canMoveLeft
|
|
38
|
+
!meta.forColumn(column, ColumnReordering).cannotMoveLeft;
|
|
37
39
|
|
|
38
40
|
/**
|
|
39
41
|
* Ask if the column can move to the right
|
|
42
|
+
* (If your plugin doesn't expose `canMoveRight`, use `!cannotMoveRight`.)
|
|
40
43
|
*/
|
|
41
|
-
const canMoveRight = column =>
|
|
44
|
+
const canMoveRight = column =>
|
|
45
|
+
// Prefer this if available:
|
|
46
|
+
// meta.forColumn(column, ColumnReordering).canMoveRight
|
|
47
|
+
!meta.forColumn(column, ColumnReordering).cannotMoveRight;
|
|
42
48
|
|
|
43
49
|
export { canMoveLeft, canMoveRight, cannotMoveLeft, cannotMoveRight, moveLeft, moveRight, setColumnOrder };
|
|
44
50
|
//# 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 = (column: Column) =>\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 = (column: Column) =>\n meta.forColumn(column, ColumnReordering).moveRight();\n\n/**\n * Override all column positions at once.\n */\nexport const setColumnOrder = (table: Table
|
|
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 +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 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.availableColumns,\n save: this.save,\n existingOrder: this.read(),\n });\n\n /**\n * Get the curret order/position of a column\n */\n @action\n getPosition(column: Column) {\n return this.columnOrder.get(column.key);\n }\n\n /**\n * Swap the column with the column at `newPosition`\n */\n @action\n setPosition(column: Column, newPosition: number) {\n return this.columnOrder.swapWith(column.key, newPosition);\n }\n\n /**\n * Using a `ColumnOrder` instance, set the order of all columns\n */\n setOrder = (order: ColumnOrder) => {\n this.columnOrder.setAll(order.map);\n };\n\n /**\n * Revert to default config, delete preferences,\n * and clear the columnOrder\n */\n @action\n reset() {\n preferences.forTable(this.table, ColumnReordering).delete('order');\n this.columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n });\n }\n\n /**\n * @private\n */\n @action\n save(map: Map<string, number>) {\n 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;\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get availableColumns() {\n return columns.for(this.table, ColumnReordering);\n }\n}\n\n/**\n * @private\n * Used for keeping track of and updating column order\n */\nexport class ColumnOrder {\n /**\n * This map will be empty until we re-order something.\n */\n map = new TrackedMap<string, number>();\n\n constructor(\n private args: {\n columns: () => Column[];\n save?: (order: Map<string, number>) => void;\n existingOrder?: Map<string, number>;\n },\n ) {\n if (args.existingOrder) {\n this.map = new TrackedMap(args.existingOrder);\n }\n }\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the previous \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveLeft(key: string) {\n const orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (const column of orderedColumns.reverse()) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n const nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n setAll = (map: Map<string, number>) => {\n this.map.clear();\n\n for (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\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (const column of orderedColumns) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n const nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n /**\n * Performs a swap of the column's position with the column at position\n */\n @action\n swapWith(key: string, position: number) {\n 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 availableColumns are: ` +\n this.args\n .columns()\n .map((column) => column.key)\n .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 availableColumns = this.args.columns();\n const availableByKey = availableColumns.reduce(\n (keyMap, column) => {\n keyMap[column.key] = column;\n\n return keyMap;\n },\n {} as Record<string, Column>,\n );\n const mergedOrder = orderOf(availableColumns, this.map);\n\n const result: Column[] = Array.from({ length: availableColumns.length });\n\n for (const [key, position] of mergedOrder.entries()) {\n const column = availableByKey[key];\n\n assert(`Could not find column for pair: ${key} @ @{position}`, column);\n result[position] = column;\n }\n\n assert(\n `Generated orderedColumns' length (${result.filter(Boolean).length}) ` +\n `does not match the length of available columns (${availableColumns.length}). ` +\n `orderedColumns: ${result\n .filter(Boolean)\n .map((c) => c.key)\n .join(', ')} -- ` +\n `available columns: ${availableColumns.map((c) => c.key).join(', ')}`,\n result.filter(Boolean).length === availableColumns.length,\n );\n\n return result.filter(Boolean);\n }\n}\n\n/**\n * @private\n *\n * Utility for helping determine the percieved order of a set of columns\n * given the original (default) ordering, and then user-configurations\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>,\n): Map<string, number> {\n const result = new Map<string, number>();\n const availableColumns = columns.map((column) => column.key);\n const availableSet = new Set(availableColumns);\n const current = new Map<number, string>(\n [...currentOrder.entries()].map(([key, position]) => [position, key]),\n );\n\n /**\n * O(n * log(n)) ?\n */\n for (let i = 0; i < Math.max(columns.length, current.size); i++) {\n const orderedKey = current.get(i);\n\n if (orderedKey) {\n /**\n * If the currentOrder specifies columns not presently available,\n * ignore them\n */\n if (availableSet.has(orderedKey)) {\n result.set(orderedKey, i);\n continue;\n }\n }\n\n let availableKey: string | undefined;\n\n while ((availableKey = availableColumns.shift())) {\n if (result.has(availableKey) || currentOrder.has(availableKey)) {\n continue;\n }\n\n break;\n }\n\n if (!availableKey) {\n /**\n * The rest of our columns likely have their order set\n */\n continue;\n }\n\n result.set(availableKey, i);\n }\n\n return result;\n}\n"],"names":["ColumnReordering","BasePlugin","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","availableColumns","save","entries","set","read","Map","Object","orderedColumns","for","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","existingOrder","action","getOwnPropertyDescriptor","_class2","TrackedMap","clear","found","nextColumn","reverse","nextPosition","validPositions","orderedMap","values","includes","currentPosition","assert","entry","join","size","undefined","keyByPosition","existingPosition","has","result","orderOf","availableByKey","reduce","keyMap","mergedOrder","Array","from","filter","Boolean","c","cached","currentOrder","availableSet","Set","current","i","Math","max","orderedKey","availableKey","shift"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-reordering/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { TrackedMap } from 'tracked-built-ins';\n\nimport { preferences } from '../../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 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.availableColumns,\n save: this.save,\n existingOrder: this.read(),\n });\n\n /**\n * Get the curret order/position of a column\n */\n @action\n getPosition<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.availableColumns,\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;\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get availableColumns() {\n return columns.for(this.table, ColumnReordering);\n }\n}\n\n/**\n * @private\n * Used for keeping track of and updating column order\n */\nexport class ColumnOrder {\n /**\n * This map will be empty until we re-order something.\n */\n map = new TrackedMap<string, number>();\n\n constructor(\n private args: {\n columns: () => Column[];\n save?: (order: Map<string, number>) => void;\n existingOrder?: Map<string, number>;\n },\n ) {\n if (args.existingOrder) {\n this.map = new TrackedMap(args.existingOrder);\n }\n }\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the previous \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveLeft(key: string) {\n const orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (const column of orderedColumns.reverse()) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n const nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n setAll = (map: Map<string, number>) => {\n this.map.clear();\n\n for (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\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (const column of orderedColumns) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n const nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n /**\n * Performs a swap of the column's position with the column at position\n */\n @action\n swapWith(key: string, position: number) {\n 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 availableColumns are: ` +\n this.args\n .columns()\n .map((column) => column.key)\n .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 availableColumns = this.args.columns();\n const availableByKey = availableColumns.reduce(\n (keyMap, column) => {\n keyMap[column.key] = column;\n\n return keyMap;\n },\n {} as Record<string, Column>,\n );\n const mergedOrder = orderOf(availableColumns, this.map);\n\n const result: Column[] = Array.from({ length: availableColumns.length });\n\n for (const [key, position] of mergedOrder.entries()) {\n const column = availableByKey[key];\n\n assert(`Could not find column for pair: ${key} @ @{position}`, column);\n result[position] = column;\n }\n\n assert(\n `Generated orderedColumns' length (${result.filter(Boolean).length}) ` +\n `does not match the length of available columns (${availableColumns.length}). ` +\n `orderedColumns: ${result\n .filter(Boolean)\n .map((c) => c.key)\n .join(', ')} -- ` +\n `available columns: ${availableColumns.map((c) => c.key).join(', ')}`,\n result.filter(Boolean).length === availableColumns.length,\n );\n\n return result.filter(Boolean);\n }\n}\n\n/**\n * @private\n *\n * Utility for helping determine the percieved order of a set of columns\n * given the original (default) ordering, and then user-configurations\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>,\n): Map<string, number> {\n const result = new Map<string, number>();\n const availableColumns = columns.map((column) => column.key);\n const availableSet = new Set(availableColumns);\n const current = new Map<number, string>(\n [...currentOrder.entries()].map(([key, position]) => [position, key]),\n );\n\n /**\n * O(n * log(n)) ?\n */\n for (let i = 0; i < Math.max(columns.length, current.size); i++) {\n const orderedKey = current.get(i);\n\n if (orderedKey) {\n /**\n * If the currentOrder specifies columns not presently available,\n * ignore them\n */\n if (availableSet.has(orderedKey)) {\n result.set(orderedKey, i);\n continue;\n }\n }\n\n let availableKey: string | undefined;\n\n while ((availableKey = availableColumns.shift())) {\n if (result.has(availableKey) || currentOrder.has(availableKey)) {\n continue;\n }\n\n break;\n }\n\n if (!availableKey) {\n /**\n * The rest of our columns likely have their order set\n */\n continue;\n }\n\n result.set(availableKey, i);\n }\n\n return result;\n}\n"],"names":["ColumnReordering","BasePlugin","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","availableColumns","save","entries","set","read","Map","Object","orderedColumns","for","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","existingOrder","action","getOwnPropertyDescriptor","_class2","TrackedMap","clear","found","nextColumn","reverse","nextPosition","validPositions","orderedMap","values","includes","currentPosition","assert","entry","join","size","undefined","keyByPosition","existingPosition","has","result","orderOf","availableByKey","reduce","keyMap","mergedOrder","Array","from","filter","Boolean","c","cached","currentOrder","availableSet","Set","current","i","Math","max","orderedKey","availableKey","shift"],"mappings":"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"}
|
|
@@ -1 +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 extends Modifier<{ Args: { Positional: [Column] } }> {\n declare dragHandle: HTMLElement;\n declare column: Column;\n declare meta: ColumnMeta;\n\n // Pointer\n pointerStartX = 0;\n pointerStartY = 0;\n pointerX = 0;\n pointerY = 0;\n declare dragFrame: number;\n\n // Keyboard\n keyDistance = 0;\n declare keyFrame: number; // ha\n declare lastKey: number;\n\n // waiter\n token?: unknown;\n\n isSetup = false;\n modify(element: Element, [column]: [Column]) {\n this.column = column;\n this.meta = meta.forColumn(column, ColumnResizing);\n this.dragHandle = element as HTMLElement;\n\n if (!this.isSetup) {\n this.isSetup = true;\n this.setup();\n }\n }\n\n setup = () => {\n this.dragHandle.addEventListener('touchstart', this.dragStartHandler);\n this.dragHandle.addEventListener('mousedown', this.dragStartHandler);\n this.dragHandle.addEventListener('keydown', this.keyHandler);\n\n registerDestructor(this, () => {\n this.meta.isResizing = false;\n\n if (this.token) {\n waiter.endAsync(this.token);\n this.token = undefined;\n }\n\n this.dragHandle.removeEventListener('touchstart', this.dragStartHandler);\n this.dragHandle.removeEventListener('mousedown', this.dragStartHandler);\n window.removeEventListener('touchmove', this.dragMove);\n window.removeEventListener('touchend', this.dragEndHandler);\n window.removeEventListener('mousemove', this.dragMove);\n window.removeEventListener('mouseup', this.dragEndHandler);\n this.dragHandle.removeEventListener('keydown', this.keyHandler);\n });\n };\n\n setPosition = (event: Event) => {\n if (!(event instanceof PointerEvent || event instanceof MouseEvent)) return;\n\n if ('TouchEvent' in window && event instanceof TouchEvent) {\n 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 = 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,CAAW,EAAE;IAC3C,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,YAAY,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 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 +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 = (column: Column) =>\n meta.forColumn(column, ColumnResizing).isResizing;\n\n/**\n * Does the column have room to shrink?\n */\nexport const canShrink = (column: Column) =>\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 = (column: Column) =>\n meta.forColumn(column, ColumnResizing).hasResizeHandle;\n\n/**\n * In this plugin (by default), styles are only applied to the headers automatically.\n * in <Table> UIs, the header cells control the widths of all cells in that column.\n * There are other kinds of tabular-like markup that may want to grab the widths of columns,\n * because The Platform does not manage that automatically (like if divs and roles were used manually)\n *\n * This utility is meant to be applied to the `style` attribute of a particular td-like element.\n */\nexport const styleStringFor = <DataType = unknown>(\n column: Column<DataType>,\n): ReturnType<typeof htmlSafe> => {\n 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,
|
|
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;;;;"}
|