q2-tecton-elements 1.38.1 → 1.39.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 (400) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +1 -1
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/{index-09c712ea.js → index-9113a9da.js} +2 -2
  4. package/dist/cjs/{index-09c712ea.js.map → index-9113a9da.js.map} +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
  8. package/dist/cjs/q2-btn_2.cjs.entry.js +2 -2
  9. package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
  10. package/dist/cjs/q2-calendar.cjs.entry.js +11 -2
  11. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  12. package/dist/cjs/q2-card.cjs.entry.js +20 -23
  13. package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
  14. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
  16. package/dist/cjs/q2-carousel.cjs.entry.js +30 -4
  17. package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
  18. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-chart-area.cjs.entry.js.map +1 -1
  20. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-chart-donut.cjs.entry.js +14 -14
  22. package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
  23. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
  25. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-checkbox.cjs.entry.js.map +1 -1
  27. package/dist/cjs/q2-data-table.cjs.entry.js +43 -21
  28. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  29. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-dropdown.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
  33. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-input.cjs.entry.js +7 -4
  35. package/dist/cjs/q2-input.cjs.entry.js.map +1 -1
  36. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-optgroup_2.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-optgroup_2.cjs.entry.js.map +1 -1
  41. package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-option-list.cjs.entry.js.map +1 -1
  43. package/dist/cjs/q2-pagination.cjs.entry.js +1 -1
  44. package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
  45. package/dist/cjs/q2-pill.cjs.entry.js +1 -1
  46. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  47. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  48. package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
  49. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  50. package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
  51. package/dist/cjs/q2-section.cjs.entry.js +2 -2
  52. package/dist/cjs/q2-section.cjs.entry.js.map +1 -1
  53. package/dist/cjs/q2-select.cjs.entry.js +1 -1
  54. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  55. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  56. package/dist/cjs/q2-stepper-pane.cjs.entry.js.map +1 -1
  57. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +4 -4
  58. package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
  59. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  60. package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
  61. package/dist/cjs/q2-tab-container.cjs.entry.js +1 -1
  62. package/dist/cjs/q2-tab-container.cjs.entry.js.map +1 -1
  63. package/dist/cjs/q2-tab-pane.cjs.entry.js.map +1 -1
  64. package/dist/cjs/q2-tag.cjs.entry.js +1 -1
  65. package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
  66. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  67. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  68. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  69. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  70. package/dist/cjs/tecton-tab-pane.cjs.entry.js.map +1 -1
  71. package/dist/collection/components/click-elsewhere/index.js +1 -1
  72. package/dist/collection/components/click-elsewhere/index.js.map +1 -1
  73. package/dist/collection/components/q2-action-sheet/index.js +6 -3
  74. package/dist/collection/components/q2-action-sheet/index.js.map +1 -1
  75. package/dist/collection/components/q2-btn/styles.css +11 -11
  76. package/dist/collection/components/q2-calendar/index.js +23 -11
  77. package/dist/collection/components/q2-calendar/index.js.map +1 -1
  78. package/dist/collection/components/q2-card/index.js +21 -27
  79. package/dist/collection/components/q2-card/index.js.map +1 -1
  80. package/dist/collection/components/q2-card/styles.css +57 -0
  81. package/dist/collection/components/q2-carousel/index.js +33 -5
  82. package/dist/collection/components/q2-carousel/index.js.map +1 -1
  83. package/dist/collection/components/q2-carousel-pane/index.js +8 -4
  84. package/dist/collection/components/q2-carousel-pane/index.js.map +1 -1
  85. package/dist/collection/components/q2-chart-area/index.js +9 -4
  86. package/dist/collection/components/q2-chart-area/index.js.map +1 -1
  87. package/dist/collection/components/q2-chart-donut/index.js +58 -22
  88. package/dist/collection/components/q2-chart-donut/index.js.map +1 -1
  89. package/dist/collection/components/q2-checkbox/index.js +5 -2
  90. package/dist/collection/components/q2-checkbox/index.js.map +1 -1
  91. package/dist/collection/components/q2-checkbox-group/index.js +12 -5
  92. package/dist/collection/components/q2-checkbox-group/index.js.map +1 -1
  93. package/dist/collection/components/q2-data-table/index.js +73 -29
  94. package/dist/collection/components/q2-data-table/index.js.map +1 -1
  95. package/dist/collection/components/q2-editable-field/index.js +6 -6
  96. package/dist/collection/components/q2-editable-field/index.js.map +1 -1
  97. package/dist/collection/components/q2-input/formatting/phone.js +1 -1
  98. package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
  99. package/dist/collection/components/q2-input/index.js +23 -19
  100. package/dist/collection/components/q2-input/index.js.map +1 -1
  101. package/dist/collection/components/q2-input/styles.css +3 -0
  102. package/dist/collection/components/q2-input/types.js.map +1 -1
  103. package/dist/collection/components/q2-option/index.js +5 -2
  104. package/dist/collection/components/q2-option/index.js.map +1 -1
  105. package/dist/collection/components/q2-option-list/index.js +15 -9
  106. package/dist/collection/components/q2-option-list/index.js.map +1 -1
  107. package/dist/collection/components/q2-pagination/index.js +8 -5
  108. package/dist/collection/components/q2-pagination/index.js.map +1 -1
  109. package/dist/collection/components/q2-pill/index.js +5 -2
  110. package/dist/collection/components/q2-pill/index.js.map +1 -1
  111. package/dist/collection/components/q2-popover/index.js +1 -1
  112. package/dist/collection/components/q2-popover/index.js.map +1 -1
  113. package/dist/collection/components/q2-radio/index.js +3 -3
  114. package/dist/collection/components/q2-radio/index.js.map +1 -1
  115. package/dist/collection/components/q2-radio-group/index.js +7 -4
  116. package/dist/collection/components/q2-radio-group/index.js.map +1 -1
  117. package/dist/collection/components/q2-section/index.js +7 -4
  118. package/dist/collection/components/q2-section/index.js.map +1 -1
  119. package/dist/collection/components/q2-section/styles.css +8 -6
  120. package/dist/collection/components/q2-select/index.js +8 -5
  121. package/dist/collection/components/q2-select/index.js.map +1 -1
  122. package/dist/collection/components/q2-stepper/index.js +5 -2
  123. package/dist/collection/components/q2-stepper/index.js.map +1 -1
  124. package/dist/collection/components/q2-stepper-pane/index.js +11 -8
  125. package/dist/collection/components/q2-stepper-pane/index.js.map +1 -1
  126. package/dist/collection/components/q2-stepper-vertical/index.js +13 -6
  127. package/dist/collection/components/q2-stepper-vertical/index.js.map +1 -1
  128. package/dist/collection/components/q2-tab-container/index.js +14 -8
  129. package/dist/collection/components/q2-tab-container/index.js.map +1 -1
  130. package/dist/collection/components/q2-tab-pane/index.js +5 -2
  131. package/dist/collection/components/q2-tab-pane/index.js.map +1 -1
  132. package/dist/collection/components/q2-tag/index.js +1 -1
  133. package/dist/collection/components/q2-tag/index.js.map +1 -1
  134. package/dist/collection/components/q2-textarea/index.js +14 -8
  135. package/dist/collection/components/q2-textarea/index.js.map +1 -1
  136. package/dist/collection/components/tecton-tab-pane/index.js +5 -2
  137. package/dist/collection/components/tecton-tab-pane/index.js.map +1 -1
  138. package/dist/collection/utils/index.js +1 -1
  139. package/dist/collection/utils/index.js.map +1 -1
  140. package/dist/components/index13.js.map +1 -1
  141. package/dist/components/index14.js.map +1 -1
  142. package/dist/components/index15.js.map +1 -1
  143. package/dist/components/index16.js +1 -1
  144. package/dist/components/index16.js.map +1 -1
  145. package/dist/components/index2.js.map +1 -1
  146. package/dist/components/index5.js +1 -1
  147. package/dist/components/index5.js.map +1 -1
  148. package/dist/components/index6.js.map +1 -1
  149. package/dist/components/index9.js +6 -3
  150. package/dist/components/index9.js.map +1 -1
  151. package/dist/components/q2-action-sheet.js.map +1 -1
  152. package/dist/components/q2-calendar.js +10 -1
  153. package/dist/components/q2-calendar.js.map +1 -1
  154. package/dist/components/q2-card.js +19 -22
  155. package/dist/components/q2-card.js.map +1 -1
  156. package/dist/components/q2-carousel-pane.js.map +1 -1
  157. package/dist/components/q2-carousel.js +32 -4
  158. package/dist/components/q2-carousel.js.map +1 -1
  159. package/dist/components/q2-chart-area.js.map +1 -1
  160. package/dist/components/q2-chart-donut.js +16 -15
  161. package/dist/components/q2-chart-donut.js.map +1 -1
  162. package/dist/components/q2-checkbox-group.js.map +1 -1
  163. package/dist/components/q2-data-table.js +43 -21
  164. package/dist/components/q2-data-table.js.map +1 -1
  165. package/dist/components/q2-editable-field.js.map +1 -1
  166. package/dist/components/q2-pagination.js.map +1 -1
  167. package/dist/components/q2-pill.js.map +1 -1
  168. package/dist/components/q2-radio-group.js.map +1 -1
  169. package/dist/components/q2-radio.js.map +1 -1
  170. package/dist/components/q2-section.js +1 -1
  171. package/dist/components/q2-section.js.map +1 -1
  172. package/dist/components/q2-select.js.map +1 -1
  173. package/dist/components/q2-stepper-pane.js.map +1 -1
  174. package/dist/components/q2-stepper-vertical.js +3 -3
  175. package/dist/components/q2-stepper-vertical.js.map +1 -1
  176. package/dist/components/q2-stepper.js.map +1 -1
  177. package/dist/components/q2-tab-container.js.map +1 -1
  178. package/dist/components/q2-tab-pane.js.map +1 -1
  179. package/dist/components/q2-tag.js.map +1 -1
  180. package/dist/components/q2-textarea.js.map +1 -1
  181. package/dist/components/tecton-tab-pane.js.map +1 -1
  182. package/dist/esm/click-elsewhere_2.entry.js +1 -1
  183. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  184. package/dist/esm/{index-84f1034e.js → index-fbe28822.js} +2 -2
  185. package/dist/esm/{index-84f1034e.js.map → index-fbe28822.js.map} +1 -1
  186. package/dist/esm/loader.js +1 -1
  187. package/dist/esm/q2-action-sheet.entry.js +1 -1
  188. package/dist/esm/q2-action-sheet.entry.js.map +1 -1
  189. package/dist/esm/q2-btn_2.entry.js +2 -2
  190. package/dist/esm/q2-btn_2.entry.js.map +1 -1
  191. package/dist/esm/q2-calendar.entry.js +11 -2
  192. package/dist/esm/q2-calendar.entry.js.map +1 -1
  193. package/dist/esm/q2-card.entry.js +20 -23
  194. package/dist/esm/q2-card.entry.js.map +1 -1
  195. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  196. package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
  197. package/dist/esm/q2-carousel.entry.js +30 -4
  198. package/dist/esm/q2-carousel.entry.js.map +1 -1
  199. package/dist/esm/q2-chart-area.entry.js +1 -1
  200. package/dist/esm/q2-chart-area.entry.js.map +1 -1
  201. package/dist/esm/q2-chart-bar.entry.js +1 -1
  202. package/dist/esm/q2-chart-donut.entry.js +14 -14
  203. package/dist/esm/q2-chart-donut.entry.js.map +1 -1
  204. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  205. package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
  206. package/dist/esm/q2-checkbox.entry.js +1 -1
  207. package/dist/esm/q2-checkbox.entry.js.map +1 -1
  208. package/dist/esm/q2-data-table.entry.js +43 -21
  209. package/dist/esm/q2-data-table.entry.js.map +1 -1
  210. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  211. package/dist/esm/q2-dropdown.entry.js +1 -1
  212. package/dist/esm/q2-editable-field.entry.js +1 -1
  213. package/dist/esm/q2-editable-field.entry.js.map +1 -1
  214. package/dist/esm/q2-icon.entry.js +1 -1
  215. package/dist/esm/q2-input.entry.js +7 -4
  216. package/dist/esm/q2-input.entry.js.map +1 -1
  217. package/dist/esm/q2-loc.entry.js +1 -1
  218. package/dist/esm/q2-message.entry.js +1 -1
  219. package/dist/esm/q2-month-picker.entry.js +1 -1
  220. package/dist/esm/q2-optgroup_2.entry.js +1 -1
  221. package/dist/esm/q2-optgroup_2.entry.js.map +1 -1
  222. package/dist/esm/q2-option-list.entry.js +1 -1
  223. package/dist/esm/q2-option-list.entry.js.map +1 -1
  224. package/dist/esm/q2-pagination.entry.js +1 -1
  225. package/dist/esm/q2-pagination.entry.js.map +1 -1
  226. package/dist/esm/q2-pill.entry.js +1 -1
  227. package/dist/esm/q2-pill.entry.js.map +1 -1
  228. package/dist/esm/q2-radio-group.entry.js +1 -1
  229. package/dist/esm/q2-radio-group.entry.js.map +1 -1
  230. package/dist/esm/q2-radio.entry.js +1 -1
  231. package/dist/esm/q2-radio.entry.js.map +1 -1
  232. package/dist/esm/q2-section.entry.js +2 -2
  233. package/dist/esm/q2-section.entry.js.map +1 -1
  234. package/dist/esm/q2-select.entry.js +1 -1
  235. package/dist/esm/q2-select.entry.js.map +1 -1
  236. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  237. package/dist/esm/q2-stepper-pane.entry.js.map +1 -1
  238. package/dist/esm/q2-stepper-vertical.entry.js +4 -4
  239. package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
  240. package/dist/esm/q2-stepper.entry.js +1 -1
  241. package/dist/esm/q2-stepper.entry.js.map +1 -1
  242. package/dist/esm/q2-tab-container.entry.js +1 -1
  243. package/dist/esm/q2-tab-container.entry.js.map +1 -1
  244. package/dist/esm/q2-tab-pane.entry.js.map +1 -1
  245. package/dist/esm/q2-tag.entry.js +1 -1
  246. package/dist/esm/q2-tag.entry.js.map +1 -1
  247. package/dist/esm/q2-tecton-elements.js +1 -1
  248. package/dist/esm/q2-textarea.entry.js +1 -1
  249. package/dist/esm/q2-textarea.entry.js.map +1 -1
  250. package/dist/esm/q2-tooltip.entry.js +1 -1
  251. package/dist/esm/tecton-tab-pane.entry.js.map +1 -1
  252. package/dist/q2-tecton-elements/p-0253a00b.entry.js +2 -0
  253. package/dist/q2-tecton-elements/p-0253a00b.entry.js.map +1 -0
  254. package/dist/q2-tecton-elements/{p-72b4ecc6.entry.js → p-07229496.entry.js} +2 -2
  255. package/dist/q2-tecton-elements/p-07229496.entry.js.map +1 -0
  256. package/dist/q2-tecton-elements/{p-a6b03db1.entry.js → p-0ecff52c.entry.js} +2 -2
  257. package/dist/q2-tecton-elements/{p-a6b03db1.entry.js.map → p-0ecff52c.entry.js.map} +1 -1
  258. package/dist/q2-tecton-elements/{p-f198f77b.entry.js → p-1179b32c.entry.js} +2 -2
  259. package/dist/q2-tecton-elements/p-1179b32c.entry.js.map +1 -0
  260. package/dist/q2-tecton-elements/{p-311f37e2.entry.js → p-15c69543.entry.js} +2 -2
  261. package/dist/q2-tecton-elements/{p-9220365b.entry.js → p-212c6301.entry.js} +2 -2
  262. package/dist/q2-tecton-elements/p-212c6301.entry.js.map +1 -0
  263. package/dist/q2-tecton-elements/p-3090b655.entry.js +2 -0
  264. package/dist/q2-tecton-elements/p-3090b655.entry.js.map +1 -0
  265. package/dist/q2-tecton-elements/{p-8f8d5362.entry.js → p-3569e648.entry.js} +2 -2
  266. package/dist/q2-tecton-elements/p-3569e648.entry.js.map +1 -0
  267. package/dist/q2-tecton-elements/{p-0cade28b.entry.js → p-36bff57a.entry.js} +2 -2
  268. package/dist/q2-tecton-elements/{p-57e81863.entry.js → p-39e94e12.entry.js} +2 -2
  269. package/dist/q2-tecton-elements/{p-57e81863.entry.js.map → p-39e94e12.entry.js.map} +1 -1
  270. package/dist/q2-tecton-elements/p-3f20d610.entry.js +2 -0
  271. package/dist/q2-tecton-elements/p-3f20d610.entry.js.map +1 -0
  272. package/dist/q2-tecton-elements/{p-29a7ca63.entry.js → p-44c2d7a2.entry.js} +2 -2
  273. package/dist/q2-tecton-elements/{p-29a7ca63.entry.js.map → p-44c2d7a2.entry.js.map} +1 -1
  274. package/dist/q2-tecton-elements/{p-deb773a5.entry.js → p-461dca3d.entry.js} +2 -2
  275. package/dist/q2-tecton-elements/{p-deb773a5.entry.js.map → p-461dca3d.entry.js.map} +1 -1
  276. package/dist/q2-tecton-elements/{p-3d82d94f.entry.js → p-5964fd50.entry.js} +2 -2
  277. package/dist/q2-tecton-elements/{p-3d82d94f.entry.js.map → p-5964fd50.entry.js.map} +1 -1
  278. package/dist/q2-tecton-elements/{p-e98d9cf2.entry.js → p-5b4c30b8.entry.js} +2 -2
  279. package/dist/q2-tecton-elements/p-5b4c30b8.entry.js.map +1 -0
  280. package/dist/q2-tecton-elements/{p-69dcf12e.entry.js → p-5d6c2534.entry.js} +2 -2
  281. package/dist/q2-tecton-elements/p-5d6c2534.entry.js.map +1 -0
  282. package/dist/q2-tecton-elements/{p-a09c90c1.entry.js → p-66bc9475.entry.js} +2 -2
  283. package/dist/q2-tecton-elements/{p-a09c90c1.entry.js.map → p-66bc9475.entry.js.map} +1 -1
  284. package/dist/q2-tecton-elements/{p-e4dadcd7.entry.js → p-6ba6d83e.entry.js} +2 -2
  285. package/dist/q2-tecton-elements/p-6ba6d83e.entry.js.map +1 -0
  286. package/dist/q2-tecton-elements/{p-5843f6c8.entry.js → p-78d5707b.entry.js} +2 -2
  287. package/dist/q2-tecton-elements/p-78d5707b.entry.js.map +1 -0
  288. package/dist/q2-tecton-elements/{p-85dc889e.entry.js → p-7e276297.entry.js} +2 -2
  289. package/dist/q2-tecton-elements/p-7e276297.entry.js.map +1 -0
  290. package/dist/q2-tecton-elements/{p-059ea7c9.entry.js → p-81e36fcd.entry.js} +2 -2
  291. package/dist/q2-tecton-elements/{p-8f273db2.entry.js → p-88b303a7.entry.js} +2 -2
  292. package/dist/q2-tecton-elements/{p-8f273db2.entry.js.map → p-88b303a7.entry.js.map} +1 -1
  293. package/dist/q2-tecton-elements/p-9889692d.entry.js +2 -0
  294. package/dist/q2-tecton-elements/p-9889692d.entry.js.map +1 -0
  295. package/dist/q2-tecton-elements/p-9da0db14.entry.js.map +1 -1
  296. package/dist/q2-tecton-elements/{p-c057134f.entry.js → p-9dff6592.entry.js} +2 -2
  297. package/dist/q2-tecton-elements/p-9dff6592.entry.js.map +1 -0
  298. package/dist/q2-tecton-elements/{p-145849d0.entry.js → p-a5a23edc.entry.js} +2 -2
  299. package/dist/q2-tecton-elements/p-a5a23edc.entry.js.map +1 -0
  300. package/dist/q2-tecton-elements/{p-db3bbfb8.entry.js → p-a9c40d3b.entry.js} +2 -2
  301. package/dist/q2-tecton-elements/p-a9c40d3b.entry.js.map +1 -0
  302. package/dist/q2-tecton-elements/{p-15179d55.entry.js → p-aa96f160.entry.js} +2 -2
  303. package/dist/q2-tecton-elements/{p-5c033ed9.entry.js → p-b3a32a46.entry.js} +2 -2
  304. package/dist/q2-tecton-elements/{p-5c033ed9.entry.js.map → p-b3a32a46.entry.js.map} +1 -1
  305. package/dist/q2-tecton-elements/{p-f3868a77.entry.js → p-b6ed1342.entry.js} +2 -2
  306. package/dist/q2-tecton-elements/{p-f3868a77.entry.js.map → p-b6ed1342.entry.js.map} +1 -1
  307. package/dist/q2-tecton-elements/{p-52132d80.entry.js → p-ba19d09f.entry.js} +2 -2
  308. package/dist/q2-tecton-elements/p-ba19d09f.entry.js.map +1 -0
  309. package/dist/q2-tecton-elements/{p-81b917a5.entry.js → p-cc7ba0cb.entry.js} +2 -2
  310. package/dist/q2-tecton-elements/{p-107f07f2.entry.js → p-ce009987.entry.js} +2 -2
  311. package/dist/q2-tecton-elements/p-d7fb3534.entry.js.map +1 -1
  312. package/dist/q2-tecton-elements/{p-959f47ef.entry.js → p-de7352f5.entry.js} +2 -2
  313. package/dist/q2-tecton-elements/{p-6ae87415.entry.js → p-ef2e2991.entry.js} +2 -2
  314. package/dist/q2-tecton-elements/{p-b83568e7.entry.js → p-f1479052.entry.js} +2 -2
  315. package/dist/q2-tecton-elements/p-f1479052.entry.js.map +1 -0
  316. package/dist/q2-tecton-elements/{p-f34521a4.js → p-fb903495.js} +2 -2
  317. package/dist/q2-tecton-elements/{p-f34521a4.js.map → p-fb903495.js.map} +1 -1
  318. package/dist/q2-tecton-elements/{p-2812f9d2.entry.js → p-ff137358.entry.js} +2 -2
  319. package/dist/q2-tecton-elements/p-ff137358.entry.js.map +1 -0
  320. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  321. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  322. package/dist/test/elements/q2-btn-test.e2e.js +31 -0
  323. package/dist/test/elements/q2-btn-test.e2e.js.map +1 -1
  324. package/dist/test/elements/q2-card-test.e2e.js +69 -11
  325. package/dist/test/elements/q2-card-test.e2e.js.map +1 -1
  326. package/dist/test/elements/q2-carousel-test.e2e.js +41 -3
  327. package/dist/test/elements/q2-carousel-test.e2e.js.map +1 -1
  328. package/dist/test/elements/q2-chart-donut-test.e2e.js +64 -9
  329. package/dist/test/elements/q2-chart-donut-test.e2e.js.map +1 -1
  330. package/dist/test/elements/q2-data-table-test.e2e.js +91 -2
  331. package/dist/test/elements/q2-data-table-test.e2e.js.map +1 -1
  332. package/dist/test/elements/q2-input-test.e2e.js +165 -67
  333. package/dist/test/elements/q2-input-test.e2e.js.map +1 -1
  334. package/dist/test/helpers.js +48 -0
  335. package/dist/test/helpers.js.map +1 -1
  336. package/dist/types/components/click-elsewhere/index.d.ts +3 -0
  337. package/dist/types/components/q2-action-sheet/index.d.ts +7 -0
  338. package/dist/types/components/q2-calendar/index.d.ts +23 -3
  339. package/dist/types/components/q2-card/index.d.ts +14 -4
  340. package/dist/types/components/q2-carousel/index.d.ts +8 -0
  341. package/dist/types/components/q2-carousel-pane/index.d.ts +7 -1
  342. package/dist/types/components/q2-chart-area/index.d.ts +7 -1
  343. package/dist/types/components/q2-chart-donut/index.d.ts +18 -3
  344. package/dist/types/components/q2-checkbox/index.d.ts +4 -0
  345. package/dist/types/components/q2-checkbox-group/index.d.ts +8 -1
  346. package/dist/types/components/q2-data-table/index.d.ts +43 -3
  347. package/dist/types/components/q2-editable-field/index.d.ts +18 -2
  348. package/dist/types/components/q2-input/index.d.ts +19 -2
  349. package/dist/types/components/q2-input/types.d.ts +1 -0
  350. package/dist/types/components/q2-option/index.d.ts +4 -0
  351. package/dist/types/components/q2-option-list/index.d.ts +15 -1
  352. package/dist/types/components/q2-pagination/index.d.ts +8 -2
  353. package/dist/types/components/q2-pill/index.d.ts +4 -0
  354. package/dist/types/components/q2-popover/index.d.ts +3 -0
  355. package/dist/types/components/q2-radio/index.d.ts +6 -1
  356. package/dist/types/components/q2-radio-group/index.d.ts +7 -1
  357. package/dist/types/components/q2-section/index.d.ts +7 -1
  358. package/dist/types/components/q2-select/index.d.ts +16 -1
  359. package/dist/types/components/q2-stepper/index.d.ts +4 -0
  360. package/dist/types/components/q2-stepper-pane/index.d.ts +11 -1
  361. package/dist/types/components/q2-stepper-vertical/index.d.ts +10 -2
  362. package/dist/types/components/q2-tab-container/index.d.ts +12 -2
  363. package/dist/types/components/q2-tab-pane/index.d.ts +4 -0
  364. package/dist/types/components/q2-tag/index.d.ts +5 -0
  365. package/dist/types/components/q2-textarea/index.d.ts +14 -2
  366. package/dist/types/components/tecton-tab-pane/index.d.ts +4 -0
  367. package/dist/types/components.d.ts +223 -27
  368. package/dist/types/workspace/workspace/{tecton-production_release_1.38.x → _Gitlab_tecton-production_master}/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +1 -0
  369. package/package.json +4 -3
  370. package/dist/q2-tecton-elements/p-072bda73.entry.js +0 -2
  371. package/dist/q2-tecton-elements/p-072bda73.entry.js.map +0 -1
  372. package/dist/q2-tecton-elements/p-145849d0.entry.js.map +0 -1
  373. package/dist/q2-tecton-elements/p-14e3c48f.entry.js +0 -2
  374. package/dist/q2-tecton-elements/p-14e3c48f.entry.js.map +0 -1
  375. package/dist/q2-tecton-elements/p-2812f9d2.entry.js.map +0 -1
  376. package/dist/q2-tecton-elements/p-52132d80.entry.js.map +0 -1
  377. package/dist/q2-tecton-elements/p-5843f6c8.entry.js.map +0 -1
  378. package/dist/q2-tecton-elements/p-69dcf12e.entry.js.map +0 -1
  379. package/dist/q2-tecton-elements/p-72b4ecc6.entry.js.map +0 -1
  380. package/dist/q2-tecton-elements/p-85dc889e.entry.js.map +0 -1
  381. package/dist/q2-tecton-elements/p-8f8d5362.entry.js.map +0 -1
  382. package/dist/q2-tecton-elements/p-9220365b.entry.js.map +0 -1
  383. package/dist/q2-tecton-elements/p-a4017e55.entry.js +0 -2
  384. package/dist/q2-tecton-elements/p-a4017e55.entry.js.map +0 -1
  385. package/dist/q2-tecton-elements/p-af98db79.entry.js +0 -2
  386. package/dist/q2-tecton-elements/p-af98db79.entry.js.map +0 -1
  387. package/dist/q2-tecton-elements/p-b83568e7.entry.js.map +0 -1
  388. package/dist/q2-tecton-elements/p-c057134f.entry.js.map +0 -1
  389. package/dist/q2-tecton-elements/p-db3bbfb8.entry.js.map +0 -1
  390. package/dist/q2-tecton-elements/p-e4dadcd7.entry.js.map +0 -1
  391. package/dist/q2-tecton-elements/p-e98d9cf2.entry.js.map +0 -1
  392. package/dist/q2-tecton-elements/p-f198f77b.entry.js.map +0 -1
  393. /package/dist/q2-tecton-elements/{p-311f37e2.entry.js.map → p-15c69543.entry.js.map} +0 -0
  394. /package/dist/q2-tecton-elements/{p-0cade28b.entry.js.map → p-36bff57a.entry.js.map} +0 -0
  395. /package/dist/q2-tecton-elements/{p-059ea7c9.entry.js.map → p-81e36fcd.entry.js.map} +0 -0
  396. /package/dist/q2-tecton-elements/{p-15179d55.entry.js.map → p-aa96f160.entry.js.map} +0 -0
  397. /package/dist/q2-tecton-elements/{p-81b917a5.entry.js.map → p-cc7ba0cb.entry.js.map} +0 -0
  398. /package/dist/q2-tecton-elements/{p-107f07f2.entry.js.map → p-ce009987.entry.js.map} +0 -0
  399. /package/dist/q2-tecton-elements/{p-959f47ef.entry.js.map → p-de7352f5.entry.js.map} +0 -0
  400. /package/dist/q2-tecton-elements/{p-6ae87415.entry.js.map → p-ef2e2991.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"q2-data-table-test.e2e.js","sourceRoot":"","sources":["../../../test/elements/q2-data-table-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage, SpecPage, newSpecPage } from '@stencil/core/testing';\nimport { getNestedElementStyle, setup } from '../helpers';\nimport { Q2DataTable, Q2DataTableHeader, Q2DataTableRow } from '../../src/components/q2-data-table';\n\ndescribe('q2-data-table', () => {\n let e2ePage: E2EPage;\n let specPage: SpecPage;\n let table: E2EElement;\n let headerData: Q2DataTableHeader[];\n let rowData: Q2DataTableRow[];\n\n beforeEach(() => {\n headerData = [\n { title: 'Name', key: 'name', ariaLabel: 'Name' },\n { title: 'Email', key: 'email' },\n ];\n rowData = [\n {\n id: 1,\n cells: {\n name: 'Thor',\n email: 'strongest.avenger@asgard.gov',\n },\n },\n {\n id: 2,\n cells: {\n name: 'Iron Man',\n email: 'moneybags@stark.com',\n },\n },\n {\n id: 3,\n cells: {\n name: 'Captain America',\n email: 'what-is-email@shield.org',\n },\n },\n ];\n });\n\n const getCSSProperty = async (page: E2EPage, selectors: string | string[], prop: string) => {\n let evalSelector;\n let nestedSelectors = [];\n if (selectors instanceof Array) {\n const [firstSelector, ...remainingSelectors] = selectors;\n evalSelector = firstSelector;\n nestedSelectors = remainingSelectors;\n } else {\n evalSelector = selectors;\n }\n\n return page.$eval(\n evalSelector,\n (el: HTMLElement, nestedSelectors: [], prop: string) => {\n if (!!nestedSelectors?.length) {\n nestedSelectors.forEach(selector => {\n el = el.shadowRoot.querySelector(selector);\n });\n }\n return getComputedStyle(el).getPropertyValue(prop).trim();\n },\n nestedSelectors,\n prop\n );\n };\n\n describe('Default Behaviors', () => {\n it('renders', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n await e2ePage.waitForChanges();\n table = await e2ePage.find('q2-data-table >>> table');\n expect(table).toBeTruthy();\n });\n\n it('renders scrollbars when the viewport is too small for the content', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n await e2ePage.evaluate(() => {\n document.body.style.padding = '0';\n document.body.style.margin = '0';\n });\n await table.setProperty('headers', [\n { title: 'Name', key: 'name' },\n { title: 'Email', key: 'email' },\n { title: 'Address', key: 'address' },\n { title: 'City', key: 'city' },\n { title: 'State', key: 'state' },\n { title: 'Zip', key: 'zip' },\n ]);\n await table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n e2ePage.setViewport({ width: 400, height: 400 });\n\n const container = await e2ePage.find('q2-data-table >>> .container');\n const innerTable = await e2ePage.find('q2-data-table >>> table');\n\n expect(parseInt((await container.getComputedStyle()).width)).toBe(400);\n expect(parseInt((await innerTable.getComputedStyle()).width)).toBeGreaterThan(400);\n });\n });\n\n describe('resizeIframe', () => {\n let resizeIframe: jest.Mock;\n\n beforeEach(async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n await table.setProperty('headers', headerData);\n await table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n resizeIframe = jest.fn();\n\n await e2ePage.exposeFunction('resizeIframe', resizeIframe);\n await e2ePage.evaluate(() => {\n (this as any).TectonElements.resizeIframe = resizeIframe;\n });\n expect(resizeIframe).not.toHaveBeenCalled();\n });\n\n it('calls resizeIframe when loading is changed', async () => {\n await table.setProperty('loading', true);\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when headers are changed', async () => {\n await table.setProperty('headers', headerData.slice(1, 1));\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when rows are changed', async () => {\n await table.setProperty('rows', rowData.slice(1, 1));\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when selectable is changed', async () => {\n await table.setProperty('selectable', true);\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when density is changed', async () => {\n await table.setProperty('density', 'comfortable');\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when density is changed', async () => {\n await table.setProperty('density', 'comfortable');\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when bordered is changed', async () => {\n await table.setProperty('bordered', true);\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n });\n\n describe('Cell Types', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData;\n });\n\n it('renders with type text', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'text',\n value: 'Thor',\n ariaLabel: 'The strongest Avenger',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <div aria-label=\"The strongest Avenger\">\n Thor\n </div>\n </slot>\n </td>\n `);\n });\n\n it('renders with type number', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'number',\n value: 8675309,\n ariaLabel: 'A big number',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <div aria-label=\"A big number\">\n 8675309\n </div>\n </slot>\n </td>\n `);\n });\n\n it('renders with type icon', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'icon',\n value: 'test-value',\n ariaLabel: 'My aria label',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-icon type=\"test-value\" label=\"My aria label\"></q2-icon>\n </slot>\n </td>\n `);\n });\n\n it('renders with type code', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'code',\n value: 'q2-input',\n ariaLabel: 'Q2 Input',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <code aria-label=\"Q2 Input\">q2-input</code>\n </slot>\n </td>\n `);\n });\n\n describe('with type boolean', () => {\n it('renders a div when false', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'boolean',\n value: false,\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <div aria-label=\"tecton.element.dataTable.booleanFalse\"></div>\n </slot>\n </td>\n `);\n });\n\n it('renders a div when value is a string', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'boolean',\n value: 'Yes',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-icon label=\"tecton.element.dataTable.booleanTrue\" type=\"checkmark\"></q2-icon>\n </slot>\n </td>\n `);\n });\n\n it('renders a div when value is a number', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'boolean',\n value: 1,\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-icon label=\"tecton.element.dataTable.booleanTrue\" type=\"checkmark\"></q2-icon>\n </slot>\n </td>\n `);\n });\n\n it('renders an icon when true', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'boolean',\n value: true,\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-icon label=\"tecton.element.dataTable.booleanTrue\" type=\"checkmark\"></q2-icon>\n </slot>\n </td>\n `);\n });\n });\n\n it('renders with type badge', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'badge',\n value: 8675309,\n badgeStatus: 'success',\n ariaLabel: 'A big number',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-badge size=\"large\" value=\"8675309\" status=\"success\" aria-label=\"A big number\"></q2-badge>\n </slot>\n </td>\n `);\n });\n });\n\n describe('Props', () => {\n describe('density', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n });\n\n it('renders with default normal density when not provided (default)', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], '--comp-cell-padding')).toBe(\n '15px'\n );\n });\n\n it('renders with compact density', async () => {\n table.setProperty('density', 'compact');\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], '--comp-cell-padding')).toBe(\n '5px'\n );\n });\n\n it('renders with comfortable density', async () => {\n table.setProperty('density', 'comfortable');\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], '--comp-cell-padding')).toBe(\n '25px'\n );\n });\n });\n\n describe('bordered', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n });\n beforeEach(async () => {\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n });\n\n it('renders with no border when false (default)', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'td'], 'border-width')).toBe('0px');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'td'], 'border-style')).toBe('none');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'td'], 'border-color')).toBe('rgb(0, 0, 0)');\n });\n\n it('renders with border when true', async () => {\n table.setProperty('bordered', true);\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr'], 'border-width')).toBe(\n '0px 0px 1px'\n );\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr'], 'border-style')).toBe('solid');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tr'], 'border-color')).toBe(\n 'rgb(153, 153, 153)'\n );\n });\n });\n\n describe('shadowed', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n });\n it('renders with no shadow when false (default)', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], 'box-shadow')).toBe('none');\n });\n\n it('renders with shadow when true', async () => {\n table.setProperty('shadowed', true);\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], 'box-shadow')).toBe(\n 'rgba(0, 0, 0, 0.3) 0px 2px 4px 0px'\n );\n });\n });\n\n describe('clickable', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData.map(header => ({ ...header, sortable: header.key === 'name' }));\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n });\n\n it('renders with no clickable column when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length);\n const clickCol = specPage.root.shadowRoot.querySelector('col.click-column');\n const clickHeader = specPage.root.shadowRoot.querySelector('thead th#click');\n const clickableRow = specPage.root.shadowRoot.querySelector('tr.clickable');\n\n expect(clickCol).toBeNull();\n expect(clickHeader).toBeNull();\n expect(clickableRow).toBeNull();\n expect(specPage.root.shadowRoot.querySelector('tbody tr')).not.toHaveAttribute('tabindex');\n });\n\n it('renders with clickable columns when provided', async () => {\n specPage.root.clickable = true;\n await specPage.waitForChanges();\n const clickCol = specPage.root.shadowRoot.querySelector('col.click-column');\n const clickHeader = specPage.root.shadowRoot.querySelector('thead th#click');\n const clickableRow = specPage.root.shadowRoot.querySelector('tr.clickable');\n const clickableColumn = specPage.root.shadowRoot.querySelector('tr.clickable td.click-column');\n\n expect(clickCol).toBeTruthy();\n expect(clickHeader).toBeTruthy();\n expect(clickHeader).not.toHaveClass('sr');\n expect(clickableRow).toBeTruthy();\n expect(clickableRow).toEqualAttribute('tabindex', '-1');\n expect(clickableColumn).not.toHaveClass('sr');\n });\n\n describe('when hide-clickable', () => {\n it('renders with a hidden clickable column when provided', async () => {\n specPage.root.clickable = true;\n specPage.root.hideClickable = true;\n await specPage.waitForChanges();\n const clickCol = specPage.root.shadowRoot.querySelector('col.click-column');\n const clickHeader = specPage.root.shadowRoot.querySelector('thead th#click');\n const clickableRow = specPage.root.shadowRoot.querySelector('tr.clickable');\n const clickableColumn = specPage.root.shadowRoot.querySelector('tr.clickable td.click-column');\n\n expect(clickCol).toBeTruthy();\n expect(clickHeader).toBeTruthy();\n expect(clickHeader).toHaveClass('sr');\n expect(clickableRow).toBeTruthy();\n expect(clickableColumn).toHaveClass('sr');\n });\n });\n });\n\n describe('loading', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData.map(header => ({ ...header, sortable: header.key === 'name' }));\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n });\n\n it('renders all rows when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelectorAll('tbody tr')).toHaveLength(rowData.length);\n expect(specPage.root.shadowRoot.querySelector('tbody tr.loading-row')).toBeNull();\n });\n\n it('renders with loading state when provided', async () => {\n specPage.root.loading = true;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelectorAll('tbody tr')).toHaveLength(1);\n expect(specPage.root.shadowRoot.querySelector('tbody tr.loading-row')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelector('tbody tr.loading-row')).toEqualHtml(`\n <tr class=\"loading-row\">\n <td colspan=\"2\">\n <q2-loading inline></q2-loading>\n </td>\n </tr>\n `);\n });\n\n describe('when sortable', () => {\n it('does not disable controls in the header when not provided (default)', async () => {\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n expect(\n specPage.root.shadowRoot.querySelector('[test-id=select-all-rows-control]')\n ).not.toHaveAttribute('disabled');\n expect(specPage.root.shadowRoot.querySelector('[test-id=sort-control]')).not.toHaveAttribute(\n 'disabled'\n );\n });\n\n it('disables controls in the header when provided', async () => {\n specPage.root.loading = true;\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('[test-id=select-all-rows-control]')).toHaveAttribute(\n 'disabled'\n );\n expect(specPage.root.shadowRoot.querySelector('[test-id=sort-control]')).toHaveAttribute(\n 'disabled'\n );\n });\n });\n });\n\n describe('caption', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n });\n\n it('renders with no caption when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('caption')).toBeFalsy();\n });\n\n it('renders with caption when provided', async () => {\n specPage.root.caption = 'Test Caption';\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('caption')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelector('caption')).toEqualHtml(`\n <caption>Test Caption</caption>\n `);\n });\n });\n\n describe('hideCaption', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table caption=\"Test Caption\"></q2-data-table>',\n });\n });\n\n it('renders caption without sr class when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('caption')).not.toHaveClass('sr');\n expect(specPage.root.shadowRoot.querySelector('caption')).toEqualHtml(`\n <caption>Test Caption</caption>\n `);\n });\n\n it('renders caption caption with sr class when provided', async () => {\n specPage.root.hideCaption = true;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('caption')).toHaveClass('sr');\n expect(specPage.root.shadowRoot.querySelector('caption')).toEqualHtml(`\n <caption class=\"sr\">Test Caption</caption>\n `);\n });\n });\n\n describe('selectable', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n });\n\n it('renders with no select column when false (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('.select-column')).toBeFalsy();\n });\n\n it('renders with select column when true', async () => {\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('col.select-column')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('td.select-column')).toHaveLength(rowData.length);\n expect(specPage.root.shadowRoot.querySelectorAll('q2-checkbox')).toHaveLength(rowData.length + 1);\n });\n\n it('renders rows with proper markup when no options are selected', async () => {\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n const firstRow = specPage.root.shadowRoot.querySelector('tbody tr#row-1');\n const firstRowCheckbox = specPage.root.shadowRoot.querySelector('tbody tr#row-1 q2-checkbox');\n expect(firstRow).not.toHaveClass('selected');\n expect(firstRowCheckbox).not.toHaveAttribute('checked');\n });\n\n it('renders rows with proper markup when options are selected', async () => {\n specPage.root.selectable = true;\n rowData = rowData.map(row => {\n if (row.id === 1) {\n row.selected = true;\n }\n return row;\n });\n specPage.root.rows = rowData;\n\n await specPage.waitForChanges();\n const firstRow = specPage.root.shadowRoot.querySelector('tbody tr#row-1');\n const firstRowCheckbox = specPage.root.shadowRoot.querySelector('tbody tr#row-1 q2-checkbox');\n expect(firstRow).toHaveClass('selected');\n expect(firstRowCheckbox).toHaveAttribute('checked');\n });\n });\n\n describe('selectMode', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n });\n\n it('renders with multiple-select markup when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('.select-column')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('q2-checkbox')).toHaveLength(rowData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col class=\"select-column\"></col>\n <col></col>\n <col></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th>\n <q2-checkbox\n hide-label\n label=\"tecton.element.dataTable.selectAllRows\"\n test-id=\"select-all-rows-control\"\n ></q2-checkbox>\n </th>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n </tr>\n </thead>\n `);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\">\n <td class=\"select-column\">\n <q2-checkbox hide-label label=\"tecton.element.dataTable.selectRow\" test-id=\"select-row-control\"></q2-checkbox>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n\n it('renders with single-select markup when provided', async () => {\n specPage.root.selectMode = 'single';\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('.select-column')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('q2-checkbox')).toHaveLength(rowData.length);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col class=\"select-column\"></col>\n <col></col>\n <col></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th></th>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n </tr>\n </thead>\n `);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\">\n <td class=\"select-column\">\n <q2-checkbox hide-label label=\"tecton.element.dataTable.selectRow\" test-id=\"select-row-control\"></q2-checkbox>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n });\n\n describe('headers', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n });\n\n it('renders with no headers when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeFalsy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(0);\n expect(specPage.root.shadowRoot.querySelector('thead')).toBeFalsy();\n expect(specPage.root.shadowRoot.querySelectorAll('th')).toHaveLength(0);\n });\n\n it('renders with headers when provided', async () => {\n specPage.root.headers = headerData;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelectorAll('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length);\n expect(specPage.root.shadowRoot.querySelectorAll('thead')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('th')).toHaveLength(headerData.length);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col></col>\n <col></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n </tr>\n </thead>\n `);\n });\n });\n\n describe('rows', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n });\n\n it('renders with no rows when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('tbody')).toBeFalsy();\n expect(specPage.root.shadowRoot.querySelectorAll('tr')).toHaveLength(0);\n });\n\n it('renders with rows when provided', async () => {\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelectorAll('tbody')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('tbody tr')).toHaveLength(rowData.length);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\">\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n });\n });\n\n describe('Features', () => {\n describe('line clamping', () => {\n it('does not line-clamp when not provided (default)', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n const firstCellOfAllRows = await e2ePage.findAll('q2-data-table >>> tbody tr td.clamped');\n expect(firstCellOfAllRows).toHaveLength(0);\n });\n\n it('clamps the cell to the specified value when provided', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n headerData = headerData.map(header => {\n if (header.key === 'name') {\n header.lineClamp = 2;\n }\n return header;\n });\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n const firstCellOfAllRows = await e2ePage.findAll('q2-data-table >>> tbody tr td.clamped');\n expect(firstCellOfAllRows).toHaveLength(3);\n\n const lineClampValue = await getNestedElementStyle(\n e2ePage,\n ['q2-data-table', 'tbody tr td.clamped div'],\n '-webkit-line-clamp'\n );\n expect(lineClampValue).toBe('2');\n });\n });\n });\n\n describe('Slots', () => {\n describe('dropdowns', () => {\n it('displays controls when the slot content changes', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> td.dropdown-column')).toBeNull();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = `\n <div slot=\"row-2-dropdown\">\n <h2>Dropdown</h2>\n </div>\n `;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column slot')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column slot')).toBeFalsy();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = `\n <div slot=\"row-3-dropdown\">\n <h2>Collapsible Row</h2>\n </div>\n `;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column slot')).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column slot')).toBeTruthy();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = null;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column')).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column slot')).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column')).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column slot')).toBeFalsy();\n });\n\n it('renders slots for dropdown when provided in the markup', async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: `\n <q2-data-table>\n <q2-dropdown\n slot=\"row-2-dropdown\"\n icon=\"options\"\n alignment=\"right\"\n hideLabel\n >\n <q2-dropdown-item value=\"first\">First</q2-dropdown-item>\n <q2-dropdown-item value=\"second\">Second</q2-dropdown-item>\n <q2-dropdown-item separator=\"\"></q2-dropdown-item>\n <q2-dropdown-item value=\"third\">Third</q2-dropdown-item>\n </q2-dropdown>\n </q2-data-table>\n `,\n });\n\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col></col>\n <col></col>\n <col class=\"dropdown-column\"></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n <th>\n <span class=\"sr\">\n tecton.element.dataTable.dropdown\n </span>\n </th>\n </tr>\n </thead>\n `);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\">\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n <td class=\"dropdown-column\">\n ${row.id === 2 ? '<slot name=\"row-2-dropdown\"></slot>' : ''}\n </td>\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n });\n\n describe('expandable-content', () => {\n it('displays controls when the slot content changes', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> td.expandable-row-control-column')).toBeNull();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = `\n <div slot=\"row-2-expandable-content\">\n <h2>Collapsible Row</h2>\n </div>\n `;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.expandable-row-control-column')).toBeTruthy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-2 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.expandable-row-control-column')).toBeTruthy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-3 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeFalsy();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = `\n <div slot=\"row-3-expandable-content\">\n <h2>Collapsible Row</h2>\n </div>\n `;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.expandable-row-control-column')).toBeTruthy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-2 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.expandable-row-control-column')).toBeTruthy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-3 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeTruthy();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = null;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.expandable-row-control-column')).toBeFalsy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-2 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.expandable-row-control-column')).toBeFalsy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-3 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeFalsy();\n });\n\n it('renders slots for expandable rows when provided in the markup', async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: `\n <q2-data-table>\n <div\n slot=\"row-2-expandable-content\"\n >\n <h3>Test</h3>\n <p>This will be collapsible</p>\n </div>\n </q2-data-table>\n `,\n });\n\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col></col>\n <col></col>\n <col class=\"expandable-row-control-column\"></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n <th id=\"toggle\">\n <span class=\"sr\">\n tecton.element.dataTable.toggleRow\n </span>\n </th>\n </tr>\n </thead>\n `);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\" ${row.id === 2 ? `class=\"expandable\" tabindex=\"-1\"` : ''}>\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n ${\n row.id === 2\n ? `\n <td class=\"expandable-row-control-column\">\n <q2-btn\n ariaControls=\"row-2-expandable-content\"\n ariaExpanded=\"false\"\n ariaLabel=\"tecton.element.dataTable.toggleRow\"\n test-id=\"expandable-row-control\"\n >\n <q2-icon class=\"toggle-expandable-row\" type=\"chevron-down\"></q2-icon>\n </q2-btn>\n </td>\n `\n : '<td class=\"expandable-row-control-column\"></td>'\n }\n </tr>\n ${\n row.id === 2\n ? `\n <tr aria-hidden=\"\" class=\"expandable-row\" hidden=\"\" id=\"row-2-expandable-content\">\n <td colspan=\"3\" headers=\"toggle\">\n <div class=\"expandable-content\">\n <slot name=\"row-2-expandable-content\"></slot>\n </div>\n </td>\n `\n : ''\n }\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n });\n });\n\n describe('Unit', () => {\n let dataTable: Q2DataTable;\n beforeEach(() => {\n dataTable = new Q2DataTable();\n });\n\n describe('headersHandler', () => {\n it('serializes basic data', () => {\n dataTable.headersHandler(headerData);\n const { serializedHeaders } = dataTable;\n\n expect(serializedHeaders).toEqual([\n { key: 'name', title: 'Name', ariaLabel: 'Name' },\n { key: 'email', title: 'Email' },\n ]);\n });\n\n it('serializes with auto-generated keys', () => {\n dataTable.headersHandler([{ title: 'Name' }, { title: 'Fancy Column' }]);\n const { serializedHeaders } = dataTable;\n\n expect(serializedHeaders).toEqual([\n { key: 'name', title: 'Name' },\n { key: 'fancy-column', title: 'Fancy Column' },\n ]);\n });\n\n it('serializes every property in the object', () => {\n const robustHeaderData: Q2DataTableHeader = {\n title: 'Name',\n align: 'end',\n key: 'name',\n sortable: true,\n width: '100px',\n backgroundColor: 'var(--t-primary)',\n sorted: 'ASC',\n };\n dataTable.headersHandler([robustHeaderData]);\n const { serializedHeaders } = dataTable;\n\n expect(serializedHeaders[0]).toEqual(robustHeaderData);\n });\n });\n\n describe('rowsHandler', () => {\n let firstRowData;\n beforeEach(() => {\n firstRowData = rowData[0];\n });\n\n it('serializes basic data', () => {\n dataTable.rowsHandler(rowData);\n const { serializedRows } = dataTable;\n\n expect(serializedRows).toEqual([\n {\n id: 1,\n cells: {\n name: {\n value: 'Thor',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n email: {\n value: 'strongest.avenger@asgard.gov',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n },\n selected: false,\n expanded: false,\n },\n {\n id: 2,\n cells: {\n name: {\n value: 'Iron Man',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n email: {\n value: 'moneybags@stark.com',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n },\n selected: false,\n expanded: false,\n },\n {\n id: 3,\n cells: {\n name: {\n value: 'Captain America',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n email: {\n value: 'what-is-email@shield.org',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n },\n selected: false,\n expanded: false,\n },\n ]);\n });\n\n it(\"serializes data with 'expanded' property\", () => {\n firstRowData.expanded = true;\n dataTable.rowsHandler([firstRowData]);\n expect(dataTable.serializedRows[0]).toHaveProperty('expanded', true);\n });\n\n it(\"serializes data with 'selected' property\", () => {\n firstRowData.selected = true;\n dataTable.rowsHandler([firstRowData]);\n expect(dataTable.serializedRows[0]).toHaveProperty('selected', true);\n });\n\n it(\"serializes cell data that is a string into an object of type 'text'\", () => {\n firstRowData.cells.name = 'Test';\n dataTable.rowsHandler([firstRowData]);\n expect(dataTable.serializedRows[0]).toHaveProperty('cells.name', {\n align: undefined,\n ariaLabel: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n type: 'text',\n value: 'Test',\n });\n });\n\n it('serializes cell data that is an object', () => {\n firstRowData.cells.name = {\n align: 'end',\n ariaLabel: 'My arial label',\n badgeStatus: 'success',\n badgeTheme: 'secondary',\n type: 'badge',\n value: 'Test',\n };\n dataTable.rowsHandler([firstRowData]);\n expect(dataTable.serializedRows[0]).toHaveProperty('cells.name', firstRowData.cells.name);\n });\n\n describe('when header data is provided that sets cell-specific properties', () => {\n let firstHeaderData;\n beforeEach(() => {\n firstHeaderData = {\n ...headerData[0],\n align: 'end',\n type: 'badge',\n badgeStatus: 'success',\n badgeTheme: 'secondary',\n lineClamp: 2,\n };\n dataTable.headersHandler([firstHeaderData]);\n });\n\n it('it sets cell-specific properties on the cell', () => {\n dataTable.rowsHandler([firstRowData]);\n const nameCell = dataTable.serializedRows[0].cells.name;\n expect(nameCell).toHaveProperty('align', 'end');\n expect(nameCell).toHaveProperty('type', 'badge');\n expect(nameCell).toHaveProperty('badgeStatus', 'success');\n expect(nameCell).toHaveProperty('badgeTheme', 'secondary');\n expect(nameCell).toHaveProperty('lineClamp', 2);\n });\n\n it('it does not override cell-specific properties on the cell if they are already defined', () => {\n firstRowData.cells.name = {\n value: 'Thor',\n ariaLabel: undefined,\n align: 'start',\n lineClamp: 2,\n type: 'text',\n badgeStatus: 'danger',\n badgeTheme: 'primary',\n };\n dataTable.rowsHandler([firstRowData]);\n const nameCell = dataTable.serializedRows[0].cells.name;\n expect(nameCell).toEqual(firstRowData.cells.name);\n });\n });\n });\n\n describe('getters', () => {\n describe('selectedRows', () => {\n it('returns an empty array if no rows are selected', () => {\n dataTable.rowsHandler(rowData);\n expect(dataTable.selectedRows).toEqual([]);\n });\n\n it('returns a populated array if rows are selected', () => {\n rowData[0].selected = true;\n rowData[2].selected = true;\n dataTable.rowsHandler(rowData);\n const { serializedRows } = dataTable;\n expect(dataTable.selectedRows).toEqual([serializedRows[0], serializedRows[2]]);\n });\n });\n\n describe('selectedRow', () => {\n it('returns undefined if no row is selected', () => {\n dataTable.rowsHandler(rowData);\n expect(dataTable.selectedRow).toBeUndefined();\n });\n\n it('returns the first selected row if at least one is selected', () => {\n rowData[0].selected = true;\n dataTable.rowsHandler(rowData);\n expect(dataTable.selectedRow).toEqual(dataTable.serializedRows[0]);\n });\n });\n\n describe('numberOfColumns', () => {\n it('returns 0 if there are no headers', () => {\n expect(dataTable.numberOfColumns).toEqual(0);\n });\n\n it('returns the number of columns', () => {\n dataTable.headersHandler(headerData);\n expect(dataTable.numberOfColumns).toEqual(2);\n });\n\n it('adds 1 to the number of columns if selectable is true', () => {\n expect(dataTable.numberOfColumns).toEqual(0);\n dataTable.selectable = true;\n expect(dataTable.numberOfColumns).toEqual(1);\n });\n\n it('adds 1 to the number of columns if there are any expandable rows', () => {\n expect(dataTable.numberOfColumns).toEqual(0);\n dataTable.hasExpandableRows = true;\n expect(dataTable.numberOfColumns).toEqual(1);\n });\n\n it('adds 1 to the number of columns if there are any row actions defined', () => {\n expect(dataTable.numberOfColumns).toEqual(0);\n dataTable.hasDropdowns = true;\n expect(dataTable.numberOfColumns).toEqual(1);\n });\n });\n\n describe('mappedHeaders', () => {\n it('returns an empty object if there are no headers', () => {\n expect(dataTable.mappedHeaders).toEqual({});\n });\n\n it('returns an object with the header id as the key and the header as the value', () => {\n dataTable.headersHandler(headerData);\n expect(dataTable.mappedHeaders).toEqual({\n name: headerData[0],\n email: headerData[1],\n });\n });\n });\n });\n\n describe('event handlers', () => {\n beforeEach(() => {\n dataTable.headersHandler(headerData);\n dataTable.rowsHandler(rowData);\n });\n\n describe('onSort', () => {\n let sortRows;\n beforeEach(() => {\n sortRows = jest.spyOn(dataTable, 'sortRows');\n\n expect(dataTable.serializedRows.map(row => row.id)).toEqual([1, 2, 3]);\n expect(dataTable.serializedHeaders[1]).toHaveProperty('sorted', undefined);\n });\n\n it('calls onSort and updates the serializedHeaders and serializedRows properties', () => {\n const cachedSerializedRows = dataTable.serializedRows;\n dataTable.onSort(headerData[1]);\n\n expect(dataTable.serializedRows.map(row => row.id)).toEqual([2, 1, 3]);\n expect(dataTable.serializedHeaders[1]).toHaveProperty('sorted', 'ASC');\n expect(sortRows).toHaveBeenCalledWith(cachedSerializedRows, {\n ...headerData[1],\n sorted: 'ASC',\n });\n });\n\n it('does not modify data if preventDefault is called on sort event', () => {\n dataTable.sort.emit = jest.fn(detail => {\n const sortEvent = new CustomEvent('sort', { detail });\n sortEvent.preventDefault();\n return sortEvent;\n });\n\n dataTable.onSort(headerData[1]);\n\n expect(dataTable.sort.emit).toHaveBeenCalledWith({\n direction: 'ASC',\n header: dataTable.serializedHeaders[1],\n });\n expect(dataTable.serializedRows.map(row => row.id)).toEqual([1, 2, 3]);\n expect(dataTable.serializedHeaders[1]).toHaveProperty('sorted', undefined);\n expect(sortRows).not.toHaveBeenCalled();\n });\n });\n\n describe('onSelectAllRows', () => {\n beforeEach(() => {\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('selects all rows if they are not all selected', () => {\n dataTable.onSelectAllRows(new CustomEvent('click', { detail: { checked: true } }));\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(true);\n expect(dataTable.allRowsSelected).toBe(true);\n });\n\n it('deselects all rows if they are all selected', () => {\n dataTable.serializedRows.forEach(row => (row.selected = true));\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(true);\n dataTable.onSelectAllRows(new CustomEvent('click', { detail: { checked: false } }));\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('does not modify data if preventDefault is called on select event', () => {\n dataTable.select.emit = jest.fn(detail => {\n const sortEvent = new CustomEvent('sort', { detail });\n sortEvent.preventDefault();\n return sortEvent;\n });\n\n dataTable.onSelectAllRows(new CustomEvent('click', { detail: { checked: true } }));\n\n expect(dataTable.select.emit).toHaveBeenCalledWith({\n allSelected: true,\n row: undefined,\n rows: dataTable.serializedRows.map(row => ({ ...row, selected: true })),\n });\n\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n });\n\n describe('onSelectRow', () => {\n beforeEach(() => {\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('selects row', () => {\n dataTable.onSelectRow(\n new CustomEvent('click', { detail: { checked: true } }),\n dataTable.serializedRows[1]\n );\n expect(dataTable.serializedRows[1].selected).toBe(true);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('deselects row', () => {\n dataTable.rowsHandler(rowData.map((row, index) => ({ ...row, selected: index === 1 })));\n expect(dataTable.serializedRows[1].selected).toBe(true);\n dataTable.onSelectRow(\n new CustomEvent('click', { detail: { checked: false } }),\n dataTable.serializedRows[1]\n );\n expect(dataTable.serializedRows[1].selected).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('does not modify data if preventDefault is called on select event', () => {\n dataTable.select.emit = jest.fn(detail => {\n const selectAllEvent = new CustomEvent('select', { detail });\n selectAllEvent.preventDefault();\n return selectAllEvent;\n });\n\n expect(dataTable.serializedRows[1].selected).toBe(false);\n dataTable.onSelectRow(\n new CustomEvent('click', { detail: { checked: true } }),\n dataTable.serializedRows[1]\n );\n const selectedRow = { ...dataTable.serializedRows[1], selected: true };\n expect(dataTable.select.emit).toHaveBeenCalledWith({\n row: selectedRow,\n rows: [selectedRow],\n allSelected: false,\n });\n expect(dataTable.serializedRows[1].selected).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('updates allRowsSelected to true when all rows have been marked as selected', () => {\n dataTable.rowsHandler(rowData.map((row, index) => ({ ...row, selected: index !== 1 })));\n expect(dataTable.serializedRows[1].selected).toBe(false);\n dataTable.onSelectRow(\n new CustomEvent('click', { detail: { checked: true } }),\n dataTable.serializedRows[1]\n );\n expect(dataTable.serializedRows[1].selected).toBe(true);\n expect(dataTable.allRowsSelected).toBe(true);\n });\n });\n\n describe('onClickTableRow', () => {\n beforeEach(() => {\n dataTable.onClickRow = jest.fn();\n dataTable.onToggleRow = jest.fn();\n });\n\n it('calls onClickRow when clickable is true', () => {\n dataTable.clickable = true;\n\n const clickEvent = new MouseEvent('click');\n dataTable.onClickTableRow(clickEvent, dataTable.serializedRows[1]);\n expect(dataTable.onClickRow).toHaveBeenCalledWith(clickEvent, dataTable.serializedRows[1]);\n expect(dataTable.onToggleRow).not.toHaveBeenCalled();\n });\n\n it('calls onToggleRow when hasExpandableRows is true', () => {\n dataTable.hasExpandableRows = true;\n\n const clickEvent = new MouseEvent('click');\n dataTable.onClickTableRow(clickEvent, dataTable.serializedRows[1]);\n expect(dataTable.onClickRow).not.toHaveBeenCalled();\n expect(dataTable.onToggleRow).toHaveBeenCalledWith(clickEvent, dataTable.serializedRows[1]);\n });\n\n it('does not call anything when both clickable and hasExpandableRows is false', () => {\n const clickEvent = new MouseEvent('click');\n dataTable.onClickTableRow(clickEvent, dataTable.serializedRows[1]);\n expect(dataTable.onClickRow).not.toHaveBeenCalled();\n expect(dataTable.onToggleRow).not.toHaveBeenCalled();\n });\n });\n\n describe('onClickRow', () => {\n it('emits a click event with row data', () => {\n dataTable.click.emit = jest.fn();\n\n dataTable.onClickRow(new MouseEvent('click'), dataTable.serializedRows[1]);\n expect(dataTable.click.emit).toHaveBeenCalledWith({\n row: dataTable.serializedRows[1],\n });\n });\n });\n\n describe('onToggleRow', () => {\n beforeEach(() => {\n expect(dataTable.serializedRows.every(row => row.expanded)).toBe(false);\n });\n\n it('expands row', () => {\n dataTable.onToggleRow(new MouseEvent('click'), dataTable.serializedRows[1]);\n expect(dataTable.serializedRows[1].expanded).toBe(true);\n });\n\n it('closes row', () => {\n dataTable.rowsHandler(rowData.map((row, index) => ({ ...row, expanded: index === 1 })));\n expect(dataTable.serializedRows[1].expanded).toBe(true);\n dataTable.onToggleRow(new MouseEvent('click'), dataTable.serializedRows[1]);\n expect(dataTable.serializedRows[1].expanded).toBe(false);\n });\n\n it('does not modify data if preventDefault is called on toggle event', () => {\n dataTable.toggle.emit = jest.fn(detail => {\n const toggleEvent = new CustomEvent('toggle', { detail });\n toggleEvent.preventDefault();\n return toggleEvent;\n });\n\n expect(dataTable.serializedRows[1].expanded).toBe(false);\n dataTable.onToggleRow(new MouseEvent('click'), dataTable.serializedRows[1]);\n const selectedRow = { ...dataTable.serializedRows[1], expanded: true };\n expect(dataTable.toggle.emit).toHaveBeenCalledWith({\n row: selectedRow,\n });\n expect(dataTable.serializedRows[1].expanded).toBe(false);\n });\n });\n });\n\n describe('helpers', () => {\n describe('sortRows', () => {\n beforeEach(() => {\n dataTable.headersHandler(headerData);\n dataTable.rowsHandler(rowData);\n });\n\n it('returns the rows in ASC order of the provided header by default', () => {\n const sortedResult = dataTable\n .sortRows(dataTable.serializedRows, dataTable.serializedHeaders[1])\n .map(row => row.id);\n expect(sortedResult).toEqual([2, 1, 3]);\n });\n\n it('returns the rows in DESC order of the provided header', () => {\n const sortedResult = dataTable\n .sortRows(dataTable.serializedRows, { ...dataTable.serializedHeaders[1], sorted: 'DESC' })\n .map(row => row.id);\n expect(sortedResult).toEqual([3, 1, 2]);\n });\n });\n });\n });\n\n describe('Events', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `\n <q2-data-table>\n <div\n slot=\"row-2-expandable-content\"\n >\n <h3>Test</h3>\n <p>This will be collapsible</p>\n </div>\n </q2-data-table>\n `,\n });\n table = await e2ePage.find('q2-data-table');\n });\n\n describe('click', () => {\n let clickControl: E2EElement;\n let clickRow: E2EElement;\n beforeEach(async () => {\n table.setProperty('clickable', true);\n table.setProperty('hide-clickable', false);\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n clickControl = await e2ePage.find('q2-data-table >>> tr#row-2 [test-id=clickable-row-control]');\n clickRow = await e2ePage.find('q2-data-table >>> tr#row-2.clickable');\n });\n\n it('emits click event when button is clicked', async () => {\n const clickSpy = await table.spyOnEvent('click');\n clickControl.triggerEvent('click');\n await e2ePage.waitForChanges();\n const clickedRow = {\n id: 2,\n expanded: false,\n selected: false,\n cells: {\n email: {\n type: 'text',\n value: 'moneybags@stark.com',\n },\n name: {\n type: 'text',\n value: 'Iron Man',\n },\n },\n };\n\n expect(clickSpy).toHaveReceivedEventTimes(1);\n expect(clickSpy).toHaveReceivedEventDetail({\n row: clickedRow,\n });\n });\n\n it('emits click event when row is clicked', async () => {\n const clickSpy = await table.spyOnEvent('click');\n clickRow.click();\n await e2ePage.waitForChanges();\n const clickedRow = {\n id: 2,\n expanded: false,\n selected: false,\n cells: {\n email: {\n type: 'text',\n value: 'moneybags@stark.com',\n },\n name: {\n type: 'text',\n value: 'Iron Man',\n },\n },\n };\n\n expect(clickSpy).toHaveReceivedEventTimes(1);\n expect(clickSpy).toHaveReceivedEventDetail({\n row: clickedRow,\n });\n });\n });\n\n describe('select', () => {\n let selectControl: E2EElement;\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n selectControl = await e2ePage.find('q2-data-table >>> tr#row-2 [test-id=select-row-control]');\n });\n\n it('emits select event and mutates selected state', async () => {\n const selectSpy = await table.spyOnEvent('select');\n expect(selectControl).not.toHaveAttribute('checked');\n selectControl.click();\n await e2ePage.waitForChanges();\n const selectedRow = {\n id: 2,\n expanded: false,\n selected: true,\n cells: {\n email: {\n type: 'text',\n value: 'moneybags@stark.com',\n },\n name: {\n type: 'text',\n value: 'Iron Man',\n },\n },\n };\n\n expect(selectSpy).toHaveReceivedEventDetail({\n row: selectedRow,\n rows: [selectedRow],\n allSelected: false,\n });\n\n expect(selectControl).toEqualAttribute('checked', '');\n });\n\n it('does not mutate data if event is cancelled', async () => {\n e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.addEventListener('select', event => {\n event.preventDefault();\n });\n });\n expect(selectControl).not.toHaveAttribute('checked');\n selectControl.click();\n await e2ePage.waitForChanges();\n expect(selectControl).not.toHaveAttribute('checked');\n });\n\n it('does not expand the collapsible row when clicking on the select control', async () => {\n const expandableRow = await e2ePage.find('q2-data-table >>> tr#row-2.expandable');\n expect(expandableRow).not.toHaveClass('expanded');\n selectControl.click();\n await e2ePage.waitForChanges();\n expect(expandableRow).not.toHaveClass('expanded');\n });\n });\n\n describe('toggle', () => {\n let toggleControl: E2EElement;\n let expandableRow: E2EElement;\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n toggleControl = await e2ePage.find('q2-data-table >>> tr#row-2 [test-id=expandable-row-control]');\n expandableRow = await e2ePage.find('q2-data-table >>> tr#row-2.expandable');\n });\n\n it('emits toggle event and mutates expanded state', async () => {\n const toggleSpy = await table.spyOnEvent('toggle');\n expect(await toggleControl.getProperty('ariaExpanded')).toEqual('false');\n expect(expandableRow).not.toHaveClass('expanded');\n toggleControl.click();\n await e2ePage.waitForChanges();\n const toggledRow = {\n id: 2,\n expanded: true,\n selected: false,\n cells: {\n email: {\n type: 'text',\n value: 'moneybags@stark.com',\n },\n name: {\n type: 'text',\n value: 'Iron Man',\n },\n },\n };\n\n expect(toggleSpy).toHaveReceivedEventDetail({\n row: toggledRow,\n });\n\n expect(await toggleControl.getProperty('ariaExpanded')).toEqual('true');\n expect(expandableRow).toHaveClass('expanded');\n });\n\n it('does not mutate data if event is cancelled', async () => {\n e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.addEventListener('toggle', event => {\n event.preventDefault();\n });\n });\n expect(await toggleControl.getProperty('ariaExpanded')).toEqual('false');\n expect(expandableRow).not.toHaveClass('expanded');\n toggleControl.click();\n await e2ePage.waitForChanges();\n expect(await toggleControl.getProperty('ariaExpanded')).toEqual('false');\n expect(expandableRow).not.toHaveClass('expanded');\n });\n });\n\n describe('sort', () => {\n let emailSortHeader: E2EElement;\n let emailSortControl: E2EElement;\n let emailHeaderIcon: E2EElement;\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: true }))\n );\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n emailSortHeader = await e2ePage.find('q2-data-table >>> th#header-email');\n emailSortControl = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sort-control]');\n });\n\n it('emits sort event and mutates rows', async () => {\n const sortSpy = await table.spyOnEvent('sort');\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailSortHeader).not.toHaveClass('sorted');\n expect(emailHeaderIcon).toEqualAttribute('type', 'sort');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.clickToSort');\n\n emailSortControl.click();\n await e2ePage.waitForChanges();\n\n expect(sortSpy).toHaveReceivedEventDetail({\n header: {\n key: 'email',\n title: 'Email',\n sortable: true,\n },\n direction: 'ASC',\n });\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailSortHeader).toHaveClass('sorted');\n expect(emailHeaderIcon).toEqualAttribute('type', 'arrow-down');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.sortedAscending');\n\n emailSortControl.click();\n await e2ePage.waitForChanges();\n\n expect(sortSpy).toHaveReceivedEventDetail({\n header: {\n key: 'email',\n title: 'Email',\n sortable: true,\n sorted: 'ASC',\n },\n direction: 'DESC',\n });\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailHeaderIcon).toEqualAttribute('type', 'arrow-down');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.sortedDescending');\n });\n\n it('does not mutate data if event is cancelled', async () => {\n e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.addEventListener('toggle', event => {\n event.preventDefault();\n });\n });\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailSortHeader).not.toHaveClass('sorted');\n expect(emailHeaderIcon).toEqualAttribute('type', 'sort');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.clickToSort');\n\n emailSortControl.click();\n await e2ePage.waitForChanges();\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailSortHeader).toHaveClass('sorted');\n expect(emailHeaderIcon).toEqualAttribute('type', 'arrow-down');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.sortedAscending');\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"q2-data-table-test.e2e.js","sourceRoot":"","sources":["../../../test/elements/q2-data-table-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage, SpecPage, newSpecPage } from '@stencil/core/testing';\nimport { getNestedElementStyle, setup } from '../helpers';\nimport { Q2DataTable, Q2DataTableHeader, Q2DataTableRow } from '../../src/components/q2-data-table';\n\ndescribe('q2-data-table', () => {\n let e2ePage: E2EPage;\n let specPage: SpecPage;\n let table: E2EElement;\n let headerData: Q2DataTableHeader[];\n let rowData: Q2DataTableRow[];\n\n beforeEach(() => {\n headerData = [\n { title: 'Name', key: 'name', ariaLabel: 'Name' },\n { title: 'Email', key: 'email' },\n ];\n rowData = [\n {\n id: 1,\n cells: {\n name: 'Thor',\n email: 'strongest.avenger@asgard.gov',\n },\n },\n {\n id: 2,\n cells: {\n name: 'Iron Man',\n email: 'moneybags@stark.com',\n },\n },\n {\n id: 3,\n cells: {\n name: 'Captain America',\n email: 'what-is-email@shield.org',\n },\n },\n ];\n });\n\n const getCSSProperty = async (page: E2EPage, selectors: string | string[], prop: string) => {\n let evalSelector;\n let nestedSelectors = [];\n if (selectors instanceof Array) {\n const [firstSelector, ...remainingSelectors] = selectors;\n evalSelector = firstSelector;\n nestedSelectors = remainingSelectors;\n } else {\n evalSelector = selectors;\n }\n\n return page.$eval(\n evalSelector,\n (el: HTMLElement, nestedSelectors: [], prop: string) => {\n if (!!nestedSelectors?.length) {\n nestedSelectors.forEach(selector => {\n el = el.shadowRoot.querySelector(selector);\n });\n }\n return getComputedStyle(el).getPropertyValue(prop).trim();\n },\n nestedSelectors,\n prop\n );\n };\n\n describe('Default Behaviors', () => {\n it('renders', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n await e2ePage.waitForChanges();\n table = await e2ePage.find('q2-data-table >>> table');\n expect(table).toBeTruthy();\n });\n\n it('renders scrollbars when the viewport is too small for the content', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n await e2ePage.evaluate(() => {\n document.body.style.padding = '0';\n document.body.style.margin = '0';\n });\n await table.setProperty('headers', [\n { title: 'Name', key: 'name' },\n { title: 'Email', key: 'email' },\n { title: 'Address', key: 'address' },\n { title: 'City', key: 'city' },\n { title: 'State', key: 'state' },\n { title: 'Zip', key: 'zip' },\n ]);\n await table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n e2ePage.setViewport({ width: 400, height: 400 });\n\n const container = await e2ePage.find('q2-data-table >>> .container');\n const innerTable = await e2ePage.find('q2-data-table >>> table');\n\n expect(parseInt((await container.getComputedStyle()).width)).toBe(400);\n expect(parseInt((await innerTable.getComputedStyle()).width)).toBeGreaterThan(400);\n });\n });\n\n describe('resizeIframe', () => {\n let resizeIframe: jest.Mock;\n\n beforeEach(async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n await table.setProperty('headers', headerData);\n await table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n resizeIframe = jest.fn();\n\n await e2ePage.exposeFunction('resizeIframe', resizeIframe);\n await e2ePage.evaluate(() => {\n (this as any).TectonElements.resizeIframe = resizeIframe;\n });\n expect(resizeIframe).not.toHaveBeenCalled();\n });\n\n it('calls resizeIframe when loading is changed', async () => {\n await table.setProperty('loading', true);\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when headers are changed', async () => {\n await table.setProperty('headers', headerData.slice(1, 1));\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when rows are changed', async () => {\n await table.setProperty('rows', rowData.slice(1, 1));\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when selectable is changed', async () => {\n await table.setProperty('selectable', true);\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when density is changed', async () => {\n await table.setProperty('density', 'comfortable');\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when density is changed', async () => {\n await table.setProperty('density', 'comfortable');\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n\n it('calls resizeIframe when bordered is changed', async () => {\n await table.setProperty('bordered', true);\n await e2ePage.waitForChanges();\n expect(resizeIframe).toHaveBeenCalled();\n });\n });\n\n describe('Cell Types', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData;\n });\n\n it('renders with type text', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'text',\n value: 'Thor',\n ariaLabel: 'The strongest Avenger',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <div aria-label=\"The strongest Avenger\">\n Thor\n </div>\n </slot>\n </td>\n `);\n });\n\n it('renders with type number', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'number',\n value: 8675309,\n ariaLabel: 'A big number',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <div aria-label=\"A big number\">\n 8675309\n </div>\n </slot>\n </td>\n `);\n });\n\n it('renders with type icon', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'icon',\n value: 'test-value',\n ariaLabel: 'My aria label',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-icon type=\"test-value\" label=\"My aria label\"></q2-icon>\n </slot>\n </td>\n `);\n });\n\n it('renders with type code', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'code',\n value: 'q2-input',\n ariaLabel: 'Q2 Input',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <code aria-label=\"Q2 Input\">q2-input</code>\n </slot>\n </td>\n `);\n });\n\n describe('with type boolean', () => {\n it('renders a div when false', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'boolean',\n value: false,\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <div aria-label=\"tecton.element.dataTable.booleanFalse\"></div>\n </slot>\n </td>\n `);\n });\n\n it('renders a div when value is a string', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'boolean',\n value: 'Yes',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-icon label=\"tecton.element.dataTable.booleanTrue\" type=\"checkmark\"></q2-icon>\n </slot>\n </td>\n `);\n });\n\n it('renders a div when value is a number', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'boolean',\n value: 1,\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-icon label=\"tecton.element.dataTable.booleanTrue\" type=\"checkmark\"></q2-icon>\n </slot>\n </td>\n `);\n });\n\n it('renders an icon when true', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'boolean',\n value: true,\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-icon label=\"tecton.element.dataTable.booleanTrue\" type=\"checkmark\"></q2-icon>\n </slot>\n </td>\n `);\n });\n });\n\n it('renders with type badge', async () => {\n specPage.root.rows = [\n {\n id: 1,\n cells: {\n name: {\n type: 'badge',\n value: 8675309,\n badgeStatus: 'success',\n ariaLabel: 'A big number',\n },\n email: 'strongest.avenger@asgard.gov',\n },\n },\n ];\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('tr#row-1 td')).toEqualHtml(`\n <td>\n <slot name=\"row-1-cell-name\">\n <q2-badge size=\"large\" value=\"8675309\" status=\"success\" aria-label=\"A big number\"></q2-badge>\n </slot>\n </td>\n `);\n });\n });\n\n describe('Props', () => {\n describe('density', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n });\n\n it('renders with default normal density when not provided (default)', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], '--comp-cell-padding')).toBe(\n '15px'\n );\n });\n\n it('renders with compact density', async () => {\n table.setProperty('density', 'compact');\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], '--comp-cell-padding')).toBe(\n '5px'\n );\n });\n\n it('renders with comfortable density', async () => {\n table.setProperty('density', 'comfortable');\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], '--comp-cell-padding')).toBe(\n '25px'\n );\n });\n });\n\n describe('bordered', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n });\n beforeEach(async () => {\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n });\n\n it('renders with no border when false (default)', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'td'], 'border-width')).toBe('0px');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'td'], 'border-style')).toBe('none');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'td'], 'border-color')).toBe('rgb(0, 0, 0)');\n });\n\n it('renders with border when true', async () => {\n table.setProperty('bordered', true);\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr'], 'border-width')).toBe(\n '0px 0px 1px'\n );\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr'], 'border-style')).toBe('solid');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tr'], 'border-color')).toBe(\n 'rgb(153, 153, 153)'\n );\n });\n });\n\n describe('shadowed', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n });\n it('renders with no shadow when false (default)', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], 'box-shadow')).toBe('none');\n });\n\n it('renders with shadow when true', async () => {\n table.setProperty('shadowed', true);\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', '.container'], 'box-shadow')).toBe(\n 'rgba(0, 0, 0, 0.3) 0px 2px 4px 0px'\n );\n });\n });\n\n describe('clickable', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData.map(header => ({ ...header, sortable: header.key === 'name' }));\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n });\n\n it('renders with no clickable column when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length);\n const clickCol = specPage.root.shadowRoot.querySelector('col.click-column');\n const clickHeader = specPage.root.shadowRoot.querySelector('thead th#click');\n const clickableRow = specPage.root.shadowRoot.querySelector('tr.clickable');\n\n expect(clickCol).toBeNull();\n expect(clickHeader).toBeNull();\n expect(clickableRow).toBeNull();\n expect(specPage.root.shadowRoot.querySelector('tbody tr')).not.toHaveAttribute('tabindex');\n });\n\n it('renders with clickable columns when provided', async () => {\n specPage.root.clickable = true;\n await specPage.waitForChanges();\n const clickCol = specPage.root.shadowRoot.querySelector('col.click-column');\n const clickHeader = specPage.root.shadowRoot.querySelector('thead th#click');\n const clickableRow = specPage.root.shadowRoot.querySelector('tr.clickable');\n const clickableColumn = specPage.root.shadowRoot.querySelector('tr.clickable td.click-column');\n\n expect(clickCol).toBeTruthy();\n expect(clickHeader).toBeTruthy();\n expect(clickHeader).not.toHaveClass('sr');\n expect(clickableRow).toBeTruthy();\n expect(clickableRow).toEqualAttribute('tabindex', '-1');\n expect(clickableColumn).not.toHaveClass('sr');\n });\n\n describe('when hide-clickable', () => {\n it('renders with a hidden clickable column when provided', async () => {\n specPage.root.clickable = true;\n specPage.root.hideClickable = true;\n await specPage.waitForChanges();\n const clickCol = specPage.root.shadowRoot.querySelector('col.click-column');\n const clickHeader = specPage.root.shadowRoot.querySelector('thead th#click');\n const clickableRow = specPage.root.shadowRoot.querySelector('tr.clickable');\n const clickableColumn = specPage.root.shadowRoot.querySelector('tr.clickable td.click-column');\n\n expect(clickCol).toBeTruthy();\n expect(clickHeader).toBeTruthy();\n expect(clickHeader).toHaveClass('sr');\n expect(clickableRow).toBeTruthy();\n expect(clickableColumn).toHaveClass('sr');\n });\n });\n });\n\n describe('loading', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData.map(header => ({ ...header, sortable: header.key === 'name' }));\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n });\n\n it('renders all rows when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelectorAll('tbody tr')).toHaveLength(rowData.length);\n expect(specPage.root.shadowRoot.querySelector('tbody tr.loading-row')).toBeNull();\n });\n\n it('renders with loading state when provided', async () => {\n specPage.root.loading = true;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelectorAll('tbody tr')).toHaveLength(1);\n expect(specPage.root.shadowRoot.querySelector('tbody tr.loading-row')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelector('tbody tr.loading-row')).toEqualHtml(`\n <tr class=\"loading-row\">\n <td colspan=\"2\">\n <q2-loading inline></q2-loading>\n </td>\n </tr>\n `);\n });\n\n describe('when sortable', () => {\n it('does not disable controls in the header when not provided (default)', async () => {\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n expect(\n specPage.root.shadowRoot.querySelector('[test-id=select-all-rows-control]')\n ).not.toHaveAttribute('disabled');\n expect(specPage.root.shadowRoot.querySelector('[test-id=sort-control]')).not.toHaveAttribute(\n 'disabled'\n );\n });\n\n it('disables controls in the header when provided', async () => {\n specPage.root.loading = true;\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('[test-id=select-all-rows-control]')).toHaveAttribute(\n 'disabled'\n );\n expect(specPage.root.shadowRoot.querySelector('[test-id=sort-control]')).toHaveAttribute(\n 'disabled'\n );\n });\n });\n });\n\n describe('caption', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n });\n\n it('renders with no caption when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('caption')).toBeFalsy();\n });\n\n it('renders with caption when provided', async () => {\n specPage.root.caption = 'Test Caption';\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('caption')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelector('caption')).toEqualHtml(`\n <caption>Test Caption</caption>\n `);\n });\n });\n\n describe('hideCaption', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table caption=\"Test Caption\"></q2-data-table>',\n });\n });\n\n it('renders caption without sr class when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('caption')).not.toHaveClass('sr');\n expect(specPage.root.shadowRoot.querySelector('caption')).toEqualHtml(`\n <caption>Test Caption</caption>\n `);\n });\n\n it('renders caption caption with sr class when provided', async () => {\n specPage.root.hideCaption = true;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('caption')).toHaveClass('sr');\n expect(specPage.root.shadowRoot.querySelector('caption')).toEqualHtml(`\n <caption class=\"sr\">Test Caption</caption>\n `);\n });\n });\n\n describe('selectable', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n });\n\n it('renders with no select column when false (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('.select-column')).toBeFalsy();\n });\n\n it('renders with select column when true', async () => {\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('col.select-column')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('td.select-column')).toHaveLength(rowData.length);\n expect(specPage.root.shadowRoot.querySelectorAll('q2-checkbox')).toHaveLength(rowData.length + 1);\n });\n\n it('renders rows with proper markup when no options are selected', async () => {\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n const firstRow = specPage.root.shadowRoot.querySelector('tbody tr#row-1');\n const firstRowCheckbox = specPage.root.shadowRoot.querySelector('tbody tr#row-1 q2-checkbox');\n expect(firstRow).not.toHaveClass('selected');\n expect(firstRowCheckbox).not.toHaveAttribute('checked');\n });\n\n it('renders rows with proper markup when options are selected', async () => {\n specPage.root.selectable = true;\n rowData = rowData.map(row => {\n if (row.id === 1) {\n row.selected = true;\n }\n return row;\n });\n specPage.root.rows = rowData;\n\n await specPage.waitForChanges();\n const firstRow = specPage.root.shadowRoot.querySelector('tbody tr#row-1');\n const firstRowCheckbox = specPage.root.shadowRoot.querySelector('tbody tr#row-1 q2-checkbox');\n expect(firstRow).toHaveClass('selected');\n expect(firstRowCheckbox).toHaveAttribute('checked');\n });\n\n it('deselects all rows when selectable property is changed to false', async () => {\n specPage.root.selectable = true;\n rowData = rowData.map(row => {\n if (row.id === 1) {\n row.selected = true;\n }\n return row;\n });\n specPage.root.rows = rowData;\n\n await specPage.waitForChanges();\n const firstRow = specPage.root.shadowRoot.querySelector('tbody tr#row-1');\n const firstRowCheckbox = specPage.root.shadowRoot.querySelector('tbody tr#row-1 q2-checkbox');\n expect(firstRow).toHaveClass('selected');\n expect(firstRowCheckbox).toHaveAttribute('checked');\n\n specPage.root.selectable = false;\n await specPage.waitForChanges();\n\n const firstSelected = specPage.root.shadowRoot.querySelector('tbody tr#row-1');\n const firstCheckbox = specPage.root.shadowRoot.querySelector('tbody tr#row-1 q2-checkbox');\n expect(firstSelected).not.toHaveClass('selected');\n expect(firstCheckbox).toBeFalsy();\n });\n });\n\n describe('selectMode', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n });\n\n it('renders with multiple-select markup when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('.select-column')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('q2-checkbox')).toHaveLength(rowData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col class=\"select-column\"></col>\n <col></col>\n <col></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th>\n <q2-checkbox\n hide-label\n label=\"tecton.element.dataTable.selectAllRows\"\n test-id=\"select-all-rows-control\"\n ></q2-checkbox>\n </th>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n </tr>\n </thead>\n `);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\">\n <td class=\"select-column\">\n <q2-checkbox hide-label label=\"tecton.element.dataTable.selectRow\" test-id=\"select-row-control\"></q2-checkbox>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n\n it('renders with single-select markup when provided', async () => {\n specPage.root.selectMode = 'single';\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('.select-column')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('q2-checkbox')).toHaveLength(rowData.length);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col class=\"select-column\"></col>\n <col></col>\n <col></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th></th>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n </tr>\n </thead>\n `);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\">\n <td class=\"select-column\">\n <q2-checkbox hide-label label=\"tecton.element.dataTable.selectRow\" test-id=\"select-row-control\"></q2-checkbox>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n });\n\n describe('headers', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n });\n\n it('renders with no headers when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeFalsy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(0);\n expect(specPage.root.shadowRoot.querySelector('thead')).toBeFalsy();\n expect(specPage.root.shadowRoot.querySelectorAll('th')).toHaveLength(0);\n });\n\n it('renders with headers when provided', async () => {\n specPage.root.headers = headerData;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelectorAll('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length);\n expect(specPage.root.shadowRoot.querySelectorAll('thead')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('th')).toHaveLength(headerData.length);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col></col>\n <col></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n </tr>\n </thead>\n `);\n });\n });\n\n describe('rows', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n });\n\n it('renders with no rows when not provided (default)', async () => {\n expect(specPage.root.shadowRoot.querySelector('tbody')).toBeFalsy();\n expect(specPage.root.shadowRoot.querySelectorAll('tr')).toHaveLength(0);\n });\n\n it('renders with rows when provided', async () => {\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelectorAll('tbody')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('tbody tr')).toHaveLength(rowData.length);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\">\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n });\n });\n\n describe('Features', () => {\n describe('line clamping', () => {\n it('does not line-clamp when not provided (default)', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n const firstCellOfAllRows = await e2ePage.findAll('q2-data-table >>> tbody tr td.clamped');\n expect(firstCellOfAllRows).toHaveLength(0);\n });\n\n it('clamps the cell to the specified value when provided', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n headerData = headerData.map(header => {\n if (header.key === 'name') {\n header.lineClamp = 2;\n }\n return header;\n });\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n const firstCellOfAllRows = await e2ePage.findAll('q2-data-table >>> tbody tr td.clamped');\n expect(firstCellOfAllRows).toHaveLength(3);\n\n const lineClampValue = await getNestedElementStyle(\n e2ePage,\n ['q2-data-table', 'tbody tr td.clamped div'],\n '-webkit-line-clamp'\n );\n expect(lineClampValue).toBe('2');\n });\n });\n });\n\n describe('Slots', () => {\n describe('dropdowns', () => {\n it('displays controls when the slot content changes', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> td.dropdown-column')).toBeNull();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = `\n <div slot=\"row-2-dropdown\">\n <h2>Dropdown</h2>\n </div>\n `;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column slot')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column slot')).toBeFalsy();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = `\n <div slot=\"row-3-dropdown\">\n <h2>Collapsible Row</h2>\n </div>\n `;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column slot')).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column')).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column slot')).toBeTruthy();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = null;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column')).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.dropdown-column slot')).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column')).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.dropdown-column slot')).toBeFalsy();\n });\n\n it('renders slots for dropdown when provided in the markup', async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: `\n <q2-data-table>\n <q2-dropdown\n slot=\"row-2-dropdown\"\n icon=\"options\"\n alignment=\"right\"\n hideLabel\n >\n <q2-dropdown-item value=\"first\">First</q2-dropdown-item>\n <q2-dropdown-item value=\"second\">Second</q2-dropdown-item>\n <q2-dropdown-item separator=\"\"></q2-dropdown-item>\n <q2-dropdown-item value=\"third\">Third</q2-dropdown-item>\n </q2-dropdown>\n </q2-data-table>\n `,\n });\n\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col></col>\n <col></col>\n <col class=\"dropdown-column\"></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n <th>\n <span class=\"sr\">\n tecton.element.dataTable.dropdown\n </span>\n </th>\n </tr>\n </thead>\n `);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\">\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n <td class=\"dropdown-column\">\n ${row.id === 2 ? '<slot name=\"row-2-dropdown\"></slot>' : ''}\n </td>\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n });\n\n describe('expandable-content', () => {\n it('displays controls when the slot content changes', async () => {\n e2ePage = await setup({\n html: `<q2-data-table></q2-data-table>`,\n });\n table = await e2ePage.find('q2-data-table');\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> td.expandable-row-control-column')).toBeNull();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = `\n <div slot=\"row-2-expandable-content\">\n <h2>Collapsible Row</h2>\n </div>\n `;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.expandable-row-control-column')).toBeTruthy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-2 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeTruthy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.expandable-row-control-column')).toBeTruthy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-3 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeFalsy();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = `\n <div slot=\"row-3-expandable-content\">\n <h2>Collapsible Row</h2>\n </div>\n `;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.expandable-row-control-column')).toBeTruthy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-2 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.expandable-row-control-column')).toBeTruthy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-3 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeTruthy();\n\n await e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.innerHTML = null;\n });\n await e2ePage.waitForChanges();\n\n expect(await e2ePage.find('q2-data-table >>> tr#row-2 td.expandable-row-control-column')).toBeFalsy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-2 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeFalsy();\n expect(await e2ePage.find('q2-data-table >>> tr#row-3 td.expandable-row-control-column')).toBeFalsy();\n expect(\n await e2ePage.find(\n 'q2-data-table >>> tr#row-3 td.expandable-row-control-column [test-id=expandable-row-control]'\n )\n ).toBeFalsy();\n });\n\n it('renders slots for expandable rows when provided in the markup', async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: `\n <q2-data-table>\n <div\n slot=\"row-2-expandable-content\"\n >\n <h3>Test</h3>\n <p>This will be collapsible</p>\n </div>\n </q2-data-table>\n `,\n });\n\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelectorAll('col')).toHaveLength(headerData.length + 1);\n expect(specPage.root.shadowRoot.querySelector('colgroup')).toEqualHtml(`\n <colgroup>\n <col></col>\n <col></col>\n <col class=\"expandable-row-control-column\"></col>\n </colgroup>\n `);\n expect(specPage.root.shadowRoot.querySelector('thead')).toEqualHtml(`\n <thead>\n <tr>\n <th id=\"header-name\">\n <div class=\"header-content\" aria-label=\"Name\">Name</div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">Email</div>\n </th>\n <th id=\"toggle\">\n <span class=\"sr\">\n tecton.element.dataTable.toggleRow\n </span>\n </th>\n </tr>\n </thead>\n `);\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n ${rowData\n .map(\n row => `\n <tr id=\"row-${row.id}\" ${row.id === 2 ? `class=\"expandable\" tabindex=\"-1\"` : ''}>\n <td>\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td>\n <slot name=\"row-${row.id}-cell-email\">\n <div>\n ${row.cells.email}\n </div>\n </slot>\n </td>\n ${\n row.id === 2\n ? `\n <td class=\"expandable-row-control-column\">\n <q2-btn\n ariaControls=\"row-2-expandable-content\"\n ariaExpanded=\"false\"\n ariaLabel=\"tecton.element.dataTable.toggleRow\"\n test-id=\"expandable-row-control\"\n >\n <q2-icon class=\"toggle-expandable-row\" type=\"chevron-down\"></q2-icon>\n </q2-btn>\n </td>\n `\n : '<td class=\"expandable-row-control-column\"></td>'\n }\n </tr>\n ${\n row.id === 2\n ? `\n <tr aria-hidden=\"\" class=\"expandable-row\" hidden=\"\" id=\"row-2-expandable-content\">\n <td colspan=\"3\" headers=\"toggle\">\n <div class=\"expandable-content\">\n <slot name=\"row-2-expandable-content\"></slot>\n </div>\n </td>\n `\n : ''\n }\n </tr>\n `\n )\n .join('')}\n </tbody>\n `);\n });\n });\n });\n\n describe('Unit', () => {\n let dataTable: Q2DataTable;\n beforeEach(() => {\n dataTable = new Q2DataTable();\n });\n\n describe('headersHandler', () => {\n it('serializes basic data', () => {\n dataTable.headersHandler(headerData);\n const { serializedHeaders } = dataTable;\n\n expect(serializedHeaders).toEqual([\n { key: 'name', title: 'Name', ariaLabel: 'Name' },\n { key: 'email', title: 'Email' },\n ]);\n });\n\n it('serializes with auto-generated keys', () => {\n dataTable.headersHandler([{ title: 'Name' }, { title: 'Fancy Column' }]);\n const { serializedHeaders } = dataTable;\n\n expect(serializedHeaders).toEqual([\n { key: 'name', title: 'Name' },\n { key: 'fancy-column', title: 'Fancy Column' },\n ]);\n });\n\n it('serializes every property in the object', () => {\n const robustHeaderData: Q2DataTableHeader = {\n title: 'Name',\n align: 'end',\n key: 'name',\n sortable: true,\n width: '100px',\n backgroundColor: 'var(--t-primary)',\n sorted: 'ASC',\n };\n dataTable.headersHandler([robustHeaderData]);\n const { serializedHeaders } = dataTable;\n\n expect(serializedHeaders[0]).toEqual(robustHeaderData);\n });\n });\n\n describe('rowsHandler', () => {\n let firstRowData;\n beforeEach(() => {\n firstRowData = rowData[0];\n });\n\n it('serializes basic data', () => {\n dataTable.rowsHandler(rowData);\n const { serializedRows } = dataTable;\n\n expect(serializedRows).toEqual([\n {\n id: 1,\n cells: {\n name: {\n value: 'Thor',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n email: {\n value: 'strongest.avenger@asgard.gov',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n },\n selected: false,\n expanded: false,\n disabled: false,\n },\n {\n id: 2,\n cells: {\n name: {\n value: 'Iron Man',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n email: {\n value: 'moneybags@stark.com',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n },\n selected: false,\n expanded: false,\n disabled: false,\n },\n {\n id: 3,\n cells: {\n name: {\n value: 'Captain America',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n email: {\n value: 'what-is-email@shield.org',\n ariaLabel: undefined,\n type: 'text',\n align: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n },\n },\n selected: false,\n expanded: false,\n disabled: false,\n },\n ]);\n });\n\n it(\"serializes data with 'expanded' property\", () => {\n firstRowData.expanded = true;\n dataTable.rowsHandler([firstRowData]);\n expect(dataTable.serializedRows[0]).toHaveProperty('expanded', true);\n });\n\n it(\"serializes data with 'selected' property\", () => {\n firstRowData.selected = true;\n dataTable.rowsHandler([firstRowData]);\n expect(dataTable.serializedRows[0]).toHaveProperty('selected', true);\n });\n\n it(\"serializes data with 'disabled' property\", () => {\n firstRowData.disabled = true;\n dataTable.rowsHandler([firstRowData]);\n expect(dataTable.serializedRows[0]).toHaveProperty('disabled', true);\n });\n\n it(\"serializes cell data that is a string into an object of type 'text'\", () => {\n firstRowData.cells.name = 'Test';\n dataTable.rowsHandler([firstRowData]);\n expect(dataTable.serializedRows[0]).toHaveProperty('cells.name', {\n align: undefined,\n ariaLabel: undefined,\n badgeStatus: undefined,\n badgeTheme: undefined,\n type: 'text',\n value: 'Test',\n });\n });\n\n it('serializes cell data that is an object', () => {\n firstRowData.cells.name = {\n align: 'end',\n ariaLabel: 'My arial label',\n badgeStatus: 'success',\n badgeTheme: 'secondary',\n type: 'badge',\n value: 'Test',\n };\n dataTable.rowsHandler([firstRowData]);\n expect(dataTable.serializedRows[0]).toHaveProperty('cells.name', firstRowData.cells.name);\n });\n\n describe('when header data is provided that sets cell-specific properties', () => {\n let firstHeaderData;\n beforeEach(() => {\n firstHeaderData = {\n ...headerData[0],\n align: 'end',\n type: 'badge',\n badgeStatus: 'success',\n badgeTheme: 'secondary',\n lineClamp: 2,\n };\n dataTable.headersHandler([firstHeaderData]);\n });\n\n it('it sets cell-specific properties on the cell', () => {\n dataTable.rowsHandler([firstRowData]);\n const nameCell = dataTable.serializedRows[0].cells.name;\n expect(nameCell).toHaveProperty('align', 'end');\n expect(nameCell).toHaveProperty('type', 'badge');\n expect(nameCell).toHaveProperty('badgeStatus', 'success');\n expect(nameCell).toHaveProperty('badgeTheme', 'secondary');\n expect(nameCell).toHaveProperty('lineClamp', 2);\n });\n\n it('it does not override cell-specific properties on the cell if they are already defined', () => {\n firstRowData.cells.name = {\n value: 'Thor',\n ariaLabel: undefined,\n align: 'start',\n lineClamp: 2,\n type: 'text',\n badgeStatus: 'danger',\n badgeTheme: 'primary',\n };\n dataTable.rowsHandler([firstRowData]);\n const nameCell = dataTable.serializedRows[0].cells.name;\n expect(nameCell).toEqual(firstRowData.cells.name);\n });\n });\n describe('when row data is set dynamically', () => {\n it('updates the select all rows checkbox to reflect the dataset status', async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n specPage.root.headers = headerData;\n rowData = rowData.map(row => {\n if (row.id === 1) {\n row.selected = true;\n }\n return row;\n });\n specPage.root.rows = rowData;\n specPage.root.selectable = true;\n await specPage.waitForChanges();\n\n const headerCheckbox = specPage.root.shadowRoot.querySelector('[test-id=select-all-rows-control]');\n expect(headerCheckbox).not.toHaveAttribute('disabled');\n expect(headerCheckbox.getAttribute('checked')).toBeFalsy();\n\n rowData = rowData.map(row => {\n row.selected = true;\n return row;\n });\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\n\n const checkedHeaderBox = specPage.root.shadowRoot.querySelector(\n '[test-id=select-all-rows-control]'\n );\n expect(checkedHeaderBox).not.toHaveAttribute('disabled');\n expect(checkedHeaderBox).toHaveAttribute('checked');\n });\n });\n });\n\n describe('getters', () => {\n describe('selectedRows', () => {\n it('returns an empty array if no rows are selected', () => {\n dataTable.rowsHandler(rowData);\n expect(dataTable.selectedRows).toEqual([]);\n });\n\n it('returns a populated array if rows are selected', () => {\n rowData[0].selected = true;\n rowData[2].selected = true;\n dataTable.rowsHandler(rowData);\n const { serializedRows } = dataTable;\n expect(dataTable.selectedRows).toEqual([serializedRows[0], serializedRows[2]]);\n });\n });\n\n describe('selectedRow', () => {\n it('returns undefined if no row is selected', () => {\n dataTable.rowsHandler(rowData);\n expect(dataTable.selectedRow).toBeUndefined();\n });\n\n it('returns the first selected row if at least one is selected', () => {\n rowData[0].selected = true;\n dataTable.rowsHandler(rowData);\n expect(dataTable.selectedRow).toEqual(dataTable.serializedRows[0]);\n });\n });\n\n describe('numberOfColumns', () => {\n it('returns 0 if there are no headers', () => {\n expect(dataTable.numberOfColumns).toEqual(0);\n });\n\n it('returns the number of columns', () => {\n dataTable.headersHandler(headerData);\n expect(dataTable.numberOfColumns).toEqual(2);\n });\n\n it('adds 1 to the number of columns if selectable is true', () => {\n expect(dataTable.numberOfColumns).toEqual(0);\n dataTable.selectable = true;\n expect(dataTable.numberOfColumns).toEqual(1);\n });\n\n it('adds 1 to the number of columns if there are any expandable rows', () => {\n expect(dataTable.numberOfColumns).toEqual(0);\n dataTable.hasExpandableRows = true;\n expect(dataTable.numberOfColumns).toEqual(1);\n });\n\n it('adds 1 to the number of columns if there are any row actions defined', () => {\n expect(dataTable.numberOfColumns).toEqual(0);\n dataTable.hasDropdowns = true;\n expect(dataTable.numberOfColumns).toEqual(1);\n });\n });\n\n describe('mappedHeaders', () => {\n it('returns an empty object if there are no headers', () => {\n expect(dataTable.mappedHeaders).toEqual({});\n });\n\n it('returns an object with the header id as the key and the header as the value', () => {\n dataTable.headersHandler(headerData);\n expect(dataTable.mappedHeaders).toEqual({\n name: headerData[0],\n email: headerData[1],\n });\n });\n });\n });\n\n describe('event handlers', () => {\n beforeEach(() => {\n dataTable.headersHandler(headerData);\n dataTable.rowsHandler(rowData);\n });\n\n describe('onSort', () => {\n let sortRows;\n beforeEach(() => {\n sortRows = jest.spyOn(dataTable, 'sortRows');\n\n expect(dataTable.serializedRows.map(row => row.id)).toEqual([1, 2, 3]);\n expect(dataTable.serializedHeaders[1]).toHaveProperty('sorted', undefined);\n });\n\n it('calls onSort and updates the serializedHeaders and serializedRows properties', () => {\n const cachedSerializedRows = dataTable.serializedRows;\n dataTable.onSort(headerData[1]);\n\n expect(dataTable.serializedRows.map(row => row.id)).toEqual([2, 1, 3]);\n expect(dataTable.serializedHeaders[1]).toHaveProperty('sorted', 'ASC');\n expect(sortRows).toHaveBeenCalledWith(cachedSerializedRows, {\n ...headerData[1],\n sorted: 'ASC',\n });\n });\n\n it('does not modify data if preventDefault is called on sort event', () => {\n dataTable.sort.emit = jest.fn(detail => {\n const sortEvent = new CustomEvent('sort', { detail });\n sortEvent.preventDefault();\n return sortEvent;\n });\n\n dataTable.onSort(headerData[1]);\n\n expect(dataTable.sort.emit).toHaveBeenCalledWith({\n direction: 'ASC',\n header: dataTable.serializedHeaders[1],\n });\n expect(dataTable.serializedRows.map(row => row.id)).toEqual([1, 2, 3]);\n expect(dataTable.serializedHeaders[1]).toHaveProperty('sorted', undefined);\n expect(sortRows).not.toHaveBeenCalled();\n });\n });\n\n describe('onSelectAllRows', () => {\n beforeEach(() => {\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('selects all rows if they are not all selected', () => {\n dataTable.onSelectAllRows(new CustomEvent('selectAllRows', { detail: { checked: true } }));\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(true);\n expect(dataTable.allRowsSelected).toBe(true);\n });\n\n it('deselects all rows if they are all selected', () => {\n dataTable.serializedRows.forEach(row => (row.selected = true));\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(true);\n dataTable.onSelectAllRows(new CustomEvent('selectAllRows', { detail: { checked: false } }));\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('does not modify data if preventDefault is called on select event', () => {\n dataTable.select.emit = jest.fn(detail => {\n const sortEvent = new CustomEvent('sort', { detail });\n sortEvent.preventDefault();\n return sortEvent;\n });\n\n dataTable.onSelectAllRows(new CustomEvent('click', { detail: { checked: true } }));\n\n expect(dataTable.select.emit).toHaveBeenCalledWith({\n allSelected: true,\n row: undefined,\n rows: dataTable.serializedRows.map(row => ({ ...row, selected: true })),\n });\n\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('does not select rows with disabled set to true', async () => {\n dataTable.serializedRows[0].disabled = true;\n dataTable.onSelectAllRows(new CustomEvent('selectAllRows', { detail: { checked: true } }));\n expect(dataTable.allRowsSelected).toBe(true);\n expect(dataTable.serializedRows[0].selected).toBe(false);\n });\n });\n\n describe('onSelectRow', () => {\n beforeEach(() => {\n expect(dataTable.serializedRows.every(row => row.selected)).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('selects row', () => {\n dataTable.onSelectRow(\n new CustomEvent('click', { detail: { checked: true } }),\n dataTable.serializedRows[1]\n );\n expect(dataTable.serializedRows[1].selected).toBe(true);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('deselects row', () => {\n dataTable.rowsHandler(rowData.map((row, index) => ({ ...row, selected: index === 1 })));\n expect(dataTable.serializedRows[1].selected).toBe(true);\n dataTable.onSelectRow(\n new CustomEvent('click', { detail: { checked: false } }),\n dataTable.serializedRows[1]\n );\n expect(dataTable.serializedRows[1].selected).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('does not modify data if preventDefault is called on select event', () => {\n dataTable.select.emit = jest.fn(detail => {\n const selectAllEvent = new CustomEvent('select', { detail });\n selectAllEvent.preventDefault();\n return selectAllEvent;\n });\n\n expect(dataTable.serializedRows[1].selected).toBe(false);\n dataTable.onSelectRow(\n new CustomEvent('click', { detail: { checked: true } }),\n dataTable.serializedRows[1]\n );\n const selectedRow = { ...dataTable.serializedRows[1], selected: true };\n expect(dataTable.select.emit).toHaveBeenCalledWith({\n row: selectedRow,\n rows: [selectedRow],\n allSelected: false,\n });\n expect(dataTable.serializedRows[1].selected).toBe(false);\n expect(dataTable.allRowsSelected).toBe(false);\n });\n\n it('updates allRowsSelected to true when all rows have been marked as selected', () => {\n dataTable.rowsHandler(rowData.map((row, index) => ({ ...row, selected: index !== 1 })));\n expect(dataTable.serializedRows[1].selected).toBe(false);\n dataTable.onSelectRow(\n new CustomEvent('click', { detail: { checked: true } }),\n dataTable.serializedRows[1]\n );\n expect(dataTable.serializedRows[1].selected).toBe(true);\n expect(dataTable.allRowsSelected).toBe(true);\n });\n });\n\n describe('onClickTableRow', () => {\n beforeEach(() => {\n dataTable.onClickRow = jest.fn();\n dataTable.onToggleRow = jest.fn();\n });\n\n it('calls onClickRow when clickable is true', () => {\n dataTable.clickable = true;\n\n const clickEvent = new MouseEvent('click');\n dataTable.onClickTableRow(clickEvent, dataTable.serializedRows[1]);\n expect(dataTable.onClickRow).toHaveBeenCalledWith(clickEvent, dataTable.serializedRows[1]);\n expect(dataTable.onToggleRow).not.toHaveBeenCalled();\n });\n\n it('calls onToggleRow when hasExpandableRows is true', () => {\n dataTable.hasExpandableRows = true;\n\n const clickEvent = new MouseEvent('click');\n dataTable.onClickTableRow(clickEvent, dataTable.serializedRows[1]);\n expect(dataTable.onClickRow).not.toHaveBeenCalled();\n expect(dataTable.onToggleRow).toHaveBeenCalledWith(clickEvent, dataTable.serializedRows[1]);\n });\n\n it('does not call anything when both clickable and hasExpandableRows is false', () => {\n const clickEvent = new MouseEvent('click');\n dataTable.onClickTableRow(clickEvent, dataTable.serializedRows[1]);\n expect(dataTable.onClickRow).not.toHaveBeenCalled();\n expect(dataTable.onToggleRow).not.toHaveBeenCalled();\n });\n });\n\n describe('onClickRow', () => {\n it('emits a click event with row data', () => {\n dataTable.click.emit = jest.fn();\n\n dataTable.onClickRow(new MouseEvent('click'), dataTable.serializedRows[1]);\n expect(dataTable.click.emit).toHaveBeenCalledWith({\n row: dataTable.serializedRows[1],\n });\n });\n });\n\n describe('onToggleRow', () => {\n beforeEach(() => {\n expect(dataTable.serializedRows.every(row => row.expanded)).toBe(false);\n });\n\n it('expands row', () => {\n dataTable.onToggleRow(new MouseEvent('click'), dataTable.serializedRows[1]);\n expect(dataTable.serializedRows[1].expanded).toBe(true);\n });\n\n it('closes row', () => {\n dataTable.rowsHandler(rowData.map((row, index) => ({ ...row, expanded: index === 1 })));\n expect(dataTable.serializedRows[1].expanded).toBe(true);\n dataTable.onToggleRow(new MouseEvent('click'), dataTable.serializedRows[1]);\n expect(dataTable.serializedRows[1].expanded).toBe(false);\n });\n\n it('does not modify data if preventDefault is called on toggle event', () => {\n dataTable.toggle.emit = jest.fn(detail => {\n const toggleEvent = new CustomEvent('toggle', { detail });\n toggleEvent.preventDefault();\n return toggleEvent;\n });\n\n expect(dataTable.serializedRows[1].expanded).toBe(false);\n dataTable.onToggleRow(new MouseEvent('click'), dataTable.serializedRows[1]);\n const selectedRow = { ...dataTable.serializedRows[1], expanded: true };\n expect(dataTable.toggle.emit).toHaveBeenCalledWith({\n row: selectedRow,\n });\n expect(dataTable.serializedRows[1].expanded).toBe(false);\n });\n });\n });\n\n describe('helpers', () => {\n describe('sortRows', () => {\n beforeEach(() => {\n dataTable.headersHandler(headerData);\n dataTable.rowsHandler(rowData);\n });\n\n it('returns the rows in ASC order of the provided header by default', () => {\n const sortedResult = dataTable\n .sortRows(dataTable.serializedRows, dataTable.serializedHeaders[1])\n .map(row => row.id);\n expect(sortedResult).toEqual([2, 1, 3]);\n });\n\n it('returns the rows in DESC order of the provided header', () => {\n const sortedResult = dataTable\n .sortRows(dataTable.serializedRows, { ...dataTable.serializedHeaders[1], sorted: 'DESC' })\n .map(row => row.id);\n expect(sortedResult).toEqual([3, 1, 2]);\n });\n });\n });\n });\n\n describe('Events', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `\n <q2-data-table>\n <div\n slot=\"row-2-expandable-content\"\n >\n <h3>Test</h3>\n <p>This will be collapsible</p>\n </div>\n </q2-data-table>\n `,\n });\n table = await e2ePage.find('q2-data-table');\n });\n\n describe('click', () => {\n let clickControl: E2EElement;\n let clickRow: E2EElement;\n beforeEach(async () => {\n table.setProperty('clickable', true);\n table.setProperty('hide-clickable', false);\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n clickControl = await e2ePage.find('q2-data-table >>> tr#row-2 [test-id=clickable-row-control]');\n clickRow = await e2ePage.find('q2-data-table >>> tr#row-2.clickable');\n });\n\n it('emits click event when button is clicked', async () => {\n const clickSpy = await table.spyOnEvent('click');\n clickControl.triggerEvent('click');\n await e2ePage.waitForChanges();\n const clickedRow = {\n id: 2,\n expanded: false,\n selected: false,\n disabled: false,\n cells: {\n email: {\n type: 'text',\n value: 'moneybags@stark.com',\n },\n name: {\n type: 'text',\n value: 'Iron Man',\n },\n },\n };\n\n expect(clickSpy).toHaveReceivedEventTimes(1);\n expect(clickSpy).toHaveReceivedEventDetail({\n row: clickedRow,\n });\n });\n\n it('emits click event when row is clicked', async () => {\n const clickSpy = await table.spyOnEvent('click');\n clickRow.click();\n await e2ePage.waitForChanges();\n const clickedRow = {\n id: 2,\n expanded: false,\n selected: false,\n disabled: false,\n cells: {\n email: {\n type: 'text',\n value: 'moneybags@stark.com',\n },\n name: {\n type: 'text',\n value: 'Iron Man',\n },\n },\n };\n\n expect(clickSpy).toHaveReceivedEventTimes(1);\n expect(clickSpy).toHaveReceivedEventDetail({\n row: clickedRow,\n });\n });\n });\n\n describe('select', () => {\n let selectControl: E2EElement;\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n selectControl = await e2ePage.find('q2-data-table >>> tr#row-2 [test-id=select-row-control]');\n });\n\n it('emits select event and mutates selected state', async () => {\n const selectSpy = await table.spyOnEvent('select');\n expect(selectControl).not.toHaveAttribute('checked');\n selectControl.click();\n await e2ePage.waitForChanges();\n const selectedRow = {\n id: 2,\n expanded: false,\n selected: true,\n disabled: false,\n cells: {\n email: {\n type: 'text',\n value: 'moneybags@stark.com',\n },\n name: {\n type: 'text',\n value: 'Iron Man',\n },\n },\n };\n\n expect(selectSpy).toHaveReceivedEventDetail({\n row: selectedRow,\n rows: [selectedRow],\n allSelected: false,\n });\n\n expect(selectControl).toEqualAttribute('checked', '');\n });\n\n it('does not mutate data if event is cancelled', async () => {\n e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.addEventListener('select', event => {\n event.preventDefault();\n });\n });\n expect(selectControl).not.toHaveAttribute('checked');\n selectControl.click();\n await e2ePage.waitForChanges();\n expect(selectControl).not.toHaveAttribute('checked');\n });\n\n it('does not expand the collapsible row when clicking on the select control', async () => {\n const expandableRow = await e2ePage.find('q2-data-table >>> tr#row-2.expandable');\n expect(expandableRow).not.toHaveClass('expanded');\n selectControl.click();\n await e2ePage.waitForChanges();\n expect(expandableRow).not.toHaveClass('expanded');\n });\n });\n\n describe('toggle', () => {\n let toggleControl: E2EElement;\n let expandableRow: E2EElement;\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n toggleControl = await e2ePage.find('q2-data-table >>> tr#row-2 [test-id=expandable-row-control]');\n expandableRow = await e2ePage.find('q2-data-table >>> tr#row-2.expandable');\n });\n\n it('emits toggle event and mutates expanded state', async () => {\n const toggleSpy = await table.spyOnEvent('toggle');\n expect(await toggleControl.getProperty('ariaExpanded')).toEqual('false');\n expect(expandableRow).not.toHaveClass('expanded');\n toggleControl.click();\n await e2ePage.waitForChanges();\n const toggledRow = {\n id: 2,\n expanded: true,\n selected: false,\n disabled: false,\n cells: {\n email: {\n type: 'text',\n value: 'moneybags@stark.com',\n },\n name: {\n type: 'text',\n value: 'Iron Man',\n },\n },\n };\n\n expect(toggleSpy).toHaveReceivedEventDetail({\n row: toggledRow,\n });\n\n expect(await toggleControl.getProperty('ariaExpanded')).toEqual('true');\n expect(expandableRow).toHaveClass('expanded');\n });\n\n it('does not mutate data if event is cancelled', async () => {\n e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.addEventListener('toggle', event => {\n event.preventDefault();\n });\n });\n expect(await toggleControl.getProperty('ariaExpanded')).toEqual('false');\n expect(expandableRow).not.toHaveClass('expanded');\n toggleControl.click();\n await e2ePage.waitForChanges();\n expect(await toggleControl.getProperty('ariaExpanded')).toEqual('false');\n expect(expandableRow).not.toHaveClass('expanded');\n });\n });\n\n describe('sort', () => {\n let emailSortHeader: E2EElement;\n let emailSortControl: E2EElement;\n let emailHeaderIcon: E2EElement;\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: true }))\n );\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n emailSortHeader = await e2ePage.find('q2-data-table >>> th#header-email');\n emailSortControl = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sort-control]');\n });\n\n it('emits sort event and mutates rows', async () => {\n const sortSpy = await table.spyOnEvent('sort');\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailSortHeader).not.toHaveClass('sorted');\n expect(emailHeaderIcon).toEqualAttribute('type', 'sort');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.clickToSort');\n\n emailSortControl.click();\n await e2ePage.waitForChanges();\n\n expect(sortSpy).toHaveReceivedEventDetail({\n header: {\n key: 'email',\n title: 'Email',\n sortable: true,\n },\n direction: 'ASC',\n });\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailSortHeader).toHaveClass('sorted');\n expect(emailHeaderIcon).toEqualAttribute('type', 'arrow-down');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.sortedAscending');\n\n emailSortControl.click();\n await e2ePage.waitForChanges();\n\n expect(sortSpy).toHaveReceivedEventDetail({\n header: {\n key: 'email',\n title: 'Email',\n sortable: true,\n sorted: 'ASC',\n },\n direction: 'DESC',\n });\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailHeaderIcon).toEqualAttribute('type', 'arrow-down');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.sortedDescending');\n });\n\n it('does not mutate data if event is cancelled', async () => {\n e2ePage.$eval('q2-data-table', (el: HTMLQ2DataTableElement) => {\n el.addEventListener('toggle', event => {\n event.preventDefault();\n });\n });\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailSortHeader).not.toHaveClass('sorted');\n expect(emailHeaderIcon).toEqualAttribute('type', 'sort');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.clickToSort');\n\n emailSortControl.click();\n await e2ePage.waitForChanges();\n\n emailHeaderIcon = await e2ePage.find('q2-data-table >>> th#header-email [test-id=sorted-indicator]');\n expect(emailSortHeader).toHaveClass('sorted');\n expect(emailHeaderIcon).toEqualAttribute('type', 'arrow-down');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.sortedAscending');\n });\n });\n\n describe('selectAllRows', () => {\n let selectAllControl: E2EElement;\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n selectAllControl = await e2ePage.find('q2-data-table >>> [test-id=select-all-rows-control]');\n });\n\n it('emits selectAllRows event and mutates rows', async () => {\n const selectAllRowsSpy = await table.spyOnEvent('selectAllRows');\n expect(selectAllControl).not.toHaveAttribute('checked');\n selectAllControl.click();\n await e2ePage.waitForChanges();\n expect(selectAllRowsSpy).toHaveReceivedEventDetail({\n checked: true,\n });\n expect(selectAllControl).toHaveAttribute('checked');\n });\n });\n });\n});\n"]}