@spectrum-web-components/table 0.0.2-table.2609

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 (108) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +364 -0
  3. package/custom-elements.json +1083 -0
  4. package/package.json +74 -0
  5. package/sp-table-body.d.ts +6 -0
  6. package/sp-table-body.js +14 -0
  7. package/sp-table-body.js.map +1 -0
  8. package/sp-table-cell.d.ts +6 -0
  9. package/sp-table-cell.js +14 -0
  10. package/sp-table-cell.js.map +1 -0
  11. package/sp-table-checkbox-cell.d.ts +6 -0
  12. package/sp-table-checkbox-cell.js +14 -0
  13. package/sp-table-checkbox-cell.js.map +1 -0
  14. package/sp-table-head-cell.d.ts +6 -0
  15. package/sp-table-head-cell.js +14 -0
  16. package/sp-table-head-cell.js.map +1 -0
  17. package/sp-table-head.d.ts +6 -0
  18. package/sp-table-head.js +14 -0
  19. package/sp-table-head.js.map +1 -0
  20. package/sp-table-row.d.ts +6 -0
  21. package/sp-table-row.js +14 -0
  22. package/sp-table-row.js.map +1 -0
  23. package/sp-table.d.ts +6 -0
  24. package/sp-table.js +14 -0
  25. package/sp-table.js.map +1 -0
  26. package/src/Table.d.ts +42 -0
  27. package/src/Table.js +363 -0
  28. package/src/Table.js.map +1 -0
  29. package/src/TableBody.d.ts +9 -0
  30. package/src/TableBody.js +36 -0
  31. package/src/TableBody.js.map +1 -0
  32. package/src/TableCell.d.ts +10 -0
  33. package/src/TableCell.js +40 -0
  34. package/src/TableCell.js.map +1 -0
  35. package/src/TableCheckboxCell.d.ts +17 -0
  36. package/src/TableCheckboxCell.js +76 -0
  37. package/src/TableCheckboxCell.js.map +1 -0
  38. package/src/TableHead.d.ts +15 -0
  39. package/src/TableHead.js +56 -0
  40. package/src/TableHead.js.map +1 -0
  41. package/src/TableHeadCell.d.ts +21 -0
  42. package/src/TableHeadCell.js +98 -0
  43. package/src/TableHeadCell.js.map +1 -0
  44. package/src/TableRow.d.ts +18 -0
  45. package/src/TableRow.js +64 -0
  46. package/src/TableRow.js.map +1 -0
  47. package/src/index.d.ts +1 -0
  48. package/src/index.js +13 -0
  49. package/src/index.js.map +1 -0
  50. package/src/spectrum-config.js +245 -0
  51. package/src/spectrum-table-body.css.d.ts +2 -0
  52. package/src/spectrum-table-body.css.js +27 -0
  53. package/src/spectrum-table-body.css.js.map +1 -0
  54. package/src/spectrum-table-cell.css.d.ts +2 -0
  55. package/src/spectrum-table-cell.css.js +37 -0
  56. package/src/spectrum-table-cell.css.js.map +1 -0
  57. package/src/spectrum-table-checkbox-cell.css.d.ts +2 -0
  58. package/src/spectrum-table-checkbox-cell.css.js +23 -0
  59. package/src/spectrum-table-checkbox-cell.css.js.map +1 -0
  60. package/src/spectrum-table-head-cell.css.d.ts +2 -0
  61. package/src/spectrum-table-head-cell.css.js +71 -0
  62. package/src/spectrum-table-head-cell.css.js.map +1 -0
  63. package/src/spectrum-table-head.css.d.ts +2 -0
  64. package/src/spectrum-table-head.css.js +17 -0
  65. package/src/spectrum-table-head.css.js.map +1 -0
  66. package/src/spectrum-table-row.css.d.ts +2 -0
  67. package/src/spectrum-table-row.css.js +43 -0
  68. package/src/spectrum-table-row.css.js.map +1 -0
  69. package/src/spectrum-table.css.d.ts +2 -0
  70. package/src/spectrum-table.css.js +543 -0
  71. package/src/spectrum-table.css.js.map +1 -0
  72. package/src/table-body.css.d.ts +2 -0
  73. package/src/table-body.css.js +27 -0
  74. package/src/table-body.css.js.map +1 -0
  75. package/src/table-cell.css.d.ts +2 -0
  76. package/src/table-cell.css.js +37 -0
  77. package/src/table-cell.css.js.map +1 -0
  78. package/src/table-checkbox-cell.css.d.ts +2 -0
  79. package/src/table-checkbox-cell.css.js +23 -0
  80. package/src/table-checkbox-cell.css.js.map +1 -0
  81. package/src/table-head-cell.css.d.ts +2 -0
  82. package/src/table-head-cell.css.js +71 -0
  83. package/src/table-head-cell.css.js.map +1 -0
  84. package/src/table-head.css.d.ts +2 -0
  85. package/src/table-head.css.js +17 -0
  86. package/src/table-head.css.js.map +1 -0
  87. package/src/table-row.css.d.ts +2 -0
  88. package/src/table-row.css.js +43 -0
  89. package/src/table-row.css.js.map +1 -0
  90. package/src/table.css.d.ts +2 -0
  91. package/src/table.css.js +543 -0
  92. package/src/table.css.js.map +1 -0
  93. package/stories/index.js +44 -0
  94. package/stories/index.js.map +1 -0
  95. package/stories/table-elements.stories.js +237 -0
  96. package/stories/table-elements.stories.js.map +1 -0
  97. package/stories/table-virtualized.stories.js +221 -0
  98. package/stories/table-virtualized.stories.js.map +1 -0
  99. package/stories/table.stories.js.map +1 -0
  100. package/test/benchmark/basic-test.js +18 -0
  101. package/test/benchmark/basic-test.js.map +1 -0
  102. package/test/table-elements.test-vrt.js +15 -0
  103. package/test/table-elements.test-vrt.js.map +1 -0
  104. package/test/table-virtualized.test-vrt.js +15 -0
  105. package/test/table-virtualized.test-vrt.js.map +1 -0
  106. package/test/table.test-vrt.js.map +1 -0
  107. package/test/table.test.js +870 -0
  108. package/test/table.test.js.map +1 -0
package/src/Table.js ADDED
@@ -0,0 +1,363 @@
1
+ import { __decorate } from "tslib";
2
+ /* TABLE
3
+ Copyright 2022 Adobe. All rights reserved.
4
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License. You may obtain a copy
6
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
7
+
8
+ Unless required by applicable law or agreed to in writing, software distributed under
9
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
10
+ OF ANY KIND, either express or implied. See the License for the specific language
11
+ governing permissions and limitations under the License.
12
+ */
13
+ import { html, render, SpectrumElement, } from '@spectrum-web-components/base';
14
+ import { property } from '@spectrum-web-components/base/src/decorators.js';
15
+ import styles from './table.css.js';
16
+ import { virtualize } from '@lit-labs/virtualizer/virtualize.js';
17
+ export class RangeChangedEvent extends Event {
18
+ constructor(range) {
19
+ super(RangeChangedEvent.eventName, { bubbles: true });
20
+ this.first = range.first;
21
+ this.last = range.last;
22
+ }
23
+ }
24
+ RangeChangedEvent.eventName = 'rangeChanged';
25
+ /**
26
+ * @element sp-table
27
+ */
28
+ export class Table extends SpectrumElement {
29
+ constructor() {
30
+ super(...arguments);
31
+ this._renderItem = () => html ``;
32
+ this.role = 'grid';
33
+ this.selected = [];
34
+ this.selectedSet = new Set();
35
+ this.items = [];
36
+ this.itemValue = (_item, index) => {
37
+ return '' + index;
38
+ };
39
+ }
40
+ static get styles() {
41
+ return [styles];
42
+ }
43
+ get renderItem() {
44
+ return this._renderItem;
45
+ }
46
+ set renderItem(fn) {
47
+ this._renderItem = (item, index) => {
48
+ const value = this.itemValue(item, index);
49
+ const selected = this.selected.includes(value);
50
+ return html `
51
+ <sp-table-row
52
+ value=${value}
53
+ aria-rowindex=${index + 1}
54
+ ?selected=${selected}
55
+ >
56
+ ${this.selects
57
+ ? html `
58
+ <sp-table-checkbox-cell
59
+ ?checked=${selected}
60
+ ></sp-table-checkbox-cell>
61
+ `
62
+ : html ``}
63
+ ${fn(item, index)}
64
+ </sp-table-row>
65
+ `;
66
+ };
67
+ }
68
+ get isVirtualized() {
69
+ return !!this.items.length;
70
+ }
71
+ focus() {
72
+ const sortableHeadCell = this.querySelector('sp-table-head-cell[sortable]');
73
+ if (sortableHeadCell) {
74
+ sortableHeadCell.focus();
75
+ }
76
+ }
77
+ selectAllRows() {
78
+ if (this.isVirtualized) {
79
+ this.items.forEach((item, index) => {
80
+ this.selectedSet.add(this.itemValue(item, index));
81
+ });
82
+ this.selected = [...this.selectedSet];
83
+ }
84
+ else {
85
+ const tableRows = [
86
+ ...this.querySelectorAll('sp-table-row'),
87
+ ];
88
+ tableRows.forEach((row) => {
89
+ row.selected = true; // Visually
90
+ this.selectedSet.add(row.value); // Prepares table state
91
+ });
92
+ this.selected = [...this.selectedSet];
93
+ }
94
+ if (!this.tableHeadCheckboxCell)
95
+ return;
96
+ this.tableHeadCheckboxCell.checked = true;
97
+ this.tableHeadCheckboxCell.indeterminate = false;
98
+ }
99
+ deselectAllRows() {
100
+ this.selectedSet.clear();
101
+ this.selected = [];
102
+ if (!this.isVirtualized) {
103
+ const selectedRows = [
104
+ ...this.querySelectorAll('[selected]'),
105
+ ];
106
+ selectedRows.forEach((row) => {
107
+ row.selected = false;
108
+ });
109
+ }
110
+ if (!this.tableHeadCheckboxCell)
111
+ return;
112
+ this.tableHeadCheckboxCell.checked = false;
113
+ this.tableHeadCheckboxCell.indeterminate = false;
114
+ }
115
+ manageSelects() {
116
+ const tableHead = this.querySelector('sp-table-head');
117
+ const checkboxes = this.querySelectorAll('sp-table-checkbox-cell');
118
+ if (!!this.selects) {
119
+ let allSelected = false;
120
+ if (this.isVirtualized) {
121
+ allSelected =
122
+ this.selected.length > 0 &&
123
+ this.selected.length === this.items.length;
124
+ }
125
+ else {
126
+ const tableRows = [
127
+ ...this.querySelectorAll('sp-table-row'),
128
+ ];
129
+ tableRows.forEach((row) => {
130
+ row.selected = this.selectedSet.has(row.value);
131
+ if (!checkboxes || checkboxes.length < 1) {
132
+ const checkbox = document.createElement('sp-table-checkbox-cell');
133
+ row.insertAdjacentElement('afterbegin', checkbox);
134
+ checkbox.checked = row.selected;
135
+ }
136
+ });
137
+ allSelected = this.selected.length === tableRows.length;
138
+ }
139
+ if (!this.tableHeadCheckboxCell) {
140
+ this.tableHeadCheckboxCell = document.createElement('sp-table-checkbox-cell');
141
+ tableHead.insertAdjacentElement('afterbegin', this.tableHeadCheckboxCell);
142
+ }
143
+ this.tableHeadCheckboxCell.selectsSingle =
144
+ this.selects === 'single';
145
+ this.tableHeadCheckboxCell.checked = allSelected;
146
+ this.tableHeadCheckboxCell.indeterminate =
147
+ this.selected.length > 0 && !allSelected;
148
+ }
149
+ else {
150
+ checkboxes.forEach((box) => {
151
+ box.remove();
152
+ });
153
+ delete this.tableHeadCheckboxCell;
154
+ }
155
+ }
156
+ manageSelected() {
157
+ this.selectedSet = new Set(this.selected);
158
+ if (!this.isVirtualized) {
159
+ const rows = [
160
+ ...this.querySelectorAll('sp-table-row'),
161
+ ];
162
+ rows.forEach((row) => {
163
+ row.selected = this.selectedSet.has(row.value);
164
+ });
165
+ if (this.tableHeadCheckboxCell)
166
+ this.tableHeadCheckboxCell.checked =
167
+ this.selected.length === rows.length;
168
+ }
169
+ }
170
+ manageCheckboxes() {
171
+ var _a;
172
+ const tableRows = [
173
+ ...this.querySelectorAll('sp-table-row'),
174
+ ];
175
+ const tableHead = this.querySelector('sp-table-head');
176
+ if (!!this.selects) {
177
+ this.tableHeadCheckboxCell = document.createElement('sp-table-checkbox-cell');
178
+ const allSelected = this.selected.length === tableRows.length;
179
+ if (this.tableHeadCheckboxCell) {
180
+ this.tableHeadCheckboxCell.selectsSingle =
181
+ this.selects === 'single';
182
+ this.tableHeadCheckboxCell.checked = allSelected;
183
+ this.tableHeadCheckboxCell.indeterminate =
184
+ this.selected.length > 0 && !allSelected;
185
+ }
186
+ tableHead.insertAdjacentElement('afterbegin', this.tableHeadCheckboxCell);
187
+ tableRows.forEach((row) => {
188
+ const checkbox = document.createElement('sp-table-checkbox-cell');
189
+ row.insertAdjacentElement('afterbegin', checkbox);
190
+ row.selected = this.selectedSet.has(row.value);
191
+ checkbox.checked = row.selected;
192
+ });
193
+ }
194
+ else {
195
+ (_a = tableHead.querySelector('sp-table-checkbox-cell')) === null || _a === void 0 ? void 0 : _a.remove();
196
+ tableRows.forEach((row) => {
197
+ var _a;
198
+ (_a = row.checkboxCells[0]) === null || _a === void 0 ? void 0 : _a.remove();
199
+ if (this.selected.length) {
200
+ row.selected = this.selectedSet.has(row.value);
201
+ }
202
+ });
203
+ }
204
+ }
205
+ handleChange(event) {
206
+ // Contain the children's change events and convert it to a change event on the table
207
+ // if rowItem doesn't have a value, we assume it's in TableHead (naive!!!)
208
+ const { target } = event;
209
+ const { parentElement: rowItem } = target;
210
+ if (!rowItem.value) {
211
+ const { checkbox } = target;
212
+ if (checkbox.checked || checkbox.indeterminate) {
213
+ this.selectAllRows();
214
+ }
215
+ else {
216
+ this.deselectAllRows();
217
+ }
218
+ }
219
+ else {
220
+ switch (this.selects) {
221
+ case 'single': {
222
+ this.deselectAllRows();
223
+ if (rowItem.selected) {
224
+ this.selectedSet.add(rowItem.value);
225
+ this.selected = [...this.selectedSet];
226
+ }
227
+ break;
228
+ // if you have multiple selected, but selects='single',
229
+ // we deselect all cells? hmm...
230
+ // EXAMPLE: rows 1, 2, 4 are selected but selects is single.
231
+ // we deselect 2 => 1 and 4 are STILL SELECTED. if you want
232
+ // to select any item, it's going to deselect all the cells before
233
+ // reselecting the cell you just clicked on, as seen above.
234
+ }
235
+ case 'multiple': {
236
+ if (rowItem.selected) {
237
+ this.selectedSet.add(rowItem.value);
238
+ }
239
+ else {
240
+ this.selectedSet.delete(rowItem.value);
241
+ }
242
+ this.selected = [...this.selectedSet];
243
+ const tableRows = [
244
+ ...this.querySelectorAll('sp-table-row'),
245
+ ];
246
+ const allSelected = this.selected.length === tableRows.length;
247
+ if (!this.tableHeadCheckboxCell)
248
+ return;
249
+ this.tableHeadCheckboxCell.checked = allSelected;
250
+ this.tableHeadCheckboxCell.indeterminate =
251
+ this.selected.length > 0 && !allSelected;
252
+ break;
253
+ }
254
+ default: {
255
+ break;
256
+ }
257
+ }
258
+ }
259
+ event.stopPropagation();
260
+ this.dispatchEvent(new Event('change', {
261
+ cancelable: true,
262
+ bubbles: true,
263
+ composed: true,
264
+ }));
265
+ }
266
+ scrollToIndex(index) {
267
+ if (index) {
268
+ this.renderVirtualizedItems(index);
269
+ }
270
+ }
271
+ render() {
272
+ return html `
273
+ <slot @change=${this.handleChange}></slot>
274
+ `;
275
+ }
276
+ willUpdate(changed) {
277
+ if (!this.hasUpdated) {
278
+ const rowValues = new Set();
279
+ if (this.isVirtualized) {
280
+ this.items.forEach((item, index) => {
281
+ const value = this.itemValue(item, index);
282
+ rowValues.add(value);
283
+ });
284
+ }
285
+ else {
286
+ const tableRows = [
287
+ ...this.querySelectorAll('sp-table-row'),
288
+ ];
289
+ tableRows.forEach((row) => {
290
+ rowValues.add(row.value);
291
+ });
292
+ }
293
+ const oldSelectedCount = this.selected.length;
294
+ this.selected = this.selected.filter((selectedItem) => rowValues.has(selectedItem));
295
+ if (oldSelectedCount !== this.selected.length) {
296
+ this.dispatchEvent(new Event('change', {
297
+ cancelable: true,
298
+ bubbles: true,
299
+ composed: true,
300
+ }));
301
+ }
302
+ this.selectedSet = new Set(this.selected);
303
+ this.manageCheckboxes();
304
+ }
305
+ if (changed.has('selects')) {
306
+ this.manageSelects();
307
+ }
308
+ if (changed.has('selected') && this.hasUpdated) {
309
+ this.manageSelected();
310
+ }
311
+ }
312
+ updated() {
313
+ if (this.items.length) {
314
+ this.renderVirtualizedItems();
315
+ }
316
+ }
317
+ renderVirtualizedItems(index) {
318
+ if (!this.tableBody) {
319
+ this.tableBody = this.querySelector('sp-table-body');
320
+ if (!this.tableBody) {
321
+ this.tableBody = document.createElement('sp-table-body');
322
+ this.append(this.tableBody);
323
+ }
324
+ // TODO: query Lit team about the `e.stopPropagation()` that happens here.
325
+ this.tableBody.addEventListener('rangeChanged', (event) => {
326
+ // console.log('rangeChanged');
327
+ this.dispatchEvent(new RangeChangedEvent({
328
+ first: event.first,
329
+ last: event.last,
330
+ }));
331
+ });
332
+ }
333
+ const config = {
334
+ items: this.items,
335
+ renderItem: this.renderItem,
336
+ scroller: true,
337
+ };
338
+ if (index) {
339
+ config.scrollToIndex = {
340
+ index,
341
+ };
342
+ }
343
+ render(html `
344
+ ${virtualize(config)}
345
+ `, this.tableBody);
346
+ }
347
+ }
348
+ __decorate([
349
+ property({ reflect: true })
350
+ ], Table.prototype, "role", void 0);
351
+ __decorate([
352
+ property({ type: String, reflect: true })
353
+ ], Table.prototype, "selects", void 0);
354
+ __decorate([
355
+ property({ type: Array })
356
+ ], Table.prototype, "selected", void 0);
357
+ __decorate([
358
+ property({ type: Array })
359
+ ], Table.prototype, "items", void 0);
360
+ __decorate([
361
+ property({ type: Object })
362
+ ], Table.prototype, "itemValue", void 0);
363
+ //# sourceMappingURL=Table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.js","sourceRoot":"","sources":["Table.ts"],"names":[],"mappings":"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","sourcesContent":["/* TABLE\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n render,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport styles from './table.css.js';\nimport { TableBody } from './TableBody.js';\nimport { TableCheckboxCell } from './TableCheckboxCell.js';\nimport { TableHead } from './TableHead.js';\nimport type { TableHeadCell } from './TableHeadCell.js';\nimport { TableRow } from './TableRow.js';\nimport { virtualize } from '@lit-labs/virtualizer/virtualize.js';\n\ninterface Range {\n first: number;\n last: number;\n}\n\nexport class RangeChangedEvent extends Event {\n static eventName = 'rangeChanged';\n\n first: number;\n last: number;\n\n constructor(range: Range) {\n super(RangeChangedEvent.eventName, { bubbles: true });\n this.first = range.first;\n this.last = range.last;\n }\n}\n\n/**\n * @element sp-table\n */\n\nexport class Table extends SpectrumElement {\n public static override get styles(): CSSResultArray {\n return [styles];\n }\n\n get renderItem(): (\n item: Record<string, unknown>,\n index: number\n ) => TemplateResult {\n return this._renderItem;\n }\n\n set renderItem(\n fn: (item: Record<string, unknown>, index: number) => TemplateResult\n ) {\n this._renderItem = (\n item: Record<string, unknown>,\n index: number\n ): TemplateResult => {\n const value = this.itemValue(item, index);\n const selected = this.selected.includes(value);\n\n return html`\n <sp-table-row\n value=${value}\n aria-rowindex=${index + 1}\n ?selected=${selected}\n >\n ${this.selects\n ? html`\n <sp-table-checkbox-cell\n ?checked=${selected}\n ></sp-table-checkbox-cell>\n `\n : html``}\n ${fn(item, index)}\n </sp-table-row>\n `;\n };\n }\n\n private _renderItem: (\n item: Record<string, unknown>,\n index: number\n ) => TemplateResult = () => html``;\n\n @property({ reflect: true })\n public role = 'grid';\n\n @property({ type: String, reflect: true })\n public selects: undefined | 'single' | 'multiple';\n\n @property({ type: Array })\n public selected: string[] = [];\n\n private selectedSet = new Set<string>();\n\n @property({ type: Array })\n public items: Record<string, unknown>[] = [];\n\n @property({ type: Object })\n public itemValue = (_item: unknown, index: number): string => {\n return '' + index;\n };\n\n private tableBody?: TableBody;\n\n private tableHeadCheckboxCell?: TableCheckboxCell;\n\n private get isVirtualized(): boolean {\n return !!this.items.length;\n }\n\n public override focus(): void {\n const sortableHeadCell = this.querySelector(\n 'sp-table-head-cell[sortable]'\n ) as TableHeadCell;\n if (sortableHeadCell) {\n sortableHeadCell.focus();\n }\n }\n\n private selectAllRows(): void {\n if (this.isVirtualized) {\n this.items.forEach((item, index: number) => {\n this.selectedSet.add(this.itemValue(item, index));\n });\n this.selected = [...this.selectedSet];\n } else {\n const tableRows = [\n ...this.querySelectorAll('sp-table-row'),\n ] as TableRow[];\n tableRows.forEach((row) => {\n row.selected = true; // Visually\n this.selectedSet.add(row.value); // Prepares table state\n });\n this.selected = [...this.selectedSet];\n }\n\n if (!this.tableHeadCheckboxCell) return;\n this.tableHeadCheckboxCell.checked = true;\n this.tableHeadCheckboxCell.indeterminate = false;\n }\n\n private deselectAllRows(): void {\n this.selectedSet.clear();\n this.selected = [];\n\n if (!this.isVirtualized) {\n const selectedRows = [\n ...this.querySelectorAll('[selected]'),\n ] as TableRow[];\n\n selectedRows.forEach((row) => {\n row.selected = false;\n });\n }\n\n if (!this.tableHeadCheckboxCell) return;\n this.tableHeadCheckboxCell.checked = false;\n this.tableHeadCheckboxCell.indeterminate = false;\n }\n\n protected manageSelects(): void {\n const tableHead = this.querySelector('sp-table-head') as TableHead;\n const checkboxes = this.querySelectorAll('sp-table-checkbox-cell');\n\n if (!!this.selects) {\n let allSelected = false;\n if (this.isVirtualized) {\n allSelected =\n this.selected.length > 0 &&\n this.selected.length === this.items.length;\n } else {\n const tableRows = [\n ...this.querySelectorAll('sp-table-row'),\n ] as TableRow[];\n\n tableRows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n if (!checkboxes || checkboxes.length < 1) {\n const checkbox = document.createElement(\n 'sp-table-checkbox-cell'\n );\n row.insertAdjacentElement('afterbegin', checkbox);\n checkbox.checked = row.selected;\n }\n });\n\n allSelected = this.selected.length === tableRows.length;\n }\n\n if (!this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n }\n this.tableHeadCheckboxCell.selectsSingle =\n this.selects === 'single';\n this.tableHeadCheckboxCell.checked = allSelected;\n this.tableHeadCheckboxCell.indeterminate =\n this.selected.length > 0 && !allSelected;\n } else {\n checkboxes.forEach((box) => {\n box.remove();\n });\n delete this.tableHeadCheckboxCell;\n }\n }\n\n protected manageSelected(): void {\n this.selectedSet = new Set(this.selected);\n\n if (!this.isVirtualized) {\n const rows = [\n ...this.querySelectorAll('sp-table-row'),\n ] as TableRow[];\n\n rows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n });\n if (this.tableHeadCheckboxCell)\n this.tableHeadCheckboxCell.checked =\n this.selected.length === rows.length;\n }\n }\n\n protected manageCheckboxes(): void {\n const tableRows = [\n ...this.querySelectorAll('sp-table-row'),\n ] as TableRow[];\n const tableHead = this.querySelector('sp-table-head') as TableHead;\n\n if (!!this.selects) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n );\n const allSelected = this.selected.length === tableRows.length;\n\n if (this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell.selectsSingle =\n this.selects === 'single';\n this.tableHeadCheckboxCell.checked = allSelected;\n this.tableHeadCheckboxCell.indeterminate =\n this.selected.length > 0 && !allSelected;\n }\n\n tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n\n tableRows.forEach((row) => {\n const checkbox = document.createElement(\n 'sp-table-checkbox-cell'\n );\n row.insertAdjacentElement('afterbegin', checkbox);\n row.selected = this.selectedSet.has(row.value);\n checkbox.checked = row.selected;\n });\n } else {\n tableHead.querySelector('sp-table-checkbox-cell')?.remove();\n tableRows.forEach((row) => {\n row.checkboxCells[0]?.remove();\n if (this.selected.length) {\n row.selected = this.selectedSet.has(row.value);\n }\n });\n }\n }\n\n protected handleChange(event: Event): void {\n // Contain the children's change events and convert it to a change event on the table\n // if rowItem doesn't have a value, we assume it's in TableHead (naive!!!)\n const { target } = event;\n const { parentElement: rowItem } = target as HTMLElement & {\n parentElement: TableRow;\n };\n if (!rowItem.value) {\n const { checkbox } = target as TableCheckboxCell;\n if (checkbox.checked || checkbox.indeterminate) {\n this.selectAllRows();\n } else {\n this.deselectAllRows();\n }\n } else {\n switch (this.selects) {\n case 'single': {\n this.deselectAllRows();\n if (rowItem.selected) {\n this.selectedSet.add(rowItem.value);\n this.selected = [...this.selectedSet];\n }\n break;\n // if you have multiple selected, but selects='single',\n // we deselect all cells? hmm...\n // EXAMPLE: rows 1, 2, 4 are selected but selects is single.\n // we deselect 2 => 1 and 4 are STILL SELECTED. if you want\n // to select any item, it's going to deselect all the cells before\n // reselecting the cell you just clicked on, as seen above.\n }\n case 'multiple': {\n if (rowItem.selected) {\n this.selectedSet.add(rowItem.value);\n } else {\n this.selectedSet.delete(rowItem.value);\n }\n this.selected = [...this.selectedSet];\n\n const tableRows = [\n ...this.querySelectorAll('sp-table-row'),\n ] as TableRow[];\n\n const allSelected =\n this.selected.length === tableRows.length;\n\n if (!this.tableHeadCheckboxCell) return;\n this.tableHeadCheckboxCell.checked = allSelected;\n this.tableHeadCheckboxCell.indeterminate =\n this.selected.length > 0 && !allSelected;\n break;\n }\n default: {\n break;\n }\n }\n }\n event.stopPropagation();\n this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n public scrollToIndex(index?: number): void {\n if (index) {\n this.renderVirtualizedItems(index);\n }\n }\n\n protected override render(): TemplateResult {\n return html`\n <slot @change=${this.handleChange}></slot>\n `;\n }\n\n protected override willUpdate(changed: PropertyValues<this>): void {\n if (!this.hasUpdated) {\n const rowValues = new Set<string>();\n\n if (this.isVirtualized) {\n this.items.forEach((item, index) => {\n const value = this.itemValue(item, index);\n rowValues.add(value);\n });\n } else {\n const tableRows = [\n ...this.querySelectorAll('sp-table-row'),\n ] as TableRow[];\n tableRows.forEach((row) => {\n rowValues.add(row.value);\n });\n }\n\n const oldSelectedCount = this.selected.length;\n\n this.selected = this.selected.filter((selectedItem) =>\n rowValues.has(selectedItem)\n );\n if (oldSelectedCount !== this.selected.length) {\n this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n }\n this.selectedSet = new Set(this.selected);\n\n this.manageCheckboxes();\n }\n if (changed.has('selects')) {\n this.manageSelects();\n }\n\n if (changed.has('selected') && this.hasUpdated) {\n this.manageSelected();\n }\n }\n\n protected override updated(): void {\n if (this.items.length) {\n this.renderVirtualizedItems();\n }\n }\n\n protected renderVirtualizedItems(index?: number): void {\n if (!this.tableBody) {\n this.tableBody = this.querySelector('sp-table-body') as TableBody;\n if (!this.tableBody) {\n this.tableBody = document.createElement('sp-table-body');\n this.append(this.tableBody);\n }\n // TODO: query Lit team about the `e.stopPropagation()` that happens here.\n this.tableBody.addEventListener(\n 'rangeChanged',\n (event: RangeChangedEvent) => {\n // console.log('rangeChanged');\n this.dispatchEvent(\n new RangeChangedEvent({\n first: event.first,\n last: event.last,\n })\n );\n }\n );\n }\n const config: {\n renderItem?: (\n item: Record<string, unknown>,\n index: number\n ) => TemplateResult;\n scroller?: boolean;\n items?: Array<unknown>;\n scrollToIndex?: {\n index: number;\n };\n } = {\n items: this.items,\n renderItem: this.renderItem,\n scroller: true,\n };\n if (index) {\n config.scrollToIndex = {\n index,\n };\n }\n render(\n html`\n ${virtualize(config)}\n `,\n this.tableBody\n );\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { CSSResultArray, SpectrumElement, TemplateResult } from '@spectrum-web-components/base';
2
+ /**
3
+ * @element sp-table
4
+ */
5
+ export declare class TableBody extends SpectrumElement {
6
+ static get styles(): CSSResultArray;
7
+ role: string;
8
+ protected render(): TemplateResult;
9
+ }
@@ -0,0 +1,36 @@
1
+ import { __decorate } from "tslib";
2
+ /* TABLE BODY
3
+ Copyright 2022 Adobe. All rights reserved.
4
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License. You may obtain a copy
6
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
7
+
8
+ Unless required by applicable law or agreed to in writing, software distributed under
9
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
10
+ OF ANY KIND, either express or implied. See the License for the specific language
11
+ governing permissions and limitations under the License.
12
+ */
13
+ import { html, SpectrumElement, } from '@spectrum-web-components/base';
14
+ import { property } from '@spectrum-web-components/base/src/decorators.js';
15
+ import styles from './table-body.css.js';
16
+ /**
17
+ * @element sp-table
18
+ */
19
+ export class TableBody extends SpectrumElement {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.role = 'rowgroup';
23
+ }
24
+ static get styles() {
25
+ return [styles];
26
+ }
27
+ render() {
28
+ return html `
29
+ <slot></slot>
30
+ `;
31
+ }
32
+ }
33
+ __decorate([
34
+ property({ reflect: true })
35
+ ], TableBody.prototype, "role", void 0);
36
+ //# sourceMappingURL=TableBody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableBody.js","sourceRoot":"","sources":["TableBody.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;AACF,OAAO,EAEH,IAAI,EACJ,eAAe,GAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iDAAiD,CAAC;AAC3E,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,eAAe;IAA9C;;QAMW,SAAI,GAAG,UAAU,CAAC;IAO7B,CAAC;IAZU,MAAM,KAAc,MAAM;QAC7B,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAKkB,MAAM;QACrB,OAAO,IAAI,CAAA;;SAEV,CAAC;IACN,CAAC;CACJ;AAPG;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;uCACH","sourcesContent":["/* TABLE BODY\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n CSSResultArray,\n html,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport styles from './table-body.css.js';\n\n/**\n * @element sp-table\n */\nexport class TableBody extends SpectrumElement {\n public static override get styles(): CSSResultArray {\n return [styles];\n }\n\n @property({ reflect: true })\n public role = 'rowgroup';\n\n protected override render(): TemplateResult {\n return html`\n <slot></slot>\n `;\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { CSSResultArray, SpectrumElement, TemplateResult } from '@spectrum-web-components/base';
2
+ /**
3
+ * @element sp-table
4
+ */
5
+ export declare class TableCell extends SpectrumElement {
6
+ static get styles(): CSSResultArray;
7
+ role: string;
8
+ tabIndex: number;
9
+ protected render(): TemplateResult;
10
+ }
@@ -0,0 +1,40 @@
1
+ import { __decorate } from "tslib";
2
+ /*
3
+ Copyright 2022 Adobe. All rights reserved.
4
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License. You may obtain a copy
6
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
7
+
8
+ Unless required by applicable law or agreed to in writing, software distributed under
9
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
10
+ OF ANY KIND, either express or implied. See the License for the specific language
11
+ governing permissions and limitations under the License.
12
+ */
13
+ import { html, SpectrumElement, } from '@spectrum-web-components/base';
14
+ import { property } from '@spectrum-web-components/base/src/decorators.js';
15
+ import styles from './table-cell.css.js';
16
+ /**
17
+ * @element sp-table
18
+ */
19
+ export class TableCell extends SpectrumElement {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.role = 'gridcell';
23
+ this.tabIndex = -1;
24
+ }
25
+ static get styles() {
26
+ return [styles];
27
+ }
28
+ render() {
29
+ return html `
30
+ <slot></slot>
31
+ `;
32
+ }
33
+ }
34
+ __decorate([
35
+ property({ reflect: true })
36
+ ], TableCell.prototype, "role", void 0);
37
+ __decorate([
38
+ property({ type: Number, reflect: true })
39
+ ], TableCell.prototype, "tabIndex", void 0);
40
+ //# sourceMappingURL=TableCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCell.js","sourceRoot":"","sources":["TableCell.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;AACF,OAAO,EAEH,IAAI,EACJ,eAAe,GAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iDAAiD,CAAC;AAE3E,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,eAAe;IAA9C;;QAMW,SAAI,GAAG,UAAU,CAAC;QAGT,aAAQ,GAAG,CAAC,CAAC,CAAC;IAOlC,CAAC;IAfU,MAAM,KAAc,MAAM;QAC7B,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAQkB,MAAM;QACrB,OAAO,IAAI,CAAA;;SAEV,CAAC;IACN,CAAC;CACJ;AAVG;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;uCACH;AAGzB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;2CACZ","sourcesContent":["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n CSSResultArray,\n html,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\n\nimport styles from './table-cell.css.js';\n\n/**\n * @element sp-table\n */\nexport class TableCell extends SpectrumElement {\n public static override get styles(): CSSResultArray {\n return [styles];\n }\n\n @property({ reflect: true })\n public role = 'gridcell';\n\n @property({ type: Number, reflect: true })\n public override tabIndex = -1;\n\n protected override render(): TemplateResult {\n return html`\n <slot></slot>\n `;\n }\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { CSSResultArray, SpectrumElement, TemplateResult } from '@spectrum-web-components/base';
2
+ import '@spectrum-web-components/checkbox/sp-checkbox.js';
3
+ import { Checkbox } from '@spectrum-web-components/checkbox';
4
+ /**
5
+ * @element sp-table
6
+ */
7
+ export declare class TableCheckboxCell extends SpectrumElement {
8
+ static get styles(): CSSResultArray;
9
+ role: string;
10
+ tabIndex: number;
11
+ checkbox: Checkbox;
12
+ indeterminate: boolean;
13
+ checked: boolean;
14
+ disabled: boolean;
15
+ selectsSingle: boolean;
16
+ protected render(): TemplateResult;
17
+ }
@@ -0,0 +1,76 @@
1
+ import { __decorate } from "tslib";
2
+ /*
3
+ Copyright 2022 Adobe. All rights reserved.
4
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License. You may obtain a copy
6
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
7
+
8
+ Unless required by applicable law or agreed to in writing, software distributed under
9
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
10
+ OF ANY KIND, either express or implied. See the License for the specific language
11
+ governing permissions and limitations under the License.
12
+ */
13
+ import { html, SpectrumElement, } from '@spectrum-web-components/base';
14
+ import '@spectrum-web-components/checkbox/sp-checkbox.js';
15
+ import { property, query, } from '@spectrum-web-components/base/src/decorators.js';
16
+ import { ifDefined } from '@spectrum-web-components/base/src/directives.js';
17
+ import cellStyles from './table-cell.css.js';
18
+ import headCellStyles from './table-head-cell.css.js';
19
+ import styles from './table-checkbox-cell.css.js';
20
+ /**
21
+ * @element sp-table
22
+ */
23
+ export class TableCheckboxCell extends SpectrumElement {
24
+ constructor() {
25
+ super(...arguments);
26
+ this.role = 'gridcell';
27
+ this.tabIndex = -1;
28
+ this.indeterminate = false;
29
+ this.checked = false;
30
+ this.disabled = false;
31
+ this.selectsSingle = false;
32
+ }
33
+ static get styles() {
34
+ return [cellStyles, headCellStyles, styles];
35
+ }
36
+ render() {
37
+ return html `
38
+ <sp-checkbox
39
+ ?checked=${this.checked}
40
+ ?indeterminate=${this.indeterminate}
41
+ ?disabled=${this.disabled}
42
+ aria-hidden=${ifDefined(this.selectsSingle)}
43
+ @change=${() => {
44
+ this.dispatchEvent(new Event('change', {
45
+ bubbles: true,
46
+ cancelable: true,
47
+ composed: true,
48
+ }));
49
+ }}
50
+ class="checkbox"
51
+ ></sp-checkbox>
52
+ `;
53
+ }
54
+ }
55
+ __decorate([
56
+ property({ reflect: true })
57
+ ], TableCheckboxCell.prototype, "role", void 0);
58
+ __decorate([
59
+ property({ type: Number, reflect: true })
60
+ ], TableCheckboxCell.prototype, "tabIndex", void 0);
61
+ __decorate([
62
+ query('.checkbox')
63
+ ], TableCheckboxCell.prototype, "checkbox", void 0);
64
+ __decorate([
65
+ property({ type: Boolean })
66
+ ], TableCheckboxCell.prototype, "indeterminate", void 0);
67
+ __decorate([
68
+ property({ type: Boolean })
69
+ ], TableCheckboxCell.prototype, "checked", void 0);
70
+ __decorate([
71
+ property({ type: Boolean })
72
+ ], TableCheckboxCell.prototype, "disabled", void 0);
73
+ __decorate([
74
+ property({ type: Boolean, reflect: true, attribute: 'selects-single' })
75
+ ], TableCheckboxCell.prototype, "selectsSingle", void 0);
76
+ //# sourceMappingURL=TableCheckboxCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCheckboxCell.js","sourceRoot":"","sources":["TableCheckboxCell.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;EAUE;AACF,OAAO,EAEH,IAAI,EACJ,eAAe,GAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,kDAAkD,CAAC;AAC1D,OAAO,EACH,QAAQ,EACR,KAAK,GACR,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC5E,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAC7C,OAAO,cAAc,MAAM,0BAA0B,CAAC;AACtD,OAAO,MAAM,MAAM,8BAA8B,CAAC;AAGlD;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IAAtD;;QAMW,SAAI,GAAG,UAAU,CAAC;QAGT,aAAQ,GAAG,CAAC,CAAC,CAAC;QAMvB,kBAAa,GAAG,KAAK,CAAC;QAGtB,YAAO,GAAG,KAAK,CAAC;QAGhB,aAAQ,GAAG,KAAK,CAAC;QAGjB,kBAAa,GAAG,KAAK,CAAC;IAsBjC,CAAC;IA7CU,MAAM,KAAc,MAAM;QAC7B,OAAO,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAuBkB,MAAM;QACrB,OAAO,IAAI,CAAA;;2BAEQ,IAAI,CAAC,OAAO;iCACN,IAAI,CAAC,aAAa;4BACvB,IAAI,CAAC,QAAQ;8BACX,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;0BACjC,GAAG,EAAE;YACX,IAAI,CAAC,aAAa,CACd,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAChB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,IAAI;aACjB,CAAC,CACL,CAAC;QACN,CAAC;;;SAGR,CAAC;IACN,CAAC;CACJ;AAxCG;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;+CACH;AAGzB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDACZ;AAG9B;IADC,KAAK,CAAC,WAAW,CAAC;mDACQ;AAG3B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;wDACC;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;kDACL;AAGvB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;mDACJ;AAGxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;wDAC3C","sourcesContent":["/* \nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n CSSResultArray,\n html,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport '@spectrum-web-components/checkbox/sp-checkbox.js';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport cellStyles from './table-cell.css.js';\nimport headCellStyles from './table-head-cell.css.js';\nimport styles from './table-checkbox-cell.css.js';\nimport { Checkbox } from '@spectrum-web-components/checkbox';\n\n/**\n * @element sp-table\n */\nexport class TableCheckboxCell extends SpectrumElement {\n public static override get styles(): CSSResultArray {\n return [cellStyles, headCellStyles, styles];\n }\n\n @property({ reflect: true })\n public role = 'gridcell';\n\n @property({ type: Number, reflect: true })\n public override tabIndex = -1;\n\n @query('.checkbox')\n public checkbox!: Checkbox;\n\n @property({ type: Boolean })\n public indeterminate = false;\n\n @property({ type: Boolean })\n public checked = false;\n\n @property({ type: Boolean })\n public disabled = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'selects-single' })\n public selectsSingle = false;\n\n protected override render(): TemplateResult {\n return html`\n <sp-checkbox\n ?checked=${this.checked}\n ?indeterminate=${this.indeterminate}\n ?disabled=${this.disabled}\n aria-hidden=${ifDefined(this.selectsSingle)}\n @change=${() => {\n this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n );\n }}\n class=\"checkbox\"\n ></sp-checkbox>\n `;\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { CSSResultArray, SpectrumElement, TemplateResult } from '@spectrum-web-components/base';
2
+ import { TableCheckboxCell } from './TableCheckboxCell.js';
3
+ /**
4
+ * @element sp-table
5
+ */
6
+ export declare class TableHead extends SpectrumElement {
7
+ static get styles(): CSSResultArray;
8
+ role: string;
9
+ selected?: boolean;
10
+ private handleSorted;
11
+ protected handleChange({ target: checkboxCell, }: Event & {
12
+ target: TableCheckboxCell;
13
+ }): void;
14
+ protected render(): TemplateResult;
15
+ }