q2-tecton-elements 1.65.0 → 1.66.1

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 (687) hide show
  1. package/dist/bundle-report.json +1908 -745
  2. package/dist/cjs/{action-sheet-CiK2Bap_.js → action-sheet-D71RSc-w.js} +5 -2
  3. package/dist/cjs/action-sheet-D71RSc-w.js.map +1 -0
  4. package/dist/cjs/component-DRAntnCA.js +47 -0
  5. package/dist/cjs/component-DRAntnCA.js.map +1 -0
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/q2-action-group.q2-resize-observer.entry.cjs.js.map +1 -1
  8. package/dist/cjs/q2-action-group_2.cjs.entry.js +121 -45
  9. package/dist/cjs/q2-action-group_2.cjs.entry.js.map +1 -1
  10. package/dist/cjs/q2-action-sheet.cjs.entry.js +9 -5
  11. package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
  12. package/dist/cjs/q2-action-sheet.entry.cjs.js.map +1 -1
  13. package/dist/cjs/q2-avatar.cjs.entry.js +2 -2
  14. package/dist/cjs/q2-avatar.cjs.entry.js.map +1 -1
  15. package/dist/cjs/q2-avatar.entry.cjs.js.map +1 -1
  16. package/dist/cjs/q2-btn.q2-loading.entry.cjs.js.map +1 -1
  17. package/dist/cjs/q2-btn_2.cjs.entry.js +13 -4
  18. package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
  19. package/dist/cjs/q2-calendar.cjs.entry.js +3 -3
  20. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  21. package/dist/cjs/q2-calendar.entry.cjs.js.map +1 -1
  22. package/dist/cjs/q2-card-image.cjs.entry.js +5 -5
  23. package/dist/cjs/q2-card-image.cjs.entry.js.map +1 -1
  24. package/dist/cjs/q2-card-image.entry.cjs.js.map +1 -1
  25. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
  27. package/dist/cjs/q2-card.entry.cjs.js.map +1 -1
  28. package/dist/cjs/q2-carousel-pane.cjs.entry.js +7 -3
  29. package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
  30. package/dist/cjs/q2-carousel-pane.entry.cjs.js.map +1 -1
  31. package/dist/cjs/q2-carousel.cjs.entry.js +12 -2
  32. package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
  33. package/dist/cjs/q2-carousel.entry.cjs.js.map +1 -1
  34. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-checkbox-group.cjs.entry.js +5 -1
  38. package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
  39. package/dist/cjs/q2-checkbox-group.entry.cjs.js.map +1 -1
  40. package/dist/cjs/q2-checkbox.cjs.entry.js +3 -4
  41. package/dist/cjs/q2-checkbox.cjs.entry.js.map +1 -1
  42. package/dist/cjs/q2-checkbox.entry.cjs.js.map +1 -1
  43. package/dist/cjs/q2-context.cjs.entry.js +1 -1
  44. package/dist/cjs/q2-context.cjs.entry.js.map +1 -1
  45. package/dist/cjs/q2-context.entry.cjs.js.map +1 -1
  46. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  47. package/dist/cjs/q2-data-table.cjs.entry.js +19 -9
  48. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  49. package/dist/cjs/q2-data-table.entry.cjs.js.map +1 -1
  50. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-detail.cjs.entry.js.map +1 -1
  52. package/dist/cjs/q2-detail.entry.cjs.js.map +1 -1
  53. package/dist/cjs/q2-dropdown-item.cjs.entry.js +3 -1
  54. package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
  55. package/dist/cjs/q2-dropdown-item.entry.cjs.js.map +1 -1
  56. package/dist/cjs/q2-dropdown.cjs.entry.js +33 -8
  57. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  58. package/dist/cjs/q2-dropdown.entry.cjs.js.map +1 -1
  59. package/dist/cjs/q2-editable-field.cjs.entry.js +2 -2
  60. package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
  61. package/dist/cjs/q2-editable-field.entry.cjs.js.map +1 -1
  62. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  63. package/dist/cjs/q2-file-picker.cjs.entry.js +2 -2
  64. package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -1
  65. package/dist/cjs/q2-file-picker.entry.cjs.js.map +1 -1
  66. package/dist/cjs/q2-form.cjs.entry.js +1 -1
  67. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  68. package/dist/cjs/q2-grid-area.cjs.entry.js +9 -1
  69. package/dist/cjs/q2-grid-area.cjs.entry.js.map +1 -1
  70. package/dist/cjs/q2-grid-area.entry.cjs.js.map +1 -1
  71. package/dist/cjs/q2-icon.cjs.entry.js +6 -0
  72. package/dist/cjs/q2-icon.cjs.entry.js.map +1 -1
  73. package/dist/cjs/q2-icon.entry.cjs.js.map +1 -1
  74. package/dist/cjs/q2-input.cjs.entry.js +8 -6
  75. package/dist/cjs/q2-input.cjs.entry.js.map +1 -1
  76. package/dist/cjs/q2-input.entry.cjs.js.map +1 -1
  77. package/dist/cjs/q2-item.cjs.entry.js +17 -17
  78. package/dist/cjs/q2-item.cjs.entry.js.map +1 -1
  79. package/dist/cjs/q2-item.entry.cjs.js.map +1 -1
  80. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  81. package/dist/cjs/q2-link.q2-list.entry.cjs.js.map +1 -1
  82. package/dist/cjs/q2-link_2.cjs.entry.js +11 -7
  83. package/dist/cjs/q2-link_2.cjs.entry.js.map +1 -1
  84. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  85. package/dist/cjs/q2-message.cjs.entry.js.map +1 -1
  86. package/dist/cjs/q2-message.entry.cjs.js.map +1 -1
  87. package/dist/cjs/q2-meter.cjs.entry.js +1 -1
  88. package/dist/cjs/q2-modal.cjs.entry.js +2 -2
  89. package/dist/cjs/q2-month-picker.cjs.entry.js +2 -2
  90. package/dist/cjs/q2-mutation-observer.cjs.entry.js +1 -1
  91. package/dist/cjs/q2-optgroup.cjs.entry.js +4 -2
  92. package/dist/cjs/q2-optgroup.cjs.entry.js.map +1 -1
  93. package/dist/cjs/q2-optgroup.entry.cjs.js.map +1 -1
  94. package/dist/cjs/q2-option-list.q2-popover.entry.cjs.js.map +1 -1
  95. package/dist/cjs/q2-option-list_2.cjs.entry.js +5 -3
  96. package/dist/cjs/q2-option-list_2.cjs.entry.js.map +1 -1
  97. package/dist/cjs/q2-option.cjs.entry.js +3 -1
  98. package/dist/cjs/q2-option.cjs.entry.js.map +1 -1
  99. package/dist/cjs/q2-option.entry.cjs.js.map +1 -1
  100. package/dist/cjs/q2-pagination.cjs.entry.js +10 -12
  101. package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
  102. package/dist/cjs/q2-pagination.entry.cjs.js.map +1 -1
  103. package/dist/cjs/q2-pill.cjs.entry.js +2 -2
  104. package/dist/cjs/q2-radio.cjs.entry.js +2 -2
  105. package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
  106. package/dist/cjs/q2-radio.entry.cjs.js.map +1 -1
  107. package/dist/cjs/q2-relative-time.cjs.entry.js +1 -1
  108. package/dist/cjs/q2-section-container.cjs.entry.js +2 -0
  109. package/dist/cjs/q2-section-container.cjs.entry.js.map +1 -1
  110. package/dist/cjs/q2-section-container.entry.cjs.js.map +1 -1
  111. package/dist/cjs/q2-section.cjs.entry.js +2 -2
  112. package/dist/cjs/q2-select.cjs.entry.js +7 -3
  113. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  114. package/dist/cjs/q2-select.entry.cjs.js.map +1 -1
  115. package/dist/cjs/q2-stepper-pane.cjs.entry.js +3 -1
  116. package/dist/cjs/q2-stepper-pane.cjs.entry.js.map +1 -1
  117. package/dist/cjs/q2-stepper-pane.entry.cjs.js.map +1 -1
  118. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  119. package/dist/cjs/q2-stepper.cjs.entry.js +6 -2
  120. package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
  121. package/dist/cjs/q2-stepper.entry.cjs.js.map +1 -1
  122. package/dist/cjs/q2-tab-container.cjs.entry.js +5 -1
  123. package/dist/cjs/q2-tab-container.cjs.entry.js.map +1 -1
  124. package/dist/cjs/q2-tab-container.entry.cjs.js.map +1 -1
  125. package/dist/cjs/q2-tab-pane.cjs.entry.js +8 -1
  126. package/dist/cjs/q2-tab-pane.cjs.entry.js.map +1 -1
  127. package/dist/cjs/q2-tab-pane.entry.cjs.js.map +1 -1
  128. package/dist/cjs/q2-tag.cjs.entry.js +3 -3
  129. package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
  130. package/dist/cjs/q2-tag.entry.cjs.js.map +1 -1
  131. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  132. package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
  133. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  134. package/dist/cjs/q2-textarea.entry.cjs.js.map +1 -1
  135. package/dist/cjs/q2-toast.cjs.entry.js +192 -0
  136. package/dist/cjs/q2-toast.cjs.entry.js.map +1 -0
  137. package/dist/cjs/q2-toast.entry.cjs.js.map +1 -0
  138. package/dist/cjs/{sanitize-html-string-DPqrzfM9.js → sanitize-html-string-C2iwHNz5.js} +30 -6
  139. package/dist/cjs/sanitize-html-string-C2iwHNz5.js.map +1 -0
  140. package/dist/cjs/tecton-tab-pane.cjs.entry.js +4 -2
  141. package/dist/cjs/tecton-tab-pane.cjs.entry.js.map +1 -1
  142. package/dist/cjs/tecton-tab-pane.entry.cjs.js.map +1 -1
  143. package/dist/collection/collection-manifest.json +3 -2
  144. package/dist/collection/components/q2-action-group/q2-action-group.css +11 -4
  145. package/dist/collection/components/q2-action-group/q2-action-group.js +121 -45
  146. package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
  147. package/dist/collection/components/q2-action-sheet/q2-action-sheet.css +8 -0
  148. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +9 -5
  149. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  150. package/dist/collection/components/q2-avatar/q2-avatar.css +3 -0
  151. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  152. package/dist/collection/components/q2-btn/q2-btn.css +9 -1
  153. package/dist/collection/components/q2-btn/q2-btn.js +1 -1
  154. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  155. package/dist/collection/components/q2-calendar/q2-calendar.css +5 -1
  156. package/dist/collection/components/q2-calendar/q2-calendar.js +2 -2
  157. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  158. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  159. package/dist/collection/components/q2-card/q2-card.css +1 -0
  160. package/dist/collection/components/q2-card-image/q2-card-image.js +6 -6
  161. package/dist/collection/components/q2-card-image/q2-card-image.js.map +1 -1
  162. package/dist/collection/components/q2-carousel/q2-carousel.css +1 -1
  163. package/dist/collection/components/q2-carousel/q2-carousel.js +11 -1
  164. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  165. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.css +11 -1
  166. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +6 -2
  167. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
  168. package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
  169. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
  170. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
  171. package/dist/collection/components/q2-checkbox/q2-checkbox.css +136 -15
  172. package/dist/collection/components/q2-checkbox/q2-checkbox.js +2 -8
  173. package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
  174. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +5 -1
  175. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
  176. package/dist/collection/components/q2-context/q2-context.js +1 -1
  177. package/dist/collection/components/q2-context/q2-context.js.map +1 -1
  178. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  179. package/dist/collection/components/q2-data-table/q2-data-table.css +3 -0
  180. package/dist/collection/components/q2-data-table/q2-data-table.js +53 -20
  181. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  182. package/dist/collection/components/q2-detail/q2-detail.css +6 -0
  183. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  184. package/dist/collection/components/q2-dropdown/q2-dropdown.css +17 -0
  185. package/dist/collection/components/q2-dropdown/q2-dropdown.js +75 -8
  186. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  187. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.css +1 -0
  188. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js +2 -0
  189. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  190. package/dist/collection/components/q2-editable-field/q2-editable-field.js +2 -2
  191. package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
  192. package/dist/collection/components/q2-example/q2-example.js +1 -1
  193. package/dist/collection/components/q2-file-picker/q2-file-picker.css +4 -1
  194. package/dist/collection/components/q2-file-picker/q2-file-picker.js +4 -4
  195. package/dist/collection/components/q2-file-picker/q2-file-picker.js.map +1 -1
  196. package/dist/collection/components/q2-form/q2-form.js +1 -1
  197. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  198. package/dist/collection/components/q2-grid/q2-grid.js +30 -30
  199. package/dist/collection/components/q2-grid-area/q2-grid-area.js +51 -43
  200. package/dist/collection/components/q2-grid-area/q2-grid-area.js.map +1 -1
  201. package/dist/collection/components/q2-icon/assets/brand.symbol.svg +1 -1
  202. package/dist/collection/components/q2-icon/assets/browsersos.symbol.svg +1 -1
  203. package/dist/collection/components/q2-icon/assets/cards.symbol.svg +1 -1
  204. package/dist/collection/components/q2-icon/assets/communication.symbol.svg +1 -1
  205. package/dist/collection/components/q2-icon/assets/currencies.symbol.svg +1 -1
  206. package/dist/collection/components/q2-icon/assets/devices.symbol.svg +1 -1
  207. package/dist/collection/components/q2-icon/assets/filetypes.symbol.svg +1 -1
  208. package/dist/collection/components/q2-icon/assets/gestures.symbol.svg +1 -1
  209. package/dist/collection/components/q2-icon/assets/icon-list.json +1 -1
  210. package/dist/collection/components/q2-icon/assets/icon-map.json +1 -1
  211. package/dist/collection/components/q2-icon/assets/legacy.symbol.svg +1 -1
  212. package/dist/collection/components/q2-icon/assets/mobile.symbol.svg +1 -1
  213. package/dist/collection/components/q2-icon/assets/standard.symbol.svg +1 -1
  214. package/dist/collection/components/q2-input/formatting/phone.js +4 -2
  215. package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
  216. package/dist/collection/components/q2-input/q2-input.css +3 -0
  217. package/dist/collection/components/q2-input/q2-input.js +6 -6
  218. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  219. package/dist/collection/components/q2-item/q2-item.css +3 -0
  220. package/dist/collection/components/q2-item/q2-item.js +19 -18
  221. package/dist/collection/components/q2-item/q2-item.js.map +1 -1
  222. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  223. package/dist/collection/components/q2-link/q2-link.css +53 -1
  224. package/dist/collection/components/q2-link/q2-link.js +50 -8
  225. package/dist/collection/components/q2-link/q2-link.js.map +1 -1
  226. package/dist/collection/components/q2-list/q2-list.js +1 -1
  227. package/dist/collection/components/q2-loading/q2-loading.css +1 -1
  228. package/dist/collection/components/q2-loading/q2-loading.js +10 -1
  229. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  230. package/dist/collection/components/q2-message/q2-message.css +1 -0
  231. package/dist/collection/components/q2-message/q2-message.js +1 -1
  232. package/dist/collection/components/q2-meter/q2-meter.js +1 -1
  233. package/dist/collection/components/q2-modal/q2-modal.js +1 -1
  234. package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
  235. package/dist/collection/components/q2-optgroup/q2-optgroup.css +6 -4
  236. package/dist/collection/components/q2-optgroup/q2-optgroup.js +3 -1
  237. package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
  238. package/dist/collection/components/q2-option/q2-option.css +5 -0
  239. package/dist/collection/components/q2-option/q2-option.js +2 -0
  240. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  241. package/dist/collection/components/q2-option-list/q2-option-list.js +8 -6
  242. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  243. package/dist/collection/components/q2-pagination/q2-pagination.css +3 -0
  244. package/dist/collection/components/q2-pagination/q2-pagination.js +20 -17
  245. package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
  246. package/dist/collection/components/q2-pill/q2-pill.js +1 -1
  247. package/dist/collection/components/q2-popover/q2-popover.css +1 -1
  248. package/dist/collection/components/q2-popover/q2-popover.js +1 -1
  249. package/dist/collection/components/q2-radio/q2-radio.css +85 -35
  250. package/dist/collection/components/q2-radio/q2-radio.js +1 -1
  251. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  252. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  253. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  254. package/dist/collection/components/q2-section/q2-section.js +2 -2
  255. package/dist/collection/components/q2-section-container/q2-section-container.js +2 -0
  256. package/dist/collection/components/q2-section-container/q2-section-container.js.map +1 -1
  257. package/dist/collection/components/q2-select/q2-select.js +6 -5
  258. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  259. package/dist/collection/components/q2-stepper/q2-stepper.css +1 -3
  260. package/dist/collection/components/q2-stepper/q2-stepper.js +6 -2
  261. package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
  262. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +7 -5
  263. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
  264. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  265. package/dist/collection/components/q2-tab-container/q2-tab-container.js +5 -1
  266. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  267. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +8 -1
  268. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js.map +1 -1
  269. package/dist/collection/components/q2-tag/q2-tag.css +8 -0
  270. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  271. package/dist/collection/components/q2-textarea/q2-textarea.css +2 -1
  272. package/dist/collection/components/q2-textarea/q2-textarea.js +1 -1
  273. package/dist/collection/components/q2-toast/q2-toast.css +230 -0
  274. package/dist/collection/components/q2-toast/q2-toast.js +452 -0
  275. package/dist/collection/components/q2-toast/q2-toast.js.map +1 -0
  276. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +4 -2
  277. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js.map +1 -1
  278. package/dist/collection/utils/action-sheet.js +3 -0
  279. package/dist/collection/utils/action-sheet.js.map +1 -1
  280. package/dist/collection/utils/component.js +38 -0
  281. package/dist/collection/utils/component.js.map +1 -0
  282. package/dist/collection/utils/helpers.js +6 -1
  283. package/dist/collection/utils/helpers.js.map +1 -1
  284. package/dist/collection/utils/sanitize-html-string.js +6 -0
  285. package/dist/collection/utils/sanitize-html-string.js.map +1 -1
  286. package/dist/components/action-sheet.js +3 -0
  287. package/dist/components/action-sheet.js.map +1 -1
  288. package/dist/components/component.js +42 -0
  289. package/dist/components/component.js.map +1 -0
  290. package/dist/components/index.js +2 -0
  291. package/dist/components/index.js.map +1 -1
  292. package/dist/components/q2-action-group2.js +121 -45
  293. package/dist/components/q2-action-group2.js.map +1 -1
  294. package/dist/components/q2-action-sheet.js +9 -5
  295. package/dist/components/q2-action-sheet.js.map +1 -1
  296. package/dist/components/q2-avatar2.js +2 -2
  297. package/dist/components/q2-avatar2.js.map +1 -1
  298. package/dist/components/q2-btn2.js +2 -2
  299. package/dist/components/q2-btn2.js.map +1 -1
  300. package/dist/components/q2-calendar.js +3 -3
  301. package/dist/components/q2-calendar.js.map +1 -1
  302. package/dist/components/q2-card-image.js +6 -6
  303. package/dist/components/q2-card-image.js.map +1 -1
  304. package/dist/components/q2-card.js +1 -1
  305. package/dist/components/q2-card.js.map +1 -1
  306. package/dist/components/q2-carousel-pane.js +7 -3
  307. package/dist/components/q2-carousel-pane.js.map +1 -1
  308. package/dist/components/q2-carousel.js +12 -2
  309. package/dist/components/q2-carousel.js.map +1 -1
  310. package/dist/components/q2-chart-area.js +1 -1
  311. package/dist/components/q2-chart-bar.js +1 -1
  312. package/dist/components/q2-chart-donut.js +1 -1
  313. package/dist/components/q2-checkbox-group.js +5 -1
  314. package/dist/components/q2-checkbox-group.js.map +1 -1
  315. package/dist/components/q2-checkbox2.js +3 -4
  316. package/dist/components/q2-checkbox2.js.map +1 -1
  317. package/dist/components/q2-context.js +1 -1
  318. package/dist/components/q2-context.js.map +1 -1
  319. package/dist/components/q2-currency.js +1 -1
  320. package/dist/components/q2-data-table.js +20 -9
  321. package/dist/components/q2-data-table.js.map +1 -1
  322. package/dist/components/q2-detail.js +2 -2
  323. package/dist/components/q2-detail.js.map +1 -1
  324. package/dist/components/q2-dropdown-item2.js +3 -1
  325. package/dist/components/q2-dropdown-item2.js.map +1 -1
  326. package/dist/components/q2-dropdown.js +34 -7
  327. package/dist/components/q2-dropdown.js.map +1 -1
  328. package/dist/components/q2-editable-field.js +2 -2
  329. package/dist/components/q2-editable-field.js.map +1 -1
  330. package/dist/components/q2-example.js +1 -1
  331. package/dist/components/q2-file-picker.js +2 -2
  332. package/dist/components/q2-file-picker.js.map +1 -1
  333. package/dist/components/q2-form.js +1 -1
  334. package/dist/components/q2-formatted-text.js +1 -1
  335. package/dist/components/q2-grid-area.js +9 -1
  336. package/dist/components/q2-grid-area.js.map +1 -1
  337. package/dist/components/q2-icon2.js +6 -0
  338. package/dist/components/q2-icon2.js.map +1 -1
  339. package/dist/components/q2-input2.js +8 -6
  340. package/dist/components/q2-input2.js.map +1 -1
  341. package/dist/components/q2-item2.js +17 -17
  342. package/dist/components/q2-item2.js.map +1 -1
  343. package/dist/components/q2-legend2.js +1 -1
  344. package/dist/components/q2-link2.js +12 -6
  345. package/dist/components/q2-link2.js.map +1 -1
  346. package/dist/components/q2-list2.js +1 -1
  347. package/dist/components/q2-loading2.js +11 -2
  348. package/dist/components/q2-loading2.js.map +1 -1
  349. package/dist/components/q2-message2.js +2 -2
  350. package/dist/components/q2-message2.js.map +1 -1
  351. package/dist/components/q2-meter.js +1 -1
  352. package/dist/components/q2-modal.js +1 -1
  353. package/dist/components/q2-month-picker.js +2 -2
  354. package/dist/components/q2-mutation-observer.js +1 -1
  355. package/dist/components/q2-optgroup2.js +4 -2
  356. package/dist/components/q2-optgroup2.js.map +1 -1
  357. package/dist/components/q2-option-list2.js +3 -1
  358. package/dist/components/q2-option-list2.js.map +1 -1
  359. package/dist/components/q2-option2.js +3 -1
  360. package/dist/components/q2-option2.js.map +1 -1
  361. package/dist/components/q2-pagination.js +11 -13
  362. package/dist/components/q2-pagination.js.map +1 -1
  363. package/dist/components/q2-pill.js +1 -1
  364. package/dist/components/q2-popover2.js +2 -2
  365. package/dist/components/q2-popover2.js.map +1 -1
  366. package/dist/components/q2-radio.js +2 -2
  367. package/dist/components/q2-radio.js.map +1 -1
  368. package/dist/components/q2-relative-time.js +1 -1
  369. package/dist/components/q2-resize-observer2.js +1 -1
  370. package/dist/components/q2-section-container.js +2 -0
  371. package/dist/components/q2-section-container.js.map +1 -1
  372. package/dist/components/q2-section.js +2 -2
  373. package/dist/components/q2-select2.js +6 -2
  374. package/dist/components/q2-select2.js.map +1 -1
  375. package/dist/components/q2-stepper-pane.js +3 -1
  376. package/dist/components/q2-stepper-pane.js.map +1 -1
  377. package/dist/components/q2-stepper-vertical.js +1 -1
  378. package/dist/components/q2-stepper.js +7 -3
  379. package/dist/components/q2-stepper.js.map +1 -1
  380. package/dist/components/q2-tab-container.js +5 -1
  381. package/dist/components/q2-tab-container.js.map +1 -1
  382. package/dist/components/q2-tab-pane.js +8 -1
  383. package/dist/components/q2-tab-pane.js.map +1 -1
  384. package/dist/components/q2-tag.js +2 -2
  385. package/dist/components/q2-tag.js.map +1 -1
  386. package/dist/components/q2-textarea.js +2 -2
  387. package/dist/components/q2-textarea.js.map +1 -1
  388. package/dist/components/q2-toast.d.ts +11 -0
  389. package/dist/components/q2-toast.js +233 -0
  390. package/dist/components/q2-toast.js.map +1 -0
  391. package/dist/components/sanitize-html-string.js +28 -5
  392. package/dist/components/sanitize-html-string.js.map +1 -1
  393. package/dist/components/tecton-tab-pane.js +4 -2
  394. package/dist/components/tecton-tab-pane.js.map +1 -1
  395. package/dist/esm/{action-sheet-WwoBwnIp.js → action-sheet-B7adb3xs.js} +5 -2
  396. package/dist/esm/action-sheet-B7adb3xs.js.map +1 -0
  397. package/dist/esm/component-DVxzK3WH.js +42 -0
  398. package/dist/esm/component-DVxzK3WH.js.map +1 -0
  399. package/dist/esm/loader.js +1 -1
  400. package/dist/esm/q2-action-group.q2-resize-observer.entry.js.map +1 -1
  401. package/dist/esm/q2-action-group_2.entry.js +121 -45
  402. package/dist/esm/q2-action-group_2.entry.js.map +1 -1
  403. package/dist/esm/q2-action-sheet.entry.js +9 -5
  404. package/dist/esm/q2-action-sheet.entry.js.map +1 -1
  405. package/dist/esm/q2-avatar.entry.js +2 -2
  406. package/dist/esm/q2-avatar.entry.js.map +1 -1
  407. package/dist/esm/q2-btn.q2-loading.entry.js.map +1 -1
  408. package/dist/esm/q2-btn_2.entry.js +13 -4
  409. package/dist/esm/q2-btn_2.entry.js.map +1 -1
  410. package/dist/esm/q2-calendar.entry.js +3 -3
  411. package/dist/esm/q2-calendar.entry.js.map +1 -1
  412. package/dist/esm/q2-card-image.entry.js +6 -6
  413. package/dist/esm/q2-card-image.entry.js.map +1 -1
  414. package/dist/esm/q2-card.entry.js +1 -1
  415. package/dist/esm/q2-card.entry.js.map +1 -1
  416. package/dist/esm/q2-carousel-pane.entry.js +7 -3
  417. package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
  418. package/dist/esm/q2-carousel.entry.js +12 -2
  419. package/dist/esm/q2-carousel.entry.js.map +1 -1
  420. package/dist/esm/q2-chart-area.entry.js +1 -1
  421. package/dist/esm/q2-chart-bar.entry.js +1 -1
  422. package/dist/esm/q2-chart-donut.entry.js +1 -1
  423. package/dist/esm/q2-checkbox-group.entry.js +5 -1
  424. package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
  425. package/dist/esm/q2-checkbox.entry.js +3 -4
  426. package/dist/esm/q2-checkbox.entry.js.map +1 -1
  427. package/dist/esm/q2-context.entry.js +1 -1
  428. package/dist/esm/q2-context.entry.js.map +1 -1
  429. package/dist/esm/q2-currency.entry.js +1 -1
  430. package/dist/esm/q2-data-table.entry.js +19 -9
  431. package/dist/esm/q2-data-table.entry.js.map +1 -1
  432. package/dist/esm/q2-detail.entry.js +2 -2
  433. package/dist/esm/q2-detail.entry.js.map +1 -1
  434. package/dist/esm/q2-dropdown-item.entry.js +3 -1
  435. package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
  436. package/dist/esm/q2-dropdown.entry.js +33 -8
  437. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  438. package/dist/esm/q2-editable-field.entry.js +2 -2
  439. package/dist/esm/q2-editable-field.entry.js.map +1 -1
  440. package/dist/esm/q2-example.entry.js +1 -1
  441. package/dist/esm/q2-file-picker.entry.js +2 -2
  442. package/dist/esm/q2-file-picker.entry.js.map +1 -1
  443. package/dist/esm/q2-form.entry.js +1 -1
  444. package/dist/esm/q2-formatted-text.entry.js +1 -1
  445. package/dist/esm/q2-grid-area.entry.js +10 -2
  446. package/dist/esm/q2-grid-area.entry.js.map +1 -1
  447. package/dist/esm/q2-icon.entry.js +6 -0
  448. package/dist/esm/q2-icon.entry.js.map +1 -1
  449. package/dist/esm/q2-input.entry.js +8 -6
  450. package/dist/esm/q2-input.entry.js.map +1 -1
  451. package/dist/esm/q2-item.entry.js +17 -17
  452. package/dist/esm/q2-item.entry.js.map +1 -1
  453. package/dist/esm/q2-legend.entry.js +1 -1
  454. package/dist/esm/q2-link.q2-list.entry.js.map +1 -1
  455. package/dist/esm/q2-link_2.entry.js +11 -7
  456. package/dist/esm/q2-link_2.entry.js.map +1 -1
  457. package/dist/esm/q2-message.entry.js +2 -2
  458. package/dist/esm/q2-message.entry.js.map +1 -1
  459. package/dist/esm/q2-meter.entry.js +1 -1
  460. package/dist/esm/q2-modal.entry.js +2 -2
  461. package/dist/esm/q2-month-picker.entry.js +2 -2
  462. package/dist/esm/q2-mutation-observer.entry.js +1 -1
  463. package/dist/esm/q2-optgroup.entry.js +4 -2
  464. package/dist/esm/q2-optgroup.entry.js.map +1 -1
  465. package/dist/esm/q2-option-list.q2-popover.entry.js.map +1 -1
  466. package/dist/esm/q2-option-list_2.entry.js +5 -3
  467. package/dist/esm/q2-option-list_2.entry.js.map +1 -1
  468. package/dist/esm/q2-option.entry.js +3 -1
  469. package/dist/esm/q2-option.entry.js.map +1 -1
  470. package/dist/esm/q2-pagination.entry.js +10 -12
  471. package/dist/esm/q2-pagination.entry.js.map +1 -1
  472. package/dist/esm/q2-pill.entry.js +2 -2
  473. package/dist/esm/q2-radio.entry.js +2 -2
  474. package/dist/esm/q2-radio.entry.js.map +1 -1
  475. package/dist/esm/q2-relative-time.entry.js +1 -1
  476. package/dist/esm/q2-section-container.entry.js +2 -0
  477. package/dist/esm/q2-section-container.entry.js.map +1 -1
  478. package/dist/esm/q2-section.entry.js +2 -2
  479. package/dist/esm/q2-select.entry.js +7 -3
  480. package/dist/esm/q2-select.entry.js.map +1 -1
  481. package/dist/esm/q2-stepper-pane.entry.js +3 -1
  482. package/dist/esm/q2-stepper-pane.entry.js.map +1 -1
  483. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  484. package/dist/esm/q2-stepper.entry.js +7 -3
  485. package/dist/esm/q2-stepper.entry.js.map +1 -1
  486. package/dist/esm/q2-tab-container.entry.js +5 -1
  487. package/dist/esm/q2-tab-container.entry.js.map +1 -1
  488. package/dist/esm/q2-tab-pane.entry.js +9 -2
  489. package/dist/esm/q2-tab-pane.entry.js.map +1 -1
  490. package/dist/esm/q2-tag.entry.js +3 -3
  491. package/dist/esm/q2-tag.entry.js.map +1 -1
  492. package/dist/esm/q2-tecton-elements.js +1 -1
  493. package/dist/esm/q2-textarea.entry.js +2 -2
  494. package/dist/esm/q2-textarea.entry.js.map +1 -1
  495. package/dist/esm/q2-toast.entry.js +190 -0
  496. package/dist/esm/q2-toast.entry.js.map +1 -0
  497. package/dist/esm/{sanitize-html-string-DOVERJq5.js → sanitize-html-string-BPwFpYg-.js} +30 -7
  498. package/dist/esm/sanitize-html-string-BPwFpYg-.js.map +1 -0
  499. package/dist/esm/tecton-tab-pane.entry.js +4 -2
  500. package/dist/esm/tecton-tab-pane.entry.js.map +1 -1
  501. package/dist/jest.e2e-coverage.js +25 -0
  502. package/dist/jest.e2e-coverage.js.map +1 -0
  503. package/dist/q2-tecton-elements/{action-sheet-WwoBwnIp.js → action-sheet-B7adb3xs.js} +19 -14
  504. package/dist/q2-tecton-elements/action-sheet-B7adb3xs.js.map +1 -0
  505. package/dist/q2-tecton-elements/assets/brand.symbol.svg +1 -1
  506. package/dist/q2-tecton-elements/assets/browsersos.symbol.svg +1 -1
  507. package/dist/q2-tecton-elements/assets/cards.symbol.svg +1 -1
  508. package/dist/q2-tecton-elements/assets/communication.symbol.svg +1 -1
  509. package/dist/q2-tecton-elements/assets/currencies.symbol.svg +1 -1
  510. package/dist/q2-tecton-elements/assets/devices.symbol.svg +1 -1
  511. package/dist/q2-tecton-elements/assets/filetypes.symbol.svg +1 -1
  512. package/dist/q2-tecton-elements/assets/gestures.symbol.svg +1 -1
  513. package/dist/q2-tecton-elements/assets/icon-list.json +1 -1
  514. package/dist/q2-tecton-elements/assets/icon-map.json +1 -1
  515. package/dist/q2-tecton-elements/assets/legacy.symbol.svg +1 -1
  516. package/dist/q2-tecton-elements/assets/mobile.symbol.svg +1 -1
  517. package/dist/q2-tecton-elements/assets/standard.symbol.svg +1 -1
  518. package/dist/q2-tecton-elements/component-DVxzK3WH.js +40 -0
  519. package/dist/q2-tecton-elements/component-DVxzK3WH.js.map +1 -0
  520. package/dist/q2-tecton-elements/q2-action-group.q2-resize-observer.entry.esm.js.map +1 -1
  521. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +131 -63
  522. package/dist/q2-tecton-elements/q2-action-group_2.entry.js.map +1 -1
  523. package/dist/q2-tecton-elements/q2-action-sheet.entry.esm.js.map +1 -1
  524. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +79 -75
  525. package/dist/q2-tecton-elements/q2-action-sheet.entry.js.map +1 -1
  526. package/dist/q2-tecton-elements/q2-avatar.entry.esm.js.map +1 -1
  527. package/dist/q2-tecton-elements/q2-avatar.entry.js +7 -7
  528. package/dist/q2-tecton-elements/q2-avatar.entry.js.map +1 -1
  529. package/dist/q2-tecton-elements/q2-btn.q2-loading.entry.esm.js.map +1 -1
  530. package/dist/q2-tecton-elements/q2-btn_2.entry.js +11 -4
  531. package/dist/q2-tecton-elements/q2-btn_2.entry.js.map +1 -1
  532. package/dist/q2-tecton-elements/q2-calendar.entry.esm.js.map +1 -1
  533. package/dist/q2-tecton-elements/q2-calendar.entry.js +4 -3
  534. package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -1
  535. package/dist/q2-tecton-elements/q2-card-image.entry.esm.js.map +1 -1
  536. package/dist/q2-tecton-elements/q2-card-image.entry.js +11 -11
  537. package/dist/q2-tecton-elements/q2-card-image.entry.js.map +1 -1
  538. package/dist/q2-tecton-elements/q2-card.entry.esm.js.map +1 -1
  539. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  540. package/dist/q2-tecton-elements/q2-card.entry.js.map +1 -1
  541. package/dist/q2-tecton-elements/q2-carousel-pane.entry.esm.js.map +1 -1
  542. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +25 -20
  543. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js.map +1 -1
  544. package/dist/q2-tecton-elements/q2-carousel.entry.esm.js.map +1 -1
  545. package/dist/q2-tecton-elements/q2-carousel.entry.js +79 -67
  546. package/dist/q2-tecton-elements/q2-carousel.entry.js.map +1 -1
  547. package/dist/q2-tecton-elements/q2-chart-area.entry.js +2 -2
  548. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +2 -2
  549. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +9 -9
  550. package/dist/q2-tecton-elements/q2-checkbox-group.entry.esm.js.map +1 -1
  551. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +20 -15
  552. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js.map +1 -1
  553. package/dist/q2-tecton-elements/q2-checkbox.entry.esm.js.map +1 -1
  554. package/dist/q2-tecton-elements/q2-checkbox.entry.js +70 -71
  555. package/dist/q2-tecton-elements/q2-checkbox.entry.js.map +1 -1
  556. package/dist/q2-tecton-elements/q2-context.entry.esm.js.map +1 -1
  557. package/dist/q2-tecton-elements/q2-context.entry.js +12 -12
  558. package/dist/q2-tecton-elements/q2-context.entry.js.map +1 -1
  559. package/dist/q2-tecton-elements/q2-currency.entry.js +8 -8
  560. package/dist/q2-tecton-elements/q2-data-table.entry.esm.js.map +1 -1
  561. package/dist/q2-tecton-elements/q2-data-table.entry.js +40 -27
  562. package/dist/q2-tecton-elements/q2-data-table.entry.js.map +1 -1
  563. package/dist/q2-tecton-elements/q2-detail.entry.esm.js.map +1 -1
  564. package/dist/q2-tecton-elements/q2-detail.entry.js +10 -10
  565. package/dist/q2-tecton-elements/q2-detail.entry.js.map +1 -1
  566. package/dist/q2-tecton-elements/q2-dropdown-item.entry.esm.js.map +1 -1
  567. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +11 -8
  568. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js.map +1 -1
  569. package/dist/q2-tecton-elements/q2-dropdown.entry.esm.js.map +1 -1
  570. package/dist/q2-tecton-elements/q2-dropdown.entry.js +113 -85
  571. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  572. package/dist/q2-tecton-elements/q2-editable-field.entry.esm.js.map +1 -1
  573. package/dist/q2-tecton-elements/q2-editable-field.entry.js +2 -1
  574. package/dist/q2-tecton-elements/q2-editable-field.entry.js.map +1 -1
  575. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  576. package/dist/q2-tecton-elements/q2-file-picker.entry.esm.js.map +1 -1
  577. package/dist/q2-tecton-elements/q2-file-picker.entry.js +3 -2
  578. package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -1
  579. package/dist/q2-tecton-elements/q2-form.entry.js +7 -7
  580. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  581. package/dist/q2-tecton-elements/q2-grid-area.entry.esm.js.map +1 -1
  582. package/dist/q2-tecton-elements/q2-grid-area.entry.js +18 -7
  583. package/dist/q2-tecton-elements/q2-grid-area.entry.js.map +1 -1
  584. package/dist/q2-tecton-elements/q2-icon.entry.esm.js.map +1 -1
  585. package/dist/q2-tecton-elements/q2-icon.entry.js +145 -137
  586. package/dist/q2-tecton-elements/q2-icon.entry.js.map +1 -1
  587. package/dist/q2-tecton-elements/q2-input.entry.esm.js.map +1 -1
  588. package/dist/q2-tecton-elements/q2-input.entry.js +14 -8
  589. package/dist/q2-tecton-elements/q2-input.entry.js.map +1 -1
  590. package/dist/q2-tecton-elements/q2-item.entry.esm.js.map +1 -1
  591. package/dist/q2-tecton-elements/q2-item.entry.js +56 -53
  592. package/dist/q2-tecton-elements/q2-item.entry.js.map +1 -1
  593. package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
  594. package/dist/q2-tecton-elements/q2-link.q2-list.entry.esm.js.map +1 -1
  595. package/dist/q2-tecton-elements/q2-link_2.entry.js +22 -18
  596. package/dist/q2-tecton-elements/q2-link_2.entry.js.map +1 -1
  597. package/dist/q2-tecton-elements/q2-message.entry.esm.js.map +1 -1
  598. package/dist/q2-tecton-elements/q2-message.entry.js +9 -9
  599. package/dist/q2-tecton-elements/q2-message.entry.js.map +1 -1
  600. package/dist/q2-tecton-elements/q2-meter.entry.js +7 -7
  601. package/dist/q2-tecton-elements/q2-modal.entry.js +21 -21
  602. package/dist/q2-tecton-elements/q2-month-picker.entry.js +30 -30
  603. package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
  604. package/dist/q2-tecton-elements/q2-optgroup.entry.esm.js.map +1 -1
  605. package/dist/q2-tecton-elements/q2-optgroup.entry.js +15 -12
  606. package/dist/q2-tecton-elements/q2-optgroup.entry.js.map +1 -1
  607. package/dist/q2-tecton-elements/q2-option-list.q2-popover.entry.esm.js.map +1 -1
  608. package/dist/q2-tecton-elements/q2-option-list_2.entry.js +52 -49
  609. package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +1 -1
  610. package/dist/q2-tecton-elements/q2-option.entry.esm.js.map +1 -1
  611. package/dist/q2-tecton-elements/q2-option.entry.js +15 -12
  612. package/dist/q2-tecton-elements/q2-option.entry.js.map +1 -1
  613. package/dist/q2-tecton-elements/q2-pagination.entry.esm.js.map +1 -1
  614. package/dist/q2-tecton-elements/q2-pagination.entry.js +66 -66
  615. package/dist/q2-tecton-elements/q2-pagination.entry.js.map +1 -1
  616. package/dist/q2-tecton-elements/q2-pill.entry.js +37 -37
  617. package/dist/q2-tecton-elements/q2-radio.entry.esm.js.map +1 -1
  618. package/dist/q2-tecton-elements/q2-radio.entry.js +47 -45
  619. package/dist/q2-tecton-elements/q2-radio.entry.js.map +1 -1
  620. package/dist/q2-tecton-elements/q2-relative-time.entry.js +1 -1
  621. package/dist/q2-tecton-elements/q2-section-container.entry.esm.js.map +1 -1
  622. package/dist/q2-tecton-elements/q2-section-container.entry.js +5 -2
  623. package/dist/q2-tecton-elements/q2-section-container.entry.js.map +1 -1
  624. package/dist/q2-tecton-elements/q2-section.entry.js +11 -11
  625. package/dist/q2-tecton-elements/q2-select.entry.esm.js.map +1 -1
  626. package/dist/q2-tecton-elements/q2-select.entry.js +6 -3
  627. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  628. package/dist/q2-tecton-elements/q2-stepper-pane.entry.esm.js.map +1 -1
  629. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +22 -19
  630. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js.map +1 -1
  631. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +69 -69
  632. package/dist/q2-tecton-elements/q2-stepper.entry.esm.js.map +1 -1
  633. package/dist/q2-tecton-elements/q2-stepper.entry.js +42 -39
  634. package/dist/q2-tecton-elements/q2-stepper.entry.js.map +1 -1
  635. package/dist/q2-tecton-elements/q2-tab-container.entry.esm.js.map +1 -1
  636. package/dist/q2-tecton-elements/q2-tab-container.entry.js +21 -16
  637. package/dist/q2-tecton-elements/q2-tab-container.entry.js.map +1 -1
  638. package/dist/q2-tecton-elements/q2-tab-pane.entry.esm.js.map +1 -1
  639. package/dist/q2-tecton-elements/q2-tab-pane.entry.js +17 -7
  640. package/dist/q2-tecton-elements/q2-tab-pane.entry.js.map +1 -1
  641. package/dist/q2-tecton-elements/q2-tag.entry.esm.js.map +1 -1
  642. package/dist/q2-tecton-elements/q2-tag.entry.js +59 -59
  643. package/dist/q2-tecton-elements/q2-tag.entry.js.map +1 -1
  644. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  645. package/dist/q2-tecton-elements/q2-textarea.entry.esm.js.map +1 -1
  646. package/dist/q2-tecton-elements/q2-textarea.entry.js +3 -3
  647. package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
  648. package/dist/q2-tecton-elements/q2-toast.entry.esm.js.map +1 -0
  649. package/dist/q2-tecton-elements/q2-toast.entry.js +222 -0
  650. package/dist/q2-tecton-elements/q2-toast.entry.js.map +1 -0
  651. package/dist/q2-tecton-elements/{sanitize-html-string-DOVERJq5.js → sanitize-html-string-BPwFpYg-.js} +167 -145
  652. package/dist/q2-tecton-elements/sanitize-html-string-BPwFpYg-.js.map +1 -0
  653. package/dist/q2-tecton-elements/tecton-tab-pane.entry.esm.js.map +1 -1
  654. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +8 -8
  655. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js.map +1 -1
  656. package/dist/scripts/docs-generator/index.js +1 -1
  657. package/dist/scripts/docs-generator/index.js.map +1 -1
  658. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.e2e-coverage.d.ts +1 -0
  659. package/dist/types/components/q2-action-group/q2-action-group.d.ts +7 -4
  660. package/dist/types/components/q2-carousel-pane/q2-carousel-pane.d.ts +1 -0
  661. package/dist/types/components/q2-checkbox/q2-checkbox.d.ts +0 -5
  662. package/dist/types/components/q2-data-table/q2-data-table.d.ts +8 -0
  663. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +22 -3
  664. package/dist/types/components/q2-grid-area/q2-grid-area.d.ts +2 -0
  665. package/dist/types/components/q2-input/q2-input.d.ts +4 -5
  666. package/dist/types/components/q2-item/q2-item.d.ts +5 -4
  667. package/dist/types/components/q2-link/q2-link.d.ts +4 -0
  668. package/dist/types/components/q2-pagination/q2-pagination.d.ts +11 -3
  669. package/dist/types/components/q2-select/q2-select.d.ts +1 -2
  670. package/dist/types/components/q2-tab-pane/q2-tab-pane.d.ts +2 -0
  671. package/dist/types/components/q2-toast/q2-toast.d.ts +67 -0
  672. package/dist/types/components.d.ts +189 -34
  673. package/dist/types/utils/action-sheet.d.ts +2 -1
  674. package/dist/types/utils/component.d.ts +4 -0
  675. package/dist/types/utils/sanitize-html-string.d.ts +1 -0
  676. package/package.json +72 -66
  677. package/dist/cjs/action-sheet-CiK2Bap_.js.map +0 -1
  678. package/dist/cjs/sanitize-html-string-DPqrzfM9.js.map +0 -1
  679. package/dist/esm/action-sheet-WwoBwnIp.js.map +0 -1
  680. package/dist/esm/sanitize-html-string-DOVERJq5.js.map +0 -1
  681. package/dist/q2-tecton-elements/action-sheet-WwoBwnIp.js.map +0 -1
  682. package/dist/q2-tecton-elements/sanitize-html-string-DOVERJq5.js.map +0 -1
  683. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +0 -0
  684. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/scripts/docs-generator/index.d.ts +0 -0
  685. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/scripts/docs-generator/markdown-generator.d.ts +0 -0
  686. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/scripts/docs-generator/tag-handlers.d.ts +0 -0
  687. /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/scripts/docs-generator/types.d.ts +0 -0
@@ -4,9 +4,11 @@ import { c as o, l as n, o as s, i as c } from "./index-B4WYBDS9.js";
4
4
 
5
5
  import { m as l } from "./mirror-emit-DUjY_ucm.js";
6
6
 
7
- const b = "*{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;position:relative}button{cursor:pointer;margin:0}.tab-container{position:relative}ul{--comp-container-padding:var(--tct-scale-1, var(--app-scale-1x, 5px)) var(--tct-scale-1, var(--app-scale-1x, 5px)) 0;padding:var(--tct-tab-container-padding, var(--t-tab-container-padding, var(--comp-container-padding)));margin:var(--tct-tab-container-margin, var(--t-tab-container-margin, 0));display:flex;gap:var(--tct-tab-gap, var(--t-tab-gap, var(--tct-scale-1, var(--app-scale-1x, 5px))));list-style:none;border-bottom-width:var(--tct-tab-container-border-width, 1px);border-bottom-style:var(--tct-tab-container-border-style, solid);border-bottom-color:var(--tct-tab-container-border-color, var(--t-tab-container-border-color, var(--tct-gray-11, var(--t-gray-11, var(--tct-gray-l1, var(--app-gray-l1, #cccccc))))));overflow-x:auto;align-items:center;scrollbar-width:none;scrollbar-color:transparent}ul::-webkit-scrollbar{width:0;height:0}ul::-webkit-scrollbar-thumb{background:transparent}ul::-webkit-scrollbar-track{background:transparent}@media print{ul.no-print{display:none}}li{flex:0 0 auto}li button{background:var(--tct-tab-inactive-background, var(--tct-tab-inactive-bg-color, var(--t-tab-inactive-bg-color, transparent)));border-width:var(--tct-tab-inactive-border-width, var(--t-tab-inactive-border-width, 0 0 3px 0));border-color:var(--tct-tab-inactive-border-color, var(--t-tab-inactive-border-color, transparent));border-style:var(--tct-tab-inactive-border-style, var(--t-tab-inactive-border-style, solid));border-radius:var(--tct-tab-border-radius, var(--t-tab-border-radius, 0));width:var(--tct-tab-width, var(--t-tab-width, 100%));text-align:var(--tct-tab-text-align, var(--t-tab-text-align, center));text-decoration:var(--tct-tab-text-decoration, var(--t-tab-text-decoration, none));padding:var(--tct-tab-padding, var(--t-tab-padding, var(--tct-scale-2, var(--app-scale-2x, 10px))));color:var(--tct-tab-inactive-color, var(--t-tab-inactive-color, inherit));font-size:var(--tct-tab-font-size, var(--t-tab-font-size, 17px));display:block;transition:background var(--t-tween-ease-inout) var(--t-tween-time-in-xxs), color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs), border-color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs)}:host([type=section]) li button{--comp-tab-section-padding:var(--tct-scale-2, var(--app-scale-2x, 10px)) var(--tct-scale-1, var(--app-scale-1x, 5px));font-size:var(--tct-tab-section-font-size, inherit);padding:var(--tct-tab-section-padding, var(--t-tab-section-padding, var(--comp-tab-section-padding)))}li button:hover{color:var(--tct-tab-hover-color, var(--t-tab-hover-color, var(--tct-tab-active-color, var(--t-tab-active-color, #2e2e2e))));background:var(--tct-tab-hover-background, var(--tct-tab-hover-bg-color, var(--t-tab-hover-bg-color, inherit)));width:var(--tct-tab-hover-width, var(--t-tab-hover-width, 100%))}li button[aria-selected=true]{color:var(--tct-tab-active-color, var(--t-tab-active-color, #2e2e2e));border-color:var(--tct-tab-active-border-color, var(--t-tab-active-border-color, currentcolor));border-style:var(--tct-tab-active-border-style, var(--t-tab-active-border-style, solid));width:var(--tct-tab-active-width, var(--t-tab-active-width, 100%));background:var(--tct-tab-active-background, var(--tct-tab-active-bg-color, var(--t-tab-active-bg-color, inherit)))}:host([color=alt]) li button{color:var(--tct-tab-alt-inactive-color, var(--t-tab-alt-inactive-color, inherit))}:host([color=alt]) li button:hover,:host([color=alt]) li button[aria-selected=true]{color:var(--tct-tab-alt-active-color, var(--t-tab-alt-active-color, inherit))}@media screen and (max-width: 767px){li button{--comp-tab-padding:var(--tct-scale-2, var(--app-scale-2x, 10px)) var(--tct-scale-1, var(--app-scale-1x, 5px));font-size:inherit;padding:var(--tct-tab-padding, var(--t-tab-padding, var(--comp-tab-padding)))}}.tab-content{--comp-tab-content-padding:var(--tct-scale-2, var(--app-scale-2x, 10px)) 0;padding:var(--tct-tab-container-content-padding, var(--tct-tab-content-padding, var(--t-tab-content-padding, var(--comp-tab-content-padding))));background:var(--tct-tab-container-content-backgrond, none)}.tab-content:focus{outline:none;box-shadow:none}.gradient-left,.gradient-right{z-index:1;position:absolute;top:0;height:100%;width:44px}.gradient-left{background-image:linear-gradient(to left, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);left:0}.gradient-right{background-image:linear-gradient(to right, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);right:0}.btn-left,.btn-right{--tct-icon-size:18px;--tct-btn-icon-hover-background:transparent;--tct-btn-icon-width:22px;--tct-icon-stroke-primary:var(--tct-stepper-scroll-arrow-color, var(--t-stepper-scroll-arrow-color, var(--t-text, #4d4d4d)));position:absolute;top:calc(50% - 22px);z-index:2}.btn-left q2-icon,.btn-right q2-icon{--tct-icon-stroke-width:3}.btn-left{left:0}.btn-right{right:0}.tab-pane-badge{display:flex;justify-content:space-between;align-items:center}.tab-pane-badge q2-badge{margin-left:5px;margin-right:5px}";
7
+ import { h as b, f as d } from "./component-DVxzK3WH.js";
8
8
 
9
- const d = class {
9
+ const h = "*{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;position:relative}button{cursor:pointer;margin:0}.tab-container{position:relative}ul{--comp-container-padding:var(--tct-scale-1, var(--app-scale-1x, 5px)) var(--tct-scale-1, var(--app-scale-1x, 5px)) 0;padding:var(--tct-tab-container-padding, var(--t-tab-container-padding, var(--comp-container-padding)));margin:var(--tct-tab-container-margin, var(--t-tab-container-margin, 0));display:flex;gap:var(--tct-tab-gap, var(--t-tab-gap, var(--tct-scale-1, var(--app-scale-1x, 5px))));list-style:none;border-bottom-width:var(--tct-tab-container-border-width, 1px);border-bottom-style:var(--tct-tab-container-border-style, solid);border-bottom-color:var(--tct-tab-container-border-color, var(--t-tab-container-border-color, var(--tct-gray-11, var(--t-gray-11, var(--tct-gray-l1, var(--app-gray-l1, #cccccc))))));overflow-x:auto;align-items:center;scrollbar-width:none;scrollbar-color:transparent}ul::-webkit-scrollbar{width:0;height:0}ul::-webkit-scrollbar-thumb{background:transparent}ul::-webkit-scrollbar-track{background:transparent}@media print{ul.no-print{display:none}}li{flex:0 0 auto}li button{background:var(--tct-tab-inactive-background, var(--tct-tab-inactive-bg-color, var(--t-tab-inactive-bg-color, transparent)));border-width:var(--tct-tab-inactive-border-width, var(--t-tab-inactive-border-width, 0 0 3px 0));border-color:var(--tct-tab-inactive-border-color, var(--t-tab-inactive-border-color, transparent));border-style:var(--tct-tab-inactive-border-style, var(--t-tab-inactive-border-style, solid));border-radius:var(--tct-tab-border-radius, var(--t-tab-border-radius, 0));width:var(--tct-tab-width, var(--t-tab-width, 100%));text-align:var(--tct-tab-text-align, var(--t-tab-text-align, center));text-decoration:var(--tct-tab-text-decoration, var(--t-tab-text-decoration, none));padding:var(--tct-tab-padding, var(--t-tab-padding, var(--tct-scale-2, var(--app-scale-2x, 10px))));color:var(--tct-tab-inactive-color, var(--t-tab-inactive-color, inherit));font-size:var(--tct-tab-font-size, var(--t-tab-font-size, 17px));display:block;transition:background var(--t-tween-ease-inout) var(--t-tween-time-in-xxs), color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs), border-color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs)}:host([type=section]) li button{--comp-tab-section-padding:var(--tct-scale-2, var(--app-scale-2x, 10px)) var(--tct-scale-1, var(--app-scale-1x, 5px));font-size:var(--tct-tab-section-font-size, inherit);padding:var(--tct-tab-section-padding, var(--t-tab-section-padding, var(--comp-tab-section-padding)))}li button:hover{color:var(--tct-tab-hover-color, var(--t-tab-hover-color, var(--tct-tab-active-color, var(--t-tab-active-color, #2e2e2e))));background:var(--tct-tab-hover-background, var(--tct-tab-hover-bg-color, var(--t-tab-hover-bg-color, inherit)));width:var(--tct-tab-hover-width, var(--t-tab-hover-width, 100%))}li button[aria-selected=true]{color:var(--tct-tab-active-color, var(--t-tab-active-color, #2e2e2e));border-color:var(--tct-tab-active-border-color, var(--t-tab-active-border-color, currentcolor));border-style:var(--tct-tab-active-border-style, var(--t-tab-active-border-style, solid));width:var(--tct-tab-active-width, var(--t-tab-active-width, 100%));background:var(--tct-tab-active-background, var(--tct-tab-active-bg-color, var(--t-tab-active-bg-color, inherit)))}:host([color=alt]) li button{color:var(--tct-tab-alt-inactive-color, var(--t-tab-alt-inactive-color, inherit))}:host([color=alt]) li button:hover,:host([color=alt]) li button[aria-selected=true]{color:var(--tct-tab-alt-active-color, var(--t-tab-alt-active-color, inherit))}@media screen and (max-width: 767px){li button{--comp-tab-padding:var(--tct-scale-2, var(--app-scale-2x, 10px)) var(--tct-scale-1, var(--app-scale-1x, 5px));font-size:inherit;padding:var(--tct-tab-padding, var(--t-tab-padding, var(--comp-tab-padding)))}}.tab-content{--comp-tab-content-padding:var(--tct-scale-2, var(--app-scale-2x, 10px)) 0;padding:var(--tct-tab-container-content-padding, var(--tct-tab-content-padding, var(--t-tab-content-padding, var(--comp-tab-content-padding))));background:var(--tct-tab-container-content-backgrond, none)}.tab-content:focus{outline:none;box-shadow:none}.gradient-left,.gradient-right{z-index:1;position:absolute;top:0;height:100%;width:44px}.gradient-left{background-image:linear-gradient(to left, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);left:0}.gradient-right{background-image:linear-gradient(to right, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);right:0}.btn-left,.btn-right{--tct-icon-size:18px;--tct-btn-icon-hover-background:transparent;--tct-btn-icon-width:22px;--tct-icon-stroke-primary:var(--tct-stepper-scroll-arrow-color, var(--t-stepper-scroll-arrow-color, var(--t-text, #4d4d4d)));position:absolute;top:calc(50% - 22px);z-index:2}.btn-left q2-icon,.btn-right q2-icon{--tct-icon-stroke-width:3}.btn-left{left:0}.btn-right{right:0}.tab-pane-badge{display:flex;justify-content:space-between;align-items:center}.tab-pane-badge q2-badge{margin-left:5px;margin-right:5px}";
10
+
11
+ const v = class {
10
12
  constructor(e) {
11
13
  t(this, e);
12
14
  this.change = a(this, "change", 7);
@@ -165,6 +167,9 @@ const d = class {
165
167
  this.mutationObserver = null;
166
168
  }
167
169
  componentWillLoad() {
170
+ if (!b(this.hostElement, [ "q2-tab-pane", "tecton-tab-pane" ])) {
171
+ d(this.hostElement, [ "q2-tab-pane", "tecton-tab-pane" ]);
172
+ }
168
173
  const t = new MutationObserver((() => this.updateTabs()));
169
174
  t.observe(this.hostElement, {
170
175
  childList: true,
@@ -287,49 +292,49 @@ const d = class {
287
292
  }
288
293
  render() {
289
294
  return e(i, {
290
- key: "163b23c303ecb1bf182d935efd451a84dae3373f"
295
+ key: "2181b2505b4d48d9812b61d5414264425ff7f4af"
291
296
  }, e("div", {
292
- key: "62f40515232ce696bc163a8b2e2e88d29801c8f2",
297
+ key: "0901678c9f074277414bf0dfd1b73cb3ec93cd6f",
293
298
  class: "tab-container"
294
299
  }, this.scrollEnabled && e(i, {
295
- key: "106027e03ed5beaf4bd1c1c647e7eea944e2ccce"
300
+ key: "3cc265f40d308947e07bb2ca7cf2496bf1f74d44"
296
301
  }, e("div", {
297
- key: "4a39b7fc38ccdc795835f06ae632006bea157882",
302
+ key: "8b0606af29da80fb969e94b2708077bf2e4ef7e2",
298
303
  class: "gradient-left",
299
304
  hidden: !this.showScrollLeft
300
305
  }), e("div", {
301
- key: "8c6e3fbae7198b3737cbfe37f0edb7c45fefc391",
306
+ key: "2412d226cf903beae013965e345f0f56ca9991d6",
302
307
  class: "gradient-right",
303
308
  hidden: !this.showScrollRight
304
309
  }), e("q2-btn", {
305
- key: "2961327ec8ba90420ccf3a086547a6fdff84d050",
310
+ key: "edf2bf63eebe24832e529178fa185ad27c3a45ba",
306
311
  class: "btn-left",
307
312
  hidden: !this.showScrollLeft,
308
313
  onTctClick: () => this.onScrollBtnClick("left")
309
314
  }, e("q2-icon", {
310
- key: "e4398650ca11c5eae8c3a242239e9375b9d0499b",
315
+ key: "7900b5426d1ec51880fe8c36d33a59873b1be508",
311
316
  type: "chevron-left",
312
317
  label: "scroll left"
313
318
  })), e("q2-btn", {
314
- key: "17ee9e3b15b10a235c6c4e740fabd11d3fa7ecaf",
319
+ key: "001628dae8b16b4c5aff651c8515cce25d08bbf2",
315
320
  class: "btn-right",
316
321
  hidden: !this.showScrollRight,
317
322
  onTctClick: () => this.onScrollBtnClick("right")
318
323
  }, e("q2-icon", {
319
- key: "55c3a61d5496496089d231aa4b4ce906f58e8728",
324
+ key: "f4579ca37dd0e2908e3f68dc60eb923d4a3f314e",
320
325
  type: "chevron-right",
321
326
  label: "scroll right"
322
327
  }))), e("ul", {
323
- key: "b7ad9d2134a9ec8c20affe93c6ddc5fed3ea02f8",
328
+ key: "53efc8ffaaf29dc1dfd9b86ee4105a87350aebfb",
324
329
  onScroll: this.checkScrollState,
325
330
  ref: t => this.listElement = t,
326
331
  class: this.noPrint ? "no-print" : null,
327
332
  role: "tablist"
328
333
  }, this.tabs.map(((t, a) => this.renderTab(t, a))))), e("div", {
329
- key: "abb62308bc971d6545c539a98f48214c9c83f601",
334
+ key: "1e3d76467f667d04a488aacd5a51b641a0acbabc",
330
335
  class: "tab-content"
331
336
  }, e("slot", {
332
- key: "9656113ef3fd30109b5e1d0b278f5eec241b4aaa",
337
+ key: "4384593fb9579c4187c50eee288517aba22c9ace",
333
338
  onSlotchange: () => this.onSlotChange()
334
339
  })));
335
340
  }
@@ -344,8 +349,8 @@ const d = class {
344
349
  }
345
350
  };
346
351
 
347
- d.style = b;
352
+ v.style = h;
348
353
 
349
- export { d as q2_tab_container };
354
+ export { v as q2_tab_container };
350
355
  //# sourceMappingURL=q2-tab-container.entry.esm.js.map
351
356
  //# sourceMappingURL=q2-tab-container.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["q2TabContainerCss","Q2TabContainer","constructor","hostRef","this","guid","createGuid","hasValidTab","lastScrolled","Date","getTime","scheduledAfterRender","hasLeft","hasRight","scrollEnabled","showScrollLeft","showScrollRight","noPrint","checkScrollState","listElement","scrollLeft","scrollWidth","clientWidth","Math","ceil","moveToAdjacentTab","value","direction","index","tabs","map","indexOf","newIndex","min","length","max","moveToTab","shouldFocus","focusedValue","focusedTab","querySelector","focus","preventScroll","left","offsetLeft","scrollTo","behavior","onScrollBtnClick","halfWidth","floor","scrollAmount","abs","scrollBy","onSlotChange","onTabClick","event","targetValue","target","closest","dataset","isAlreadySelected","mirrorEmit","onTabKeyDown","key","preventDefault","setTabs","tabPanes","label","badgeCount","badgeDescription","badgeTheme","badgeStatus","loc","updateTabPaneProps","forEach","tab","selected","selectedTabValue","updateTabs","validTabPreUpdate","some","push","determineTabMove","disconnectedCallback","_a","resizeObserver","disconnect","_b","mutationObserver","componentWillLoad","observer","MutationObserver","observe","hostElement","childList","attributes","ResizeObserver","componentDidLoad","overrideFocus","componentDidRender","fn","settled","emit","onBadge","defaultChangeHandler","onchange","detail","onFocus","isEventFromElement","findIndex","el","onResize","selectTab","paneButton","shadowRoot","click","nameObserver","valueObserver","resizeIframe","tabList","querySelectorAll","Array","from","filter","pane","name","window","TectonElements","call","renderTab","isSelected","h","role","id","tabIndex","onClick","onKeyDown","undefined","renderTabWithBadge","theme","description","class","status","render","Fragment","hidden","onTctClick","type","onScroll","ref","onSlotchange"],"sources":["src/components/q2-tab-container/q2-tab-container.scss?tag=q2-tab-container&encapsulation=shadow","src/components/q2-tab-container/q2-tab-container.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n position: relative;\n}\n\nbutton {\n cursor: pointer;\n margin: 0;\n}\n\n.tab-container {\n position: relative;\n}\n\nul {\n --comp-container-padding: #{var-list(--tct-scale-1, --app-scale-1x, 5px)\n var-list(--tct-scale-1, --app-scale-1x, 5px) 0};\n padding: var-list(var-prefixer(tab-container-padding), --comp-container-padding);\n margin: var-list(var-prefixer(tab-container-margin), 0);\n display: flex;\n gap: var-list(var-prefixer(tab-gap), --tct-scale-1, --app-scale-1x, 5px);\n list-style: none;\n border-bottom-width: var-list(--tct-tab-container-border-width, 1px);\n border-bottom-style: var-list(--tct-tab-container-border-style, solid);\n border-bottom-color: var-list(\n var-prefixer(tab-container-border-color),\n --tct-gray-11,\n --t-gray-11,\n --tct-gray-l1,\n --app-gray-l1,\n #cccccc\n );\n overflow-x: auto;\n align-items: center;\n @include hidden-scrollbar();\n\n @media print {\n &.no-print {\n display: none;\n }\n }\n}\n\nli {\n flex: 0 0 auto;\n\n button {\n background: var-list(--tct-tab-inactive-background, var-prefixer(tab-inactive-bg-color), transparent);\n border-width: var-list(var-prefixer(tab-inactive-border-width), unquote('0 0 3px 0'));\n border-color: var-list(var-prefixer(tab-inactive-border-color), transparent);\n border-style: var-list(var-prefixer(tab-inactive-border-style), solid);\n border-radius: var-list(var-prefixer(tab-border-radius), 0);\n width: var-list(var-prefixer(tab-width), 100%);\n text-align: var-list(var-prefixer(tab-text-align), center);\n text-decoration: var-list(var-prefixer(tab-text-decoration), none);\n padding: var-list(var-prefixer(tab-padding), --tct-scale-2, --app-scale-2x, 10px);\n color: var-list(var-prefixer(tab-inactive-color), inherit);\n font-size: var-list(var-prefixer(tab-font-size), 17px);\n display: block;\n transition:\n background var(--t-tween-ease-inout) var(--t-tween-time-in-xxs),\n color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs),\n border-color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs);\n\n :host([type='section']) & {\n --comp-tab-section-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: var-list(--tct-tab-section-font-size, inherit);\n padding: var-list(var-prefixer(tab-section-padding), --comp-tab-section-padding);\n }\n\n &:hover {\n color: var-list(var-prefixer(tab-hover-color), var-prefixer(tab-active-color), #2e2e2e);\n background: var-list(--tct-tab-hover-background, var-prefixer(tab-hover-bg-color), inherit);\n width: var-list(var-prefixer(tab-hover-width), 100%);\n }\n\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-active-color), #2e2e2e);\n border-color: var-list(var-prefixer(tab-active-border-color), currentcolor);\n border-style: var-list(var-prefixer(tab-active-border-style), solid);\n width: var-list(var-prefixer(tab-active-width), 100%);\n background: var-list(--tct-tab-active-background, var-prefixer(tab-active-bg-color), inherit);\n }\n\n :host([color='alt']) & {\n color: var-list(var-prefixer(tab-alt-inactive-color), inherit);\n\n &:hover,\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-alt-active-color), inherit);\n }\n }\n\n @media screen and (max-width: 767px) {\n --comp-tab-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: inherit;\n padding: var-list(var-prefixer(tab-padding), --comp-tab-padding);\n }\n }\n}\n\n.tab-content {\n --comp-tab-content-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px) 0};\n padding: var-list(\n --tct-tab-container-content-padding,\n var-prefixer(tab-content-padding),\n --comp-tab-content-padding\n );\n background: var-list(--tct-tab-container-content-backgrond, none);\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n}\n\n.gradient-left,\n.gradient-right {\n z-index: 1;\n position: absolute;\n top: 0;\n height: 100%;\n width: 44px;\n}\n\n.gradient-left {\n background-image: linear-gradient(to left, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n left: 0;\n}\n\n.gradient-right {\n background-image: linear-gradient(to right, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n right: 0;\n}\n\n.btn-left,\n.btn-right {\n --tct-icon-size: 18px;\n --tct-btn-icon-hover-background: transparent;\n --tct-btn-icon-width: 22px;\n --tct-icon-stroke-primary: #{var-list(var-prefixer(stepper-scroll-arrow-color), --t-text, #4d4d4d)};\n\n position: absolute;\n top: calc(50% - 22px);\n z-index: 2;\n q2-icon {\n --tct-icon-stroke-width: 3;\n }\n}\n\n.btn-left {\n left: 0;\n}\n\n.btn-right {\n right: 0;\n}\n\n.tab-pane-badge {\n display: flex;\n justify-content: space-between;\n align-items: center;\n q2-badge {\n margin-left: 5px;\n margin-right: 5px;\n }\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Listen,\n Watch,\n h,\n Fragment,\n Method,\n} from '@stencil/core';\nimport { createGuid, loc, overrideFocus, isEventFromElement } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\nimport { JSX } from '../../components';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\ntype TabPane = {\n label: string;\n value: string;\n badgeCount: number;\n badgeDescription: string;\n badgeTheme: Q2Badge['theme'];\n badgeStatus: Q2Badge['status'];\n};\n\n/**\n * @name Tab Container\n * @category Display\n * @summary Use for switching between multiple views within the same context.\n */\n@Component({ tag: 'q2-tab-container', shadow: true, styleUrl: 'q2-tab-container.scss' })\nexport class Q2TabContainer implements ComponentInterface {\n // #region Own Properties\n\n guid: number = createGuid();\n hasValidTab: boolean = false;\n lastScrolled: number = new Date(null).getTime();\n listElement: HTMLUListElement;\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\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 hasLeft: boolean = false;\n\n @State()\n hasRight: boolean = false;\n\n @State()\n scrollEnabled: boolean = false;\n\n @State()\n showScrollLeft: boolean = false;\n\n @State()\n showScrollRight: boolean = false;\n\n @State()\n tabs: TabPane[];\n\n // #endregion\n // #region Public Property API\n\n /**\n * Controls which variables are used to color the tab controls.\n *\n * - `undefined` (default)\n * - Uses `--t-tab-active` and `--t-tab-inactive`.\n * - `alt`\n * - Uses `--t-tab-alt-active` and `--t-tab-alt-inactive`.\n * - The default fallback for these variables is `inherit`.\n */\n @Prop({ reflect: true })\n color: 'alt' | undefined;\n\n /**\n * Used to establish a relationship between `q2-tab-container` and its associated tab panes.\n * @warning\n * The element can fail if this property is not set. Nested tab containers without the `name` property will not render correctly.\n */\n @Prop({ reflect: true })\n name: string;\n\n /** Controls visibility of tab list in a print view. Tab content will still be visible even if `noPrint` is true. */\n @Prop({ reflect: true })\n noPrint: boolean = false;\n\n /** Determines the font size of the tab controls. */\n @Prop({ reflect: true })\n type: 'main' | 'section';\n\n /** Corresponds to the value of the selected tab pane. */\n @Prop({ reflect: true, mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the selected tab changes.\n * @legacyEvent\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event()\n settled: EventEmitter<undefined>;\n\n /**\n * Emitted when the selected tab changes.\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n const observer = new MutationObserver(() => this.updateTabs());\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n this.resizeObserver = new ResizeObserver(() => this.checkScrollState());\n this.updateTabs();\n }\n\n componentDidLoad() {\n this.resizeObserver?.observe(this.listElement);\n this.checkScrollState();\n overrideFocus(this.hostElement);\n this.scheduledAfterRender.push(() => this.determineTabMove());\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n this.settled.emit();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('badge')\n onBadge() {\n this.setTabs();\n }\n\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n const index = this.tabs.findIndex(el => el.value === this.selectedTabValue);\n this.moveToTab(index, true);\n }\n\n @Listen('resize', { target: 'window' })\n onResize() {\n this.checkScrollState();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to select a tab pane corresponding with the value.\n *\n * @testOnly\n */\n @Method()\n async selectTab(value: string) {\n const paneButton = this.hostElement.shadowRoot.querySelector(`[test-id=\"tabLink\"][data-value=\"${value}\"]`);\n (paneButton as HTMLButtonElement)?.click();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('name')\n nameObserver() {\n this.updateTabs();\n }\n\n @Watch('value')\n valueObserver() {\n this.updateTabs();\n this.scheduledAfterRender.push(this.resizeIframe);\n const index = this.tabs.findIndex(el => el.value === this.value);\n if (index > -1) {\n this.scheduledAfterRender.push(() => this.moveToTab(index, false));\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get selectedTabValue() {\n return this.value || '';\n }\n\n get tabList() {\n return this.hostElement.shadowRoot.querySelector('.tab-list');\n }\n\n get tabPanes() {\n const tabPanes = this.hostElement.querySelectorAll<HTMLQ2TabPaneElement | HTMLTectonTabPaneElement>(\n 'q2-tab-pane, tecton-tab-pane'\n );\n\n if (tabPanes.length === 0) {\n return [];\n }\n\n return Array.from(tabPanes).filter(pane => pane.name === this.name);\n }\n\n checkScrollState = () => {\n if (!this.listElement) return;\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n this.scrollEnabled = scrollWidth > clientWidth;\n this.showScrollLeft = scrollLeft > 0;\n this.showScrollRight = scrollWidth > Math.ceil(scrollLeft) + clientWidth;\n };\n\n determineTabMove() {\n if (!this.tabs) return;\n const index = this.tabs.findIndex(el => el.value === this.value);\n if (index === -1) return;\n this.moveToTab(index, false);\n }\n\n moveToAdjacentTab = (value: string, direction: 'next' | 'prev' | 'first' | 'last') => {\n const index = this.tabs.map(({ value }) => value).indexOf(value);\n\n let newIndex;\n switch (direction) {\n case 'next':\n newIndex = Math.min(index + 1, this.tabs.length - 1);\n break;\n\n case 'prev':\n newIndex = Math.max(index - 1, 0);\n break;\n\n case 'first':\n newIndex = 0;\n break;\n\n case 'last':\n newIndex = this.tabs.length - 1;\n break;\n }\n\n if (index === newIndex) return;\n\n this.moveToTab(newIndex, true);\n };\n\n moveToTab = (index: number, shouldFocus: boolean = true) => {\n const focusedValue = this.tabs[index].value;\n const focusedTab = this.listElement.querySelector<HTMLButtonElement>(`[data-value=\"${focusedValue}\"]`);\n if (shouldFocus) {\n focusedTab.focus({ preventScroll: true });\n }\n\n const left = focusedTab.offsetLeft - this.listElement.clientWidth / 2;\n this.listElement.scrollTo({\n left,\n behavior: 'smooth',\n });\n };\n\n onScrollBtnClick = (direction?: 'left' | 'right') => {\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n const halfWidth = Math.floor(clientWidth / 2);\n let scrollAmount: number = 0;\n if (direction === 'left') {\n scrollAmount = -Math.min(halfWidth, Math.abs(scrollLeft));\n } else {\n scrollAmount = Math.min(halfWidth, Math.abs(scrollWidth - scrollLeft - clientWidth));\n }\n this.listElement.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n };\n\n onSlotChange = () => {\n this.checkScrollState();\n };\n\n onTabClick = (event: MouseEvent) => {\n const targetValue = ((event.target as HTMLButtonElement).closest('button[role=\"tab\"]') as HTMLButtonElement)\n .dataset.value;\n const isAlreadySelected = this.value === targetValue;\n if (isAlreadySelected) return;\n\n mirrorEmit(this, ['change', 'tctChange'], {\n value: targetValue,\n });\n };\n\n onTabKeyDown = (event: KeyboardEvent) => {\n const value = (event.target as HTMLElement).dataset.value;\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'next');\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'prev');\n break;\n\n case 'Home':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'first');\n break;\n\n case 'End':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'last');\n break;\n\n case 'Space':\n case 'Enter':\n event.preventDefault();\n mirrorEmit(this, ['change', 'tctChange'], { value });\n break;\n }\n };\n\n resizeIframe() {\n return window.TectonElements?.resizeIframe?.();\n }\n\n setTabs = () => {\n this.tabs = this.tabPanes.map(({ label, value, badgeCount, badgeDescription, badgeTheme, badgeStatus }) => ({\n label: (label && loc(label)) || '',\n value,\n badgeCount,\n badgeDescription,\n badgeTheme,\n badgeStatus,\n }));\n };\n\n updateTabPaneProps = () => {\n this.tabPanes.forEach((tab, index) => {\n tab.selected = tab.value === this.selectedTabValue;\n tab.guid = this.guid;\n tab.index = index;\n });\n };\n\n updateTabs = () => {\n const validTabPreUpdate = this.hasValidTab;\n this.updateTabPaneProps();\n this.setTabs();\n // Check if we now have a valid tab\n this.hasValidTab = this.tabs.some(tab => tab.value === this.value);\n // Only move if we didn't have a valid tab before but do now\n if (!validTabPreUpdate && this.hasValidTab) {\n this.scheduledAfterRender.push(() => this.determineTabMove());\n }\n };\n\n // #endregion\n // #region Render Methods\n\n renderTab(tab: TabPane, index: number): JSX.IntrinsicElements {\n const { label, value } = tab;\n const isSelected = this.selectedTabValue === value;\n return (\n <li role=\"presentation\">\n <button\n id={`tab-${this.guid}-${index}`}\n data-value={value}\n test-id=\"tabLink\"\n tabIndex={isSelected ? 0 : -1}\n role=\"tab\"\n aria-selected={`${isSelected}`}\n onClick={this.onTabClick}\n onKeyDown={this.onTabKeyDown}\n >\n {tab.badgeCount === undefined ? label : this.renderTabWithBadge(tab, isSelected)}\n </button>\n </li>\n );\n }\n\n renderTabWithBadge(tab: TabPane, isSelected: boolean): JSX.IntrinsicElements {\n let theme;\n if (!tab.badgeStatus && isSelected) theme = tab.badgeTheme || 'primary';\n let description;\n if (tab.badgeDescription) description = loc(tab.badgeDescription);\n else if (tab.badgeStatus) description = loc(`tecton.element.tab.pane.${tab.badgeStatus}`, [tab.badgeCount]);\n else description = loc('tecton.element.tab.pane.new');\n\n return (\n <div\n class=\"tab-pane-badge\"\n aria-label={`${tab.label}, ${tab.badgeCount} ${description}`}\n >\n {tab.label}\n <q2-badge\n value={tab.badgeCount}\n theme={theme}\n status={tab.badgeStatus}\n />\n </div>\n );\n }\n\n render() {\n return (\n <Fragment>\n <div class=\"tab-container\">\n {this.scrollEnabled && (\n <Fragment>\n <div\n class=\"gradient-left\"\n hidden={!this.showScrollLeft}\n ></div>\n <div\n class=\"gradient-right\"\n hidden={!this.showScrollRight}\n ></div>\n\n <q2-btn\n class=\"btn-left\"\n hidden={!this.showScrollLeft}\n onTctClick={() => this.onScrollBtnClick('left')}\n >\n <q2-icon\n type=\"chevron-left\"\n label=\"scroll left\"\n ></q2-icon>\n </q2-btn>\n\n <q2-btn\n class=\"btn-right\"\n hidden={!this.showScrollRight}\n onTctClick={() => this.onScrollBtnClick('right')}\n >\n <q2-icon\n type=\"chevron-right\"\n label=\"scroll right\"\n ></q2-icon>\n </q2-btn>\n </Fragment>\n )}\n\n <ul\n onScroll={this.checkScrollState}\n ref={el => (this.listElement = el)}\n class={this.noPrint ? 'no-print' : null}\n role=\"tablist\"\n >\n {this.tabs.map((tab, index) => this.renderTab(tab, index))}\n </ul>\n </div>\n <div class=\"tab-content\">\n <slot onSlotchange={() => this.onSlotChange()} />\n </div>\n </Fragment>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["q2TabContainerCss","Q2TabContainer","constructor","hostRef","this","guid","createGuid","hasValidTab","lastScrolled","Date","getTime","scheduledAfterRender","hasLeft","hasRight","scrollEnabled","showScrollLeft","showScrollRight","noPrint","checkScrollState","listElement","scrollLeft","scrollWidth","clientWidth","Math","ceil","moveToAdjacentTab","value","direction","index","tabs","map","indexOf","newIndex","min","length","max","moveToTab","shouldFocus","focusedValue","focusedTab","querySelector","focus","preventScroll","left","offsetLeft","scrollTo","behavior","onScrollBtnClick","halfWidth","floor","scrollAmount","abs","scrollBy","onSlotChange","onTabClick","event","targetValue","target","closest","dataset","isAlreadySelected","mirrorEmit","onTabKeyDown","key","preventDefault","setTabs","tabPanes","label","badgeCount","badgeDescription","badgeTheme","badgeStatus","loc","updateTabPaneProps","forEach","tab","selected","selectedTabValue","updateTabs","validTabPreUpdate","some","push","determineTabMove","disconnectedCallback","_a","resizeObserver","disconnect","_b","mutationObserver","componentWillLoad","hasValidChildren","hostElement","filterChildren","observer","MutationObserver","observe","childList","attributes","ResizeObserver","componentDidLoad","overrideFocus","componentDidRender","fn","settled","emit","onBadge","defaultChangeHandler","onchange","detail","onFocus","isEventFromElement","findIndex","el","onResize","selectTab","paneButton","shadowRoot","click","nameObserver","valueObserver","resizeIframe","tabList","querySelectorAll","Array","from","filter","pane","name","window","TectonElements","call","renderTab","isSelected","h","role","id","tabIndex","onClick","onKeyDown","undefined","renderTabWithBadge","theme","description","class","status","render","Fragment","hidden","onTctClick","type","onScroll","ref","onSlotchange"],"sources":["src/components/q2-tab-container/q2-tab-container.scss?tag=q2-tab-container&encapsulation=shadow","src/components/q2-tab-container/q2-tab-container.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n position: relative;\n}\n\nbutton {\n cursor: pointer;\n margin: 0;\n}\n\n.tab-container {\n position: relative;\n}\n\nul {\n --comp-container-padding: #{var-list(--tct-scale-1, --app-scale-1x, 5px)\n var-list(--tct-scale-1, --app-scale-1x, 5px) 0};\n padding: var-list(var-prefixer(tab-container-padding), --comp-container-padding);\n margin: var-list(var-prefixer(tab-container-margin), 0);\n display: flex;\n gap: var-list(var-prefixer(tab-gap), --tct-scale-1, --app-scale-1x, 5px);\n list-style: none;\n border-bottom-width: var-list(--tct-tab-container-border-width, 1px);\n border-bottom-style: var-list(--tct-tab-container-border-style, solid);\n border-bottom-color: var-list(\n var-prefixer(tab-container-border-color),\n --tct-gray-11,\n --t-gray-11,\n --tct-gray-l1,\n --app-gray-l1,\n #cccccc\n );\n overflow-x: auto;\n align-items: center;\n @include hidden-scrollbar();\n\n @media print {\n &.no-print {\n display: none;\n }\n }\n}\n\nli {\n flex: 0 0 auto;\n\n button {\n background: var-list(--tct-tab-inactive-background, var-prefixer(tab-inactive-bg-color), transparent);\n border-width: var-list(var-prefixer(tab-inactive-border-width), unquote('0 0 3px 0'));\n border-color: var-list(var-prefixer(tab-inactive-border-color), transparent);\n border-style: var-list(var-prefixer(tab-inactive-border-style), solid);\n border-radius: var-list(var-prefixer(tab-border-radius), 0);\n width: var-list(var-prefixer(tab-width), 100%);\n text-align: var-list(var-prefixer(tab-text-align), center);\n text-decoration: var-list(var-prefixer(tab-text-decoration), none);\n padding: var-list(var-prefixer(tab-padding), --tct-scale-2, --app-scale-2x, 10px);\n color: var-list(var-prefixer(tab-inactive-color), inherit);\n font-size: var-list(var-prefixer(tab-font-size), 17px);\n display: block;\n transition:\n background var(--t-tween-ease-inout) var(--t-tween-time-in-xxs),\n color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs),\n border-color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs);\n\n :host([type='section']) & {\n --comp-tab-section-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: var-list(--tct-tab-section-font-size, inherit);\n padding: var-list(var-prefixer(tab-section-padding), --comp-tab-section-padding);\n }\n\n &:hover {\n color: var-list(var-prefixer(tab-hover-color), var-prefixer(tab-active-color), #2e2e2e);\n background: var-list(--tct-tab-hover-background, var-prefixer(tab-hover-bg-color), inherit);\n width: var-list(var-prefixer(tab-hover-width), 100%);\n }\n\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-active-color), #2e2e2e);\n border-color: var-list(var-prefixer(tab-active-border-color), currentcolor);\n border-style: var-list(var-prefixer(tab-active-border-style), solid);\n width: var-list(var-prefixer(tab-active-width), 100%);\n background: var-list(--tct-tab-active-background, var-prefixer(tab-active-bg-color), inherit);\n }\n\n :host([color='alt']) & {\n color: var-list(var-prefixer(tab-alt-inactive-color), inherit);\n\n &:hover,\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-alt-active-color), inherit);\n }\n }\n\n @media screen and (max-width: 767px) {\n --comp-tab-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: inherit;\n padding: var-list(var-prefixer(tab-padding), --comp-tab-padding);\n }\n }\n}\n\n.tab-content {\n --comp-tab-content-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px) 0};\n padding: var-list(\n --tct-tab-container-content-padding,\n var-prefixer(tab-content-padding),\n --comp-tab-content-padding\n );\n background: var-list(--tct-tab-container-content-backgrond, none);\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n}\n\n.gradient-left,\n.gradient-right {\n z-index: 1;\n position: absolute;\n top: 0;\n height: 100%;\n width: 44px;\n}\n\n.gradient-left {\n background-image: linear-gradient(to left, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n left: 0;\n}\n\n.gradient-right {\n background-image: linear-gradient(to right, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n right: 0;\n}\n\n.btn-left,\n.btn-right {\n --tct-icon-size: 18px;\n --tct-btn-icon-hover-background: transparent;\n --tct-btn-icon-width: 22px;\n --tct-icon-stroke-primary: #{var-list(var-prefixer(stepper-scroll-arrow-color), --t-text, #4d4d4d)};\n\n position: absolute;\n top: calc(50% - 22px);\n z-index: 2;\n q2-icon {\n --tct-icon-stroke-width: 3;\n }\n}\n\n.btn-left {\n left: 0;\n}\n\n.btn-right {\n right: 0;\n}\n\n.tab-pane-badge {\n display: flex;\n justify-content: space-between;\n align-items: center;\n q2-badge {\n margin-left: 5px;\n margin-right: 5px;\n }\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Listen,\n Watch,\n h,\n Fragment,\n Method,\n} from '@stencil/core';\nimport { createGuid, loc, overrideFocus, isEventFromElement } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\nimport { JSX } from '../../components';\nimport { Q2Badge } from '../q2-badge/q2-badge';\nimport { filterChildren, hasValidChildren } from '@/utils/component';\n\ntype TabPane = {\n label: string;\n value: string;\n badgeCount: number;\n badgeDescription: string;\n badgeTheme: Q2Badge['theme'];\n badgeStatus: Q2Badge['status'];\n};\n\n/**\n * @name Tab Container\n * @category Display\n * @summary Use for switching between multiple views within the same context.\n */\n@Component({ tag: 'q2-tab-container', shadow: true, styleUrl: 'q2-tab-container.scss' })\nexport class Q2TabContainer implements ComponentInterface {\n // #region Own Properties\n\n guid: number = createGuid();\n hasValidTab: boolean = false;\n lastScrolled: number = new Date(null).getTime();\n listElement: HTMLUListElement;\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\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 hasLeft: boolean = false;\n\n @State()\n hasRight: boolean = false;\n\n @State()\n scrollEnabled: boolean = false;\n\n @State()\n showScrollLeft: boolean = false;\n\n @State()\n showScrollRight: boolean = false;\n\n @State()\n tabs: TabPane[];\n\n // #endregion\n // #region Public Property API\n\n /**\n * Controls which variables are used to color the tab controls.\n *\n * - `undefined` (default)\n * - Uses `--t-tab-active` and `--t-tab-inactive`.\n * - `alt`\n * - Uses `--t-tab-alt-active` and `--t-tab-alt-inactive`.\n * - The default fallback for these variables is `inherit`.\n */\n @Prop({ reflect: true })\n color: 'alt' | undefined;\n\n /**\n * Used to establish a relationship between `q2-tab-container` and its associated tab panes.\n * @warning\n * The element can fail if this property is not set. Nested tab containers without the `name` property will not render correctly.\n */\n @Prop({ reflect: true })\n name: string;\n\n /** Controls visibility of tab list in a print view. Tab content will still be visible even if `noPrint` is true. */\n @Prop({ reflect: true })\n noPrint: boolean = false;\n\n /** Determines the font size of the tab controls. */\n @Prop({ reflect: true })\n type: 'main' | 'section';\n\n /** Corresponds to the value of the selected tab pane. */\n @Prop({ reflect: true, mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the selected tab changes.\n * @legacyEvent\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event()\n settled: EventEmitter<undefined>;\n\n /**\n * Emitted when the selected tab changes.\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n if (!hasValidChildren(this.hostElement, ['q2-tab-pane', 'tecton-tab-pane'])) {\n filterChildren(this.hostElement, ['q2-tab-pane', 'tecton-tab-pane']);\n }\n const observer = new MutationObserver(() => this.updateTabs());\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n this.resizeObserver = new ResizeObserver(() => this.checkScrollState());\n this.updateTabs();\n }\n\n componentDidLoad() {\n this.resizeObserver?.observe(this.listElement);\n this.checkScrollState();\n overrideFocus(this.hostElement);\n this.scheduledAfterRender.push(() => this.determineTabMove());\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n this.settled.emit();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('badge')\n onBadge() {\n this.setTabs();\n }\n\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n const index = this.tabs.findIndex(el => el.value === this.selectedTabValue);\n this.moveToTab(index, true);\n }\n\n @Listen('resize', { target: 'window' })\n onResize() {\n this.checkScrollState();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to select a tab pane corresponding with the value.\n *\n * @testOnly\n */\n @Method()\n async selectTab(value: string) {\n const paneButton = this.hostElement.shadowRoot.querySelector(`[test-id=\"tabLink\"][data-value=\"${value}\"]`);\n (paneButton as HTMLButtonElement)?.click();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('name')\n nameObserver() {\n this.updateTabs();\n }\n\n @Watch('value')\n valueObserver() {\n this.updateTabs();\n this.scheduledAfterRender.push(this.resizeIframe);\n const index = this.tabs.findIndex(el => el.value === this.value);\n if (index > -1) {\n this.scheduledAfterRender.push(() => this.moveToTab(index, false));\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get selectedTabValue() {\n return this.value || '';\n }\n\n get tabList() {\n return this.hostElement.shadowRoot.querySelector('.tab-list');\n }\n\n get tabPanes() {\n const tabPanes = this.hostElement.querySelectorAll<HTMLQ2TabPaneElement | HTMLTectonTabPaneElement>(\n 'q2-tab-pane, tecton-tab-pane'\n );\n\n if (tabPanes.length === 0) {\n return [];\n }\n\n return Array.from(tabPanes).filter(pane => pane.name === this.name);\n }\n\n checkScrollState = () => {\n if (!this.listElement) return;\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n this.scrollEnabled = scrollWidth > clientWidth;\n this.showScrollLeft = scrollLeft > 0;\n this.showScrollRight = scrollWidth > Math.ceil(scrollLeft) + clientWidth;\n };\n\n determineTabMove() {\n if (!this.tabs) return;\n const index = this.tabs.findIndex(el => el.value === this.value);\n if (index === -1) return;\n this.moveToTab(index, false);\n }\n\n moveToAdjacentTab = (value: string, direction: 'next' | 'prev' | 'first' | 'last') => {\n const index = this.tabs.map(({ value }) => value).indexOf(value);\n\n let newIndex;\n switch (direction) {\n case 'next':\n newIndex = Math.min(index + 1, this.tabs.length - 1);\n break;\n\n case 'prev':\n newIndex = Math.max(index - 1, 0);\n break;\n\n case 'first':\n newIndex = 0;\n break;\n\n case 'last':\n newIndex = this.tabs.length - 1;\n break;\n }\n\n if (index === newIndex) return;\n\n this.moveToTab(newIndex, true);\n };\n\n moveToTab = (index: number, shouldFocus: boolean = true) => {\n const focusedValue = this.tabs[index].value;\n const focusedTab = this.listElement.querySelector<HTMLButtonElement>(`[data-value=\"${focusedValue}\"]`);\n if (shouldFocus) {\n focusedTab.focus({ preventScroll: true });\n }\n\n const left = focusedTab.offsetLeft - this.listElement.clientWidth / 2;\n this.listElement.scrollTo({\n left,\n behavior: 'smooth',\n });\n };\n\n onScrollBtnClick = (direction?: 'left' | 'right') => {\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n const halfWidth = Math.floor(clientWidth / 2);\n let scrollAmount: number = 0;\n if (direction === 'left') {\n scrollAmount = -Math.min(halfWidth, Math.abs(scrollLeft));\n } else {\n scrollAmount = Math.min(halfWidth, Math.abs(scrollWidth - scrollLeft - clientWidth));\n }\n this.listElement.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n };\n\n onSlotChange = () => {\n this.checkScrollState();\n };\n\n onTabClick = (event: MouseEvent) => {\n const targetValue = ((event.target as HTMLButtonElement).closest('button[role=\"tab\"]') as HTMLButtonElement)\n .dataset.value;\n const isAlreadySelected = this.value === targetValue;\n if (isAlreadySelected) return;\n\n mirrorEmit(this, ['change', 'tctChange'], {\n value: targetValue,\n });\n };\n\n onTabKeyDown = (event: KeyboardEvent) => {\n const value = (event.target as HTMLElement).dataset.value;\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'next');\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'prev');\n break;\n\n case 'Home':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'first');\n break;\n\n case 'End':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'last');\n break;\n\n case 'Space':\n case 'Enter':\n event.preventDefault();\n mirrorEmit(this, ['change', 'tctChange'], { value });\n break;\n }\n };\n\n resizeIframe() {\n return window.TectonElements?.resizeIframe?.();\n }\n\n setTabs = () => {\n this.tabs = this.tabPanes.map(({ label, value, badgeCount, badgeDescription, badgeTheme, badgeStatus }) => ({\n label: (label && loc(label)) || '',\n value,\n badgeCount,\n badgeDescription,\n badgeTheme,\n badgeStatus,\n }));\n };\n\n updateTabPaneProps = () => {\n this.tabPanes.forEach((tab, index) => {\n tab.selected = tab.value === this.selectedTabValue;\n tab.guid = this.guid;\n tab.index = index;\n });\n };\n\n updateTabs = () => {\n const validTabPreUpdate = this.hasValidTab;\n this.updateTabPaneProps();\n this.setTabs();\n // Check if we now have a valid tab\n this.hasValidTab = this.tabs.some(tab => tab.value === this.value);\n // Only move if we didn't have a valid tab before but do now\n if (!validTabPreUpdate && this.hasValidTab) {\n this.scheduledAfterRender.push(() => this.determineTabMove());\n }\n };\n\n // #endregion\n // #region Render Methods\n\n renderTab(tab: TabPane, index: number): JSX.IntrinsicElements {\n const { label, value } = tab;\n const isSelected = this.selectedTabValue === value;\n return (\n <li role=\"presentation\">\n <button\n id={`tab-${this.guid}-${index}`}\n data-value={value}\n test-id=\"tabLink\"\n tabIndex={isSelected ? 0 : -1}\n role=\"tab\"\n aria-selected={`${isSelected}`}\n onClick={this.onTabClick}\n onKeyDown={this.onTabKeyDown}\n >\n {tab.badgeCount === undefined ? label : this.renderTabWithBadge(tab, isSelected)}\n </button>\n </li>\n );\n }\n\n renderTabWithBadge(tab: TabPane, isSelected: boolean): JSX.IntrinsicElements {\n let theme;\n if (!tab.badgeStatus && isSelected) theme = tab.badgeTheme || 'primary';\n let description;\n if (tab.badgeDescription) description = loc(tab.badgeDescription);\n else if (tab.badgeStatus) description = loc(`tecton.element.tab.pane.${tab.badgeStatus}`, [tab.badgeCount]);\n else description = loc('tecton.element.tab.pane.new');\n\n return (\n <div\n class=\"tab-pane-badge\"\n aria-label={`${tab.label}, ${tab.badgeCount} ${description}`}\n >\n {tab.label}\n <q2-badge\n value={tab.badgeCount}\n theme={theme}\n status={tab.badgeStatus}\n />\n </div>\n );\n }\n\n render() {\n return (\n <Fragment>\n <div class=\"tab-container\">\n {this.scrollEnabled && (\n <Fragment>\n <div\n class=\"gradient-left\"\n hidden={!this.showScrollLeft}\n ></div>\n <div\n class=\"gradient-right\"\n hidden={!this.showScrollRight}\n ></div>\n\n <q2-btn\n class=\"btn-left\"\n hidden={!this.showScrollLeft}\n onTctClick={() => this.onScrollBtnClick('left')}\n >\n <q2-icon\n type=\"chevron-left\"\n label=\"scroll left\"\n ></q2-icon>\n </q2-btn>\n\n <q2-btn\n class=\"btn-right\"\n hidden={!this.showScrollRight}\n onTctClick={() => this.onScrollBtnClick('right')}\n >\n <q2-icon\n type=\"chevron-right\"\n label=\"scroll right\"\n ></q2-icon>\n </q2-btn>\n </Fragment>\n )}\n\n <ul\n onScroll={this.checkScrollState}\n ref={el => (this.listElement = el)}\n class={this.noPrint ? 'no-print' : null}\n role=\"tablist\"\n >\n {this.tabs.map((tab, index) => this.renderTab(tab, index))}\n </ul>\n </div>\n <div class=\"tab-content\">\n <slot onSlotchange={() => this.onSlotChange()} />\n </div>\n </Fragment>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"q2-tab-pane.entry.esm.js","sources":["src/components/q2-tab-pane/q2-tab-pane.scss?tag=q2-tab-pane&encapsulation=shadow","src/components/q2-tab-pane/q2-tab-pane.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n\n.tab-pane[aria-hidden='true'] {\n display: none;\n}\n\n.tab-pane:focus {\n outline: none;\n box-shadow: none;\n}\n\n","import { Component, ComponentInterface, Prop, Event, EventEmitter, Watch, h } from '@stencil/core';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\n/**\n * @name Tab Pane\n * @category Display\n * @summary Use as a single tab within a Tab Container.\n */\n@Component({ tag: 'q2-tab-pane', shadow: true, styleUrl: 'q2-tab-pane.scss' })\nexport class Q2TabPane implements ComponentInterface {\n // #region Public Property API\n\n /** Adds a `q2-badge` component with the number provided right next to the tab pane label. */\n @Prop({ reflect: true })\n badgeCount: number;\n\n /**\n * The text that will be pronounced alongside `badgeCount` when the screen reader presents the tab.\n * @localizable\n */\n @Prop({ reflect: true })\n badgeDescription: string;\n\n /** Allows you to specify the status of the tab, which is always visible. */\n @Prop({ reflect: true })\n badgeStatus: Q2Badge['status'];\n\n /** Allows you to specify the color of the badge when the tab is active. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /**\n * Used by q2-tab-container to apply a unique id to each tab pane\n * @private\n */\n @Prop()\n guid: number;\n\n /**\n * Used by q2-tab-container to indicate the pane's index\n * @private\n */\n @Prop()\n index: number;\n\n /**\n * Serves as the text that will be visible in the tab control provided by `q2-tab-container`.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Used by q2-tab-container to apply a name to all options in the group\n * @private\n */\n @Prop({ reflect: true })\n name: string;\n\n /**\n * Used by q2-tab-container to indicate the option is selected\n * @private\n */\n @Prop({ reflect: true })\n selected: boolean;\n\n /** Serves as the pane's value. Should correspond to the `q2-tab-container` value. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the badge count, description, theme, or status changes.\n * @private\n */\n @Event({ bubbles: true })\n badge: EventEmitter<boolean>;\n\n // #endregion\n // #region Watchers\n\n @Watch('badgeCount')\n @Watch('badgeDescription')\n @Watch('badgeTheme')\n @Watch('badgeStatus')\n badgeObserver() {\n this.badge.emit();\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n id={`tab-pane-${this.guid}-${this.index}`}\n class={`tab-pane${this.selected ? '' : ' hidden'}`}\n role=\"tabpanel\"\n tabindex=\"-1\"\n aria-hidden={`${!this.selected}`}\n aria-labelledby={`tab-${this.guid}-${this.index}`}\n >\n <slot />\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":";;AAAA,MAAM,YAAY,GAAG,uvBAAuvB;;MCS/vB,SAAS,GAAA,MAAA;;;;;;;IA8ElB,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;;;;IAMrB,MAAM,GAAA;AACF,QAAA,QACI,CACI,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAE,EAAE,CAAA,SAAA,EAAY,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAA,CAAE,EACzC,KAAK,EAAE,CAAW,QAAA,EAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,SAAS,CAAA,CAAE,EAClD,IAAI,EAAC,UAAU,EACf,QAAQ,EAAC,IAAI,EAAA,aAAA,EACA,CAAG,EAAA,CAAC,IAAI,CAAC,QAAQ,CAAE,CAAA,EAAA,iBAAA,EACf,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,CAAI,CAAA,EAAA,IAAI,CAAC,KAAK,CAAA,CAAE,EAAA,EAEjD,CAAQ,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACN;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"q2-tab-pane.entry.esm.js","sources":["src/components/q2-tab-pane/q2-tab-pane.scss?tag=q2-tab-pane&encapsulation=shadow","src/components/q2-tab-pane/q2-tab-pane.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n\n.tab-pane[aria-hidden='true'] {\n display: none;\n}\n\n.tab-pane:focus {\n outline: none;\n box-shadow: none;\n}\n\n","import { Component, ComponentInterface, Prop, Element, Event, EventEmitter, Watch, h } from '@stencil/core';\nimport { Q2Badge } from '../q2-badge/q2-badge';\nimport { hasValidAncestor } from '@/utils/component';\n\n/**\n * @name Tab Pane\n * @category Display\n * @summary Use as a single tab within a Tab Container.\n */\n@Component({ tag: 'q2-tab-pane', shadow: true, styleUrl: 'q2-tab-pane.scss' })\nexport class Q2TabPane implements ComponentInterface {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Adds a `q2-badge` component with the number provided right next to the tab pane label. */\n @Prop({ reflect: true })\n badgeCount: number;\n\n /**\n * The text that will be pronounced alongside `badgeCount` when the screen reader presents the tab.\n * @localizable\n */\n @Prop({ reflect: true })\n badgeDescription: string;\n\n /** Allows you to specify the status of the tab, which is always visible. */\n @Prop({ reflect: true })\n badgeStatus: Q2Badge['status'];\n\n /** Allows you to specify the color of the badge when the tab is active. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /**\n * Used by q2-tab-container to apply a unique id to each tab pane\n * @private\n */\n @Prop()\n guid: number;\n\n /**\n * Used by q2-tab-container to indicate the pane's index\n * @private\n */\n @Prop()\n index: number;\n\n /**\n * Serves as the text that will be visible in the tab control provided by `q2-tab-container`.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Used by q2-tab-container to apply a name to all options in the group\n * @private\n */\n @Prop({ reflect: true })\n name: string;\n\n /**\n * Used by q2-tab-container to indicate the option is selected\n * @private\n */\n @Prop({ reflect: true })\n selected: boolean;\n\n /** Serves as the pane's value. Should correspond to the `q2-tab-container` value. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the badge count, description, theme, or status changes.\n * @private\n */\n @Event({ bubbles: true })\n badge: EventEmitter<boolean>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n hasValidAncestor(this.hostElement, 'q2-tab-container');\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('badgeCount')\n @Watch('badgeDescription')\n @Watch('badgeTheme')\n @Watch('badgeStatus')\n badgeObserver() {\n this.badge.emit();\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n id={`tab-pane-${this.guid}-${this.index}`}\n class={`tab-pane${this.selected ? '' : ' hidden'}`}\n role=\"tabpanel\"\n tabindex=\"-1\"\n aria-hidden={`${!this.selected}`}\n aria-labelledby={`tab-${this.guid}-${this.index}`}\n >\n <slot />\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":";;;AAAA,MAAM,YAAY,GAAG,uvBAAuvB;;MCU/vB,SAAS,GAAA,MAAA;;;;;;;IAgFlB,iBAAiB,GAAA;AACb,QAAA,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;;;;IAU1D,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;;;;IAMrB,MAAM,GAAA;AACF,QAAA,QACI,CACI,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAE,EAAE,CAAA,SAAA,EAAY,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAA,CAAE,EACzC,KAAK,EAAE,CAAW,QAAA,EAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,SAAS,CAAA,CAAE,EAClD,IAAI,EAAC,UAAU,EACf,QAAQ,EAAC,IAAI,EAAA,aAAA,EACA,CAAG,EAAA,CAAC,IAAI,CAAC,QAAQ,CAAE,CAAA,EAAA,iBAAA,EACf,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,CAAI,CAAA,EAAA,IAAI,CAAC,KAAK,CAAA,CAAE,EAAA,EAEjD,CAAQ,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACN;;;;;;;;;;;;;;"}
@@ -1,13 +1,20 @@
1
- import { r as e, c as t, h as i } from "./index-CGkHOjh1.js";
1
+ import { r as e, c as t, h as i, g as n } from "./index-CGkHOjh1.js";
2
2
 
3
- const n = "*{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}.tab-pane[aria-hidden=true]{display:none}.tab-pane:focus{outline:none;box-shadow:none}";
3
+ import { b as o } from "./component-DVxzK3WH.js";
4
4
 
5
- const a = class {
5
+ const a = "*{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}.tab-pane[aria-hidden=true]{display:none}.tab-pane:focus{outline:none;box-shadow:none}";
6
+
7
+ const s = class {
6
8
  constructor(i) {
7
9
  e(this, i);
8
10
  this.badge = t(this, "badge", 7);
9
11
  }
10
12
  // #endregion
13
+ // #region Component Lifecycle Events
14
+ componentWillLoad() {
15
+ o(this.hostElement, "q2-tab-container");
16
+ }
17
+ // #endregion
11
18
  // #region Watchers
12
19
  badgeObserver() {
13
20
  this.badge.emit();
@@ -16,7 +23,7 @@ const a = class {
16
23
  // #region Render Methods
17
24
  render() {
18
25
  return i("div", {
19
- key: "76630068cdab0cae437c6f7465a198a29a69e8d2",
26
+ key: "1f9e5f993a4d548dade126f8acf05e9c958eddc0",
20
27
  id: `tab-pane-${this.guid}-${this.index}`,
21
28
  class: `tab-pane${this.selected ? "" : " hidden"}`,
22
29
  role: "tabpanel",
@@ -24,9 +31,12 @@ const a = class {
24
31
  "aria-hidden": `${!this.selected}`,
25
32
  "aria-labelledby": `tab-${this.guid}-${this.index}`
26
33
  }, i("slot", {
27
- key: "50e66071eb8ece4219e26a658dac682186839470"
34
+ key: "d5eeb1c72d8c416b91851a661d3aa4736d17f16b"
28
35
  }));
29
36
  }
37
+ get hostElement() {
38
+ return n(this);
39
+ }
30
40
  static get watchers() {
31
41
  return {
32
42
  badgeCount: [ "badgeObserver" ],
@@ -37,8 +47,8 @@ const a = class {
37
47
  }
38
48
  };
39
49
 
40
- a.style = n;
50
+ s.style = a;
41
51
 
42
- export { a as q2_tab_pane };
52
+ export { s as q2_tab_pane };
43
53
  //# sourceMappingURL=q2-tab-pane.entry.esm.js.map
44
54
  //# sourceMappingURL=q2-tab-pane.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["q2TabPaneCss","Q2TabPane","badgeObserver","this","badge","emit","render","h","key","id","guid","index","class","selected","role","tabindex"],"sources":["src/components/q2-tab-pane/q2-tab-pane.scss?tag=q2-tab-pane&encapsulation=shadow","src/components/q2-tab-pane/q2-tab-pane.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n\n.tab-pane[aria-hidden='true'] {\n display: none;\n}\n\n.tab-pane:focus {\n outline: none;\n box-shadow: none;\n}\n\n","import { Component, ComponentInterface, Prop, Event, EventEmitter, Watch, h } from '@stencil/core';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\n/**\n * @name Tab Pane\n * @category Display\n * @summary Use as a single tab within a Tab Container.\n */\n@Component({ tag: 'q2-tab-pane', shadow: true, styleUrl: 'q2-tab-pane.scss' })\nexport class Q2TabPane implements ComponentInterface {\n // #region Public Property API\n\n /** Adds a `q2-badge` component with the number provided right next to the tab pane label. */\n @Prop({ reflect: true })\n badgeCount: number;\n\n /**\n * The text that will be pronounced alongside `badgeCount` when the screen reader presents the tab.\n * @localizable\n */\n @Prop({ reflect: true })\n badgeDescription: string;\n\n /** Allows you to specify the status of the tab, which is always visible. */\n @Prop({ reflect: true })\n badgeStatus: Q2Badge['status'];\n\n /** Allows you to specify the color of the badge when the tab is active. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /**\n * Used by q2-tab-container to apply a unique id to each tab pane\n * @private\n */\n @Prop()\n guid: number;\n\n /**\n * Used by q2-tab-container to indicate the pane's index\n * @private\n */\n @Prop()\n index: number;\n\n /**\n * Serves as the text that will be visible in the tab control provided by `q2-tab-container`.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Used by q2-tab-container to apply a name to all options in the group\n * @private\n */\n @Prop({ reflect: true })\n name: string;\n\n /**\n * Used by q2-tab-container to indicate the option is selected\n * @private\n */\n @Prop({ reflect: true })\n selected: boolean;\n\n /** Serves as the pane's value. Should correspond to the `q2-tab-container` value. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the badge count, description, theme, or status changes.\n * @private\n */\n @Event({ bubbles: true })\n badge: EventEmitter<boolean>;\n\n // #endregion\n // #region Watchers\n\n @Watch('badgeCount')\n @Watch('badgeDescription')\n @Watch('badgeTheme')\n @Watch('badgeStatus')\n badgeObserver() {\n this.badge.emit();\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n id={`tab-pane-${this.guid}-${this.index}`}\n class={`tab-pane${this.selected ? '' : ' hidden'}`}\n role=\"tabpanel\"\n tabindex=\"-1\"\n aria-hidden={`${!this.selected}`}\n aria-labelledby={`tab-${this.guid}-${this.index}`}\n >\n <slot />\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":";;AAAA,MAAMA,IAAe;;MCSRC,IAAS;;;;;;;EA8ElB,aAAAC;IACIC,KAAKC,MAAMC;;;;EAMf,MAAAC;IACI,OACIC,EACI;MAAAC,KAAA;MAAAC,IAAI,YAAYN,KAAKO,QAAQP,KAAKQ;MAClCC,OAAO,WAAWT,KAAKU,WAAW,KAAK;MACvCC,MAAK;MACLC,UAAS;MAAI,eACA,IAAIZ,KAAKU;MAAU,mBACf,OAAOV,KAAKO,QAAQP,KAAKQ;OAE1CJ,EAAQ;MAAAC,KAAA","ignoreList":[]}
1
+ {"version":3,"names":["q2TabPaneCss","Q2TabPane","componentWillLoad","hasValidAncestor","this","hostElement","badgeObserver","badge","emit","render","h","key","id","guid","index","class","selected","role","tabindex"],"sources":["src/components/q2-tab-pane/q2-tab-pane.scss?tag=q2-tab-pane&encapsulation=shadow","src/components/q2-tab-pane/q2-tab-pane.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n\n.tab-pane[aria-hidden='true'] {\n display: none;\n}\n\n.tab-pane:focus {\n outline: none;\n box-shadow: none;\n}\n\n","import { Component, ComponentInterface, Prop, Element, Event, EventEmitter, Watch, h } from '@stencil/core';\nimport { Q2Badge } from '../q2-badge/q2-badge';\nimport { hasValidAncestor } from '@/utils/component';\n\n/**\n * @name Tab Pane\n * @category Display\n * @summary Use as a single tab within a Tab Container.\n */\n@Component({ tag: 'q2-tab-pane', shadow: true, styleUrl: 'q2-tab-pane.scss' })\nexport class Q2TabPane implements ComponentInterface {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Adds a `q2-badge` component with the number provided right next to the tab pane label. */\n @Prop({ reflect: true })\n badgeCount: number;\n\n /**\n * The text that will be pronounced alongside `badgeCount` when the screen reader presents the tab.\n * @localizable\n */\n @Prop({ reflect: true })\n badgeDescription: string;\n\n /** Allows you to specify the status of the tab, which is always visible. */\n @Prop({ reflect: true })\n badgeStatus: Q2Badge['status'];\n\n /** Allows you to specify the color of the badge when the tab is active. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /**\n * Used by q2-tab-container to apply a unique id to each tab pane\n * @private\n */\n @Prop()\n guid: number;\n\n /**\n * Used by q2-tab-container to indicate the pane's index\n * @private\n */\n @Prop()\n index: number;\n\n /**\n * Serves as the text that will be visible in the tab control provided by `q2-tab-container`.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Used by q2-tab-container to apply a name to all options in the group\n * @private\n */\n @Prop({ reflect: true })\n name: string;\n\n /**\n * Used by q2-tab-container to indicate the option is selected\n * @private\n */\n @Prop({ reflect: true })\n selected: boolean;\n\n /** Serves as the pane's value. Should correspond to the `q2-tab-container` value. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the badge count, description, theme, or status changes.\n * @private\n */\n @Event({ bubbles: true })\n badge: EventEmitter<boolean>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n hasValidAncestor(this.hostElement, 'q2-tab-container');\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('badgeCount')\n @Watch('badgeDescription')\n @Watch('badgeTheme')\n @Watch('badgeStatus')\n badgeObserver() {\n this.badge.emit();\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n id={`tab-pane-${this.guid}-${this.index}`}\n class={`tab-pane${this.selected ? '' : ' hidden'}`}\n role=\"tabpanel\"\n tabindex=\"-1\"\n aria-hidden={`${!this.selected}`}\n aria-labelledby={`tab-${this.guid}-${this.index}`}\n >\n <slot />\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":";;;;AAAA,MAAMA,IAAe;;MCURC,IAAS;;;;;;;EAgFlB,iBAAAC;IACIC,EAAiBC,KAAKC,aAAa;;;;EAUvC,aAAAC;IACIF,KAAKG,MAAMC;;;;EAMf,MAAAC;IACI,OACIC,EACI;MAAAC,KAAA;MAAAC,IAAI,YAAYR,KAAKS,QAAQT,KAAKU;MAClCC,OAAO,WAAWX,KAAKY,WAAW,KAAK;MACvCC,MAAK;MACLC,UAAS;MAAI,eACA,IAAId,KAAKY;MAAU,mBACf,OAAOZ,KAAKS,QAAQT,KAAKU;OAE1CJ,EAAQ;MAAAC,KAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"q2-tag.entry.esm.js","sources":["src/components/q2-tag/q2-tag.scss?tag=q2-tag&encapsulation=shadow","src/components/q2-tag/q2-tag.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n position: relative;\n line-height: 0;\n}\n\n:host(:not(:last-child)) {\n margin-inline-end: var-list(var-prefixer(tag-margin), --app-scale-2x, 10px);\n}\n\n.tag-wrapper {\n --comp-tag-btn-size: #{var-list(var-prefixer(tag-btn-size), --app-scale-6x, 30px)};\n --comp-tag-background: #{var-list(var-prefixer(tag-background), --t-gray-13, #e6e6e6)};\n --comp-tag-color: #{var-list(var-prefixer(tag-color), --t-gray-3, #262626)};\n --comp-tag-border-color: #{var-list(--tct-tag-border-color, transparent)};\n background: var(--comp-tag-background);\n color: var(--comp-tag-color);\n border-radius: var-list(var-prefixer(tag-border-radius), --app-border-radius-1, 4px);\n border-width: var-list(--tct-tag-border-width, 0);\n border-style: var-list(--tct-tag-border-style, 0);\n border-color: var(--comp-tag-border-color);\n position: relative;\n\n :host([theme='primary']) & {\n --comp-tag-background: #{var-list(--tct-tag-primary-background, --t-primary, #0079c1)};\n --comp-tag-color: #{var-list(--tct-tag-primary-font-color, --t-primary-text, #ffffff)};\n --comp-tag-border-color: #{var-list(--tct-tag-primary-border-color, --t-primary, #0079c1)};\n }\n\n :host([theme='secondary']) & {\n --comp-tag-background: #{var-list(--tct-tag-secondary-background, --t-secondary, #b3c2cc)};\n --comp-tag-color: #{var-list(--tct-tag-secondary-font-color, --t-secondary-text, #141414)};\n --comp-tag-border-color: #{var-list(--tct-tag-secondary-border-color, --t-secondary, #b3c2cc)};\n }\n\n :host([theme='tertiary']) & {\n --comp-tag-background: #{var-list(--tct-tag-tertiary-background, --t-tertiary, #e8f5fc)};\n --comp-tag-color: #{var-list(--tct-tag-tertiary-font-color, --t-tertiary-text, #141414)};\n --comp-tag-border-color: #{var-list(--tct-tag-tertiary-border-color, --t-tertiary, #e8f5fc)};\n }\n}\n\n.tag {\n display: flex;\n align-items: center;\n width: max-content;\n gap: 6px;\n height: var-list(var-prefixer(tag-height), --app-scale-6x, 30px);\n line-height: var-list(var-prefixer(tag-height), --app-scale-6x, 30px);\n padding-inline: var-list(var-prefixer(tag-padding-inline), --app-scale-3x, 15px);\n\n ::slotted(q2-icon[slot='decorator']) {\n --tct-icon-size: 1em;\n }\n\n ::slotted(q2-badge[slot='decorator']) {\n --tct-badge-height: 1em;\n --tct-badge-line-height: 30px;\n }\n}\n\n.tag.has-options {\n padding-right: 6px;\n}\n\n.btn-wrapper {\n --comp-tag-clickable-size: #{var-list(var-prefixer(tag-clickable-size), 44px)};\n --comp-tag-btn-offset: calc(calc(calc(var(--comp-tag-clickable-size) - var(--comp-tag-btn-size)) / 2) * -1);\n --comp-tag-background: #{var-list(var-prefixer(tag-background), --t-gray-13, #e6e6e6)};\n height: var(--comp-tag-clickable-size);\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n right: var(--comp-tag-btn-offset);\n top: var(--comp-tag-btn-offset);\n cursor: pointer;\n}\n\nbutton {\n height: var(--comp-tag-btn-size);\n stroke: var(--comp-tag-color);\n --tct-icon-stroke-primary: var(--comp-tag-color);\n cursor: pointer;\n border: 0;\n background: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n padding-right: 6px;\n --tct-icon-size: 18px;\n}\n","import {\n Component,\n State,\n Prop,\n h,\n ComponentInterface,\n Host,\n Listen,\n Method,\n Element,\n EventEmitter,\n Event,\n Fragment,\n} from '@stencil/core';\nimport { isEventFromElement, loc, overrideFocus, waitForNextPaint } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\nimport { shouldShowActionSheet, showActionSheetList } from 'src/utils/action-sheet';\n\n/**\n * @name Tag\n * @category Display\n * @summary Use for displaying metadata labels or categories on content.\n * @slot decorator - An optional slot that supports either an [Icon](https://tecton.q2developer.com/design-system/q2-icon) or [Badge](https://tecton.q2developer.com/design-system/q2-badge) to be displayed with the tag content.\n * This is **not** available when using [Multiple Options](https://tecton.q2developer.com/design-system/q2-tag#multiple-options).\n */\n@Component({ tag: 'q2-tag', shadow: true, styleUrl: 'q2-tag.scss' })\nexport class Q2Tag implements ComponentInterface {\n // #region Own Properties\n\n dropdownBtn: HTMLButtonElement;\n mutationObserver: MutationObserver;\n optionList: HTMLQ2OptionListElement;\n popoverElement: HTMLQ2PopoverElement;\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 optionCount: number;\n\n // #endregion\n // #region Public Property API\n\n /**\n * Instructs the component to use the action sheet workflow for displaying its options.\n *\n * For more information, see [Action Sheets](https://tecton.q2developer.com/guides/action-sheets/).\n */\n @Prop()\n hoist: boolean = !!window.Tecton?.useActionSheets;\n\n /**\n * The text that populates the label.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Determine whether the popover is open or closed.\n *\n * @readonly\n */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop()\n optionListLabel: string = 'options';\n\n /** Aligns the popover dropdown to the left or right side of the input field. */\n @Prop({ mutable: true })\n popoverAlignment: 'left' | 'right' = 'right';\n\n /**\n * Force the direction of the popover dropdown when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop()\n popoverDirection: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n popoverMaxHeight: number;\n\n /** @deprecated */\n @Prop()\n popoverMinHeight: number;\n\n /** The color of the element. */\n @Prop({ reflect: true })\n theme: 'primary' | 'secondary' | 'tertiary';\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when a provided option is clicked.\n *\n * Requires at least one option to be provided.\n * @deprecated Use 'tctClick' instead\n */\n @Event()\n click: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when a provided option is clicked.\n *\n * Requires at least one option to be provided.\n */\n @Event()\n tctClick: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n this.initMutationObserver();\n this.determineOptionCount();\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n this.filterSlottedElements();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n if (!this.optionCount) return;\n this.dropdownBtn.focus();\n }\n\n @Listen('popoverStateChanged')\n popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n if (open) return;\n this.optionList.setActiveElement(null);\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the tag to close the popover when options are provided and the popover is open.\n * @testonly\n */\n @Method()\n async closePopover() {\n if (!this.optionCount || !this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the tag to open the popover when options are provided and the popover is closed.\n * @testonly\n */\n @Method()\n async openPopover() {\n if (!this.optionCount || this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates selecting an option matching the passed value.\n *\n * If the popover is closed, this will open it before selecting the option.\n *\n * If there are not options, or the passed value does not match any option's value, this method does nothing.\n * @testonly\n */\n @Method()\n async selectOption(value) {\n if (!this.optionCount) return;\n await this.openPopover();\n await waitForNextPaint();\n const allOptions = await this.optionList.getOptions();\n const desiredOption = allOptions.find(option => option.value === value);\n desiredOption?.click();\n }\n\n // #endregion\n // #region Local Methods\n\n _togglePopover() {\n const { dropdownBtn } = this;\n dropdownBtn?.click();\n dropdownBtn?.focus();\n dropdownBtn.dispatchEvent(new FocusEvent('focus'));\n }\n\n determineOptionCount = () => {\n const numberOfOptions = this.hostElement.querySelectorAll('q2-option').length;\n this.optionCount = numberOfOptions;\n };\n\n filterSlottedElements = () => {\n if (!('HTMLSlotElement' in window)) return;\n const slot: HTMLSlotElement = this.hostElement.shadowRoot.querySelector('slot[name=\"decorator\"]');\n const assignedElements = Array.from(slot?.assignedElements() || []);\n if (!assignedElements.length) return;\n\n const approvedElements = ['Q2-ICON', 'Q2-BADGE'];\n assignedElements.forEach((element, index) => {\n if (!approvedElements.includes(element.tagName) || index > 0) {\n element.remove();\n }\n });\n };\n\n handleButtonFocusout = async (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (this.popoverElement?.contains(relatedTarget)) return;\n if (this.hostElement.contains(relatedTarget)) return;\n this.open = false;\n };\n\n handleChange = event => {\n event.stopPropagation();\n if (!this.optionCount) return;\n const { value } = event.detail;\n\n mirrorEmit(this, ['click', 'tctClick'], { value });\n };\n\n handleClick = async (event: MouseEvent) => {\n event.stopPropagation();\n this.popoverElement.controlElement = this.dropdownBtn;\n if (shouldShowActionSheet(this)) {\n const { value } = await showActionSheetList(this, event);\n this.dropdownBtn.focus();\n mirrorEmit(this, ['click', 'tctClick'], { value });\n } else {\n await this.popoverElement.toggle();\n }\n };\n\n handleKeydown = async (event: KeyboardEvent) => {\n const isTabMetaOrCtrl = event.metaKey || event.ctrlKey || event.key === 'Tab';\n if (isTabMetaOrCtrl) return;\n\n event.preventDefault();\n this.popoverElement.controlElement = this.dropdownBtn;\n if (shouldShowActionSheet(this, event)) {\n const { value } = await showActionSheetList(this, event);\n this.dropdownBtn.focus();\n mirrorEmit(this, ['click', 'tctClick'], { value });\n } else {\n this.optionList.handleExternalKeydown(event);\n }\n };\n\n handleWrapperClick = () => {\n this.dropdownBtn.focus();\n this.dropdownBtn.click();\n };\n\n initMutationObserver = () => {\n if (!('MutationObserver' in window)) return;\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n };\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n const { popoverElement } = this;\n if (!popoverElement) return;\n popoverElement.open = false;\n }\n };\n\n onMutationObserved = () => {\n this.determineOptionCount();\n this.filterSlottedElements();\n };\n\n // #endregion\n // #region Render Methods\n\n renderHiddenElement() {\n return (\n <div\n id=\"option-description\"\n class=\"sr\"\n aria-hidden=\"true\"\n >\n {loc('tecton.element.optionList.optionCount', [this.optionCount])}\n </div>\n );\n }\n\n render() {\n const { open } = this;\n const wrapperClassNames = ['tag'];\n if (this.optionCount) wrapperClassNames.push('has-options');\n const shouldShowOptions = this.optionCount > 0;\n\n return (\n <Host>\n <click-elsewhere onChange={this.onClickElsewhere}>\n {shouldShowOptions ? (\n <Fragment>\n <div\n class=\"btn-wrapper\"\n onClick={this.handleWrapperClick}\n >\n <button\n class=\"tag-wrapper\"\n ref={el => (this.dropdownBtn = el)}\n test-id=\"btn-control\"\n type=\"button\"\n role=\"combobox\"\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n onFocusout={this.handleButtonFocusout}\n aria-controls=\"option-list\"\n aria-expanded={open ? 'true' : 'false'}\n aria-describedby=\"option-description\"\n aria-label={loc(this.label)}\n >\n <div class={wrapperClassNames.join(' ')}>{loc(this.label)}</div>\n <q2-icon type=\"options\"></q2-icon>\n </button>\n </div>\n {this.renderHiddenElement()}\n </Fragment>\n ) : (\n <div\n class=\"tag-wrapper\"\n onClick={e => e.stopPropagation()}\n >\n <div class={wrapperClassNames.join(' ')}>\n <slot name=\"decorator\" />\n {loc(this.label)}\n </div>\n </div>\n )}\n\n {shouldShowOptions && (\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.dropdownBtn}\n open={this.open}\n maxHeight={this.popoverMaxHeight}\n minHeight={this.popoverMinHeight}\n direction={this.popoverDirection}\n align={this.popoverAlignment}\n >\n <q2-option-list\n id=\"option-list\"\n ref={el => (this.optionList = el)}\n onChange={this.handleChange}\n type=\"menu\"\n align=\"right\"\n label={loc('tecton.element.optionList.label', [this.optionListLabel])}\n no-select\n >\n <slot />\n </q2-option-list>\n </q2-popover>\n )}\n </click-elsewhere>\n </Host>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"q2-tag.entry.esm.js","sources":["src/components/q2-tag/q2-tag.scss?tag=q2-tag&encapsulation=shadow","src/components/q2-tag/q2-tag.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n position: relative;\n line-height: 0;\n}\n\n:host(:not(:last-child)) {\n margin-inline-end: var-list(var-prefixer(tag-margin), --app-scale-2x, 10px);\n}\n\n.tag-wrapper {\n --comp-tag-btn-size: #{var-list(var-prefixer(tag-btn-size), --app-scale-6x, 30px)};\n --comp-tag-background: #{var-list(var-prefixer(tag-background), --t-gray-13, #e6e6e6)};\n --comp-tag-color: #{var-list(var-prefixer(tag-color), --t-gray-3, #262626)};\n --comp-tag-border-color: #{var-list(--tct-tag-border-color, transparent)};\n background: var(--comp-tag-background);\n color: var(--comp-tag-color);\n border-radius: var-list(var-prefixer(tag-border-radius), --app-border-radius-1, 4px);\n border-width: var-list(--tct-tag-border-width, 0);\n border-style: var-list(--tct-tag-border-style, 0);\n border-color: var(--comp-tag-border-color);\n font-size: var(--tct-tag-font-size, inherit);\n font-weight: var(--tct-tag-font-weight, inherit);\n position: relative;\n\n :host([theme='primary']) & {\n --comp-tag-background: #{var-list(--tct-tag-primary-background, --t-primary, #0079c1)};\n --comp-tag-color: #{var-list(--tct-tag-primary-font-color, --t-primary-text, #ffffff)};\n --comp-tag-border-color: #{var-list(--tct-tag-primary-border-color, --t-primary, #0079c1)};\n }\n\n :host([theme='secondary']) & {\n --comp-tag-background: #{var-list(--tct-tag-secondary-background, --t-secondary, #b3c2cc)};\n --comp-tag-color: #{var-list(--tct-tag-secondary-font-color, --t-secondary-text, #141414)};\n --comp-tag-border-color: #{var-list(--tct-tag-secondary-border-color, --t-secondary, #b3c2cc)};\n }\n\n :host([theme='tertiary']) & {\n --comp-tag-background: #{var-list(--tct-tag-tertiary-background, --t-tertiary, #e8f5fc)};\n --comp-tag-color: #{var-list(--tct-tag-tertiary-font-color, --t-tertiary-text, #141414)};\n --comp-tag-border-color: #{var-list(--tct-tag-tertiary-border-color, --t-tertiary, #e8f5fc)};\n }\n}\n\n.tag {\n display: flex;\n align-items: center;\n width: max-content;\n gap: 6px;\n height: var-list(var-prefixer(tag-height), --app-scale-6x, 30px);\n line-height: var-list(var-prefixer(tag-height), --app-scale-6x, 30px);\n padding-inline: var-list(var-prefixer(tag-padding-inline), --app-scale-3x, 15px);\n\n ::slotted(q2-icon[slot='decorator']) {\n --tct-icon-size: 1em;\n --tct-icon-stroke-primary: var(--tct-tag-decorator-icon-primary-stroke);\n --tct-icon-stroke-secondary: var(--tct-tag-decorator-icon-secondary-stroke);\n }\n\n :host([theme=\"primary\"]) & ::slotted(q2-icon[slot='decorator']) {\n --tct-icon-stroke-primary: var(--tct-tag-primary-decorator-icon-primary-stroke);\n --tct-icon-stroke-secondary: var(--tct-tag-primary-decorator-icon-secondary-stroke);\n }\n\n ::slotted(q2-badge[slot='decorator']) {\n --tct-badge-height: 1em;\n --tct-badge-line-height: 30px;\n }\n}\n\n.tag.has-options {\n padding-right: 6px;\n}\n\n.btn-wrapper {\n --comp-tag-clickable-size: #{var-list(var-prefixer(tag-clickable-size), 44px)};\n --comp-tag-btn-offset: calc(calc(calc(var(--comp-tag-clickable-size) - var(--comp-tag-btn-size)) / 2) * -1);\n --comp-tag-background: #{var-list(var-prefixer(tag-background), --t-gray-13, #e6e6e6)};\n height: var(--comp-tag-clickable-size);\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n right: var(--comp-tag-btn-offset);\n top: var(--comp-tag-btn-offset);\n cursor: pointer;\n}\n\nbutton {\n height: var(--comp-tag-btn-size);\n stroke: var(--comp-tag-color);\n --tct-icon-stroke-primary: var(--comp-tag-color);\n cursor: pointer;\n border: 0;\n background: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n padding-right: 6px;\n --tct-icon-size: 18px;\n}\n","import {\n Component,\n State,\n Prop,\n h,\n ComponentInterface,\n Host,\n Listen,\n Method,\n Element,\n EventEmitter,\n Event,\n Fragment,\n} from '@stencil/core';\nimport { isEventFromElement, loc, overrideFocus, waitForNextPaint } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\nimport { shouldShowActionSheet, showActionSheetList } from 'src/utils/action-sheet';\n\n/**\n * @name Tag\n * @category Display\n * @summary Use for displaying metadata labels or categories on content.\n * @slot decorator - An optional slot that supports either an [Icon](https://tecton.q2developer.com/design-system/q2-icon) or [Badge](https://tecton.q2developer.com/design-system/q2-badge) to be displayed with the tag content.\n * This is **not** available when using [Multiple Options](https://tecton.q2developer.com/design-system/q2-tag#multiple-options).\n */\n@Component({ tag: 'q2-tag', shadow: true, styleUrl: 'q2-tag.scss' })\nexport class Q2Tag implements ComponentInterface {\n // #region Own Properties\n\n dropdownBtn: HTMLButtonElement;\n mutationObserver: MutationObserver;\n optionList: HTMLQ2OptionListElement;\n popoverElement: HTMLQ2PopoverElement;\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 optionCount: number;\n\n // #endregion\n // #region Public Property API\n\n /**\n * Instructs the component to use the action sheet workflow for displaying its options.\n *\n * For more information, see [Action Sheets](https://tecton.q2developer.com/guides/action-sheets/).\n */\n @Prop()\n hoist: boolean = !!window.Tecton?.useActionSheets;\n\n /**\n * The text that populates the label.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Determine whether the popover is open or closed.\n *\n * @readonly\n */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop()\n optionListLabel: string = 'options';\n\n /** Aligns the popover dropdown to the left or right side of the input field. */\n @Prop({ mutable: true })\n popoverAlignment: 'left' | 'right' = 'right';\n\n /**\n * Force the direction of the popover dropdown when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop()\n popoverDirection: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n popoverMaxHeight: number;\n\n /** @deprecated */\n @Prop()\n popoverMinHeight: number;\n\n /** The color of the element. */\n @Prop({ reflect: true })\n theme: 'primary' | 'secondary' | 'tertiary';\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when a provided option is clicked.\n *\n * Requires at least one option to be provided.\n * @deprecated Use 'tctClick' instead\n */\n @Event()\n click: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when a provided option is clicked.\n *\n * Requires at least one option to be provided.\n */\n @Event()\n tctClick: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n this.initMutationObserver();\n this.determineOptionCount();\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n this.filterSlottedElements();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n if (!this.optionCount) return;\n this.dropdownBtn.focus();\n }\n\n @Listen('popoverStateChanged')\n popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n if (open) return;\n this.optionList.setActiveElement(null);\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the tag to close the popover when options are provided and the popover is open.\n * @testonly\n */\n @Method()\n async closePopover() {\n if (!this.optionCount || !this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the tag to open the popover when options are provided and the popover is closed.\n * @testonly\n */\n @Method()\n async openPopover() {\n if (!this.optionCount || this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates selecting an option matching the passed value.\n *\n * If the popover is closed, this will open it before selecting the option.\n *\n * If there are not options, or the passed value does not match any option's value, this method does nothing.\n * @testonly\n */\n @Method()\n async selectOption(value) {\n if (!this.optionCount) return;\n await this.openPopover();\n await waitForNextPaint();\n const allOptions = await this.optionList.getOptions();\n const desiredOption = allOptions.find(option => option.value === value);\n desiredOption?.click();\n }\n\n // #endregion\n // #region Local Methods\n\n _togglePopover() {\n const { dropdownBtn } = this;\n dropdownBtn?.click();\n dropdownBtn?.focus();\n dropdownBtn.dispatchEvent(new FocusEvent('focus'));\n }\n\n determineOptionCount = () => {\n const numberOfOptions = this.hostElement.querySelectorAll('q2-option').length;\n this.optionCount = numberOfOptions;\n };\n\n filterSlottedElements = () => {\n if (!('HTMLSlotElement' in window)) return;\n const slot: HTMLSlotElement = this.hostElement.shadowRoot.querySelector('slot[name=\"decorator\"]');\n const assignedElements = Array.from(slot?.assignedElements() || []);\n if (!assignedElements.length) return;\n\n const approvedElements = ['Q2-ICON', 'Q2-BADGE'];\n assignedElements.forEach((element, index) => {\n if (!approvedElements.includes(element.tagName) || index > 0) {\n element.remove();\n }\n });\n };\n\n handleButtonFocusout = async (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (this.popoverElement?.contains(relatedTarget)) return;\n if (this.hostElement.contains(relatedTarget)) return;\n this.open = false;\n };\n\n handleChange = event => {\n event.stopPropagation();\n if (!this.optionCount) return;\n const { value } = event.detail;\n\n mirrorEmit(this, ['click', 'tctClick'], { value });\n };\n\n handleClick = async (event: MouseEvent) => {\n event.stopPropagation();\n this.popoverElement.controlElement = this.dropdownBtn;\n if (shouldShowActionSheet(this)) {\n const { value } = await showActionSheetList(this, event);\n this.dropdownBtn.focus();\n mirrorEmit(this, ['click', 'tctClick'], { value });\n } else {\n await this.popoverElement.toggle();\n }\n };\n\n handleKeydown = async (event: KeyboardEvent) => {\n const isTabMetaOrCtrl = event.metaKey || event.ctrlKey || event.key === 'Tab';\n if (isTabMetaOrCtrl) return;\n\n event.preventDefault();\n this.popoverElement.controlElement = this.dropdownBtn;\n if (shouldShowActionSheet(this, event)) {\n const { value } = await showActionSheetList(this, event);\n this.dropdownBtn.focus();\n mirrorEmit(this, ['click', 'tctClick'], { value });\n } else {\n this.optionList.handleExternalKeydown(event);\n }\n };\n\n handleWrapperClick = () => {\n this.dropdownBtn.focus();\n this.dropdownBtn.click();\n };\n\n initMutationObserver = () => {\n if (!('MutationObserver' in window)) return;\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n };\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n const { popoverElement } = this;\n if (!popoverElement) return;\n popoverElement.open = false;\n }\n };\n\n onMutationObserved = () => {\n this.determineOptionCount();\n this.filterSlottedElements();\n };\n\n // #endregion\n // #region Render Methods\n\n renderHiddenElement() {\n return (\n <div\n id=\"option-description\"\n class=\"sr\"\n aria-hidden=\"true\"\n >\n {loc('tecton.element.optionList.optionCount', [this.optionCount])}\n </div>\n );\n }\n\n render() {\n const { open } = this;\n const wrapperClassNames = ['tag'];\n if (this.optionCount) wrapperClassNames.push('has-options');\n const shouldShowOptions = this.optionCount > 0;\n\n return (\n <Host>\n <click-elsewhere onChange={this.onClickElsewhere}>\n {shouldShowOptions ? (\n <Fragment>\n <div\n class=\"btn-wrapper\"\n onClick={this.handleWrapperClick}\n >\n <button\n class=\"tag-wrapper\"\n ref={el => (this.dropdownBtn = el)}\n test-id=\"btn-control\"\n type=\"button\"\n role=\"combobox\"\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n onFocusout={this.handleButtonFocusout}\n aria-controls=\"option-list\"\n aria-expanded={open ? 'true' : 'false'}\n aria-describedby=\"option-description\"\n aria-label={loc(this.label)}\n >\n <div class={wrapperClassNames.join(' ')}>{loc(this.label)}</div>\n <q2-icon type=\"options\"></q2-icon>\n </button>\n </div>\n {this.renderHiddenElement()}\n </Fragment>\n ) : (\n <div\n class=\"tag-wrapper\"\n onClick={e => e.stopPropagation()}\n >\n <div class={wrapperClassNames.join(' ')}>\n <slot name=\"decorator\" />\n {loc(this.label)}\n </div>\n </div>\n )}\n\n {shouldShowOptions && (\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.dropdownBtn}\n open={this.open}\n maxHeight={this.popoverMaxHeight}\n minHeight={this.popoverMinHeight}\n direction={this.popoverDirection}\n align={this.popoverAlignment}\n >\n <q2-option-list\n id=\"option-list\"\n ref={el => (this.optionList = el)}\n onChange={this.handleChange}\n type=\"menu\"\n align=\"right\"\n label={loc('tecton.element.optionList.label', [this.optionListLabel])}\n no-select\n >\n <slot />\n </q2-option-list>\n </q2-popover>\n )}\n </click-elsewhere>\n </Host>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}