ember-headless-table 0.0.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon-main.js +5 -0
- package/dist/-private/-type-tests/plugin-properties.test.d.ts +2 -0
- package/dist/-private/-type-tests/plugin-properties.test.d.ts.map +1 -0
- package/dist/-private/-type-tests/plugin-properties.test.js +31 -0
- package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -0
- package/dist/-private/-type-tests/plugin-with.test.d.ts +1 -0
- package/dist/-private/-type-tests/plugin-with.test.js +21 -0
- package/dist/-private/-type-tests/plugin-with.test.js.map +1 -0
- package/dist/-private/-type-tests/plugins-accessors.test.d.ts +1 -0
- package/dist/-private/-type-tests/plugins-accessors.test.js +36 -0
- package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -0
- package/dist/-private/-type-tests/plugins-signature-from.test.d.ts +1 -0
- package/dist/-private/-type-tests/plugins-signature-from.test.js +14 -0
- package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -0
- package/dist/-private/-type-tests/plugins-signature-utils.test.d.ts +1 -0
- package/dist/-private/-type-tests/plugins-signature-utils.test.js +36 -0
- package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -0
- package/dist/-private/-type-tests/table-api.test.d.ts +1 -0
- package/dist/-private/-type-tests/table-api.test.js +16 -0
- package/dist/-private/-type-tests/table-api.test.js.map +1 -0
- package/dist/-private/-type-tests/table-config.test.d.ts +1 -0
- package/dist/-private/-type-tests/table-config.test.js +58 -0
- package/dist/-private/-type-tests/table-config.test.js.map +1 -0
- package/dist/-private/column.d.ts +18 -0
- package/dist/-private/column.js +70 -0
- package/dist/-private/column.js.map +1 -0
- package/dist/-private/interfaces/column.d.ts +57 -0
- package/dist/-private/interfaces/column.js +2 -0
- package/dist/-private/interfaces/column.js.map +1 -0
- package/dist/-private/interfaces/index.d.ts +7 -0
- package/dist/-private/interfaces/index.js +2 -0
- package/dist/-private/interfaces/index.js.map +1 -0
- package/dist/-private/interfaces/modifier.d.ts +7 -0
- package/dist/-private/interfaces/modifier.js +2 -0
- package/dist/-private/interfaces/modifier.js.map +1 -0
- package/dist/-private/interfaces/pagination.d.ts +17 -0
- package/dist/-private/interfaces/pagination.js +2 -0
- package/dist/-private/interfaces/pagination.js.map +1 -0
- package/dist/-private/interfaces/plugins.d.ts +314 -0
- package/dist/-private/interfaces/plugins.js +2 -0
- package/dist/-private/interfaces/plugins.js.map +1 -0
- package/dist/-private/interfaces/preferences.d.ts +74 -0
- package/dist/-private/interfaces/preferences.js +2 -0
- package/dist/-private/interfaces/preferences.js.map +1 -0
- package/dist/-private/interfaces/selection.d.ts +35 -0
- package/dist/-private/interfaces/selection.js +2 -0
- package/dist/-private/interfaces/selection.js.map +1 -0
- package/dist/-private/interfaces/table.d.ts +109 -0
- package/dist/-private/interfaces/table.js +2 -0
- package/dist/-private/interfaces/table.js.map +1 -0
- package/dist/-private/js-helper.d.ts +39 -0
- package/dist/-private/js-helper.js +20 -0
- package/dist/-private/js-helper.js.map +1 -0
- package/dist/-private/preferences.d.ts +56 -0
- package/dist/-private/preferences.js +175 -0
- package/dist/-private/preferences.js.map +1 -0
- package/dist/-private/private-types.d.ts +6 -0
- package/dist/-private/private-types.js +2 -0
- package/dist/-private/private-types.js.map +1 -0
- package/dist/-private/row.d.ts +12 -0
- package/dist/-private/row.js +63 -0
- package/dist/-private/row.js.map +1 -0
- package/dist/-private/table.d.ts +0 -0
- package/dist/-private/table.js +18 -0
- package/dist/-private/table.js.map +1 -0
- package/dist/-private/utils.d.ts +3 -0
- package/dist/-private/utils.js +17 -0
- package/dist/-private/utils.js.map +1 -0
- package/dist/applyDecoratedDescriptor-e0489e2f.js +31 -0
- package/dist/applyDecoratedDescriptor-e0489e2f.js.map +1 -0
- package/dist/classPrivateFieldGet-af59a8ea.js +23 -0
- package/dist/classPrivateFieldGet-af59a8ea.js.map +1 -0
- package/dist/defineProperty-a0196711.js +17 -0
- package/dist/defineProperty-a0196711.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/-private/base.d.ts +267 -0
- package/dist/plugins/-private/base.js +486 -0
- package/dist/plugins/-private/base.js.map +1 -0
- package/dist/plugins/-private/utils.d.ts +21 -0
- package/dist/plugins/-private/utils.js +118 -0
- package/dist/plugins/-private/utils.js.map +1 -0
- package/dist/plugins/column-reordering/helpers.d.ts +28 -0
- package/dist/plugins/column-reordering/helpers.js +37 -0
- package/dist/plugins/column-reordering/helpers.js.map +1 -0
- package/dist/plugins/column-reordering/index.d.ts +3 -0
- package/dist/plugins/column-reordering/index.js +3 -0
- package/dist/plugins/column-reordering/index.js.map +1 -0
- package/dist/plugins/column-reordering/plugin.d.ts +133 -0
- package/dist/plugins/column-reordering/plugin.js +392 -0
- package/dist/plugins/column-reordering/plugin.js.map +1 -0
- package/dist/plugins/column-reordering/utils.d.ts +7 -0
- package/dist/plugins/column-reordering/utils.js +41 -0
- package/dist/plugins/column-reordering/utils.js.map +1 -0
- package/dist/plugins/column-resizing/handle.d.ts +116 -0
- package/dist/plugins/column-resizing/handle.js +251 -0
- package/dist/plugins/column-resizing/handle.js.map +1 -0
- package/dist/plugins/column-resizing/helpers.d.ts +17 -0
- package/dist/plugins/column-resizing/helpers.js +22 -0
- package/dist/plugins/column-resizing/helpers.js.map +1 -0
- package/dist/plugins/column-resizing/index.d.ts +4 -0
- package/dist/plugins/column-resizing/index.js +4 -0
- package/dist/plugins/column-resizing/index.js.map +1 -0
- package/dist/plugins/column-resizing/plugin.d.ts +144 -0
- package/dist/plugins/column-resizing/plugin.js +352 -0
- package/dist/plugins/column-resizing/plugin.js.map +1 -0
- package/dist/plugins/column-resizing/resize-observer.d.ts +14 -0
- package/dist/plugins/column-resizing/resize-observer.js +46 -0
- package/dist/plugins/column-resizing/resize-observer.js.map +1 -0
- package/dist/plugins/column-resizing/utils.d.ts +22 -0
- package/dist/plugins/column-resizing/utils.js +46 -0
- package/dist/plugins/column-resizing/utils.js.map +1 -0
- package/dist/plugins/column-visibility/helpers.d.ts +18 -0
- package/dist/plugins/column-visibility/helpers.js +25 -0
- package/dist/plugins/column-visibility/helpers.js.map +1 -0
- package/dist/plugins/column-visibility/index.d.ts +3 -0
- package/dist/plugins/column-visibility/index.js +3 -0
- package/dist/plugins/column-visibility/index.js.map +1 -0
- package/dist/plugins/column-visibility/plugin.d.ts +62 -0
- package/dist/plugins/column-visibility/plugin.js +124 -0
- package/dist/plugins/column-visibility/plugin.js.map +1 -0
- package/dist/plugins/data-sorting/helpers.d.ts +38 -0
- package/dist/plugins/data-sorting/helpers.js +49 -0
- package/dist/plugins/data-sorting/helpers.js.map +1 -0
- package/dist/plugins/data-sorting/index.d.ts +5 -0
- package/dist/plugins/data-sorting/index.js +4 -0
- package/dist/plugins/data-sorting/index.js.map +1 -0
- package/dist/plugins/data-sorting/plugin.d.ts +99 -0
- package/dist/plugins/data-sorting/plugin.js +165 -0
- package/dist/plugins/data-sorting/plugin.js.map +1 -0
- package/dist/plugins/data-sorting/types.d.ts +23 -0
- package/dist/plugins/data-sorting/types.js +17 -0
- package/dist/plugins/data-sorting/types.js.map +1 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/row-selection/helpers.d.ts +6 -0
- package/dist/plugins/row-selection/helpers.js +10 -0
- package/dist/plugins/row-selection/helpers.js.map +1 -0
- package/dist/plugins/row-selection/index.d.ts +3 -0
- package/dist/plugins/row-selection/index.js +3 -0
- package/dist/plugins/row-selection/index.js.map +1 -0
- package/dist/plugins/row-selection/plugin.d.ts +79 -0
- package/dist/plugins/row-selection/plugin.js +187 -0
- package/dist/plugins/row-selection/plugin.js.map +1 -0
- package/dist/plugins/sticky-columns/helpers.d.ts +4 -0
- package/dist/plugins/sticky-columns/helpers.js +8 -0
- package/dist/plugins/sticky-columns/helpers.js.map +1 -0
- package/dist/plugins/sticky-columns/index.d.ts +3 -0
- package/dist/plugins/sticky-columns/index.js +3 -0
- package/dist/plugins/sticky-columns/index.js.map +1 -0
- package/dist/plugins/sticky-columns/plugin.d.ts +53 -0
- package/dist/plugins/sticky-columns/plugin.js +132 -0
- package/dist/plugins/sticky-columns/plugin.js.map +1 -0
- package/dist/table-8e46554b.d.ts +127 -0
- package/dist/table-8e46554b.js +249 -0
- package/dist/table-8e46554b.js.map +1 -0
- package/dist/test-support/index.d.ts +14 -0
- package/dist/test-support/index.js +72 -0
- package/dist/test-support/index.js.map +1 -0
- package/dist/utils.d.ts +26 -0
- package/dist/utils.js +77 -0
- package/dist/utils.js.map +1 -0
- package/package.json +147 -51
- package/LICENSE.md +0 -9
- package/README.md +0 -38
- package/config/environment.js +0 -5
- package/index.js +0 -5
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { Row } from "../../-private/row";
|
2
|
+
declare const isSelected: (row: Row<any>) => boolean;
|
3
|
+
declare const select: (row: Row<any>) => void;
|
4
|
+
declare const deselect: (row: Row<any>) => void;
|
5
|
+
declare const toggle: (row: Row<any>) => void;
|
6
|
+
export { isSelected, select, deselect, toggle };
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { meta } from '../-private/base.js';
|
2
|
+
import { RowSelection } from './plugin.js';
|
3
|
+
|
4
|
+
const isSelected = row => meta.forRow(row, RowSelection).isSelected;
|
5
|
+
const select = row => meta.forRow(row, RowSelection).select();
|
6
|
+
const deselect = row => meta.forRow(row, RowSelection).deselect();
|
7
|
+
const toggle = row => meta.forRow(row, RowSelection).toggle();
|
8
|
+
|
9
|
+
export { deselect, isSelected, select, toggle };
|
10
|
+
//# sourceMappingURL=helpers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/plugins/row-selection/helpers.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { RowSelection } from './plugin';\n\nimport type { Row } from '../../-private/row';\n\nexport const isSelected = (row: Row<any>) => meta.forRow(row, RowSelection).isSelected;\nexport const select = (row: Row<any>) => meta.forRow(row, RowSelection).select();\nexport const deselect = (row: Row<any>) => meta.forRow(row, RowSelection).deselect();\nexport const toggle = (row: Row<any>) => meta.forRow(row, RowSelection).toggle();\n"],"names":["isSelected","row","meta","forRow","RowSelection","select","deselect","toggle"],"mappings":";;;AAKaA,MAAAA,UAAU,GAAIC,GAAD,IAAmBC,IAAI,CAACC,MAAL,CAAYF,GAAZ,EAAiBG,YAAjB,EAA+BJ,WAArE;AACMK,MAAAA,MAAM,GAAIJ,GAAD,IAAmBC,IAAI,CAACC,MAAL,CAAYF,GAAZ,EAAiBG,YAAjB,CAAA,CAA+BC,MAA/B,GAAlC;AACMC,MAAAA,QAAQ,GAAIL,GAAD,IAAmBC,IAAI,CAACC,MAAL,CAAYF,GAAZ,EAAiBG,YAAjB,CAAA,CAA+BE,QAA/B,GAApC;AACMC,MAAAA,MAAM,GAAIN,GAAD,IAAmBC,IAAI,CAACC,MAAL,CAAYF,GAAZ,EAAiBG,YAAjB,CAAA,CAA+BG,MAA/B;;;;"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import { BasePlugin } from "../-private/base";
|
2
|
+
import { Row, Table } from "../../index";
|
3
|
+
import { PluginSignature, RowApi } from "../../-private/interfaces/index";
|
4
|
+
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
|
+
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 { Signature, RowSelection };
|
@@ -0,0 +1,187 @@
|
|
1
|
+
import { _ as _classExtractFieldDescriptor, a as _classPrivateFieldGet } from '../../classPrivateFieldGet-af59a8ea.js';
|
2
|
+
import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-e0489e2f.js';
|
3
|
+
import { _ as _defineProperty } from '../../defineProperty-a0196711.js';
|
4
|
+
import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';
|
5
|
+
import '@glimmer/tracking';
|
6
|
+
import { assert } from '@ember/debug';
|
7
|
+
import { BasePlugin, options, meta } from '../-private/base.js';
|
8
|
+
|
9
|
+
function _classApplyDescriptorSet(receiver, descriptor, value) {
|
10
|
+
if (descriptor.set) {
|
11
|
+
descriptor.set.call(receiver, value);
|
12
|
+
} else {
|
13
|
+
if (!descriptor.writable) {
|
14
|
+
throw new TypeError("attempted to set read only private field");
|
15
|
+
}
|
16
|
+
|
17
|
+
descriptor.value = value;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
function _classPrivateFieldSet(receiver, privateMap, value) {
|
22
|
+
var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set");
|
23
|
+
_classApplyDescriptorSet(receiver, descriptor, value);
|
24
|
+
return value;
|
25
|
+
}
|
26
|
+
|
27
|
+
var _class, _table;
|
28
|
+
|
29
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
30
|
+
|
31
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
32
|
+
let cached = macroCondition(dependencySatisfies('ember-source', '>= 4.1.0-alpha.0')) ? importSync('@glimmer/tracking').cached : importSync('ember-cached-decorator-polyfill').cached;
|
33
|
+
|
34
|
+
var _clickHandler = /*#__PURE__*/new WeakMap();
|
35
|
+
|
36
|
+
/**
|
37
|
+
* This plugin provides a means of managing selection of a single row in a table.
|
38
|
+
*
|
39
|
+
* The state of what is actually selected is managed by you, but this plugin
|
40
|
+
* will wire up the click listeners as well as let you know which *data* is clicked.
|
41
|
+
*/
|
42
|
+
class RowSelection extends BasePlugin {
|
43
|
+
constructor(table) {
|
44
|
+
super(table);
|
45
|
+
|
46
|
+
_defineProperty(this, "name", 'row-selection');
|
47
|
+
|
48
|
+
_defineProperty(this, "meta", {
|
49
|
+
row: RowMeta,
|
50
|
+
table: TableMeta
|
51
|
+
});
|
52
|
+
|
53
|
+
_defineProperty(this, "rowModifier", (element, {
|
54
|
+
row
|
55
|
+
}) => {
|
56
|
+
let handler = event => {
|
57
|
+
_classPrivateFieldGet(this, _clickHandler).call(this, row, event);
|
58
|
+
};
|
59
|
+
|
60
|
+
element.addEventListener('click', handler);
|
61
|
+
return () => {
|
62
|
+
element.removeEventListener('click', handler);
|
63
|
+
};
|
64
|
+
});
|
65
|
+
|
66
|
+
_classPrivateFieldInitSpec(this, _clickHandler, {
|
67
|
+
writable: true,
|
68
|
+
value: (row, event) => {
|
69
|
+
assert(`expected event.target to be an instance of HTMLElement`, event.target instanceof HTMLElement || event.target instanceof SVGElement);
|
70
|
+
let selection = document.getSelection();
|
71
|
+
|
72
|
+
if (selection) {
|
73
|
+
let {
|
74
|
+
type,
|
75
|
+
anchorNode
|
76
|
+
} = selection;
|
77
|
+
let isSelectingText = type === 'Range' && event.target?.contains(anchorNode);
|
78
|
+
|
79
|
+
if (isSelectingText) {
|
80
|
+
event.stopPropagation();
|
81
|
+
return;
|
82
|
+
}
|
83
|
+
} // Ignore clicks on interactive elements within the row
|
84
|
+
|
85
|
+
|
86
|
+
let inputParent = event.target.closest('input, button, label, a, select');
|
87
|
+
|
88
|
+
if (inputParent) {
|
89
|
+
return;
|
90
|
+
}
|
91
|
+
|
92
|
+
let rowMeta = meta.forRow(row, RowSelection);
|
93
|
+
rowMeta.toggle();
|
94
|
+
}
|
95
|
+
});
|
96
|
+
|
97
|
+
let pluginOptions = options.forTable(this.table, RowSelection);
|
98
|
+
assert(`selection, onSelect, and onDeselect are all required arguments for the RowSelection plugin. ` + `Specify these options via \`RowSelection.with(() => ({ selection, onSelect, onDeselect }))\``, pluginOptions.selection && pluginOptions.onSelect && pluginOptions.onDeselect);
|
99
|
+
}
|
100
|
+
|
101
|
+
}
|
102
|
+
let TableMeta = (_class = (_table = /*#__PURE__*/new WeakMap(), class TableMeta {
|
103
|
+
constructor(table) {
|
104
|
+
_classPrivateFieldInitSpec(this, _table, {
|
105
|
+
writable: true,
|
106
|
+
value: void 0
|
107
|
+
});
|
108
|
+
|
109
|
+
_classPrivateFieldSet(this, _table, table);
|
110
|
+
}
|
111
|
+
|
112
|
+
get selection() {
|
113
|
+
let passedSelection = options.forTable(_classPrivateFieldGet(this, _table), RowSelection).selection;
|
114
|
+
assert(`Cannot access selection because it is undefined`, passedSelection);
|
115
|
+
|
116
|
+
if (passedSelection instanceof Set) {
|
117
|
+
return passedSelection;
|
118
|
+
}
|
119
|
+
|
120
|
+
return new Set(passedSelection);
|
121
|
+
}
|
122
|
+
|
123
|
+
}), (_applyDecoratedDescriptor(_class.prototype, "selection", [cached], Object.getOwnPropertyDescriptor(_class.prototype, "selection"), _class.prototype)), _class);
|
124
|
+
|
125
|
+
var _row = /*#__PURE__*/new WeakMap();
|
126
|
+
|
127
|
+
class RowMeta {
|
128
|
+
constructor(row) {
|
129
|
+
_classPrivateFieldInitSpec(this, _row, {
|
130
|
+
writable: true,
|
131
|
+
value: void 0
|
132
|
+
});
|
133
|
+
|
134
|
+
_defineProperty(this, "toggle", () => {
|
135
|
+
if (this.isSelected) {
|
136
|
+
this.deselect();
|
137
|
+
return;
|
138
|
+
}
|
139
|
+
|
140
|
+
this.select();
|
141
|
+
});
|
142
|
+
|
143
|
+
_defineProperty(this, "select", () => {
|
144
|
+
let pluginOptions = options.forTable(_classPrivateFieldGet(this, _row).table, RowSelection);
|
145
|
+
|
146
|
+
if ('key' in pluginOptions && pluginOptions.key) {
|
147
|
+
let key = pluginOptions.key(_classPrivateFieldGet(this, _row).data);
|
148
|
+
pluginOptions.onSelect?.(key, _classPrivateFieldGet(this, _row));
|
149
|
+
return;
|
150
|
+
}
|
151
|
+
|
152
|
+
pluginOptions.onSelect?.(_classPrivateFieldGet(this, _row).data, _classPrivateFieldGet(this, _row));
|
153
|
+
});
|
154
|
+
|
155
|
+
_defineProperty(this, "deselect", () => {
|
156
|
+
let pluginOptions = options.forTable(_classPrivateFieldGet(this, _row).table, RowSelection);
|
157
|
+
|
158
|
+
if ('key' in pluginOptions && pluginOptions.key) {
|
159
|
+
let key = pluginOptions.key(_classPrivateFieldGet(this, _row).data);
|
160
|
+
pluginOptions.onDeselect?.(key, _classPrivateFieldGet(this, _row));
|
161
|
+
return;
|
162
|
+
}
|
163
|
+
|
164
|
+
pluginOptions.onDeselect?.(_classPrivateFieldGet(this, _row).data, _classPrivateFieldGet(this, _row));
|
165
|
+
});
|
166
|
+
|
167
|
+
_classPrivateFieldSet(this, _row, row);
|
168
|
+
}
|
169
|
+
|
170
|
+
get isSelected() {
|
171
|
+
let tableMeta = meta.forTable(_classPrivateFieldGet(this, _row).table, RowSelection);
|
172
|
+
let pluginOptions = options.forTable(_classPrivateFieldGet(this, _row).table, RowSelection);
|
173
|
+
|
174
|
+
if ('key' in pluginOptions && pluginOptions.key) {
|
175
|
+
let compareWith = pluginOptions.key(_classPrivateFieldGet(this, _row).data);
|
176
|
+
return tableMeta.selection.has(compareWith);
|
177
|
+
}
|
178
|
+
|
179
|
+
let compareWith = _classPrivateFieldGet(this, _row).data;
|
180
|
+
|
181
|
+
return tableMeta.selection.has(compareWith);
|
182
|
+
}
|
183
|
+
|
184
|
+
}
|
185
|
+
|
186
|
+
export { RowSelection };
|
187
|
+
//# sourceMappingURL=plugin.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["../../../../node_modules/.pnpm/@babel+runtime@7.19.4/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js","../../../../node_modules/.pnpm/@babel+runtime@7.19.4/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js","../../../src/plugins/row-selection/plugin.ts"],"sourcesContent":["export default function _classApplyDescriptorSet(receiver, descriptor, value) {\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n descriptor.value = value;\n }\n}","import classApplyDescriptorSet from \"./classApplyDescriptorSet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"set\");\n classApplyDescriptorSet(receiver, descriptor, value);\n return value;\n}","import { cached } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nimport { BasePlugin, meta, options } from '../-private/base';\n\nimport type { Row, Table } from '[public-types]';\nimport type { PluginSignature, RowApi } from '#interfaces';\n\nexport interface Signature<DataType = any, Key = DataType> extends PluginSignature {\n Meta: {\n Table: TableMeta;\n Row: RowMeta;\n };\n Options: {\n Plugin: {\n /**\n * A set of selected things using the same type of Identifier\n * returned from `key`\n */\n selection: Set<Key> | Array<Key>;\n } & (\n | {\n /**\n * For a given row's data, how should the key be determined?\n * this could be a remote id from a database, or some other attribute\n *\n * This could be useful for indicating in UI if a particular item is selected.\n *\n * If not provided, the row's data will be used as the key\n */\n key: (data: DataType) => Key;\n /**\n * When a row is clicked, this will be invoked,\n * allowing you to update your selection object\n */\n onSelect: (item: Key, row: Row<DataType>) => void;\n /**\n * When a row is clicked (and the row is selected), this will be invoked,\n * allowing you to update your selection object\n */\n onDeselect: (item: Key, row: Row<DataType>) => void;\n }\n | {\n /**\n * When a row is clicked (and the row is not selected), this will be invoked,\n * allowing you to update your selection object\n */\n onSelect: (item: DataType | any, row: Row<DataType>) => void;\n /**\n * When a row is clicked (and the row is selected), this will be invoked,\n * allowing you to update your selection object\n */\n onDeselect: (item: DataType | any, row: Row<DataType>) => void;\n }\n );\n };\n}\n\n/**\n * This plugin provides a means of managing selection of a single row in a table.\n *\n * The state of what is actually selected is managed by you, but this plugin\n * will wire up the click listeners as well as let you know which *data* is clicked.\n */\nexport class RowSelection<DataType = any, Key = DataType> extends BasePlugin<\n Signature<DataType, Key>\n> {\n name = 'row-selection';\n\n meta = {\n row: RowMeta,\n table: TableMeta,\n };\n\n constructor(table: Table) {\n super(table);\n\n let pluginOptions = options.forTable(this.table, RowSelection);\n\n assert(\n `selection, onSelect, and onDeselect are all required arguments for the RowSelection plugin. ` +\n `Specify these options via \\`RowSelection.with(() => ({ selection, onSelect, onDeselect }))\\``,\n pluginOptions.selection && pluginOptions.onSelect && pluginOptions.onDeselect\n );\n }\n\n rowModifier = (element: HTMLElement, { row }: RowApi<Table<any>>) => {\n let handler = (event: Event) => {\n this.#clickHandler(row, event);\n };\n\n element.addEventListener('click', handler);\n\n return () => {\n element.removeEventListener('click', handler);\n };\n };\n\n #clickHandler = (row: Row, event: Event) => {\n assert(\n `expected event.target to be an instance of HTMLElement`,\n event.target instanceof HTMLElement || event.target instanceof SVGElement\n );\n\n let selection = document.getSelection();\n\n if (selection) {\n let { type, anchorNode } = selection;\n let isSelectingText = type === 'Range' && event.target?.contains(anchorNode);\n\n if (isSelectingText) {\n event.stopPropagation();\n\n return;\n }\n }\n\n // Ignore clicks on interactive elements within the row\n let inputParent = event.target.closest('input, button, label, a, select');\n\n if (inputParent) {\n return;\n }\n\n let rowMeta = meta.forRow(row, RowSelection);\n\n rowMeta.toggle();\n };\n}\n\nclass TableMeta {\n #table: Table;\n\n constructor(table: Table) {\n this.#table = table;\n }\n\n @cached\n get selection(): Set<unknown> {\n let passedSelection = options.forTable(this.#table, RowSelection).selection;\n\n assert(`Cannot access selection because it is undefined`, passedSelection);\n\n if (passedSelection instanceof Set) {\n return passedSelection;\n }\n\n return new Set(passedSelection);\n }\n}\n\nclass RowMeta {\n #row: Row<any>;\n\n constructor(row: Row<any>) {\n this.#row = row;\n }\n\n get isSelected(): boolean {\n let tableMeta = meta.forTable(this.#row.table, RowSelection);\n let pluginOptions = options.forTable(this.#row.table, RowSelection);\n\n if ('key' in pluginOptions && pluginOptions.key) {\n let compareWith = pluginOptions.key(this.#row.data);\n\n return tableMeta.selection.has(compareWith);\n }\n\n let compareWith = this.#row.data;\n\n return tableMeta.selection.has(compareWith);\n }\n\n toggle = () => {\n if (this.isSelected) {\n this.deselect();\n\n return;\n }\n\n this.select();\n };\n\n select = () => {\n let pluginOptions = options.forTable(this.#row.table, RowSelection);\n\n if ('key' in pluginOptions && pluginOptions.key) {\n let key = pluginOptions.key(this.#row.data);\n\n pluginOptions.onSelect?.(key, this.#row);\n\n return;\n }\n\n pluginOptions.onSelect?.(this.#row.data, this.#row);\n };\n\n deselect = () => {\n let pluginOptions = options.forTable(this.#row.table, RowSelection);\n\n if ('key' in pluginOptions && pluginOptions.key) {\n let key = pluginOptions.key(this.#row.data);\n\n pluginOptions.onDeselect?.(key, this.#row);\n\n return;\n }\n\n pluginOptions.onDeselect?.(this.#row.data, this.#row);\n };\n}\n"],"names":["_classApplyDescriptorSet","receiver","descriptor","value","set","call","writable","TypeError","_classPrivateFieldSet","privateMap","classExtractFieldDescriptor","classApplyDescriptorSet","RowSelection","BasePlugin","constructor","table","row","RowMeta","TableMeta","element","handler","event","addEventListener","removeEventListener","assert","target","HTMLElement","SVGElement","selection","document","getSelection","type","anchorNode","isSelectingText","contains","stopPropagation","inputParent","closest","rowMeta","meta","forRow","toggle","pluginOptions","options","forTable","onSelect","onDeselect","passedSelection","Set","cached","isSelected","deselect","select","key","data","tableMeta","compareWith","has"],"mappings":"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"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { meta } from '../-private/base.js';
|
2
|
+
import { StickyColumns } from './plugin.js';
|
3
|
+
|
4
|
+
const isSticky = column => meta.forColumn(column, StickyColumns).isSticky;
|
5
|
+
const styleFor = column => meta.forColumn(column, StickyColumns).style;
|
6
|
+
|
7
|
+
export { isSticky, styleFor };
|
8
|
+
//# sourceMappingURL=helpers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/plugins/sticky-columns/helpers.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { StickyColumns } from './plugin';\n\nimport type { Column } from '[public-types]';\n\nexport const isSticky = <DataType = unknown>(column: Column<DataType>) =>\n meta.forColumn(column, StickyColumns).isSticky;\n\nexport const styleFor = <DataType = unknown>(\n column: Column<DataType>\n): Partial<CSSStyleDeclaration> => meta.forColumn(column, StickyColumns).style;\n"],"names":["isSticky","column","meta","forColumn","StickyColumns","styleFor","style"],"mappings":";;;AAKaA,MAAAA,QAAQ,GAAwBC,MAArB,IACtBC,IAAI,CAACC,SAAL,CAAeF,MAAf,EAAuBG,aAAvB,EAAsCJ,SADjC;AAGMK,MAAAA,QAAQ,GACnBJ,MADsB,IAEWC,IAAI,CAACC,SAAL,CAAeF,MAAf,EAAuBG,aAAvB,EAAsCE;;;;"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import { BasePlugin } from "../-private/base";
|
2
|
+
import { ColumnApi } from "../index";
|
3
|
+
import { Column } from "../../index";
|
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
|
+
interface Signature {
|
14
|
+
Options: {
|
15
|
+
Column: ColumnOptions;
|
16
|
+
};
|
17
|
+
Meta: {
|
18
|
+
Table: TableMeta;
|
19
|
+
Column: ColumnMeta;
|
20
|
+
};
|
21
|
+
}
|
22
|
+
declare class StickyColumns extends BasePlugin<Signature> {
|
23
|
+
name: string;
|
24
|
+
/**
|
25
|
+
* This plugin requires that the resizing plugin be present, because the resizing plugin is
|
26
|
+
* what manages the base width of the columns.
|
27
|
+
*
|
28
|
+
* Other width-management plugins can be used instead of ColumnResizing, but they must declare
|
29
|
+
* that they manage the width of the columns.
|
30
|
+
*/
|
31
|
+
static requires: string[];
|
32
|
+
meta: {
|
33
|
+
table: typeof TableMeta;
|
34
|
+
column: typeof ColumnMeta;
|
35
|
+
};
|
36
|
+
headerCellModifier: (element: HTMLElement, { column }: ColumnApi) => void;
|
37
|
+
}
|
38
|
+
/**
|
39
|
+
* @private
|
40
|
+
*
|
41
|
+
* Contains state and behaviors for the sticiness
|
42
|
+
*/
|
43
|
+
declare class ColumnMeta {
|
44
|
+
private column;
|
45
|
+
constructor(column: Column);
|
46
|
+
get isSticky(): boolean;
|
47
|
+
get position(): 'left' | 'right' | 'none';
|
48
|
+
get offset(): string | undefined;
|
49
|
+
get style(): Partial<Pick<CSSStyleDeclaration, 'position' | 'left' | 'right' | 'zIndex'>>;
|
50
|
+
}
|
51
|
+
declare class TableMeta {
|
52
|
+
}
|
53
|
+
export { Signature, StickyColumns, ColumnMeta, TableMeta };
|
@@ -0,0 +1,132 @@
|
|
1
|
+
import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-e0489e2f.js';
|
2
|
+
import { _ as _defineProperty } from '../../defineProperty-a0196711.js';
|
3
|
+
import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';
|
4
|
+
import '@glimmer/tracking';
|
5
|
+
import { assert } from '@ember/debug';
|
6
|
+
import { BasePlugin, meta, options, columns } from '../-private/base.js';
|
7
|
+
import { applyStyles } from '../-private/utils.js';
|
8
|
+
|
9
|
+
var _class;
|
10
|
+
let cached = macroCondition(dependencySatisfies('ember-source', '>= 4.1.0-alpha.0')) ? importSync('@glimmer/tracking').cached : importSync('ember-cached-decorator-polyfill').cached;
|
11
|
+
class StickyColumns extends BasePlugin {
|
12
|
+
constructor(...args) {
|
13
|
+
super(...args);
|
14
|
+
|
15
|
+
_defineProperty(this, "name", 'sticky-columns');
|
16
|
+
|
17
|
+
_defineProperty(this, "meta", {
|
18
|
+
table: TableMeta,
|
19
|
+
column: ColumnMeta
|
20
|
+
});
|
21
|
+
|
22
|
+
_defineProperty(this, "headerCellModifier", (element, {
|
23
|
+
column
|
24
|
+
}) => {
|
25
|
+
let columnMeta = meta.forColumn(column, StickyColumns);
|
26
|
+
|
27
|
+
if (columnMeta.isSticky) {
|
28
|
+
applyStyles(element, columnMeta.style);
|
29
|
+
} else {
|
30
|
+
if (element.style.getPropertyValue('position') === 'sticky') {
|
31
|
+
element.style.removeProperty('position');
|
32
|
+
}
|
33
|
+
|
34
|
+
if (element.style.getPropertyValue('left')) {
|
35
|
+
element.style.left = '';
|
36
|
+
}
|
37
|
+
|
38
|
+
if (element.style.getPropertyValue('right')) {
|
39
|
+
element.style.right = '';
|
40
|
+
}
|
41
|
+
|
42
|
+
if (element.style.zIndex === '8') {
|
43
|
+
element.style.zIndex = '';
|
44
|
+
}
|
45
|
+
}
|
46
|
+
});
|
47
|
+
}
|
48
|
+
|
49
|
+
}
|
50
|
+
/**
|
51
|
+
* @private
|
52
|
+
*
|
53
|
+
* Contains state and behaviors for the sticiness
|
54
|
+
*/
|
55
|
+
|
56
|
+
_defineProperty(StickyColumns, "requires", ['columnWidth']);
|
57
|
+
|
58
|
+
let ColumnMeta = (_class = class ColumnMeta {
|
59
|
+
constructor(column) {
|
60
|
+
this.column = column;
|
61
|
+
}
|
62
|
+
|
63
|
+
get isSticky() {
|
64
|
+
return this.position !== 'none';
|
65
|
+
}
|
66
|
+
|
67
|
+
get position() {
|
68
|
+
let sticky = options.forColumn(this.column, StickyColumns)?.sticky;
|
69
|
+
assert(`Invalid sticky value, ${sticky}. Valid values: 'left', 'right', false`, sticky === 'left' || sticky === 'right' || sticky === false || sticky === undefined);
|
70
|
+
return sticky || 'none';
|
71
|
+
}
|
72
|
+
|
73
|
+
get offset() {
|
74
|
+
if (!this.isSticky) {
|
75
|
+
return;
|
76
|
+
}
|
77
|
+
|
78
|
+
if (this.position === 'left') {
|
79
|
+
let leftColumns = columns.before(this.column);
|
80
|
+
let left = leftColumns.reduce((acc, column) => {
|
81
|
+
let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');
|
82
|
+
|
83
|
+
if (hasWidth(columnMeta)) {
|
84
|
+
return acc + (columnMeta.width ?? 0);
|
85
|
+
}
|
86
|
+
|
87
|
+
return acc;
|
88
|
+
}, 0);
|
89
|
+
return `${left}px`;
|
90
|
+
}
|
91
|
+
|
92
|
+
if (this.position === 'right') {
|
93
|
+
let rightColumns = columns.after(this.column);
|
94
|
+
let right = rightColumns.reduce((acc, column) => {
|
95
|
+
let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');
|
96
|
+
|
97
|
+
if (hasWidth(columnMeta)) {
|
98
|
+
return acc + (columnMeta.width ?? 0);
|
99
|
+
}
|
100
|
+
|
101
|
+
return acc;
|
102
|
+
}, 0);
|
103
|
+
return `${right}px`;
|
104
|
+
}
|
105
|
+
|
106
|
+
return;
|
107
|
+
}
|
108
|
+
|
109
|
+
get style() {
|
110
|
+
if (this.isSticky) {
|
111
|
+
return {
|
112
|
+
position: 'sticky',
|
113
|
+
[this.position]: this.offset,
|
114
|
+
zIndex: '8'
|
115
|
+
};
|
116
|
+
}
|
117
|
+
|
118
|
+
return {};
|
119
|
+
}
|
120
|
+
|
121
|
+
}, (_applyDecoratedDescriptor(_class.prototype, "offset", [cached], Object.getOwnPropertyDescriptor(_class.prototype, "offset"), _class.prototype)), _class);
|
122
|
+
|
123
|
+
function hasWidth(obj) {
|
124
|
+
return typeof obj === 'object' && obj && 'width' in obj;
|
125
|
+
}
|
126
|
+
/* This Plugin does not need table state */
|
127
|
+
|
128
|
+
|
129
|
+
class TableMeta {}
|
130
|
+
|
131
|
+
export { ColumnMeta, StickyColumns, TableMeta };
|
132
|
+
//# sourceMappingURL=plugin.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["../../../src/plugins/sticky-columns/plugin.ts"],"sourcesContent":["import { cached } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base';\nimport { applyStyles } from '../-private/utils';\n\nimport type { ColumnApi } from '[public-plugin-types]';\nimport type { Column } from '[public-types]';\n\ninterface ColumnOptions {\n /**\n * Whether or not to enable stickiness on the column\n * (default is false)\n *\n * valid values: 'left', 'right', false\n */\n sticky?: boolean | string;\n}\n\nexport interface Signature {\n Options: {\n Column: ColumnOptions;\n };\n Meta: {\n Table: TableMeta;\n Column: ColumnMeta;\n };\n}\n\nexport class StickyColumns extends BasePlugin<Signature> {\n name = 'sticky-columns';\n\n /**\n * This plugin requires that the resizing plugin be present, because the resizing plugin is\n * what manages the base width of the columns.\n *\n * Other width-management plugins can be used instead of ColumnResizing, but they must declare\n * that they manage the width of the columns.\n */\n static requires = ['columnWidth'];\n\n meta = {\n table: TableMeta,\n column: ColumnMeta,\n };\n\n headerCellModifier = (element: HTMLElement, { column }: ColumnApi) => {\n let columnMeta = meta.forColumn(column, StickyColumns);\n\n if (columnMeta.isSticky) {\n applyStyles(element, columnMeta.style);\n } else {\n if (element.style.getPropertyValue('position') === 'sticky') {\n element.style.removeProperty('position');\n }\n\n if (element.style.getPropertyValue('left')) {\n element.style.left = '';\n }\n\n if (element.style.getPropertyValue('right')) {\n element.style.right = '';\n }\n\n if (element.style.zIndex === '8') {\n element.style.zIndex = '';\n }\n }\n };\n}\n\n/**\n * @private\n *\n * Contains state and behaviors for the sticiness\n */\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get isSticky() {\n return this.position !== 'none';\n }\n\n get position(): 'left' | 'right' | 'none' {\n let sticky = options.forColumn(this.column, StickyColumns)?.sticky;\n\n assert(\n `Invalid sticky value, ${sticky}. Valid values: 'left', 'right', false`,\n sticky === 'left' || sticky === 'right' || sticky === false || sticky === undefined\n );\n\n return sticky || 'none';\n }\n\n @cached\n get offset() {\n if (!this.isSticky) {\n return;\n }\n\n if (this.position === 'left') {\n let leftColumns = columns.before(this.column);\n let left = leftColumns.reduce((acc, column) => {\n let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');\n\n if (hasWidth(columnMeta)) {\n return acc + (columnMeta.width ?? 0);\n }\n\n return acc;\n }, 0);\n\n return `${left}px`;\n }\n\n if (this.position === 'right') {\n let rightColumns = columns.after(this.column);\n let right = rightColumns.reduce((acc, column) => {\n let columnMeta = meta.withFeature.forColumn(column, 'columnWidth');\n\n if (hasWidth(columnMeta)) {\n return acc + (columnMeta.width ?? 0);\n }\n\n return acc;\n }, 0);\n\n return `${right}px`;\n }\n\n return;\n }\n\n get style(): Partial<Pick<CSSStyleDeclaration, 'position' | 'left' | 'right' | 'zIndex'>> {\n if (this.isSticky) {\n return {\n position: 'sticky',\n [this.position]: this.offset,\n zIndex: '8',\n };\n }\n\n return {};\n }\n}\n\nfunction hasWidth(obj: any): obj is { width?: number } {\n return typeof obj === 'object' && obj && 'width' in obj;\n}\n\n/* This Plugin does not need table state */\nexport class TableMeta {}\n"],"names":["StickyColumns","BasePlugin","table","TableMeta","column","ColumnMeta","element","columnMeta","meta","forColumn","isSticky","applyStyles","style","getPropertyValue","removeProperty","left","right","zIndex","constructor","position","sticky","options","assert","undefined","offset","leftColumns","columns","before","reduce","acc","withFeature","hasWidth","width","rightColumns","after","cached","obj"],"mappings":"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"}
|