@spectrum-web-components/table 0.0.0-20241209155954

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 (183) hide show
  1. package/README.md +895 -0
  2. package/elements.d.ts +7 -0
  3. package/elements.dev.js +9 -0
  4. package/elements.dev.js.map +7 -0
  5. package/elements.js +2 -0
  6. package/elements.js.map +7 -0
  7. package/package.json +141 -0
  8. package/sp-table-body.d.ts +6 -0
  9. package/sp-table-body.dev.js +5 -0
  10. package/sp-table-body.dev.js.map +7 -0
  11. package/sp-table-body.js +2 -0
  12. package/sp-table-body.js.map +7 -0
  13. package/sp-table-cell.d.ts +6 -0
  14. package/sp-table-cell.dev.js +5 -0
  15. package/sp-table-cell.dev.js.map +7 -0
  16. package/sp-table-cell.js +2 -0
  17. package/sp-table-cell.js.map +7 -0
  18. package/sp-table-checkbox-cell.d.ts +6 -0
  19. package/sp-table-checkbox-cell.dev.js +5 -0
  20. package/sp-table-checkbox-cell.dev.js.map +7 -0
  21. package/sp-table-checkbox-cell.js +2 -0
  22. package/sp-table-checkbox-cell.js.map +7 -0
  23. package/sp-table-head-cell.d.ts +6 -0
  24. package/sp-table-head-cell.dev.js +5 -0
  25. package/sp-table-head-cell.dev.js.map +7 -0
  26. package/sp-table-head-cell.js +2 -0
  27. package/sp-table-head-cell.js.map +7 -0
  28. package/sp-table-head.d.ts +6 -0
  29. package/sp-table-head.dev.js +5 -0
  30. package/sp-table-head.dev.js.map +7 -0
  31. package/sp-table-head.js +2 -0
  32. package/sp-table-head.js.map +7 -0
  33. package/sp-table-row.d.ts +6 -0
  34. package/sp-table-row.dev.js +5 -0
  35. package/sp-table-row.dev.js.map +7 -0
  36. package/sp-table-row.js +2 -0
  37. package/sp-table-row.js.map +7 -0
  38. package/sp-table.d.ts +6 -0
  39. package/sp-table.dev.js +5 -0
  40. package/sp-table.dev.js.map +7 -0
  41. package/sp-table.js +2 -0
  42. package/sp-table.js.map +7 -0
  43. package/src/Table.d.ts +82 -0
  44. package/src/Table.dev.js +417 -0
  45. package/src/Table.dev.js.map +7 -0
  46. package/src/Table.js +19 -0
  47. package/src/Table.js.map +7 -0
  48. package/src/TableBody.d.ts +11 -0
  49. package/src/TableBody.dev.js +54 -0
  50. package/src/TableBody.dev.js.map +7 -0
  51. package/src/TableBody.js +4 -0
  52. package/src/TableBody.js.map +7 -0
  53. package/src/TableCell.d.ts +9 -0
  54. package/src/TableCell.dev.js +35 -0
  55. package/src/TableCell.dev.js.map +7 -0
  56. package/src/TableCell.js +4 -0
  57. package/src/TableCell.js.map +7 -0
  58. package/src/TableCheckboxCell.d.ts +22 -0
  59. package/src/TableCheckboxCell.dev.js +77 -0
  60. package/src/TableCheckboxCell.dev.js.map +7 -0
  61. package/src/TableCheckboxCell.js +11 -0
  62. package/src/TableCheckboxCell.js.map +7 -0
  63. package/src/TableHead.d.ts +16 -0
  64. package/src/TableHead.dev.js +54 -0
  65. package/src/TableHead.dev.js.map +7 -0
  66. package/src/TableHead.js +7 -0
  67. package/src/TableHead.js.map +7 -0
  68. package/src/TableHeadCell.d.ts +26 -0
  69. package/src/TableHeadCell.dev.js +134 -0
  70. package/src/TableHeadCell.dev.js.map +7 -0
  71. package/src/TableHeadCell.js +9 -0
  72. package/src/TableHeadCell.js.map +7 -0
  73. package/src/TableRow.d.ts +25 -0
  74. package/src/TableRow.dev.js +113 -0
  75. package/src/TableRow.dev.js.map +7 -0
  76. package/src/TableRow.js +7 -0
  77. package/src/TableRow.js.map +7 -0
  78. package/src/index.d.ts +7 -0
  79. package/src/index.dev.js +9 -0
  80. package/src/index.dev.js.map +7 -0
  81. package/src/index.js +2 -0
  82. package/src/index.js.map +7 -0
  83. package/src/spectrum-config.js +319 -0
  84. package/src/spectrum-table-body.css.d.ts +2 -0
  85. package/src/spectrum-table-body.css.dev.js +7 -0
  86. package/src/spectrum-table-body.css.dev.js.map +7 -0
  87. package/src/spectrum-table-body.css.js +4 -0
  88. package/src/spectrum-table-body.css.js.map +7 -0
  89. package/src/spectrum-table-cell.css.d.ts +2 -0
  90. package/src/spectrum-table-cell.css.dev.js +7 -0
  91. package/src/spectrum-table-cell.css.dev.js.map +7 -0
  92. package/src/spectrum-table-cell.css.js +4 -0
  93. package/src/spectrum-table-cell.css.js.map +7 -0
  94. package/src/spectrum-table-checkbox-cell.css.d.ts +2 -0
  95. package/src/spectrum-table-checkbox-cell.css.dev.js +7 -0
  96. package/src/spectrum-table-checkbox-cell.css.dev.js.map +7 -0
  97. package/src/spectrum-table-checkbox-cell.css.js +4 -0
  98. package/src/spectrum-table-checkbox-cell.css.js.map +7 -0
  99. package/src/spectrum-table-head-cell.css.d.ts +2 -0
  100. package/src/spectrum-table-head-cell.css.dev.js +7 -0
  101. package/src/spectrum-table-head-cell.css.dev.js.map +7 -0
  102. package/src/spectrum-table-head-cell.css.js +4 -0
  103. package/src/spectrum-table-head-cell.css.js.map +7 -0
  104. package/src/spectrum-table-head.css.d.ts +2 -0
  105. package/src/spectrum-table-head.css.dev.js +7 -0
  106. package/src/spectrum-table-head.css.dev.js.map +7 -0
  107. package/src/spectrum-table-head.css.js +4 -0
  108. package/src/spectrum-table-head.css.js.map +7 -0
  109. package/src/spectrum-table-row.css.d.ts +2 -0
  110. package/src/spectrum-table-row.css.dev.js +7 -0
  111. package/src/spectrum-table-row.css.dev.js.map +7 -0
  112. package/src/spectrum-table-row.css.js +4 -0
  113. package/src/spectrum-table-row.css.js.map +7 -0
  114. package/src/spectrum-table.css.d.ts +2 -0
  115. package/src/spectrum-table.css.dev.js +7 -0
  116. package/src/spectrum-table.css.dev.js.map +7 -0
  117. package/src/spectrum-table.css.js +4 -0
  118. package/src/spectrum-table.css.js.map +7 -0
  119. package/src/table-body.css.d.ts +2 -0
  120. package/src/table-body.css.dev.js +7 -0
  121. package/src/table-body.css.dev.js.map +7 -0
  122. package/src/table-body.css.js +4 -0
  123. package/src/table-body.css.js.map +7 -0
  124. package/src/table-cell-overrides.css.d.ts +2 -0
  125. package/src/table-cell-overrides.css.dev.js +7 -0
  126. package/src/table-cell-overrides.css.dev.js.map +7 -0
  127. package/src/table-cell-overrides.css.js +4 -0
  128. package/src/table-cell-overrides.css.js.map +7 -0
  129. package/src/table-cell.css.d.ts +2 -0
  130. package/src/table-cell.css.dev.js +7 -0
  131. package/src/table-cell.css.dev.js.map +7 -0
  132. package/src/table-cell.css.js +4 -0
  133. package/src/table-cell.css.js.map +7 -0
  134. package/src/table-checkbox-cell-overrides.css.d.ts +2 -0
  135. package/src/table-checkbox-cell-overrides.css.dev.js +7 -0
  136. package/src/table-checkbox-cell-overrides.css.dev.js.map +7 -0
  137. package/src/table-checkbox-cell-overrides.css.js +4 -0
  138. package/src/table-checkbox-cell-overrides.css.js.map +7 -0
  139. package/src/table-checkbox-cell.css.d.ts +2 -0
  140. package/src/table-checkbox-cell.css.dev.js +7 -0
  141. package/src/table-checkbox-cell.css.dev.js.map +7 -0
  142. package/src/table-checkbox-cell.css.js +4 -0
  143. package/src/table-checkbox-cell.css.js.map +7 -0
  144. package/src/table-head-cell-overrides.css.d.ts +2 -0
  145. package/src/table-head-cell-overrides.css.dev.js +7 -0
  146. package/src/table-head-cell-overrides.css.dev.js.map +7 -0
  147. package/src/table-head-cell-overrides.css.js +4 -0
  148. package/src/table-head-cell-overrides.css.js.map +7 -0
  149. package/src/table-head-cell.css.d.ts +2 -0
  150. package/src/table-head-cell.css.dev.js +7 -0
  151. package/src/table-head-cell.css.dev.js.map +7 -0
  152. package/src/table-head-cell.css.js +4 -0
  153. package/src/table-head-cell.css.js.map +7 -0
  154. package/src/table-head-overrides.css.d.ts +2 -0
  155. package/src/table-head-overrides.css.dev.js +7 -0
  156. package/src/table-head-overrides.css.dev.js.map +7 -0
  157. package/src/table-head-overrides.css.js +4 -0
  158. package/src/table-head-overrides.css.js.map +7 -0
  159. package/src/table-head.css.d.ts +2 -0
  160. package/src/table-head.css.dev.js +7 -0
  161. package/src/table-head.css.dev.js.map +7 -0
  162. package/src/table-head.css.js +4 -0
  163. package/src/table-head.css.js.map +7 -0
  164. package/src/table-overrides.css.d.ts +2 -0
  165. package/src/table-overrides.css.dev.js +7 -0
  166. package/src/table-overrides.css.dev.js.map +7 -0
  167. package/src/table-overrides.css.js +4 -0
  168. package/src/table-overrides.css.js.map +7 -0
  169. package/src/table-row-overrides.css.d.ts +2 -0
  170. package/src/table-row-overrides.css.dev.js +7 -0
  171. package/src/table-row-overrides.css.dev.js.map +7 -0
  172. package/src/table-row-overrides.css.js +4 -0
  173. package/src/table-row-overrides.css.js.map +7 -0
  174. package/src/table-row.css.d.ts +2 -0
  175. package/src/table-row.css.dev.js +7 -0
  176. package/src/table-row.css.dev.js.map +7 -0
  177. package/src/table-row.css.js +4 -0
  178. package/src/table-row.css.js.map +7 -0
  179. package/src/table.css.d.ts +2 -0
  180. package/src/table.css.dev.js +7 -0
  181. package/src/table.css.dev.js.map +7 -0
  182. package/src/table.css.js +4 -0
  183. package/src/table.css.js.map +7 -0
package/README.md ADDED
@@ -0,0 +1,895 @@
1
+ ## Description
2
+
3
+ An `<sp-table>` is used to create a container for displaying information. It allows users to sort, compare, and take action on large amounts of data.
4
+
5
+ ### Usage
6
+
7
+ [![See it on NPM!](https://img.shields.io/npm/v/@spectrum-web-components/table?style=for-the-badge)](https://www.npmjs.com/package/@spectrum-web-components/table)
8
+ [![How big is this package in your project?](https://img.shields.io/bundlephobia/minzip/@spectrum-web-components/table?style=for-the-badge)](https://bundlephobia.com/result?p=@spectrum-web-components/table)
9
+
10
+ ```
11
+ yarn add @spectrum-web-components/table
12
+ ```
13
+
14
+ Import the side effectful registration of `<sp-table>`, `<sp-table-body>`, `<sp-table-cell>`, `<sp-table-checkbox-cell>`, `<sp-table-head>`, `<sp-table-head-cell>`. and `<sp-table-row>` via:
15
+
16
+ ```
17
+ import '@spectrum-web-components/table/elements.js';
18
+ ```
19
+
20
+ Or individually via:
21
+
22
+ ```
23
+ import '@spectrum-web-components/table/sp-table.js';
24
+ import '@spectrum-web-components/table/sp-table-body.js';
25
+ import '@spectrum-web-components/table/sp-table-cell.js';
26
+ import '@spectrum-web-components/table/sp-table-checkbox-cell.js';
27
+ import '@spectrum-web-components/table/sp-table-head.js';
28
+ import '@spectrum-web-components/table/sp-table-head-cell.js';
29
+ import '@spectrum-web-components/table/sp-table-row.js';
30
+ ```
31
+
32
+ When looking to leverage the `Table`, `TableBody`, `TableCell`, `TableCheckboxCell`, `TableHead`, `TableHeadCell`, or `TableRow` base classes as a type and/or for extension purposes, do so via:
33
+
34
+ ```
35
+ import {
36
+ Table,
37
+ TableBody,
38
+ TableCell,
39
+ TableCheckboxCell,
40
+ TableHead,
41
+ TableHeadCell,
42
+ TableRow
43
+ } from '@spectrum-web-components/table';
44
+ ```
45
+
46
+ ## Example
47
+
48
+ ```html
49
+ <sp-table>
50
+ <sp-table-head>
51
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
52
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
53
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
54
+ </sp-table-head>
55
+ <sp-table-body>
56
+ <sp-table-row>
57
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
58
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
59
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
60
+ </sp-table-row>
61
+ <sp-table-row>
62
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
63
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
64
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
65
+ </sp-table-row>
66
+ <sp-table-row>
67
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
68
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
69
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
70
+ </sp-table-row>
71
+ <sp-table-row>
72
+ <sp-table-cell>Row Item Delta</sp-table-cell>
73
+ <sp-table-cell>Row Item Delta</sp-table-cell>
74
+ <sp-table-cell>Row Item Delta</sp-table-cell>
75
+ </sp-table-row>
76
+ <sp-table-row>
77
+ <sp-table-cell>Row Item Echo</sp-table-cell>
78
+ <sp-table-cell>Row Item Echo</sp-table-cell>
79
+ <sp-table-cell>Row Item Echo</sp-table-cell>
80
+ </sp-table-row>
81
+ </sp-table-body>
82
+ </sp-table>
83
+ ```
84
+
85
+ ## Selection
86
+
87
+ To manage selection on an `<sp-table>`, utilise the `selects` attribute on `<sp-table>`. Each `<sp-table-row>` has a `value` attribute which, by default, corresponds to its index in the table, and these `value`s tell `<sp-table>` which `<sp-table-row>`s are selected. The selected items can be manually applied via the `selected` property on the table.
88
+
89
+ ### `selects="single"`
90
+
91
+ When `selects="single"`, the `<sp-table>` will manage a _single_ selection in the array value of `selected`.
92
+
93
+ ```html
94
+ <sp-table
95
+ selects="single"
96
+ selected='["row1"]'
97
+ onchange="spAlert(this, `Selected: ${JSON.stringify(this.selected)}`)"
98
+ >
99
+ <sp-table-head>
100
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
101
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
102
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
103
+ </sp-table-head>
104
+ <sp-table-body>
105
+ <sp-table-row value="row1">
106
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
107
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
108
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
109
+ </sp-table-row>
110
+ <sp-table-row value="row2">
111
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
112
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
113
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
114
+ </sp-table-row>
115
+ <sp-table-row value="row3">
116
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
117
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
118
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
119
+ </sp-table-row>
120
+ <sp-table-row value="row4">
121
+ <sp-table-cell>Row Item Delta</sp-table-cell>
122
+ <sp-table-cell>Row Item Delta</sp-table-cell>
123
+ <sp-table-cell>Row Item Delta</sp-table-cell>
124
+ </sp-table-row>
125
+ <sp-table-row value="row5">
126
+ <sp-table-cell>Row Item Echo</sp-table-cell>
127
+ <sp-table-cell>Row Item Echo</sp-table-cell>
128
+ <sp-table-cell>Row Item Echo</sp-table-cell>
129
+ </sp-table-row>
130
+ </sp-table-body>
131
+ </sp-table>
132
+ ```
133
+
134
+ ### `selects="multiple"`
135
+
136
+ When `selects="multiple"`, the `<sp-table>` manages selections via a presence toggle and adds them to the `selected` array. Additionally, an `<sp-table-checkbox-cell>` will be made available in the `<sp-table-head>` in order to select/deselect all items in the `<sp-table>`.
137
+
138
+ ```html
139
+ <sp-table
140
+ selects="multiple"
141
+ selected='["row1", "row2"]'
142
+ onchange="spAlert(this, `Selected: ${JSON.stringify(this.selected)}`)"
143
+ >
144
+ <sp-table-head>
145
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
146
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
147
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
148
+ </sp-table-head>
149
+ <sp-table-body>
150
+ <sp-table-row value="row1">
151
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
152
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
153
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
154
+ </sp-table-row>
155
+ <sp-table-row value="row2">
156
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
157
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
158
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
159
+ </sp-table-row>
160
+ <sp-table-row value="row3">
161
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
162
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
163
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
164
+ </sp-table-row>
165
+ <sp-table-row value="row4">
166
+ <sp-table-cell>Row Item Delta</sp-table-cell>
167
+ <sp-table-cell>Row Item Delta</sp-table-cell>
168
+ <sp-table-cell>Row Item Delta</sp-table-cell>
169
+ </sp-table-row>
170
+ <sp-table-row value="row5">
171
+ <sp-table-cell>Row Item Echo</sp-table-cell>
172
+ <sp-table-cell>Row Item Echo</sp-table-cell>
173
+ <sp-table-cell>Row Item Echo</sp-table-cell>
174
+ </sp-table-row>
175
+ </sp-table-body>
176
+ </sp-table>
177
+ ```
178
+
179
+ ## Emphasized
180
+
181
+ Use the `emphasized` attribute to add priority to the information that is delivered within your `<table>` element. In particular, this affects the appearance of selected rows, and will set the emphasized style for the checkboxes within `sp-table-checkbox-cell`.
182
+ Leaving off the `emphasized` attribute will display the non-emphasized colors.
183
+
184
+ ```html
185
+ <sp-table emphasized selects="multiple" selected='["row1"]'>
186
+ <sp-table-head>
187
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
188
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
189
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
190
+ </sp-table-head>
191
+ <sp-table-body>
192
+ <sp-table-row value="row1">
193
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
194
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
195
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
196
+ </sp-table-row>
197
+ <sp-table-row value="row2">
198
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
199
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
200
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
201
+ </sp-table-row>
202
+ <sp-table-row value="row3">
203
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
204
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
205
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
206
+ </sp-table-row>
207
+ </sp-table-body>
208
+ </sp-table>
209
+ ```
210
+
211
+ ## Density
212
+
213
+ The optional `density` property changes the spacing around table cell content from the "regular" default. It accepts the values of `compact` or `spacious`.
214
+
215
+ <sp-tabs selected="compact" auto label="Density Attribute Options">
216
+ <sp-tab value="compact">Compact</sp-tab>
217
+ <sp-tab-panel value="compact">
218
+
219
+ ```html
220
+ <sp-table density="compact">
221
+ <sp-table-head>
222
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
223
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
224
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
225
+ </sp-table-head>
226
+ <sp-table-body>
227
+ <sp-table-row value="row1">
228
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
229
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
230
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
231
+ </sp-table-row>
232
+ <sp-table-row value="row2">
233
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
234
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
235
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
236
+ </sp-table-row>
237
+ <sp-table-row value="row3">
238
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
239
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
240
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
241
+ </sp-table-row>
242
+ </sp-table-body>
243
+ </sp-table>
244
+ ```
245
+
246
+ </sp-tab-panel>
247
+ <sp-tab value="spacious">Spacious</sp-tab>
248
+ <sp-tab-panel value="spacious">
249
+
250
+ ```html
251
+ <sp-table density="spacious">
252
+ <sp-table-head>
253
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
254
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
255
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
256
+ </sp-table-head>
257
+ <sp-table-body>
258
+ <sp-table-row value="row1">
259
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
260
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
261
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
262
+ </sp-table-row>
263
+ <sp-table-row value="row2">
264
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
265
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
266
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
267
+ </sp-table-row>
268
+ <sp-table-row value="row3">
269
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
270
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
271
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
272
+ </sp-table-row>
273
+ </sp-table-body>
274
+ </sp-table>
275
+ ```
276
+
277
+ </sp-tab-panel>
278
+ </sp-tabs>
279
+
280
+ ## Sizes
281
+
282
+ <sp-tabs selected="s" auto label="Size Attribute Options">
283
+ <sp-tab value="s">Small</sp-tab>
284
+ <sp-tab-panel value="s">
285
+
286
+ ```html
287
+ <sp-table size="s">
288
+ <sp-table-head>
289
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
290
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
291
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
292
+ </sp-table-head>
293
+ <sp-table-body>
294
+ <sp-table-row value="row1">
295
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
296
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
297
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
298
+ </sp-table-row>
299
+ <sp-table-row value="row2">
300
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
301
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
302
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
303
+ </sp-table-row>
304
+ <sp-table-row value="row3">
305
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
306
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
307
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
308
+ </sp-table-row>
309
+ </sp-table-body>
310
+ </sp-table>
311
+ ```
312
+
313
+ </sp-tab-panel>
314
+ <sp-tab value="m">Medium (Default)</sp-tab>
315
+ <sp-tab-panel value="m">
316
+
317
+ ```html
318
+ <sp-table>
319
+ <sp-table-head>
320
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
321
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
322
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
323
+ </sp-table-head>
324
+ <sp-table-body>
325
+ <sp-table-row value="row1">
326
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
327
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
328
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
329
+ </sp-table-row>
330
+ <sp-table-row value="row2">
331
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
332
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
333
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
334
+ </sp-table-row>
335
+ <sp-table-row value="row3">
336
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
337
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
338
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
339
+ </sp-table-row>
340
+ </sp-table-body>
341
+ </sp-table>
342
+ ```
343
+
344
+ </sp-tab-panel>
345
+ <sp-tab value="l">Large</sp-tab>
346
+ <sp-tab-panel value="l">
347
+
348
+ ```html
349
+ <sp-table size="l">
350
+ <sp-table-head>
351
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
352
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
353
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
354
+ </sp-table-head>
355
+ <sp-table-body>
356
+ <sp-table-row value="row1">
357
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
358
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
359
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
360
+ </sp-table-row>
361
+ <sp-table-row value="row2">
362
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
363
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
364
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
365
+ </sp-table-row>
366
+ <sp-table-row value="row3">
367
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
368
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
369
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
370
+ </sp-table-row>
371
+ </sp-table-body>
372
+ </sp-table>
373
+ ```
374
+
375
+ </sp-tab-panel>
376
+ <sp-tab value="xl">Extra Large</sp-tab>
377
+ <sp-tab-panel value="xl">
378
+
379
+ ```html
380
+ <sp-table size="xl">
381
+ <sp-table-head>
382
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
383
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
384
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
385
+ </sp-table-head>
386
+ <sp-table-body>
387
+ <sp-table-row value="row1">
388
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
389
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
390
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
391
+ </sp-table-row>
392
+ <sp-table-row value="row2">
393
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
394
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
395
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
396
+ </sp-table-row>
397
+ <sp-table-row value="row3">
398
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
399
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
400
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
401
+ </sp-table-row>
402
+ </sp-table-body>
403
+ </sp-table>
404
+ ```
405
+
406
+ </sp-tab-panel>
407
+ </sp-tabs>
408
+
409
+ ## Quiet
410
+
411
+ When using the `quiet` property, the overall look of the table will change. The quiet variant of Table has a transparent background and no borders on the left and right.
412
+
413
+ ```html
414
+ <sp-table quiet>
415
+ <sp-table-head>
416
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
417
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
418
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
419
+ </sp-table-head>
420
+ <sp-table-body>
421
+ <sp-table-row value="row1">
422
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
423
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
424
+ <sp-table-cell>Row Item Alpha</sp-table-cell>
425
+ </sp-table-row>
426
+ <sp-table-row value="row2">
427
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
428
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
429
+ <sp-table-cell>Row Item Bravo</sp-table-cell>
430
+ </sp-table-row>
431
+ <sp-table-row value="row3">
432
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
433
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
434
+ <sp-table-cell>Row Item Charlie</sp-table-cell>
435
+ </sp-table-row>
436
+ </sp-table-body>
437
+ </sp-table>
438
+ ```
439
+
440
+ ## Virtualized Table
441
+
442
+ For large amounts of data, the `<sp-table>` can be virtualised to easily add table rows by using properties.
443
+
444
+ ```html-live
445
+ <sp-table
446
+ id="table-virtualized-demo"
447
+ style="height: 200px"
448
+ scroller="true"
449
+ >
450
+ <sp-table-head>
451
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
452
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
453
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
454
+ </sp-table-head>
455
+ </sp-table>
456
+ <script type="module">
457
+ const initItems = (count) => {
458
+ const total = count;
459
+ const items = [];
460
+ while (count) {
461
+ count--;
462
+ items.push({
463
+ name: String(total - count),
464
+ date: count,
465
+ });
466
+ }
467
+ return items;
468
+ };
469
+ const initTable = () => {
470
+ const table = document.querySelector('#table-virtualized-demo');
471
+ table.items = initItems(50);
472
+
473
+ table.renderItem = (item, index) => {
474
+ const cell1 = document.createElement('sp-table-cell');
475
+ const cell2 = document.createElement('sp-table-cell');
476
+ const cell3 = document.createElement('sp-table-cell');
477
+ cell1.textContent = `Row Item Alpha ${item.name}`;
478
+ cell2.textContent = `Row Item Alpha ${index}`;
479
+ cell3.textContent = `Last Thing`;
480
+ return [cell1, cell2, cell3];
481
+ }
482
+ };
483
+ customElements.whenDefined('sp-table').then(() => {
484
+ initTable();
485
+ });
486
+ </script>
487
+ ```
488
+
489
+ <script type="module">
490
+ const initItems = (count) => {
491
+ const total = count;
492
+ const items = [];
493
+ while (count) {
494
+ count--;
495
+ items.push({
496
+ name: String(total - count),
497
+ date: count,
498
+ });
499
+ }
500
+ return items;
501
+ }
502
+
503
+ const initTable = async () => {
504
+ const table = document.querySelector('#table-virtualized-demo');
505
+
506
+ await table.updateComplete;
507
+ await table.closest('code-example')?.updateComplete;
508
+ table.items = initItems(50);
509
+
510
+ table.renderItem = (item, index) => {
511
+ const cell1 = document.createElement('sp-table-cell');
512
+ const cell2 = document.createElement('sp-table-cell');
513
+ const cell3 = document.createElement('sp-table-cell');
514
+ cell1.textContent = `Row Item Alpha ${item.name}`;
515
+ cell2.textContent = `Row Item Alpha ${index}`;
516
+ cell3.textContent = `Last Thing`;
517
+ return [cell1, cell2, cell3];
518
+ }
519
+ };
520
+ customElements.whenDefined('code-example').then(() => {
521
+ customElements.whenDefined('sp-table').then(() => {
522
+ initTable();
523
+ });
524
+ });
525
+ </script>
526
+
527
+ ### How to use it
528
+
529
+ The virtualised table takes `items` as either a property or a JSON-encoded string, an array of type `Record`, where the key is a `string` and the value can be whatever you'd like. `items` is then fed into the `renderItem` method, which takes an `item` and its `index` as parameters and renders the `<sp-table-row>` for each item. An example is as follows:
530
+
531
+ ```javascript
532
+ const renderItem = (item: Item, index: number): TemplateResult => {
533
+ return html`
534
+ <sp-table-cell>Rowsaa Item Alpha ${item.name}</sp-table-cell>
535
+ <sp-table-cell>Row Item Alpha ${item.date}</sp-table-cell>
536
+ <sp-table-cell>Row Item Alpha ${index}</sp-table-cell>
537
+ `;
538
+ };
539
+ ```
540
+
541
+ `renderItem` is then included as a property of `<sp-table>`, along with the `items`, to render a full `<sp-table>` without excessive manual HTML writing.
542
+
543
+ You can also render a different cell at a particular index by doing something like below:
544
+
545
+ ```javascript
546
+ const renderItem = (item: Item, index: number): TemplateResult => {
547
+ if (index === 15) {
548
+ return html`
549
+ <sp-table-cell style="text-align: center">Custom Row</sp-table-cell>
550
+ `;
551
+ }
552
+ return html`
553
+ <sp-table-cell>Row Item ${item.name}</sp-table-cell>
554
+ <sp-table-cell>Row Item ${item.date}</sp-table-cell>
555
+ <sp-table-cell>Row Item ${index}</sp-table-cell>
556
+ `;
557
+ };
558
+ ```
559
+
560
+ Please note that there is a bug when attempting to select all virtualised elements. The items are selected programatically, it's just not reflected visually.
561
+
562
+ ### Selection
563
+
564
+ By default the `selected` property will surface an array of item indexes that are currently selected. However, when making a selection on a virtualized table, it can be useful to track selection as something other than indexes. To do so, set a custom method for the `itemValue` property. The `itemValue` method accepts an item and its index as arguments and should return the value you would like to track in the `selected` property.
565
+
566
+ ```html-live
567
+ <sp-table
568
+ id="table-item-value-demo"
569
+ style="height: 200px"
570
+ scroller="true"
571
+ selects="multiple"
572
+ >
573
+ <sp-table-head>
574
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
575
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
576
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
577
+ </sp-table-head>
578
+ </sp-table>
579
+ <div class="selection">Selected: [ ]</div>
580
+ <script type="module">
581
+ const initItems = (count) => {
582
+ const total = count;
583
+ const items = [];
584
+ while (count) {
585
+ count--;
586
+ items.push({
587
+ id: crypto.randomUUID(),
588
+ name: String(total - count),
589
+ date: count,
590
+ });
591
+ }
592
+ return items;
593
+ };
594
+ const initTable = () => {
595
+ const table = document.querySelector('#table-item-value-demo');
596
+ table.items = initItems(50);
597
+
598
+ table.renderItem = (item, index) => {
599
+ const cell1 = document.createElement('sp-table-cell');
600
+ const cell2 = document.createElement('sp-table-cell');
601
+ const cell3 = document.createElement('sp-table-cell');
602
+ cell1.textContent = `Row Item Alpha ${item.name}`;
603
+ cell2.textContent = `Row Item Alpha ${index}`;
604
+ cell3.textContent = `Last Thing`;
605
+ return [cell1, cell2, cell3];
606
+ };
607
+
608
+ table.addEventListener('change', (event) => {
609
+ const selected = event.target.nextElementSibling;
610
+ selected.textContent = `Selected: ${JSON.stringify(event.target.selected, null, ' ')}`;
611
+ });
612
+ };
613
+ customElements.whenDefined('sp-table').then(() => {
614
+ initTable();
615
+ });
616
+ </script>
617
+ ```
618
+
619
+ <script type="module">
620
+ const initItems = (count) => {
621
+ const total = count;
622
+ const items = [];
623
+ while (count) {
624
+ count--;
625
+ items.push({
626
+ id: crypto.randomUUID(),
627
+ name: String(total - count),
628
+ date: count,
629
+ });
630
+ }
631
+ return items;
632
+ }
633
+
634
+ const initTable = async () => {
635
+ const table = document.querySelector('#table-item-value-demo');
636
+
637
+ await table.updateComplete;
638
+ await table.closest('code-example')?.updateComplete;
639
+ table.items = initItems(50);
640
+ table.itemValue = (item) => item.id;
641
+
642
+ table.renderItem = (item, index) => {
643
+ const cell1 = document.createElement('sp-table-cell');
644
+ const cell2 = document.createElement('sp-table-cell');
645
+ const cell3 = document.createElement('sp-table-cell');
646
+ cell1.textContent = `Row Item Alpha ${item.name}`;
647
+ cell2.textContent = `Row Item Alpha ${index}`;
648
+ cell3.textContent = `Last Thing`;
649
+ return [cell1, cell2, cell3];
650
+ };
651
+
652
+ table.addEventListener('change', (event) => {
653
+ const selected = event.target.nextElementSibling;
654
+ selected.textContent = `Selected: ${JSON.stringify(event.target.selected, null, ' ')}`;
655
+ });
656
+ };
657
+ customElements.whenDefined('code-example').then(() => {
658
+ customElements.whenDefined('sp-table').then(() => {
659
+ initTable();
660
+ });
661
+ });
662
+ </script>
663
+
664
+ ### Row Types
665
+
666
+ All values in the item array are assumed to be homogenous by default. This means all of the rendered rows are either delivered as provided, or, in the case you are leveraging `selects`, rendered with an `<sp-table-checkbox-cell>`. However, when virtualizing a table with selection, it can sometimes be useful to surface rows with additional interactions, e.g. "Load more data" links. To support that, you can optionally include the `_$rowType$` brand in your item. The values for this are outlined by the `RowType` enum and include `ITEM` (0) and `INFORMATION` (1). When `_$rowType$: RowType.INFORMATION` is provided, it instructs the `<sp-table>` not to deliver an `<sp-table-checkbox-cell>` in that row.
667
+
668
+ ```html-live
669
+ <sp-table
670
+ id="table-row-type-demo"
671
+ style="height: 200px"
672
+ scroller="true"
673
+ selects="single"
674
+ >
675
+ <sp-table-head>
676
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
677
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
678
+ <sp-table-head-cell>Column Title</sp-table-head-cell>
679
+ </sp-table-head>
680
+ </sp-table>
681
+ <script type="module">
682
+ const initItems = (count) => {
683
+ const total = count;
684
+ const items = [];
685
+ while (count) {
686
+ count--;
687
+ items.push({
688
+ name: String(total - count),
689
+ date: count,
690
+ });
691
+ }
692
+ return items;
693
+ };
694
+ const initTable = () => {
695
+ const table = document.querySelector('#table-row-type-demo');
696
+ const items = initItems(50);
697
+ items.splice(3, 0, {
698
+ _$rowType$: 1,
699
+ });
700
+ table.items = items;
701
+
702
+ table.renderItem = (item, index) => {
703
+ if (item._$rowType$ === 1) {
704
+ const infoCell = document.createElement('sp-table-cell');
705
+ infoCell.textContent = 'Use this row type for non-selectable content.';
706
+ return [infoCell];
707
+ }
708
+ const cell1 = document.createElement('sp-table-cell');
709
+ const cell2 = document.createElement('sp-table-cell');
710
+ const cell3 = document.createElement('sp-table-cell');
711
+ cell1.textContent = `Row Item Alpha ${item.name}`;
712
+ cell2.textContent = `Row Item Alpha ${index}`;
713
+ cell3.textContent = `Last Thing`;
714
+ return [cell1, cell2, cell3];
715
+ };
716
+ };
717
+ customElements.whenDefined('sp-table').then(() => {
718
+ initTable();
719
+ });
720
+ </script>
721
+ ```
722
+
723
+ <script type="module">
724
+ const initItems = (count) => {
725
+ const total = count;
726
+ const items = [];
727
+ while (count) {
728
+ count--;
729
+ items.push({
730
+ name: String(total - count),
731
+ date: count,
732
+ });
733
+ }
734
+ return items;
735
+ }
736
+
737
+ const initTable = async () => {
738
+ const table = document.querySelector('#table-row-type-demo');
739
+
740
+ await table.updateComplete;
741
+ await table.closest('code-example')?.updateComplete;
742
+ const items = initItems(50);
743
+ items.splice(3, 0, {
744
+ _$rowType$: 1,
745
+ });
746
+ table.items = items;
747
+
748
+
749
+ table.renderItem = (item, index) => {
750
+ if (item._$rowType$ === 1) {
751
+ const infoCell = document.createElement('sp-table-cell');
752
+ infoCell.textContent = 'Use this row type for non-selectable content.';
753
+ return [infoCell];
754
+ }
755
+ const cell1 = document.createElement('sp-table-cell');
756
+ const cell2 = document.createElement('sp-table-cell');
757
+ const cell3 = document.createElement('sp-table-cell');
758
+ cell1.textContent = `Row Item Alpha ${item.name}`;
759
+ cell2.textContent = `Row Item Alpha ${index}`;
760
+ cell3.textContent = `Last Thing`;
761
+ return [cell1, cell2, cell3];
762
+ };
763
+ };
764
+ customElements.whenDefined('code-example').then(() => {
765
+ customElements.whenDefined('sp-table').then(() => {
766
+ initTable();
767
+ });
768
+ });
769
+ </script>
770
+
771
+ ### The `scroller` property
772
+
773
+ By default, the virtualized table doesn't contain a scroll bar and will display the entire length of the table body. Use the `scroller` property and specify an inline style for the height to get a `Table` of your desired height that scrolls.
774
+
775
+ ## Sorting on the Virtualized Table
776
+
777
+ The virtualized table supports sorting its elements.
778
+
779
+ For each table column you want to sort, use the `sortable` attribute in its respective `<sp-table-head-cell>`. `sort-direction="asc"|"desc"` specifies the direction the sort goes, in either ascending or descending order, respectively. The `@sorted` event listener on `<sp-table>` can be utilised to specify a method to fire when the `<sp-table-head-cell>` dispatches the `sorted` event. To specify which aspect of an item you'd like to sort by, use the `sort-key` attribute.
780
+
781
+ ```html-live
782
+ <sp-table
783
+ id="sorted-virtualized-table"
784
+ style="height: 200px"
785
+ scroller="true"
786
+ >
787
+ <sp-table-head>
788
+ <sp-table-head-cell sortable sort-direction="desc" sort-key="name">
789
+ Sortable Column
790
+ </sp-table-head-cell>
791
+ <sp-table-head-cell>Non-sortable Column</sp-table-head-cell>
792
+ <sp-table-head-cell>Non-sortable Column</sp-table-head-cell>
793
+ </sp-table-head>
794
+ </sp-table>
795
+ <script type="module">
796
+ const initItems = (count) => {
797
+ const total = count;
798
+ const items = [];
799
+ while (count) {
800
+ count--;
801
+ items.push({
802
+ name: String(total - count),
803
+ date: count,
804
+ });
805
+ }
806
+ return items;
807
+ }
808
+
809
+ let items = initItems(50);
810
+
811
+ const initTable = () => {
812
+ const table = document.querySelector('#sorted-virtualized-table');
813
+
814
+ table.items = items;
815
+
816
+ table.renderItem = (item, index) => {
817
+ const cell1 = document.createElement('sp-table-cell');
818
+ const cell2 = document.createElement('sp-table-cell');
819
+ const cell3 = document.createElement('sp-table-cell');
820
+ cell1.textContent = `Row Item Alpha ${item.name}`;
821
+ cell2.textContent = `Row Item Beta ${item.date}`;
822
+ cell3.textContent = `Index: ${index}`;
823
+ return [cell1, cell2, cell3];
824
+ }
825
+ table.addEventListener('sorted', (event) => {
826
+ const { sortDirection, sortKey } = event.detail;
827
+ items = items.sort((a, b) => {
828
+ const first = String(a[sortKey]);
829
+ const second = String(b[sortKey]);
830
+ return sortDirection === 'asc'
831
+ ? first.localeCompare(second)
832
+ : second.localeCompare(first);
833
+ });
834
+ table.items = [...items];
835
+ });
836
+ };
837
+
838
+ customElements.whenDefined('sp-table').then(() => {
839
+ initTable();
840
+ });
841
+ </script>
842
+ ```
843
+
844
+ <script type="module">
845
+ const initItems = (count) => {
846
+ const total = count;
847
+ const items = [];
848
+ while (count) {
849
+ count--;
850
+ items.push({
851
+ name: String(total - count),
852
+ date: count,
853
+ });
854
+ }
855
+ return items;
856
+ }
857
+
858
+ let items = initItems(50);
859
+
860
+ const initTable = async () => {
861
+ const table = document.querySelector('#sorted-virtualized-table');
862
+
863
+ await table.updateComplete;
864
+ await table.closest('code-example')?.updateComplete;
865
+
866
+ table.items = items;
867
+
868
+ table.renderItem = (item, index) => {
869
+ const cell1 = document.createElement('sp-table-cell');
870
+ const cell2 = document.createElement('sp-table-cell');
871
+ const cell3 = document.createElement('sp-table-cell');
872
+ cell1.textContent = `Row Item Alpha ${item.name}`;
873
+ cell2.textContent = `Row Item Beta ${item.date}`;
874
+ cell3.textContent = `Index: ${index}`;
875
+ return [cell1, cell2, cell3];
876
+ }
877
+ table.addEventListener('sorted', (event) => {
878
+ const { sortDirection, sortKey } = event.detail;
879
+ items = items.sort((a, b) => {
880
+ const first = String(a[sortKey]);
881
+ const second = String(b[sortKey]);
882
+ return sortDirection === 'asc'
883
+ ? first.localeCompare(second)
884
+ : second.localeCompare(first);
885
+ });
886
+ table.items = [...items];
887
+ });
888
+ };
889
+
890
+ customElements.whenDefined('code-example').then(() => {
891
+ customElements.whenDefined('sp-table').then(() => {
892
+ initTable();
893
+ });
894
+ });
895
+ </script>