@spectrum-web-components/table 0.0.2-table.2715 → 0.1.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 (146) hide show
  1. package/README.md +5 -5
  2. package/custom-elements.json +20 -0
  3. package/elements.dev.js +1 -0
  4. package/elements.dev.js.map +1 -1
  5. package/elements.js +1 -1
  6. package/elements.js.map +1 -1
  7. package/package.json +79 -17
  8. package/sp-table-body.dev.js +1 -0
  9. package/sp-table-body.dev.js.map +1 -1
  10. package/sp-table-body.js +1 -1
  11. package/sp-table-body.js.map +2 -2
  12. package/sp-table-cell.dev.js +1 -0
  13. package/sp-table-cell.dev.js.map +1 -1
  14. package/sp-table-cell.js +1 -1
  15. package/sp-table-cell.js.map +2 -2
  16. package/sp-table-checkbox-cell.dev.js +1 -0
  17. package/sp-table-checkbox-cell.dev.js.map +1 -1
  18. package/sp-table-checkbox-cell.js +1 -1
  19. package/sp-table-checkbox-cell.js.map +2 -2
  20. package/sp-table-head-cell.dev.js +1 -0
  21. package/sp-table-head-cell.dev.js.map +1 -1
  22. package/sp-table-head-cell.js +1 -1
  23. package/sp-table-head-cell.js.map +2 -2
  24. package/sp-table-head.dev.js +1 -0
  25. package/sp-table-head.dev.js.map +1 -1
  26. package/sp-table-head.js +1 -1
  27. package/sp-table-head.js.map +2 -2
  28. package/sp-table-row.dev.js +1 -0
  29. package/sp-table-row.dev.js.map +1 -1
  30. package/sp-table-row.js +1 -1
  31. package/sp-table-row.js.map +2 -2
  32. package/sp-table.dev.js +1 -0
  33. package/sp-table.dev.js.map +1 -1
  34. package/sp-table.js +1 -1
  35. package/sp-table.js.map +2 -2
  36. package/src/Table.d.ts +1 -0
  37. package/src/Table.dev.js +74 -46
  38. package/src/Table.dev.js.map +3 -3
  39. package/src/Table.js +8 -8
  40. package/src/Table.js.map +3 -3
  41. package/src/TableBody.d.ts +2 -0
  42. package/src/TableBody.dev.js +21 -1
  43. package/src/TableBody.dev.js.map +2 -2
  44. package/src/TableBody.js +2 -2
  45. package/src/TableBody.js.map +3 -3
  46. package/src/TableCell.dev.js +1 -0
  47. package/src/TableCell.dev.js.map +1 -1
  48. package/src/TableCell.js +1 -1
  49. package/src/TableCell.js.map +2 -2
  50. package/src/TableCheckboxCell.dev.js +1 -0
  51. package/src/TableCheckboxCell.dev.js.map +1 -1
  52. package/src/TableCheckboxCell.js +2 -2
  53. package/src/TableCheckboxCell.js.map +2 -2
  54. package/src/TableHead.dev.js +1 -0
  55. package/src/TableHead.dev.js.map +1 -1
  56. package/src/TableHead.js +1 -1
  57. package/src/TableHead.js.map +2 -2
  58. package/src/TableHeadCell.dev.js +11 -8
  59. package/src/TableHeadCell.dev.js.map +2 -2
  60. package/src/TableHeadCell.js +2 -2
  61. package/src/TableHeadCell.js.map +3 -3
  62. package/src/TableRow.dev.js +8 -3
  63. package/src/TableRow.dev.js.map +2 -2
  64. package/src/TableRow.js +2 -2
  65. package/src/TableRow.js.map +3 -3
  66. package/src/index.d.ts +6 -0
  67. package/src/index.dev.js +7 -0
  68. package/src/index.dev.js.map +2 -2
  69. package/src/index.js +1 -1
  70. package/src/index.js.map +2 -2
  71. package/src/spectrum-table-body.css.dev.js +1 -0
  72. package/src/spectrum-table-body.css.dev.js.map +1 -1
  73. package/src/spectrum-table-body.css.js +1 -1
  74. package/src/spectrum-table-body.css.js.map +2 -2
  75. package/src/spectrum-table-cell.css.dev.js +1 -0
  76. package/src/spectrum-table-cell.css.dev.js.map +1 -1
  77. package/src/spectrum-table-cell.css.js +1 -1
  78. package/src/spectrum-table-cell.css.js.map +2 -2
  79. package/src/spectrum-table-checkbox-cell.css.dev.js +1 -0
  80. package/src/spectrum-table-checkbox-cell.css.dev.js.map +1 -1
  81. package/src/spectrum-table-checkbox-cell.css.js +1 -1
  82. package/src/spectrum-table-checkbox-cell.css.js.map +2 -2
  83. package/src/spectrum-table-head-cell.css.dev.js +1 -0
  84. package/src/spectrum-table-head-cell.css.dev.js.map +1 -1
  85. package/src/spectrum-table-head-cell.css.js +1 -1
  86. package/src/spectrum-table-head-cell.css.js.map +2 -2
  87. package/src/spectrum-table-head.css.dev.js +1 -0
  88. package/src/spectrum-table-head.css.dev.js.map +1 -1
  89. package/src/spectrum-table-head.css.js +1 -1
  90. package/src/spectrum-table-head.css.js.map +2 -2
  91. package/src/spectrum-table-row.css.dev.js +1 -0
  92. package/src/spectrum-table-row.css.dev.js.map +1 -1
  93. package/src/spectrum-table-row.css.js +1 -1
  94. package/src/spectrum-table-row.css.js.map +2 -2
  95. package/src/spectrum-table.css.dev.js +1 -0
  96. package/src/spectrum-table.css.dev.js.map +1 -1
  97. package/src/spectrum-table.css.js +1 -1
  98. package/src/spectrum-table.css.js.map +2 -2
  99. package/src/table-body.css.dev.js +2 -1
  100. package/src/table-body.css.dev.js.map +2 -2
  101. package/src/table-body.css.js +2 -2
  102. package/src/table-body.css.js.map +3 -3
  103. package/src/table-cell.css.dev.js +1 -0
  104. package/src/table-cell.css.dev.js.map +1 -1
  105. package/src/table-cell.css.js +1 -1
  106. package/src/table-cell.css.js.map +2 -2
  107. package/src/table-checkbox-cell.css.dev.js +1 -0
  108. package/src/table-checkbox-cell.css.dev.js.map +1 -1
  109. package/src/table-checkbox-cell.css.js +1 -1
  110. package/src/table-checkbox-cell.css.js.map +2 -2
  111. package/src/table-head-cell.css.dev.js +1 -0
  112. package/src/table-head-cell.css.dev.js.map +1 -1
  113. package/src/table-head-cell.css.js +1 -1
  114. package/src/table-head-cell.css.js.map +2 -2
  115. package/src/table-head.css.dev.js +1 -0
  116. package/src/table-head.css.dev.js.map +1 -1
  117. package/src/table-head.css.js +1 -1
  118. package/src/table-head.css.js.map +2 -2
  119. package/src/table-row.css.dev.js +1 -0
  120. package/src/table-row.css.dev.js.map +1 -1
  121. package/src/table-row.css.js +1 -1
  122. package/src/table-row.css.js.map +2 -2
  123. package/src/table.css.dev.js +2 -1
  124. package/src/table.css.dev.js.map +2 -2
  125. package/src/table.css.js +2 -2
  126. package/src/table.css.js.map +3 -3
  127. package/stories/index.js +24 -5
  128. package/stories/index.js.map +2 -2
  129. package/stories/table-elements.stories.js +75 -9
  130. package/stories/table-elements.stories.js.map +2 -2
  131. package/stories/table-virtualized.stories.js +198 -34
  132. package/stories/table-virtualized.stories.js.map +2 -2
  133. package/test/benchmark/basic-test.js +6 -2
  134. package/test/benchmark/basic-test.js.map +1 -1
  135. package/test/table-elements.test-vrt.js +4 -1
  136. package/test/table-elements.test-vrt.js.map +1 -1
  137. package/test/table-selects.test.js +199 -3
  138. package/test/table-selects.test.js.map +2 -2
  139. package/test/table-virtualized.test-vrt.js +4 -1
  140. package/test/table-virtualized.test-vrt.js.map +1 -1
  141. package/test/table.test.js +124 -8
  142. package/test/table.test.js.map +2 -2
  143. package/test/virtualized-table-selects.test.js +395 -25
  144. package/test/virtualized-table-selects.test.js.map +2 -2
  145. package/test/virtualized-table.test.js +237 -23
  146. package/test/virtualized-table.test.js.map +2 -2
package/src/Table.dev.js CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __decorateClass = (decorators, target, key, kind) => {
@@ -93,7 +94,9 @@ export class Table extends SizedMixin(SpectrumElement, {
93
94
  return !!this.items.length;
94
95
  }
95
96
  focus() {
96
- const sortableHeadCell = this.querySelector("sp-table-head-cell[sortable]");
97
+ const sortableHeadCell = this.querySelector(
98
+ "sp-table-head-cell[sortable]"
99
+ );
97
100
  if (sortableHeadCell) {
98
101
  sortableHeadCell.focus();
99
102
  }
@@ -105,14 +108,13 @@ export class Table extends SizedMixin(SpectrumElement, {
105
108
  this.selectedSet.add(this.itemValue(item, index));
106
109
  }
107
110
  });
108
- this.selected = [...this.selectedSet];
109
111
  } else {
110
112
  this.tableRows.forEach((row) => {
111
113
  row.selected = true;
112
114
  this.selectedSet.add(row.value);
113
115
  });
114
- this.selected = [...this.selectedSet];
115
116
  }
117
+ this.selected = [...this.selectedSet];
116
118
  if (!this.tableHeadCheckboxCell)
117
119
  return;
118
120
  this.tableHeadCheckboxCell.checked = true;
@@ -153,8 +155,13 @@ export class Table extends SizedMixin(SpectrumElement, {
153
155
  allSelected = this.selected.length === this.tableRows.length;
154
156
  }
155
157
  if (!this.tableHeadCheckboxCell) {
156
- this.tableHeadCheckboxCell = document.createElement("sp-table-checkbox-cell");
157
- this.tableHead.insertAdjacentElement("afterbegin", this.tableHeadCheckboxCell);
158
+ this.tableHeadCheckboxCell = document.createElement(
159
+ "sp-table-checkbox-cell"
160
+ );
161
+ this.tableHead.insertAdjacentElement(
162
+ "afterbegin",
163
+ this.tableHeadCheckboxCell
164
+ );
158
165
  }
159
166
  this.manageHeadCheckbox(allSelected);
160
167
  } else {
@@ -164,8 +171,35 @@ export class Table extends SizedMixin(SpectrumElement, {
164
171
  delete this.tableHeadCheckboxCell;
165
172
  }
166
173
  }
167
- manageSelected() {
174
+ validateSelected() {
175
+ const rowValues = /* @__PURE__ */ new Set();
176
+ if (this.isVirtualized) {
177
+ this.items.forEach((item, index) => {
178
+ const value = this.itemValue(item, index);
179
+ rowValues.add(value);
180
+ });
181
+ } else {
182
+ this.tableRows.forEach((row) => {
183
+ rowValues.add(row.value);
184
+ });
185
+ }
186
+ const oldSelectedCount = this.selected.length;
187
+ this.selected = this.selected.filter(
188
+ (selectedItem) => rowValues.has(selectedItem)
189
+ );
190
+ if (oldSelectedCount !== this.selected.length) {
191
+ this.dispatchEvent(
192
+ new Event("change", {
193
+ cancelable: true,
194
+ bubbles: true,
195
+ composed: true
196
+ })
197
+ );
198
+ }
168
199
  this.selectedSet = new Set(this.selected);
200
+ }
201
+ manageSelected() {
202
+ this.validateSelected();
169
203
  if (this.isVirtualized)
170
204
  return;
171
205
  this.tableRows.forEach((row) => {
@@ -178,12 +212,19 @@ export class Table extends SizedMixin(SpectrumElement, {
178
212
  manageCheckboxes() {
179
213
  var _a;
180
214
  if (!!this.selects) {
181
- this.tableHeadCheckboxCell = document.createElement("sp-table-checkbox-cell");
215
+ this.tableHeadCheckboxCell = document.createElement(
216
+ "sp-table-checkbox-cell"
217
+ );
182
218
  const allSelected = this.selected.length === this.tableRows.length;
183
219
  this.manageHeadCheckbox(allSelected);
184
- this.tableHead.insertAdjacentElement("afterbegin", this.tableHeadCheckboxCell);
220
+ this.tableHead.insertAdjacentElement(
221
+ "afterbegin",
222
+ this.tableHeadCheckboxCell
223
+ );
185
224
  this.tableRows.forEach((row) => {
186
- const checkbox = document.createElement("sp-table-checkbox-cell");
225
+ const checkbox = document.createElement(
226
+ "sp-table-checkbox-cell"
227
+ );
187
228
  row.insertAdjacentElement("afterbegin", checkbox);
188
229
  row.selected = this.selectedSet.has(row.value);
189
230
  checkbox.checked = row.selected;
@@ -248,11 +289,13 @@ export class Table extends SizedMixin(SpectrumElement, {
248
289
  }
249
290
  }
250
291
  }
251
- const applyDefault = this.dispatchEvent(new Event("change", {
252
- cancelable: true,
253
- bubbles: true,
254
- composed: true
255
- }));
292
+ const applyDefault = this.dispatchEvent(
293
+ new Event("change", {
294
+ cancelable: true,
295
+ bubbles: true,
296
+ composed: true
297
+ })
298
+ );
256
299
  if (!applyDefault) {
257
300
  event.preventDefault();
258
301
  this.selectedSet = previousSelectedSet;
@@ -271,27 +314,7 @@ export class Table extends SizedMixin(SpectrumElement, {
271
314
  }
272
315
  willUpdate(changed) {
273
316
  if (!this.hasUpdated) {
274
- const rowValues = /* @__PURE__ */ new Set();
275
- if (this.isVirtualized) {
276
- this.items.forEach((item, index) => {
277
- const value = this.itemValue(item, index);
278
- rowValues.add(value);
279
- });
280
- } else {
281
- this.tableRows.forEach((row) => {
282
- rowValues.add(row.value);
283
- });
284
- }
285
- const oldSelectedCount = this.selected.length;
286
- this.selected = this.selected.filter((selectedItem) => rowValues.has(selectedItem));
287
- if (oldSelectedCount !== this.selected.length) {
288
- this.dispatchEvent(new Event("change", {
289
- cancelable: true,
290
- bubbles: true,
291
- composed: true
292
- }));
293
- }
294
- this.selectedSet = new Set(this.selected);
317
+ this.validateSelected();
295
318
  this.manageCheckboxes();
296
319
  }
297
320
  if (changed.has("selects")) {
@@ -315,12 +338,17 @@ export class Table extends SizedMixin(SpectrumElement, {
315
338
  this.tableBody = document.createElement("sp-table-body");
316
339
  this.append(this.tableBody);
317
340
  }
318
- this.tableBody.addEventListener("rangeChanged", (event) => {
319
- this.dispatchEvent(new RangeChangedEvent({
320
- first: event.first,
321
- last: event.last
322
- }));
323
- });
341
+ this.tableBody.addEventListener(
342
+ "rangeChanged",
343
+ (event) => {
344
+ this.dispatchEvent(
345
+ new RangeChangedEvent({
346
+ first: event.first,
347
+ last: event.last
348
+ })
349
+ );
350
+ }
351
+ );
324
352
  }
325
353
  const config = {
326
354
  items: this.items,
@@ -332,14 +360,14 @@ export class Table extends SizedMixin(SpectrumElement, {
332
360
  index
333
361
  };
334
362
  }
335
- render(html`
363
+ render(
364
+ html`
336
365
  ${virtualize(config)}
337
- `, this.tableBody);
366
+ `,
367
+ this.tableBody
368
+ );
338
369
  }
339
370
  disconnectedCallback() {
340
- if (this.tableBody) {
341
- render(html``, this.tableBody);
342
- }
343
371
  super.disconnectedCallback();
344
372
  }
345
373
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["Table.ts"],
4
- "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*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n render,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport '../sp-table-row.dev.js'\nimport '../sp-table-checkbox-cell.dev.js'\nimport '../sp-table-body.dev.js'\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport styles from './table.css.js';\nimport { TableBody } from './TableBody.dev.js'\nimport type { TableCheckboxCell } from './TableCheckboxCell.dev.js'\nimport type { TableHead } from './TableHead.dev.js'\nimport type { TableHeadCell } from './TableHeadCell.dev.js'\nimport type { TableRow } from './TableRow.dev.js'\nimport {\n virtualize,\n VirtualizeDirectiveConfig,\n} from '@lit-labs/virtualizer/virtualize.js';\n\ninterface Range {\n first: number;\n last: number;\n}\n\nexport enum RowType {\n ITEM = 0,\n INFORMATION = 1,\n}\n\nexport interface TableItem extends Record<string, unknown> {\n _$rowType$?: RowType;\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 * @fires rangeChanged - Announces a change in the range of visible cells on the table body\n * @event change - Announces a change in the `selected` property of a table row\n */\n\nexport class Table extends SizedMixin(SpectrumElement, {\n validSizes: ['s', 'm'],\n defaultSize: 'm',\n}) {\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 const hasCheckbox = this.selects && item?._$rowType$ !== 1;\n\n return html`\n <sp-table-row\n value=${value}\n aria-rowindex=${index + 1}\n ?selected=${selected}\n >\n ${hasCheckbox\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 /**\n * Whether the Table allows users to select a row or rows, and thus controls whether or not the Table also renders checkboxes.\n */\n @property({ type: String, reflect: true })\n public selects: undefined | 'single' | 'multiple';\n\n /**\n * An array of <sp-row> values that have been selected.\n */\n @property({ type: Array })\n public selected: string[] = [];\n\n private selectedSet = new Set<string>();\n\n /**\n * The content of the rows rendered by the virtualized table. The key is the value of the sp-table-row, and the value is the sp-table-row's content (not the row itself).\n */\n @property({ type: Array })\n public items: Record<string, unknown>[] = [];\n\n /**\n * The value of an item. By default, it is set to the index of the sp-table-row.\n */\n @property({ type: Object })\n public itemValue = (_item: unknown, index: number): string => {\n return `${index}`;\n };\n\n /**\n * Whether or not the virtualized table has a scroll bar. If this is set to true, make sure to specify a height in the sp-table's inline styles.\n */\n @property({ type: Boolean, reflect: true })\n public scroller = false;\n\n private tableBody?: TableBody;\n\n private tableHeadCheckboxCell?: TableCheckboxCell;\n\n private get tableHead(): TableHead {\n return this.querySelector('sp-table-head') as TableHead;\n }\n\n private get tableRows(): TableRow[] {\n if (this.isVirtualized) {\n return [];\n }\n return [...this.querySelectorAll('sp-table-row')] as TableRow[];\n }\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 if (item._$rowType$ !== 1) {\n this.selectedSet.add(this.itemValue(item, index));\n }\n });\n this.selected = [...this.selectedSet];\n } else {\n this.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 checkboxes = this.querySelectorAll('sp-table-checkbox-cell');\n const checkbox = document.createElement('sp-table-checkbox-cell');\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 this.tableRows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n if (!row.querySelector(':scope > sp-table-checkbox-cell')) {\n const clonedCheckbox =\n checkbox.cloneNode() as TableCheckboxCell;\n row.insertAdjacentElement('afterbegin', clonedCheckbox);\n checkbox.checked = row.selected;\n }\n });\n allSelected = this.selected.length === this.tableRows.length;\n }\n\n if (!this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n this.tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n }\n this.manageHeadCheckbox(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) return;\n\n this.tableRows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n });\n if (this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell.checked =\n this.selected.length === this.tableRows.length;\n }\n }\n\n protected manageCheckboxes(): void {\n if (!!this.selects) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n );\n const allSelected = this.selected.length === this.tableRows.length;\n\n this.manageHeadCheckbox(allSelected);\n\n this.tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n\n this.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 this.tableHead.querySelector('sp-table-checkbox-cell')?.remove();\n this.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 manageHeadCheckbox(allSelected: boolean): void {\n if (!this.tableHeadCheckboxCell) return;\n\n this.tableHeadCheckboxCell.selectsSingle = this.selects === 'single';\n this.tableHeadCheckboxCell.checked = allSelected;\n this.tableHeadCheckboxCell.indeterminate =\n this.selected.length > 0 && !allSelected;\n }\n\n protected handleChange(event: Event): void {\n event.stopPropagation();\n\n const previousSelectedSet = new Set(this.selectedSet);\n const previousSelected = [...this.selected];\n\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 }\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 allSelected =\n this.selected.length === this.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 const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n event.preventDefault();\n this.selectedSet = previousSelectedSet;\n this.selected = previousSelected;\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 this.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 // Rendering updates into the table while disconnected can\n // cause runaway event binding in ancestor elements.\n if (!this.isConnected) return;\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 this.tableBody.addEventListener(\n 'rangeChanged',\n (event: RangeChangedEvent) => {\n this.dispatchEvent(\n new RangeChangedEvent({\n first: event.first,\n last: event.last,\n })\n );\n }\n );\n }\n const config: VirtualizeDirectiveConfig<Record<string, unknown>> = {\n items: this.items,\n renderItem: this.renderItem,\n scroller: this.scroller,\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 public override disconnectedCallback(): void {\n if (this.tableBody) {\n render(html``, this.tableBody);\n }\n super.disconnectedCallback();\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;AAYA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AACA;AAMA;AAAA;AAAA;AAUO,WAAK,UAAL,kBAAK,aAAL;AACH,8BAAO,KAAP;AACA,qCAAc,KAAd;AAFQ;AAAA;AASL,yCAAgC,MAAM;AAAA,EAMzC,YAAY,OAAc;AACtB,UAAM,mBAAkB,WAAW,EAAE,SAAS,KAAK,CAAC;AACpD,SAAK,QAAQ,MAAM;AACnB,SAAK,OAAO,MAAM;AAAA,EACtB;AACJ;AAXO;AACI,AADJ,kBACI,YAAY;AAmBhB,aAAM,cAAc,WAAW,iBAAiB;AAAA,EACnD,YAAY,CAAC,KAAK,GAAG;AAAA,EACrB,aAAa;AACjB,CAAC,EAAE;AAAA,EAHI;AAAA;AA6CK,uBAGc,MAAM;AAGrB,gBAAO;AAYP,oBAAqB,CAAC;AAErB,uBAAc,oBAAI,IAAY;AAM/B,iBAAmC,CAAC;AAMpC,qBAAY,CAAC,OAAgB,UAA0B;AAC1D,aAAO,GAAG;AAAA,IACd;AAMO,oBAAW;AAAA;AAAA,aAjFS,SAAyB;AAChD,WAAO,CAAC,MAAM;AAAA,EAClB;AAAA,MAEI,aAGgB;AAChB,WAAO,KAAK;AAAA,EAChB;AAAA,MAEI,WACA,IACF;AACE,SAAK,cAAc,CACf,MACA,UACiB;AACjB,YAAM,QAAQ,KAAK,UAAU,MAAM,KAAK;AACxC,YAAM,WAAW,KAAK,SAAS,SAAS,KAAK;AAC7C,YAAM,cAAc,KAAK,WAAW,8BAAM,gBAAe;AAEzD,aAAO;AAAA;AAAA,4BAES;AAAA,oCACQ,QAAQ;AAAA,gCACZ;AAAA;AAAA,sBAEV,cACI;AAAA;AAAA,6CAEmB;AAAA;AAAA,8BAGnB;AAAA,sBACJ,GAAG,MAAM,KAAK;AAAA;AAAA;AAAA,IAG5B;AAAA,EACJ;AAAA,MAgDY,YAAuB;AAC/B,WAAO,KAAK,cAAc,eAAe;AAAA,EAC7C;AAAA,MAEY,YAAwB;AAChC,QAAI,KAAK,eAAe;AACpB,aAAO,CAAC;AAAA,IACZ;AACA,WAAO,CAAC,GAAG,KAAK,iBAAiB,cAAc,CAAC;AAAA,EACpD;AAAA,MAEY,gBAAyB;AACjC,WAAO,CAAC,CAAC,KAAK,MAAM;AAAA,EACxB;AAAA,EAEgB,QAAc;AAC1B,UAAM,mBAAmB,KAAK,cAC1B,8BACJ;AACA,QAAI,kBAAkB;AAClB,uBAAiB,MAAM;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEQ,gBAAsB;AAC1B,QAAI,KAAK,eAAe;AACpB,WAAK,MAAM,QAAQ,CAAC,MAAM,UAAkB;AACxC,YAAI,KAAK,eAAe,GAAG;AACvB,eAAK,YAAY,IAAI,KAAK,UAAU,MAAM,KAAK,CAAC;AAAA,QACpD;AAAA,MACJ,CAAC;AACD,WAAK,WAAW,CAAC,GAAG,KAAK,WAAW;AAAA,IACxC,OAAO;AACH,WAAK,UAAU,QAAQ,CAAC,QAAQ;AAC5B,YAAI,WAAW;AACf,aAAK,YAAY,IAAI,IAAI,KAAK;AAAA,MAClC,CAAC;AACD,WAAK,WAAW,CAAC,GAAG,KAAK,WAAW;AAAA,IACxC;AAEA,QAAI,CAAC,KAAK;AAAuB;AACjC,SAAK,sBAAsB,UAAU;AACrC,SAAK,sBAAsB,gBAAgB;AAAA,EAC/C;AAAA,EAEQ,kBAAwB;AAC5B,SAAK,YAAY,MAAM;AACvB,SAAK,WAAW,CAAC;AAEjB,QAAI,CAAC,KAAK,eAAe;AACrB,YAAM,eAAe;AAAA,QACjB,GAAG,KAAK,iBAAiB,YAAY;AAAA,MACzC;AAEA,mBAAa,QAAQ,CAAC,QAAQ;AAC1B,YAAI,WAAW;AAAA,MACnB,CAAC;AAAA,IACL;AAEA,QAAI,CAAC,KAAK;AAAuB;AACjC,SAAK,sBAAsB,UAAU;AACrC,SAAK,sBAAsB,gBAAgB;AAAA,EAC/C;AAAA,EAEU,gBAAsB;AAC5B,UAAM,aAAa,KAAK,iBAAiB,wBAAwB;AACjE,UAAM,WAAW,SAAS,cAAc,wBAAwB;AAChE,QAAI,CAAC,CAAC,KAAK,SAAS;AAChB,UAAI,cAAc;AAClB,UAAI,KAAK,eAAe;AACpB,sBACI,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,WAAW,KAAK,MAAM;AAAA,MAC5C,OAAO;AACH,aAAK,UAAU,QAAQ,CAAC,QAAQ;AAC5B,cAAI,WAAW,KAAK,YAAY,IAAI,IAAI,KAAK;AAC7C,cAAI,CAAC,IAAI,cAAc,iCAAiC,GAAG;AACvD,kBAAM,iBACF,SAAS,UAAU;AACvB,gBAAI,sBAAsB,cAAc,cAAc;AACtD,qBAAS,UAAU,IAAI;AAAA,UAC3B;AAAA,QACJ,CAAC;AACD,sBAAc,KAAK,SAAS,WAAW,KAAK,UAAU;AAAA,MAC1D;AAEA,UAAI,CAAC,KAAK,uBAAuB;AAC7B,aAAK,wBAAwB,SAAS,cAClC,wBACJ;AACA,aAAK,UAAU,sBACX,cACA,KAAK,qBACT;AAAA,MACJ;AACA,WAAK,mBAAmB,WAAW;AAAA,IACvC,OAAO;AACH,iBAAW,QAAQ,CAAC,QAAQ;AACxB,YAAI,OAAO;AAAA,MACf,CAAC;AACD,aAAO,KAAK;AAAA,IAChB;AAAA,EACJ;AAAA,EAEU,iBAAuB;AAC7B,SAAK,cAAc,IAAI,IAAI,KAAK,QAAQ;AAExC,QAAI,KAAK;AAAe;AAExB,SAAK,UAAU,QAAQ,CAAC,QAAQ;AAC5B,UAAI,WAAW,KAAK,YAAY,IAAI,IAAI,KAAK;AAAA,IACjD,CAAC;AACD,QAAI,KAAK,uBAAuB;AAC5B,WAAK,sBAAsB,UACvB,KAAK,SAAS,WAAW,KAAK,UAAU;AAAA,IAChD;AAAA,EACJ;AAAA,EAEU,mBAAyB;AAvRvC;AAwRQ,QAAI,CAAC,CAAC,KAAK,SAAS;AAChB,WAAK,wBAAwB,SAAS,cAClC,wBACJ;AACA,YAAM,cAAc,KAAK,SAAS,WAAW,KAAK,UAAU;AAE5D,WAAK,mBAAmB,WAAW;AAEnC,WAAK,UAAU,sBACX,cACA,KAAK,qBACT;AAEA,WAAK,UAAU,QAAQ,CAAC,QAAQ;AAC5B,cAAM,WAAW,SAAS,cACtB,wBACJ;AACA,YAAI,sBAAsB,cAAc,QAAQ;AAChD,YAAI,WAAW,KAAK,YAAY,IAAI,IAAI,KAAK;AAC7C,iBAAS,UAAU,IAAI;AAAA,MAC3B,CAAC;AAAA,IACL,OAAO;AACH,iBAAK,UAAU,cAAc,wBAAwB,MAArD,mBAAwD;AACxD,WAAK,UAAU,QAAQ,CAAC,QAAQ;AA/S5C;AAgTgB,mBAAI,cAAc,OAAlB,oBAAsB;AACtB,YAAI,KAAK,SAAS,QAAQ;AACtB,cAAI,WAAW,KAAK,YAAY,IAAI,IAAI,KAAK;AAAA,QACjD;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEU,mBAAmB,aAA4B;AACrD,QAAI,CAAC,KAAK;AAAuB;AAEjC,SAAK,sBAAsB,gBAAgB,KAAK,YAAY;AAC5D,SAAK,sBAAsB,UAAU;AACrC,SAAK,sBAAsB,gBACvB,KAAK,SAAS,SAAS,KAAK,CAAC;AAAA,EACrC;AAAA,EAEU,aAAa,OAAoB;AACvC,UAAM,gBAAgB;AAEtB,UAAM,sBAAsB,IAAI,IAAI,KAAK,WAAW;AACpD,UAAM,mBAAmB,CAAC,GAAG,KAAK,QAAQ;AAE1C,UAAM,EAAE,WAAW;AACnB,UAAM,EAAE,eAAe,YAAY;AAGnC,QAAI,CAAC,QAAQ,OAAO;AAChB,YAAM,EAAE,aAAa;AACrB,UAAI,SAAS,WAAW,SAAS,eAAe;AAC5C,aAAK,cAAc;AAAA,MACvB,OAAO;AACH,aAAK,gBAAgB;AAAA,MACzB;AAAA,IACJ,OAAO;AACH,cAAQ,KAAK;AAAA,aACJ,UAAU;AACX,eAAK,gBAAgB;AACrB,cAAI,QAAQ,UAAU;AAClB,iBAAK,YAAY,IAAI,QAAQ,KAAK;AAClC,iBAAK,WAAW,CAAC,GAAG,KAAK,WAAW;AAAA,UACxC;AACA;AAAA,QACJ;AAAA,aACK,YAAY;AACb,cAAI,QAAQ,UAAU;AAClB,iBAAK,YAAY,IAAI,QAAQ,KAAK;AAAA,UACtC,OAAO;AACH,iBAAK,YAAY,OAAO,QAAQ,KAAK;AAAA,UACzC;AACA,eAAK,WAAW,CAAC,GAAG,KAAK,WAAW;AAEpC,gBAAM,cACF,KAAK,SAAS,WAAW,KAAK,UAAU;AAE5C,cAAI,CAAC,KAAK;AAAuB;AACjC,eAAK,sBAAsB,UAAU;AACrC,eAAK,sBAAsB,gBACvB,KAAK,SAAS,SAAS,KAAK,CAAC;AACjC;AAAA,QACJ;AAAA,iBACS;AACL;AAAA,QACJ;AAAA;AAAA,IAER;AACA,UAAM,eAAe,KAAK,cACtB,IAAI,MAAM,UAAU;AAAA,MAChB,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,UAAU;AAAA,IACd,CAAC,CACL;AACA,QAAI,CAAC,cAAc;AACf,YAAM,eAAe;AACrB,WAAK,cAAc;AACnB,WAAK,WAAW;AAAA,IACpB;AAAA,EACJ;AAAA,EAEO,cAAc,OAAsB;AACvC,QAAI,OAAO;AACP,WAAK,uBAAuB,KAAK;AAAA,IACrC;AAAA,EACJ;AAAA,EAEmB,SAAyB;AACxC,WAAO;AAAA,4BACa,KAAK;AAAA;AAAA,EAE7B;AAAA,EAEmB,WAAW,SAAqC;AAC/D,QAAI,CAAC,KAAK,YAAY;AAClB,YAAM,YAAY,oBAAI,IAAY;AAElC,UAAI,KAAK,eAAe;AACpB,aAAK,MAAM,QAAQ,CAAC,MAAM,UAAU;AAChC,gBAAM,QAAQ,KAAK,UAAU,MAAM,KAAK;AACxC,oBAAU,IAAI,KAAK;AAAA,QACvB,CAAC;AAAA,MACL,OAAO;AACH,aAAK,UAAU,QAAQ,CAAC,QAAQ;AAC5B,oBAAU,IAAI,IAAI,KAAK;AAAA,QAC3B,CAAC;AAAA,MACL;AAEA,YAAM,mBAAmB,KAAK,SAAS;AAEvC,WAAK,WAAW,KAAK,SAAS,OAAO,CAAC,iBAClC,UAAU,IAAI,YAAY,CAC9B;AACA,UAAI,qBAAqB,KAAK,SAAS,QAAQ;AAC3C,aAAK,cACD,IAAI,MAAM,UAAU;AAAA,UAChB,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,UAAU;AAAA,QACd,CAAC,CACL;AAAA,MACJ;AACA,WAAK,cAAc,IAAI,IAAI,KAAK,QAAQ;AAExC,WAAK,iBAAiB;AAAA,IAC1B;AACA,QAAI,QAAQ,IAAI,SAAS,GAAG;AACxB,WAAK,cAAc;AAAA,IACvB;AAEA,QAAI,QAAQ,IAAI,UAAU,KAAK,KAAK,YAAY;AAC5C,WAAK,eAAe;AAAA,IACxB;AAAA,EACJ;AAAA,EAEmB,UAAgB;AAC/B,QAAI,KAAK,MAAM,QAAQ;AACnB,WAAK,uBAAuB;AAAA,IAChC;AAAA,EACJ;AAAA,EAEU,uBAAuB,OAAsB;AAGnD,QAAI,CAAC,KAAK;AAAa;AACvB,QAAI,CAAC,KAAK,WAAW;AACjB,WAAK,YAAY,KAAK,cAAc,eAAe;AACnD,UAAI,CAAC,KAAK,WAAW;AACjB,aAAK,YAAY,SAAS,cAAc,eAAe;AACvD,aAAK,OAAO,KAAK,SAAS;AAAA,MAC9B;AACA,WAAK,UAAU,iBACX,gBACA,CAAC,UAA6B;AAC1B,aAAK,cACD,IAAI,kBAAkB;AAAA,UAClB,OAAO,MAAM;AAAA,UACb,MAAM,MAAM;AAAA,QAChB,CAAC,CACL;AAAA,MACJ,CACJ;AAAA,IACJ;AACA,UAAM,SAA6D;AAAA,MAC/D,OAAO,KAAK;AAAA,MACZ,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,IACnB;AACA,QAAI,OAAO;AACP,aAAO,gBAAgB;AAAA,QACnB;AAAA,MACJ;AAAA,IACJ;AACA,WACI;AAAA,kBACM,WAAW,MAAM;AAAA,eAEvB,KAAK,SACT;AAAA,EACJ;AAAA,EAEgB,uBAA6B;AACzC,QAAI,KAAK,WAAW;AAChB,aAAO,QAAQ,KAAK,SAAS;AAAA,IACjC;AACA,UAAM,qBAAqB;AAAA,EAC/B;AACJ;AAjXW;AAAA,EADP,AAAC,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,GACpB,AAnDJ,MAmDI;AAMA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAClC,AAzDJ,MAyDI;AAMA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,MAAM,CAAC;AAAA,GAClB,AA/DJ,MA+DI;AAQA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,MAAM,CAAC;AAAA,GAClB,AAvEJ,MAuEI;AAMA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GACnB,AA7EJ,MA6EI;AAQA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GACnC,AArFJ,MAqFI;",
6
- "names": []
4
+ "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*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n render,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport '../sp-table-row.dev.js'\nimport '../sp-table-checkbox-cell.dev.js'\nimport '../sp-table-body.dev.js'\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport styles from './table.css.js';\nimport { TableBody } from './TableBody.dev.js'\nimport type { TableCheckboxCell } from './TableCheckboxCell.dev.js'\nimport type { TableHead } from './TableHead.dev.js'\nimport type { TableHeadCell } from './TableHeadCell.dev.js'\nimport type { TableRow } from './TableRow.dev.js'\nimport {\n virtualize,\n VirtualizeDirectiveConfig,\n} from '@lit-labs/virtualizer/virtualize.js';\n\ninterface Range {\n first: number;\n last: number;\n}\n\nexport enum RowType {\n ITEM = 0,\n INFORMATION = 1,\n}\n\nexport interface TableItem extends Record<string, unknown> {\n _$rowType$?: RowType;\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 * @fires rangeChanged - Announces a change in the range of visible cells on the table body\n * @event change - Announces a change in the `selected` property of a table row\n */\n\nexport class Table extends SizedMixin(SpectrumElement, {\n validSizes: ['s', 'm'],\n defaultSize: 'm',\n}) {\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 const hasCheckbox = this.selects && item?._$rowType$ !== 1;\n\n return html`\n <sp-table-row\n value=${value}\n aria-rowindex=${index + 1}\n ?selected=${selected}\n >\n ${hasCheckbox\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 = /* c8 ignore next */ () => html``;\n\n @property({ reflect: true })\n public role = 'grid';\n\n /**\n * Whether the Table allows users to select a row or rows, and thus controls whether or not the Table also renders checkboxes.\n */\n @property({ type: String, reflect: true })\n public selects: undefined | 'single' | 'multiple';\n\n /**\n * An array of <sp-row> values that have been selected.\n */\n @property({ type: Array })\n public selected: string[] = [];\n\n private selectedSet = new Set<string>();\n\n /**\n * The content of the rows rendered by the virtualized table. The key is the value of the sp-table-row, and the value is the sp-table-row's content (not the row itself).\n */\n @property({ type: Array })\n public items: Record<string, unknown>[] = [];\n\n /**\n * The value of an item. By default, it is set to the index of the sp-table-row.\n */\n @property({ type: Object })\n public itemValue = (_item: unknown, index: number): string => {\n return `${index}`;\n };\n\n /**\n * Whether or not the virtualized table has a scroll bar. If this is set to true, make sure to specify a height in the sp-table's inline styles.\n */\n @property({ type: Boolean, reflect: true })\n public scroller = false;\n\n private tableBody?: TableBody;\n\n private tableHeadCheckboxCell?: TableCheckboxCell;\n\n private get tableHead(): TableHead {\n return this.querySelector('sp-table-head') as TableHead;\n }\n\n private get tableRows(): TableRow[] {\n if (this.isVirtualized) {\n return [];\n }\n return [...this.querySelectorAll('sp-table-row')] as TableRow[];\n }\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 if (item._$rowType$ !== 1) {\n this.selectedSet.add(this.itemValue(item, index));\n }\n });\n } else {\n this.tableRows.forEach((row) => {\n row.selected = true; // Visually\n this.selectedSet.add(row.value); // Prepares table state\n });\n }\n this.selected = [...this.selectedSet];\n\n if (!this.tableHeadCheckboxCell) /* c8 ignore next */ 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) /* c8 ignore next */ return;\n this.tableHeadCheckboxCell.checked = false;\n this.tableHeadCheckboxCell.indeterminate = false;\n }\n\n protected manageSelects(): void {\n const checkboxes = this.querySelectorAll('sp-table-checkbox-cell');\n const checkbox = document.createElement('sp-table-checkbox-cell');\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 this.tableRows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n if (!row.querySelector(':scope > sp-table-checkbox-cell')) {\n const clonedCheckbox =\n checkbox.cloneNode() as TableCheckboxCell;\n row.insertAdjacentElement('afterbegin', clonedCheckbox);\n checkbox.checked = row.selected;\n }\n });\n allSelected = this.selected.length === this.tableRows.length;\n }\n\n if (!this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n this.tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n }\n this.manageHeadCheckbox(allSelected);\n } else {\n checkboxes.forEach((box) => {\n box.remove();\n });\n delete this.tableHeadCheckboxCell;\n }\n }\n\n protected validateSelected(): void {\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 this.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\n protected manageSelected(): void {\n this.validateSelected();\n\n if (this.isVirtualized) return;\n\n this.tableRows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n });\n if (this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell.checked =\n this.selected.length === this.tableRows.length;\n }\n }\n\n protected manageCheckboxes(): void {\n if (!!this.selects) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n );\n const allSelected = this.selected.length === this.tableRows.length;\n\n this.manageHeadCheckbox(allSelected);\n\n this.tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n\n this.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 this.tableHead.querySelector('sp-table-checkbox-cell')?.remove();\n this.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 manageHeadCheckbox(allSelected: boolean): void {\n if (!this.tableHeadCheckboxCell) /* c8 ignore next */ return;\n\n this.tableHeadCheckboxCell.selectsSingle = this.selects === 'single';\n this.tableHeadCheckboxCell.checked = allSelected;\n this.tableHeadCheckboxCell.indeterminate =\n this.selected.length > 0 && !allSelected;\n }\n\n protected handleChange(event: Event): void {\n event.stopPropagation();\n\n const previousSelectedSet = new Set(this.selectedSet);\n const previousSelected = [...this.selected];\n\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 }\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 allSelected =\n this.selected.length === this.tableRows.length;\n\n if (!this.tableHeadCheckboxCell)\n /* c8 ignore next */ 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 const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n event.preventDefault();\n this.selectedSet = previousSelectedSet;\n this.selected = previousSelected;\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 this.validateSelected();\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 // Rendering updates into the table while disconnected can\n // cause runaway event binding in ancestor elements.\n if (!this.isConnected) return;\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 this.tableBody.addEventListener(\n 'rangeChanged',\n (event: RangeChangedEvent) => {\n this.dispatchEvent(\n new RangeChangedEvent({\n first: event.first,\n last: event.last,\n })\n );\n }\n );\n }\n const config: VirtualizeDirectiveConfig<Record<string, unknown>> = {\n items: this.items,\n renderItem: this.renderItem,\n scroller: this.scroller,\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 public override disconnectedCallback(): void {\n super.disconnectedCallback();\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["RowType", "_a"]
7
7
  }
package/src/Table.js CHANGED
@@ -1,19 +1,19 @@
1
- var u=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var c=(o,e,t,l)=>{for(var s=l>1?void 0:l?p(e,t):e,i=o.length-1,a;i>=0;i--)(a=o[i])&&(s=(l?a(e,t,s):a(s))||s);return l&&s&&u(e,t,s),s};import{html as r,render as b,SizedMixin as m,SpectrumElement as f}from"@spectrum-web-components/base";import"../sp-table-row.js";import"../sp-table-checkbox-cell.js";import"../sp-table-body.js";import{property as d}from"@spectrum-web-components/base/src/decorators.js";import C from"./table.css.js";import{virtualize as k}from"@lit-labs/virtualizer/virtualize.js";export var RowType=(t=>(t[t.ITEM=0]="ITEM",t[t.INFORMATION=1]="INFORMATION",t))(RowType||{});const n=class extends Event{constructor(e){super(n.eventName,{bubbles:!0});this.first=e.first,this.last=e.last}};export let RangeChangedEvent=n;RangeChangedEvent.eventName="rangeChanged";export class Table extends m(f,{validSizes:["s","m"],defaultSize:"m"}){constructor(){super(...arguments);this._renderItem=()=>r``;this.role="grid";this.selected=[];this.selectedSet=new Set;this.items=[];this.itemValue=(e,t)=>`${t}`;this.scroller=!1}static get styles(){return[C]}get renderItem(){return this._renderItem}set renderItem(e){this._renderItem=(t,l)=>{const s=this.itemValue(t,l),i=this.selected.includes(s),a=this.selects&&(t==null?void 0:t._$rowType$)!==1;return r`
1
+ "use strict";var u=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var a=(h,c,e,l)=>{for(var t=l>1?void 0:l?p(c,e):c,s=h.length-1,i;s>=0;s--)(i=h[s])&&(t=(l?i(c,e,t):i(t))||t);return l&&t&&u(c,e,t),t};import{html as r,render as m,SizedMixin as f,SpectrumElement as C}from"@spectrum-web-components/base";import"../sp-table-row.js";import"../sp-table-checkbox-cell.js";import"../sp-table-body.js";import{property as d}from"@spectrum-web-components/base/src/decorators.js";import k from"./table.css.js";import{virtualize as g}from"@lit-labs/virtualizer/virtualize.js";export var RowType=(e=>(e[e.ITEM=0]="ITEM",e[e.INFORMATION=1]="INFORMATION",e))(RowType||{});const n=class extends Event{constructor(e){super(n.eventName,{bubbles:!0});this.first=e.first,this.last=e.last}};export let RangeChangedEvent=n;RangeChangedEvent.eventName="rangeChanged";export class Table extends f(C,{validSizes:["s","m"],defaultSize:"m"}){constructor(){super(...arguments);this._renderItem=()=>r``;this.role="grid";this.selected=[];this.selectedSet=new Set;this.items=[];this.itemValue=(e,l)=>`${l}`;this.scroller=!1}static get styles(){return[k]}get renderItem(){return this._renderItem}set renderItem(e){this._renderItem=(l,t)=>{const s=this.itemValue(l,t),i=this.selected.includes(s),b=this.selects&&(l==null?void 0:l._$rowType$)!==1;return r`
2
2
  <sp-table-row
3
3
  value=${s}
4
- aria-rowindex=${l+1}
4
+ aria-rowindex=${t+1}
5
5
  ?selected=${i}
6
6
  >
7
- ${a?r`
7
+ ${b?r`
8
8
  <sp-table-checkbox-cell
9
9
  ?checked=${i}
10
10
  ></sp-table-checkbox-cell>
11
11
  `:r``}
12
- ${e(t,l)}
12
+ ${e(l,t)}
13
13
  </sp-table-row>
14
- `}}get tableHead(){return this.querySelector("sp-table-head")}get tableRows(){return this.isVirtualized?[]:[...this.querySelectorAll("sp-table-row")]}get isVirtualized(){return!!this.items.length}focus(){const e=this.querySelector("sp-table-head-cell[sortable]");e&&e.focus()}selectAllRows(){this.isVirtualized?(this.items.forEach((e,t)=>{e._$rowType$!==1&&this.selectedSet.add(this.itemValue(e,t))}),this.selected=[...this.selectedSet]):(this.tableRows.forEach(e=>{e.selected=!0,this.selectedSet.add(e.value)}),this.selected=[...this.selectedSet]),this.tableHeadCheckboxCell&&(this.tableHeadCheckboxCell.checked=!0,this.tableHeadCheckboxCell.indeterminate=!1)}deselectAllRows(){this.selectedSet.clear(),this.selected=[],this.isVirtualized||[...this.querySelectorAll("[selected]")].forEach(t=>{t.selected=!1}),this.tableHeadCheckboxCell&&(this.tableHeadCheckboxCell.checked=!1,this.tableHeadCheckboxCell.indeterminate=!1)}manageSelects(){const e=this.querySelectorAll("sp-table-checkbox-cell"),t=document.createElement("sp-table-checkbox-cell");if(this.selects){let l=!1;this.isVirtualized?l=this.selected.length>0&&this.selected.length===this.items.length:(this.tableRows.forEach(s=>{if(s.selected=this.selectedSet.has(s.value),!s.querySelector(":scope > sp-table-checkbox-cell")){const i=t.cloneNode();s.insertAdjacentElement("afterbegin",i),t.checked=s.selected}}),l=this.selected.length===this.tableRows.length),this.tableHeadCheckboxCell||(this.tableHeadCheckboxCell=document.createElement("sp-table-checkbox-cell"),this.tableHead.insertAdjacentElement("afterbegin",this.tableHeadCheckboxCell)),this.manageHeadCheckbox(l)}else e.forEach(l=>{l.remove()}),delete this.tableHeadCheckboxCell}manageSelected(){this.selectedSet=new Set(this.selected),!this.isVirtualized&&(this.tableRows.forEach(e=>{e.selected=this.selectedSet.has(e.value)}),this.tableHeadCheckboxCell&&(this.tableHeadCheckboxCell.checked=this.selected.length===this.tableRows.length))}manageCheckboxes(){var e;if(this.selects){this.tableHeadCheckboxCell=document.createElement("sp-table-checkbox-cell");const t=this.selected.length===this.tableRows.length;this.manageHeadCheckbox(t),this.tableHead.insertAdjacentElement("afterbegin",this.tableHeadCheckboxCell),this.tableRows.forEach(l=>{const s=document.createElement("sp-table-checkbox-cell");l.insertAdjacentElement("afterbegin",s),l.selected=this.selectedSet.has(l.value),s.checked=l.selected})}else(e=this.tableHead.querySelector("sp-table-checkbox-cell"))==null||e.remove(),this.tableRows.forEach(t=>{var l;(l=t.checkboxCells[0])==null||l.remove(),this.selected.length&&(t.selected=this.selectedSet.has(t.value))})}manageHeadCheckbox(e){!this.tableHeadCheckboxCell||(this.tableHeadCheckboxCell.selectsSingle=this.selects==="single",this.tableHeadCheckboxCell.checked=e,this.tableHeadCheckboxCell.indeterminate=this.selected.length>0&&!e)}handleChange(e){e.stopPropagation();const t=new Set(this.selectedSet),l=[...this.selected],{target:s}=e,{parentElement:i}=s;if(i.value)switch(this.selects){case"single":{this.deselectAllRows(),i.selected&&(this.selectedSet.add(i.value),this.selected=[...this.selectedSet]);break}case"multiple":{i.selected?this.selectedSet.add(i.value):this.selectedSet.delete(i.value),this.selected=[...this.selectedSet];const h=this.selected.length===this.tableRows.length;if(!this.tableHeadCheckboxCell)return;this.tableHeadCheckboxCell.checked=h,this.tableHeadCheckboxCell.indeterminate=this.selected.length>0&&!h;break}default:break}else{const{checkbox:h}=s;h.checked||h.indeterminate?this.selectAllRows():this.deselectAllRows()}this.dispatchEvent(new Event("change",{cancelable:!0,bubbles:!0,composed:!0}))||(e.preventDefault(),this.selectedSet=t,this.selected=l)}scrollToIndex(e){e&&this.renderVirtualizedItems(e)}render(){return r`
14
+ `}}get tableHead(){return this.querySelector("sp-table-head")}get tableRows(){return this.isVirtualized?[]:[...this.querySelectorAll("sp-table-row")]}get isVirtualized(){return!!this.items.length}focus(){const e=this.querySelector("sp-table-head-cell[sortable]");e&&e.focus()}selectAllRows(){this.isVirtualized?this.items.forEach((e,l)=>{e._$rowType$!==1&&this.selectedSet.add(this.itemValue(e,l))}):this.tableRows.forEach(e=>{e.selected=!0,this.selectedSet.add(e.value)}),this.selected=[...this.selectedSet],this.tableHeadCheckboxCell&&(this.tableHeadCheckboxCell.checked=!0,this.tableHeadCheckboxCell.indeterminate=!1)}deselectAllRows(){this.selectedSet.clear(),this.selected=[],this.isVirtualized||[...this.querySelectorAll("[selected]")].forEach(l=>{l.selected=!1}),this.tableHeadCheckboxCell&&(this.tableHeadCheckboxCell.checked=!1,this.tableHeadCheckboxCell.indeterminate=!1)}manageSelects(){const e=this.querySelectorAll("sp-table-checkbox-cell"),l=document.createElement("sp-table-checkbox-cell");if(this.selects){let t=!1;this.isVirtualized?t=this.selected.length>0&&this.selected.length===this.items.length:(this.tableRows.forEach(s=>{if(s.selected=this.selectedSet.has(s.value),!s.querySelector(":scope > sp-table-checkbox-cell")){const i=l.cloneNode();s.insertAdjacentElement("afterbegin",i),l.checked=s.selected}}),t=this.selected.length===this.tableRows.length),this.tableHeadCheckboxCell||(this.tableHeadCheckboxCell=document.createElement("sp-table-checkbox-cell"),this.tableHead.insertAdjacentElement("afterbegin",this.tableHeadCheckboxCell)),this.manageHeadCheckbox(t)}else e.forEach(t=>{t.remove()}),delete this.tableHeadCheckboxCell}validateSelected(){const e=new Set;this.isVirtualized?this.items.forEach((t,s)=>{const i=this.itemValue(t,s);e.add(i)}):this.tableRows.forEach(t=>{e.add(t.value)});const l=this.selected.length;this.selected=this.selected.filter(t=>e.has(t)),l!==this.selected.length&&this.dispatchEvent(new Event("change",{cancelable:!0,bubbles:!0,composed:!0})),this.selectedSet=new Set(this.selected)}manageSelected(){this.validateSelected(),!this.isVirtualized&&(this.tableRows.forEach(e=>{e.selected=this.selectedSet.has(e.value)}),this.tableHeadCheckboxCell&&(this.tableHeadCheckboxCell.checked=this.selected.length===this.tableRows.length))}manageCheckboxes(){var e;if(this.selects){this.tableHeadCheckboxCell=document.createElement("sp-table-checkbox-cell");const l=this.selected.length===this.tableRows.length;this.manageHeadCheckbox(l),this.tableHead.insertAdjacentElement("afterbegin",this.tableHeadCheckboxCell),this.tableRows.forEach(t=>{const s=document.createElement("sp-table-checkbox-cell");t.insertAdjacentElement("afterbegin",s),t.selected=this.selectedSet.has(t.value),s.checked=t.selected})}else(e=this.tableHead.querySelector("sp-table-checkbox-cell"))==null||e.remove(),this.tableRows.forEach(l=>{var t;(t=l.checkboxCells[0])==null||t.remove(),this.selected.length&&(l.selected=this.selectedSet.has(l.value))})}manageHeadCheckbox(e){!this.tableHeadCheckboxCell||(this.tableHeadCheckboxCell.selectsSingle=this.selects==="single",this.tableHeadCheckboxCell.checked=e,this.tableHeadCheckboxCell.indeterminate=this.selected.length>0&&!e)}handleChange(e){e.stopPropagation();const l=new Set(this.selectedSet),t=[...this.selected],{target:s}=e,{parentElement:i}=s;if(i.value)switch(this.selects){case"single":{this.deselectAllRows(),i.selected&&(this.selectedSet.add(i.value),this.selected=[...this.selectedSet]);break}case"multiple":{i.selected?this.selectedSet.add(i.value):this.selectedSet.delete(i.value),this.selected=[...this.selectedSet];const o=this.selected.length===this.tableRows.length;if(!this.tableHeadCheckboxCell)return;this.tableHeadCheckboxCell.checked=o,this.tableHeadCheckboxCell.indeterminate=this.selected.length>0&&!o;break}default:break}else{const{checkbox:o}=s;o.checked||o.indeterminate?this.selectAllRows():this.deselectAllRows()}this.dispatchEvent(new Event("change",{cancelable:!0,bubbles:!0,composed:!0}))||(e.preventDefault(),this.selectedSet=l,this.selected=t)}scrollToIndex(e){e&&this.renderVirtualizedItems(e)}render(){return r`
15
15
  <slot @change=${this.handleChange}></slot>
16
- `}willUpdate(e){if(!this.hasUpdated){const t=new Set;this.isVirtualized?this.items.forEach((s,i)=>{const a=this.itemValue(s,i);t.add(a)}):this.tableRows.forEach(s=>{t.add(s.value)});const l=this.selected.length;this.selected=this.selected.filter(s=>t.has(s)),l!==this.selected.length&&this.dispatchEvent(new Event("change",{cancelable:!0,bubbles:!0,composed:!0})),this.selectedSet=new Set(this.selected),this.manageCheckboxes()}e.has("selects")&&this.manageSelects(),e.has("selected")&&this.hasUpdated&&this.manageSelected()}updated(){this.items.length&&this.renderVirtualizedItems()}renderVirtualizedItems(e){if(!this.isConnected)return;this.tableBody||(this.tableBody=this.querySelector("sp-table-body"),this.tableBody||(this.tableBody=document.createElement("sp-table-body"),this.append(this.tableBody)),this.tableBody.addEventListener("rangeChanged",l=>{this.dispatchEvent(new RangeChangedEvent({first:l.first,last:l.last}))}));const t={items:this.items,renderItem:this.renderItem,scroller:this.scroller};e&&(t.scrollToIndex={index:e}),b(r`
17
- ${k(t)}
18
- `,this.tableBody)}disconnectedCallback(){this.tableBody&&b(r``,this.tableBody),super.disconnectedCallback()}}c([d({reflect:!0})],Table.prototype,"role",2),c([d({type:String,reflect:!0})],Table.prototype,"selects",2),c([d({type:Array})],Table.prototype,"selected",2),c([d({type:Array})],Table.prototype,"items",2),c([d({type:Object})],Table.prototype,"itemValue",2),c([d({type:Boolean,reflect:!0})],Table.prototype,"scroller",2);
16
+ `}willUpdate(e){this.hasUpdated||(this.validateSelected(),this.manageCheckboxes()),e.has("selects")&&this.manageSelects(),e.has("selected")&&this.hasUpdated&&this.manageSelected()}updated(){this.items.length&&this.renderVirtualizedItems()}renderVirtualizedItems(e){if(!this.isConnected)return;this.tableBody||(this.tableBody=this.querySelector("sp-table-body"),this.tableBody||(this.tableBody=document.createElement("sp-table-body"),this.append(this.tableBody)),this.tableBody.addEventListener("rangeChanged",t=>{this.dispatchEvent(new RangeChangedEvent({first:t.first,last:t.last}))}));const l={items:this.items,renderItem:this.renderItem,scroller:this.scroller};e&&(l.scrollToIndex={index:e}),m(r`
17
+ ${g(l)}
18
+ `,this.tableBody)}disconnectedCallback(){super.disconnectedCallback()}}a([d({reflect:!0})],Table.prototype,"role",2),a([d({type:String,reflect:!0})],Table.prototype,"selects",2),a([d({type:Array})],Table.prototype,"selected",2),a([d({type:Array})],Table.prototype,"items",2),a([d({type:Object})],Table.prototype,"itemValue",2),a([d({type:Boolean,reflect:!0})],Table.prototype,"scroller",2);
19
19
  //# sourceMappingURL=Table.js.map
package/src/Table.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["Table.ts"],
4
- "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*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n render,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport '../sp-table-row.js';\nimport '../sp-table-checkbox-cell.js';\nimport '../sp-table-body.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport styles from './table.css.js';\nimport { TableBody } from './TableBody.js';\nimport type { TableCheckboxCell } from './TableCheckboxCell.js';\nimport type { TableHead } from './TableHead.js';\nimport type { TableHeadCell } from './TableHeadCell.js';\nimport type { TableRow } from './TableRow.js';\nimport {\n virtualize,\n VirtualizeDirectiveConfig,\n} from '@lit-labs/virtualizer/virtualize.js';\n\ninterface Range {\n first: number;\n last: number;\n}\n\nexport enum RowType {\n ITEM = 0,\n INFORMATION = 1,\n}\n\nexport interface TableItem extends Record<string, unknown> {\n _$rowType$?: RowType;\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 * @fires rangeChanged - Announces a change in the range of visible cells on the table body\n * @event change - Announces a change in the `selected` property of a table row\n */\n\nexport class Table extends SizedMixin(SpectrumElement, {\n validSizes: ['s', 'm'],\n defaultSize: 'm',\n}) {\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 const hasCheckbox = this.selects && item?._$rowType$ !== 1;\n\n return html`\n <sp-table-row\n value=${value}\n aria-rowindex=${index + 1}\n ?selected=${selected}\n >\n ${hasCheckbox\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 /**\n * Whether the Table allows users to select a row or rows, and thus controls whether or not the Table also renders checkboxes.\n */\n @property({ type: String, reflect: true })\n public selects: undefined | 'single' | 'multiple';\n\n /**\n * An array of <sp-row> values that have been selected.\n */\n @property({ type: Array })\n public selected: string[] = [];\n\n private selectedSet = new Set<string>();\n\n /**\n * The content of the rows rendered by the virtualized table. The key is the value of the sp-table-row, and the value is the sp-table-row's content (not the row itself).\n */\n @property({ type: Array })\n public items: Record<string, unknown>[] = [];\n\n /**\n * The value of an item. By default, it is set to the index of the sp-table-row.\n */\n @property({ type: Object })\n public itemValue = (_item: unknown, index: number): string => {\n return `${index}`;\n };\n\n /**\n * Whether or not the virtualized table has a scroll bar. If this is set to true, make sure to specify a height in the sp-table's inline styles.\n */\n @property({ type: Boolean, reflect: true })\n public scroller = false;\n\n private tableBody?: TableBody;\n\n private tableHeadCheckboxCell?: TableCheckboxCell;\n\n private get tableHead(): TableHead {\n return this.querySelector('sp-table-head') as TableHead;\n }\n\n private get tableRows(): TableRow[] {\n if (this.isVirtualized) {\n return [];\n }\n return [...this.querySelectorAll('sp-table-row')] as TableRow[];\n }\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 if (item._$rowType$ !== 1) {\n this.selectedSet.add(this.itemValue(item, index));\n }\n });\n this.selected = [...this.selectedSet];\n } else {\n this.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 checkboxes = this.querySelectorAll('sp-table-checkbox-cell');\n const checkbox = document.createElement('sp-table-checkbox-cell');\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 this.tableRows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n if (!row.querySelector(':scope > sp-table-checkbox-cell')) {\n const clonedCheckbox =\n checkbox.cloneNode() as TableCheckboxCell;\n row.insertAdjacentElement('afterbegin', clonedCheckbox);\n checkbox.checked = row.selected;\n }\n });\n allSelected = this.selected.length === this.tableRows.length;\n }\n\n if (!this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n this.tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n }\n this.manageHeadCheckbox(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) return;\n\n this.tableRows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n });\n if (this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell.checked =\n this.selected.length === this.tableRows.length;\n }\n }\n\n protected manageCheckboxes(): void {\n if (!!this.selects) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n );\n const allSelected = this.selected.length === this.tableRows.length;\n\n this.manageHeadCheckbox(allSelected);\n\n this.tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n\n this.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 this.tableHead.querySelector('sp-table-checkbox-cell')?.remove();\n this.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 manageHeadCheckbox(allSelected: boolean): void {\n if (!this.tableHeadCheckboxCell) return;\n\n this.tableHeadCheckboxCell.selectsSingle = this.selects === 'single';\n this.tableHeadCheckboxCell.checked = allSelected;\n this.tableHeadCheckboxCell.indeterminate =\n this.selected.length > 0 && !allSelected;\n }\n\n protected handleChange(event: Event): void {\n event.stopPropagation();\n\n const previousSelectedSet = new Set(this.selectedSet);\n const previousSelected = [...this.selected];\n\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 }\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 allSelected =\n this.selected.length === this.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 const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n event.preventDefault();\n this.selectedSet = previousSelectedSet;\n this.selected = previousSelected;\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 this.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 // Rendering updates into the table while disconnected can\n // cause runaway event binding in ancestor elements.\n if (!this.isConnected) return;\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 this.tableBody.addEventListener(\n 'rangeChanged',\n (event: RangeChangedEvent) => {\n this.dispatchEvent(\n new RangeChangedEvent({\n first: event.first,\n last: event.last,\n })\n );\n }\n );\n }\n const config: VirtualizeDirectiveConfig<Record<string, unknown>> = {\n items: this.items,\n renderItem: this.renderItem,\n scroller: this.scroller,\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 public override disconnectedCallback(): void {\n if (this.tableBody) {\n render(html``, this.tableBody);\n }\n super.disconnectedCallback();\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "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*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n render,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport '../sp-table-row.js';\nimport '../sp-table-checkbox-cell.js';\nimport '../sp-table-body.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport styles from './table.css.js';\nimport { TableBody } from './TableBody.js';\nimport type { TableCheckboxCell } from './TableCheckboxCell.js';\nimport type { TableHead } from './TableHead.js';\nimport type { TableHeadCell } from './TableHeadCell.js';\nimport type { TableRow } from './TableRow.js';\nimport {\n virtualize,\n VirtualizeDirectiveConfig,\n} from '@lit-labs/virtualizer/virtualize.js';\n\ninterface Range {\n first: number;\n last: number;\n}\n\nexport enum RowType {\n ITEM = 0,\n INFORMATION = 1,\n}\n\nexport interface TableItem extends Record<string, unknown> {\n _$rowType$?: RowType;\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 * @fires rangeChanged - Announces a change in the range of visible cells on the table body\n * @event change - Announces a change in the `selected` property of a table row\n */\n\nexport class Table extends SizedMixin(SpectrumElement, {\n validSizes: ['s', 'm'],\n defaultSize: 'm',\n}) {\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 const hasCheckbox = this.selects && item?._$rowType$ !== 1;\n\n return html`\n <sp-table-row\n value=${value}\n aria-rowindex=${index + 1}\n ?selected=${selected}\n >\n ${hasCheckbox\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 = /* c8 ignore next */ () => html``;\n\n @property({ reflect: true })\n public role = 'grid';\n\n /**\n * Whether the Table allows users to select a row or rows, and thus controls whether or not the Table also renders checkboxes.\n */\n @property({ type: String, reflect: true })\n public selects: undefined | 'single' | 'multiple';\n\n /**\n * An array of <sp-row> values that have been selected.\n */\n @property({ type: Array })\n public selected: string[] = [];\n\n private selectedSet = new Set<string>();\n\n /**\n * The content of the rows rendered by the virtualized table. The key is the value of the sp-table-row, and the value is the sp-table-row's content (not the row itself).\n */\n @property({ type: Array })\n public items: Record<string, unknown>[] = [];\n\n /**\n * The value of an item. By default, it is set to the index of the sp-table-row.\n */\n @property({ type: Object })\n public itemValue = (_item: unknown, index: number): string => {\n return `${index}`;\n };\n\n /**\n * Whether or not the virtualized table has a scroll bar. If this is set to true, make sure to specify a height in the sp-table's inline styles.\n */\n @property({ type: Boolean, reflect: true })\n public scroller = false;\n\n private tableBody?: TableBody;\n\n private tableHeadCheckboxCell?: TableCheckboxCell;\n\n private get tableHead(): TableHead {\n return this.querySelector('sp-table-head') as TableHead;\n }\n\n private get tableRows(): TableRow[] {\n if (this.isVirtualized) {\n return [];\n }\n return [...this.querySelectorAll('sp-table-row')] as TableRow[];\n }\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 if (item._$rowType$ !== 1) {\n this.selectedSet.add(this.itemValue(item, index));\n }\n });\n } else {\n this.tableRows.forEach((row) => {\n row.selected = true; // Visually\n this.selectedSet.add(row.value); // Prepares table state\n });\n }\n this.selected = [...this.selectedSet];\n\n if (!this.tableHeadCheckboxCell) /* c8 ignore next */ 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) /* c8 ignore next */ return;\n this.tableHeadCheckboxCell.checked = false;\n this.tableHeadCheckboxCell.indeterminate = false;\n }\n\n protected manageSelects(): void {\n const checkboxes = this.querySelectorAll('sp-table-checkbox-cell');\n const checkbox = document.createElement('sp-table-checkbox-cell');\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 this.tableRows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n if (!row.querySelector(':scope > sp-table-checkbox-cell')) {\n const clonedCheckbox =\n checkbox.cloneNode() as TableCheckboxCell;\n row.insertAdjacentElement('afterbegin', clonedCheckbox);\n checkbox.checked = row.selected;\n }\n });\n allSelected = this.selected.length === this.tableRows.length;\n }\n\n if (!this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n this.tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n }\n this.manageHeadCheckbox(allSelected);\n } else {\n checkboxes.forEach((box) => {\n box.remove();\n });\n delete this.tableHeadCheckboxCell;\n }\n }\n\n protected validateSelected(): void {\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 this.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\n protected manageSelected(): void {\n this.validateSelected();\n\n if (this.isVirtualized) return;\n\n this.tableRows.forEach((row) => {\n row.selected = this.selectedSet.has(row.value);\n });\n if (this.tableHeadCheckboxCell) {\n this.tableHeadCheckboxCell.checked =\n this.selected.length === this.tableRows.length;\n }\n }\n\n protected manageCheckboxes(): void {\n if (!!this.selects) {\n this.tableHeadCheckboxCell = document.createElement(\n 'sp-table-checkbox-cell'\n );\n const allSelected = this.selected.length === this.tableRows.length;\n\n this.manageHeadCheckbox(allSelected);\n\n this.tableHead.insertAdjacentElement(\n 'afterbegin',\n this.tableHeadCheckboxCell\n );\n\n this.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 this.tableHead.querySelector('sp-table-checkbox-cell')?.remove();\n this.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 manageHeadCheckbox(allSelected: boolean): void {\n if (!this.tableHeadCheckboxCell) /* c8 ignore next */ return;\n\n this.tableHeadCheckboxCell.selectsSingle = this.selects === 'single';\n this.tableHeadCheckboxCell.checked = allSelected;\n this.tableHeadCheckboxCell.indeterminate =\n this.selected.length > 0 && !allSelected;\n }\n\n protected handleChange(event: Event): void {\n event.stopPropagation();\n\n const previousSelectedSet = new Set(this.selectedSet);\n const previousSelected = [...this.selected];\n\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 }\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 allSelected =\n this.selected.length === this.tableRows.length;\n\n if (!this.tableHeadCheckboxCell)\n /* c8 ignore next */ 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 const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n event.preventDefault();\n this.selectedSet = previousSelectedSet;\n this.selected = previousSelected;\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 this.validateSelected();\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 // Rendering updates into the table while disconnected can\n // cause runaway event binding in ancestor elements.\n if (!this.isConnected) return;\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 this.tableBody.addEventListener(\n 'rangeChanged',\n (event: RangeChangedEvent) => {\n this.dispatchEvent(\n new RangeChangedEvent({\n first: event.first,\n last: event.last,\n })\n );\n }\n );\n }\n const config: VirtualizeDirectiveConfig<Record<string, unknown>> = {\n items: this.items,\n renderItem: this.renderItem,\n scroller: this.scroller,\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 public override disconnectedCallback(): void {\n super.disconnectedCallback();\n }\n}\n"],
5
+ "mappings": "qNAYA,OAEI,QAAAA,EAEA,UAAAC,EACA,cAAAC,EACA,mBAAAC,MAEG,gCACP,MAAO,qBACP,MAAO,+BACP,MAAO,sBACP,OAAS,YAAAC,MAAgB,kDACzB,OAAOC,MAAY,iBAMnB,OACI,cAAAC,MAEG,sCAOA,WAAK,SAAAC,IACRA,IAAA,KAAO,GAAP,OACAA,IAAA,YAAc,GAAd,cAFQA,IAAA,aASL,MAAMC,EAAN,cAAgC,KAAM,CAMzC,YAAYC,EAAc,CACtB,MAAMD,EAAkB,UAAW,CAAE,QAAS,EAAK,CAAC,EACpD,KAAK,MAAQC,EAAM,MACnB,KAAK,KAAOA,EAAM,IACtB,CACJ,EAXO,WAAM,kBAAND,EAAM,kBACF,UAAY,eAmBhB,aAAM,cAAcN,EAAWC,EAAiB,CACnD,WAAY,CAAC,IAAK,GAAG,EACrB,YAAa,GACjB,CAAC,CAAE,CAHI,kCA6CH,KAAQ,YAGmC,IAAMH,IAGjD,KAAO,KAAO,OAYd,KAAO,SAAqB,CAAC,EAE7B,KAAQ,YAAc,IAAI,IAM1B,KAAO,MAAmC,CAAC,EAM3C,KAAO,UAAY,CAACU,EAAgBC,IACzB,GAAGA,IAOd,KAAO,SAAW,GAjFlB,WAA2B,QAAyB,CAChD,MAAO,CAACN,CAAM,CAClB,CAEA,IAAI,YAGgB,CAChB,OAAO,KAAK,WAChB,CAEA,IAAI,WACAO,EACF,CACE,KAAK,YAAc,CACfC,EACAF,IACiB,CACjB,MAAMG,EAAQ,KAAK,UAAUD,EAAMF,CAAK,EAClCI,EAAW,KAAK,SAAS,SAASD,CAAK,EACvCE,EAAc,KAAK,UAAWH,GAAA,YAAAA,EAAM,cAAe,EAEzD,OAAOb;AAAA;AAAA,4BAESc;AAAA,oCACQH,EAAQ;AAAA,gCACZI;AAAA;AAAA,sBAEVC,EACIhB;AAAA;AAAA,6CAEmBe;AAAA;AAAA,4BAGnBf;AAAA,sBACJY,EAAGC,EAAMF,CAAK;AAAA;AAAA,aAG5B,CACJ,CAgDA,IAAY,WAAuB,CAC/B,OAAO,KAAK,cAAc,eAAe,CAC7C,CAEA,IAAY,WAAwB,CAChC,OAAI,KAAK,cACE,CAAC,EAEL,CAAC,GAAG,KAAK,iBAAiB,cAAc,CAAC,CACpD,CAEA,IAAY,eAAyB,CACjC,MAAO,CAAC,CAAC,KAAK,MAAM,MACxB,CAEgB,OAAc,CAC1B,MAAMM,EAAmB,KAAK,cAC1B,8BACJ,EACIA,GACAA,EAAiB,MAAM,CAE/B,CAEQ,eAAsB,CACtB,KAAK,cACL,KAAK,MAAM,QAAQ,CAACJ,EAAMF,IAAkB,CACpCE,EAAK,aAAe,GACpB,KAAK,YAAY,IAAI,KAAK,UAAUA,EAAMF,CAAK,CAAC,CAExD,CAAC,EAED,KAAK,UAAU,QAASO,GAAQ,CAC5BA,EAAI,SAAW,GACf,KAAK,YAAY,IAAIA,EAAI,KAAK,CAClC,CAAC,EAEL,KAAK,SAAW,CAAC,GAAG,KAAK,WAAW,EAE/B,KAAK,wBACV,KAAK,sBAAsB,QAAU,GACrC,KAAK,sBAAsB,cAAgB,GAC/C,CAEQ,iBAAwB,CAC5B,KAAK,YAAY,MAAM,EACvB,KAAK,SAAW,CAAC,EAEZ,KAAK,eACe,CACjB,GAAG,KAAK,iBAAiB,YAAY,CACzC,EAEa,QAASA,GAAQ,CAC1BA,EAAI,SAAW,EACnB,CAAC,EAGA,KAAK,wBACV,KAAK,sBAAsB,QAAU,GACrC,KAAK,sBAAsB,cAAgB,GAC/C,CAEU,eAAsB,CAC5B,MAAMC,EAAa,KAAK,iBAAiB,wBAAwB,EAC3DC,EAAW,SAAS,cAAc,wBAAwB,EAChE,GAAM,KAAK,QAAS,CAChB,IAAIC,EAAc,GACd,KAAK,cACLA,EACI,KAAK,SAAS,OAAS,GACvB,KAAK,SAAS,SAAW,KAAK,MAAM,QAExC,KAAK,UAAU,QAASH,GAAQ,CAE5B,GADAA,EAAI,SAAW,KAAK,YAAY,IAAIA,EAAI,KAAK,EACzC,CAACA,EAAI,cAAc,iCAAiC,EAAG,CACvD,MAAMI,EACFF,EAAS,UAAU,EACvBF,EAAI,sBAAsB,aAAcI,CAAc,EACtDF,EAAS,QAAUF,EAAI,QAC3B,CACJ,CAAC,EACDG,EAAc,KAAK,SAAS,SAAW,KAAK,UAAU,QAGrD,KAAK,wBACN,KAAK,sBAAwB,SAAS,cAClC,wBACJ,EACA,KAAK,UAAU,sBACX,aACA,KAAK,qBACT,GAEJ,KAAK,mBAAmBA,CAAW,CACvC,MACIF,EAAW,QAASI,GAAQ,CACxBA,EAAI,OAAO,CACf,CAAC,EACD,OAAO,KAAK,qBAEpB,CAEU,kBAAyB,CAC/B,MAAMC,EAAY,IAAI,IAElB,KAAK,cACL,KAAK,MAAM,QAAQ,CAACX,EAAMF,IAAU,CAChC,MAAMG,EAAQ,KAAK,UAAUD,EAAMF,CAAK,EACxCa,EAAU,IAAIV,CAAK,CACvB,CAAC,EAED,KAAK,UAAU,QAASI,GAAQ,CAC5BM,EAAU,IAAIN,EAAI,KAAK,CAC3B,CAAC,EAGL,MAAMO,EAAmB,KAAK,SAAS,OAEvC,KAAK,SAAW,KAAK,SAAS,OAAQC,GAClCF,EAAU,IAAIE,CAAY,CAC9B,EACID,IAAqB,KAAK,SAAS,QACnC,KAAK,cACD,IAAI,MAAM,SAAU,CAChB,WAAY,GACZ,QAAS,GACT,SAAU,EACd,CAAC,CACL,EAEJ,KAAK,YAAc,IAAI,IAAI,KAAK,QAAQ,CAC5C,CAEU,gBAAuB,CAC7B,KAAK,iBAAiB,EAElB,MAAK,gBAET,KAAK,UAAU,QAASP,GAAQ,CAC5BA,EAAI,SAAW,KAAK,YAAY,IAAIA,EAAI,KAAK,CACjD,CAAC,EACG,KAAK,wBACL,KAAK,sBAAsB,QACvB,KAAK,SAAS,SAAW,KAAK,UAAU,QAEpD,CAEU,kBAAyB,CArTvC,IAAAS,EAsTQ,GAAM,KAAK,QAAS,CAChB,KAAK,sBAAwB,SAAS,cAClC,wBACJ,EACA,MAAMN,EAAc,KAAK,SAAS,SAAW,KAAK,UAAU,OAE5D,KAAK,mBAAmBA,CAAW,EAEnC,KAAK,UAAU,sBACX,aACA,KAAK,qBACT,EAEA,KAAK,UAAU,QAASH,GAAQ,CAC5B,MAAME,EAAW,SAAS,cACtB,wBACJ,EACAF,EAAI,sBAAsB,aAAcE,CAAQ,EAChDF,EAAI,SAAW,KAAK,YAAY,IAAIA,EAAI,KAAK,EAC7CE,EAAS,QAAUF,EAAI,QAC3B,CAAC,CACL,MACIS,EAAA,KAAK,UAAU,cAAc,wBAAwB,IAArD,MAAAA,EAAwD,SACxD,KAAK,UAAU,QAAST,GAAQ,CA7U5C,IAAAS,GA8UgBA,EAAAT,EAAI,cAAc,KAAlB,MAAAS,EAAsB,SAClB,KAAK,SAAS,SACdT,EAAI,SAAW,KAAK,YAAY,IAAIA,EAAI,KAAK,EAErD,CAAC,CAET,CAEU,mBAAmBG,EAA4B,CACjD,CAAC,KAAK,wBAEV,KAAK,sBAAsB,cAAgB,KAAK,UAAY,SAC5D,KAAK,sBAAsB,QAAUA,EACrC,KAAK,sBAAsB,cACvB,KAAK,SAAS,OAAS,GAAK,CAACA,EACrC,CAEU,aAAaO,EAAoB,CACvCA,EAAM,gBAAgB,EAEtB,MAAMC,EAAsB,IAAI,IAAI,KAAK,WAAW,EAC9CC,EAAmB,CAAC,GAAG,KAAK,QAAQ,EAEpC,CAAE,OAAAC,CAAO,EAAIH,EACb,CAAE,cAAeI,CAAQ,EAAID,EAGnC,GAAKC,EAAQ,MAQT,OAAQ,KAAK,aACJ,SAAU,CACX,KAAK,gBAAgB,EACjBA,EAAQ,WACR,KAAK,YAAY,IAAIA,EAAQ,KAAK,EAClC,KAAK,SAAW,CAAC,GAAG,KAAK,WAAW,GAExC,KACJ,KACK,WAAY,CACTA,EAAQ,SACR,KAAK,YAAY,IAAIA,EAAQ,KAAK,EAElC,KAAK,YAAY,OAAOA,EAAQ,KAAK,EAEzC,KAAK,SAAW,CAAC,GAAG,KAAK,WAAW,EAEpC,MAAMX,EACF,KAAK,SAAS,SAAW,KAAK,UAAU,OAE5C,GAAI,CAAC,KAAK,sBACe,OACzB,KAAK,sBAAsB,QAAUA,EACrC,KAAK,sBAAsB,cACvB,KAAK,SAAS,OAAS,GAAK,CAACA,EACjC,KACJ,SAEI,UApCQ,CAChB,KAAM,CAAE,SAAAD,CAAS,EAAIW,EACjBX,EAAS,SAAWA,EAAS,cAC7B,KAAK,cAAc,EAEnB,KAAK,gBAAgB,CAE7B,CAiCqB,KAAK,cACtB,IAAI,MAAM,SAAU,CAChB,WAAY,GACZ,QAAS,GACT,SAAU,EACd,CAAC,CACL,IAEIQ,EAAM,eAAe,EACrB,KAAK,YAAcC,EACnB,KAAK,SAAWC,EAExB,CAEO,cAAcnB,EAAsB,CACnCA,GACA,KAAK,uBAAuBA,CAAK,CAEzC,CAEmB,QAAyB,CACxC,OAAOX;AAAA,4BACa,KAAK;AAAA,SAE7B,CAEmB,WAAWiC,EAAqC,CAC1D,KAAK,aACN,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GAEtBA,EAAQ,IAAI,SAAS,GACrB,KAAK,cAAc,EAGnBA,EAAQ,IAAI,UAAU,GAAK,KAAK,YAChC,KAAK,eAAe,CAE5B,CAEmB,SAAgB,CAC3B,KAAK,MAAM,QACX,KAAK,uBAAuB,CAEpC,CAEU,uBAAuBtB,EAAsB,CAGnD,GAAI,CAAC,KAAK,YAAa,OAClB,KAAK,YACN,KAAK,UAAY,KAAK,cAAc,eAAe,EAC9C,KAAK,YACN,KAAK,UAAY,SAAS,cAAc,eAAe,EACvD,KAAK,OAAO,KAAK,SAAS,GAE9B,KAAK,UAAU,iBACX,eACCiB,GAA6B,CAC1B,KAAK,cACD,IAAI,kBAAkB,CAClB,MAAOA,EAAM,MACb,KAAMA,EAAM,IAChB,CAAC,CACL,CACJ,CACJ,GAEJ,MAAMM,EAA6D,CAC/D,MAAO,KAAK,MACZ,WAAY,KAAK,WACjB,SAAU,KAAK,QACnB,EACIvB,IACAuB,EAAO,cAAgB,CACnB,MAAAvB,CACJ,GAEJV,EACID;AAAA,kBACMM,EAAW4B,CAAM;AAAA,cAEvB,KAAK,SACT,CACJ,CAEgB,sBAA6B,CACzC,MAAM,qBAAqB,CAC/B,CACJ,CAjXWC,EAAA,CADN/B,EAAS,CAAE,QAAS,EAAK,CAAC,GAlDlB,MAmDF,oBAMA+B,EAAA,CADN/B,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GAxDhC,MAyDF,uBAMA+B,EAAA,CADN/B,EAAS,CAAE,KAAM,KAAM,CAAC,GA9DhB,MA+DF,wBAQA+B,EAAA,CADN/B,EAAS,CAAE,KAAM,KAAM,CAAC,GAtEhB,MAuEF,qBAMA+B,EAAA,CADN/B,EAAS,CAAE,KAAM,MAAO,CAAC,GA5EjB,MA6EF,yBAQA+B,EAAA,CADN/B,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GApFjC,MAqFF",
6
+ "names": ["html", "render", "SizedMixin", "SpectrumElement", "property", "styles", "virtualize", "RowType", "_RangeChangedEvent", "range", "_item", "index", "fn", "item", "value", "selected", "hasCheckbox", "sortableHeadCell", "row", "checkboxes", "checkbox", "allSelected", "clonedCheckbox", "box", "rowValues", "oldSelectedCount", "selectedItem", "_a", "event", "previousSelectedSet", "previousSelected", "target", "rowItem", "changed", "config", "__decorateClass"]
7
7
  }
@@ -4,6 +4,8 @@ import { CSSResultArray, SpectrumElement, TemplateResult } from '@spectrum-web-c
4
4
  */
5
5
  export declare class TableBody extends SpectrumElement {
6
6
  static get styles(): CSSResultArray;
7
+ constructor();
8
+ protected shouldHaveTabIndex(): void;
7
9
  role: string;
8
10
  protected render(): TemplateResult;
9
11
  }
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __decorateClass = (decorators, target, key, kind) => {
@@ -15,14 +16,33 @@ import {
15
16
  } from "@spectrum-web-components/base";
16
17
  import { property } from "@spectrum-web-components/base/src/decorators.js";
17
18
  import styles from "./table-body.css.js";
19
+ import { MutationController } from "@lit-labs/observers/mutation_controller.js";
18
20
  export class TableBody extends SpectrumElement {
19
21
  constructor() {
20
- super(...arguments);
22
+ super();
21
23
  this.role = "rowgroup";
24
+ new MutationController(this, {
25
+ config: {
26
+ childList: true,
27
+ subtree: true
28
+ },
29
+ callback: () => {
30
+ requestAnimationFrame(() => {
31
+ this.shouldHaveTabIndex();
32
+ });
33
+ }
34
+ });
22
35
  }
23
36
  static get styles() {
24
37
  return [styles];
25
38
  }
39
+ shouldHaveTabIndex() {
40
+ if (this.offsetHeight < this.scrollHeight) {
41
+ this.tabIndex = 0;
42
+ } else {
43
+ this.removeAttribute("tabindex");
44
+ }
45
+ }
26
46
  render() {
27
47
  return html`
28
48
  <slot></slot>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["TableBody.ts"],
4
- "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';\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"],
5
- "mappings": ";;;;;;;;;;;AAWA;AAAA;AAAA;AAAA;AAMA;AACA;AAKO,aAAM,kBAAkB,gBAAgB;AAAA,EAAxC;AAAA;AAMI,gBAAO;AAAA;AAAA,aALa,SAAyB;AAChD,WAAO,CAAC,MAAM;AAAA,EAClB;AAAA,EAKmB,SAAyB;AACxC,WAAO;AAAA;AAAA;AAAA,EAGX;AACJ;AAPW;AAAA,EADP,AAAC,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,GACpB,AANJ,UAMI;",
4
+ "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';\nimport styles from './table-body.css.js';\nimport { MutationController } from '@lit-labs/observers/mutation_controller.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 constructor() {\n super();\n new MutationController(this, {\n config: {\n childList: true,\n subtree: true,\n },\n callback: () => {\n requestAnimationFrame(() => {\n this.shouldHaveTabIndex();\n });\n },\n });\n }\n\n protected shouldHaveTabIndex(): void {\n if (this.offsetHeight < this.scrollHeight) {\n this.tabIndex = 0;\n } else {\n this.removeAttribute('tabindex');\n }\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"],
5
+ "mappings": ";;;;;;;;;;;;AAWA;AAAA,EAEI;AAAA,EACA;AAAA,OAEG;AACP,SAAS,gBAAgB;AACzB,OAAO,YAAY;AACnB,SAAS,0BAA0B;AAK5B,aAAM,kBAAkB,gBAAgB;AAAA,EAK3C,cAAc;AACV,UAAM;AAuBV,SAAO,OAAO;AAtBV,QAAI,mBAAmB,MAAM;AAAA,MACzB,QAAQ;AAAA,QACJ,WAAW;AAAA,QACX,SAAS;AAAA,MACb;AAAA,MACA,UAAU,MAAM;AACZ,8BAAsB,MAAM;AACxB,eAAK,mBAAmB;AAAA,QAC5B,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAjBA,WAA2B,SAAyB;AAChD,WAAO,CAAC,MAAM;AAAA,EAClB;AAAA,EAiBU,qBAA2B;AACjC,QAAI,KAAK,eAAe,KAAK,cAAc;AACvC,WAAK,WAAW;AAAA,IACpB,OAAO;AACH,WAAK,gBAAgB,UAAU;AAAA,IACnC;AAAA,EACJ;AAAA,EAKmB,SAAyB;AACxC,WAAO;AAAA;AAAA;AAAA,EAGX;AACJ;AAPW;AAAA,EADN,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,GA5BlB,UA6BF;",
6
6
  "names": []
7
7
  }
package/src/TableBody.js CHANGED
@@ -1,4 +1,4 @@
1
- var u=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var m=(l,r,o,t)=>{for(var e=t>1?void 0:t?i(r,o):r,s=l.length-1,p;s>=0;s--)(p=l[s])&&(e=(t?p(r,o,e):p(e))||e);return t&&e&&u(r,o,e),e};import{html as c,SpectrumElement as a}from"@spectrum-web-components/base";import{property as d}from"@spectrum-web-components/base/src/decorators.js";import n from"./table-body.css.js";export class TableBody extends a{constructor(){super(...arguments);this.role="rowgroup"}static get styles(){return[n]}render(){return c`
1
+ "use strict";var a=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var u=(o,t,s,r)=>{for(var e=r>1?void 0:r?m(t,s):t,i=o.length-1,l;i>=0;i--)(l=o[i])&&(e=(r?l(t,s,e):l(e))||e);return r&&e&&a(t,s,e),e};import{html as n,SpectrumElement as p}from"@spectrum-web-components/base";import{property as c}from"@spectrum-web-components/base/src/decorators.js";import d from"./table-body.css.js";import{MutationController as h}from"@lit-labs/observers/mutation_controller.js";export class TableBody extends p{constructor(){super();this.role="rowgroup";new h(this,{config:{childList:!0,subtree:!0},callback:()=>{requestAnimationFrame(()=>{this.shouldHaveTabIndex()})}})}static get styles(){return[d]}shouldHaveTabIndex(){this.offsetHeight<this.scrollHeight?this.tabIndex=0:this.removeAttribute("tabindex")}render(){return n`
2
2
  <slot></slot>
3
- `}}m([d({reflect:!0})],TableBody.prototype,"role",2);
3
+ `}}u([c({reflect:!0})],TableBody.prototype,"role",2);
4
4
  //# sourceMappingURL=TableBody.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["TableBody.ts"],
4
- "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';\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"],
5
- "mappings": "wMAWA,0EAMA,2EACA,mCAKO,aAAM,iBAAkB,EAAgB,CAAxC,kCAMI,UAAO,qBALa,SAAyB,CAChD,MAAO,CAAC,CAAM,CAClB,CAKmB,QAAyB,CACxC,MAAO;AAAA;AAAA,SAGX,CACJ,CAPW,GADP,AAAC,EAAS,CAAE,QAAS,EAAK,CAAC,GACpB,AANJ,UAMI",
6
- "names": []
4
+ "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';\nimport styles from './table-body.css.js';\nimport { MutationController } from '@lit-labs/observers/mutation_controller.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 constructor() {\n super();\n new MutationController(this, {\n config: {\n childList: true,\n subtree: true,\n },\n callback: () => {\n requestAnimationFrame(() => {\n this.shouldHaveTabIndex();\n });\n },\n });\n }\n\n protected shouldHaveTabIndex(): void {\n if (this.offsetHeight < this.scrollHeight) {\n this.tabIndex = 0;\n } else {\n this.removeAttribute('tabindex');\n }\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"],
5
+ "mappings": "qNAWA,OAEI,QAAAA,EACA,mBAAAC,MAEG,gCACP,OAAS,YAAAC,MAAgB,kDACzB,OAAOC,MAAY,sBACnB,OAAS,sBAAAC,MAA0B,6CAK5B,aAAM,kBAAkBH,CAAgB,CAK3C,aAAc,CACV,MAAM,EAuBV,KAAO,KAAO,WAtBV,IAAIG,EAAmB,KAAM,CACzB,OAAQ,CACJ,UAAW,GACX,QAAS,EACb,EACA,SAAU,IAAM,CACZ,sBAAsB,IAAM,CACxB,KAAK,mBAAmB,CAC5B,CAAC,CACL,CACJ,CAAC,CACL,CAjBA,WAA2B,QAAyB,CAChD,MAAO,CAACD,CAAM,CAClB,CAiBU,oBAA2B,CAC7B,KAAK,aAAe,KAAK,aACzB,KAAK,SAAW,EAEhB,KAAK,gBAAgB,UAAU,CAEvC,CAKmB,QAAyB,CACxC,OAAOH;AAAA;AAAA,SAGX,CACJ,CAPWK,EAAA,CADNH,EAAS,CAAE,QAAS,EAAK,CAAC,GA5BlB,UA6BF",
6
+ "names": ["html", "SpectrumElement", "property", "styles", "MutationController", "__decorateClass"]
7
7
  }