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.
Files changed (169) hide show
  1. package/addon-main.js +5 -0
  2. package/dist/-private/-type-tests/plugin-properties.test.d.ts +2 -0
  3. package/dist/-private/-type-tests/plugin-properties.test.d.ts.map +1 -0
  4. package/dist/-private/-type-tests/plugin-properties.test.js +31 -0
  5. package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -0
  6. package/dist/-private/-type-tests/plugin-with.test.d.ts +1 -0
  7. package/dist/-private/-type-tests/plugin-with.test.js +21 -0
  8. package/dist/-private/-type-tests/plugin-with.test.js.map +1 -0
  9. package/dist/-private/-type-tests/plugins-accessors.test.d.ts +1 -0
  10. package/dist/-private/-type-tests/plugins-accessors.test.js +36 -0
  11. package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -0
  12. package/dist/-private/-type-tests/plugins-signature-from.test.d.ts +1 -0
  13. package/dist/-private/-type-tests/plugins-signature-from.test.js +14 -0
  14. package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -0
  15. package/dist/-private/-type-tests/plugins-signature-utils.test.d.ts +1 -0
  16. package/dist/-private/-type-tests/plugins-signature-utils.test.js +36 -0
  17. package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -0
  18. package/dist/-private/-type-tests/table-api.test.d.ts +1 -0
  19. package/dist/-private/-type-tests/table-api.test.js +16 -0
  20. package/dist/-private/-type-tests/table-api.test.js.map +1 -0
  21. package/dist/-private/-type-tests/table-config.test.d.ts +1 -0
  22. package/dist/-private/-type-tests/table-config.test.js +58 -0
  23. package/dist/-private/-type-tests/table-config.test.js.map +1 -0
  24. package/dist/-private/column.d.ts +18 -0
  25. package/dist/-private/column.js +70 -0
  26. package/dist/-private/column.js.map +1 -0
  27. package/dist/-private/interfaces/column.d.ts +57 -0
  28. package/dist/-private/interfaces/column.js +2 -0
  29. package/dist/-private/interfaces/column.js.map +1 -0
  30. package/dist/-private/interfaces/index.d.ts +7 -0
  31. package/dist/-private/interfaces/index.js +2 -0
  32. package/dist/-private/interfaces/index.js.map +1 -0
  33. package/dist/-private/interfaces/modifier.d.ts +7 -0
  34. package/dist/-private/interfaces/modifier.js +2 -0
  35. package/dist/-private/interfaces/modifier.js.map +1 -0
  36. package/dist/-private/interfaces/pagination.d.ts +17 -0
  37. package/dist/-private/interfaces/pagination.js +2 -0
  38. package/dist/-private/interfaces/pagination.js.map +1 -0
  39. package/dist/-private/interfaces/plugins.d.ts +314 -0
  40. package/dist/-private/interfaces/plugins.js +2 -0
  41. package/dist/-private/interfaces/plugins.js.map +1 -0
  42. package/dist/-private/interfaces/preferences.d.ts +74 -0
  43. package/dist/-private/interfaces/preferences.js +2 -0
  44. package/dist/-private/interfaces/preferences.js.map +1 -0
  45. package/dist/-private/interfaces/selection.d.ts +35 -0
  46. package/dist/-private/interfaces/selection.js +2 -0
  47. package/dist/-private/interfaces/selection.js.map +1 -0
  48. package/dist/-private/interfaces/table.d.ts +109 -0
  49. package/dist/-private/interfaces/table.js +2 -0
  50. package/dist/-private/interfaces/table.js.map +1 -0
  51. package/dist/-private/js-helper.d.ts +39 -0
  52. package/dist/-private/js-helper.js +20 -0
  53. package/dist/-private/js-helper.js.map +1 -0
  54. package/dist/-private/preferences.d.ts +56 -0
  55. package/dist/-private/preferences.js +175 -0
  56. package/dist/-private/preferences.js.map +1 -0
  57. package/dist/-private/private-types.d.ts +6 -0
  58. package/dist/-private/private-types.js +2 -0
  59. package/dist/-private/private-types.js.map +1 -0
  60. package/dist/-private/row.d.ts +12 -0
  61. package/dist/-private/row.js +63 -0
  62. package/dist/-private/row.js.map +1 -0
  63. package/dist/-private/table.d.ts +0 -0
  64. package/dist/-private/table.js +18 -0
  65. package/dist/-private/table.js.map +1 -0
  66. package/dist/-private/utils.d.ts +3 -0
  67. package/dist/-private/utils.js +17 -0
  68. package/dist/-private/utils.js.map +1 -0
  69. package/dist/applyDecoratedDescriptor-e0489e2f.js +31 -0
  70. package/dist/applyDecoratedDescriptor-e0489e2f.js.map +1 -0
  71. package/dist/classPrivateFieldGet-af59a8ea.js +23 -0
  72. package/dist/classPrivateFieldGet-af59a8ea.js.map +1 -0
  73. package/dist/defineProperty-a0196711.js +17 -0
  74. package/dist/defineProperty-a0196711.js.map +1 -0
  75. package/dist/index.d.ts +13 -0
  76. package/dist/index.js +4 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/plugins/-private/base.d.ts +267 -0
  79. package/dist/plugins/-private/base.js +486 -0
  80. package/dist/plugins/-private/base.js.map +1 -0
  81. package/dist/plugins/-private/utils.d.ts +21 -0
  82. package/dist/plugins/-private/utils.js +118 -0
  83. package/dist/plugins/-private/utils.js.map +1 -0
  84. package/dist/plugins/column-reordering/helpers.d.ts +28 -0
  85. package/dist/plugins/column-reordering/helpers.js +37 -0
  86. package/dist/plugins/column-reordering/helpers.js.map +1 -0
  87. package/dist/plugins/column-reordering/index.d.ts +3 -0
  88. package/dist/plugins/column-reordering/index.js +3 -0
  89. package/dist/plugins/column-reordering/index.js.map +1 -0
  90. package/dist/plugins/column-reordering/plugin.d.ts +133 -0
  91. package/dist/plugins/column-reordering/plugin.js +392 -0
  92. package/dist/plugins/column-reordering/plugin.js.map +1 -0
  93. package/dist/plugins/column-reordering/utils.d.ts +7 -0
  94. package/dist/plugins/column-reordering/utils.js +41 -0
  95. package/dist/plugins/column-reordering/utils.js.map +1 -0
  96. package/dist/plugins/column-resizing/handle.d.ts +116 -0
  97. package/dist/plugins/column-resizing/handle.js +251 -0
  98. package/dist/plugins/column-resizing/handle.js.map +1 -0
  99. package/dist/plugins/column-resizing/helpers.d.ts +17 -0
  100. package/dist/plugins/column-resizing/helpers.js +22 -0
  101. package/dist/plugins/column-resizing/helpers.js.map +1 -0
  102. package/dist/plugins/column-resizing/index.d.ts +4 -0
  103. package/dist/plugins/column-resizing/index.js +4 -0
  104. package/dist/plugins/column-resizing/index.js.map +1 -0
  105. package/dist/plugins/column-resizing/plugin.d.ts +144 -0
  106. package/dist/plugins/column-resizing/plugin.js +352 -0
  107. package/dist/plugins/column-resizing/plugin.js.map +1 -0
  108. package/dist/plugins/column-resizing/resize-observer.d.ts +14 -0
  109. package/dist/plugins/column-resizing/resize-observer.js +46 -0
  110. package/dist/plugins/column-resizing/resize-observer.js.map +1 -0
  111. package/dist/plugins/column-resizing/utils.d.ts +22 -0
  112. package/dist/plugins/column-resizing/utils.js +46 -0
  113. package/dist/plugins/column-resizing/utils.js.map +1 -0
  114. package/dist/plugins/column-visibility/helpers.d.ts +18 -0
  115. package/dist/plugins/column-visibility/helpers.js +25 -0
  116. package/dist/plugins/column-visibility/helpers.js.map +1 -0
  117. package/dist/plugins/column-visibility/index.d.ts +3 -0
  118. package/dist/plugins/column-visibility/index.js +3 -0
  119. package/dist/plugins/column-visibility/index.js.map +1 -0
  120. package/dist/plugins/column-visibility/plugin.d.ts +62 -0
  121. package/dist/plugins/column-visibility/plugin.js +124 -0
  122. package/dist/plugins/column-visibility/plugin.js.map +1 -0
  123. package/dist/plugins/data-sorting/helpers.d.ts +38 -0
  124. package/dist/plugins/data-sorting/helpers.js +49 -0
  125. package/dist/plugins/data-sorting/helpers.js.map +1 -0
  126. package/dist/plugins/data-sorting/index.d.ts +5 -0
  127. package/dist/plugins/data-sorting/index.js +4 -0
  128. package/dist/plugins/data-sorting/index.js.map +1 -0
  129. package/dist/plugins/data-sorting/plugin.d.ts +99 -0
  130. package/dist/plugins/data-sorting/plugin.js +165 -0
  131. package/dist/plugins/data-sorting/plugin.js.map +1 -0
  132. package/dist/plugins/data-sorting/types.d.ts +23 -0
  133. package/dist/plugins/data-sorting/types.js +17 -0
  134. package/dist/plugins/data-sorting/types.js.map +1 -0
  135. package/dist/plugins/index.d.ts +5 -0
  136. package/dist/plugins/index.js +3 -0
  137. package/dist/plugins/index.js.map +1 -0
  138. package/dist/plugins/row-selection/helpers.d.ts +6 -0
  139. package/dist/plugins/row-selection/helpers.js +10 -0
  140. package/dist/plugins/row-selection/helpers.js.map +1 -0
  141. package/dist/plugins/row-selection/index.d.ts +3 -0
  142. package/dist/plugins/row-selection/index.js +3 -0
  143. package/dist/plugins/row-selection/index.js.map +1 -0
  144. package/dist/plugins/row-selection/plugin.d.ts +79 -0
  145. package/dist/plugins/row-selection/plugin.js +187 -0
  146. package/dist/plugins/row-selection/plugin.js.map +1 -0
  147. package/dist/plugins/sticky-columns/helpers.d.ts +4 -0
  148. package/dist/plugins/sticky-columns/helpers.js +8 -0
  149. package/dist/plugins/sticky-columns/helpers.js.map +1 -0
  150. package/dist/plugins/sticky-columns/index.d.ts +3 -0
  151. package/dist/plugins/sticky-columns/index.js +3 -0
  152. package/dist/plugins/sticky-columns/index.js.map +1 -0
  153. package/dist/plugins/sticky-columns/plugin.d.ts +53 -0
  154. package/dist/plugins/sticky-columns/plugin.js +132 -0
  155. package/dist/plugins/sticky-columns/plugin.js.map +1 -0
  156. package/dist/table-8e46554b.d.ts +127 -0
  157. package/dist/table-8e46554b.js +249 -0
  158. package/dist/table-8e46554b.js.map +1 -0
  159. package/dist/test-support/index.d.ts +14 -0
  160. package/dist/test-support/index.js +72 -0
  161. package/dist/test-support/index.js.map +1 -0
  162. package/dist/utils.d.ts +26 -0
  163. package/dist/utils.js +77 -0
  164. package/dist/utils.js.map +1 -0
  165. package/package.json +147 -51
  166. package/LICENSE.md +0 -9
  167. package/README.md +0 -38
  168. package/config/environment.js +0 -5
  169. 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,3 @@
1
+ export * from "./helpers";
2
+ export { RowSelection as Plugin, RowSelection } from "./plugin";
3
+ export type { Signature } from "./plugin";
@@ -0,0 +1,3 @@
1
+ export { deselect, isSelected, select, toggle } from './helpers.js';
2
+ export { RowSelection as Plugin, RowSelection } from './plugin.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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":";;;;;;;;AAAe,SAASA,wBAAT,CAAkCC,QAAlC,EAA4CC,UAA5C,EAAwDC,KAAxD,EAA+D;EAC5E,IAAID,UAAU,CAACE,GAAf,EAAoB;AAClBF,IAAAA,UAAU,CAACE,GAAX,CAAeC,IAAf,CAAoBJ,QAApB,EAA8BE,KAA9B,CAAA,CAAA;AACD,GAFD,MAEO;AACL,IAAA,IAAI,CAACD,UAAU,CAACI,QAAhB,EAA0B;AACxB,MAAA,MAAM,IAAIC,SAAJ,CAAc,0CAAd,CAAN,CAAA;AACD,KAAA;;IACDL,UAAU,CAACC,KAAX,GAAmBA,KAAnB,CAAA;AACD,GAAA;AACF;;ACPc,SAASK,qBAAT,CAA+BP,QAA/B,EAAyCQ,UAAzC,EAAqDN,KAArD,EAA4D;EACzE,IAAID,UAAU,GAAGQ,4BAA2B,CAACT,QAAD,EAAWQ,UAAX,EAAuB,KAAvB,CAA5C,CAAA;AACAE,EAAAA,wBAAuB,CAACV,QAAD,EAAWC,UAAX,EAAuBC,KAAvB,CAAvB,CAAA;AACA,EAAA,OAAOA,KAAP,CAAA;AACD;;;;;;;;;;;ACoDD;AACA;AACA;AACA;AACA;AACA;AACO,MAAMS,YAAN,SAA2DC,UAA3D,CAEL;EAQAC,WAAW,CAACC,KAAD,EAAe;AACxB,IAAA,KAAA,CAAMA,KAAN,CAAA,CAAA;;AADwB,IAAA,eAAA,CAAA,IAAA,EAAA,MAAA,EAPnB,eAOmB,CAAA,CAAA;;IAAA,eALnB,CAAA,IAAA,EAAA,MAAA,EAAA;AACLC,MAAAA,GAAG,EAAEC,OADA;AAELF,MAAAA,KAAK,EAAEG,SAAAA;KAGiB,CAAA,CAAA;;IAAA,eAYZ,CAAA,IAAA,EAAA,aAAA,EAAA,CAACC,OAAD,EAAuB;AAAEH,MAAAA,GAAAA;AAAF,KAAvB,KAAuD;MACnE,IAAII,OAAO,GAAIC,KAAD,IAAkB;QAC9B,qBAAmBL,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA,CAAAA,IAAAA,CAAAA,IAAAA,EAAAA,GAAnB,EAAwBK,KAAxB,CAAA,CAAA;OADF,CAAA;;AAIAF,MAAAA,OAAO,CAACG,gBAAR,CAAyB,OAAzB,EAAkCF,OAAlC,CAAA,CAAA;AAEA,MAAA,OAAO,MAAM;AACXD,QAAAA,OAAO,CAACI,mBAAR,CAA4B,OAA5B,EAAqCH,OAArC,CAAA,CAAA;OADF,CAAA;KAnBwB,CAAA,CAAA;;AAAA,IAAA,0BAAA,CAAA,IAAA,EAAA,aAAA,EAAA;AAAA,MAAA,QAAA,EAAA,IAAA;AAAA,MAAA,KAAA,EAwBV,CAACJ,GAAD,EAAWK,KAAX,KAA4B;AAC1CG,QAAAA,MAAM,CACH,CAAA,sDAAA,CADG,EAEJH,KAAK,CAACI,MAAN,YAAwBC,WAAxB,IAAuCL,KAAK,CAACI,MAAN,YAAwBE,UAF3D,CAAN,CAAA;AAKA,QAAA,IAAIC,SAAS,GAAGC,QAAQ,CAACC,YAAT,EAAhB,CAAA;;AAEA,QAAA,IAAIF,SAAJ,EAAe;UACb,IAAI;YAAEG,IAAF;AAAQC,YAAAA,UAAAA;AAAR,WAAA,GAAuBJ,SAA3B,CAAA;AACA,UAAA,IAAIK,eAAe,GAAGF,IAAI,KAAK,OAAT,IAAoBV,KAAK,CAACI,MAAN,EAAcS,QAAd,CAAuBF,UAAvB,CAA1C,CAAA;;AAEA,UAAA,IAAIC,eAAJ,EAAqB;AACnBZ,YAAAA,KAAK,CAACc,eAAN,EAAA,CAAA;AAEA,YAAA,OAAA;AACD,WAAA;AACF,SAjByC;;;QAoB1C,IAAIC,WAAW,GAAGf,KAAK,CAACI,MAAN,CAAaY,OAAb,CAAqB,iCAArB,CAAlB,CAAA;;AAEA,QAAA,IAAID,WAAJ,EAAiB;AACf,UAAA,OAAA;AACD,SAAA;;QAED,IAAIE,OAAO,GAAGC,IAAI,CAACC,MAAL,CAAYxB,GAAZ,EAAiBJ,YAAjB,CAAd,CAAA;AAEA0B,QAAAA,OAAO,CAACG,MAAR,EAAA,CAAA;AACD,OAAA;AArDyB,KAAA,CAAA,CAAA;;IAGxB,IAAIC,aAAa,GAAGC,OAAO,CAACC,QAAR,CAAiB,IAAK7B,CAAAA,KAAtB,EAA6BH,YAA7B,CAApB,CAAA;AAEAY,IAAAA,MAAM,CACH,CAAD,4FAAA,CAAA,GACG,CAFC,4FAAA,CAAA,EAGJkB,aAAa,CAACd,SAAd,IAA2Bc,aAAa,CAACG,QAAzC,IAAqDH,aAAa,CAACI,UAH/D,CAAN,CAAA;AAKD,GAAA;;AAlBD,CAAA;IAgEI5B,4DAAN,MAAMA,SAAN,CAAgB;EAGdJ,WAAW,CAACC,KAAD,EAAe;AAAA,IAAA,0BAAA,CAAA,IAAA,EAAA,MAAA,EAAA;AAAA,MAAA,QAAA,EAAA,IAAA;AAAA,MAAA,KAAA,EAAA,KAAA,CAAA;AAAA,KAAA,CAAA,CAAA;;AACxB,IAAA,qBAAA,CAAA,IAAA,EAAA,MAAA,EAAcA,KAAd,CAAA,CAAA;AACD,GAAA;;AAGY,EAAA,IAATa,SAAS,GAAiB;IAC5B,IAAImB,eAAe,GAAGJ,OAAO,CAACC,QAAR,uBAAiB,IAAjB,EAAA,MAAA,CAAA,EAA8BhC,YAA9B,CAAA,CAA4CgB,SAAlE,CAAA;AAEAJ,IAAAA,MAAM,CAAE,CAAA,+CAAA,CAAF,EAAoDuB,eAApD,CAAN,CAAA;;IAEA,IAAIA,eAAe,YAAYC,GAA/B,EAAoC;AAClC,MAAA,OAAOD,eAAP,CAAA;AACD,KAAA;;AAED,IAAA,OAAO,IAAIC,GAAJ,CAAQD,eAAR,CAAP,CAAA;AACD,GAAA;;AAlBa,+DAObE;;;;AAcH,MAAMhC,OAAN,CAAc;EAGZH,WAAW,CAACE,GAAD,EAAgB;AAAA,IAAA,0BAAA,CAAA,IAAA,EAAA,IAAA,EAAA;AAAA,MAAA,QAAA,EAAA,IAAA;AAAA,MAAA,KAAA,EAAA,KAAA,CAAA;AAAA,KAAA,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,QAAA,EAmBlB,MAAM;MACb,IAAI,IAAA,CAAKkC,UAAT,EAAqB;AACnB,QAAA,IAAA,CAAKC,QAAL,EAAA,CAAA;AAEA,QAAA,OAAA;AACD,OAAA;;AAED,MAAA,IAAA,CAAKC,MAAL,EAAA,CAAA;KA1ByB,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,QAAA,EA6BlB,MAAM;MACb,IAAIV,aAAa,GAAGC,OAAO,CAACC,QAAR,CAAiB,qBAAU7B,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA,KAA3B,EAAkCH,YAAlC,CAApB,CAAA;;AAEA,MAAA,IAAI,SAAS8B,aAAT,IAA0BA,aAAa,CAACW,GAA5C,EAAiD;QAC/C,IAAIA,GAAG,GAAGX,aAAa,CAACW,GAAd,CAAkB,qBAAA,CAAA,IAAA,EAAA,IAAA,CAAA,CAAUC,IAA5B,CAAV,CAAA;AAEAZ,QAAAA,aAAa,CAACG,QAAd,GAAyBQ,GAAzB,wBAA8B,IAA9B,EAAA,IAAA,CAAA,CAAA,CAAA;AAEA,QAAA,OAAA;AACD,OAAA;;AAEDX,MAAAA,aAAa,CAACG,QAAd,GAAyB,qBAAUS,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA,IAAnC,wBAAyC,IAAzC,EAAA,IAAA,CAAA,CAAA,CAAA;KAxCyB,CAAA,CAAA;;AAAA,IAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EA2ChB,MAAM;MACf,IAAIZ,aAAa,GAAGC,OAAO,CAACC,QAAR,CAAiB,qBAAU7B,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA,KAA3B,EAAkCH,YAAlC,CAApB,CAAA;;AAEA,MAAA,IAAI,SAAS8B,aAAT,IAA0BA,aAAa,CAACW,GAA5C,EAAiD;QAC/C,IAAIA,GAAG,GAAGX,aAAa,CAACW,GAAd,CAAkB,qBAAA,CAAA,IAAA,EAAA,IAAA,CAAA,CAAUC,IAA5B,CAAV,CAAA;AAEAZ,QAAAA,aAAa,CAACI,UAAd,GAA2BO,GAA3B,wBAAgC,IAAhC,EAAA,IAAA,CAAA,CAAA,CAAA;AAEA,QAAA,OAAA;AACD,OAAA;;AAEDX,MAAAA,aAAa,CAACI,UAAd,GAA2B,qBAAUQ,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA,IAArC,wBAA2C,IAA3C,EAAA,IAAA,CAAA,CAAA,CAAA;KAtDyB,CAAA,CAAA;;AACzB,IAAA,qBAAA,CAAA,IAAA,EAAA,IAAA,EAAYtC,GAAZ,CAAA,CAAA;AACD,GAAA;;AAEa,EAAA,IAAVkC,UAAU,GAAY;IACxB,IAAIK,SAAS,GAAGhB,IAAI,CAACK,QAAL,CAAc,qBAAU7B,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA,KAAxB,EAA+BH,YAA/B,CAAhB,CAAA;IACA,IAAI8B,aAAa,GAAGC,OAAO,CAACC,QAAR,CAAiB,qBAAU7B,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA,KAA3B,EAAkCH,YAAlC,CAApB,CAAA;;AAEA,IAAA,IAAI,SAAS8B,aAAT,IAA0BA,aAAa,CAACW,GAA5C,EAAiD;MAC/C,IAAIG,WAAW,GAAGd,aAAa,CAACW,GAAd,CAAkB,qBAAA,CAAA,IAAA,EAAA,IAAA,CAAA,CAAUC,IAA5B,CAAlB,CAAA;AAEA,MAAA,OAAOC,SAAS,CAAC3B,SAAV,CAAoB6B,GAApB,CAAwBD,WAAxB,CAAP,CAAA;AACD,KAAA;;IAED,IAAIA,WAAW,GAAG,qBAAA,CAAA,IAAA,EAAA,IAAA,CAAA,CAAUF,IAA5B,CAAA;;AAEA,IAAA,OAAOC,SAAS,CAAC3B,SAAV,CAAoB6B,GAApB,CAAwBD,WAAxB,CAAP,CAAA;AACD,GAAA;;AApBW;;;;"}
@@ -0,0 +1,4 @@
1
+ import { Column } from "../../index";
2
+ declare const isSticky: <DataType = unknown>(column: Column<DataType>) => boolean;
3
+ declare const styleFor: <DataType = unknown>(column: Column<DataType>) => Partial<CSSStyleDeclaration>;
4
+ export { isSticky, styleFor };
@@ -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,3 @@
1
+ export * from "./helpers";
2
+ export { StickyColumns, StickyColumns as Plugin } from "./plugin";
3
+ export type { Signature } from "./plugin";
@@ -0,0 +1,3 @@
1
+ export { isSticky, styleFor } from './helpers.js';
2
+ export { StickyColumns as Plugin, StickyColumns } from './plugin.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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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"}