q2-tecton-elements 1.67.2 → 1.68.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (807) hide show
  1. package/dist/bundle-report.json +22598 -10670
  2. package/dist/cjs/click-elsewhere.q2-option-list.q2-popover.entry.cjs.js.map +1 -1
  3. package/dist/cjs/click-elsewhere_3.cjs.entry.js +46 -32
  4. package/dist/cjs/click-elsewhere_3.cjs.entry.js.map +1 -1
  5. package/dist/cjs/{component-DRAntnCA.js → component-iASoq6gx.js} +9 -3
  6. package/dist/cjs/component-iASoq6gx.js.map +1 -0
  7. package/dist/cjs/{index-YvKoRT-t.js → index-DmGkqdX2.js} +3 -3
  8. package/dist/cjs/index-DmGkqdX2.js.map +1 -0
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/q2-action-group.q2-resize-observer.entry.cjs.js.map +1 -1
  11. package/dist/cjs/q2-action-group_2.cjs.entry.js +2 -2
  12. package/dist/cjs/q2-action-group_2.cjs.entry.js.map +1 -1
  13. package/dist/cjs/q2-action-sheet.cjs.entry.js +109 -4
  14. package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
  15. package/dist/cjs/q2-action-sheet.entry.cjs.js.map +1 -1
  16. package/dist/cjs/q2-avatar.cjs.entry.js.map +1 -1
  17. package/dist/cjs/q2-avatar.entry.cjs.js.map +1 -1
  18. package/dist/cjs/q2-badge.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-badge.cjs.entry.js.map +1 -1
  20. package/dist/cjs/q2-badge.entry.cjs.js.map +1 -1
  21. package/dist/cjs/q2-btn.q2-loading.entry.cjs.js.map +1 -1
  22. package/dist/cjs/q2-btn_2.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
  24. package/dist/cjs/q2-calendar.cjs.entry.js +6 -3
  25. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  26. package/dist/cjs/q2-calendar.entry.cjs.js.map +1 -1
  27. package/dist/cjs/q2-card-image.cjs.entry.js +2 -2
  28. package/dist/cjs/q2-card-image.cjs.entry.js.map +1 -1
  29. package/dist/cjs/q2-card-image.entry.cjs.js.map +1 -1
  30. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
  32. package/dist/cjs/q2-card.entry.cjs.js.map +1 -1
  33. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  34. package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
  35. package/dist/cjs/q2-carousel-pane.entry.cjs.js.map +1 -1
  36. package/dist/cjs/q2-carousel.cjs.entry.js +162 -29
  37. package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
  38. package/dist/cjs/q2-carousel.entry.cjs.js.map +1 -1
  39. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-chart-donut.cjs.entry.js +3 -2
  42. package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
  43. package/dist/cjs/q2-chart-donut.entry.cjs.js.map +1 -1
  44. package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
  45. package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
  46. package/dist/cjs/q2-checkbox-group.entry.cjs.js.map +1 -1
  47. package/dist/cjs/q2-checkbox.q2-tag.entry.cjs.js.map +1 -1
  48. package/dist/cjs/q2-checkbox_2.cjs.entry.js +3 -3
  49. package/dist/cjs/q2-checkbox_2.cjs.entry.js.map +1 -1
  50. package/dist/cjs/q2-context.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-context.cjs.entry.js.map +1 -1
  52. package/dist/cjs/q2-context.entry.cjs.js.map +1 -1
  53. package/dist/cjs/q2-currency.cjs.entry.js +2 -3
  54. package/dist/cjs/q2-currency.cjs.entry.js.map +1 -1
  55. package/dist/cjs/q2-currency.entry.cjs.js.map +1 -1
  56. package/dist/cjs/q2-data-table.cjs.entry.js +2 -2
  57. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  58. package/dist/cjs/q2-data-table.entry.cjs.js.map +1 -1
  59. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  60. package/dist/cjs/q2-detail.cjs.entry.js.map +1 -1
  61. package/dist/cjs/q2-detail.entry.cjs.js.map +1 -1
  62. package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
  63. package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
  64. package/dist/cjs/q2-dropdown-item.entry.cjs.js.map +1 -1
  65. package/dist/cjs/q2-dropdown.cjs.entry.js +3 -5
  66. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  67. package/dist/cjs/q2-dropdown.entry.cjs.js.map +1 -1
  68. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  69. package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
  70. package/dist/cjs/q2-editable-field.entry.cjs.js.map +1 -1
  71. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  72. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  73. package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -1
  74. package/dist/cjs/q2-file-picker.entry.cjs.js.map +1 -1
  75. package/dist/cjs/q2-form.cjs.entry.js +2 -2
  76. package/dist/cjs/q2-form.cjs.entry.js.map +1 -1
  77. package/dist/cjs/q2-form.entry.cjs.js.map +1 -1
  78. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  79. package/dist/cjs/q2-formatted-text.cjs.entry.js.map +1 -1
  80. package/dist/cjs/q2-formatted-text.entry.cjs.js.map +1 -1
  81. package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
  82. package/dist/cjs/q2-grid.cjs.entry.js +32 -8
  83. package/dist/cjs/q2-grid.cjs.entry.js.map +1 -1
  84. package/dist/cjs/q2-grid.entry.cjs.js.map +1 -1
  85. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  86. package/dist/cjs/q2-icon.cjs.entry.js.map +1 -1
  87. package/dist/cjs/q2-icon.entry.cjs.js.map +1 -1
  88. package/dist/cjs/q2-input.cjs.entry.js +8 -5
  89. package/dist/cjs/q2-input.cjs.entry.js.map +1 -1
  90. package/dist/cjs/q2-input.entry.cjs.js.map +1 -1
  91. package/dist/cjs/q2-item.cjs.entry.js +2 -2
  92. package/dist/cjs/q2-item.cjs.entry.js.map +1 -1
  93. package/dist/cjs/q2-item.entry.cjs.js.map +1 -1
  94. package/dist/cjs/q2-legend.cjs.entry.js +2 -3
  95. package/dist/cjs/q2-legend.cjs.entry.js.map +1 -1
  96. package/dist/cjs/q2-legend.entry.cjs.js.map +1 -1
  97. package/dist/cjs/q2-link.q2-list.entry.cjs.js.map +1 -1
  98. package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
  99. package/dist/cjs/q2-link_2.cjs.entry.js.map +1 -1
  100. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  101. package/dist/cjs/q2-message.cjs.entry.js +3 -3
  102. package/dist/cjs/q2-message.cjs.entry.js.map +1 -1
  103. package/dist/cjs/q2-message.entry.cjs.js.map +1 -1
  104. package/dist/cjs/q2-meter.cjs.entry.js +2 -2
  105. package/dist/cjs/q2-meter.cjs.entry.js.map +1 -1
  106. package/dist/cjs/q2-meter.entry.cjs.js.map +1 -1
  107. package/dist/cjs/q2-modal.cjs.entry.js +3 -3
  108. package/dist/cjs/q2-modal.cjs.entry.js.map +1 -1
  109. package/dist/cjs/q2-modal.entry.cjs.js.map +1 -1
  110. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  111. package/dist/cjs/q2-mutation-observer.cjs.entry.js +1 -1
  112. package/dist/cjs/q2-optgroup.cjs.entry.js +3 -3
  113. package/dist/cjs/q2-optgroup.cjs.entry.js.map +1 -1
  114. package/dist/cjs/q2-optgroup.entry.cjs.js.map +1 -1
  115. package/dist/cjs/q2-option.cjs.entry.js +3 -3
  116. package/dist/cjs/q2-option.cjs.entry.js.map +1 -1
  117. package/dist/cjs/q2-option.entry.cjs.js.map +1 -1
  118. package/dist/cjs/q2-otp.cjs.entry.js +373 -0
  119. package/dist/cjs/q2-otp.cjs.entry.js.map +1 -0
  120. package/dist/cjs/q2-otp.entry.cjs.js.map +1 -0
  121. package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
  122. package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
  123. package/dist/cjs/q2-pagination.entry.cjs.js.map +1 -1
  124. package/dist/cjs/q2-pill.cjs.entry.js +24 -15
  125. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  126. package/dist/cjs/q2-pill.entry.cjs.js.map +1 -1
  127. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  128. package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
  129. package/dist/cjs/q2-radio-group.entry.cjs.js.map +1 -1
  130. package/dist/cjs/q2-radio.cjs.entry.js +3 -3
  131. package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
  132. package/dist/cjs/q2-radio.entry.cjs.js.map +1 -1
  133. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  134. package/dist/cjs/q2-section-container.cjs.entry.js +1 -1
  135. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  136. package/dist/cjs/q2-section.cjs.entry.js.map +1 -1
  137. package/dist/cjs/q2-section.entry.cjs.js.map +1 -1
  138. package/dist/cjs/q2-select.cjs.entry.js +1 -1
  139. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  140. package/dist/cjs/q2-select.entry.cjs.js.map +1 -1
  141. package/dist/cjs/q2-stepper-pane.cjs.entry.js +3 -3
  142. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  143. package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
  144. package/dist/cjs/q2-stepper-vertical.entry.cjs.js.map +1 -1
  145. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  146. package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
  147. package/dist/cjs/q2-stepper.entry.cjs.js.map +1 -1
  148. package/dist/cjs/q2-tab-container.cjs.entry.js +3 -3
  149. package/dist/cjs/q2-tab-container.cjs.entry.js.map +1 -1
  150. package/dist/cjs/q2-tab-container.entry.cjs.js.map +1 -1
  151. package/dist/cjs/q2-tab-pane.cjs.entry.js +2 -2
  152. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  153. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  154. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  155. package/dist/cjs/q2-textarea.entry.cjs.js.map +1 -1
  156. package/dist/cjs/q2-toast.cjs.entry.js +1 -1
  157. package/dist/cjs/q2-toast.cjs.entry.js.map +1 -1
  158. package/dist/cjs/q2-toast.entry.cjs.js.map +1 -1
  159. package/dist/cjs/q2-tooltip.cjs.entry.js +124 -5
  160. package/dist/cjs/q2-tooltip.cjs.entry.js.map +1 -1
  161. package/dist/cjs/q2-tooltip.entry.cjs.js.map +1 -1
  162. package/dist/cjs/{sanitize-html-string-CW6y5624.js → sanitize-html-string-D17Pr7-c.js} +21 -4
  163. package/dist/cjs/{sanitize-html-string-CW6y5624.js.map → sanitize-html-string-D17Pr7-c.js.map} +1 -1
  164. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  165. package/dist/collection/collection-manifest.json +1 -0
  166. package/dist/collection/components/click-elsewhere/click-elsewhere.js +2 -0
  167. package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
  168. package/dist/collection/components/q2-action-group/q2-action-group.css +14 -0
  169. package/dist/collection/components/q2-action-sheet/q2-action-sheet.css +16 -0
  170. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +107 -2
  171. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  172. package/dist/collection/components/q2-avatar/q2-avatar.css +24 -0
  173. package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js +61 -0
  174. package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js.map +1 -0
  175. package/dist/collection/components/q2-badge/q2-badge.css +30 -0
  176. package/dist/collection/components/q2-badge/test/q2-badge-test.vr.js +34 -0
  177. package/dist/collection/components/q2-badge/test/q2-badge-test.vr.js.map +1 -0
  178. package/dist/collection/components/q2-btn/q2-btn.css +279 -0
  179. package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js +80 -0
  180. package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js.map +1 -0
  181. package/dist/collection/components/q2-calendar/q2-calendar.css +36 -0
  182. package/dist/collection/components/q2-calendar/q2-calendar.js +5 -2
  183. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  184. package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js +170 -0
  185. package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js.map +1 -0
  186. package/dist/collection/components/q2-card/q2-card.css +62 -0
  187. package/dist/collection/components/q2-card/test/q2-card-test.vr.js +72 -0
  188. package/dist/collection/components/q2-card/test/q2-card-test.vr.js.map +1 -0
  189. package/dist/collection/components/q2-card-image/q2-card-image.css +74 -13
  190. package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js +152 -0
  191. package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js.map +1 -0
  192. package/dist/collection/components/q2-carousel/q2-carousel.css +78 -13
  193. package/dist/collection/components/q2-carousel/q2-carousel.js +241 -27
  194. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  195. package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js +104 -0
  196. package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js.map +1 -0
  197. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.css +26 -1
  198. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js +126 -0
  199. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js.map +1 -0
  200. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js +105 -0
  201. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js.map +1 -0
  202. package/dist/collection/components/q2-chart-donut/q2-chart-donut.css +29 -0
  203. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +21 -1
  204. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  205. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js +151 -0
  206. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js.map +1 -0
  207. package/dist/collection/components/q2-checkbox/q2-checkbox.css +128 -0
  208. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.vr.js +69 -0
  209. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.vr.js.map +1 -0
  210. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +21 -0
  211. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.js +61 -0
  212. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.js.map +1 -0
  213. package/dist/collection/components/q2-context/q2-context.css +16 -0
  214. package/dist/collection/components/q2-context/test/q2-context-test.vr.js +95 -0
  215. package/dist/collection/components/q2-context/test/q2-context-test.vr.js.map +1 -0
  216. package/dist/collection/components/q2-currency/q2-currency.css +31 -0
  217. package/dist/collection/components/q2-currency/q2-currency.js +3 -4
  218. package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
  219. package/dist/collection/components/q2-currency/test/q2-currency-test.vr.js +79 -0
  220. package/dist/collection/components/q2-currency/test/q2-currency-test.vr.js.map +1 -0
  221. package/dist/collection/components/q2-data-table/q2-data-table.css +51 -0
  222. package/dist/collection/components/q2-data-table/q2-data-table.js +1 -1
  223. package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js +79 -0
  224. package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js.map +1 -0
  225. package/dist/collection/components/q2-detail/q2-detail.css +42 -0
  226. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  227. package/dist/collection/components/q2-dropdown/q2-dropdown.css +8 -0
  228. package/dist/collection/components/q2-dropdown/q2-dropdown.js +2 -4
  229. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  230. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.css +11 -0
  231. package/dist/collection/components/q2-editable-field/q2-editable-field.css +5 -0
  232. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.vr.js +89 -0
  233. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.vr.js.map +1 -0
  234. package/dist/collection/components/q2-example/q2-example.js +1 -1
  235. package/dist/collection/components/q2-file-picker/q2-file-picker.css +64 -0
  236. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js +92 -0
  237. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js.map +1 -0
  238. package/dist/collection/components/q2-form/q2-form.css +34 -20
  239. package/dist/collection/components/q2-form/q2-form.js +1 -1
  240. package/dist/collection/components/q2-formatted-text/q2-formatted-text.css +14 -0
  241. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  242. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.vr.js +55 -0
  243. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.vr.js.map +1 -0
  244. package/dist/collection/components/q2-grid/q2-grid.css +13 -0
  245. package/dist/collection/components/q2-grid/q2-grid.js +31 -7
  246. package/dist/collection/components/q2-grid/q2-grid.js.map +1 -1
  247. package/dist/collection/components/q2-icon/assets/standard.symbol.svg +1 -1
  248. package/dist/collection/components/q2-icon/q2-icon.css +15 -0
  249. package/dist/collection/components/q2-icon/test/q2-icon-test.vr.js +55 -0
  250. package/dist/collection/components/q2-icon/test/q2-icon-test.vr.js.map +1 -0
  251. package/dist/collection/components/q2-input/q2-input.css +104 -0
  252. package/dist/collection/components/q2-input/q2-input.js +6 -3
  253. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  254. package/dist/collection/components/q2-input/test/q2-input-test.vr.js +97 -0
  255. package/dist/collection/components/q2-input/test/q2-input-test.vr.js.map +1 -0
  256. package/dist/collection/components/q2-item/q2-item.css +28 -0
  257. package/dist/collection/components/q2-item/q2-item.js +1 -1
  258. package/dist/collection/components/q2-legend/q2-legend.css +16 -0
  259. package/dist/collection/components/q2-legend/q2-legend.js +21 -3
  260. package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
  261. package/dist/collection/components/q2-link/q2-link.css +20 -0
  262. package/dist/collection/components/q2-link/test/q2-link-test.vr.js +70 -0
  263. package/dist/collection/components/q2-link/test/q2-link-test.vr.js.map +1 -0
  264. package/dist/collection/components/q2-list/q2-list.css +14 -0
  265. package/dist/collection/components/q2-list/q2-list.js +1 -1
  266. package/dist/collection/components/q2-list/test/q2-list-test.vr.js +58 -0
  267. package/dist/collection/components/q2-list/test/q2-list-test.vr.js.map +1 -0
  268. package/dist/collection/components/q2-loading/q2-loading.css +9 -0
  269. package/dist/collection/components/q2-message/q2-message.css +29 -1
  270. package/dist/collection/components/q2-message/q2-message.js +1 -1
  271. package/dist/collection/components/q2-message/test/q2-message-test.vr.js +57 -0
  272. package/dist/collection/components/q2-message/test/q2-message-test.vr.js.map +1 -0
  273. package/dist/collection/components/q2-meter/q2-meter.css +40 -0
  274. package/dist/collection/components/q2-meter/q2-meter.js +1 -1
  275. package/dist/collection/components/q2-meter/test/q2-meter-test.vr.js +78 -0
  276. package/dist/collection/components/q2-meter/test/q2-meter-test.vr.js.map +1 -0
  277. package/dist/collection/components/q2-modal/q2-modal.css +21 -0
  278. package/dist/collection/components/q2-modal/q2-modal.js +1 -1
  279. package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js +107 -0
  280. package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js.map +1 -0
  281. package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
  282. package/dist/collection/components/q2-optgroup/q2-optgroup.css +11 -0
  283. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  284. package/dist/collection/components/q2-option/q2-option.css +9 -0
  285. package/dist/collection/components/q2-option/q2-option.js +1 -1
  286. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  287. package/dist/collection/components/q2-option-list/q2-option-list.css +3 -0
  288. package/dist/collection/components/q2-option-list/q2-option-list.js +37 -28
  289. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  290. package/dist/collection/components/q2-otp/q2-otp.css +312 -0
  291. package/dist/collection/components/q2-otp/q2-otp.js +873 -0
  292. package/dist/collection/components/q2-otp/q2-otp.js.map +1 -0
  293. package/dist/collection/components/q2-pagination/q2-pagination.css +22 -0
  294. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  295. package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js +145 -0
  296. package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js.map +1 -0
  297. package/dist/collection/components/q2-pill/q2-pill.css +53 -0
  298. package/dist/collection/components/q2-pill/q2-pill.js +23 -14
  299. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  300. package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js +110 -0
  301. package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js.map +1 -0
  302. package/dist/collection/components/q2-popover/q2-popover.css +20 -0
  303. package/dist/collection/components/q2-popover/q2-popover.js +5 -2
  304. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  305. package/dist/collection/components/q2-radio/q2-radio.css +52 -1
  306. package/dist/collection/components/q2-radio/q2-radio.js +2 -2
  307. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  308. package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js +73 -0
  309. package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js.map +1 -0
  310. package/dist/collection/components/q2-radio-group/q2-radio-group.css +22 -0
  311. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js +99 -0
  312. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js.map +1 -0
  313. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  314. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  315. package/dist/collection/components/q2-section/q2-section.css +26 -0
  316. package/dist/collection/components/q2-section/q2-section.js +2 -2
  317. package/dist/collection/components/q2-section/test/q2-section-test.vr.js +68 -0
  318. package/dist/collection/components/q2-section/test/q2-section-test.vr.js.map +1 -0
  319. package/dist/collection/components/q2-select/q2-select.css +17 -0
  320. package/dist/collection/components/q2-select/test/q2-select-test.vr.js +107 -0
  321. package/dist/collection/components/q2-select/test/q2-select-test.vr.js.map +1 -0
  322. package/dist/collection/components/q2-stepper/q2-stepper.css +36 -0
  323. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  324. package/dist/collection/components/q2-stepper/test/q2-stepper-test.vr.js +86 -0
  325. package/dist/collection/components/q2-stepper/test/q2-stepper-test.vr.js.map +1 -0
  326. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +1 -1
  327. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +31 -0
  328. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  329. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.js +97 -0
  330. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.js.map +1 -0
  331. package/dist/collection/components/q2-tab-container/q2-tab-container.css +38 -0
  332. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  333. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.vr.js +78 -0
  334. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.vr.js.map +1 -0
  335. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  336. package/dist/collection/components/q2-tag/q2-tag.css +30 -1
  337. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  338. package/dist/collection/components/q2-tag/test/q2-tag-test.vr.js +83 -0
  339. package/dist/collection/components/q2-tag/test/q2-tag-test.vr.js.map +1 -0
  340. package/dist/collection/components/q2-textarea/q2-textarea.css +80 -0
  341. package/dist/collection/components/q2-textarea/test/q2-textarea-test.vr.js +102 -0
  342. package/dist/collection/components/q2-textarea/test/q2-textarea-test.vr.js.map +1 -0
  343. package/dist/collection/components/q2-toast/q2-toast.css +15 -0
  344. package/dist/collection/components/q2-tooltip/q2-tooltip.css +31 -0
  345. package/dist/collection/components/q2-tooltip/q2-tooltip.js +135 -4
  346. package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
  347. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js +76 -0
  348. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js.map +1 -0
  349. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  350. package/dist/collection/utils/component.js +7 -1
  351. package/dist/collection/utils/component.js.map +1 -1
  352. package/dist/collection/utils/index.js +1 -1
  353. package/dist/collection/utils/index.js.map +1 -1
  354. package/dist/collection/utils/sanitize-html-string.js +19 -2
  355. package/dist/collection/utils/sanitize-html-string.js.map +1 -1
  356. package/dist/collection/utils/test/vr-helpers.js +98 -0
  357. package/dist/collection/utils/test/vr-helpers.js.map +1 -0
  358. package/dist/components/click-elsewhere2.js +2 -0
  359. package/dist/components/click-elsewhere2.js.map +1 -1
  360. package/dist/components/component.js +7 -1
  361. package/dist/components/component.js.map +1 -1
  362. package/dist/components/index.js +2 -0
  363. package/dist/components/index.js.map +1 -1
  364. package/dist/components/index2.js +1 -1
  365. package/dist/components/index2.js.map +1 -1
  366. package/dist/components/q2-action-group2.js.map +1 -1
  367. package/dist/components/q2-action-sheet.js +107 -2
  368. package/dist/components/q2-action-sheet.js.map +1 -1
  369. package/dist/components/q2-avatar2.js.map +1 -1
  370. package/dist/components/q2-badge2.js.map +1 -1
  371. package/dist/components/q2-btn2.js.map +1 -1
  372. package/dist/components/q2-calendar.js +5 -2
  373. package/dist/components/q2-calendar.js.map +1 -1
  374. package/dist/components/q2-card-image.js +1 -1
  375. package/dist/components/q2-card-image.js.map +1 -1
  376. package/dist/components/q2-card.js.map +1 -1
  377. package/dist/components/q2-carousel-pane.js +1 -135
  378. package/dist/components/q2-carousel-pane.js.map +1 -1
  379. package/dist/components/q2-carousel-pane2.js +140 -0
  380. package/dist/components/q2-carousel-pane2.js.map +1 -0
  381. package/dist/components/q2-carousel.js +173 -29
  382. package/dist/components/q2-carousel.js.map +1 -1
  383. package/dist/components/q2-chart-donut.js +3 -1
  384. package/dist/components/q2-chart-donut.js.map +1 -1
  385. package/dist/components/q2-checkbox-group.js.map +1 -1
  386. package/dist/components/q2-checkbox2.js.map +1 -1
  387. package/dist/components/q2-context.js +1 -1
  388. package/dist/components/q2-context.js.map +1 -1
  389. package/dist/components/q2-currency.js +3 -4
  390. package/dist/components/q2-currency.js.map +1 -1
  391. package/dist/components/q2-data-table.js +1 -1
  392. package/dist/components/q2-data-table.js.map +1 -1
  393. package/dist/components/q2-detail.js +1 -1
  394. package/dist/components/q2-detail.js.map +1 -1
  395. package/dist/components/q2-dropdown-item2.js.map +1 -1
  396. package/dist/components/q2-dropdown.js +2 -4
  397. package/dist/components/q2-dropdown.js.map +1 -1
  398. package/dist/components/q2-editable-field.js.map +1 -1
  399. package/dist/components/q2-example.js +1 -1
  400. package/dist/components/q2-file-picker.js.map +1 -1
  401. package/dist/components/q2-form.js +2 -2
  402. package/dist/components/q2-form.js.map +1 -1
  403. package/dist/components/q2-formatted-text.js +1 -1
  404. package/dist/components/q2-formatted-text.js.map +1 -1
  405. package/dist/components/q2-grid.js +32 -8
  406. package/dist/components/q2-grid.js.map +1 -1
  407. package/dist/components/q2-icon2.js.map +1 -1
  408. package/dist/components/q2-input2.js +7 -4
  409. package/dist/components/q2-input2.js.map +1 -1
  410. package/dist/components/q2-item2.js +1 -1
  411. package/dist/components/q2-item2.js.map +1 -1
  412. package/dist/components/q2-legend2.js +3 -3
  413. package/dist/components/q2-legend2.js.map +1 -1
  414. package/dist/components/q2-link2.js.map +1 -1
  415. package/dist/components/q2-list2.js +1 -1
  416. package/dist/components/q2-list2.js.map +1 -1
  417. package/dist/components/q2-loading2.js.map +1 -1
  418. package/dist/components/q2-message2.js +2 -2
  419. package/dist/components/q2-message2.js.map +1 -1
  420. package/dist/components/q2-meter.js +1 -1
  421. package/dist/components/q2-meter.js.map +1 -1
  422. package/dist/components/q2-modal.js +1 -1
  423. package/dist/components/q2-modal.js.map +1 -1
  424. package/dist/components/q2-mutation-observer.js +1 -1
  425. package/dist/components/q2-optgroup2.js +1 -1
  426. package/dist/components/q2-optgroup2.js.map +1 -1
  427. package/dist/components/q2-option-list2.js +37 -28
  428. package/dist/components/q2-option-list2.js.map +1 -1
  429. package/dist/components/q2-option2.js +1 -1
  430. package/dist/components/q2-option2.js.map +1 -1
  431. package/dist/components/q2-otp.d.ts +11 -0
  432. package/dist/components/q2-otp.js +439 -0
  433. package/dist/components/q2-otp.js.map +1 -0
  434. package/dist/components/q2-pagination.js +3 -3
  435. package/dist/components/q2-pagination.js.map +1 -1
  436. package/dist/components/q2-pill.js +23 -14
  437. package/dist/components/q2-pill.js.map +1 -1
  438. package/dist/components/q2-popover2.js +5 -2
  439. package/dist/components/q2-popover2.js.map +1 -1
  440. package/dist/components/q2-radio-group.js.map +1 -1
  441. package/dist/components/q2-radio.js +2 -2
  442. package/dist/components/q2-radio.js.map +1 -1
  443. package/dist/components/q2-relative-time.js +1 -1
  444. package/dist/components/q2-resize-observer2.js +1 -1
  445. package/dist/components/q2-section.js +2 -2
  446. package/dist/components/q2-section.js.map +1 -1
  447. package/dist/components/q2-select2.js.map +1 -1
  448. package/dist/components/q2-stepper-pane.js +1 -1
  449. package/dist/components/q2-stepper-vertical.js +1 -1
  450. package/dist/components/q2-stepper-vertical.js.map +1 -1
  451. package/dist/components/q2-stepper.js +1 -1
  452. package/dist/components/q2-stepper.js.map +1 -1
  453. package/dist/components/q2-tab-container.js +1 -1
  454. package/dist/components/q2-tab-container.js.map +1 -1
  455. package/dist/components/q2-tab-pane.js +1 -1
  456. package/dist/components/q2-tag2.js +2 -2
  457. package/dist/components/q2-tag2.js.map +1 -1
  458. package/dist/components/q2-textarea.js.map +1 -1
  459. package/dist/components/q2-toast.js.map +1 -1
  460. package/dist/components/q2-tooltip2.js +124 -5
  461. package/dist/components/q2-tooltip2.js.map +1 -1
  462. package/dist/components/sanitize-html-string.js +19 -2
  463. package/dist/components/sanitize-html-string.js.map +1 -1
  464. package/dist/components/tecton-tab-pane.js +2 -2
  465. package/dist/esm/click-elsewhere.q2-option-list.q2-popover.entry.js.map +1 -1
  466. package/dist/esm/click-elsewhere_3.entry.js +46 -32
  467. package/dist/esm/click-elsewhere_3.entry.js.map +1 -1
  468. package/dist/esm/{component-DVxzK3WH.js → component-DaQM9u3s.js} +9 -3
  469. package/dist/esm/component-DaQM9u3s.js.map +1 -0
  470. package/dist/esm/{index-C4PILj1_.js → index-C5gj0T_3.js} +4 -4
  471. package/dist/esm/index-C5gj0T_3.js.map +1 -0
  472. package/dist/esm/loader.js +1 -1
  473. package/dist/esm/q2-action-group.q2-resize-observer.entry.js.map +1 -1
  474. package/dist/esm/q2-action-group_2.entry.js +2 -2
  475. package/dist/esm/q2-action-group_2.entry.js.map +1 -1
  476. package/dist/esm/q2-action-sheet.entry.js +109 -4
  477. package/dist/esm/q2-action-sheet.entry.js.map +1 -1
  478. package/dist/esm/q2-avatar.entry.js.map +1 -1
  479. package/dist/esm/q2-badge.entry.js +1 -1
  480. package/dist/esm/q2-badge.entry.js.map +1 -1
  481. package/dist/esm/q2-btn.q2-loading.entry.js.map +1 -1
  482. package/dist/esm/q2-btn_2.entry.js +1 -1
  483. package/dist/esm/q2-btn_2.entry.js.map +1 -1
  484. package/dist/esm/q2-calendar.entry.js +6 -3
  485. package/dist/esm/q2-calendar.entry.js.map +1 -1
  486. package/dist/esm/q2-card-image.entry.js +2 -2
  487. package/dist/esm/q2-card-image.entry.js.map +1 -1
  488. package/dist/esm/q2-card.entry.js +1 -1
  489. package/dist/esm/q2-card.entry.js.map +1 -1
  490. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  491. package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
  492. package/dist/esm/q2-carousel.entry.js +162 -29
  493. package/dist/esm/q2-carousel.entry.js.map +1 -1
  494. package/dist/esm/q2-chart-area.entry.js +1 -1
  495. package/dist/esm/q2-chart-bar.entry.js +1 -1
  496. package/dist/esm/q2-chart-donut.entry.js +3 -2
  497. package/dist/esm/q2-chart-donut.entry.js.map +1 -1
  498. package/dist/esm/q2-checkbox-group.entry.js +2 -2
  499. package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
  500. package/dist/esm/q2-checkbox.q2-tag.entry.js.map +1 -1
  501. package/dist/esm/q2-checkbox_2.entry.js +3 -3
  502. package/dist/esm/q2-checkbox_2.entry.js.map +1 -1
  503. package/dist/esm/q2-context.entry.js +2 -2
  504. package/dist/esm/q2-context.entry.js.map +1 -1
  505. package/dist/esm/q2-currency.entry.js +3 -4
  506. package/dist/esm/q2-currency.entry.js.map +1 -1
  507. package/dist/esm/q2-data-table.entry.js +2 -2
  508. package/dist/esm/q2-data-table.entry.js.map +1 -1
  509. package/dist/esm/q2-detail.entry.js +2 -2
  510. package/dist/esm/q2-detail.entry.js.map +1 -1
  511. package/dist/esm/q2-dropdown-item.entry.js +2 -2
  512. package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
  513. package/dist/esm/q2-dropdown.entry.js +3 -5
  514. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  515. package/dist/esm/q2-editable-field.entry.js +1 -1
  516. package/dist/esm/q2-editable-field.entry.js.map +1 -1
  517. package/dist/esm/q2-example.entry.js +1 -1
  518. package/dist/esm/q2-file-picker.entry.js +1 -1
  519. package/dist/esm/q2-file-picker.entry.js.map +1 -1
  520. package/dist/esm/q2-form.entry.js +2 -2
  521. package/dist/esm/q2-form.entry.js.map +1 -1
  522. package/dist/esm/q2-formatted-text.entry.js +1 -1
  523. package/dist/esm/q2-formatted-text.entry.js.map +1 -1
  524. package/dist/esm/q2-grid-area.entry.js +1 -1
  525. package/dist/esm/q2-grid.entry.js +33 -9
  526. package/dist/esm/q2-grid.entry.js.map +1 -1
  527. package/dist/esm/q2-icon.entry.js +1 -1
  528. package/dist/esm/q2-icon.entry.js.map +1 -1
  529. package/dist/esm/q2-input.entry.js +8 -5
  530. package/dist/esm/q2-input.entry.js.map +1 -1
  531. package/dist/esm/q2-item.entry.js +2 -2
  532. package/dist/esm/q2-item.entry.js.map +1 -1
  533. package/dist/esm/q2-legend.entry.js +2 -3
  534. package/dist/esm/q2-legend.entry.js.map +1 -1
  535. package/dist/esm/q2-link.q2-list.entry.js.map +1 -1
  536. package/dist/esm/q2-link_2.entry.js +2 -2
  537. package/dist/esm/q2-link_2.entry.js.map +1 -1
  538. package/dist/esm/q2-loc.entry.js +1 -1
  539. package/dist/esm/q2-message.entry.js +3 -3
  540. package/dist/esm/q2-message.entry.js.map +1 -1
  541. package/dist/esm/q2-meter.entry.js +2 -2
  542. package/dist/esm/q2-meter.entry.js.map +1 -1
  543. package/dist/esm/q2-modal.entry.js +3 -3
  544. package/dist/esm/q2-modal.entry.js.map +1 -1
  545. package/dist/esm/q2-month-picker.entry.js +1 -1
  546. package/dist/esm/q2-mutation-observer.entry.js +1 -1
  547. package/dist/esm/q2-optgroup.entry.js +3 -3
  548. package/dist/esm/q2-optgroup.entry.js.map +1 -1
  549. package/dist/esm/q2-option.entry.js +3 -3
  550. package/dist/esm/q2-option.entry.js.map +1 -1
  551. package/dist/esm/q2-otp.entry.js +371 -0
  552. package/dist/esm/q2-otp.entry.js.map +1 -0
  553. package/dist/esm/q2-pagination.entry.js +4 -4
  554. package/dist/esm/q2-pagination.entry.js.map +1 -1
  555. package/dist/esm/q2-pill.entry.js +24 -15
  556. package/dist/esm/q2-pill.entry.js.map +1 -1
  557. package/dist/esm/q2-radio-group.entry.js +1 -1
  558. package/dist/esm/q2-radio-group.entry.js.map +1 -1
  559. package/dist/esm/q2-radio.entry.js +3 -3
  560. package/dist/esm/q2-radio.entry.js.map +1 -1
  561. package/dist/esm/q2-relative-time.entry.js +2 -2
  562. package/dist/esm/q2-section-container.entry.js +1 -1
  563. package/dist/esm/q2-section.entry.js +3 -3
  564. package/dist/esm/q2-section.entry.js.map +1 -1
  565. package/dist/esm/q2-select.entry.js +1 -1
  566. package/dist/esm/q2-select.entry.js.map +1 -1
  567. package/dist/esm/q2-stepper-pane.entry.js +3 -3
  568. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  569. package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
  570. package/dist/esm/q2-stepper.entry.js +2 -2
  571. package/dist/esm/q2-stepper.entry.js.map +1 -1
  572. package/dist/esm/q2-tab-container.entry.js +3 -3
  573. package/dist/esm/q2-tab-container.entry.js.map +1 -1
  574. package/dist/esm/q2-tab-pane.entry.js +2 -2
  575. package/dist/esm/q2-tecton-elements.js +1 -1
  576. package/dist/esm/q2-textarea.entry.js +1 -1
  577. package/dist/esm/q2-textarea.entry.js.map +1 -1
  578. package/dist/esm/q2-toast.entry.js +1 -1
  579. package/dist/esm/q2-toast.entry.js.map +1 -1
  580. package/dist/esm/q2-tooltip.entry.js +124 -5
  581. package/dist/esm/q2-tooltip.entry.js.map +1 -1
  582. package/dist/esm/{sanitize-html-string-B35VmRc9.js → sanitize-html-string-DPHNpMWE.js} +21 -4
  583. package/dist/{q2-tecton-elements/sanitize-html-string-B35VmRc9.js.map → esm/sanitize-html-string-DPHNpMWE.js.map} +1 -1
  584. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  585. package/dist/playwright.config.js +12 -0
  586. package/dist/playwright.config.js.map +1 -0
  587. package/dist/q2-tecton-elements/assets/standard.symbol.svg +1 -1
  588. package/dist/q2-tecton-elements/click-elsewhere.q2-option-list.q2-popover.entry.esm.js.map +1 -1
  589. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +44 -35
  590. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js.map +1 -1
  591. package/dist/q2-tecton-elements/component-DaQM9u3s.js +46 -0
  592. package/dist/q2-tecton-elements/component-DaQM9u3s.js.map +1 -0
  593. package/dist/q2-tecton-elements/{index-C4PILj1_.js → index-C5gj0T_3.js} +4 -4
  594. package/dist/q2-tecton-elements/index-C5gj0T_3.js.map +1 -0
  595. package/dist/q2-tecton-elements/q2-action-group.q2-resize-observer.entry.esm.js.map +1 -1
  596. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +2 -2
  597. package/dist/q2-tecton-elements/q2-action-group_2.entry.js.map +1 -1
  598. package/dist/q2-tecton-elements/q2-action-sheet.entry.esm.js.map +1 -1
  599. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +166 -70
  600. package/dist/q2-tecton-elements/q2-action-sheet.entry.js.map +1 -1
  601. package/dist/q2-tecton-elements/q2-avatar.entry.esm.js.map +1 -1
  602. package/dist/q2-tecton-elements/q2-avatar.entry.js.map +1 -1
  603. package/dist/q2-tecton-elements/q2-badge.entry.esm.js.map +1 -1
  604. package/dist/q2-tecton-elements/q2-badge.entry.js +1 -1
  605. package/dist/q2-tecton-elements/q2-badge.entry.js.map +1 -1
  606. package/dist/q2-tecton-elements/q2-btn.q2-loading.entry.esm.js.map +1 -1
  607. package/dist/q2-tecton-elements/q2-btn_2.entry.js +1 -1
  608. package/dist/q2-tecton-elements/q2-btn_2.entry.js.map +1 -1
  609. package/dist/q2-tecton-elements/q2-calendar.entry.esm.js.map +1 -1
  610. package/dist/q2-tecton-elements/q2-calendar.entry.js +4 -4
  611. package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -1
  612. package/dist/q2-tecton-elements/q2-card-image.entry.esm.js.map +1 -1
  613. package/dist/q2-tecton-elements/q2-card-image.entry.js +2 -2
  614. package/dist/q2-tecton-elements/q2-card-image.entry.js.map +1 -1
  615. package/dist/q2-tecton-elements/q2-card.entry.esm.js.map +1 -1
  616. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  617. package/dist/q2-tecton-elements/q2-card.entry.js.map +1 -1
  618. package/dist/q2-tecton-elements/q2-carousel-pane.entry.esm.js.map +1 -1
  619. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +6 -6
  620. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js.map +1 -1
  621. package/dist/q2-tecton-elements/q2-carousel.entry.esm.js.map +1 -1
  622. package/dist/q2-tecton-elements/q2-carousel.entry.js +402 -271
  623. package/dist/q2-tecton-elements/q2-carousel.entry.js.map +1 -1
  624. package/dist/q2-tecton-elements/q2-chart-area.entry.js +1 -1
  625. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +1 -1
  626. package/dist/q2-tecton-elements/q2-chart-donut.entry.esm.js.map +1 -1
  627. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +18 -16
  628. package/dist/q2-tecton-elements/q2-chart-donut.entry.js.map +1 -1
  629. package/dist/q2-tecton-elements/q2-checkbox-group.entry.esm.js.map +1 -1
  630. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +2 -2
  631. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js.map +1 -1
  632. package/dist/q2-tecton-elements/q2-checkbox.q2-tag.entry.esm.js.map +1 -1
  633. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +7 -7
  634. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js.map +1 -1
  635. package/dist/q2-tecton-elements/q2-context.entry.esm.js.map +1 -1
  636. package/dist/q2-tecton-elements/q2-context.entry.js +2 -2
  637. package/dist/q2-tecton-elements/q2-context.entry.js.map +1 -1
  638. package/dist/q2-tecton-elements/q2-currency.entry.esm.js.map +1 -1
  639. package/dist/q2-tecton-elements/q2-currency.entry.js +34 -33
  640. package/dist/q2-tecton-elements/q2-currency.entry.js.map +1 -1
  641. package/dist/q2-tecton-elements/q2-data-table.entry.esm.js.map +1 -1
  642. package/dist/q2-tecton-elements/q2-data-table.entry.js +4 -4
  643. package/dist/q2-tecton-elements/q2-data-table.entry.js.map +1 -1
  644. package/dist/q2-tecton-elements/q2-detail.entry.esm.js.map +1 -1
  645. package/dist/q2-tecton-elements/q2-detail.entry.js +4 -4
  646. package/dist/q2-tecton-elements/q2-detail.entry.js.map +1 -1
  647. package/dist/q2-tecton-elements/q2-dropdown-item.entry.esm.js.map +1 -1
  648. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +2 -2
  649. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js.map +1 -1
  650. package/dist/q2-tecton-elements/q2-dropdown.entry.esm.js.map +1 -1
  651. package/dist/q2-tecton-elements/q2-dropdown.entry.js +18 -19
  652. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  653. package/dist/q2-tecton-elements/q2-editable-field.entry.esm.js.map +1 -1
  654. package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
  655. package/dist/q2-tecton-elements/q2-editable-field.entry.js.map +1 -1
  656. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  657. package/dist/q2-tecton-elements/q2-file-picker.entry.esm.js.map +1 -1
  658. package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
  659. package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -1
  660. package/dist/q2-tecton-elements/q2-form.entry.esm.js.map +1 -1
  661. package/dist/q2-tecton-elements/q2-form.entry.js +9 -9
  662. package/dist/q2-tecton-elements/q2-form.entry.js.map +1 -1
  663. package/dist/q2-tecton-elements/q2-formatted-text.entry.esm.js.map +1 -1
  664. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  665. package/dist/q2-tecton-elements/q2-formatted-text.entry.js.map +1 -1
  666. package/dist/q2-tecton-elements/q2-grid-area.entry.js +1 -1
  667. package/dist/q2-tecton-elements/q2-grid.entry.esm.js.map +1 -1
  668. package/dist/q2-tecton-elements/q2-grid.entry.js +39 -14
  669. package/dist/q2-tecton-elements/q2-grid.entry.js.map +1 -1
  670. package/dist/q2-tecton-elements/q2-icon.entry.esm.js.map +1 -1
  671. package/dist/q2-tecton-elements/q2-icon.entry.js +52 -52
  672. package/dist/q2-tecton-elements/q2-icon.entry.js.map +1 -1
  673. package/dist/q2-tecton-elements/q2-input.entry.esm.js.map +1 -1
  674. package/dist/q2-tecton-elements/q2-input.entry.js +10 -6
  675. package/dist/q2-tecton-elements/q2-input.entry.js.map +1 -1
  676. package/dist/q2-tecton-elements/q2-item.entry.esm.js.map +1 -1
  677. package/dist/q2-tecton-elements/q2-item.entry.js +14 -14
  678. package/dist/q2-tecton-elements/q2-item.entry.js.map +1 -1
  679. package/dist/q2-tecton-elements/q2-legend.entry.esm.js.map +1 -1
  680. package/dist/q2-tecton-elements/q2-legend.entry.js +4 -5
  681. package/dist/q2-tecton-elements/q2-legend.entry.js.map +1 -1
  682. package/dist/q2-tecton-elements/q2-link.q2-list.entry.esm.js.map +1 -1
  683. package/dist/q2-tecton-elements/q2-link_2.entry.js +7 -7
  684. package/dist/q2-tecton-elements/q2-link_2.entry.js.map +1 -1
  685. package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
  686. package/dist/q2-tecton-elements/q2-message.entry.esm.js.map +1 -1
  687. package/dist/q2-tecton-elements/q2-message.entry.js +28 -28
  688. package/dist/q2-tecton-elements/q2-message.entry.js.map +1 -1
  689. package/dist/q2-tecton-elements/q2-meter.entry.esm.js.map +1 -1
  690. package/dist/q2-tecton-elements/q2-meter.entry.js +8 -8
  691. package/dist/q2-tecton-elements/q2-meter.entry.js.map +1 -1
  692. package/dist/q2-tecton-elements/q2-modal.entry.esm.js.map +1 -1
  693. package/dist/q2-tecton-elements/q2-modal.entry.js +53 -53
  694. package/dist/q2-tecton-elements/q2-modal.entry.js.map +1 -1
  695. package/dist/q2-tecton-elements/q2-month-picker.entry.js +1 -1
  696. package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
  697. package/dist/q2-tecton-elements/q2-optgroup.entry.esm.js.map +1 -1
  698. package/dist/q2-tecton-elements/q2-optgroup.entry.js +6 -6
  699. package/dist/q2-tecton-elements/q2-optgroup.entry.js.map +1 -1
  700. package/dist/q2-tecton-elements/q2-option.entry.esm.js.map +1 -1
  701. package/dist/q2-tecton-elements/q2-option.entry.js +3 -3
  702. package/dist/q2-tecton-elements/q2-option.entry.js.map +1 -1
  703. package/dist/q2-tecton-elements/q2-otp.entry.esm.js.map +1 -0
  704. package/dist/q2-tecton-elements/q2-otp.entry.js +453 -0
  705. package/dist/q2-tecton-elements/q2-otp.entry.js.map +1 -0
  706. package/dist/q2-tecton-elements/q2-pagination.entry.esm.js.map +1 -1
  707. package/dist/q2-tecton-elements/q2-pagination.entry.js +29 -29
  708. package/dist/q2-tecton-elements/q2-pagination.entry.js.map +1 -1
  709. package/dist/q2-tecton-elements/q2-pill.entry.esm.js.map +1 -1
  710. package/dist/q2-tecton-elements/q2-pill.entry.js +43 -28
  711. package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -1
  712. package/dist/q2-tecton-elements/q2-radio-group.entry.esm.js.map +1 -1
  713. package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
  714. package/dist/q2-tecton-elements/q2-radio-group.entry.js.map +1 -1
  715. package/dist/q2-tecton-elements/q2-radio.entry.esm.js.map +1 -1
  716. package/dist/q2-tecton-elements/q2-radio.entry.js +10 -10
  717. package/dist/q2-tecton-elements/q2-radio.entry.js.map +1 -1
  718. package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
  719. package/dist/q2-tecton-elements/q2-section-container.entry.js +1 -1
  720. package/dist/q2-tecton-elements/q2-section.entry.esm.js.map +1 -1
  721. package/dist/q2-tecton-elements/q2-section.entry.js +21 -21
  722. package/dist/q2-tecton-elements/q2-section.entry.js.map +1 -1
  723. package/dist/q2-tecton-elements/q2-select.entry.esm.js.map +1 -1
  724. package/dist/q2-tecton-elements/q2-select.entry.js +1 -1
  725. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  726. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +10 -10
  727. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.esm.js.map +1 -1
  728. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +5 -5
  729. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js.map +1 -1
  730. package/dist/q2-tecton-elements/q2-stepper.entry.esm.js.map +1 -1
  731. package/dist/q2-tecton-elements/q2-stepper.entry.js +33 -33
  732. package/dist/q2-tecton-elements/q2-stepper.entry.js.map +1 -1
  733. package/dist/q2-tecton-elements/q2-tab-container.entry.esm.js.map +1 -1
  734. package/dist/q2-tecton-elements/q2-tab-container.entry.js +14 -14
  735. package/dist/q2-tecton-elements/q2-tab-container.entry.js.map +1 -1
  736. package/dist/q2-tecton-elements/q2-tab-pane.entry.js +6 -6
  737. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  738. package/dist/q2-tecton-elements/q2-textarea.entry.esm.js.map +1 -1
  739. package/dist/q2-tecton-elements/q2-textarea.entry.js +1 -1
  740. package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
  741. package/dist/q2-tecton-elements/q2-toast.entry.esm.js.map +1 -1
  742. package/dist/q2-tecton-elements/q2-toast.entry.js +1 -1
  743. package/dist/q2-tecton-elements/q2-toast.entry.js.map +1 -1
  744. package/dist/q2-tecton-elements/q2-tooltip.entry.esm.js.map +1 -1
  745. package/dist/q2-tecton-elements/q2-tooltip.entry.js +136 -20
  746. package/dist/q2-tecton-elements/q2-tooltip.entry.js.map +1 -1
  747. package/dist/q2-tecton-elements/{sanitize-html-string-B35VmRc9.js → sanitize-html-string-DPHNpMWE.js} +147 -142
  748. package/dist/{esm/sanitize-html-string-B35VmRc9.js.map → q2-tecton-elements/sanitize-html-string-DPHNpMWE.js.map} +1 -1
  749. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
  750. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/playwright.config.d.ts +2 -0
  751. package/dist/types/components/q2-action-sheet/q2-action-sheet.d.ts +22 -0
  752. package/dist/types/components/q2-avatar/test/q2-avatar-test.vr.d.ts +1 -0
  753. package/dist/types/components/q2-badge/test/q2-badge-test.vr.d.ts +1 -0
  754. package/dist/types/components/q2-btn/test/q2-btn-test.vr.d.ts +1 -0
  755. package/dist/types/components/q2-calendar/test/q2-calendar-test.vr.d.ts +1 -0
  756. package/dist/types/components/q2-card/test/q2-card-test.vr.d.ts +1 -0
  757. package/dist/types/components/q2-card-image/test/q2-card-image-test.vr.d.ts +1 -0
  758. package/dist/types/components/q2-carousel/q2-carousel.d.ts +29 -0
  759. package/dist/types/components/q2-carousel/test/q2-carousel-test.vr.d.ts +1 -0
  760. package/dist/types/components/q2-chart-area/test/q2-chart-area-test.vr.d.ts +1 -0
  761. package/dist/types/components/q2-chart-bar/test/q2-chart-bar-test.vr.d.ts +1 -0
  762. package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +2 -0
  763. package/dist/types/components/q2-chart-donut/test/q2-chart-donut-test.vr.d.ts +1 -0
  764. package/dist/types/components/q2-checkbox/test/q2-checkbox-test.vr.d.ts +1 -0
  765. package/dist/types/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.d.ts +1 -0
  766. package/dist/types/components/q2-context/test/q2-context-test.vr.d.ts +1 -0
  767. package/dist/types/components/q2-currency/test/q2-currency-test.vr.d.ts +1 -0
  768. package/dist/types/components/q2-data-table/test/q2-data-table-test.vr.d.ts +1 -0
  769. package/dist/types/components/q2-editable-field/test/q2-editable-field-test.vr.d.ts +1 -0
  770. package/dist/types/components/q2-file-picker/test/q2-file-picker-test.vr.d.ts +1 -0
  771. package/dist/types/components/q2-formatted-text/test/q2-formatted-text-test.vr.d.ts +1 -0
  772. package/dist/types/components/q2-grid/q2-grid.d.ts +10 -0
  773. package/dist/types/components/q2-icon/test/q2-icon-test.vr.d.ts +1 -0
  774. package/dist/types/components/q2-input/test/q2-input-test.vr.d.ts +1 -0
  775. package/dist/types/components/q2-legend/q2-legend.d.ts +2 -0
  776. package/dist/types/components/q2-link/test/q2-link-test.vr.d.ts +1 -0
  777. package/dist/types/components/q2-list/test/q2-list-test.vr.d.ts +1 -0
  778. package/dist/types/components/q2-message/test/q2-message-test.vr.d.ts +1 -0
  779. package/dist/types/components/q2-meter/test/q2-meter-test.vr.d.ts +1 -0
  780. package/dist/types/components/q2-modal/test/q2-modal-test.vr.d.ts +1 -0
  781. package/dist/types/components/q2-otp/q2-otp.d.ts +159 -0
  782. package/dist/types/components/q2-pagination/test/q2-pagination-test.vr.d.ts +1 -0
  783. package/dist/types/components/q2-pill/q2-pill.d.ts +5 -2
  784. package/dist/types/components/q2-pill/test/q2-pill-test.vr.d.ts +1 -0
  785. package/dist/types/components/q2-radio/q2-radio.d.ts +1 -1
  786. package/dist/types/components/q2-radio/test/q2-radio-test.vr.d.ts +1 -0
  787. package/dist/types/components/q2-radio-group/test/q2-radio-group-test.vr.d.ts +1 -0
  788. package/dist/types/components/q2-section/test/q2-section-test.vr.d.ts +1 -0
  789. package/dist/types/components/q2-select/test/q2-select-test.vr.d.ts +1 -0
  790. package/dist/types/components/q2-stepper/test/q2-stepper-test.vr.d.ts +1 -0
  791. package/dist/types/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.d.ts +1 -0
  792. package/dist/types/components/q2-tab-container/test/q2-tab-container-test.vr.d.ts +1 -0
  793. package/dist/types/components/q2-tag/test/q2-tag-test.vr.d.ts +1 -0
  794. package/dist/types/components/q2-textarea/test/q2-textarea-test.vr.d.ts +1 -0
  795. package/dist/types/components/q2-tooltip/q2-tooltip.d.ts +4 -0
  796. package/dist/types/components/q2-tooltip/test/q2-tooltip-test.vr.d.ts +1 -0
  797. package/dist/types/components.d.ts +306 -2
  798. package/dist/types/utils/component.d.ts +1 -1
  799. package/dist/types/utils/test/vr-helpers.d.ts +14 -0
  800. package/package.json +12 -3
  801. package/dist/cjs/component-DRAntnCA.js.map +0 -1
  802. package/dist/cjs/index-YvKoRT-t.js.map +0 -1
  803. package/dist/esm/component-DVxzK3WH.js.map +0 -1
  804. package/dist/esm/index-C4PILj1_.js.map +0 -1
  805. package/dist/q2-tecton-elements/component-DVxzK3WH.js +0 -40
  806. package/dist/q2-tecton-elements/component-DVxzK3WH.js.map +0 -1
  807. package/dist/q2-tecton-elements/index-C4PILj1_.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["q2DataTableCss","Q2DataTable","constructor","hostRef","this","allRowsSelected","checkSlotCount","hasDropdowns","hasExpandableRows","hasRowData","serializedHeaders","serializedRows","someRowsSelected","emptyIcon","emptyMessage","selectAlign","selectMode","checkSlots","_b","_a","hostElement","querySelector","_d","_c","onClickRow","event","row","stopPropagation","mirrorEmit","onClickTableRow","clickable","onToggleRow","onControlContainerClick","onSelectRow","selectedRows","currentlySelectedRows","checked","detail","selectedRow","selected","filter","id","length","isIndeterminate","selectEvent","rows","allSelected","defaultPrevented","map","onSort","header","direction","sorted","sortKey","key","sortEvent","shouldAutoSort","sortable","serializedHeader","undefined","sortRows","expanded","toggleEvent","_","console","error","disconnectedCallback","mutationObserver","disconnect","resizeObserver","componentWillLoad","headersHandler","headers","rowsHandler","componentDidLoad","MutationObserver","observer","observe","childList","subtree","attributes","ResizeObserver","resizeIframe","onClickListener","PointerEvent","stopImmediatePropagation","onSelectAllRows","disabled","clickRow","rowId","btn","shadowRoot","click","getCellContent","columnKey","slotContent","textContent","text","sortColumn","toggleRowExpansion","toggleRowSelect","chk","toggleSelectAllRows","selectable","title","toLowerCase","replace","mappedHeaders","defaultRow","cells","isAllSelected","selectAriaLabel","serializedCells","Object","entries","reduce","accum","cellKey","cellData","align","type","lineClamp","verticalAlign","isBadge","defaultCell","value","ariaLabel","badgeStatus","badgeTheme","result","sortedHeader","find","selectableHandler","numberOfColumns","_badgeColumnContent","cell","tags","h","class","x","theme","label","status","size","getSelectRowLabel","Array","isArray","labelParts","allKeysValid","every","part","join","loc","sortedRows","sort","a","b","aValue","bValue","render","caption","hideCaption","renderTableColGroup","renderTableHeader","renderEmptyState","renderTableRows","renderCellContent","includes","valueAsString","loading","colSpan","name","width","backgroundColor","style","hideClickable","selectCheckboxColumn","onChange","indeterminate","headerClasses","push","onClick","striped","inline","isSelectDisabled","clickableClasses","clickableClassString","index","cellSlotPrefix","expandableRowName","dropdownCellName","rowHasExpandableSlot","rowHasDropdownSlot","rowClasses","rowIsClickable","selectCheckboxCell","e","Fragment","tabIndex","cellAlign","cellVerticalAlign","cellClasses","cellStyles","intent","ariaExpanded","ariaControls","hidden"],"sources":["src/components/q2-data-table/q2-data-table.scss?tag=q2-data-table&encapsulation=shadow","src/components/q2-data-table/q2-data-table.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n.container {\n --comp-cell-padding: #{var-list(--tct-data-table-cell-padding, --tct-table-cell-padding, --app-scale-3x, 15px)};\n --comp-select-column-width: #{var-list(\n --tct-data-table-select-column-width,\n --tct-table-select-column-width,\n --tct-checkbox-size,\n 20px\n )};\n --comp-dropdown-column-width: #{var-list(\n --tct-data-table-dropdown-column-width,\n --tct-table-dropdown-column-width,\n --tct-btn-icon-width,\n 44px\n )};\n --comp-expandable-row-control-column-width: #{var-list(\n --tct-data-table-expandable-row-control-column-width,\n --tct-table-expandable-row-control-column-width,\n --tct-btn-icon-width,\n 44px\n )};\n\n overflow: auto;\n @include tiny-scrollbar();\n\n :host([shadowed]:not([shadowed='false'])) & {\n box-shadow: var-list(\n --tct-data-table-shadow,\n --tct-table-shadow,\n --app-shadow-1,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n }\n\n :host([density='compact']) & {\n --comp-cell-padding: #{var-list(\n --tct-data-table-cell-padding-compact,\n --tct-table-cell-padding-compact,\n --app-scale-1x,\n 5px\n )};\n }\n\n :host([density='comfortable']) & {\n --comp-cell-padding: #{var-list(\n --tct-data-table-cell-padding-comfortable,\n --tct-table-cell-padding-comfortable,\n --app-scale-5x,\n 25px\n )};\n }\n\n :host([sticky]:not([sticky='false'])) & {\n overflow: unset;\n }\n}\n\ntable {\n table-layout: var-list(--tct-data-table-layout, --tct-table-layout, auto);\n border-collapse: collapse;\n border-spacing: 0;\n width: var-list(--tct-data-table-width, --tct-table-width);\n min-width: 100%;\n background: var-list(--tct-data-table-background, --tct-table-background, --t-base, #ffffff);\n backdrop-filter: var-list(--tct-data-table-backdrop-filter, none);\n caption-side: var-list(--tct-data-table-caption-side, --tct-table-caption-side, bottom);\n}\n\nthead {\n border-width: var-list(--tct-data-table-header-border-width, --tct-table-header-border-width, unquote('0 0 2px 0'));\n border-style: var-list(--tct-data-table-header-border-style, --tct-table-header-border-style, solid);\n border-color: var-list(--tct-data-table-header-border-color, --tct-table-header-border-color, --t-gray-9, #999999);\n background: var-list(--tct-data-table-header-background, --tct-table-header-background);\n\n :host([sticky]:not([sticky='false'])) & {\n position: sticky;\n top: var(--tct-data-table-sticky-header-top, 0px);\n background: var-list(--tct-data-table-sticky-header-background, --tct-table-background, --t-base, #ffffff);\n }\n}\n\ncol {\n &.select-column {\n width: var(--comp-select-column-width);\n }\n\n &.expandable-row-control-column {\n width: var(--comp-expandable-row-control-column-width);\n }\n\n &.dropdown-column {\n width: var(--comp-dropdown-column-width);\n }\n\n :host(:is([bordered='vertical'], [bordered='grid'])) & {\n border-width: var-list(--tct-data-table-column-border-width, unquote('0 1px 0 0'));\n border-style: var-list(--tct-data-table-column-border-style, solid);\n border-color: var-list(--tct-data-table-column-border-color, --t-gray-9, #999999);\n\n &:last-child {\n border: none;\n }\n }\n}\n\ntd,\nth {\n padding: var(--comp-cell-padding);\n text-align: start;\n vertical-align: middle;\n\n &.align-end {\n text-align: end;\n }\n &.align-center {\n text-align: center;\n }\n &.vertical-align-top {\n vertical-align: top;\n }\n &.vertical-align-bottom {\n vertical-align: bottom;\n }\n}\n\nth {\n .header-content {\n font-weight: var-list(--tct-data-table-header-font-weight, --tct-table-header-font-weight, 600);\n font-size: var-list(--tct-data-table-header-font-size, --app-font-size, 14px);\n }\n\n &.sorted {\n .header-content {\n font-weight: var-list(\n --tct-data-table-header-sorted-font-weight,\n --tct-table-header-sorted-font-weight,\n 600\n );\n }\n }\n\n .sorted-indicator {\n --comp-header-sortable-icon-size: #{var-list(\n --tct-data-table-header-sortable-icon-size,\n --tct-table-header-sortable-icon-size,\n --app-scale-3x,\n 15px\n )};\n --tct-icon-stroke-width: 2;\n\n width: var(--comp-header-sortable-icon-size);\n height: var(--comp-header-sortable-icon-size);\n\n &.direction-ASC {\n transform: rotate(180deg);\n }\n }\n\n q2-btn {\n .header-content {\n display: flex;\n align-items: center;\n gap: var-list(--tct-data-table-header-content-gap, --tct-table-header-content-gap, --app-scale-2x, 10px);\n }\n }\n}\n\ntr {\n &.expandable,\n &.clickable {\n cursor: pointer;\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n }\n\n &.expandable {\n --tct-btn-icon-hover-background: transparent;\n &:hover {\n background: var-list(--tct-data-table-expandable-row-hover-background --t-gray-14, #f2f2f2);\n }\n }\n\n &.striped-even {\n background: var-list(--tct-data-table-row-even-background, --t-gray-14, #f2f2f2);\n\n &.expanded {\n background: var-list(\n --tct-data-table-expanded-row-even-background,\n --tct-data-table-expanded-row-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n\n &.expandable {\n &:hover {\n background: var-list(\n --tct-data-table-expandable-row-even-hover-background,\n --tct-data-table-expandable-row-hover-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n }\n }\n &.striped-odd {\n background: var-list(--tct-data-table-row-odd-background, transparent);\n\n &.expanded {\n background: var-list(\n --tct-data-table-expanded-row-odd-background,\n --tct-data-table-expanded-row-background,\n --t-gray-14,\n transparent\n );\n }\n\n &.expandable {\n &:hover {\n background: var-list(\n --tct-data-table-expandable-row-odd-hover-background,\n --tct-data-table-expandable-row-hover-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n }\n }\n\n &.clickable {\n &:hover {\n background: var-list(\n --tct-data-table-clickable-row-hover-background,\n --tct-table-clickable-row-hover-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n }\n\n &.selected {\n background: var-list(\n --tct-data-table-selected-row-background,\n --tct-table-selected-row-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n\n &.expanded {\n background: var-list(\n --tct-data-table-expanded-row-background,\n --tct-table-expanded-row-background,\n --t-gray-14,\n #f2f2f2\n );\n\n .toggle-expandable-row {\n transform: rotate(180deg);\n }\n }\n\n :host(:is([bordered], [bordered='horizontal'], [bordered='grid']):not([bordered='vertical'], [bordered='false']))\n tbody\n & {\n border-width: var-list(--tct-data-table-row-border-width, --tct-table-row-border-width, unquote('0 0 1px 0'));\n border-style: var-list(--tct-data-table-row-border-style, --tct-table-row-border-style, solid);\n border-color: var-list(--tct-data-table-row-border-color, --tct-table-row-border-color, --t-gray-9, #999999);\n }\n\n &.loading-row {\n background: var-list(\n --tct-data-table-loading-row-background,\n --tct-table-loading-row-background,\n --t-base,\n #ffffff\n );\n td {\n text-align: center;\n }\n\n q2-loading {\n font-size: 4em;\n }\n }\n\n &.empty-state {\n background: var-list(--tct-data-table-loading-row-background, --t-base, #ffffff);\n td {\n text-align: center;\n }\n .empty-state-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: var(--app-scale-10x, 50px);\n padding-bottom: var(--app-scale-10x, 50px);\n gap: var(--app-scale-4x, 20px);\n --tct-icon-size: var(--app-scale-6x, 30px);\n }\n }\n\n &.expandable-row {\n background: var-list(\n --tct-data-table-expanded-row-background,\n --tct-table-expanded-row-background,\n --t-gray-14,\n #f2f2f2\n );\n\n .striped-odd + & {\n background: var-list(\n --tct-data-table-expanded-row-odd-background,\n --tct-data-table-expanded-row-background,\n --t-gray-14,\n transparent\n );\n }\n\n .striped-even + & {\n background: var-list(\n --tct-data-table-expanded-row-even-background,\n --tct-data-table-expanded-row-background,\n --t-gray-14,\n transparent\n );\n }\n }\n}\n\ntd {\n font-size: var-list(--tct-data-table-cell-font-size, inherit);\n\n &.clamped {\n div {\n text-overflow: ellipsis;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: var(--comp-line-clamp-count, 1);\n -webkit-box-orient: vertical;\n }\n }\n\n &.expandable-row-control-column {\n --tct-btn-icon-hover-bg: transparent;\n padding: var-list(\n --tct-data-table-expandable-row-control-column-padding,\n --tct-table-expandable-row-control-column-padding,\n unquote('0 5px')\n );\n text-align: center;\n }\n\n &.dropdown-column {\n padding: var-list(\n --tct-data-table-dropdown-column-padding,\n --tct-table-dropdown-column-padding,\n unquote('0 5px')\n );\n text-align: center;\n }\n\n &.click-column:not(.sr) {\n padding: var-list(\n --tct-data-table-clickable-column-padding,\n --tct-table-clickable-column-padding,\n unquote('0 5px')\n );\n text-align: center;\n }\n}\n\ncaption {\n padding: var-list(--tct-data-table-caption-padding, --tct-table-caption-padding, --app-scale-2x, 10px);\n font-size: var-list(--tct-data-table-caption-font-size, --tct-table-caption-font-size, inherit);\n font-weight: var-list(--tct-data-table-caption-font-weight, --tct-table-caption-font-weight, 600);\n text-align: var-list(--tct-data-table-caption-text-align, --tct-table-caption-text-align, center);\n color: var-list(--tct-data-table-caption-color, --tct-table-caption-color, inherit);\n}\n\nq2-checkbox {\n padding: 0;\n}\n\n.tag-table {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n row-gap: var(--app-scale-2x);\n column-gap: var(--app-scale-2x);\n\n q2-tag {\n --tct-tag-font-size: var(--app-font-size, 14px);\n --tct-tag-padding-inline: var(--app-scale-2x, 10px);\n --tct-tag-height: var(--app-scale-4x, 20px);\n --tct-tag-margin: 0;\n }\n}\n","import {\n Component,\n State,\n Prop,\n h,\n ComponentInterface,\n Watch,\n Event,\n Element,\n EventEmitter,\n Fragment,\n Listen,\n Method,\n} from '@stencil/core';\nimport { loc, resizeIframe } from '../../utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\nimport type {\n Q2DataTableHeader,\n Q2DataTableCell,\n Q2DataTableSerializedCells,\n Q2DataTableRow,\n Q2DataTableSerializedRow,\n} from 'q2-tecton-common/lib/types/elements';\n\nexport type Q2DataTableBadgeCell = Q2DataTableCell & {\n type: 'badge';\n tags: {\n value: any;\n badgeTheme: HTMLQ2BadgeElement['theme'];\n }[];\n};\n\n/**\n * @name Data Table\n * @category Display\n * @summary Use for displaying large datasets with sorting, filtering, and selecting.\n * @slot row-<id>-cell-<key> - A slot for overriding the content of any cell in any row of the table with custom content.\n * @slot header-cell-<key> - A slot for the content of any cell in the header of the table.\n * @slot row-<id>-dropdown - A slot to provide a [Dropdown](https://tecton.q2developer.com/design-system/q2-dropdown/) for a row.\n * @slot row-<id>-expandable-content - A slot that makes the row expandable and displays the provided content.\n * @slot empty-table - An optional slot to display custom content when the table is empty.\n */\n@Component({ tag: 'q2-data-table', shadow: true, styleUrl: 'q2-data-table.scss' })\nexport class Q2DataTable implements ComponentInterface {\n // #region Own Properties\n\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n allRowsSelected: boolean = false;\n\n @State()\n checkSlotCount: number = 0;\n\n @State()\n hasDropdowns: boolean = false;\n\n @State()\n hasExpandableRows: boolean = false;\n\n @State()\n hasRowData: boolean = false;\n\n @State()\n serializedHeaders: Q2DataTableHeader[] = [];\n\n @State()\n serializedRows: Q2DataTableSerializedRow[] = [];\n\n @State()\n someRowsSelected: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Adds borders between rows and/or columns in the table. */\n @Prop({ mutable: true, reflect: true })\n bordered: boolean | 'horizontal' | 'vertical' | 'grid';\n\n /** Provides a caption for the data table. */\n @Prop({ mutable: true })\n caption: string;\n\n /** Adds the ability to click a row and have the table emit an event with the selected row's data. */\n @Prop({ mutable: true, reflect: true })\n clickable: boolean;\n\n /** Determines the amount of padding for each of the cells in the table. */\n @Prop({ mutable: true, reflect: true })\n density: 'compact' | 'normal' | 'comfortable';\n\n /** Determines the `q2-icon` that will display when `rows` has no value. */\n @Prop({ reflect: true })\n emptyIcon: string = 'inbox';\n\n /** Determines the message that will display when `rows` has no value.\n * @localizable\n */\n @Prop({ reflect: true })\n emptyMessage: string = 'tecton.element.dataTable.emptyMessage';\n\n /**\n * Defines the headers of the table.\n *\n * **Example:**\n * @snippet\n * element.headers = [\n * {\n * title: 'Day of the Week',\n * key: 'day',\n * },\n * {\n * title: 'Sales',\n * key: 'sales',\n * align: 'end',\n * }\n * ]\n *\n */\n @Prop({ mutable: true })\n headers: Q2DataTableHeader[];\n\n /** Hides the caption from view, but still makes it available to screen readers for accessibility purposes. */\n @Prop({ mutable: true, reflect: true })\n hideCaption: boolean;\n\n /**\n * Visually hides the `Select` button that displays when `clickable=true`. It will still be discoverable by assistive technologies.\n *\n * @info\n * Use of this property requires `clickable` to be set to `true`.\n */\n @Prop({ mutable: true })\n hideClickable: boolean;\n\n /** Displays a loading state on the table to indicate background activity. */\n @Prop({ mutable: true, reflect: true })\n loading: boolean;\n\n /**\n * Defines the rows of the table.\n *\n * **Example:**\n * @snippet\n * element.rows = [\n * {\n * id: 1,\n * cells: {\n * day: 'Monday',\n * sales: 93\n * }\n * },\n * {\n * id: 2,\n * cells: {\n * day: 'Tuesday',\n * sales: 127\n * }\n * },\n * {\n * id: 3,\n * cells: {\n * day: 'Wednesday',\n * sales: 121\n * }\n * ]\n */\n @Prop({ mutable: true })\n rows: Q2DataTableRow[];\n\n /** Adds a checkbox to each row of the table making it selectable. */\n @Prop({ mutable: true, reflect: true })\n selectable: boolean;\n\n /**\n * Controls the position of the checkbox column when `selectable` is true.\n * When set to 'right', the checkbox column will appear on the right side of the table.\n *\n * @warning\n * Use of this property requires `selectable` to be set to `true`.\n */\n @Prop({ mutable: true })\n selectAlign: 'left' | 'right' = 'left';\n\n /**\n * Returns selected rows.\n * @readonly\n */\n @Prop({ mutable: true })\n get selectedRows(): Q2DataTableRow[] {\n return this.serializedRows?.filter(({ selected }) => !!selected) || [];\n }\n\n set selectedRows(_) {\n console.error('Direct assignment to selectedRows is not allowed.');\n }\n\n /**\n * Determines if the selectable checkboxes allow for multi-select or not. If set to \"single\", once a row is selected, all other rows will be disabled.\n * See the documentation on the `select` event for how to handle selections.\n *\n * @warning\n * Use of this property requires `selectable` to be set to `true`.\n */\n @Prop({ mutable: true })\n selectMode: 'multiple' | 'single' = 'multiple';\n\n /** Adds a shadow to the table */\n @Prop({ mutable: true, reflect: true })\n shadowed: boolean;\n\n /** Makes table header sticky */\n @Prop({ reflect: true })\n sticky: boolean;\n\n /** Enables alternating background colors for the table rows */\n @Prop({ reflect: true })\n striped: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when a row is clicked.\n *\n * Requires the `clickable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default click behavior.\n * @deprecated Use 'tctClick' instead\n */\n @Event()\n click: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n /**\n * Emitted when a row is selected.\n *\n * Requires the `selectable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default selection behavior.\n * @deprecated Use 'tctSelect' instead\n */\n @Event()\n select: EventEmitter<{\n row: Q2DataTableSerializedRow;\n rows: Q2DataTableSerializedRow[];\n allSelected: boolean;\n }>;\n\n /**\n * Emitted when the select-all checkbox is toggled.\n *\n * Requires the `selectable` prop to be set to `true` and the `selectMode` prop to be set to `multiple`.\n *\n * Call `event.preventDefault()` to prevent the default behavior.\n * @deprecated Use 'tctSelectAllRows' instead\n */\n @Event()\n selectAllRows: EventEmitter<{ checked: boolean }>;\n\n /**\n * Emitted when a column is sorted.\n *\n * Requires the `sortable` prop to be set to `true` on the column.\n *\n * Call `event.preventDefault()` to prevent the default sorting behavior.\n * @deprecated Use 'tctSort' instead\n */\n @Event()\n sort: EventEmitter<{ header: Q2DataTableHeader; direction: 'ASC' | 'DESC' }>;\n\n /**\n * Emitted when a row is clicked.\n *\n * Requires the `clickable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default click behavior.\n */\n @Event()\n tctClick: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n /**\n * Emitted when a row is selected.\n *\n * Requires the `selectable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default selection behavior.\n */\n @Event()\n tctSelect: EventEmitter<{\n row: Q2DataTableSerializedRow;\n rows: Q2DataTableSerializedRow[];\n allSelected: boolean;\n }>;\n\n /**\n * Emitted when the select-all checkbox is toggled.\n *\n * Requires the `selectable` prop to be set to `true` and the `selectMode` prop to be set to `multiple`.\n *\n * Call `event.preventDefault()` to prevent the default behavior.\n */\n @Event()\n tctSelectAllRows: EventEmitter<{ checked: boolean }>;\n\n /**\n * Emitted when a column is sorted.\n *\n * Requires the `sortable` prop to be set to `true` on the column.\n *\n * Call `event.preventDefault()` to prevent the default sorting behavior.\n */\n @Event()\n tctSort: EventEmitter<{ header: Q2DataTableHeader; direction: 'ASC' | 'DESC' }>;\n\n /**\n * Emitted when an expandable row is toggled.\n *\n * Requires content in the `row-{id}-expandable-content` slot.\n *\n * Call `event.preventDefault()` to prevent the default toggling behavior.\n */\n @Event()\n tctToggle: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n /**\n * Emitted when an expandable row is toggled.\n *\n * Requires content in the `row-{id}-expandable-content` slot.\n *\n * Call `event.preventDefault()` to prevent the default toggling behavior.\n * @deprecated Use 'tctToggle' instead\n */\n @Event()\n toggle: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n\n componentWillLoad() {\n this.headersHandler(this.headers);\n this.rowsHandler(this.rows);\n }\n\n componentDidLoad(): void {\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver(() => this.checkSlots());\n observer.observe(this.hostElement, { childList: true, subtree: true, attributes: true });\n this.mutationObserver = observer;\n }\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => resizeIframe());\n this.resizeObserver.observe(this.hostElement);\n }\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n onClickListener(event: MouseEvent) {\n if (event instanceof PointerEvent) event.stopImmediatePropagation();\n }\n\n @Listen('selectAllRows')\n onSelectAllRows(event: CustomEvent<{ checked: boolean }>) {\n event.stopPropagation();\n const { checked } = event.detail;\n const selectedRows = checked\n ? this.serializedRows.map(row => {\n if (row.disabled) {\n return row;\n } else {\n return {\n ...row,\n selected: checked,\n };\n }\n })\n : [];\n const selectEvent = mirrorEmit(this, ['select', 'tctSelect'], {\n row: undefined,\n rows: selectedRows,\n allSelected: checked,\n });\n if (selectEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => {\n if (row.disabled) return row;\n row.selected = checked;\n return row;\n });\n this.allRowsSelected = checked;\n this.someRowsSelected = false;\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to click a row that accepts a row ID that is will be clicked.\n *\n * @testOnly\n */\n @Method()\n async clickRow(rowId: number | string) {\n const btn = this.hostElement.shadowRoot.querySelector(`#row-${rowId} q2-btn[test-id=\"clickable-row-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method that returns the plain text value of a particular cell (including slot content).\n *\n * @testOnly\n */\n @Method()\n async getCellContent(rowId: number | string, columnKey: string) {\n const slotContent = this.hostElement.querySelector(`[slot=row-${rowId}-cell-${columnKey}`)?.textContent;\n const text = this.hostElement.shadowRoot.querySelector(\n `slot[name=row-${rowId}-cell-${columnKey}]`\n )?.textContent;\n return slotContent || text || '';\n }\n\n /**\n * A method to sort a column that accepts a header object with key</b> and <b>sorted</b> property.\n *\n * @testOnly\n */\n @Method()\n async sortColumn(header: Q2DataTableHeader) {\n const btn = this.hostElement.shadowRoot.querySelector(`#header-${header.key} q2-btn[test-id=\"sort-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method to toggle row expansion that accepts a row ID that will be clicked to expand or collapse the expandable content\n *\n * @testOnly\n */\n @Method()\n async toggleRowExpansion(rowId: number | string) {\n const btn = this.hostElement.shadowRoot.querySelector(`#row-${rowId} q2-btn[test-id=\"expandable-row-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method to toggle row selection that accepts a row ID whose checkbox will be checked, if the feature is enabled.\n *\n * @testOnly\n */\n @Method()\n async toggleRowSelect(rowId: number | string) {\n const chk = this.hostElement.shadowRoot.querySelector(\n `#row-${rowId} q2-checkbox[test-id=\"select-row-control\"]`\n );\n (chk as HTMLQ2CheckboxElement)?.click();\n }\n\n /**\n * A method to toggle select all button (checkbox) on left top corner.\n *\n * @testOnly\n */\n @Method()\n async toggleSelectAllRows() {\n if (!this.selectable) return;\n const chk = this.hostElement.shadowRoot.querySelector(`q2-checkbox[test-id=\"select-all-rows-control\"]`);\n (chk as HTMLQ2CheckboxElement)?.click();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('headers')\n headersHandler(headers: Q2DataTableHeader[] = []) {\n this.serializedHeaders = headers.map<Q2DataTableHeader>(header => {\n const { title } = header;\n let { key } = header;\n\n // If no key is provided, generate one from the title\n if (!key) key = title.toLowerCase().replace(/\\s/g, '-');\n\n return {\n key,\n ...header,\n };\n });\n }\n\n @Watch('rows')\n rowsHandler(rows: Q2DataTableRow[] = []) {\n const { serializedHeaders, mappedHeaders } = this;\n const defaultRow = {\n id: null,\n cells: {},\n selected: false,\n expanded: false,\n disabled: false,\n };\n\n // tracks if the select-all checkbox should be visually updated as the `rows` are built\n let isAllSelected = true;\n let isIndeterminate = false;\n\n const serializedRows = rows.map(({ id, cells, selected, expanded, disabled, selectAriaLabel }) => {\n const serializedCells = Object.entries(cells).reduce<Q2DataTableSerializedCells>(\n (accum, [cellKey, cellData]) => {\n const header = mappedHeaders[cellKey] || ({} as Q2DataTableHeader);\n const { align, type = 'text', lineClamp, verticalAlign } = header;\n\n const isBadge = 'type' in header && header.type === 'badge';\n const defaultCell: Q2DataTableCell = {\n value: '',\n ariaLabel: undefined,\n type,\n align,\n lineClamp,\n verticalAlign,\n badgeStatus: isBadge ? header.badgeStatus : undefined,\n badgeTheme: isBadge ? header.badgeTheme : undefined,\n };\n\n const result: Q2DataTableCell =\n typeof cellData === 'object'\n ? { ...defaultCell, ...cellData }\n : { ...defaultCell, value: cellData };\n\n accum[cellKey] = result;\n return accum;\n },\n {}\n );\n\n if (isAllSelected && !selected) isAllSelected = false;\n if (!isAllSelected && selected) isIndeterminate = true;\n return {\n ...defaultRow,\n id,\n selected: !!selected,\n expanded: !!expanded,\n disabled: !!disabled,\n selectAriaLabel,\n cells: serializedCells,\n };\n });\n\n const sortedHeader = serializedHeaders.find(({ sorted }) => sorted);\n const shouldAutoSort = !!sortedHeader && sortedHeader.sortable !== 'manual';\n\n this.hasRowData = !!rows.length;\n this.allRowsSelected = this.hasRowData && isAllSelected;\n this.someRowsSelected = this.hasRowData && isIndeterminate;\n\n this.serializedRows = !!shouldAutoSort ? this.sortRows(serializedRows, sortedHeader) : serializedRows;\n this.checkSlots();\n }\n\n @Watch('selectable')\n selectableHandler() {\n if (this.selectable === false) {\n mirrorEmit(this, ['selectAllRows', 'tctSelectAllRows'], { checked: false });\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get mappedHeaders() {\n return this.serializedHeaders.reduce<Record<string, Q2DataTableHeader>>((accum, header) => {\n accum[header.key] = header;\n return accum;\n }, {});\n }\n\n get numberOfColumns() {\n return (\n (this.serializedHeaders?.length ?? 0) +\n (this.selectable ? 1 : 0) +\n (this.clickable ? 1 : 0) +\n (this.hasExpandableRows ? 1 : 0) +\n (this.hasDropdowns ? 1 : 0)\n );\n }\n\n _badgeColumnContent(cell: Q2DataTableBadgeCell) {\n if (cell.tags?.length) {\n return (\n <div class=\"tag-table\">\n {cell.tags.map(x => {\n return (\n <q2-tag\n theme={x.badgeTheme}\n label={x.value}\n />\n );\n })}\n </div>\n );\n }\n\n return (\n <q2-badge\n aria-label={cell.ariaLabel}\n value={typeof cell.value !== 'boolean' ? cell.value : cell.value ? 1 : 0}\n theme={cell.badgeTheme}\n status={cell.badgeStatus}\n size=\"large\"\n />\n );\n }\n\n checkSlots = () => {\n this.hasExpandableRows = !!(this.hostElement?.querySelector(`[slot$=\"-expandable-content\"]`) ?? false);\n this.hasDropdowns = !!(this.hostElement?.querySelector(`[slot$=\"-dropdown\"]`) ?? false);\n\n // The booleans above may not change, even if the slot has content\n // So we increment this property to force a re-render and ensure proper rendering\n this.checkSlotCount += 1;\n };\n\n getSelectRowLabel(row: Q2DataTableSerializedRow): string {\n const { selectAriaLabel, cells } = row;\n\n if (typeof selectAriaLabel === 'string') {\n return selectAriaLabel;\n }\n\n if (Array.isArray(selectAriaLabel)) {\n const labelParts = selectAriaLabel.map(key => {\n const cell = cells[key];\n const header = this.serializedHeaders.find(h => h.key === key);\n if (cell?.value === undefined || !header) return undefined;\n return `${header.title} ${cell.value}`;\n });\n const allKeysValid = labelParts.every(part => part !== undefined);\n\n if (allKeysValid) {\n return `Select row for ${labelParts.join(', ')}`;\n }\n }\n\n return loc('tecton.element.dataTable.selectRow');\n }\n\n onClickRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n mirrorEmit(this, ['click', 'tctClick'], { row });\n };\n\n onClickTableRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n if (this.clickable) {\n this.onClickRow(event, row);\n } else if (this.hasExpandableRows) {\n this.onToggleRow(event, row);\n }\n };\n\n onControlContainerClick = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n onSelectRow = (event: CustomEvent<{ checked: boolean }>, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n const { selectMode, serializedRows, selectedRows: currentlySelectedRows = [] } = this;\n const { checked } = event.detail;\n\n const selectedRow = { ...row, selected: checked };\n let selectedRows;\n if (selectMode === 'single') {\n selectedRows = checked ? [selectedRow] : [];\n } else {\n selectedRows = checked\n ? [...currentlySelectedRows, selectedRow]\n : currentlySelectedRows.filter(row => row.id !== selectedRow.id);\n }\n\n const allRowsSelected = selectedRows.length === serializedRows.length;\n const isIndeterminate = !allRowsSelected && selectedRows.length > 0;\n const selectEvent = mirrorEmit(this, ['select', 'tctSelect'], {\n row: selectedRow,\n rows: selectedRows,\n allSelected: allRowsSelected,\n });\n if (selectEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => (row.id === selectedRow.id ? selectedRow : row));\n this.allRowsSelected = allRowsSelected;\n this.someRowsSelected = isIndeterminate;\n };\n\n onSort = (header: Q2DataTableHeader) => {\n const direction = header.sorted === 'ASC' ? 'DESC' : 'ASC';\n const sortKey = header.key;\n const sortEvent = mirrorEmit(this, ['sort', 'tctSort'], { header, direction });\n if (sortEvent.defaultPrevented) return;\n\n const shouldAutoSort = header.sortable !== 'manual';\n if (!shouldAutoSort) return;\n\n this.serializedHeaders = this.serializedHeaders.map<Q2DataTableHeader>(serializedHeader => {\n const sorted = sortKey === serializedHeader.key ? direction : undefined;\n return { ...serializedHeader, sorted };\n });\n\n this.serializedRows = this.sortRows(this.serializedRows, { ...header, sorted: direction });\n };\n\n onToggleRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n const selectedRow = { ...row, expanded: !row.expanded };\n const toggleEvent = mirrorEmit(this, ['toggle', 'tctToggle'], { row: selectedRow });\n if (toggleEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => {\n if (row.id === selectedRow.id) return selectedRow;\n else return { ...row };\n });\n };\n\n sortRows(rows: Q2DataTableSerializedRow[], header: Q2DataTableHeader) {\n const { key, sorted } = header;\n const direction = sorted || 'ASC';\n\n const sortedRows = [...rows].sort((a, b) => {\n const aValue = a.cells[key].value;\n const bValue = b.cells[key].value;\n\n if (aValue < bValue) return direction === 'ASC' ? -1 : 1;\n if (aValue > bValue) return direction === 'ASC' ? 1 : -1;\n return 0;\n });\n\n return sortedRows;\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { caption } = this;\n return (\n <div class=\"container\">\n <table>\n {caption && <caption class={this.hideCaption ? 'sr' : undefined}>{caption}</caption>}\n {this.renderTableColGroup()}\n {this.renderTableHeader()}\n {this.renderEmptyState()}\n {this.renderTableRows()}\n </table>\n </div>\n );\n }\n\n renderCellContent(cell: Q2DataTableCell) {\n if (!cell) return;\n\n const { type, ariaLabel, value } = cell;\n\n if ([undefined, null].includes(value)) return;\n\n switch (type) {\n case 'badge':\n return this._badgeColumnContent(cell as Q2DataTableBadgeCell);\n\n case 'icon':\n const valueAsString = typeof value === 'string' ? value : `${value}`;\n return (\n <q2-icon\n label={ariaLabel}\n type={valueAsString}\n ></q2-icon>\n );\n\n case 'boolean':\n return !!value ? (\n <q2-icon\n label={loc('tecton.element.dataTable.booleanTrue')}\n type=\"checkmark\"\n ></q2-icon>\n ) : (\n <div aria-label={loc('tecton.element.dataTable.booleanFalse')}></div>\n );\n\n case 'code':\n return <code aria-label={ariaLabel}>{value}</code>;\n\n default:\n return <div aria-label={ariaLabel}>{value}</div>;\n }\n }\n\n renderEmptyState() {\n const { hasRowData, numberOfColumns, emptyIcon, emptyMessage, loading } = this;\n if (hasRowData || loading) return null;\n\n return (\n <tbody>\n <tr class=\"empty-state\">\n <td colSpan={numberOfColumns}>\n <slot name=\"empty-table\">\n <div class=\"empty-state-content\">\n <q2-icon type={emptyIcon}></q2-icon>\n <p>{loc(emptyMessage)}</p>\n </div>\n </slot>\n </td>\n </tr>\n </tbody>\n );\n }\n\n renderTableColGroup() {\n const {\n serializedHeaders: headers,\n selectable,\n selectAlign,\n clickable,\n hasExpandableRows,\n hasDropdowns,\n } = this;\n\n if (!headers.length) return null;\n\n return (\n <colgroup>\n {selectable && selectAlign === 'left' && <col class=\"select-column\" />}\n {headers.map(({ width, backgroundColor }) => (\n <col style={{ width, backgroundColor }} />\n ))}\n {clickable && <col class=\"click-column\" />}\n {hasExpandableRows && <col class=\"expandable-row-control-column\" />}\n {hasDropdowns && <col class=\"dropdown-column\" />}\n {selectable && selectAlign === 'right' && <col class=\"select-column\" />}\n </colgroup>\n );\n }\n\n renderTableHeader() {\n const {\n serializedHeaders: headers,\n selectable,\n clickable,\n hideClickable,\n selectMode,\n hasExpandableRows,\n hasDropdowns,\n allRowsSelected,\n someRowsSelected,\n hasRowData,\n loading,\n } = this;\n\n if (!headers.length) return null;\n\n const selectCheckboxColumn = selectable ? (\n <th class=\"select-column\">\n {selectMode === 'multiple' ? (\n <q2-checkbox\n label={loc('tecton.element.dataTable.selectAllRows')}\n hide-label\n onChange={() =>\n mirrorEmit(this, ['selectAllRows', 'tctSelectAllRows'], {\n checked: !allRowsSelected,\n })\n }\n checked={hasRowData && allRowsSelected && !someRowsSelected}\n indeterminate={hasRowData && someRowsSelected && !allRowsSelected}\n disabled={loading || !hasRowData}\n test-id=\"select-all-rows-control\"\n ></q2-checkbox>\n ) : (\n <span class=\"sr\">{loc('tecton.element.dataTable.selectRow')}</span>\n )}\n </th>\n ) : null;\n\n return (\n <thead>\n <tr>\n {selectable && this.selectAlign === 'left' && selectCheckboxColumn}\n {headers.map(header => {\n const { align, sorted, verticalAlign } = header;\n const headerClasses = [];\n if (align) headerClasses.push(`align-${align}`);\n if (verticalAlign) headerClasses.push(`vertical-align-${verticalAlign}`);\n if (!!sorted) headerClasses.push('sorted');\n return (\n <th\n class={headerClasses.join(' ')}\n id={`header-${header.key}`}\n >\n {header.sortable ? (\n <q2-btn\n onClick={() => this.onSort(header)}\n test-id=\"sort-control\"\n disabled={this.loading}\n >\n <div\n class=\"header-content\"\n aria-label={header.ariaLabel || undefined}\n >\n <slot name={`header-cell-${header.key}`}>{header.title}</slot>\n\n {!!sorted ? (\n <q2-icon\n class={`sorted-indicator direction-${sorted}`}\n type=\"arrow-down\"\n label={\n sorted === 'ASC'\n ? loc('tecton.element.dataTable.sortedAscending')\n : loc('tecton.element.dataTable.sortedDescending')\n }\n test-id=\"sorted-indicator\"\n ></q2-icon>\n ) : (\n <q2-icon\n class={`sorted-indicator`}\n type=\"sort\"\n label={loc('tecton.element.dataTable.clickToSort')}\n test-id=\"sorted-indicator\"\n ></q2-icon>\n )}\n </div>\n </q2-btn>\n ) : (\n <div\n class=\"header-content\"\n aria-label={header.ariaLabel || undefined}\n >\n <slot name={`header-cell-${header.key}`}>{header.title}</slot>\n </div>\n )}\n </th>\n );\n })}\n {selectable && this.selectAlign === 'right' && selectCheckboxColumn}\n {clickable && (\n <th\n id=\"click\"\n class={hideClickable ? 'sr' : undefined}\n >\n <span class=\"sr\">{loc('tecton.element.dataTable.clickRow')}</span>\n </th>\n )}\n {hasExpandableRows && (\n <th id=\"toggle\">\n <span class=\"sr\">{loc('tecton.element.dataTable.toggleRow')}</span>\n </th>\n )}\n {hasDropdowns && (\n <th>\n <span class=\"sr\">{loc('tecton.element.dataTable.dropdown')}</span>\n </th>\n )}\n </tr>\n </thead>\n );\n }\n\n renderTableRows() {\n const {\n serializedHeaders: headers,\n serializedRows: rows,\n selectable,\n clickable,\n striped,\n hideClickable,\n selectMode,\n hasExpandableRows,\n hasDropdowns,\n numberOfColumns,\n loading,\n } = this;\n\n if (loading) {\n return (\n <tbody>\n <tr class=\"loading-row\">\n <td colSpan={numberOfColumns}>\n <q2-loading inline></q2-loading>\n </td>\n </tr>\n </tbody>\n );\n }\n\n let isSelectDisabled = false;\n let selectedRow;\n if (selectMode === 'single') {\n selectedRow = this.serializedRows.find(({ selected }) => !!selected);\n isSelectDisabled = !!selectedRow;\n }\n const clickableClasses = [];\n if (clickable) clickableClasses.push('click-column');\n if (hideClickable) clickableClasses.push('sr');\n const clickableClassString = clickableClasses.join(' ');\n\n return (\n <tbody>\n {rows.map((row, index) => {\n const cellSlotPrefix = `row-${row.id}-cell`;\n const expandableRowName = `row-${row.id}-expandable-content`;\n const dropdownCellName = `row-${row.id}-dropdown`;\n const rowHasExpandableSlot =\n hasExpandableRows && !!this.hostElement.querySelector(`[slot=\"${expandableRowName}\"]`);\n const rowHasDropdownSlot =\n hasDropdowns && !!this.hostElement.querySelector(`[slot=\"${dropdownCellName}\"]`);\n const rowClasses = [];\n if (rowHasExpandableSlot) rowClasses.push('expandable');\n if (clickable) rowClasses.push('clickable');\n if (striped) rowClasses.push(`striped-${index % 2 ? 'even' : 'odd'}`);\n if (row.expanded) rowClasses.push('expanded');\n if (row.selected) rowClasses.push('selected');\n const rowIsClickable = clickable || rowHasExpandableSlot;\n\n const selectCheckboxCell = selectable ? (\n <td\n class=\"select-column\"\n onClick={this.onControlContainerClick}\n >\n <q2-checkbox\n label={this.getSelectRowLabel(row)}\n hide-label\n checked={row.selected}\n disabled={(isSelectDisabled && row !== selectedRow) || row.disabled}\n onChange={e => this.onSelectRow(e, row)}\n test-id=\"select-row-control\"\n ></q2-checkbox>\n </td>\n ) : null;\n\n return (\n <Fragment>\n <tr\n id={`row-${row.id}`}\n class={rowClasses.join(' ')}\n onClick={rowIsClickable && (e => this.onClickTableRow(e, row))}\n tabIndex={rowIsClickable ? -1 : undefined}\n >\n {selectable && this.selectAlign === 'left' && selectCheckboxCell}\n {headers.map(({ key }) => {\n const cell = row.cells[key];\n const lineClamp = cell?.lineClamp;\n const cellAlign = cell?.align;\n const cellVerticalAlign = cell?.verticalAlign;\n const cellClasses = [];\n if (cellAlign) cellClasses.push(`align-${cellAlign}`);\n if (cellVerticalAlign) cellClasses.push(`vertical-align-${cellVerticalAlign}`);\n if (lineClamp) cellClasses.push('clamped');\n const cellStyles = lineClamp\n ? { '--comp-line-clamp-count': `${lineClamp}` }\n : undefined;\n\n return (\n <td\n class={cellClasses.join(' ')}\n style={cellStyles}\n >\n <slot name={`${cellSlotPrefix}-${key}`}>\n {this.renderCellContent(cell)}\n </slot>\n </td>\n );\n })}\n {selectable && this.selectAlign === 'right' && selectCheckboxCell}\n {clickable && (\n <td class={clickableClassString}>\n <q2-btn\n intent=\"neutral\"\n size=\"small\"\n onClick={e => this.onClickRow(e, row)}\n test-id=\"clickable-row-control\"\n >\n {loc('tecton.element.dataTable.clickRow')}\n </q2-btn>\n </td>\n )}\n {hasExpandableRows && (\n <td\n class=\"expandable-row-control-column\"\n onClick={this.onControlContainerClick}\n >\n {rowHasExpandableSlot && (\n <q2-btn\n onClick={e => this.onToggleRow(e, row)}\n ariaExpanded={`${row.expanded}`}\n ariaControls={expandableRowName}\n ariaLabel={loc('tecton.element.dataTable.toggleRow')}\n test-id=\"expandable-row-control\"\n >\n <q2-icon\n type=\"chevron-down\"\n class=\"toggle-expandable-row\"\n ></q2-icon>\n </q2-btn>\n )}\n </td>\n )}\n {hasDropdowns && (\n <td\n class=\"dropdown-column\"\n onClick={this.onControlContainerClick}\n >\n {rowHasDropdownSlot && <slot name={dropdownCellName}></slot>}\n </td>\n )}\n </tr>\n {rowHasExpandableSlot && (\n <tr\n id={expandableRowName}\n class=\"expandable-row\"\n hidden={!row.expanded}\n aria-hidden={!row.expanded}\n >\n <td\n colSpan={numberOfColumns}\n headers=\"toggle\"\n >\n <div class=\"expandable-content\">\n <slot name={expandableRowName}></slot>\n </div>\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["q2DataTableCss","Q2DataTable","constructor","hostRef","this","allRowsSelected","checkSlotCount","hasDropdowns","hasExpandableRows","hasRowData","serializedHeaders","serializedRows","someRowsSelected","emptyIcon","emptyMessage","selectAlign","selectMode","checkSlots","_b","_a","hostElement","querySelector","_d","_c","onClickRow","event","row","stopPropagation","mirrorEmit","onClickTableRow","clickable","onToggleRow","onControlContainerClick","onSelectRow","selectedRows","currentlySelectedRows","checked","detail","selectedRow","selected","filter","id","length","isIndeterminate","selectEvent","rows","allSelected","defaultPrevented","map","onSort","header","direction","sorted","sortKey","key","sortEvent","shouldAutoSort","sortable","serializedHeader","undefined","sortRows","expanded","toggleEvent","_","console","error","disconnectedCallback","mutationObserver","disconnect","resizeObserver","componentWillLoad","headersHandler","headers","rowsHandler","componentDidLoad","MutationObserver","observer","observe","childList","subtree","attributes","ResizeObserver","resizeIframe","onClickListener","PointerEvent","stopImmediatePropagation","onSelectAllRows","disabled","clickRow","rowId","btn","shadowRoot","click","getCellContent","columnKey","slotContent","textContent","text","sortColumn","toggleRowExpansion","toggleRowSelect","chk","toggleSelectAllRows","selectable","title","toLowerCase","replace","mappedHeaders","defaultRow","cells","isAllSelected","selectAriaLabel","serializedCells","Object","entries","reduce","accum","cellKey","cellData","align","type","lineClamp","verticalAlign","isBadge","defaultCell","value","ariaLabel","badgeStatus","badgeTheme","result","sortedHeader","find","selectableHandler","numberOfColumns","_badgeColumnContent","cell","tags","h","class","x","theme","label","status","size","getSelectRowLabel","Array","isArray","labelParts","allKeysValid","every","part","join","loc","sortedRows","sort","a","b","aValue","bValue","render","caption","hideCaption","renderTableColGroup","renderTableHeader","renderEmptyState","renderTableRows","renderCellContent","includes","valueAsString","loading","colSpan","name","width","backgroundColor","style","hideClickable","selectCheckboxColumn","onChange","indeterminate","headerClasses","push","onClick","striped","inline","isSelectDisabled","clickableClasses","clickableClassString","index","cellSlotPrefix","expandableRowName","dropdownCellName","rowHasExpandableSlot","rowHasDropdownSlot","rowClasses","rowIsClickable","selectCheckboxCell","e","Fragment","tabIndex","cellAlign","cellVerticalAlign","cellClasses","cellStyles","intent","ariaExpanded","ariaControls","hidden"],"sources":["src/components/q2-data-table/q2-data-table.scss?tag=q2-data-table&encapsulation=shadow","src/components/q2-data-table/q2-data-table.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n:host {\n display: block;\n}\n\n.container {\n --comp-cell-padding: #{var-list(--tct-data-table-cell-padding, --tct-table-cell-padding, --app-scale-3x, 15px)};\n --comp-select-column-width: #{var-list(\n --tct-data-table-select-column-width,\n --tct-table-select-column-width,\n --tct-checkbox-size,\n 20px\n )};\n --comp-dropdown-column-width: #{var-list(\n --tct-data-table-dropdown-column-width,\n --tct-table-dropdown-column-width,\n --tct-btn-icon-width,\n 44px\n )};\n --comp-expandable-row-control-column-width: #{var-list(\n --tct-data-table-expandable-row-control-column-width,\n --tct-table-expandable-row-control-column-width,\n --tct-btn-icon-width,\n 44px\n )};\n\n overflow: auto;\n @include tiny-scrollbar();\n\n :host([shadowed]:not([shadowed='false'])) & {\n box-shadow: var-list(\n --tct-data-table-shadow,\n --tct-table-shadow,\n --app-shadow-1,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n }\n\n :host([density='compact']) & {\n --comp-cell-padding: #{var-list(\n --tct-data-table-cell-padding-compact,\n --tct-table-cell-padding-compact,\n --app-scale-1x,\n 5px\n )};\n }\n\n :host([density='comfortable']) & {\n --comp-cell-padding: #{var-list(\n --tct-data-table-cell-padding-comfortable,\n --tct-table-cell-padding-comfortable,\n --app-scale-5x,\n 25px\n )};\n }\n\n :host([sticky]:not([sticky='false'])) & {\n overflow: unset;\n }\n}\n\ntable {\n table-layout: var-list(--tct-data-table-layout, --tct-table-layout, auto);\n border-collapse: collapse;\n border-spacing: 0;\n width: var-list(--tct-data-table-width, --tct-table-width);\n min-width: 100%;\n background: var-list(--tct-data-table-background, --tct-table-background, --t-base, #ffffff);\n backdrop-filter: var-list(--tct-data-table-backdrop-filter, none);\n caption-side: var-list(--tct-data-table-caption-side, --tct-table-caption-side, bottom);\n}\n\nthead {\n border-width: var-list(--tct-data-table-header-border-width, --tct-table-header-border-width, unquote('0 0 2px 0'));\n border-style: var-list(--tct-data-table-header-border-style, --tct-table-header-border-style, solid);\n border-color: var-list(--tct-data-table-header-border-color, --tct-table-header-border-color, --t-gray-9, #999999);\n background: var-list(--tct-data-table-header-background, --tct-table-header-background);\n\n :host([sticky]:not([sticky='false'])) & {\n position: sticky;\n top: var(--tct-data-table-sticky-header-top, 0px);\n background: var-list(--tct-data-table-sticky-header-background, --tct-table-background, --t-base, #ffffff);\n }\n}\n\ncol {\n &.select-column {\n width: var(--comp-select-column-width);\n }\n\n &.expandable-row-control-column {\n width: var(--comp-expandable-row-control-column-width);\n }\n\n &.dropdown-column {\n width: var(--comp-dropdown-column-width);\n }\n\n :host(:is([bordered='vertical'], [bordered='grid'])) & {\n border-width: var-list(--tct-data-table-column-border-width, unquote('0 1px 0 0'));\n border-style: var-list(--tct-data-table-column-border-style, solid);\n border-color: var-list(--tct-data-table-column-border-color, --t-gray-9, #999999);\n\n &:last-child {\n border: none;\n }\n }\n}\n\ntd,\nth {\n padding: var(--comp-cell-padding);\n text-align: start;\n vertical-align: middle;\n\n &.align-end {\n text-align: end;\n }\n &.align-center {\n text-align: center;\n }\n &.vertical-align-top {\n vertical-align: top;\n }\n &.vertical-align-bottom {\n vertical-align: bottom;\n }\n}\n\nth {\n .header-content {\n font-weight: var-list(--tct-data-table-header-font-weight, --tct-table-header-font-weight, 600);\n font-size: var-list(--tct-data-table-header-font-size, --app-font-size, 14px);\n }\n\n &.sorted {\n .header-content {\n font-weight: var-list(\n --tct-data-table-header-sorted-font-weight,\n --tct-table-header-sorted-font-weight,\n 600\n );\n }\n }\n\n .sorted-indicator {\n --comp-header-sortable-icon-size: #{var-list(\n --tct-data-table-header-sortable-icon-size,\n --tct-table-header-sortable-icon-size,\n --app-scale-3x,\n 15px\n )};\n --tct-icon-stroke-width: 2;\n\n width: var(--comp-header-sortable-icon-size);\n height: var(--comp-header-sortable-icon-size);\n\n &.direction-ASC {\n transform: rotate(180deg);\n }\n }\n\n q2-btn {\n .header-content {\n display: flex;\n align-items: center;\n gap: var-list(--tct-data-table-header-content-gap, --tct-table-header-content-gap, --app-scale-2x, 10px);\n }\n }\n}\n\ntr {\n &.expandable,\n &.clickable {\n cursor: pointer;\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n }\n\n &.expandable {\n --tct-btn-icon-hover-background: transparent;\n &:hover {\n background: var-list(--tct-data-table-expandable-row-hover-background --t-gray-14, #f2f2f2);\n }\n }\n\n &.striped-even {\n background: var-list(--tct-data-table-row-even-background, --t-gray-14, #f2f2f2);\n\n &.expanded {\n background: var-list(\n --tct-data-table-expanded-row-even-background,\n --tct-data-table-expanded-row-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n\n &.expandable {\n &:hover {\n background: var-list(\n --tct-data-table-expandable-row-even-hover-background,\n --tct-data-table-expandable-row-hover-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n }\n }\n &.striped-odd {\n background: var-list(--tct-data-table-row-odd-background, transparent);\n\n &.expanded {\n background: var-list(\n --tct-data-table-expanded-row-odd-background,\n --tct-data-table-expanded-row-background,\n --t-gray-14,\n transparent\n );\n }\n\n &.expandable {\n &:hover {\n background: var-list(\n --tct-data-table-expandable-row-odd-hover-background,\n --tct-data-table-expandable-row-hover-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n }\n }\n\n &.clickable {\n &:hover {\n background: var-list(\n --tct-data-table-clickable-row-hover-background,\n --tct-table-clickable-row-hover-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n }\n\n &.selected {\n background: var-list(\n --tct-data-table-selected-row-background,\n --tct-table-selected-row-background,\n --t-gray-14,\n #f2f2f2\n );\n }\n\n &.expanded {\n background: var-list(\n --tct-data-table-expanded-row-background,\n --tct-table-expanded-row-background,\n --t-gray-14,\n #f2f2f2\n );\n\n .toggle-expandable-row {\n transform: rotate(180deg);\n }\n }\n\n :host(:is([bordered], [bordered='horizontal'], [bordered='grid']):not([bordered='vertical'], [bordered='false']))\n tbody\n & {\n border-width: var-list(--tct-data-table-row-border-width, --tct-table-row-border-width, unquote('0 0 1px 0'));\n border-style: var-list(--tct-data-table-row-border-style, --tct-table-row-border-style, solid);\n border-color: var-list(--tct-data-table-row-border-color, --tct-table-row-border-color, --t-gray-9, #999999);\n }\n\n &.loading-row {\n background: var-list(\n --tct-data-table-loading-row-background,\n --tct-table-loading-row-background,\n --t-base,\n #ffffff\n );\n td {\n text-align: center;\n }\n\n q2-loading {\n font-size: 4em;\n }\n }\n\n &.empty-state {\n background: var-list(--tct-data-table-loading-row-background, --t-base, #ffffff);\n td {\n text-align: center;\n }\n .empty-state-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: var(--app-scale-10x, 50px);\n padding-bottom: var(--app-scale-10x, 50px);\n gap: var(--app-scale-4x, 20px);\n --tct-icon-size: var(--app-scale-6x, 30px);\n }\n }\n\n &.expandable-row {\n background: var-list(\n --tct-data-table-expanded-row-background,\n --tct-table-expanded-row-background,\n --t-gray-14,\n #f2f2f2\n );\n\n .striped-odd + & {\n background: var-list(\n --tct-data-table-expanded-row-odd-background,\n --tct-data-table-expanded-row-background,\n --t-gray-14,\n transparent\n );\n }\n\n .striped-even + & {\n background: var-list(\n --tct-data-table-expanded-row-even-background,\n --tct-data-table-expanded-row-background,\n --t-gray-14,\n transparent\n );\n }\n }\n}\n\ntd {\n font-size: var-list(--tct-data-table-cell-font-size, inherit);\n\n &.clamped {\n div {\n text-overflow: ellipsis;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: var(--comp-line-clamp-count, 1);\n -webkit-box-orient: vertical;\n }\n }\n\n &.expandable-row-control-column {\n --tct-btn-icon-hover-bg: transparent;\n padding: var-list(\n --tct-data-table-expandable-row-control-column-padding,\n --tct-table-expandable-row-control-column-padding,\n unquote('0 5px')\n );\n text-align: center;\n }\n\n &.dropdown-column {\n padding: var-list(\n --tct-data-table-dropdown-column-padding,\n --tct-table-dropdown-column-padding,\n unquote('0 5px')\n );\n text-align: center;\n }\n\n &.click-column:not(.sr) {\n padding: var-list(\n --tct-data-table-clickable-column-padding,\n --tct-table-clickable-column-padding,\n unquote('0 5px')\n );\n text-align: center;\n }\n}\n\ncaption {\n padding: var-list(--tct-data-table-caption-padding, --tct-table-caption-padding, --app-scale-2x, 10px);\n font-size: var-list(--tct-data-table-caption-font-size, --tct-table-caption-font-size, inherit);\n font-weight: var-list(--tct-data-table-caption-font-weight, --tct-table-caption-font-weight, 600);\n text-align: var-list(--tct-data-table-caption-text-align, --tct-table-caption-text-align, center);\n color: var-list(--tct-data-table-caption-color, --tct-table-caption-color, inherit);\n}\n\nq2-checkbox {\n padding: 0;\n}\n\n.tag-table {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n row-gap: var(--app-scale-2x);\n column-gap: var(--app-scale-2x);\n\n q2-tag {\n --tct-tag-font-size: var(--app-font-size, 14px);\n --tct-tag-padding-inline: var(--app-scale-2x, 10px);\n --tct-tag-height: var(--app-scale-4x, 20px);\n --tct-tag-margin: 0;\n }\n}\n","import {\n Component,\n State,\n Prop,\n h,\n ComponentInterface,\n Watch,\n Event,\n Element,\n EventEmitter,\n Fragment,\n Listen,\n Method,\n} from '@stencil/core';\nimport { loc, resizeIframe } from '../../utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\nimport type {\n Q2DataTableHeader,\n Q2DataTableCell,\n Q2DataTableSerializedCells,\n Q2DataTableRow,\n Q2DataTableSerializedRow,\n} from 'q2-tecton-common/lib/types/elements';\n\nexport type Q2DataTableBadgeCell = Q2DataTableCell & {\n type: 'badge';\n tags: {\n value: any;\n badgeTheme: HTMLQ2BadgeElement['theme'];\n }[];\n};\n\n/**\n * @name Data Table\n * @category Display\n * @summary Use for displaying large datasets with sorting, filtering, and selecting.\n * @slot row-<id>-cell-<key> - A slot for overriding the content of any cell in any row of the table with custom content.\n * @slot header-cell-<key> - A slot for the content of any cell in the header of the table.\n * @slot row-<id>-dropdown - A slot to provide a [Dropdown](https://tecton.q2developer.com/design-system/q2-dropdown/) for a row.\n * @slot row-<id>-expandable-content - A slot that makes the row expandable and displays the provided content.\n * @slot empty-table - An optional slot to display custom content when the table is empty.\n */\n@Component({ tag: 'q2-data-table', shadow: true, styleUrl: 'q2-data-table.scss' })\nexport class Q2DataTable implements ComponentInterface {\n // #region Own Properties\n\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n allRowsSelected: boolean = false;\n\n @State()\n checkSlotCount: number = 0;\n\n @State()\n hasDropdowns: boolean = false;\n\n @State()\n hasExpandableRows: boolean = false;\n\n @State()\n hasRowData: boolean = false;\n\n @State()\n serializedHeaders: Q2DataTableHeader[] = [];\n\n @State()\n serializedRows: Q2DataTableSerializedRow[] = [];\n\n @State()\n someRowsSelected: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Adds borders between rows and/or columns in the table. */\n @Prop({ mutable: true, reflect: true })\n bordered: boolean | 'horizontal' | 'vertical' | 'grid';\n\n /** Provides a caption for the data table. */\n @Prop({ mutable: true })\n caption: string;\n\n /** Adds the ability to click a row and have the table emit an event with the selected row's data. */\n @Prop({ mutable: true, reflect: true })\n clickable: boolean;\n\n /** Determines the amount of padding for each of the cells in the table. */\n @Prop({ mutable: true, reflect: true })\n density: 'compact' | 'normal' | 'comfortable';\n\n /** Determines the `q2-icon` that will display when `rows` has no value. */\n @Prop({ reflect: true })\n emptyIcon: string = 'inbox';\n\n /** Determines the message that will display when `rows` has no value.\n * @localizable\n */\n @Prop({ reflect: true })\n emptyMessage: string = 'tecton.element.dataTable.emptyMessage';\n\n /**\n * Defines the headers of the table.\n *\n * **Example:**\n * @snippet\n * element.headers = [\n * {\n * title: 'Day of the Week',\n * key: 'day',\n * },\n * {\n * title: 'Sales',\n * key: 'sales',\n * align: 'end',\n * }\n * ]\n *\n */\n @Prop({ mutable: true })\n headers: Q2DataTableHeader[];\n\n /** Hides the caption from view, but still makes it available to screen readers for accessibility purposes. */\n @Prop({ mutable: true, reflect: true })\n hideCaption: boolean;\n\n /**\n * Visually hides the `Select` button that displays when `clickable=true`. It will still be discoverable by assistive technologies.\n *\n * @info\n * Use of this property requires `clickable` to be set to `true`.\n */\n @Prop({ mutable: true })\n hideClickable: boolean;\n\n /** Displays a loading state on the table to indicate background activity. */\n @Prop({ mutable: true, reflect: true })\n loading: boolean;\n\n /**\n * Defines the rows of the table.\n *\n * **Example:**\n * @snippet\n * element.rows = [\n * {\n * id: 1,\n * cells: {\n * day: 'Monday',\n * sales: 93\n * }\n * },\n * {\n * id: 2,\n * cells: {\n * day: 'Tuesday',\n * sales: 127\n * }\n * },\n * {\n * id: 3,\n * cells: {\n * day: 'Wednesday',\n * sales: 121\n * }\n * ]\n */\n @Prop({ mutable: true })\n rows: Q2DataTableRow[];\n\n /** Adds a checkbox to each row of the table making it selectable. */\n @Prop({ mutable: true, reflect: true })\n selectable: boolean;\n\n /**\n * Controls the position of the checkbox column when `selectable` is true.\n * When set to 'right', the checkbox column will appear on the right side of the table.\n *\n * @warning\n * Use of this property requires `selectable` to be set to `true`.\n */\n @Prop({ mutable: true })\n selectAlign: 'left' | 'right' = 'left';\n\n /**\n * Returns selected rows.\n * @readonly\n */\n @Prop({ mutable: true })\n get selectedRows(): Q2DataTableRow[] {\n return this.serializedRows?.filter(({ selected }) => !!selected) || [];\n }\n\n set selectedRows(_) {\n console.error('Direct assignment to selectedRows is not allowed.');\n }\n\n /**\n * Determines if the selectable checkboxes allow for multi-select or not. If set to \"single\", once a row is selected, all other rows will be disabled.\n * See the documentation on the `select` event for how to handle selections.\n *\n * @warning\n * Use of this property requires `selectable` to be set to `true`.\n */\n @Prop({ mutable: true })\n selectMode: 'multiple' | 'single' = 'multiple';\n\n /** Adds a shadow to the table */\n @Prop({ mutable: true, reflect: true })\n shadowed: boolean;\n\n /** Makes table header sticky */\n @Prop({ reflect: true })\n sticky: boolean;\n\n /** Enables alternating background colors for the table rows */\n @Prop({ reflect: true })\n striped: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when a row is clicked.\n *\n * Requires the `clickable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default click behavior.\n * @deprecated Use 'tctClick' instead\n */\n @Event()\n click: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n /**\n * Emitted when a row is selected.\n *\n * Requires the `selectable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default selection behavior.\n * @deprecated Use 'tctSelect' instead\n */\n @Event()\n select: EventEmitter<{\n row: Q2DataTableSerializedRow;\n rows: Q2DataTableSerializedRow[];\n allSelected: boolean;\n }>;\n\n /**\n * Emitted when the select-all checkbox is toggled.\n *\n * Requires the `selectable` prop to be set to `true` and the `selectMode` prop to be set to `multiple`.\n *\n * Call `event.preventDefault()` to prevent the default behavior.\n * @deprecated Use 'tctSelectAllRows' instead\n */\n @Event()\n selectAllRows: EventEmitter<{ checked: boolean }>;\n\n /**\n * Emitted when a column is sorted.\n *\n * Requires the `sortable` prop to be set to `true` on the column.\n *\n * Call `event.preventDefault()` to prevent the default sorting behavior.\n * @deprecated Use 'tctSort' instead\n */\n @Event()\n sort: EventEmitter<{ header: Q2DataTableHeader; direction: 'ASC' | 'DESC' }>;\n\n /**\n * Emitted when a row is clicked.\n *\n * Requires the `clickable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default click behavior.\n */\n @Event()\n tctClick: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n /**\n * Emitted when a row is selected.\n *\n * Requires the `selectable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default selection behavior.\n */\n @Event()\n tctSelect: EventEmitter<{\n row: Q2DataTableSerializedRow;\n rows: Q2DataTableSerializedRow[];\n allSelected: boolean;\n }>;\n\n /**\n * Emitted when the select-all checkbox is toggled.\n *\n * Requires the `selectable` prop to be set to `true` and the `selectMode` prop to be set to `multiple`.\n *\n * Call `event.preventDefault()` to prevent the default behavior.\n */\n @Event()\n tctSelectAllRows: EventEmitter<{ checked: boolean }>;\n\n /**\n * Emitted when a column is sorted.\n *\n * Requires the `sortable` prop to be set to `true` on the column.\n *\n * Call `event.preventDefault()` to prevent the default sorting behavior.\n */\n @Event()\n tctSort: EventEmitter<{ header: Q2DataTableHeader; direction: 'ASC' | 'DESC' }>;\n\n /**\n * Emitted when an expandable row is toggled.\n *\n * Requires content in the `row-{id}-expandable-content` slot.\n *\n * Call `event.preventDefault()` to prevent the default toggling behavior.\n */\n @Event()\n tctToggle: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n /**\n * Emitted when an expandable row is toggled.\n *\n * Requires content in the `row-{id}-expandable-content` slot.\n *\n * Call `event.preventDefault()` to prevent the default toggling behavior.\n * @deprecated Use 'tctToggle' instead\n */\n @Event()\n toggle: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n\n componentWillLoad() {\n this.headersHandler(this.headers);\n this.rowsHandler(this.rows);\n }\n\n componentDidLoad(): void {\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver(() => this.checkSlots());\n observer.observe(this.hostElement, { childList: true, subtree: true, attributes: true });\n this.mutationObserver = observer;\n }\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => resizeIframe());\n this.resizeObserver.observe(this.hostElement);\n }\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n onClickListener(event: MouseEvent) {\n if (event instanceof PointerEvent) event.stopImmediatePropagation();\n }\n\n @Listen('selectAllRows')\n onSelectAllRows(event: CustomEvent<{ checked: boolean }>) {\n event.stopPropagation();\n const { checked } = event.detail;\n const selectedRows = checked\n ? this.serializedRows.map(row => {\n if (row.disabled) {\n return row;\n } else {\n return {\n ...row,\n selected: checked,\n };\n }\n })\n : [];\n const selectEvent = mirrorEmit(this, ['select', 'tctSelect'], {\n row: undefined,\n rows: selectedRows,\n allSelected: checked,\n });\n if (selectEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => {\n if (row.disabled) return row;\n row.selected = checked;\n return row;\n });\n this.allRowsSelected = checked;\n this.someRowsSelected = false;\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to click a row that accepts a row ID that is will be clicked.\n *\n * @testOnly\n */\n @Method()\n async clickRow(rowId: number | string) {\n const btn = this.hostElement.shadowRoot.querySelector(`#row-${rowId} q2-btn[test-id=\"clickable-row-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method that returns the plain text value of a particular cell (including slot content).\n *\n * @testOnly\n */\n @Method()\n async getCellContent(rowId: number | string, columnKey: string) {\n const slotContent = this.hostElement.querySelector(`[slot=row-${rowId}-cell-${columnKey}`)?.textContent;\n const text = this.hostElement.shadowRoot.querySelector(\n `slot[name=row-${rowId}-cell-${columnKey}]`\n )?.textContent;\n return slotContent || text || '';\n }\n\n /**\n * A method to sort a column that accepts a header object with key</b> and <b>sorted</b> property.\n *\n * @testOnly\n */\n @Method()\n async sortColumn(header: Q2DataTableHeader) {\n const btn = this.hostElement.shadowRoot.querySelector(`#header-${header.key} q2-btn[test-id=\"sort-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method to toggle row expansion that accepts a row ID that will be clicked to expand or collapse the expandable content\n *\n * @testOnly\n */\n @Method()\n async toggleRowExpansion(rowId: number | string) {\n const btn = this.hostElement.shadowRoot.querySelector(`#row-${rowId} q2-btn[test-id=\"expandable-row-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method to toggle row selection that accepts a row ID whose checkbox will be checked, if the feature is enabled.\n *\n * @testOnly\n */\n @Method()\n async toggleRowSelect(rowId: number | string) {\n const chk = this.hostElement.shadowRoot.querySelector(\n `#row-${rowId} q2-checkbox[test-id=\"select-row-control\"]`\n );\n (chk as HTMLQ2CheckboxElement)?.click();\n }\n\n /**\n * A method to toggle select all button (checkbox) on left top corner.\n *\n * @testOnly\n */\n @Method()\n async toggleSelectAllRows() {\n if (!this.selectable) return;\n const chk = this.hostElement.shadowRoot.querySelector(`q2-checkbox[test-id=\"select-all-rows-control\"]`);\n (chk as HTMLQ2CheckboxElement)?.click();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('headers')\n headersHandler(headers: Q2DataTableHeader[] = []) {\n this.serializedHeaders = headers.map<Q2DataTableHeader>(header => {\n const { title } = header;\n let { key } = header;\n\n // If no key is provided, generate one from the title\n if (!key) key = title.toLowerCase().replace(/\\s/g, '-');\n\n return {\n key,\n ...header,\n };\n });\n }\n\n @Watch('rows')\n rowsHandler(rows: Q2DataTableRow[] = []) {\n const { serializedHeaders, mappedHeaders } = this;\n const defaultRow = {\n id: null,\n cells: {},\n selected: false,\n expanded: false,\n disabled: false,\n };\n\n // tracks if the select-all checkbox should be visually updated as the `rows` are built\n let isAllSelected = true;\n let isIndeterminate = false;\n\n const serializedRows = rows.map(({ id, cells, selected, expanded, disabled, selectAriaLabel }) => {\n const serializedCells = Object.entries(cells).reduce<Q2DataTableSerializedCells>(\n (accum, [cellKey, cellData]) => {\n const header = mappedHeaders[cellKey] || ({} as Q2DataTableHeader);\n const { align, type = 'text', lineClamp, verticalAlign } = header;\n\n const isBadge = 'type' in header && header.type === 'badge';\n const defaultCell: Q2DataTableCell = {\n value: '',\n ariaLabel: undefined,\n type,\n align,\n lineClamp,\n verticalAlign,\n badgeStatus: isBadge ? header.badgeStatus : undefined,\n badgeTheme: isBadge ? header.badgeTheme : undefined,\n };\n\n const result: Q2DataTableCell =\n typeof cellData === 'object'\n ? { ...defaultCell, ...cellData }\n : { ...defaultCell, value: cellData };\n\n accum[cellKey] = result;\n return accum;\n },\n {}\n );\n\n if (isAllSelected && !selected) isAllSelected = false;\n if (!isAllSelected && selected) isIndeterminate = true;\n return {\n ...defaultRow,\n id,\n selected: !!selected,\n expanded: !!expanded,\n disabled: !!disabled,\n selectAriaLabel,\n cells: serializedCells,\n };\n });\n\n const sortedHeader = serializedHeaders.find(({ sorted }) => sorted);\n const shouldAutoSort = !!sortedHeader && sortedHeader.sortable !== 'manual';\n\n this.hasRowData = !!rows.length;\n this.allRowsSelected = this.hasRowData && isAllSelected;\n this.someRowsSelected = this.hasRowData && isIndeterminate;\n\n this.serializedRows = !!shouldAutoSort ? this.sortRows(serializedRows, sortedHeader) : serializedRows;\n this.checkSlots();\n }\n\n @Watch('selectable')\n selectableHandler() {\n if (this.selectable === false) {\n mirrorEmit(this, ['selectAllRows', 'tctSelectAllRows'], { checked: false });\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get mappedHeaders() {\n return this.serializedHeaders.reduce<Record<string, Q2DataTableHeader>>((accum, header) => {\n accum[header.key] = header;\n return accum;\n }, {});\n }\n\n get numberOfColumns() {\n return (\n (this.serializedHeaders?.length ?? 0) +\n (this.selectable ? 1 : 0) +\n (this.clickable ? 1 : 0) +\n (this.hasExpandableRows ? 1 : 0) +\n (this.hasDropdowns ? 1 : 0)\n );\n }\n\n _badgeColumnContent(cell: Q2DataTableBadgeCell) {\n if (cell.tags?.length) {\n return (\n <div class=\"tag-table\">\n {cell.tags.map(x => {\n return (\n <q2-tag\n theme={x.badgeTheme}\n label={x.value}\n />\n );\n })}\n </div>\n );\n }\n\n return (\n <q2-badge\n aria-label={cell.ariaLabel}\n value={typeof cell.value !== 'boolean' ? cell.value : cell.value ? 1 : 0}\n theme={cell.badgeTheme}\n status={cell.badgeStatus}\n size=\"large\"\n />\n );\n }\n\n checkSlots = () => {\n this.hasExpandableRows = !!(this.hostElement?.querySelector(`[slot$=\"-expandable-content\"]`) ?? false);\n this.hasDropdowns = !!(this.hostElement?.querySelector(`[slot$=\"-dropdown\"]`) ?? false);\n\n // The booleans above may not change, even if the slot has content\n // So we increment this property to force a re-render and ensure proper rendering\n this.checkSlotCount += 1;\n };\n\n getSelectRowLabel(row: Q2DataTableSerializedRow): string {\n const { selectAriaLabel, cells } = row;\n\n if (typeof selectAriaLabel === 'string') {\n return selectAriaLabel;\n }\n\n if (Array.isArray(selectAriaLabel)) {\n const labelParts = selectAriaLabel.map(key => {\n const cell = cells[key];\n const header = this.serializedHeaders.find(h => h.key === key);\n if (cell?.value === undefined || !header) return undefined;\n return `${header.title} ${cell.value}`;\n });\n const allKeysValid = labelParts.every(part => part !== undefined);\n\n if (allKeysValid) {\n return `Select row for ${labelParts.join(', ')}`;\n }\n }\n\n return loc('tecton.element.dataTable.selectRow');\n }\n\n onClickRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n mirrorEmit(this, ['click', 'tctClick'], { row });\n };\n\n onClickTableRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n if (this.clickable) {\n this.onClickRow(event, row);\n } else if (this.hasExpandableRows) {\n this.onToggleRow(event, row);\n }\n };\n\n onControlContainerClick = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n onSelectRow = (event: CustomEvent<{ checked: boolean }>, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n const { selectMode, serializedRows, selectedRows: currentlySelectedRows = [] } = this;\n const { checked } = event.detail;\n\n const selectedRow = { ...row, selected: checked };\n let selectedRows;\n if (selectMode === 'single') {\n selectedRows = checked ? [selectedRow] : [];\n } else {\n selectedRows = checked\n ? [...currentlySelectedRows, selectedRow]\n : currentlySelectedRows.filter(row => row.id !== selectedRow.id);\n }\n\n const allRowsSelected = selectedRows.length === serializedRows.length;\n const isIndeterminate = !allRowsSelected && selectedRows.length > 0;\n const selectEvent = mirrorEmit(this, ['select', 'tctSelect'], {\n row: selectedRow,\n rows: selectedRows,\n allSelected: allRowsSelected,\n });\n if (selectEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => (row.id === selectedRow.id ? selectedRow : row));\n this.allRowsSelected = allRowsSelected;\n this.someRowsSelected = isIndeterminate;\n };\n\n onSort = (header: Q2DataTableHeader) => {\n const direction = header.sorted === 'ASC' ? 'DESC' : 'ASC';\n const sortKey = header.key;\n const sortEvent = mirrorEmit(this, ['sort', 'tctSort'], { header, direction });\n if (sortEvent.defaultPrevented) return;\n\n const shouldAutoSort = header.sortable !== 'manual';\n if (!shouldAutoSort) return;\n\n this.serializedHeaders = this.serializedHeaders.map<Q2DataTableHeader>(serializedHeader => {\n const sorted = sortKey === serializedHeader.key ? direction : undefined;\n return { ...serializedHeader, sorted };\n });\n\n this.serializedRows = this.sortRows(this.serializedRows, { ...header, sorted: direction });\n };\n\n onToggleRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n const selectedRow = { ...row, expanded: !row.expanded };\n const toggleEvent = mirrorEmit(this, ['toggle', 'tctToggle'], { row: selectedRow });\n if (toggleEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => {\n if (row.id === selectedRow.id) return selectedRow;\n else return { ...row };\n });\n };\n\n sortRows(rows: Q2DataTableSerializedRow[], header: Q2DataTableHeader) {\n const { key, sorted } = header;\n const direction = sorted || 'ASC';\n\n const sortedRows = [...rows].sort((a, b) => {\n const aValue = a.cells[key].value;\n const bValue = b.cells[key].value;\n\n if (aValue < bValue) return direction === 'ASC' ? -1 : 1;\n if (aValue > bValue) return direction === 'ASC' ? 1 : -1;\n return 0;\n });\n\n return sortedRows;\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { caption } = this;\n return (\n <div class=\"container\">\n <table>\n {caption && <caption class={this.hideCaption ? 'sr' : undefined}>{caption}</caption>}\n {this.renderTableColGroup()}\n {this.renderTableHeader()}\n {this.renderEmptyState()}\n {this.renderTableRows()}\n </table>\n </div>\n );\n }\n\n renderCellContent(cell: Q2DataTableCell) {\n if (!cell) return;\n\n const { type, ariaLabel, value } = cell;\n\n if ([undefined, null].includes(value)) return;\n\n switch (type) {\n case 'badge':\n return this._badgeColumnContent(cell as Q2DataTableBadgeCell);\n\n case 'icon':\n const valueAsString = typeof value === 'string' ? value : `${value}`;\n return (\n <q2-icon\n label={ariaLabel}\n type={valueAsString}\n ></q2-icon>\n );\n\n case 'boolean':\n return !!value ? (\n <q2-icon\n label={loc('tecton.element.dataTable.booleanTrue')}\n type=\"checkmark\"\n ></q2-icon>\n ) : (\n <div aria-label={loc('tecton.element.dataTable.booleanFalse')}></div>\n );\n\n case 'code':\n return <code aria-label={ariaLabel}>{value}</code>;\n\n default:\n return <div aria-label={ariaLabel}>{value}</div>;\n }\n }\n\n renderEmptyState() {\n const { hasRowData, numberOfColumns, emptyIcon, emptyMessage, loading } = this;\n if (hasRowData || loading) return null;\n\n return (\n <tbody>\n <tr class=\"empty-state\">\n <td colSpan={numberOfColumns}>\n <slot name=\"empty-table\">\n <div class=\"empty-state-content\">\n <q2-icon type={emptyIcon}></q2-icon>\n <p>{loc(emptyMessage)}</p>\n </div>\n </slot>\n </td>\n </tr>\n </tbody>\n );\n }\n\n renderTableColGroup() {\n const {\n serializedHeaders: headers,\n selectable,\n selectAlign,\n clickable,\n hasExpandableRows,\n hasDropdowns,\n } = this;\n\n if (!headers.length) return null;\n\n return (\n <colgroup>\n {selectable && selectAlign === 'left' && <col class=\"select-column\" />}\n {headers.map(({ width, backgroundColor }) => (\n <col style={{ width, backgroundColor }} />\n ))}\n {clickable && <col class=\"click-column\" />}\n {hasExpandableRows && <col class=\"expandable-row-control-column\" />}\n {hasDropdowns && <col class=\"dropdown-column\" />}\n {selectable && selectAlign === 'right' && <col class=\"select-column\" />}\n </colgroup>\n );\n }\n\n renderTableHeader() {\n const {\n serializedHeaders: headers,\n selectable,\n clickable,\n hideClickable,\n selectMode,\n hasExpandableRows,\n hasDropdowns,\n allRowsSelected,\n someRowsSelected,\n hasRowData,\n loading,\n } = this;\n\n if (!headers.length) return null;\n\n const selectCheckboxColumn = selectable ? (\n <th class=\"select-column\">\n {selectMode === 'multiple' ? (\n <q2-checkbox\n label={loc('tecton.element.dataTable.selectAllRows')}\n hide-label\n onChange={() =>\n mirrorEmit(this, ['selectAllRows', 'tctSelectAllRows'], {\n checked: !allRowsSelected,\n })\n }\n checked={hasRowData && allRowsSelected && !someRowsSelected}\n indeterminate={hasRowData && someRowsSelected && !allRowsSelected}\n disabled={loading || !hasRowData}\n test-id=\"select-all-rows-control\"\n ></q2-checkbox>\n ) : (\n <span class=\"sr\">{loc('tecton.element.dataTable.selectRow')}</span>\n )}\n </th>\n ) : null;\n\n return (\n <thead>\n <tr>\n {selectable && this.selectAlign === 'left' && selectCheckboxColumn}\n {headers.map(header => {\n const { align, sorted, verticalAlign } = header;\n const headerClasses = [];\n if (align) headerClasses.push(`align-${align}`);\n if (verticalAlign) headerClasses.push(`vertical-align-${verticalAlign}`);\n if (!!sorted) headerClasses.push('sorted');\n return (\n <th\n class={headerClasses.join(' ')}\n id={`header-${header.key}`}\n >\n {header.sortable ? (\n <q2-btn\n onClick={() => this.onSort(header)}\n test-id=\"sort-control\"\n disabled={this.loading}\n >\n <div\n class=\"header-content\"\n aria-label={header.ariaLabel || undefined}\n >\n <slot name={`header-cell-${header.key}`}>{header.title}</slot>\n\n {!!sorted ? (\n <q2-icon\n class={`sorted-indicator direction-${sorted}`}\n type=\"arrow-down\"\n label={\n sorted === 'ASC'\n ? loc('tecton.element.dataTable.sortedAscending')\n : loc('tecton.element.dataTable.sortedDescending')\n }\n test-id=\"sorted-indicator\"\n ></q2-icon>\n ) : (\n <q2-icon\n class={`sorted-indicator`}\n type=\"sort\"\n label={loc('tecton.element.dataTable.clickToSort')}\n test-id=\"sorted-indicator\"\n ></q2-icon>\n )}\n </div>\n </q2-btn>\n ) : (\n <div\n class=\"header-content\"\n aria-label={header.ariaLabel || undefined}\n >\n <slot name={`header-cell-${header.key}`}>{header.title}</slot>\n </div>\n )}\n </th>\n );\n })}\n {selectable && this.selectAlign === 'right' && selectCheckboxColumn}\n {clickable && (\n <th\n id=\"click\"\n class={hideClickable ? 'sr' : undefined}\n >\n <span class=\"sr\">{loc('tecton.element.dataTable.clickRow')}</span>\n </th>\n )}\n {hasExpandableRows && (\n <th id=\"toggle\">\n <span class=\"sr\">{loc('tecton.element.dataTable.toggleRow')}</span>\n </th>\n )}\n {hasDropdowns && (\n <th>\n <span class=\"sr\">{loc('tecton.element.dataTable.dropdown')}</span>\n </th>\n )}\n </tr>\n </thead>\n );\n }\n\n renderTableRows() {\n const {\n serializedHeaders: headers,\n serializedRows: rows,\n selectable,\n clickable,\n striped,\n hideClickable,\n selectMode,\n hasExpandableRows,\n hasDropdowns,\n numberOfColumns,\n loading,\n } = this;\n\n if (loading) {\n return (\n <tbody>\n <tr class=\"loading-row\">\n <td colSpan={numberOfColumns}>\n <q2-loading inline></q2-loading>\n </td>\n </tr>\n </tbody>\n );\n }\n\n let isSelectDisabled = false;\n let selectedRow;\n if (selectMode === 'single') {\n selectedRow = this.serializedRows.find(({ selected }) => !!selected);\n isSelectDisabled = !!selectedRow;\n }\n const clickableClasses = [];\n if (clickable) clickableClasses.push('click-column');\n if (hideClickable) clickableClasses.push('sr');\n const clickableClassString = clickableClasses.join(' ');\n\n return (\n <tbody>\n {rows.map((row, index) => {\n const cellSlotPrefix = `row-${row.id}-cell`;\n const expandableRowName = `row-${row.id}-expandable-content`;\n const dropdownCellName = `row-${row.id}-dropdown`;\n const rowHasExpandableSlot =\n hasExpandableRows && !!this.hostElement.querySelector(`[slot=\"${expandableRowName}\"]`);\n const rowHasDropdownSlot =\n hasDropdowns && !!this.hostElement.querySelector(`[slot=\"${dropdownCellName}\"]`);\n const rowClasses = [];\n if (rowHasExpandableSlot) rowClasses.push('expandable');\n if (clickable) rowClasses.push('clickable');\n if (striped) rowClasses.push(`striped-${index % 2 ? 'even' : 'odd'}`);\n if (row.expanded) rowClasses.push('expanded');\n if (row.selected) rowClasses.push('selected');\n const rowIsClickable = clickable || rowHasExpandableSlot;\n\n const selectCheckboxCell = selectable ? (\n <td\n class=\"select-column\"\n onClick={this.onControlContainerClick}\n >\n <q2-checkbox\n label={this.getSelectRowLabel(row)}\n hide-label\n checked={row.selected}\n disabled={(isSelectDisabled && row !== selectedRow) || row.disabled}\n onChange={e => this.onSelectRow(e, row)}\n test-id=\"select-row-control\"\n ></q2-checkbox>\n </td>\n ) : null;\n\n return (\n <Fragment>\n <tr\n id={`row-${row.id}`}\n class={rowClasses.join(' ')}\n onClick={rowIsClickable && (e => this.onClickTableRow(e, row))}\n tabIndex={rowIsClickable ? -1 : undefined}\n >\n {selectable && this.selectAlign === 'left' && selectCheckboxCell}\n {headers.map(({ key }) => {\n const cell = row.cells[key];\n const lineClamp = cell?.lineClamp;\n const cellAlign = cell?.align;\n const cellVerticalAlign = cell?.verticalAlign;\n const cellClasses = [];\n if (cellAlign) cellClasses.push(`align-${cellAlign}`);\n if (cellVerticalAlign) cellClasses.push(`vertical-align-${cellVerticalAlign}`);\n if (lineClamp) cellClasses.push('clamped');\n const cellStyles = lineClamp\n ? { '--comp-line-clamp-count': `${lineClamp}` }\n : undefined;\n\n return (\n <td\n class={cellClasses.join(' ')}\n style={cellStyles}\n >\n <slot name={`${cellSlotPrefix}-${key}`}>\n {this.renderCellContent(cell)}\n </slot>\n </td>\n );\n })}\n {selectable && this.selectAlign === 'right' && selectCheckboxCell}\n {clickable && (\n <td class={clickableClassString}>\n <q2-btn\n intent=\"neutral\"\n size=\"small\"\n onClick={e => this.onClickRow(e, row)}\n test-id=\"clickable-row-control\"\n >\n {loc('tecton.element.dataTable.clickRow')}\n </q2-btn>\n </td>\n )}\n {hasExpandableRows && (\n <td\n class=\"expandable-row-control-column\"\n onClick={this.onControlContainerClick}\n >\n {rowHasExpandableSlot && (\n <q2-btn\n onClick={e => this.onToggleRow(e, row)}\n ariaExpanded={`${row.expanded}`}\n ariaControls={expandableRowName}\n ariaLabel={loc('tecton.element.dataTable.toggleRow')}\n test-id=\"expandable-row-control\"\n >\n <q2-icon\n type=\"chevron-down\"\n class=\"toggle-expandable-row\"\n ></q2-icon>\n </q2-btn>\n )}\n </td>\n )}\n {hasDropdowns && (\n <td\n class=\"dropdown-column\"\n onClick={this.onControlContainerClick}\n >\n {rowHasDropdownSlot && <slot name={dropdownCellName}></slot>}\n </td>\n )}\n </tr>\n {rowHasExpandableSlot && (\n <tr\n id={expandableRowName}\n class=\"expandable-row\"\n hidden={!row.expanded}\n aria-hidden={!row.expanded}\n >\n <td\n colSpan={numberOfColumns}\n headers=\"toggle\"\n >\n <div class=\"expandable-content\">\n <slot name={expandableRowName}></slot>\n </div>\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"q2-detail.entry.esm.js","sources":["src/components/q2-detail/q2-detail.scss?tag=q2-detail&encapsulation=shadow","src/components/q2-detail/q2-detail.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n::slotted([slot]) {\n display: flex;\n align-items: center;\n --tct-icon-size: var(--tct-detail-label-icon-size, 16px);\n}\n\n.detail {\n column-gap: var-list(--tct-detail-gap-column, --app-scale-1x, 5px);\n row-gap: var-list(--tct-detail-gap-row, 0px);\n\n &-block {\n display: flex;\n width: 100%;\n }\n\n &-inline {\n display: flex;\n }\n\n &-horizontal {\n align-items: var(--tct-detail-vertical-alignment, baseline);\n flex-direction: row;\n }\n\n &-stacked {\n flex-direction: column;\n\n &-alignment-left {\n align-items: flex-start;\n }\n\n &-alignment-right {\n align-items: flex-end;\n }\n\n &-alignment-center {\n align-items: center;\n }\n }\n}\n\n.label {\n flex: 1;\n text-align: left;\n line-height: 1.5;\n color: var(--tct-detail-label-font-color, #141430);\n\n &-size {\n &-xsmall {\n color: var(--tct-detail-label-xsmall-font-color, #6f6f82);\n font-size: var(--tct-detail-label-xsmall-font-size, 14px);\n font-weight: var(--tct-detail-label-xsmall-font-weight, 400);\n }\n &-small {\n color: var(--tct-detail-label-small-font-color);\n font-size: var(--tct-detail-label-small-font-size, 14px);\n font-weight: var(--tct-detail-label-small-font-weight, 400);\n }\n &-medium {\n color: var(--tct-detail-label-medium-font-color);\n font-size: var(--tct-detail-label-medium-font-size, 14px);\n font-weight: var(--tct-detail-label-medium-font-weight, 400);\n }\n &-large {\n color: var(--tct-detail-label-large-font-color);\n font-size: var(--tct-detail-label-large-font-size, 16px);\n font-weight: var(--tct-detail-label-large-font-weight, 400);\n }\n &-xlarge {\n color: var(--tct-detail-label-xlarge-font-color);\n font-size: var(--tct-detail-label-xlarge-font-size, 18px);\n font-weight: var(--tct-detail-label-xlarge-font-weight, 400);\n }\n &-inline {\n font-size: var(--tct-detail-label-inline-font-size, 1em);\n font-weight: var(--tct-detail-label-inline-font-weight, 400);\n color: inherit;\n }\n }\n}\n\n.description {\n flex: 1;\n display: flex;\n align-items: center;\n line-height: 1.5;\n color: var(--tct-detail-description-font-color, #141430);\n column-gap: var-list(--tct-detail-description-gap-column, --app-scale-1x, 5px);\n\n &-alignment-right {\n justify-content: flex-end;\n }\n\n &-size {\n &-xsmall {\n color: var(--tct-detail-description-xsmall-font-color, #6f6f82);\n font-size: var(--tct-detail-description-xsmall-font-size, 14px);\n font-weight: var(--tct-detail-description-xsmall-font-weight, 400);\n }\n &-small {\n color: var(--tct-detail-description-small-font-color);\n font-size: var(--tct-detail-description-small-font-size, 14px);\n font-weight: var(--tct-detail-description-small-font-weight, 400);\n }\n &-medium {\n color: var(--tct-detail-description-medium-font-color);\n font-size: var(--tct-detail-description-medium-font-size, 24px);\n font-weight: var(--tct-detail-description-medium-font-weight, 600);\n }\n &-large {\n color: var(--tct-detail-description-large-font-color);\n font-size: var(--tct-detail-description-large-font-size, 28px);\n font-weight: var(--tct-detail-description-large-font-weight, 600);\n }\n &-xlarge {\n color: var(--tct-detail-description-xlarge-font-color);\n font-size: var(--tct-detail-description-xlarge-font-size, 32px);\n font-weight: var(--tct-detail-description-xlarge-font-weight, 700);\n }\n &-inline {\n font-size: var(--tct-detail-description-inline-font-size, 1em);\n color: inherit;\n }\n }\n}\n","import { Component, Element, Prop, h } from '@stencil/core';\nimport { hasSlotContent, loc } from 'src/utils';\n\n/**\n * @name Detail\n * @category Display\n * @summary Use for displaying label-value pairs like account details or miscellaneous info.\n * @slot label - An optional slot to display a custom label.\n */\n@Component({\n tag: 'q2-detail',\n styleUrl: 'q2-detail.scss',\n shadow: true,\n})\nexport class Q2Detail {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Defines the alignment of the label and description when stacked, or when only the label or description is present. */\n @Prop({ reflect: true })\n alignment: 'left' | 'right' | 'center' = 'left';\n\n /**\n * Defines the text content of the description.\n *\n * @localizable\n */\n @Prop({ reflect: true })\n description: string;\n\n /**\n * Defines the text content of the label.\n *\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Defines the text size of the label and description.\n *\n * If not specified, the detail will display as inline text.\n */\n @Prop({ reflect: true })\n size: null | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\n /** Determines if the description should appear beneath the label. */\n @Prop({ reflect: true })\n stacked: boolean = false;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.setSlotSizeProps();\n }\n\n // #endregion\n // #region Local Methods\n\n get descriptionClasses() {\n const classes = ['description'];\n if (this.size) {\n classes.push(`description-size-${this.size}`);\n } else {\n classes.push(`description-size-inline`);\n }\n if (!this.stacked) {\n classes.push(`description-alignment-right`);\n }\n\n return classes.join(' ');\n }\n\n get detailClasses() {\n const classes = ['detail'];\n if (this.size) {\n classes.push(`detail-block`);\n } else {\n classes.push(`detail-inline`);\n }\n if (this.stacked || this.onlyHasDescripiton || this.onlyHasLabel) {\n classes.push('detail-stacked', `detail-stacked-alignment-${this.alignment}`);\n } else {\n classes.push('detail-horizontal');\n }\n\n return classes.join(' ');\n }\n\n get hasDefaultSlotContent() {\n const hasInnerHtml = !!this.hostElement.innerHTML.trim();\n const namedSlotCount = this.hostElement.querySelectorAll(':scope > [slot]').length;\n const hostChildNodeCount = this.hostElement.childNodes.length;\n\n return hasInnerHtml && hostChildNodeCount > namedSlotCount;\n }\n\n get hasDescripiton() {\n return !!this.description || this.hasDefaultSlotContent;\n }\n\n get hasLabel() {\n return !!this.label || this.hasLabelSlotContent;\n }\n\n get hasLabelSlotContent() {\n return hasSlotContent(this.hostElement, 'label');\n }\n\n get labelClasses() {\n const classes = ['label'];\n if (this.size) {\n classes.push(`label-size-${this.size}`);\n } else {\n classes.push(`label-size-inline`);\n }\n if (!this.stacked) {\n classes.push(`label-align-left`);\n }\n\n return classes.join(' ');\n }\n\n get onlyHasDescripiton() {\n return this.hasDescripiton && !this.hasLabel;\n }\n\n get onlyHasLabel() {\n return this.hasLabel && !this.hasDescripiton;\n }\n\n setSlotSizeProps() {\n const slotElements = Array.from(\n this.hostElement.querySelectorAll(':scope > *:not([slot]), :scope > [slot=\"label\"] > *')\n ) as { slotSize?: string; localName?: string }[];\n slotElements.forEach(element => {\n let size = this.size;\n if (element.localName === 'q2-currency') {\n switch (size) {\n case 'xsmall':\n size = 'small';\n break;\n case 'xlarge':\n size = 'large';\n break;\n default:\n break;\n }\n }\n element.slotSize = size;\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div class={this.detailClasses}>\n {this.hasLabel && (\n <div\n class={this.labelClasses}\n aria-describedby={!!this.description ? 'label-description' : undefined}\n >\n {!!this.label ? loc(this.label) : this.hasLabelSlotContent ? <slot name=\"label\" /> : ''}\n </div>\n )}\n {this.hasDescripiton && (\n <div\n id=\"label-description\"\n class={this.descriptionClasses}\n >\n {!!this.description ? loc(this.description) : this.hasDefaultSlotContent ? <slot /> : ''}\n </div>\n )}\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"q2-detail.entry.esm.js","sources":["src/components/q2-detail/q2-detail.scss?tag=q2-detail&encapsulation=shadow","src/components/q2-detail/q2-detail.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n:host {\n display: block;\n}\n\n::slotted([slot]) {\n display: flex;\n align-items: center;\n --tct-icon-size: var(--tct-detail-label-icon-size, 16px);\n}\n\n.detail {\n column-gap: var-list(--tct-detail-gap-column, --app-scale-1x, 5px);\n row-gap: var-list(--tct-detail-gap-row, 0px);\n\n &-block {\n display: flex;\n width: 100%;\n }\n\n &-inline {\n display: flex;\n }\n\n &-horizontal {\n align-items: var(--tct-detail-vertical-alignment, baseline);\n flex-direction: row;\n }\n\n &-stacked {\n flex-direction: column;\n\n &-alignment-left {\n align-items: flex-start;\n }\n\n &-alignment-right {\n align-items: flex-end;\n }\n\n &-alignment-center {\n align-items: center;\n }\n }\n}\n\n.label {\n flex: 1;\n text-align: left;\n line-height: 1.5;\n color: var(--tct-detail-label-font-color, #141430);\n\n &-size {\n &-xsmall {\n color: var(--tct-detail-label-xsmall-font-color, #6f6f82);\n font-size: var(--tct-detail-label-xsmall-font-size, 14px);\n font-weight: var(--tct-detail-label-xsmall-font-weight, 400);\n }\n &-small {\n color: var(--tct-detail-label-small-font-color);\n font-size: var(--tct-detail-label-small-font-size, 14px);\n font-weight: var(--tct-detail-label-small-font-weight, 400);\n }\n &-medium {\n color: var(--tct-detail-label-medium-font-color);\n font-size: var(--tct-detail-label-medium-font-size, 14px);\n font-weight: var(--tct-detail-label-medium-font-weight, 400);\n }\n &-large {\n color: var(--tct-detail-label-large-font-color);\n font-size: var(--tct-detail-label-large-font-size, 16px);\n font-weight: var(--tct-detail-label-large-font-weight, 400);\n }\n &-xlarge {\n color: var(--tct-detail-label-xlarge-font-color);\n font-size: var(--tct-detail-label-xlarge-font-size, 18px);\n font-weight: var(--tct-detail-label-xlarge-font-weight, 400);\n }\n &-inline {\n font-size: var(--tct-detail-label-inline-font-size, 1em);\n font-weight: var(--tct-detail-label-inline-font-weight, 400);\n color: inherit;\n }\n }\n}\n\n.description {\n flex: 1;\n display: flex;\n align-items: center;\n line-height: 1.5;\n color: var(--tct-detail-description-font-color, #141430);\n column-gap: var-list(--tct-detail-description-gap-column, --app-scale-1x, 5px);\n\n &-alignment-right {\n justify-content: flex-end;\n }\n\n &-size {\n &-xsmall {\n color: var(--tct-detail-description-xsmall-font-color, #6f6f82);\n font-size: var(--tct-detail-description-xsmall-font-size, 14px);\n font-weight: var(--tct-detail-description-xsmall-font-weight, 400);\n }\n &-small {\n color: var(--tct-detail-description-small-font-color);\n font-size: var(--tct-detail-description-small-font-size, 14px);\n font-weight: var(--tct-detail-description-small-font-weight, 400);\n }\n &-medium {\n color: var(--tct-detail-description-medium-font-color);\n font-size: var(--tct-detail-description-medium-font-size, 24px);\n font-weight: var(--tct-detail-description-medium-font-weight, 600);\n }\n &-large {\n color: var(--tct-detail-description-large-font-color);\n font-size: var(--tct-detail-description-large-font-size, 28px);\n font-weight: var(--tct-detail-description-large-font-weight, 600);\n }\n &-xlarge {\n color: var(--tct-detail-description-xlarge-font-color);\n font-size: var(--tct-detail-description-xlarge-font-size, 32px);\n font-weight: var(--tct-detail-description-xlarge-font-weight, 700);\n }\n &-inline {\n font-size: var(--tct-detail-description-inline-font-size, 1em);\n color: inherit;\n }\n }\n}\n","import { Component, Element, Prop, h } from '@stencil/core';\nimport { hasSlotContent, loc } from 'src/utils';\n\n/**\n * @name Detail\n * @category Display\n * @summary Use for displaying label-value pairs like account details or miscellaneous info.\n * @slot label - An optional slot to display a custom label.\n */\n@Component({\n tag: 'q2-detail',\n styleUrl: 'q2-detail.scss',\n shadow: true,\n})\nexport class Q2Detail {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Defines the alignment of the label and description when stacked, or when only the label or description is present. */\n @Prop({ reflect: true })\n alignment: 'left' | 'right' | 'center' = 'left';\n\n /**\n * Defines the text content of the description.\n *\n * @localizable\n */\n @Prop({ reflect: true })\n description: string;\n\n /**\n * Defines the text content of the label.\n *\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Defines the text size of the label and description.\n *\n * If not specified, the detail will display as inline text.\n */\n @Prop({ reflect: true })\n size: null | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\n /** Determines if the description should appear beneath the label. */\n @Prop({ reflect: true })\n stacked: boolean = false;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.setSlotSizeProps();\n }\n\n // #endregion\n // #region Local Methods\n\n get descriptionClasses() {\n const classes = ['description'];\n if (this.size) {\n classes.push(`description-size-${this.size}`);\n } else {\n classes.push(`description-size-inline`);\n }\n if (!this.stacked) {\n classes.push(`description-alignment-right`);\n }\n\n return classes.join(' ');\n }\n\n get detailClasses() {\n const classes = ['detail'];\n if (this.size) {\n classes.push(`detail-block`);\n } else {\n classes.push(`detail-inline`);\n }\n if (this.stacked || this.onlyHasDescripiton || this.onlyHasLabel) {\n classes.push('detail-stacked', `detail-stacked-alignment-${this.alignment}`);\n } else {\n classes.push('detail-horizontal');\n }\n\n return classes.join(' ');\n }\n\n get hasDefaultSlotContent() {\n const hasInnerHtml = !!this.hostElement.innerHTML.trim();\n const namedSlotCount = this.hostElement.querySelectorAll(':scope > [slot]').length;\n const hostChildNodeCount = this.hostElement.childNodes.length;\n\n return hasInnerHtml && hostChildNodeCount > namedSlotCount;\n }\n\n get hasDescripiton() {\n return !!this.description || this.hasDefaultSlotContent;\n }\n\n get hasLabel() {\n return !!this.label || this.hasLabelSlotContent;\n }\n\n get hasLabelSlotContent() {\n return hasSlotContent(this.hostElement, 'label');\n }\n\n get labelClasses() {\n const classes = ['label'];\n if (this.size) {\n classes.push(`label-size-${this.size}`);\n } else {\n classes.push(`label-size-inline`);\n }\n if (!this.stacked) {\n classes.push(`label-align-left`);\n }\n\n return classes.join(' ');\n }\n\n get onlyHasDescripiton() {\n return this.hasDescripiton && !this.hasLabel;\n }\n\n get onlyHasLabel() {\n return this.hasLabel && !this.hasDescripiton;\n }\n\n setSlotSizeProps() {\n const slotElements = Array.from(\n this.hostElement.querySelectorAll(':scope > *:not([slot]), :scope > [slot=\"label\"] > *')\n ) as { slotSize?: string; localName?: string }[];\n slotElements.forEach(element => {\n let size = this.size;\n if (element.localName === 'q2-currency') {\n switch (size) {\n case 'xsmall':\n size = 'small';\n break;\n case 'xlarge':\n size = 'large';\n break;\n default:\n break;\n }\n }\n element.slotSize = size;\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div class={this.detailClasses}>\n {this.hasLabel && (\n <div\n class={this.labelClasses}\n aria-describedby={!!this.description ? 'label-description' : undefined}\n >\n {!!this.label ? loc(this.label) : this.hasLabelSlotContent ? <slot name=\"label\" /> : ''}\n </div>\n )}\n {this.hasDescripiton && (\n <div\n id=\"label-description\"\n class={this.descriptionClasses}\n >\n {!!this.description ? loc(this.description) : this.hasDefaultSlotContent ? <slot /> : ''}\n </div>\n )}\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { r as t, h as e, g as i } from "./index-CGkHOjh1.js";
2
2
 
3
- import { h as l, l as a } from "./index-C4PILj1_.js";
3
+ import { h as l, l as a } from "./index-C5gj0T_3.js";
4
4
 
5
5
  const o = "*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:block}::slotted([slot]){display:flex;align-items:center;--tct-icon-size:var(--tct-detail-label-icon-size, 16px)}.detail{column-gap:var(--tct-detail-gap-column, var(--app-scale-1x, 5px));row-gap:var(--tct-detail-gap-row, 0px)}.detail-block{display:flex;width:100%}.detail-inline{display:flex}.detail-horizontal{align-items:var(--tct-detail-vertical-alignment, baseline);flex-direction:row}.detail-stacked{flex-direction:column}.detail-stacked-alignment-left{align-items:flex-start}.detail-stacked-alignment-right{align-items:flex-end}.detail-stacked-alignment-center{align-items:center}.label{flex:1;text-align:left;line-height:1.5;color:var(--tct-detail-label-font-color, #141430)}.label-size-xsmall{color:var(--tct-detail-label-xsmall-font-color, #6f6f82);font-size:var(--tct-detail-label-xsmall-font-size, 14px);font-weight:var(--tct-detail-label-xsmall-font-weight, 400)}.label-size-small{color:var(--tct-detail-label-small-font-color);font-size:var(--tct-detail-label-small-font-size, 14px);font-weight:var(--tct-detail-label-small-font-weight, 400)}.label-size-medium{color:var(--tct-detail-label-medium-font-color);font-size:var(--tct-detail-label-medium-font-size, 14px);font-weight:var(--tct-detail-label-medium-font-weight, 400)}.label-size-large{color:var(--tct-detail-label-large-font-color);font-size:var(--tct-detail-label-large-font-size, 16px);font-weight:var(--tct-detail-label-large-font-weight, 400)}.label-size-xlarge{color:var(--tct-detail-label-xlarge-font-color);font-size:var(--tct-detail-label-xlarge-font-size, 18px);font-weight:var(--tct-detail-label-xlarge-font-weight, 400)}.label-size-inline{font-size:var(--tct-detail-label-inline-font-size, 1em);font-weight:var(--tct-detail-label-inline-font-weight, 400);color:inherit}.description{flex:1;display:flex;align-items:center;line-height:1.5;color:var(--tct-detail-description-font-color, #141430);column-gap:var(--tct-detail-description-gap-column, var(--app-scale-1x, 5px))}.description-alignment-right{justify-content:flex-end}.description-size-xsmall{color:var(--tct-detail-description-xsmall-font-color, #6f6f82);font-size:var(--tct-detail-description-xsmall-font-size, 14px);font-weight:var(--tct-detail-description-xsmall-font-weight, 400)}.description-size-small{color:var(--tct-detail-description-small-font-color);font-size:var(--tct-detail-description-small-font-size, 14px);font-weight:var(--tct-detail-description-small-font-weight, 400)}.description-size-medium{color:var(--tct-detail-description-medium-font-color);font-size:var(--tct-detail-description-medium-font-size, 24px);font-weight:var(--tct-detail-description-medium-font-weight, 600)}.description-size-large{color:var(--tct-detail-description-large-font-color);font-size:var(--tct-detail-description-large-font-size, 28px);font-weight:var(--tct-detail-description-large-font-weight, 600)}.description-size-xlarge{color:var(--tct-detail-description-xlarge-font-color);font-size:var(--tct-detail-description-xlarge-font-size, 32px);font-weight:var(--tct-detail-description-xlarge-font-weight, 700)}.description-size-inline{font-size:var(--tct-detail-description-inline-font-size, 1em);color:inherit}";
6
6
 
@@ -100,16 +100,16 @@ const s = class {
100
100
  // #region Render Methods
101
101
  render() {
102
102
  return e("div", {
103
- key: "e9fe9f1d23de26052a90b499865c30908942d90e",
103
+ key: "954f5dadc663b7c525e99ed138c8721215b27bc6",
104
104
  class: this.detailClasses
105
105
  }, this.hasLabel && e("div", {
106
- key: "74575c0c28fd5493cec9b04e4693f66812863946",
106
+ key: "e9499b441dae002fbb71d7fca522b9d64d9a345e",
107
107
  class: this.labelClasses,
108
108
  "aria-describedby": !!this.description ? "label-description" : undefined
109
109
  }, !!this.label ? a(this.label) : this.hasLabelSlotContent ? e("slot", {
110
110
  name: "label"
111
111
  }) : ""), this.hasDescripiton && e("div", {
112
- key: "d9bef4e29bfc54e6149d57322833f6184572b863",
112
+ key: "190d85d561eb86e2267e04e66be8558a39c3e64f",
113
113
  id: "label-description",
114
114
  class: this.descriptionClasses
115
115
  }, !!this.description ? a(this.description) : this.hasDefaultSlotContent ? e("slot", null) : ""));
@@ -1 +1 @@
1
- {"version":3,"names":["q2DetailCss","Q2Detail","constructor","hostRef","this","alignment","stacked","componentWillLoad","setSlotSizeProps","descriptionClasses","classes","size","push","join","detailClasses","onlyHasDescripiton","onlyHasLabel","hasDefaultSlotContent","hasInnerHtml","hostElement","innerHTML","trim","namedSlotCount","querySelectorAll","length","hostChildNodeCount","childNodes","hasDescripiton","description","hasLabel","label","hasLabelSlotContent","hasSlotContent","labelClasses","slotElements","Array","from","forEach","element","localName","slotSize","render","h","key","class","undefined","loc","name","id"],"sources":["src/components/q2-detail/q2-detail.scss?tag=q2-detail&encapsulation=shadow","src/components/q2-detail/q2-detail.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n::slotted([slot]) {\n display: flex;\n align-items: center;\n --tct-icon-size: var(--tct-detail-label-icon-size, 16px);\n}\n\n.detail {\n column-gap: var-list(--tct-detail-gap-column, --app-scale-1x, 5px);\n row-gap: var-list(--tct-detail-gap-row, 0px);\n\n &-block {\n display: flex;\n width: 100%;\n }\n\n &-inline {\n display: flex;\n }\n\n &-horizontal {\n align-items: var(--tct-detail-vertical-alignment, baseline);\n flex-direction: row;\n }\n\n &-stacked {\n flex-direction: column;\n\n &-alignment-left {\n align-items: flex-start;\n }\n\n &-alignment-right {\n align-items: flex-end;\n }\n\n &-alignment-center {\n align-items: center;\n }\n }\n}\n\n.label {\n flex: 1;\n text-align: left;\n line-height: 1.5;\n color: var(--tct-detail-label-font-color, #141430);\n\n &-size {\n &-xsmall {\n color: var(--tct-detail-label-xsmall-font-color, #6f6f82);\n font-size: var(--tct-detail-label-xsmall-font-size, 14px);\n font-weight: var(--tct-detail-label-xsmall-font-weight, 400);\n }\n &-small {\n color: var(--tct-detail-label-small-font-color);\n font-size: var(--tct-detail-label-small-font-size, 14px);\n font-weight: var(--tct-detail-label-small-font-weight, 400);\n }\n &-medium {\n color: var(--tct-detail-label-medium-font-color);\n font-size: var(--tct-detail-label-medium-font-size, 14px);\n font-weight: var(--tct-detail-label-medium-font-weight, 400);\n }\n &-large {\n color: var(--tct-detail-label-large-font-color);\n font-size: var(--tct-detail-label-large-font-size, 16px);\n font-weight: var(--tct-detail-label-large-font-weight, 400);\n }\n &-xlarge {\n color: var(--tct-detail-label-xlarge-font-color);\n font-size: var(--tct-detail-label-xlarge-font-size, 18px);\n font-weight: var(--tct-detail-label-xlarge-font-weight, 400);\n }\n &-inline {\n font-size: var(--tct-detail-label-inline-font-size, 1em);\n font-weight: var(--tct-detail-label-inline-font-weight, 400);\n color: inherit;\n }\n }\n}\n\n.description {\n flex: 1;\n display: flex;\n align-items: center;\n line-height: 1.5;\n color: var(--tct-detail-description-font-color, #141430);\n column-gap: var-list(--tct-detail-description-gap-column, --app-scale-1x, 5px);\n\n &-alignment-right {\n justify-content: flex-end;\n }\n\n &-size {\n &-xsmall {\n color: var(--tct-detail-description-xsmall-font-color, #6f6f82);\n font-size: var(--tct-detail-description-xsmall-font-size, 14px);\n font-weight: var(--tct-detail-description-xsmall-font-weight, 400);\n }\n &-small {\n color: var(--tct-detail-description-small-font-color);\n font-size: var(--tct-detail-description-small-font-size, 14px);\n font-weight: var(--tct-detail-description-small-font-weight, 400);\n }\n &-medium {\n color: var(--tct-detail-description-medium-font-color);\n font-size: var(--tct-detail-description-medium-font-size, 24px);\n font-weight: var(--tct-detail-description-medium-font-weight, 600);\n }\n &-large {\n color: var(--tct-detail-description-large-font-color);\n font-size: var(--tct-detail-description-large-font-size, 28px);\n font-weight: var(--tct-detail-description-large-font-weight, 600);\n }\n &-xlarge {\n color: var(--tct-detail-description-xlarge-font-color);\n font-size: var(--tct-detail-description-xlarge-font-size, 32px);\n font-weight: var(--tct-detail-description-xlarge-font-weight, 700);\n }\n &-inline {\n font-size: var(--tct-detail-description-inline-font-size, 1em);\n color: inherit;\n }\n }\n}\n","import { Component, Element, Prop, h } from '@stencil/core';\nimport { hasSlotContent, loc } from 'src/utils';\n\n/**\n * @name Detail\n * @category Display\n * @summary Use for displaying label-value pairs like account details or miscellaneous info.\n * @slot label - An optional slot to display a custom label.\n */\n@Component({\n tag: 'q2-detail',\n styleUrl: 'q2-detail.scss',\n shadow: true,\n})\nexport class Q2Detail {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Defines the alignment of the label and description when stacked, or when only the label or description is present. */\n @Prop({ reflect: true })\n alignment: 'left' | 'right' | 'center' = 'left';\n\n /**\n * Defines the text content of the description.\n *\n * @localizable\n */\n @Prop({ reflect: true })\n description: string;\n\n /**\n * Defines the text content of the label.\n *\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Defines the text size of the label and description.\n *\n * If not specified, the detail will display as inline text.\n */\n @Prop({ reflect: true })\n size: null | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\n /** Determines if the description should appear beneath the label. */\n @Prop({ reflect: true })\n stacked: boolean = false;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.setSlotSizeProps();\n }\n\n // #endregion\n // #region Local Methods\n\n get descriptionClasses() {\n const classes = ['description'];\n if (this.size) {\n classes.push(`description-size-${this.size}`);\n } else {\n classes.push(`description-size-inline`);\n }\n if (!this.stacked) {\n classes.push(`description-alignment-right`);\n }\n\n return classes.join(' ');\n }\n\n get detailClasses() {\n const classes = ['detail'];\n if (this.size) {\n classes.push(`detail-block`);\n } else {\n classes.push(`detail-inline`);\n }\n if (this.stacked || this.onlyHasDescripiton || this.onlyHasLabel) {\n classes.push('detail-stacked', `detail-stacked-alignment-${this.alignment}`);\n } else {\n classes.push('detail-horizontal');\n }\n\n return classes.join(' ');\n }\n\n get hasDefaultSlotContent() {\n const hasInnerHtml = !!this.hostElement.innerHTML.trim();\n const namedSlotCount = this.hostElement.querySelectorAll(':scope > [slot]').length;\n const hostChildNodeCount = this.hostElement.childNodes.length;\n\n return hasInnerHtml && hostChildNodeCount > namedSlotCount;\n }\n\n get hasDescripiton() {\n return !!this.description || this.hasDefaultSlotContent;\n }\n\n get hasLabel() {\n return !!this.label || this.hasLabelSlotContent;\n }\n\n get hasLabelSlotContent() {\n return hasSlotContent(this.hostElement, 'label');\n }\n\n get labelClasses() {\n const classes = ['label'];\n if (this.size) {\n classes.push(`label-size-${this.size}`);\n } else {\n classes.push(`label-size-inline`);\n }\n if (!this.stacked) {\n classes.push(`label-align-left`);\n }\n\n return classes.join(' ');\n }\n\n get onlyHasDescripiton() {\n return this.hasDescripiton && !this.hasLabel;\n }\n\n get onlyHasLabel() {\n return this.hasLabel && !this.hasDescripiton;\n }\n\n setSlotSizeProps() {\n const slotElements = Array.from(\n this.hostElement.querySelectorAll(':scope > *:not([slot]), :scope > [slot=\"label\"] > *')\n ) as { slotSize?: string; localName?: string }[];\n slotElements.forEach(element => {\n let size = this.size;\n if (element.localName === 'q2-currency') {\n switch (size) {\n case 'xsmall':\n size = 'small';\n break;\n case 'xlarge':\n size = 'large';\n break;\n default:\n break;\n }\n }\n element.slotSize = size;\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div class={this.detailClasses}>\n {this.hasLabel && (\n <div\n class={this.labelClasses}\n aria-describedby={!!this.description ? 'label-description' : undefined}\n >\n {!!this.label ? loc(this.label) : this.hasLabelSlotContent ? <slot name=\"label\" /> : ''}\n </div>\n )}\n {this.hasDescripiton && (\n <div\n id=\"label-description\"\n class={this.descriptionClasses}\n >\n {!!this.description ? loc(this.description) : this.hasDefaultSlotContent ? <slot /> : ''}\n </div>\n )}\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":";;;;AAAA,MAAMA,IAAc;;MCcPC,IAAQ;EALrB,WAAAC,CAAAC;;;;iIAgBIC,KAASC,YAAgC;6EA4BzCD,KAAOE,UAAY;AAqItB;;;EAhIG,iBAAAC;IACIH,KAAKI;;;;EAMT,sBAAIC;IACA,MAAMC,IAAU,EAAC;IACjB,IAAIN,KAAKO,MAAM;MACXD,EAAQE,KAAK,oBAAoBR,KAAKO;WACnC;MACHD,EAAQE,KAAK;;IAEjB,KAAKR,KAAKE,SAAS;MACfI,EAAQE,KAAK;;IAGjB,OAAOF,EAAQG,KAAK;;EAGxB,iBAAIC;IACA,MAAMJ,IAAU,EAAC;IACjB,IAAIN,KAAKO,MAAM;MACXD,EAAQE,KAAK;WACV;MACHF,EAAQE,KAAK;;IAEjB,IAAIR,KAAKE,WAAWF,KAAKW,sBAAsBX,KAAKY,cAAc;MAC9DN,EAAQE,KAAK,kBAAkB,4BAA4BR,KAAKC;WAC7D;MACHK,EAAQE,KAAK;;IAGjB,OAAOF,EAAQG,KAAK;;EAGxB,yBAAII;IACA,MAAMC,MAAiBd,KAAKe,YAAYC,UAAUC;IAClD,MAAMC,IAAiBlB,KAAKe,YAAYI,iBAAiB,mBAAmBC;IAC5E,MAAMC,IAAqBrB,KAAKe,YAAYO,WAAWF;IAEvD,OAAON,KAAgBO,IAAqBH;;EAGhD,kBAAIK;IACA,SAASvB,KAAKwB,eAAexB,KAAKa;;EAGtC,YAAIY;IACA,SAASzB,KAAK0B,SAAS1B,KAAK2B;;EAGhC,uBAAIA;IACA,OAAOC,EAAe5B,KAAKe,aAAa;;EAG5C,gBAAIc;IACA,MAAMvB,IAAU,EAAC;IACjB,IAAIN,KAAKO,MAAM;MACXD,EAAQE,KAAK,cAAcR,KAAKO;WAC7B;MACHD,EAAQE,KAAK;;IAEjB,KAAKR,KAAKE,SAAS;MACfI,EAAQE,KAAK;;IAGjB,OAAOF,EAAQG,KAAK;;EAGxB,sBAAIE;IACA,OAAOX,KAAKuB,mBAAmBvB,KAAKyB;;EAGxC,gBAAIb;IACA,OAAOZ,KAAKyB,aAAazB,KAAKuB;;EAGlC,gBAAAnB;IACI,MAAM0B,IAAeC,MAAMC,KACvBhC,KAAKe,YAAYI,iBAAiB;IAEtCW,EAAaG,SAAQC;MACjB,IAAI3B,IAAOP,KAAKO;MAChB,IAAI2B,EAAQC,cAAc,eAAe;QACrC,QAAQ5B;SACJ,KAAK;UACDA,IAAO;UACP;;SACJ,KAAK;UACDA,IAAO;UACP;;;MAKZ2B,EAAQE,WAAW7B;AAAI;;;;EAO/B,MAAA8B;IACI,OACIC,EAAK;MAAAC,KAAA;MAAAC,OAAOxC,KAAKU;OACZV,KAAKyB,YACFa,EAAA;MAAAC,KAAA;MACIC,OAAOxC,KAAK6B;MAAY,sBACJ7B,KAAKwB,cAAc,sBAAsBiB;SAE1DzC,KAAK0B,QAAQgB,EAAI1C,KAAK0B,SAAS1B,KAAK2B,sBAAsBW,EAAM;MAAAK,MAAK;SAAa,KAG5F3C,KAAKuB,kBACFe,EAAA;MAAAC,KAAA;MACIK,IAAG;MACHJ,OAAOxC,KAAKK;SAETL,KAAKwB,cAAckB,EAAI1C,KAAKwB,eAAexB,KAAKa,wBAAwByB,EAAA,gBAAW","ignoreList":[]}
1
+ {"version":3,"names":["q2DetailCss","Q2Detail","constructor","hostRef","this","alignment","stacked","componentWillLoad","setSlotSizeProps","descriptionClasses","classes","size","push","join","detailClasses","onlyHasDescripiton","onlyHasLabel","hasDefaultSlotContent","hasInnerHtml","hostElement","innerHTML","trim","namedSlotCount","querySelectorAll","length","hostChildNodeCount","childNodes","hasDescripiton","description","hasLabel","label","hasLabelSlotContent","hasSlotContent","labelClasses","slotElements","Array","from","forEach","element","localName","slotSize","render","h","key","class","undefined","loc","name","id"],"sources":["src/components/q2-detail/q2-detail.scss?tag=q2-detail&encapsulation=shadow","src/components/q2-detail/q2-detail.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n:host {\n display: block;\n}\n\n::slotted([slot]) {\n display: flex;\n align-items: center;\n --tct-icon-size: var(--tct-detail-label-icon-size, 16px);\n}\n\n.detail {\n column-gap: var-list(--tct-detail-gap-column, --app-scale-1x, 5px);\n row-gap: var-list(--tct-detail-gap-row, 0px);\n\n &-block {\n display: flex;\n width: 100%;\n }\n\n &-inline {\n display: flex;\n }\n\n &-horizontal {\n align-items: var(--tct-detail-vertical-alignment, baseline);\n flex-direction: row;\n }\n\n &-stacked {\n flex-direction: column;\n\n &-alignment-left {\n align-items: flex-start;\n }\n\n &-alignment-right {\n align-items: flex-end;\n }\n\n &-alignment-center {\n align-items: center;\n }\n }\n}\n\n.label {\n flex: 1;\n text-align: left;\n line-height: 1.5;\n color: var(--tct-detail-label-font-color, #141430);\n\n &-size {\n &-xsmall {\n color: var(--tct-detail-label-xsmall-font-color, #6f6f82);\n font-size: var(--tct-detail-label-xsmall-font-size, 14px);\n font-weight: var(--tct-detail-label-xsmall-font-weight, 400);\n }\n &-small {\n color: var(--tct-detail-label-small-font-color);\n font-size: var(--tct-detail-label-small-font-size, 14px);\n font-weight: var(--tct-detail-label-small-font-weight, 400);\n }\n &-medium {\n color: var(--tct-detail-label-medium-font-color);\n font-size: var(--tct-detail-label-medium-font-size, 14px);\n font-weight: var(--tct-detail-label-medium-font-weight, 400);\n }\n &-large {\n color: var(--tct-detail-label-large-font-color);\n font-size: var(--tct-detail-label-large-font-size, 16px);\n font-weight: var(--tct-detail-label-large-font-weight, 400);\n }\n &-xlarge {\n color: var(--tct-detail-label-xlarge-font-color);\n font-size: var(--tct-detail-label-xlarge-font-size, 18px);\n font-weight: var(--tct-detail-label-xlarge-font-weight, 400);\n }\n &-inline {\n font-size: var(--tct-detail-label-inline-font-size, 1em);\n font-weight: var(--tct-detail-label-inline-font-weight, 400);\n color: inherit;\n }\n }\n}\n\n.description {\n flex: 1;\n display: flex;\n align-items: center;\n line-height: 1.5;\n color: var(--tct-detail-description-font-color, #141430);\n column-gap: var-list(--tct-detail-description-gap-column, --app-scale-1x, 5px);\n\n &-alignment-right {\n justify-content: flex-end;\n }\n\n &-size {\n &-xsmall {\n color: var(--tct-detail-description-xsmall-font-color, #6f6f82);\n font-size: var(--tct-detail-description-xsmall-font-size, 14px);\n font-weight: var(--tct-detail-description-xsmall-font-weight, 400);\n }\n &-small {\n color: var(--tct-detail-description-small-font-color);\n font-size: var(--tct-detail-description-small-font-size, 14px);\n font-weight: var(--tct-detail-description-small-font-weight, 400);\n }\n &-medium {\n color: var(--tct-detail-description-medium-font-color);\n font-size: var(--tct-detail-description-medium-font-size, 24px);\n font-weight: var(--tct-detail-description-medium-font-weight, 600);\n }\n &-large {\n color: var(--tct-detail-description-large-font-color);\n font-size: var(--tct-detail-description-large-font-size, 28px);\n font-weight: var(--tct-detail-description-large-font-weight, 600);\n }\n &-xlarge {\n color: var(--tct-detail-description-xlarge-font-color);\n font-size: var(--tct-detail-description-xlarge-font-size, 32px);\n font-weight: var(--tct-detail-description-xlarge-font-weight, 700);\n }\n &-inline {\n font-size: var(--tct-detail-description-inline-font-size, 1em);\n color: inherit;\n }\n }\n}\n","import { Component, Element, Prop, h } from '@stencil/core';\nimport { hasSlotContent, loc } from 'src/utils';\n\n/**\n * @name Detail\n * @category Display\n * @summary Use for displaying label-value pairs like account details or miscellaneous info.\n * @slot label - An optional slot to display a custom label.\n */\n@Component({\n tag: 'q2-detail',\n styleUrl: 'q2-detail.scss',\n shadow: true,\n})\nexport class Q2Detail {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Defines the alignment of the label and description when stacked, or when only the label or description is present. */\n @Prop({ reflect: true })\n alignment: 'left' | 'right' | 'center' = 'left';\n\n /**\n * Defines the text content of the description.\n *\n * @localizable\n */\n @Prop({ reflect: true })\n description: string;\n\n /**\n * Defines the text content of the label.\n *\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Defines the text size of the label and description.\n *\n * If not specified, the detail will display as inline text.\n */\n @Prop({ reflect: true })\n size: null | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\n /** Determines if the description should appear beneath the label. */\n @Prop({ reflect: true })\n stacked: boolean = false;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.setSlotSizeProps();\n }\n\n // #endregion\n // #region Local Methods\n\n get descriptionClasses() {\n const classes = ['description'];\n if (this.size) {\n classes.push(`description-size-${this.size}`);\n } else {\n classes.push(`description-size-inline`);\n }\n if (!this.stacked) {\n classes.push(`description-alignment-right`);\n }\n\n return classes.join(' ');\n }\n\n get detailClasses() {\n const classes = ['detail'];\n if (this.size) {\n classes.push(`detail-block`);\n } else {\n classes.push(`detail-inline`);\n }\n if (this.stacked || this.onlyHasDescripiton || this.onlyHasLabel) {\n classes.push('detail-stacked', `detail-stacked-alignment-${this.alignment}`);\n } else {\n classes.push('detail-horizontal');\n }\n\n return classes.join(' ');\n }\n\n get hasDefaultSlotContent() {\n const hasInnerHtml = !!this.hostElement.innerHTML.trim();\n const namedSlotCount = this.hostElement.querySelectorAll(':scope > [slot]').length;\n const hostChildNodeCount = this.hostElement.childNodes.length;\n\n return hasInnerHtml && hostChildNodeCount > namedSlotCount;\n }\n\n get hasDescripiton() {\n return !!this.description || this.hasDefaultSlotContent;\n }\n\n get hasLabel() {\n return !!this.label || this.hasLabelSlotContent;\n }\n\n get hasLabelSlotContent() {\n return hasSlotContent(this.hostElement, 'label');\n }\n\n get labelClasses() {\n const classes = ['label'];\n if (this.size) {\n classes.push(`label-size-${this.size}`);\n } else {\n classes.push(`label-size-inline`);\n }\n if (!this.stacked) {\n classes.push(`label-align-left`);\n }\n\n return classes.join(' ');\n }\n\n get onlyHasDescripiton() {\n return this.hasDescripiton && !this.hasLabel;\n }\n\n get onlyHasLabel() {\n return this.hasLabel && !this.hasDescripiton;\n }\n\n setSlotSizeProps() {\n const slotElements = Array.from(\n this.hostElement.querySelectorAll(':scope > *:not([slot]), :scope > [slot=\"label\"] > *')\n ) as { slotSize?: string; localName?: string }[];\n slotElements.forEach(element => {\n let size = this.size;\n if (element.localName === 'q2-currency') {\n switch (size) {\n case 'xsmall':\n size = 'small';\n break;\n case 'xlarge':\n size = 'large';\n break;\n default:\n break;\n }\n }\n element.slotSize = size;\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div class={this.detailClasses}>\n {this.hasLabel && (\n <div\n class={this.labelClasses}\n aria-describedby={!!this.description ? 'label-description' : undefined}\n >\n {!!this.label ? loc(this.label) : this.hasLabelSlotContent ? <slot name=\"label\" /> : ''}\n </div>\n )}\n {this.hasDescripiton && (\n <div\n id=\"label-description\"\n class={this.descriptionClasses}\n >\n {!!this.description ? loc(this.description) : this.hasDefaultSlotContent ? <slot /> : ''}\n </div>\n )}\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":";;;;AAAA,MAAMA,IAAc;;MCcPC,IAAQ;EALrB,WAAAC,CAAAC;;;;iIAgBIC,KAASC,YAAgC;6EA4BzCD,KAAOE,UAAY;AAqItB;;;EAhIG,iBAAAC;IACIH,KAAKI;;;;EAMT,sBAAIC;IACA,MAAMC,IAAU,EAAC;IACjB,IAAIN,KAAKO,MAAM;MACXD,EAAQE,KAAK,oBAAoBR,KAAKO;WACnC;MACHD,EAAQE,KAAK;;IAEjB,KAAKR,KAAKE,SAAS;MACfI,EAAQE,KAAK;;IAGjB,OAAOF,EAAQG,KAAK;;EAGxB,iBAAIC;IACA,MAAMJ,IAAU,EAAC;IACjB,IAAIN,KAAKO,MAAM;MACXD,EAAQE,KAAK;WACV;MACHF,EAAQE,KAAK;;IAEjB,IAAIR,KAAKE,WAAWF,KAAKW,sBAAsBX,KAAKY,cAAc;MAC9DN,EAAQE,KAAK,kBAAkB,4BAA4BR,KAAKC;WAC7D;MACHK,EAAQE,KAAK;;IAGjB,OAAOF,EAAQG,KAAK;;EAGxB,yBAAII;IACA,MAAMC,MAAiBd,KAAKe,YAAYC,UAAUC;IAClD,MAAMC,IAAiBlB,KAAKe,YAAYI,iBAAiB,mBAAmBC;IAC5E,MAAMC,IAAqBrB,KAAKe,YAAYO,WAAWF;IAEvD,OAAON,KAAgBO,IAAqBH;;EAGhD,kBAAIK;IACA,SAASvB,KAAKwB,eAAexB,KAAKa;;EAGtC,YAAIY;IACA,SAASzB,KAAK0B,SAAS1B,KAAK2B;;EAGhC,uBAAIA;IACA,OAAOC,EAAe5B,KAAKe,aAAa;;EAG5C,gBAAIc;IACA,MAAMvB,IAAU,EAAC;IACjB,IAAIN,KAAKO,MAAM;MACXD,EAAQE,KAAK,cAAcR,KAAKO;WAC7B;MACHD,EAAQE,KAAK;;IAEjB,KAAKR,KAAKE,SAAS;MACfI,EAAQE,KAAK;;IAGjB,OAAOF,EAAQG,KAAK;;EAGxB,sBAAIE;IACA,OAAOX,KAAKuB,mBAAmBvB,KAAKyB;;EAGxC,gBAAIb;IACA,OAAOZ,KAAKyB,aAAazB,KAAKuB;;EAGlC,gBAAAnB;IACI,MAAM0B,IAAeC,MAAMC,KACvBhC,KAAKe,YAAYI,iBAAiB;IAEtCW,EAAaG,SAAQC;MACjB,IAAI3B,IAAOP,KAAKO;MAChB,IAAI2B,EAAQC,cAAc,eAAe;QACrC,QAAQ5B;SACJ,KAAK;UACDA,IAAO;UACP;;SACJ,KAAK;UACDA,IAAO;UACP;;;MAKZ2B,EAAQE,WAAW7B;AAAI;;;;EAO/B,MAAA8B;IACI,OACIC,EAAK;MAAAC,KAAA;MAAAC,OAAOxC,KAAKU;OACZV,KAAKyB,YACFa,EAAA;MAAAC,KAAA;MACIC,OAAOxC,KAAK6B;MAAY,sBACJ7B,KAAKwB,cAAc,sBAAsBiB;SAE1DzC,KAAK0B,QAAQgB,EAAI1C,KAAK0B,SAAS1B,KAAK2B,sBAAsBW,EAAM;MAAAK,MAAK;SAAa,KAG5F3C,KAAKuB,kBACFe,EAAA;MAAAC,KAAA;MACIK,IAAG;MACHJ,OAAOxC,KAAKK;SAETL,KAAKwB,cAAckB,EAAI1C,KAAKwB,eAAexB,KAAKa,wBAAwByB,EAAA,gBAAW","ignoreList":[]}