q2-tecton-elements 1.53.0 → 1.53.2

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 (442) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +64 -61
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/{index-07285783.js → index-76f63767.js} +1 -21
  4. package/dist/cjs/index-76f63767.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/q2-action-group.cjs.entry.js +2 -2
  7. package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
  8. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-badge_7.cjs.entry.js +12 -4
  10. package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
  11. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  14. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
  16. package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
  17. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  18. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  23. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-dropdown.cjs.entry.js +10 -12
  25. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  26. package/dist/cjs/q2-editable-field.cjs.entry.js +7 -8
  27. package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
  28. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-item_3.cjs.entry.js +3 -3
  32. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  34. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  35. package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
  36. package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
  37. package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-option.cjs.entry.js +2 -2
  39. package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
  40. package/dist/cjs/q2-pill.cjs.entry.js +2 -2
  41. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  43. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  44. package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
  45. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  46. package/dist/cjs/q2-select.cjs.entry.js +89 -13
  47. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  48. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  49. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  50. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-tag.cjs.entry.js +2 -2
  52. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  53. package/dist/cjs/q2-textarea.cjs.entry.js +3 -2
  54. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  55. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  56. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  57. package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
  58. package/dist/collection/components/click-elsewhere/test/click-elsewhere-test.e2e.js.map +1 -1
  59. package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
  60. package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
  61. package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js.map +1 -1
  62. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -1
  63. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
  64. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  65. package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -1
  66. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  67. package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
  68. package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js.map +1 -1
  69. package/dist/collection/components/q2-badge/q2-badge.js.map +1 -1
  70. package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js.map +1 -1
  71. package/dist/collection/components/q2-btn/q2-btn.js +4 -0
  72. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  73. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
  74. package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
  75. package/dist/collection/components/q2-calendar/q2-calendar-types.js.map +1 -1
  76. package/dist/collection/components/q2-calendar/q2-calendar-validation.js.map +1 -1
  77. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  78. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  79. package/dist/collection/components/q2-calendar/q2-month-picker.js.map +1 -1
  80. package/dist/collection/components/q2-calendar/test/helpers-test.e2e.js.map +1 -1
  81. package/dist/collection/components/q2-calendar/test/q2-calendar-month-picker-test.e2e.js.map +1 -1
  82. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +2 -2
  83. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
  84. package/dist/collection/components/q2-calendar/test/validation-test.e2e.js.map +1 -1
  85. package/dist/collection/components/q2-card/q2-card.js.map +1 -1
  86. package/dist/collection/components/q2-card/test/q2-card-test.e2e.js.map +1 -1
  87. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  88. package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js.map +1 -1
  89. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  90. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
  91. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.e2e.js.map +1 -1
  92. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.spec.js.map +1 -1
  93. package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
  94. package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
  95. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js.map +1 -1
  96. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
  97. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
  98. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js.map +1 -1
  99. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
  100. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  101. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -1
  102. package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
  103. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js.map +1 -1
  104. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
  105. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js.map +1 -1
  106. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  107. package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
  108. package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js.map +1 -1
  109. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  110. package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js.map +1 -1
  111. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  112. package/dist/collection/components/q2-detail/q2-detail.js.map +1 -1
  113. package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js.map +1 -1
  114. package/dist/collection/components/q2-dropdown/q2-dropdown.js +9 -11
  115. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  116. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +5 -17
  117. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
  118. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  119. package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-test.e2e.js.map +1 -1
  120. package/dist/collection/components/q2-editable-field/q2-editable-field.js +12 -7
  121. package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
  122. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.e2e.js.map +1 -1
  123. package/dist/collection/components/q2-example/q2-example.js +1 -1
  124. package/dist/collection/components/q2-example/q2-example.js.map +1 -1
  125. package/dist/collection/components/q2-example/test/q2-example.e2e.js.map +1 -1
  126. package/dist/collection/components/q2-example/test/q2-example.spec.js.map +1 -1
  127. package/dist/collection/components/q2-file-picker/q2-file-picker.js.map +1 -1
  128. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.e2e.js.map +1 -1
  129. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.spec.js.map +1 -1
  130. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  131. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js.map +1 -1
  132. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.e2e.js.map +1 -1
  133. package/dist/collection/components/q2-icon/q2-icon-types.js.map +1 -1
  134. package/dist/collection/components/q2-icon/q2-icon.js +4 -0
  135. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  136. package/dist/collection/components/q2-icon/test/q2-icon-test.e2e.js.map +1 -1
  137. package/dist/collection/components/q2-input/formatting/alpha.js.map +1 -1
  138. package/dist/collection/components/q2-input/formatting/alpha.spec.js.map +1 -1
  139. package/dist/collection/components/q2-input/formatting/alphanumeric.js.map +1 -1
  140. package/dist/collection/components/q2-input/formatting/alphanumeric.spec.js.map +1 -1
  141. package/dist/collection/components/q2-input/formatting/credit-card.js.map +1 -1
  142. package/dist/collection/components/q2-input/formatting/credit-card.spec.js.map +1 -1
  143. package/dist/collection/components/q2-input/formatting/currency.js.map +1 -1
  144. package/dist/collection/components/q2-input/formatting/currency.spec.js.map +1 -1
  145. package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
  146. package/dist/collection/components/q2-input/formatting/date.spec.js.map +1 -1
  147. package/dist/collection/components/q2-input/formatting/generic.js.map +1 -1
  148. package/dist/collection/components/q2-input/formatting/number.js.map +1 -1
  149. package/dist/collection/components/q2-input/formatting/numeric.js.map +1 -1
  150. package/dist/collection/components/q2-input/formatting/numeric.spec.js.map +1 -1
  151. package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
  152. package/dist/collection/components/q2-input/formatting/phone.spec.js.map +1 -1
  153. package/dist/collection/components/q2-input/formatting/postal.js.map +1 -1
  154. package/dist/collection/components/q2-input/formatting/postal.spec.js.map +1 -1
  155. package/dist/collection/components/q2-input/formatting/ssn.js.map +1 -1
  156. package/dist/collection/components/q2-input/formatting/ssn.spec.js.map +1 -1
  157. package/dist/collection/components/q2-input/formatting/tin.js.map +1 -1
  158. package/dist/collection/components/q2-input/formatting/tin.spec.js.map +1 -1
  159. package/dist/collection/components/q2-input/q2-input-types.js.map +1 -1
  160. package/dist/collection/components/q2-input/q2-input.js +1 -1
  161. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  162. package/dist/collection/components/q2-input/test/q2-input-credit-card-test.e2e.js.map +1 -1
  163. package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -1
  164. package/dist/collection/components/q2-input/test/q2-input-test.spec.js.map +1 -1
  165. package/dist/collection/components/q2-item/q2-item.js +1 -1
  166. package/dist/collection/components/q2-item/q2-item.js.map +1 -1
  167. package/dist/collection/components/q2-item/test/q2-item-test.e2e.js.map +1 -1
  168. package/dist/collection/components/q2-item/test/q2-item-test.spec.js.map +1 -1
  169. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  170. package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
  171. package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js.map +1 -1
  172. package/dist/collection/components/q2-legend/test/q2-legend-test.spec.js.map +1 -1
  173. package/dist/collection/components/q2-link/q2-link.js.map +1 -1
  174. package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -1
  175. package/dist/collection/components/q2-list/q2-list.js +1 -1
  176. package/dist/collection/components/q2-list/q2-list.js.map +1 -1
  177. package/dist/collection/components/q2-list/test/q2-list-test.e2e.js.map +1 -1
  178. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  179. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js.map +1 -1
  180. package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
  181. package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js.map +1 -1
  182. package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js.map +1 -1
  183. package/dist/collection/components/q2-loc/q2-loc.js +1 -1
  184. package/dist/collection/components/q2-loc/q2-loc.js.map +1 -1
  185. package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js.map +1 -1
  186. package/dist/collection/components/q2-loc/test/q2-loc-test.spec.js.map +1 -1
  187. package/dist/collection/components/q2-message/q2-message.js +1 -1
  188. package/dist/collection/components/q2-message/q2-message.js.map +1 -1
  189. package/dist/collection/components/q2-message/test/q2-message-test.e2e.js.map +1 -1
  190. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  191. package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
  192. package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js.map +1 -1
  193. package/dist/collection/components/q2-option/q2-option.js +1 -1
  194. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  195. package/dist/collection/components/q2-option/test/q2-option-test.e2e.js.map +1 -1
  196. package/dist/collection/components/q2-option/test/q2-option-test.spec.js.map +1 -1
  197. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  198. package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js.map +1 -1
  199. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  200. package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
  201. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +1 -0
  202. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
  203. package/dist/collection/components/q2-pill/q2-pill.js +1 -1
  204. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  205. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +1 -1
  206. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
  207. package/dist/collection/components/q2-popover/q2-popover.css +18 -10
  208. package/dist/collection/components/q2-popover/q2-popover.js +64 -60
  209. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  210. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js +1 -34
  211. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -1
  212. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +743 -435
  213. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
  214. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  215. package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js.map +1 -1
  216. package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
  217. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js.map +1 -1
  218. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  219. package/dist/collection/components/q2-relative-time/q2-relative-time.js.map +1 -1
  220. package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js.map +1 -1
  221. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  222. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js.map +1 -1
  223. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.e2e.js.map +1 -1
  224. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.spec.js.map +1 -1
  225. package/dist/collection/components/q2-section/q2-section.js +2 -2
  226. package/dist/collection/components/q2-section/q2-section.js.map +1 -1
  227. package/dist/collection/components/q2-section/test/q2-section-test.e2e.js.map +1 -1
  228. package/dist/collection/components/q2-select/q2-select.js +110 -15
  229. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  230. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +1 -1
  231. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
  232. package/dist/collection/components/q2-select/test/q2-select-test.spec.js +412 -0
  233. package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -0
  234. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  235. package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
  236. package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js.map +1 -1
  237. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
  238. package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js.map +1 -1
  239. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  240. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js.map +1 -1
  241. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js.map +1 -1
  242. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  243. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  244. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js.map +1 -1
  245. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.spec.js.map +1 -1
  246. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  247. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js.map +1 -1
  248. package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js.map +1 -1
  249. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  250. package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
  251. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +6 -1
  252. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
  253. package/dist/collection/components/q2-textarea/q2-textarea.js +2 -1
  254. package/dist/collection/components/q2-textarea/q2-textarea.js.map +1 -1
  255. package/dist/collection/components/q2-textarea/test/q2-textarea-test.e2e.js.map +1 -1
  256. package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
  257. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js.map +1 -1
  258. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane-types.js.map +1 -1
  259. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  260. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js.map +1 -1
  261. package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js.map +1 -1
  262. package/dist/collection/index.js.map +1 -1
  263. package/dist/collection/utils/action-sheet.js.map +1 -1
  264. package/dist/collection/utils/charting.js.map +1 -1
  265. package/dist/collection/utils/helpers.js.map +1 -1
  266. package/dist/collection/utils/index.js.map +1 -1
  267. package/dist/collection/utils/sanitize-html-string.js.map +1 -1
  268. package/dist/collection/utils/sanitize-regex-string.js.map +1 -1
  269. package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -1
  270. package/dist/collection/utils/test/index.spec.js.map +1 -1
  271. package/dist/components/index2.js +1 -20
  272. package/dist/components/index2.js.map +1 -1
  273. package/dist/components/q2-action-group.js +1 -1
  274. package/dist/components/q2-action-sheet.js +1 -1
  275. package/dist/components/q2-avatar2.js +1 -1
  276. package/dist/components/q2-btn2.js +4 -0
  277. package/dist/components/q2-btn2.js.map +1 -1
  278. package/dist/components/q2-carousel-pane.js +2 -2
  279. package/dist/components/q2-chart-area.js +1 -1
  280. package/dist/components/q2-chart-bar.js +1 -1
  281. package/dist/components/q2-chart-donut.js +1 -1
  282. package/dist/components/q2-currency.js +1 -1
  283. package/dist/components/q2-detail.js +1 -1
  284. package/dist/components/q2-dropdown.js +9 -11
  285. package/dist/components/q2-dropdown.js.map +1 -1
  286. package/dist/components/q2-editable-field.js +7 -8
  287. package/dist/components/q2-editable-field.js.map +1 -1
  288. package/dist/components/q2-example.js +1 -1
  289. package/dist/components/q2-formatted-text.js +1 -1
  290. package/dist/components/q2-icon2.js +4 -0
  291. package/dist/components/q2-icon2.js.map +1 -1
  292. package/dist/components/q2-input2.js +1 -1
  293. package/dist/components/q2-item2.js +1 -1
  294. package/dist/components/q2-legend2.js +1 -1
  295. package/dist/components/q2-list2.js +1 -1
  296. package/dist/components/q2-loc.js +1 -1
  297. package/dist/components/q2-message2.js +1 -1
  298. package/dist/components/q2-month-picker.js +2 -2
  299. package/dist/components/q2-optgroup2.js +1 -1
  300. package/dist/components/q2-option2.js +1 -1
  301. package/dist/components/q2-pagination.js +3 -3
  302. package/dist/components/q2-pill.js +1 -1
  303. package/dist/components/q2-popover2.js +63 -60
  304. package/dist/components/q2-popover2.js.map +1 -1
  305. package/dist/components/q2-relative-time.js +1 -1
  306. package/dist/components/q2-resize-observer2.js +1 -1
  307. package/dist/components/q2-section.js +2 -2
  308. package/dist/components/q2-select2.js +92 -16
  309. package/dist/components/q2-select2.js.map +1 -1
  310. package/dist/components/q2-stepper-vertical.js +1 -1
  311. package/dist/components/q2-stepper.js +1 -1
  312. package/dist/components/q2-tab-container.js +1 -1
  313. package/dist/components/q2-tab-pane.js +1 -1
  314. package/dist/components/q2-tag.js +1 -1
  315. package/dist/components/q2-textarea.js +2 -1
  316. package/dist/components/q2-textarea.js.map +1 -1
  317. package/dist/components/tecton-tab-pane.js +2 -2
  318. package/dist/esm/click-elsewhere_2.entry.js +64 -61
  319. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  320. package/dist/esm/{index-d18e2a20.js → index-504f1a9e.js} +2 -21
  321. package/dist/esm/index-504f1a9e.js.map +1 -0
  322. package/dist/esm/loader.js +1 -1
  323. package/dist/esm/q2-action-group.entry.js +2 -2
  324. package/dist/esm/q2-action-sheet.entry.js +2 -2
  325. package/dist/esm/q2-avatar.entry.js +1 -1
  326. package/dist/esm/q2-badge_7.entry.js +12 -4
  327. package/dist/esm/q2-badge_7.entry.js.map +1 -1
  328. package/dist/esm/q2-calendar.entry.js +1 -1
  329. package/dist/esm/q2-card.entry.js +1 -1
  330. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  331. package/dist/esm/q2-carousel.entry.js +1 -1
  332. package/dist/esm/q2-chart-area.entry.js +2 -2
  333. package/dist/esm/q2-chart-bar.entry.js +2 -2
  334. package/dist/esm/q2-chart-donut.entry.js +2 -2
  335. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  336. package/dist/esm/q2-checkbox.entry.js +1 -1
  337. package/dist/esm/q2-currency.entry.js +1 -1
  338. package/dist/esm/q2-data-table.entry.js +1 -1
  339. package/dist/esm/q2-detail.entry.js +2 -2
  340. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  341. package/dist/esm/q2-dropdown.entry.js +10 -12
  342. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  343. package/dist/esm/q2-editable-field.entry.js +7 -8
  344. package/dist/esm/q2-editable-field.entry.js.map +1 -1
  345. package/dist/esm/q2-example.entry.js +1 -1
  346. package/dist/esm/q2-file-picker.entry.js +1 -1
  347. package/dist/esm/q2-formatted-text.entry.js +1 -1
  348. package/dist/esm/q2-item_3.entry.js +3 -3
  349. package/dist/esm/q2-legend.entry.js +1 -1
  350. package/dist/esm/q2-loc.entry.js +2 -2
  351. package/dist/esm/q2-message.entry.js +2 -2
  352. package/dist/esm/q2-month-picker.entry.js +3 -3
  353. package/dist/esm/q2-optgroup.entry.js +2 -2
  354. package/dist/esm/q2-option-list.entry.js +1 -1
  355. package/dist/esm/q2-option.entry.js +2 -2
  356. package/dist/esm/q2-pagination.entry.js +4 -4
  357. package/dist/esm/q2-pill.entry.js +2 -2
  358. package/dist/esm/q2-radio-group.entry.js +1 -1
  359. package/dist/esm/q2-radio.entry.js +1 -1
  360. package/dist/esm/q2-relative-time.entry.js +2 -2
  361. package/dist/esm/q2-resize-observer.entry.js +1 -1
  362. package/dist/esm/q2-section.entry.js +3 -3
  363. package/dist/esm/q2-select.entry.js +90 -14
  364. package/dist/esm/q2-select.entry.js.map +1 -1
  365. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  366. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  367. package/dist/esm/q2-stepper.entry.js +2 -2
  368. package/dist/esm/q2-tag.entry.js +2 -2
  369. package/dist/esm/q2-tecton-elements.js +1 -1
  370. package/dist/esm/q2-textarea.entry.js +3 -2
  371. package/dist/esm/q2-textarea.entry.js.map +1 -1
  372. package/dist/esm/q2-tooltip.entry.js +1 -1
  373. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  374. package/dist/jest.setup.js +22 -0
  375. package/dist/jest.setup.js.map +1 -0
  376. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js +175 -163
  377. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js.map +1 -1
  378. package/dist/q2-tecton-elements/{index-d18e2a20.js → index-504f1a9e.js} +51 -69
  379. package/dist/q2-tecton-elements/index-504f1a9e.js.map +1 -0
  380. package/dist/q2-tecton-elements/q2-action-group.entry.js +4 -4
  381. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +34 -34
  382. package/dist/q2-tecton-elements/q2-avatar.entry.js +6 -6
  383. package/dist/q2-tecton-elements/q2-badge_7.entry.js +25 -17
  384. package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
  385. package/dist/q2-tecton-elements/q2-calendar.entry.js +1 -1
  386. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  387. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +21 -21
  388. package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
  389. package/dist/q2-tecton-elements/q2-chart-area.entry.js +3 -3
  390. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +3 -3
  391. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +101 -101
  392. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +1 -1
  393. package/dist/q2-tecton-elements/q2-checkbox.entry.js +1 -1
  394. package/dist/q2-tecton-elements/q2-currency.entry.js +6 -6
  395. package/dist/q2-tecton-elements/q2-data-table.entry.js +1 -1
  396. package/dist/q2-tecton-elements/q2-detail.entry.js +39 -39
  397. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
  398. package/dist/q2-tecton-elements/q2-dropdown.entry.js +14 -16
  399. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  400. package/dist/q2-tecton-elements/q2-editable-field.entry.js +27 -18
  401. package/dist/q2-tecton-elements/q2-editable-field.entry.js.map +1 -1
  402. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  403. package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
  404. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  405. package/dist/q2-tecton-elements/q2-item_3.entry.js +19 -19
  406. package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
  407. package/dist/q2-tecton-elements/q2-loc.entry.js +5 -5
  408. package/dist/q2-tecton-elements/q2-message.entry.js +21 -21
  409. package/dist/q2-tecton-elements/q2-month-picker.entry.js +14 -14
  410. package/dist/q2-tecton-elements/q2-optgroup.entry.js +8 -8
  411. package/dist/q2-tecton-elements/q2-option-list.entry.js +1 -1
  412. package/dist/q2-tecton-elements/q2-option.entry.js +14 -14
  413. package/dist/q2-tecton-elements/q2-pagination.entry.js +34 -34
  414. package/dist/q2-tecton-elements/q2-pill.entry.js +14 -14
  415. package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
  416. package/dist/q2-tecton-elements/q2-radio.entry.js +1 -1
  417. package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
  418. package/dist/q2-tecton-elements/q2-resize-observer.entry.js +1 -1
  419. package/dist/q2-tecton-elements/q2-section.entry.js +19 -19
  420. package/dist/q2-tecton-elements/q2-select.entry.js +156 -92
  421. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  422. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +1 -1
  423. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +37 -37
  424. package/dist/q2-tecton-elements/q2-stepper.entry.js +29 -29
  425. package/dist/q2-tecton-elements/q2-tag.entry.js +25 -25
  426. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  427. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  428. package/dist/q2-tecton-elements/q2-textarea.entry.js +4 -3
  429. package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
  430. package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
  431. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
  432. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +1 -0
  433. package/dist/types/components/q2-btn/q2-btn.d.ts +1 -0
  434. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +1 -4
  435. package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +2 -1
  436. package/dist/types/components/q2-icon/q2-icon.d.ts +1 -0
  437. package/dist/types/components/q2-popover/q2-popover.d.ts +4 -4
  438. package/dist/types/components/q2-select/q2-select.d.ts +19 -0
  439. package/package.json +3 -3
  440. package/dist/cjs/index-07285783.js.map +0 -1
  441. package/dist/esm/index-d18e2a20.js.map +0 -1
  442. package/dist/q2-tecton-elements/index-d18e2a20.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"q2-data-table-test.e2e.js","sourceRoot":"","sources":["../../../../src/components/q2-data-table/test/q2-data-table-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage, SpecPage, newSpecPage } from '@stencil/core/testing';\nimport { evaluateA11y, getListOfStyleCompilationIssues, getNestedElementStyle, setup } from '@/utils/helpers';\nimport { Q2DataTable, Q2DataTableHeader, Q2DataTableRow } from '../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 it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-data-table></q2-data-table>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-data-table')).toHaveLength(0);\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 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 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 horizontal row borders when true (original implementation)', 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 expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-width')).not.toBe(\n '0px 1px 0px 0px'\n );\n });\n it('renders horizontal row borders when set to horizontal', async () => {\n table.setProperty('bordered', 'horizontal');\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 expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-width')).not.toBe(\n '0px 1px 0px 0px'\n );\n });\n it('renders vertical column borders when set to vertical', async () => {\n table.setProperty('bordered', 'vertical');\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-width')).toBe('0px 1px 0px 0px');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-style')).toBe('solid');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-color')).toBe(\n 'rgb(153, 153, 153)'\n );\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr'], 'border-width')).not.toBe(\n '0px 0px 1px'\n );\n });\n\n it('renders with vertical and horizontal borders when set to grid', async () => {\n table.setProperty('bordered', 'grid');\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-width')).toBe('0px 1px 0px 0px');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-style')).toBe('solid');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-color')).toBe(\n 'rgb(153, 153, 153)'\n );\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 it('does not render a left-side vertical border on the first column', async () => {\n table.setProperty('bordered', 'vertical');\n await e2ePage.waitForChanges();\n const borderWidth = await getCSSProperty(e2ePage, ['q2-data-table', 'col:first-child'], 'border-width');\n expect(borderWidth).toBe('0px 1px 0px 0px');\n expect(borderWidth).not.toBe('0px 0px 0px 1px');\n });\n it('does not render a vertical border on the rightmost column', async () => {\n table.setProperty('bordered', 'vertical');\n await e2ePage.waitForChanges();\n const borderWidth = await getCSSProperty(e2ePage, ['q2-data-table', 'col:last-child'], 'border-width');\n expect(borderWidth).toBe('0px');\n expect(borderWidth).not.toBe('0px 1px 0px 0px');\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.12) 0px 0px 2px 0px, rgba(0, 0, 0, 0.14) 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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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 a q2-icon and message when no row data provided', async () => {\n specPage.root.headers = headerData;\n specPage.root.rows = [];\n await specPage.waitForChanges();\n\n const icon = specPage.root.shadowRoot.querySelector('q2-icon');\n const message = specPage.root.shadowRoot.querySelector('p');\n expect(icon).toBeTruthy();\n expect(message).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n <tr class=\"empty-state\">\n <td colSpan=\"2\">\n <slot name=\"empty-table\">\n <div class=\"empty-state-content\">\n <q2-icon type=\"inbox\"></q2-icon>\n <p>tecton.element.dataTable.emptyMessage</p>\n </div>\n </slot>\n </td>\n </tr>\n </tbody>\n `);\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 describe('striped', () => {\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 table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n table.setProperty('striped', true);\n await e2ePage.waitForChanges();\n });\n it('sets the background on even-numbered rows', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr#row-2'], 'background-color')).toBe(\n 'rgb(242, 242, 242)'\n );\n });\n it('maintains transparent background on odd-numbered rows', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr#row-1'], 'background-color')).toBe(\n 'rgba(0, 0, 0, 0)'\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 describe('vertical-align', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n });\n\n it('applies vertical-align class name to cells when provided', async () => {\n headerData.map(header => {\n header.verticalAlign = 'top';\n });\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\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=\"vertical-align-top\">\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td class=\"vertical-align-top\">\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('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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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 describe('row and header cell slots', () => {\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 table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n });\n\n it('renders row slots for custom cell content', async () => {\n expect(await e2ePage.find('q2-data-table >>> tr td slot')).toBeTruthy();\n });\n\n it('renders header slots for custom header content', async () => {\n expect(await e2ePage.find('q2-data-table >>> th div.header-content slot')).toBeTruthy();\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 verticalAlign: 'bottom',\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 verticalAlign: 'bottom',\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 verticalAlign: 'bottom',\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 expect(nameCell).toHaveProperty('verticalAlign', 'bottom');\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 verticalAlign: 'top',\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]).not.toHaveProperty('sorted');\n });\n\n it('calls onSort and updates the serializedHeaders and serializedRows properties', () => {\n const cachedSerializedRows = dataTable.serializedRows;\n dataTable.onSort(dataTable.serializedHeaders[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 ...dataTable.serializedHeaders[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(dataTable.serializedHeaders[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]).not.toHaveProperty('sorted');\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 expect(dataTable.someRowsSelected).toBe(true);\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 expect(dataTable.someRowsSelected).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 expect(dataTable.someRowsSelected).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 and someRowsSelected to false 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 expect(dataTable.someRowsSelected).toBe(true);\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 expect(dataTable.someRowsSelected).toBe(false);\n });\n it('updates someRowsSelected to true and allRowsSelected to false when only some 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 expect(dataTable.someRowsSelected).toBe(true);\n expect(dataTable.allRowsSelected).toBe(false);\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\n describe('when sortable property is false in header data', () => {\n beforeEach(async () => {\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: false }))\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('does not render sorting control', async () => {\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\n expect(emailSortHeader).not.toHaveClass('sorted');\n expect(emailSortControl).toBeFalsy();\n expect(emailHeaderIcon).toBeFalsy();\n });\n });\n\n describe('when sortable property is true in header data', () => {\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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('when sortable property is \"auto\" in header data', () => {\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: 'auto' }))\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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: 'auto',\n },\n direction: 'ASC',\n });\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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: 'auto',\n sorted: 'ASC',\n },\n direction: 'DESC',\n });\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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('when sortable property is \"manual\" in header data', () => {\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: 'manual' }))\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 but does not mutate rows', async () => {\n const sortSpy = await table.spyOnEvent('sort');\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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: 'manual',\n },\n direction: 'ASC',\n });\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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: 'manual',\n },\n direction: 'ASC',\n });\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\n expect(emailHeaderIcon).toEqualAttribute('type', 'sort');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.clickToSort');\n });\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 describe('Test methods', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `\n <q2-data-table selectable clickable>\n <div slot=\"row-3-expandable-content\">\n <h3>Thursday Was Great</h3>\n <p>But you already knew that.</p>\n </div>\n </q2-data-table>\n `,\n });\n\n table = await e2ePage.find('q2-data-table');\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: 'auto' }))\n );\n table.setProperty('rows', rowData);\n table.setProperty('selectable', true);\n table.setProperty('clickable', true);\n await e2ePage.waitForChanges();\n });\n\n it('sortColumn()', async () => {\n const sortSpy = await table.spyOnEvent('sort');\n expect(sortSpy).toHaveReceivedEventTimes(0);\n let cellText = await e2ePage.find('q2-data-table >>> td slot');\n expect(cellText.textContent).toBe('Thor');\n await table.callMethod('sortColumn', { key: 'name', sorted: 'DESC' });\n await e2ePage.waitForChanges();\n cellText = await e2ePage.find('q2-data-table >>> td slot');\n expect(cellText.textContent).toBe('Captain America');\n expect(sortSpy).toHaveReceivedEventTimes(1);\n });\n\n it('toggleRowExpansion()', async () => {\n const toggleSpy = await table.spyOnEvent('toggle');\n expect(toggleSpy).toHaveReceivedEventTimes(0);\n expect(table.shadowRoot.querySelector('table .expandable-row')).toHaveAttribute('hidden');\n await table.callMethod('toggleRowExpansion', 3);\n await e2ePage.waitForChanges();\n expect(table.shadowRoot.querySelector('table .expandable-row')).not.toHaveAttribute('hidden');\n expect(toggleSpy).toHaveReceivedEventTimes(1);\n });\n\n it('toggleRowSelect()', async () => {\n const selectSpy = await table.spyOnEvent('select');\n expect(selectSpy).toHaveReceivedEventTimes(0);\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).not.toHaveAttribute('checked');\n await table.callMethod('toggleRowSelect', 3);\n await e2ePage.waitForChanges();\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).toHaveAttribute('checked');\n expect(selectSpy).toHaveReceivedEventTimes(1);\n });\n\n it('clickRow()', async () => {\n const clickSpy = await table.spyOnEvent('click');\n expect(clickSpy).toHaveReceivedEventTimes(0);\n await table.callMethod('clickRow', 3);\n expect(clickSpy).toHaveReceivedEventTimes(1);\n });\n\n it('getCellContent()', async () => {\n const content = await table.callMethod('getCellContent', 3, 'name');\n expect(content).toBe('Captain America');\n });\n\n it('toggleSelectAllRows()', async () => {\n const selectAllRowsSpy = await table.spyOnEvent('selectAllRows');\n expect(table.shadowRoot.querySelector('table th q2-checkbox')).not.toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-1 q2-checkbox')).not.toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-2 q2-checkbox')).not.toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).not.toHaveAttribute('checked');\n await table.callMethod('toggleSelectAllRows');\n await e2ePage.waitForChanges();\n expect(table.shadowRoot.querySelector('table th q2-checkbox')).toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).toHaveAttribute('checked');\n expect(selectAllRowsSpy).toHaveReceivedEventDetail({\n checked: true,\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', 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 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 table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n const hasViolations = await evaluateA11y(e2ePage);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {});\n describe('Keyboard Controls', () => {});\n describe('Other', () => {});\n });\n});\n"]}
1
+ {"version":3,"file":"q2-data-table-test.e2e.js","sourceRoot":"","sources":["../../../../../src/components/q2-data-table/test/q2-data-table-test.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAqC,MAAM,kBAAkB,CAAC;AAElF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,IAAI,OAAgB,CAAC;IACrB,IAAI,QAAkB,CAAC;IACvB,IAAI,KAAiB,CAAC;IACtB,IAAI,UAA+B,CAAC;IACpC,IAAI,OAAyB,CAAC;IAE9B,UAAU,CAAC,GAAG,EAAE;QACZ,UAAU,GAAG;YACT,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;YACjD,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;SACnC,CAAC;QACF,OAAO,GAAG;YACN;gBACI,EAAE,EAAE,CAAC;gBACL,KAAK,EAAE;oBACH,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,8BAA8B;iBACxC;aACJ;YACD;gBACI,EAAE,EAAE,CAAC;gBACL,KAAK,EAAE;oBACH,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,qBAAqB;iBAC/B;aACJ;YACD;gBACI,EAAE,EAAE,CAAC;gBACL,KAAK,EAAE;oBACH,IAAI,EAAE,iBAAiB;oBACvB,KAAK,EAAE,0BAA0B;iBACpC;aACJ;SACJ,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,KAAK,EAAE,IAAa,EAAE,SAA4B,EAAE,IAAY,EAAE,EAAE;QACvF,IAAI,YAAY,CAAC;QACjB,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;YAC7B,MAAM,CAAC,aAAa,EAAE,GAAG,kBAAkB,CAAC,GAAG,SAAS,CAAC;YACzD,YAAY,GAAG,aAAa,CAAC;YAC7B,eAAe,GAAG,kBAAkB,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,YAAY,GAAG,SAAS,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CACb,YAAY,EACZ,CAAC,EAAe,EAAE,eAAmB,EAAE,IAAY,EAAE,EAAE;YACnD,IAAI,CAAC,CAAC,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,CAAA,EAAE,CAAC;gBAC5B,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAC/B,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;YACP,CAAC;YACD,OAAO,gBAAgB,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9D,CAAC,EACD,eAAe,EACf,IAAI,CACP,CAAC;IACN,CAAC,CAAC;IAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,iCAAiC,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,MAAM,+BAA+B,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YACrB,OAAO,GAAG,MAAM,KAAK,CAAC;gBAClB,IAAI,EAAE,iCAAiC;aAC1C,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YAC/E,OAAO,GAAG,MAAM,KAAK,CAAC;gBAClB,IAAI,EAAE,iCAAiC;aAC1C,CAAC,CAAC;YACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5C,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACxB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE;gBACzB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;gBAC9B,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;gBAChC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;gBACpC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;gBAC9B,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;gBAChC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;aAC/B,CAAC,CAAC;YACH,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAE/B,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAEjD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAEjE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC1B,IAAI,YAAuB,CAAC;QAE5B,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,MAAM,KAAK,CAAC;gBAClB,IAAI,EAAE,iCAAiC;aAC1C,CAAC,CAAC;YACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC/C,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAE/B,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAEzB,MAAM,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAC3D,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACvB,IAAY,CAAC,cAAc,CAAC,YAAY,GAAG,YAAY,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAClD,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAClD,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QACxB,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;gBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;gBACzB,IAAI,EAAE,iCAAiC;aAC1C,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACpC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;gBACjB;oBACI,EAAE,EAAE,CAAC;oBACL,KAAK,EAAE;wBACH,IAAI,EAAE;4BACF,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,SAAS,EAAE,uBAAuB;yBACrC;wBACD,KAAK,EAAE,8BAA8B;qBACxC;iBACJ;aACJ,CAAC;YACF,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;;;aAQzE,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACtC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;gBACjB;oBACI,EAAE,EAAE,CAAC;oBACL,KAAK,EAAE;wBACH,IAAI,EAAE;4BACF,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,OAAO;4BACd,SAAS,EAAE,cAAc;yBAC5B;wBACD,KAAK,EAAE,8BAA8B;qBACxC;iBACJ;aACJ,CAAC;YACF,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;;;aAQzE,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACpC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;gBACjB;oBACI,EAAE,EAAE,CAAC;oBACL,KAAK,EAAE;wBACH,IAAI,EAAE;4BACF,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,YAAY;4BACnB,SAAS,EAAE,eAAe;yBAC7B;wBACD,KAAK,EAAE,8BAA8B;qBACxC;iBACJ;aACJ,CAAC;YACF,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;aAMzE,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACpC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;gBACjB;oBACI,EAAE,EAAE,CAAC;oBACL,KAAK,EAAE;wBACH,IAAI,EAAE;4BACF,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,UAAU;4BACjB,SAAS,EAAE,UAAU;yBACxB;wBACD,KAAK,EAAE,8BAA8B;qBACxC;iBACJ;aACJ,CAAC;YACF,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;aAMzE,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC/B,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;gBACtC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;oBACjB;wBACI,EAAE,EAAE,CAAC;wBACL,KAAK,EAAE;4BACH,IAAI,EAAE;gCACF,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,KAAK;6BACf;4BACD,KAAK,EAAE,8BAA8B;yBACxC;qBACJ;iBACJ,CAAC;gBACF,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;iBAMzE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBAClD,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;oBACjB;wBACI,EAAE,EAAE,CAAC;wBACL,KAAK,EAAE;4BACH,IAAI,EAAE;gCACF,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,KAAK;6BACf;4BACD,KAAK,EAAE,8BAA8B;yBACxC;qBACJ;iBACJ,CAAC;gBACF,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;iBAMzE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBAClD,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;oBACjB;wBACI,EAAE,EAAE,CAAC;wBACL,KAAK,EAAE;4BACH,IAAI,EAAE;gCACF,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,CAAC;6BACX;4BACD,KAAK,EAAE,8BAA8B;yBACxC;qBACJ;iBACJ,CAAC;gBACF,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;iBAMzE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;gBACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;oBACjB;wBACI,EAAE,EAAE,CAAC;wBACL,KAAK,EAAE;4BACH,IAAI,EAAE;gCACF,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,IAAI;6BACd;4BACD,KAAK,EAAE,8BAA8B;yBACxC;qBACJ;iBACJ,CAAC;gBACF,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;iBAMzE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACrC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG;gBACjB;oBACI,EAAE,EAAE,CAAC;oBACL,KAAK,EAAE;wBACH,IAAI,EAAE;4BACF,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,OAAO;4BACd,WAAW,EAAE,SAAS;4BACtB,SAAS,EAAE,cAAc;yBAC5B;wBACD,KAAK,EAAE,8BAA8B;qBACxC;iBACJ;aACJ,CAAC;YACF,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;aAMzE,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;gBAC7E,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC9F,MAAM,CACT,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;gBAC1C,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBACxC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC9F,KAAK,CACR,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;gBAC9C,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBAC5C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC9F,MAAM,CACT,CAAC;YACN,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACtB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBACzD,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3F,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5F,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxG,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;gBAChF,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACpC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CACrF,aAAa,CAChB,CAAC;gBACF,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnG,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAC/E,oBAAoB,CACvB,CAAC;gBACF,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CACpF,iBAAiB,CACpB,CAAC;YACN,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACnE,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBAC5C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CACrF,aAAa,CAChB,CAAC;gBACF,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnG,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAC/E,oBAAoB,CACvB,CAAC;gBACF,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CACpF,iBAAiB,CACpB,CAAC;YACN,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;gBAClE,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAC1C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACxG,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9F,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAChF,oBAAoB,CACvB,CAAC;gBACF,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CACzF,aAAa,CAChB,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;gBAC3E,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACtC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACxG,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9F,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAChF,oBAAoB,CACvB,CAAC;gBACF,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CACrF,aAAa,CAChB,CAAC;gBACF,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnG,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAC/E,oBAAoB,CACvB,CAAC;YACN,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;gBAC7E,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAC1C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,iBAAiB,CAAC,EAAE,cAAc,CAAC,CAAC;gBACxG,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;gBACvE,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAC1C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,cAAc,CAAC,CAAC;gBACvG,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACtB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBACzD,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtG,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;gBAC3C,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACpC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CACrF,0EAA0E,CAC7E,CAAC;YACN,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACvB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAAM,MAAM,KAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,KAAK,MAAM,IAAG,CAAC,CAAC;gBACnG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;gBAC1E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACzF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBAC5E,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBAC7E,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBAE5E,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/F,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC1D,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC/B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBAC5E,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBAC7E,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBAC5E,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC;gBAE/F,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC9B,MAAM,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;gBACjC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACxD,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;gBACjC,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;oBAClE,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBAC/B,QAAQ,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBACnC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;oBAC5E,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;oBAC7E,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;oBAC5E,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC;oBAE/F,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;oBAC9B,MAAM,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;oBACjC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACtC,MAAM,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;oBAClC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAAM,MAAM,KAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,KAAK,MAAM,IAAG,CAAC,CAAC;gBACnG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC3F,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBACtD,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC9E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACpF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;iBAMlF,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;gBAC3B,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;oBACjF,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;oBAChC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAChC,MAAM,CACF,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAC9E,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;oBAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CACxF,UAAU,CACb,CAAC;gBACN,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;oBAC3D,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBAC7B,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;oBAChC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAAC,CAAC,eAAe,CAC/F,UAAU,CACb,CAAC;oBACF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC,eAAe,CACpF,UAAU,CACb,CAAC;gBACN,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACjE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC1E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;gBAChD,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;gBACvC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACvE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;;iBAErE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;YACzB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,wDAAwD;iBACjE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;gBAC1E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAChF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;;iBAErE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACjE,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACjC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC5E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;;iBAErE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YACxB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBAChE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACjF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;gBAClD,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAChC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACjF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtG,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;gBAC1E,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAChC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBAC1E,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;gBAC9F,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC7C,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;gBACvE,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAChC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACxB,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;wBACf,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACxB,CAAC;oBACD,OAAO,GAAG,CAAC;gBACf,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAE7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBAC1E,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;gBAC9F,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACzC,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;gBAC7E,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAChC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACxB,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;wBACf,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACxB,CAAC;oBACD,OAAO,GAAG,CAAC;gBACf,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAE7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBAC1E,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;gBAC9F,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACzC,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBAEpD,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACjC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAEhC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBAC/E,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;gBAC3F,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAClD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YACxB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAChC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;gBAC7E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACxE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC7F,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC9E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAClG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;iBAMtE,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;iBAsBnE,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;0BAE1D,OAAO;qBACJ,GAAG,CACA,GAAG,CAAC,EAAE,CAAC;kDACW,GAAG,CAAC,EAAE;;;;;8DAKM,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,IAAI;;;;;8DAKN,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,KAAK;;;;;iCAKpC,CACJ;qBACA,IAAI,CAAC,EAAE,CAAC;;iBAEpB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBAC7D,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACpC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACxE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC7F,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC9E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC9F,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;iBAMtE,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;iBAgBnE,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;0BAE1D,OAAO;qBACJ,GAAG,CACA,GAAG,CAAC,EAAE,CAAC;kDACW,GAAG,CAAC,EAAE;;;;;8DAKM,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,IAAI;;;;;8DAKN,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,KAAK;;;;;iCAKpC,CACJ;qBACA,IAAI,CAAC,EAAE,CAAC;;iBAEpB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACjE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACvE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACpE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;gBAChD,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBACnC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC3E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACzF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACxE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;iBAKtE,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;iBAenE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YAClB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;gBACrE,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;gBACxB,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAEhC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;;iBAanE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;gBAC7C,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACxE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC3F,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;0BAE1D,OAAO;qBACJ,GAAG,CACA,GAAG,CAAC,EAAE,CAAC;kDACW,GAAG,CAAC,EAAE;;8DAEM,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,IAAI;;;;;8DAKN,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,KAAK;;;;;iCAKpC,CACJ;qBACA,IAAI,CAAC,EAAE,CAAC;;iBAEpB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5C,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAC/F,oBAAoB,CACvB,CAAC;YACN,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACnE,MAAM,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAC/F,kBAAkB,CACrB,CAAC;YACN,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACtB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;YAC3B,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBAC7D,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5C,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;gBAC1F,MAAM,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;gBAClE,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5C,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;oBACjC,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;wBACxB,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;oBACzB,CAAC;oBACD,OAAO,MAAM,CAAC;gBAClB,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;gBAC1F,MAAM,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAE3C,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAC9C,OAAO,EACP,CAAC,eAAe,EAAE,yBAAyB,CAAC,EAC5C,oBAAoB,CACvB,CAAC;gBACF,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC5B,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;gBACtE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;oBACpB,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;gBACjC,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;0BAE1D,OAAO;qBACJ,GAAG,CACA,GAAG,CAAC,EAAE,CAAC;kDACW,GAAG,CAAC,EAAE;;8DAEM,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,IAAI;;;;;8DAKN,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,KAAK;;;;;iCAKpC,CACJ;qBACA,IAAI,CAAC,EAAE,CAAC;;iBAEpB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACvB,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBAC7D,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5C,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAE9E,MAAM,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;oBAChE,EAAE,CAAC,SAAS,GAAG;;;;qBAId,CAAC;gBACN,CAAC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACzF,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC9F,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACzF,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBAE7F,MAAM,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;oBAChE,EAAE,CAAC,SAAS,GAAG;;;;qBAId,CAAC;gBACN,CAAC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACzF,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC7F,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACzF,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBAE9F,MAAM,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;oBAChE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;gBACxB,CAAC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACxF,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC7F,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACxF,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACjG,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;gBACpE,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE;;;;;;;;;;;;;;qBAcL;iBACJ,CAAC,CAAC;gBAEH,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACxE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC7F,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;iBAMtE,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;iBAoBnE,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;0BAE1D,OAAO;qBACJ,GAAG,CACA,GAAG,CAAC,EAAE,CAAC;kDACW,GAAG,CAAC,EAAE;;8DAEM,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,IAAI;;;;;8DAKN,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,KAAK;;;;;8CAKvB,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE;;;iCAGtE,CACJ;qBACA,IAAI,CAAC,EAAE,CAAC;;iBAEpB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAChC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBAC7D,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5C,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAE5F,MAAM,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;oBAChE,EAAE,CAAC,SAAS,GAAG;;;;qBAId,CAAC;gBACN,CAAC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACvG,MAAM,CACF,MAAM,OAAO,CAAC,IAAI,CACd,8FAA8F,CACjG,CACJ,CAAC,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACvG,MAAM,CACF,MAAM,OAAO,CAAC,IAAI,CACd,8FAA8F,CACjG,CACJ,CAAC,SAAS,EAAE,CAAC;gBAEd,MAAM,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;oBAChE,EAAE,CAAC,SAAS,GAAG;;;;qBAId,CAAC;gBACN,CAAC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACvG,MAAM,CACF,MAAM,OAAO,CAAC,IAAI,CACd,8FAA8F,CACjG,CACJ,CAAC,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACvG,MAAM,CACF,MAAM,OAAO,CAAC,IAAI,CACd,8FAA8F,CACjG,CACJ,CAAC,UAAU,EAAE,CAAC;gBAEf,MAAM,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;oBAChE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;gBACxB,CAAC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAE/B,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACtG,MAAM,CACF,MAAM,OAAO,CAAC,IAAI,CACd,8FAA8F,CACjG,CACJ,CAAC,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACtG,MAAM,CACF,MAAM,OAAO,CAAC,IAAI,CACd,8FAA8F,CACjG,CACJ,CAAC,SAAS,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;gBAC3E,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE;;;;;;;;;qBASL;iBACJ,CAAC,CAAC;gBAEH,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;gBACxE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC7F,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;iBAMtE,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;iBAoBnE,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;;0BAE1D,OAAO;qBACJ,GAAG,CACA,GAAG,CAAC,EAAE,CAAC;kDACW,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE;;8DAErD,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,IAAI;;;;;8DAKN,GAAG,CAAC,EAAE;;sDAEd,GAAG,CAAC,KAAK,CAAC,KAAK;;;;0CAKzB,GAAG,CAAC,EAAE,KAAK,CAAC;oBACR,CAAC,CAAC;;;;;;;;;;;iDAWD;oBACD,CAAC,CAAC,iDACV;;sCAGA,GAAG,CAAC,EAAE,KAAK,CAAC;oBACR,CAAC,CAAC;;;;;;;qCAOT;oBACO,CAAC,CAAC,EACV;;iCAEH,CACJ;qBACA,IAAI,CAAC,EAAE,CAAC;;iBAEpB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACvC,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5C,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAC5E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAC5F,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QAClB,IAAI,SAAsB,CAAC;QAC3B,UAAU,CAAC,GAAG,EAAE;YACZ,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC5B,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;gBAC7B,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBACrC,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;gBAExC,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;oBAC9B,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;oBACjD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;iBACnC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;gBAC3C,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACzE,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;gBAExC,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;oBAC9B,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;oBAC9B,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;iBACjD,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;gBAC/C,MAAM,gBAAgB,GAAsB;oBACxC,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,KAAK;oBACZ,GAAG,EAAE,MAAM;oBACX,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,OAAO;oBACd,eAAe,EAAE,kBAAkB;oBACnC,MAAM,EAAE,KAAK;oBACb,aAAa,EAAE,QAAQ;iBAC1B,CAAC;gBACF,SAAS,CAAC,cAAc,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC7C,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;gBAExC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;YACzB,IAAI,YAAY,CAAC;YACjB,UAAU,CAAC,GAAG,EAAE;gBACZ,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;gBAC7B,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/B,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;gBAErC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;oBAC3B;wBACI,EAAE,EAAE,CAAC;wBACL,KAAK,EAAE;4BACH,IAAI,EAAE;gCACF,KAAK,EAAE,MAAM;gCACb,SAAS,EAAE,SAAS;gCACpB,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE,SAAS;gCAChB,WAAW,EAAE,SAAS;gCACtB,UAAU,EAAE,SAAS;6BACxB;4BACD,KAAK,EAAE;gCACH,KAAK,EAAE,8BAA8B;gCACrC,SAAS,EAAE,SAAS;gCACpB,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE,SAAS;gCAChB,WAAW,EAAE,SAAS;gCACtB,UAAU,EAAE,SAAS;6BACxB;yBACJ;wBACD,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,KAAK;qBAClB;oBACD;wBACI,EAAE,EAAE,CAAC;wBACL,KAAK,EAAE;4BACH,IAAI,EAAE;gCACF,KAAK,EAAE,UAAU;gCACjB,SAAS,EAAE,SAAS;gCACpB,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE,SAAS;gCAChB,WAAW,EAAE,SAAS;gCACtB,UAAU,EAAE,SAAS;6BACxB;4BACD,KAAK,EAAE;gCACH,KAAK,EAAE,qBAAqB;gCAC5B,SAAS,EAAE,SAAS;gCACpB,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE,SAAS;gCAChB,WAAW,EAAE,SAAS;gCACtB,UAAU,EAAE,SAAS;6BACxB;yBACJ;wBACD,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,KAAK;qBAClB;oBACD;wBACI,EAAE,EAAE,CAAC;wBACL,KAAK,EAAE;4BACH,IAAI,EAAE;gCACF,KAAK,EAAE,iBAAiB;gCACxB,SAAS,EAAE,SAAS;gCACpB,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE,SAAS;gCAChB,WAAW,EAAE,SAAS;gCACtB,UAAU,EAAE,SAAS;6BACxB;4BACD,KAAK,EAAE;gCACH,KAAK,EAAE,0BAA0B;gCACjC,SAAS,EAAE,SAAS;gCACpB,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE,SAAS;gCAChB,WAAW,EAAE,SAAS;gCACtB,UAAU,EAAE,SAAS;6BACxB;yBACJ;wBACD,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,KAAK;qBAClB;iBACJ,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAChD,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC7B,SAAS,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBACtC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAChD,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC7B,SAAS,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBACtC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAChD,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC7B,SAAS,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBACtC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;gBAC3E,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;gBACjC,SAAS,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBACtC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE;oBAC7D,KAAK,EAAE,SAAS;oBAChB,SAAS,EAAE,SAAS;oBACpB,WAAW,EAAE,SAAS;oBACtB,UAAU,EAAE,SAAS;oBACrB,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM;iBAChB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;gBAC9C,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG;oBACtB,KAAK,EAAE,KAAK;oBACZ,SAAS,EAAE,gBAAgB;oBAC3B,WAAW,EAAE,SAAS;oBACtB,UAAU,EAAE,WAAW;oBACvB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,MAAM;oBACb,aAAa,EAAE,QAAQ;iBAC1B,CAAC;gBACF,SAAS,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBACtC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,iEAAiE,EAAE,GAAG,EAAE;gBAC7E,IAAI,eAAe,CAAC;gBACpB,UAAU,CAAC,GAAG,EAAE;oBACZ,eAAe,mCACR,UAAU,CAAC,CAAC,CAAC,KAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,SAAS,EACtB,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,CAAC,EACZ,aAAa,EAAE,QAAQ,GAC1B,CAAC;oBACF,SAAS,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;gBAChD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;oBACpD,SAAS,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;oBACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;oBAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;oBAC3D,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;oBAC7F,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG;wBACtB,KAAK,EAAE,MAAM;wBACb,SAAS,EAAE,SAAS;wBACpB,KAAK,EAAE,OAAO;wBACd,SAAS,EAAE,CAAC;wBACZ,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,QAAQ;wBACrB,UAAU,EAAE,SAAS;wBACrB,aAAa,EAAE,KAAK;qBACvB,CAAC;oBACF,SAAS,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;oBACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;gBAC9C,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;oBAChF,QAAQ,GAAG,MAAM,WAAW,CAAC;wBACzB,UAAU,EAAE,CAAC,WAAW,CAAC;wBACzB,IAAI,EAAE,iCAAiC;qBAC1C,CAAC,CAAC;oBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;oBACnC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;wBACxB,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;4BACf,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACxB,CAAC;wBACD,OAAO,GAAG,CAAC;oBACf,CAAC,CAAC,CAAC;oBACH,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;oBAC7B,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;oBAChC,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAEhC,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAAC;oBACnG,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;oBACvD,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBAE3D,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;wBACxB,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACpB,OAAO,GAAG,CAAC;oBACf,CAAC,CAAC,CAAC;oBACH,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;oBAC7B,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAEhC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAC3D,mCAAmC,CACtC,CAAC;oBACF,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;oBACzD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBACxD,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;gBAC1B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;oBACtD,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAC/B,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;oBACtD,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAC3B,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAC/B,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;oBACrC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;gBACzB,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;oBAC/C,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAC/B,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;oBAClE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAC3B,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAC/B,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;gBAC7B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;oBACzC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;oBACrC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBACrC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;oBAC7D,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7C,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;oBAC5B,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;oBACxE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7C,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBACnC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;oBAC5E,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7C,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC9B,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;gBAC3B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;oBACvD,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;oBACnF,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBACrC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;wBACpC,IAAI,oBAAO,UAAU,CAAC,CAAC,CAAC,CAAE;wBAC1B,KAAK,oBAAO,UAAU,CAAC,CAAC,CAAC,CAAE;qBAC9B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC5B,UAAU,CAAC,GAAG,EAAE;gBACZ,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBACrC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACpB,IAAI,QAAQ,CAAC;gBACb,UAAU,CAAC,GAAG,EAAE;oBACZ,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBAE7C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACvE,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBACxE,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;oBACpF,MAAM,oBAAoB,GAAG,SAAS,CAAC,cAAc,CAAC;oBACtD,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEjD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACvE,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACvE,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,oBAAoB,kCACnD,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,KACjC,MAAM,EAAE,KAAK,IACf,CAAC;gBACP,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;oBACtE,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;wBACnC,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;wBACtD,SAAS,CAAC,cAAc,EAAE,CAAC;wBAC3B,OAAO,SAAS,CAAC;oBACrB,CAAC,CAAC,CAAC;oBAEH,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEjD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;wBAC7C,SAAS,EAAE,KAAK;wBAChB,MAAM,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;qBACzC,CAAC,CAAC;oBACH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACvE,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBAC5C,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;gBAC7B,UAAU,CAAC,GAAG,EAAE;oBACZ,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;oBACrD,SAAS,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC3F,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;oBACnD,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC/D,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvE,SAAS,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC5F,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;oBACxE,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;wBACrC,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;wBACtD,SAAS,CAAC,cAAc,EAAE,CAAC;wBAC3B,OAAO,SAAS,CAAC;oBACrB,CAAC,CAAC,CAAC;oBAEH,SAAS,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;oBAEnF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;wBAC/C,WAAW,EAAE,IAAI;wBACjB,GAAG,EAAE,SAAS;wBACd,IAAI,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,iCAAM,GAAG,KAAE,QAAQ,EAAE,IAAI,IAAG,CAAC;qBAC1E,CAAC,CAAC;oBAEH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;oBAC5D,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAC5C,SAAS,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC3F,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;gBACzB,UAAU,CAAC,GAAG,EAAE;oBACZ,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;oBACnB,SAAS,CAAC,WAAW,CACjB,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,EACvD,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAC9B,CAAC;oBACF,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxD,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC9C,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;oBACrB,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,iCAAM,GAAG,KAAE,QAAQ,EAAE,KAAK,KAAK,CAAC,IAAG,CAAC,CAAC,CAAC;oBACxF,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxD,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9C,SAAS,CAAC,WAAW,CACjB,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,EACxD,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAC9B,CAAC;oBACF,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzD,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC9C,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;oBACxE,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;wBACrC,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;wBAC7D,cAAc,CAAC,cAAc,EAAE,CAAC;wBAChC,OAAO,cAAc,CAAC;oBAC1B,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzD,SAAS,CAAC,WAAW,CACjB,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,EACvD,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAC9B,CAAC;oBACF,MAAM,WAAW,mCAAQ,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,KAAE,QAAQ,EAAE,IAAI,GAAE,CAAC;oBACvE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;wBAC/C,GAAG,EAAE,WAAW;wBAChB,IAAI,EAAE,CAAC,WAAW,CAAC;wBACnB,WAAW,EAAE,KAAK;qBACrB,CAAC,CAAC;oBACH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzD,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,0GAA0G,EAAE,GAAG,EAAE;oBAChH,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,iCAAM,GAAG,KAAE,QAAQ,EAAE,KAAK,KAAK,CAAC,IAAG,CAAC,CAAC,CAAC;oBACxF,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzD,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9C,SAAS,CAAC,WAAW,CACjB,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,EACvD,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAC9B,CAAC;oBACF,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxD,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7C,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,gHAAgH,EAAE,GAAG,EAAE;oBACtH,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,iCAAM,GAAG,KAAE,QAAQ,EAAE,KAAK,KAAK,CAAC,IAAG,CAAC,CAAC,CAAC;oBACxF,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzD,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9C,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;gBAC7B,UAAU,CAAC,GAAG,EAAE;oBACZ,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;oBACjC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;gBACtC,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;oBAC/C,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;oBAE3B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;oBAC3C,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3F,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBACzD,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;oBACxD,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAEnC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;oBAC3C,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;oBACpD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChG,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;oBACjF,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;oBAC3C,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;oBACpD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBACzD,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;gBACxB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;oBACzC,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;oBAEjC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3E,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;wBAC9C,GAAG,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;qBACnC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;gBACzB,UAAU,CAAC,GAAG,EAAE;oBACZ,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5E,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;oBACnB,SAAS,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5E,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5D,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;oBAClB,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,iCAAM,GAAG,KAAE,QAAQ,EAAE,KAAK,KAAK,CAAC,IAAG,CAAC,CAAC,CAAC;oBACxF,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxD,SAAS,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5E,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;oBACxE,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;wBACrC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;wBAC1D,WAAW,CAAC,cAAc,EAAE,CAAC;wBAC7B,OAAO,WAAW,CAAC;oBACvB,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzD,SAAS,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5E,MAAM,WAAW,mCAAQ,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,KAAE,QAAQ,EAAE,IAAI,GAAE,CAAC;oBACvE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;wBAC/C,GAAG,EAAE,WAAW;qBACnB,CAAC,CAAC;oBACH,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;gBACtB,UAAU,CAAC,GAAG,EAAE;oBACZ,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBACrC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;oBACvE,MAAM,YAAY,GAAG,SAAS;yBACzB,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;yBAClE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACxB,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;oBAC7D,MAAM,YAAY,GAAG,SAAS;yBACzB,QAAQ,CAAC,SAAS,CAAC,cAAc,kCAAO,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAE,MAAM,EAAE,MAAM,IAAG;yBACzF,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACxB,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,MAAM,KAAK,CAAC;gBAClB,IAAI,EAAE;;;;;;;;;iBASL;aACJ,CAAC,CAAC;YACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,IAAI,YAAwB,CAAC;YAC7B,IAAI,QAAoB,CAAC;YACzB,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACrC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBAC3C,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,YAAY,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;gBAChG,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBACtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACjD,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG;oBACf,EAAE,EAAE,CAAC;oBACL,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE;wBACH,KAAK,EAAE;4BACH,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,qBAAqB;yBAC/B;wBACD,IAAI,EAAE;4BACF,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,UAAU;yBACpB;qBACJ;iBACJ,CAAC;gBAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,yBAAyB,CAAC;oBACvC,GAAG,EAAE,UAAU;iBAClB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;gBACnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACjD,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG;oBACf,EAAE,EAAE,CAAC;oBACL,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE;wBACH,KAAK,EAAE;4BACH,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,qBAAqB;yBAC/B;wBACD,IAAI,EAAE;4BACF,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,UAAU;yBACpB;qBACJ;iBACJ,CAAC;gBAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,yBAAyB,CAAC;oBACvC,GAAG,EAAE,UAAU;iBAClB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,IAAI,aAAyB,CAAC;YAC9B,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBACtC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,aAAa,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YAClG,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;gBAC3D,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACnD,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBACrD,aAAa,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,WAAW,GAAG;oBAChB,EAAE,EAAE,CAAC;oBACL,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE;wBACH,KAAK,EAAE;4BACH,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,qBAAqB;yBAC/B;wBACD,IAAI,EAAE;4BACF,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,UAAU;yBACpB;qBACJ;iBACJ,CAAC;gBAEF,MAAM,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC;oBACxC,GAAG,EAAE,WAAW;oBAChB,IAAI,EAAE,CAAC,WAAW,CAAC;oBACnB,WAAW,EAAE,KAAK;iBACrB,CAAC,CAAC;gBAEH,MAAM,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBACxD,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;oBAC1D,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;wBAClC,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC3B,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBACrD,aAAa,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;gBACrF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;gBAClF,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAClD,aAAa,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,IAAI,aAAyB,CAAC;YAC9B,IAAI,aAAyB,CAAC;YAC9B,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBACtC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,aAAa,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;gBAClG,aAAa,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;gBAC3D,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACnD,MAAM,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACzE,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAClD,aAAa,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG;oBACf,EAAE,EAAE,CAAC;oBACL,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE;wBACH,KAAK,EAAE;4BACH,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,qBAAqB;yBAC/B;wBACD,IAAI,EAAE;4BACF,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,UAAU;yBACpB;qBACJ;iBACJ,CAAC;gBAEF,MAAM,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC;oBACxC,GAAG,EAAE,UAAU;iBAClB,CAAC,CAAC;gBAEH,MAAM,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxE,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBACxD,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;oBAC1D,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;wBAClC,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC3B,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACzE,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAClD,aAAa,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACzE,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YAClB,IAAI,eAA2B,CAAC;YAChC,IAAI,gBAA4B,CAAC;YACjC,IAAI,eAA2B,CAAC;YAEhC,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;gBAC5D,UAAU,CAAC,KAAK,IAAI,EAAE;oBAClB,KAAK,CAAC,WAAW,CACb,SAAS,EACT,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAAM,MAAM,KAAE,QAAQ,EAAE,KAAK,IAAG,CAAC,CAC7D,CAAC;oBACF,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAC/B,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;oBAC1E,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;gBACtG,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;oBAC7C,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAClD,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,EAAE,CAAC;oBACrC,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,CAAC;gBACxC,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;gBAC3D,UAAU,CAAC,KAAK,IAAI,EAAE;oBAClB,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBACtC,KAAK,CAAC,WAAW,CACb,SAAS,EACT,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAAM,MAAM,KAAE,QAAQ,EAAE,IAAI,IAAG,CAAC,CAC5D,CAAC;oBACF,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAC/B,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;oBAC1E,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;gBACtG,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;oBAC/C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAE/C,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAClD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;oBAE1F,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC;wBACtC,MAAM,EAAE;4BACJ,GAAG,EAAE,OAAO;4BACZ,KAAK,EAAE,OAAO;4BACd,QAAQ,EAAE,IAAI;yBACjB;wBACD,SAAS,EAAE,KAAK;qBACnB,CAAC,CAAC;oBAEH,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAC9C,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC/D,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,0CAA0C,CAAC,CAAC;oBAE9F,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC;wBACtC,MAAM,EAAE;4BACJ,GAAG,EAAE,OAAO;4BACZ,KAAK,EAAE,OAAO;4BACd,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,KAAK;yBAChB;wBACD,SAAS,EAAE,MAAM;qBACpB,CAAC,CAAC;oBAEH,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC/D,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,2CAA2C,CAAC,CAAC;gBACnG,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;oBACxD,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;wBAC1D,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;4BAClC,KAAK,CAAC,cAAc,EAAE,CAAC;wBAC3B,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;oBAEH,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAClD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;oBAE1F,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAE/B,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAC9C,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC/D,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,0CAA0C,CAAC,CAAC;gBAClG,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;gBAC7D,UAAU,CAAC,KAAK,IAAI,EAAE;oBAClB,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBACtC,KAAK,CAAC,WAAW,CACb,SAAS,EACT,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAAM,MAAM,KAAE,QAAQ,EAAE,MAAM,IAAG,CAAC,CAC9D,CAAC;oBACF,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAC/B,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;oBAC1E,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;gBACtG,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;oBAC/C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAE/C,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAClD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;oBAE1F,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC;wBACtC,MAAM,EAAE;4BACJ,GAAG,EAAE,OAAO;4BACZ,KAAK,EAAE,OAAO;4BACd,QAAQ,EAAE,MAAM;yBACnB;wBACD,SAAS,EAAE,KAAK;qBACnB,CAAC,CAAC;oBAEH,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAC9C,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC/D,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,0CAA0C,CAAC,CAAC;oBAE9F,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC;wBACtC,MAAM,EAAE;4BACJ,GAAG,EAAE,OAAO;4BACZ,KAAK,EAAE,OAAO;4BACd,QAAQ,EAAE,MAAM;4BAChB,MAAM,EAAE,KAAK;yBAChB;wBACD,SAAS,EAAE,MAAM;qBACpB,CAAC,CAAC;oBAEH,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC/D,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,2CAA2C,CAAC,CAAC;gBACnG,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;oBACxD,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAA0B,EAAE,EAAE;wBAC1D,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;4BAClC,KAAK,CAAC,cAAc,EAAE,CAAC;wBAC3B,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;oBAEH,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAClD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;oBAE1F,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAE/B,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAC9C,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC/D,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,0CAA0C,CAAC,CAAC;gBAClG,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;gBAC/D,UAAU,CAAC,KAAK,IAAI,EAAE;oBAClB,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBACtC,KAAK,CAAC,WAAW,CACb,SAAS,EACT,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAAM,MAAM,KAAE,QAAQ,EAAE,QAAQ,IAAG,CAAC,CAChE,CAAC;oBACF,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAC/B,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;oBAC1E,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;gBACtG,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;oBACvD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAE/C,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAClD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;oBAE1F,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC;wBACtC,MAAM,EAAE;4BACJ,GAAG,EAAE,OAAO;4BACZ,KAAK,EAAE,OAAO;4BACd,QAAQ,EAAE,QAAQ;yBACrB;wBACD,SAAS,EAAE,KAAK;qBACnB,CAAC,CAAC;oBAEH,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAClD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;oBAE1F,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;oBAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC;wBACtC,MAAM,EAAE;4BACJ,GAAG,EAAE,OAAO;4BACZ,KAAK,EAAE,OAAO;4BACd,QAAQ,EAAE,QAAQ;yBACrB;wBACD,SAAS,EAAE,KAAK;qBACnB,CAAC,CAAC;oBAEH,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,8DAA8D,CACjE,CAAC;oBACF,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;gBAC9F,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;YAC3B,IAAI,gBAA4B,CAAC;YACjC,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClB,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBACtC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACjG,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBACxD,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;gBACjE,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBACxD,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,gBAAgB,CAAC,CAAC,yBAAyB,CAAC;oBAC/C,OAAO,EAAE,IAAI;iBAChB,CAAC,CAAC;gBACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC1B,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,MAAM,KAAK,CAAC;gBAClB,IAAI,EAAE;;;;;;;iBAOL;aACJ,CAAC,CAAC;YAEH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5C,KAAK,CAAC,WAAW,CACb,SAAS,EACT,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAAM,MAAM,KAAE,QAAQ,EAAE,MAAM,IAAG,CAAC,CAC9D,CAAC;YACF,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACtC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACrC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC/D,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACtE,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC3D,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACrD,MAAM,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC1F,MAAM,KAAK,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;YAChD,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC9F,MAAM,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACpG,MAAM,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAChG,MAAM,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC9F,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACpG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACpG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACpG,MAAM,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAC9C,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC1F,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAChG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAChG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAChG,MAAM,CAAC,gBAAgB,CAAC,CAAC,yBAAyB,CAAC;gBAC/C,OAAO,EAAE,IAAI;aAChB,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC3B,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACpD,OAAO,GAAG,MAAM,KAAK,CAAC;oBAClB,IAAI,EAAE,iCAAiC;iBAC1C,CAAC,CAAC;gBACH,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5C,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;oBACxB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;oBAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;gBACrC,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE;oBACzB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;oBAC9B,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;oBAChC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;oBACpC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;oBAC9B,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;oBAChC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;iBAC/B,CAAC,CAAC;gBACH,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;gBAClD,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { E2EElement, E2EPage, SpecPage, newSpecPage } from '@stencil/core/testing';\nimport { evaluateA11y, getListOfStyleCompilationIssues, getNestedElementStyle, setup } from '@/utils/helpers';\nimport { Q2DataTable, Q2DataTableHeader, Q2DataTableRow } from '../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 it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-data-table></q2-data-table>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-data-table')).toHaveLength(0);\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 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 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 horizontal row borders when true (original implementation)', 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 expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-width')).not.toBe(\n '0px 1px 0px 0px'\n );\n });\n it('renders horizontal row borders when set to horizontal', async () => {\n table.setProperty('bordered', 'horizontal');\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 expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-width')).not.toBe(\n '0px 1px 0px 0px'\n );\n });\n it('renders vertical column borders when set to vertical', async () => {\n table.setProperty('bordered', 'vertical');\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-width')).toBe('0px 1px 0px 0px');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-style')).toBe('solid');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-color')).toBe(\n 'rgb(153, 153, 153)'\n );\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr'], 'border-width')).not.toBe(\n '0px 0px 1px'\n );\n });\n\n it('renders with vertical and horizontal borders when set to grid', async () => {\n table.setProperty('bordered', 'grid');\n await e2ePage.waitForChanges();\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-width')).toBe('0px 1px 0px 0px');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-style')).toBe('solid');\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'col'], 'border-color')).toBe(\n 'rgb(153, 153, 153)'\n );\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 it('does not render a left-side vertical border on the first column', async () => {\n table.setProperty('bordered', 'vertical');\n await e2ePage.waitForChanges();\n const borderWidth = await getCSSProperty(e2ePage, ['q2-data-table', 'col:first-child'], 'border-width');\n expect(borderWidth).toBe('0px 1px 0px 0px');\n expect(borderWidth).not.toBe('0px 0px 0px 1px');\n });\n it('does not render a vertical border on the rightmost column', async () => {\n table.setProperty('bordered', 'vertical');\n await e2ePage.waitForChanges();\n const borderWidth = await getCSSProperty(e2ePage, ['q2-data-table', 'col:last-child'], 'border-width');\n expect(borderWidth).toBe('0px');\n expect(borderWidth).not.toBe('0px 1px 0px 0px');\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.12) 0px 0px 2px 0px, rgba(0, 0, 0, 0.14) 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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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 a q2-icon and message when no row data provided', async () => {\n specPage.root.headers = headerData;\n specPage.root.rows = [];\n await specPage.waitForChanges();\n\n const icon = specPage.root.shadowRoot.querySelector('q2-icon');\n const message = specPage.root.shadowRoot.querySelector('p');\n expect(icon).toBeTruthy();\n expect(message).toBeTruthy();\n expect(specPage.root.shadowRoot.querySelector('tbody')).toEqualHtml(`\n <tbody>\n <tr class=\"empty-state\">\n <td colSpan=\"2\">\n <slot name=\"empty-table\">\n <div class=\"empty-state-content\">\n <q2-icon type=\"inbox\"></q2-icon>\n <p>tecton.element.dataTable.emptyMessage</p>\n </div>\n </slot>\n </td>\n </tr>\n </tbody>\n `);\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 describe('striped', () => {\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 table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n table.setProperty('striped', true);\n await e2ePage.waitForChanges();\n });\n it('sets the background on even-numbered rows', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr#row-2'], 'background-color')).toBe(\n 'rgb(242, 242, 242)'\n );\n });\n it('maintains transparent background on odd-numbered rows', async () => {\n expect(await getCSSProperty(e2ePage, ['q2-data-table', 'tbody tr#row-1'], 'background-color')).toBe(\n 'rgba(0, 0, 0, 0)'\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 describe('vertical-align', () => {\n beforeEach(async () => {\n specPage = await newSpecPage({\n components: [Q2DataTable],\n html: '<q2-data-table></q2-data-table>',\n });\n });\n\n it('applies vertical-align class name to cells when provided', async () => {\n headerData.map(header => {\n header.verticalAlign = 'top';\n });\n specPage.root.headers = headerData;\n specPage.root.rows = rowData;\n await specPage.waitForChanges();\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=\"vertical-align-top\">\n <slot name=\"row-${row.id}-cell-name\">\n <div>\n ${row.cells.name}\n </div>\n </slot>\n </td>\n <td class=\"vertical-align-top\">\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('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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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\">\n <slot name=\"header-cell-name\">Name</slot>\n </div>\n </th>\n <th id=\"header-email\">\n <div class=\"header-content\">\n <slot name=\"header-cell-email\">Email</slot>\n </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 describe('row and header cell slots', () => {\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 table.setProperty('headers', headerData);\n table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n });\n\n it('renders row slots for custom cell content', async () => {\n expect(await e2ePage.find('q2-data-table >>> tr td slot')).toBeTruthy();\n });\n\n it('renders header slots for custom header content', async () => {\n expect(await e2ePage.find('q2-data-table >>> th div.header-content slot')).toBeTruthy();\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 verticalAlign: 'bottom',\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 verticalAlign: 'bottom',\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 verticalAlign: 'bottom',\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 expect(nameCell).toHaveProperty('verticalAlign', 'bottom');\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 verticalAlign: 'top',\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]).not.toHaveProperty('sorted');\n });\n\n it('calls onSort and updates the serializedHeaders and serializedRows properties', () => {\n const cachedSerializedRows = dataTable.serializedRows;\n dataTable.onSort(dataTable.serializedHeaders[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 ...dataTable.serializedHeaders[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(dataTable.serializedHeaders[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]).not.toHaveProperty('sorted');\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 expect(dataTable.someRowsSelected).toBe(true);\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 expect(dataTable.someRowsSelected).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 expect(dataTable.someRowsSelected).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 and someRowsSelected to false 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 expect(dataTable.someRowsSelected).toBe(true);\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 expect(dataTable.someRowsSelected).toBe(false);\n });\n it('updates someRowsSelected to true and allRowsSelected to false when only some 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 expect(dataTable.someRowsSelected).toBe(true);\n expect(dataTable.allRowsSelected).toBe(false);\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\n describe('when sortable property is false in header data', () => {\n beforeEach(async () => {\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: false }))\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('does not render sorting control', async () => {\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\n expect(emailSortHeader).not.toHaveClass('sorted');\n expect(emailSortControl).toBeFalsy();\n expect(emailHeaderIcon).toBeFalsy();\n });\n });\n\n describe('when sortable property is true in header data', () => {\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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('when sortable property is \"auto\" in header data', () => {\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: 'auto' }))\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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: 'auto',\n },\n direction: 'ASC',\n });\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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: 'auto',\n sorted: 'ASC',\n },\n direction: 'DESC',\n });\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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('when sortable property is \"manual\" in header data', () => {\n beforeEach(async () => {\n table.setProperty('selectable', true);\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: 'manual' }))\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 but does not mutate rows', async () => {\n const sortSpy = await table.spyOnEvent('sort');\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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: 'manual',\n },\n direction: 'ASC',\n });\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\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: 'manual',\n },\n direction: 'ASC',\n });\n\n emailHeaderIcon = await e2ePage.find(\n 'q2-data-table >>> th#header-email [test-id=sorted-indicator]'\n );\n expect(emailHeaderIcon).toEqualAttribute('type', 'sort');\n expect(emailHeaderIcon).toEqualAttribute('label', 'tecton.element.dataTable.clickToSort');\n });\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 describe('Test methods', () => {\n beforeEach(async () => {\n e2ePage = await setup({\n html: `\n <q2-data-table selectable clickable>\n <div slot=\"row-3-expandable-content\">\n <h3>Thursday Was Great</h3>\n <p>But you already knew that.</p>\n </div>\n </q2-data-table>\n `,\n });\n\n table = await e2ePage.find('q2-data-table');\n table.setProperty(\n 'headers',\n headerData.map(header => ({ ...header, sortable: 'auto' }))\n );\n table.setProperty('rows', rowData);\n table.setProperty('selectable', true);\n table.setProperty('clickable', true);\n await e2ePage.waitForChanges();\n });\n\n it('sortColumn()', async () => {\n const sortSpy = await table.spyOnEvent('sort');\n expect(sortSpy).toHaveReceivedEventTimes(0);\n let cellText = await e2ePage.find('q2-data-table >>> td slot');\n expect(cellText.textContent).toBe('Thor');\n await table.callMethod('sortColumn', { key: 'name', sorted: 'DESC' });\n await e2ePage.waitForChanges();\n cellText = await e2ePage.find('q2-data-table >>> td slot');\n expect(cellText.textContent).toBe('Captain America');\n expect(sortSpy).toHaveReceivedEventTimes(1);\n });\n\n it('toggleRowExpansion()', async () => {\n const toggleSpy = await table.spyOnEvent('toggle');\n expect(toggleSpy).toHaveReceivedEventTimes(0);\n expect(table.shadowRoot.querySelector('table .expandable-row')).toHaveAttribute('hidden');\n await table.callMethod('toggleRowExpansion', 3);\n await e2ePage.waitForChanges();\n expect(table.shadowRoot.querySelector('table .expandable-row')).not.toHaveAttribute('hidden');\n expect(toggleSpy).toHaveReceivedEventTimes(1);\n });\n\n it('toggleRowSelect()', async () => {\n const selectSpy = await table.spyOnEvent('select');\n expect(selectSpy).toHaveReceivedEventTimes(0);\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).not.toHaveAttribute('checked');\n await table.callMethod('toggleRowSelect', 3);\n await e2ePage.waitForChanges();\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).toHaveAttribute('checked');\n expect(selectSpy).toHaveReceivedEventTimes(1);\n });\n\n it('clickRow()', async () => {\n const clickSpy = await table.spyOnEvent('click');\n expect(clickSpy).toHaveReceivedEventTimes(0);\n await table.callMethod('clickRow', 3);\n expect(clickSpy).toHaveReceivedEventTimes(1);\n });\n\n it('getCellContent()', async () => {\n const content = await table.callMethod('getCellContent', 3, 'name');\n expect(content).toBe('Captain America');\n });\n\n it('toggleSelectAllRows()', async () => {\n const selectAllRowsSpy = await table.spyOnEvent('selectAllRows');\n expect(table.shadowRoot.querySelector('table th q2-checkbox')).not.toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-1 q2-checkbox')).not.toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-2 q2-checkbox')).not.toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).not.toHaveAttribute('checked');\n await table.callMethod('toggleSelectAllRows');\n await e2ePage.waitForChanges();\n expect(table.shadowRoot.querySelector('table th q2-checkbox')).toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).toHaveAttribute('checked');\n expect(table.shadowRoot.querySelector('table tr#row-3 q2-checkbox')).toHaveAttribute('checked');\n expect(selectAllRowsSpy).toHaveReceivedEventDetail({\n checked: true,\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', 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 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 table.setProperty('rows', rowData);\n await e2ePage.waitForChanges();\n const hasViolations = await evaluateA11y(e2ePage);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {});\n describe('Keyboard Controls', () => {});\n describe('Other', () => {});\n });\n});\n"]}