q2-tecton-elements 1.70.2 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/dist/bundle-report.json +556 -231
  2. package/dist/cjs/click-elsewhere_3.cjs.entry.js +2 -2
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/q2-action-group_2.cjs.entry.js +3 -3
  5. package/dist/cjs/q2-action-sheet.cjs.entry.js +4 -3
  6. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-badge_2.cjs.entry.js +17 -8
  8. package/dist/cjs/q2-btn_2.cjs.entry.js +2 -2
  9. package/dist/cjs/q2-calendar.cjs.entry.js +8 -6
  10. package/dist/cjs/q2-card-image.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-carousel.cjs.entry.js +108 -74
  14. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-checkbox_2.cjs.entry.js +3 -3
  19. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-detail.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-dropdown.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-editable-field.cjs.entry.js +3 -3
  25. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-form.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-item.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
  33. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-meter.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-modal.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-option.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-otp.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-pagination.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-pill.cjs.entry.js +18 -2
  42. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  43. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  44. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  45. package/dist/cjs/q2-search.cjs.entry.js +2 -2
  46. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  47. package/dist/cjs/q2-select.cjs.entry.js +1 -1
  48. package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
  49. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +32 -9
  50. package/dist/cjs/q2-stepper.cjs.entry.js +18 -4
  51. package/dist/cjs/q2-surface.cjs.entry.js +3 -3
  52. package/dist/cjs/q2-tab-container.cjs.entry.js +89 -20
  53. package/dist/cjs/q2-tab-pane.cjs.entry.js +2 -2
  54. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  55. package/dist/cjs/q2-textarea.cjs.entry.js +3 -3
  56. package/dist/cjs/q2-toast.cjs.entry.js +1 -1
  57. package/dist/cjs/q2-tooltip.cjs.entry.js +26 -15
  58. package/dist/cjs/tecton-tab-pane.cjs.entry.js +3 -3
  59. package/dist/collection/components/q2-action-group/q2-action-group.css +22 -0
  60. package/dist/collection/components/q2-action-sheet/q2-action-sheet.css +24 -1
  61. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +3 -2
  62. package/dist/collection/components/q2-avatar/q2-avatar.css +23 -1
  63. package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js +13 -1
  64. package/dist/collection/components/q2-badge/q2-badge.css +26 -4
  65. package/dist/collection/components/q2-badge/test/q2-badge-test.vr.js +13 -1
  66. package/dist/collection/components/q2-btn/q2-btn.css +53 -9
  67. package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js +19 -1
  68. package/dist/collection/components/q2-calendar/q2-calendar.css +26 -4
  69. package/dist/collection/components/q2-calendar/q2-calendar.js +7 -5
  70. package/dist/collection/components/q2-calendar/q2-month-picker.css +22 -0
  71. package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js +34 -1
  72. package/dist/collection/components/q2-card/q2-card.css +23 -1
  73. package/dist/collection/components/q2-card/test/q2-card-test.vr.js +10 -1
  74. package/dist/collection/components/q2-card-image/q2-card-image.css +23 -1
  75. package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js +9 -1
  76. package/dist/collection/components/q2-carousel/q2-carousel.css +29 -39
  77. package/dist/collection/components/q2-carousel/q2-carousel.js +122 -69
  78. package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js +5 -4
  79. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.css +22 -0
  80. package/dist/collection/components/q2-chart-area/q2-chart-area.css +22 -0
  81. package/dist/collection/components/q2-chart-bar/q2-chart-bar.css +22 -0
  82. package/dist/collection/components/q2-chart-donut/q2-chart-donut.css +24 -2
  83. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js +13 -1
  84. package/dist/collection/components/q2-checkbox/q2-checkbox.css +23 -1
  85. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.vr.js +11 -1
  86. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +23 -1
  87. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.js +11 -1
  88. package/dist/collection/components/q2-currency/q2-currency.css +25 -3
  89. package/dist/collection/components/q2-currency/test/q2-currency-test.vr.js +13 -1
  90. package/dist/collection/components/q2-data-table/q2-data-table.css +24 -2
  91. package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js +11 -1
  92. package/dist/collection/components/q2-detail/q2-detail.css +32 -10
  93. package/dist/collection/components/q2-dropdown/q2-dropdown.css +22 -0
  94. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.css +22 -0
  95. package/dist/collection/components/q2-editable-field/q2-editable-field.css +22 -0
  96. package/dist/collection/components/q2-editable-field/q2-editable-field.js +2 -2
  97. package/dist/collection/components/q2-example/q2-example.css +23 -0
  98. package/dist/collection/components/q2-file-picker/q2-file-picker.css +57 -10
  99. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js +14 -1
  100. package/dist/collection/components/q2-form/q2-form.css +22 -0
  101. package/dist/collection/components/q2-formatted-text/q2-formatted-text.css +25 -3
  102. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.vr.js +13 -1
  103. package/dist/collection/components/q2-icon/assets/standard.symbol.svg +1 -1
  104. package/dist/collection/components/q2-icon/q2-icon.css +22 -0
  105. package/dist/collection/components/q2-input/q2-input.css +26 -4
  106. package/dist/collection/components/q2-input/q2-input.js +39 -7
  107. package/dist/collection/components/q2-input/test/q2-input-test.vr.js +36 -1
  108. package/dist/collection/components/q2-item/q2-item.css +46 -2
  109. package/dist/collection/components/q2-item/test/q2-item-test.vr.js +12 -1
  110. package/dist/collection/components/q2-legend/q2-legend.css +24 -2
  111. package/dist/collection/components/q2-link/q2-link.css +22 -0
  112. package/dist/collection/components/q2-list/q2-list.css +46 -2
  113. package/dist/collection/components/q2-list/test/q2-list-test.vr.js +12 -1
  114. package/dist/collection/components/q2-loading/q2-loading.css +23 -0
  115. package/dist/collection/components/q2-message/q2-message.css +22 -0
  116. package/dist/collection/components/q2-meter/q2-meter.css +25 -3
  117. package/dist/collection/components/q2-meter/test/q2-meter-test.vr.js +12 -1
  118. package/dist/collection/components/q2-modal/q2-modal.css +23 -1
  119. package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js +12 -1
  120. package/dist/collection/components/q2-optgroup/q2-optgroup.css +23 -1
  121. package/dist/collection/components/q2-option/q2-option.css +22 -0
  122. package/dist/collection/components/q2-option-list/q2-option-list.css +22 -0
  123. package/dist/collection/components/q2-otp/q2-otp.css +27 -4
  124. package/dist/collection/components/q2-otp/test/q2-otp-test.vr.js +12 -1
  125. package/dist/collection/components/q2-pagination/q2-pagination.css +22 -0
  126. package/dist/collection/components/q2-pill/q2-pill.css +42 -2
  127. package/dist/collection/components/q2-pill/q2-pill.js +18 -1
  128. package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js +27 -1
  129. package/dist/collection/components/q2-popover/q2-popover.css +22 -7
  130. package/dist/collection/components/q2-radio/q2-radio.css +24 -2
  131. package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js +12 -1
  132. package/dist/collection/components/q2-radio-group/q2-radio-group.css +23 -1
  133. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js +11 -1
  134. package/dist/collection/components/q2-relative-time/q2-relative-time.css +22 -0
  135. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  136. package/dist/collection/components/q2-resize-observer/q2-resize-observer.css +22 -0
  137. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  138. package/dist/collection/components/q2-search/q2-search.css +22 -0
  139. package/dist/collection/components/q2-search/q2-search.js +1 -1
  140. package/dist/collection/components/q2-section/q2-section.css +23 -1
  141. package/dist/collection/components/q2-section/q2-section.js +2 -2
  142. package/dist/collection/components/q2-section/test/q2-section-test.vr.js +11 -1
  143. package/dist/collection/components/q2-select/q2-select.css +22 -0
  144. package/dist/collection/components/q2-stepper/q2-stepper.css +38 -4
  145. package/dist/collection/components/q2-stepper/q2-stepper.js +17 -3
  146. package/dist/collection/components/q2-stepper/test/q2-stepper-test.vr.js +12 -1
  147. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.css +22 -0
  148. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +1 -1
  149. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +39 -5
  150. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +31 -8
  151. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.js +16 -1
  152. package/dist/collection/components/q2-surface/q2-surface.css +71 -32
  153. package/dist/collection/components/q2-surface/q2-surface.js +7 -7
  154. package/dist/collection/components/q2-surface/test/q2-surface-test.vr.js +54 -0
  155. package/dist/collection/components/q2-tab-container/q2-tab-container.css +112 -6
  156. package/dist/collection/components/q2-tab-container/q2-tab-container.js +114 -21
  157. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.vr.js +24 -1
  158. package/dist/collection/components/q2-tab-pane/q2-tab-pane.css +22 -0
  159. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  160. package/dist/collection/components/q2-tag/q2-tag.css +25 -2
  161. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  162. package/dist/collection/components/q2-tag/test/q2-tag-test.vr.js +21 -1
  163. package/dist/collection/components/q2-textarea/q2-textarea.css +24 -2
  164. package/dist/collection/components/q2-textarea/q2-textarea.js +2 -2
  165. package/dist/collection/components/q2-textarea/test/q2-textarea-test.vr.js +16 -1
  166. package/dist/collection/components/q2-toast/q2-toast.css +22 -0
  167. package/dist/collection/components/q2-tooltip/q2-tooltip.css +27 -19
  168. package/dist/collection/components/q2-tooltip/q2-tooltip.js +32 -21
  169. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js +13 -1
  170. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.css +22 -0
  171. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  172. package/dist/collection/utils/helpers.js +29 -6
  173. package/dist/collection/utils/test/vr-helpers.js +7 -0
  174. package/dist/components/q2-action-group2.js +1 -1
  175. package/dist/components/q2-action-sheet.js +21 -18
  176. package/dist/components/q2-avatar2.js +1 -1
  177. package/dist/components/q2-badge2.js +1 -1
  178. package/dist/components/q2-btn2.js +15 -15
  179. package/dist/components/q2-calendar.js +306 -301
  180. package/dist/components/q2-card-image.js +6 -6
  181. package/dist/components/q2-card.js +14 -14
  182. package/dist/components/q2-carousel-pane2.js +1 -1
  183. package/dist/components/q2-carousel.js +633 -585
  184. package/dist/components/q2-chart-area.js +1 -1
  185. package/dist/components/q2-chart-bar.js +70 -70
  186. package/dist/components/q2-chart-donut.js +1 -1
  187. package/dist/components/q2-checkbox-group.js +42 -42
  188. package/dist/components/q2-checkbox2.js +1 -1
  189. package/dist/components/q2-currency.js +32 -32
  190. package/dist/components/q2-data-table.js +34 -34
  191. package/dist/components/q2-detail.js +5 -5
  192. package/dist/components/q2-dropdown-item2.js +11 -11
  193. package/dist/components/q2-dropdown.js +17 -17
  194. package/dist/components/q2-editable-field.js +12 -11
  195. package/dist/components/q2-example.js +15 -15
  196. package/dist/components/q2-file-picker.js +25 -25
  197. package/dist/components/q2-form.js +11 -11
  198. package/dist/components/q2-formatted-text.js +5 -5
  199. package/dist/components/q2-icon2.js +1 -1
  200. package/dist/components/q2-input2.js +24 -13
  201. package/dist/components/q2-item2.js +1 -1
  202. package/dist/components/q2-legend2.js +56 -56
  203. package/dist/components/q2-link2.js +6 -6
  204. package/dist/components/q2-list2.js +22 -22
  205. package/dist/components/q2-loading2.js +1 -1
  206. package/dist/components/q2-message2.js +20 -20
  207. package/dist/components/q2-meter.js +1 -1
  208. package/dist/components/q2-modal.js +3 -3
  209. package/dist/components/q2-month-picker.js +10 -10
  210. package/dist/components/q2-optgroup2.js +7 -7
  211. package/dist/components/q2-option-list2.js +34 -34
  212. package/dist/components/q2-option2.js +13 -13
  213. package/dist/components/q2-otp.js +5 -5
  214. package/dist/components/q2-pagination.js +58 -58
  215. package/dist/components/q2-pill.js +66 -54
  216. package/dist/components/q2-popover2.js +1 -1
  217. package/dist/components/q2-radio-group.js +5 -5
  218. package/dist/components/q2-radio.js +14 -14
  219. package/dist/components/q2-relative-time.js +10 -10
  220. package/dist/components/q2-resize-observer2.js +9 -9
  221. package/dist/components/q2-search.js +5 -5
  222. package/dist/components/q2-section.js +22 -22
  223. package/dist/components/q2-select2.js +1 -1
  224. package/dist/components/q2-stepper-pane.js +33 -33
  225. package/dist/components/q2-stepper-vertical.js +84 -60
  226. package/dist/components/q2-stepper.js +79 -65
  227. package/dist/components/q2-surface.js +14 -14
  228. package/dist/components/q2-tab-container.js +110 -55
  229. package/dist/components/q2-tab-pane.js +7 -7
  230. package/dist/components/q2-tag2.js +39 -39
  231. package/dist/components/q2-textarea.js +16 -16
  232. package/dist/components/q2-toast.js +22 -22
  233. package/dist/components/q2-tooltip2.js +26 -25
  234. package/dist/components/tecton-tab-pane.js +11 -11
  235. package/dist/esm/click-elsewhere_3.entry.js +2 -2
  236. package/dist/esm/loader.js +1 -1
  237. package/dist/esm/q2-action-group_2.entry.js +3 -3
  238. package/dist/esm/q2-action-sheet.entry.js +4 -3
  239. package/dist/esm/q2-avatar.entry.js +1 -1
  240. package/dist/esm/q2-badge_2.entry.js +17 -8
  241. package/dist/esm/q2-btn_2.entry.js +2 -2
  242. package/dist/esm/q2-calendar.entry.js +8 -6
  243. package/dist/esm/q2-card-image.entry.js +1 -1
  244. package/dist/esm/q2-card.entry.js +1 -1
  245. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  246. package/dist/esm/q2-carousel.entry.js +104 -70
  247. package/dist/esm/q2-chart-area.entry.js +1 -1
  248. package/dist/esm/q2-chart-bar.entry.js +1 -1
  249. package/dist/esm/q2-chart-donut.entry.js +1 -1
  250. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  251. package/dist/esm/q2-checkbox_2.entry.js +3 -3
  252. package/dist/esm/q2-currency.entry.js +1 -1
  253. package/dist/esm/q2-data-table.entry.js +1 -1
  254. package/dist/esm/q2-detail.entry.js +1 -1
  255. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  256. package/dist/esm/q2-dropdown.entry.js +1 -1
  257. package/dist/esm/q2-editable-field.entry.js +3 -3
  258. package/dist/esm/q2-example.entry.js +1 -1
  259. package/dist/esm/q2-file-picker.entry.js +1 -1
  260. package/dist/esm/q2-form.entry.js +1 -1
  261. package/dist/esm/q2-formatted-text.entry.js +1 -1
  262. package/dist/esm/q2-icon.entry.js +1 -1
  263. package/dist/esm/q2-item.entry.js +1 -1
  264. package/dist/esm/q2-legend.entry.js +1 -1
  265. package/dist/esm/q2-link_2.entry.js +2 -2
  266. package/dist/esm/q2-message.entry.js +1 -1
  267. package/dist/esm/q2-meter.entry.js +1 -1
  268. package/dist/esm/q2-modal.entry.js +1 -1
  269. package/dist/esm/q2-month-picker.entry.js +1 -1
  270. package/dist/esm/q2-optgroup.entry.js +1 -1
  271. package/dist/esm/q2-option.entry.js +1 -1
  272. package/dist/esm/q2-otp.entry.js +1 -1
  273. package/dist/esm/q2-pagination.entry.js +1 -1
  274. package/dist/esm/q2-pill.entry.js +18 -2
  275. package/dist/esm/q2-radio-group.entry.js +1 -1
  276. package/dist/esm/q2-radio.entry.js +1 -1
  277. package/dist/esm/q2-relative-time.entry.js +2 -2
  278. package/dist/esm/q2-search.entry.js +2 -2
  279. package/dist/esm/q2-section.entry.js +3 -3
  280. package/dist/esm/q2-select.entry.js +1 -1
  281. package/dist/esm/q2-stepper-pane.entry.js +2 -2
  282. package/dist/esm/q2-stepper-vertical.entry.js +32 -9
  283. package/dist/esm/q2-stepper.entry.js +18 -4
  284. package/dist/esm/q2-surface.entry.js +3 -3
  285. package/dist/esm/q2-tab-container.entry.js +89 -20
  286. package/dist/esm/q2-tab-pane.entry.js +2 -2
  287. package/dist/esm/q2-tecton-elements.js +1 -1
  288. package/dist/esm/q2-textarea.entry.js +3 -3
  289. package/dist/esm/q2-toast.entry.js +1 -1
  290. package/dist/esm/q2-tooltip.entry.js +27 -16
  291. package/dist/esm/tecton-tab-pane.entry.js +3 -3
  292. package/dist/q2-tecton-elements/assets/standard.symbol.svg +1 -1
  293. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +23 -23
  294. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +42 -42
  295. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +21 -18
  296. package/dist/q2-tecton-elements/q2-avatar.entry.js +1 -1
  297. package/dist/q2-tecton-elements/q2-badge_2.entry.js +25 -15
  298. package/dist/q2-tecton-elements/q2-btn_2.entry.js +2 -2
  299. package/dist/q2-tecton-elements/q2-calendar.entry.js +120 -115
  300. package/dist/q2-tecton-elements/q2-card-image.entry.js +1 -1
  301. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  302. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +11 -11
  303. package/dist/q2-tecton-elements/q2-carousel.entry.js +572 -540
  304. package/dist/q2-tecton-elements/q2-chart-area.entry.js +166 -166
  305. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +190 -190
  306. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +1 -1
  307. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +8 -8
  308. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +7 -7
  309. package/dist/q2-tecton-elements/q2-currency.entry.js +40 -40
  310. package/dist/q2-tecton-elements/q2-data-table.entry.js +64 -64
  311. package/dist/q2-tecton-elements/q2-detail.entry.js +1 -1
  312. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +5 -5
  313. package/dist/q2-tecton-elements/q2-dropdown.entry.js +21 -21
  314. package/dist/q2-tecton-elements/q2-editable-field.entry.js +18 -17
  315. package/dist/q2-tecton-elements/q2-example.entry.js +5 -5
  316. package/dist/q2-tecton-elements/q2-file-picker.entry.js +6 -6
  317. package/dist/q2-tecton-elements/q2-form.entry.js +3 -3
  318. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +3 -3
  319. package/dist/q2-tecton-elements/q2-icon.entry.js +1 -1
  320. package/dist/q2-tecton-elements/q2-item.entry.js +1 -1
  321. package/dist/q2-tecton-elements/q2-legend.entry.js +8 -8
  322. package/dist/q2-tecton-elements/q2-link_2.entry.js +5 -5
  323. package/dist/q2-tecton-elements/q2-message.entry.js +23 -23
  324. package/dist/q2-tecton-elements/q2-meter.entry.js +4 -4
  325. package/dist/q2-tecton-elements/q2-modal.entry.js +3 -3
  326. package/dist/q2-tecton-elements/q2-month-picker.entry.js +39 -39
  327. package/dist/q2-tecton-elements/q2-optgroup.entry.js +13 -13
  328. package/dist/q2-tecton-elements/q2-option.entry.js +22 -22
  329. package/dist/q2-tecton-elements/q2-otp.entry.js +1 -1
  330. package/dist/q2-tecton-elements/q2-pagination.entry.js +11 -11
  331. package/dist/q2-tecton-elements/q2-pill.entry.js +30 -18
  332. package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
  333. package/dist/q2-tecton-elements/q2-radio.entry.js +24 -24
  334. package/dist/q2-tecton-elements/q2-relative-time.entry.js +21 -21
  335. package/dist/q2-tecton-elements/q2-search.entry.js +12 -12
  336. package/dist/q2-tecton-elements/q2-section.entry.js +25 -25
  337. package/dist/q2-tecton-elements/q2-select.entry.js +5 -5
  338. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +16 -16
  339. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +77 -53
  340. package/dist/q2-tecton-elements/q2-stepper.entry.js +44 -30
  341. package/dist/q2-tecton-elements/q2-surface.entry.js +5 -5
  342. package/dist/q2-tecton-elements/q2-tab-container.entry.js +109 -56
  343. package/dist/q2-tecton-elements/q2-tab-pane.entry.js +13 -13
  344. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  345. package/dist/q2-tecton-elements/q2-textarea.entry.js +14 -14
  346. package/dist/q2-tecton-elements/q2-toast.entry.js +6 -6
  347. package/dist/q2-tecton-elements/q2-tooltip.entry.js +25 -24
  348. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +11 -11
  349. package/dist/types/components/q2-carousel/q2-carousel.d.ts +14 -0
  350. package/dist/types/components/q2-input/q2-input.d.ts +7 -1
  351. package/dist/types/components/q2-pill/q2-pill.d.ts +2 -0
  352. package/dist/types/components/q2-stepper/q2-stepper.d.ts +1 -0
  353. package/dist/types/components/q2-stepper-vertical/q2-stepper-vertical.d.ts +3 -2
  354. package/dist/types/components/q2-surface/q2-surface.d.ts +3 -3
  355. package/dist/types/components/q2-tab-container/q2-tab-container.d.ts +17 -3
  356. package/dist/types/components/q2-tooltip/q2-tooltip.d.ts +2 -1
  357. package/dist/types/components.d.ts +50 -21
  358. package/dist/types/utils/helpers.d.ts +16 -1
  359. package/dist/types/utils/test/vr-helpers.d.ts +11 -0
  360. package/package.json +12 -5
@@ -49,8 +49,61 @@ export class Q2Carousel {
49
49
  this.label = 'tecton.element.carousel.ariaLabel';
50
50
  /** Display navigation arrow buttons as another way to navigate the carousel. */
51
51
  this.showNavigationArrows = false;
52
+ /**
53
+ * Rebuilt whenever a prop that feeds Swiper's static config (e.g. `loop`) changes,
54
+ * since Swiper reads its options only at construction time.
55
+ */
56
+ this.buildCarouselOptions = () => {
57
+ this.universalCarouselOptions = {
58
+ centeredSlides: true,
59
+ loop: this.loop !== false,
60
+ focusableElements: 'q2-btn, q2-dropdown, q2-item, q2-list, a, input, select, textarea, button, video, label, option',
61
+ autoplay: this.autoPlay,
62
+ modules: [Autoplay],
63
+ on: {
64
+ realIndexChange: swiper => {
65
+ // When peek mode pads the DOM with duplicates (3- or 4-pane carousels),
66
+ // `swiper.realIndex` can point at a duplicate; map it back to the 0..paneCount-1
67
+ // range so `this.index`, pagination dots, and emitted events stay logical.
68
+ const logicalIndex = this.paneCount > 0 ? swiper.realIndex % this.paneCount : swiper.realIndex;
69
+ this.index = logicalIndex + 1;
70
+ this.updateCarouselPaneProps();
71
+ const isPaginationFocused = !!document.activeElement.closest(`#q2-carousel-${this.guid} .q2-carousel-page-indicator`);
72
+ const isCarouselFocused = !!document.activeElement.closest(`#q2-carousel-${this.guid} q2-carousel-pane`);
73
+ const isFocused = isPaginationFocused || isCarouselFocused;
74
+ this.handleAriaLive(isFocused);
75
+ mirrorEmit(this, ['change', 'tctChange'], { index: logicalIndex + 1 });
76
+ if (isPaginationFocused) {
77
+ this.paginationBtns[logicalIndex].focus({ preventScroll: true });
78
+ }
79
+ else if (isCarouselFocused)
80
+ swiper.slides[swiper.activeIndex].focus({
81
+ preventScroll: true,
82
+ });
83
+ },
84
+ afterInit: swiper => {
85
+ var _a;
86
+ this.swiper = swiper;
87
+ (_a = this.activePane) === null || _a === void 0 ? void 0 : _a.addEventListener('popoverStateChanged', this.handlePopovers);
88
+ },
89
+ slideChangeTransitionEnd: () => {
90
+ var _a;
91
+ (_a = this.activePane) === null || _a === void 0 ? void 0 : _a.addEventListener('popoverStateChanged', this.handlePopovers);
92
+ },
93
+ slideChangeTransitionStart: () => {
94
+ var _a;
95
+ (_a = this.activePane) === null || _a === void 0 ? void 0 : _a.removeEventListener('popoverStateChanged', this.handlePopovers);
96
+ },
97
+ },
98
+ };
99
+ this.fullWidthDisplayOptions = {
100
+ slidesPerView: 1,
101
+ spaceBetween: 100,
102
+ ...this.universalCarouselOptions,
103
+ };
104
+ };
52
105
  this.configureCarousel = (carouselWrapper, carouselOptions) => {
53
- var _a, _b, _c, _d;
106
+ var _a, _b, _c;
54
107
  // Disconnect observer to prevent infinite loop from Swiper's internal DOM changes (e.g. loop mode)
55
108
  (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
56
109
  if (!!this.swiper) {
@@ -65,11 +118,11 @@ export class Q2Carousel {
65
118
  // fires during construction and may overwrite this.index
66
119
  const targetIndex = this.realIndex;
67
120
  new Swiper(carouselWrapper, carouselOptions);
68
- (_b = this.swiper) === null || _b === void 0 ? void 0 : _b.slideToLoop(targetIndex, 0);
121
+ this.slideToPane(targetIndex, 0);
69
122
  // Ensure popover listener is on the active pane after initial positioning
70
- (_c = this.activePane) === null || _c === void 0 ? void 0 : _c.addEventListener('popoverStateChanged', this.handlePopovers);
123
+ (_b = this.activePane) === null || _b === void 0 ? void 0 : _b.addEventListener('popoverStateChanged', this.handlePopovers);
71
124
  if (this.autoPlayInProgress)
72
- (_d = this.swiper) === null || _d === void 0 ? void 0 : _d.autoplay.start();
125
+ (_c = this.swiper) === null || _c === void 0 ? void 0 : _c.autoplay.start();
73
126
  this.managePaneHeightObserver();
74
127
  // Re-observe after Swiper's DOM changes have settled
75
128
  requestAnimationFrame(() => {
@@ -77,6 +130,15 @@ export class Q2Carousel {
77
130
  (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.observe(this.hostElement, { childList: true, subtree: true });
78
131
  });
79
132
  };
133
+ this.getPaginationLabel = (index) => {
134
+ const pane = this.paneArray.find(pane => pane.index === index);
135
+ const paneLabel = (pane === null || pane === void 0 ? void 0 : pane.label) || (pane === null || pane === void 0 ? void 0 : pane.getAttribute('label'));
136
+ const itemDescription = loc('tecton.element.carousel.itemDescription', [
137
+ (index + 1).toString(),
138
+ this.paneCount.toString(),
139
+ ]);
140
+ return paneLabel ? `${loc(paneLabel)}, ${itemDescription}` : itemDescription;
141
+ };
80
142
  this.handleAutoPlayPause = (action) => {
81
143
  var _a;
82
144
  if (!this.autoPlay)
@@ -107,7 +169,7 @@ export class Q2Carousel {
107
169
  }
108
170
  };
109
171
  this.keydownHandler = (event) => {
110
- var _a, _b, _c, _d;
172
+ var _a, _b;
111
173
  switch (event.key) {
112
174
  case 'ArrowRight':
113
175
  event.preventDefault();
@@ -119,11 +181,11 @@ export class Q2Carousel {
119
181
  break;
120
182
  case 'Home':
121
183
  event.preventDefault();
122
- (_c = this.swiper) === null || _c === void 0 ? void 0 : _c.slideToLoop(0);
184
+ this.slideToPane(0);
123
185
  break;
124
186
  case 'End':
125
187
  event.preventDefault();
126
- (_d = this.swiper) === null || _d === void 0 ? void 0 : _d.slideToLoop(this.paneCount - 1);
188
+ this.slideToPane(this.paneCount - 1);
127
189
  break;
128
190
  }
129
191
  };
@@ -177,6 +239,17 @@ export class Q2Carousel {
177
239
  return;
178
240
  this.carouselWrapperWidth = this.carouselWrapper.clientWidth;
179
241
  };
242
+ /**
243
+ * Swiper's `slideToLoop` snaps by real (logical) index but only exists when loop mode is on.
244
+ * For non-looped carousels, `slideTo` targets the same logical index directly since the DOM
245
+ * has no duplicates.
246
+ */
247
+ this.slideToPane = (index, speed) => {
248
+ if (!this.swiper)
249
+ return;
250
+ const fn = this.loop !== false ? this.swiper.slideToLoop : this.swiper.slideTo;
251
+ speed === undefined ? fn.call(this.swiper, index) : fn.call(this.swiper, index, speed);
252
+ };
180
253
  /**
181
254
  * Swiper's loop mode needs enough DOM slides on both sides of a centered active slide. For
182
255
  * two-pane full-width carousels and 3 to 5 pane peek carousels, we double the pane set in the
@@ -185,11 +258,15 @@ export class Q2Carousel {
185
258
  * logical index changes are mapped back to the real-pane range via `modulo paneCount`.
186
259
  */
187
260
  this.syncPaneDuplicates = () => {
261
+ const existingDuplicates = Array.from(this.hostElement.querySelectorAll('q2-carousel-pane[data-q2-pane-duplicate]'));
262
+ existingDuplicates.forEach(node => node.remove());
263
+ // Duplicates only exist to satisfy Swiper's loop-mode minimum slide count.
264
+ // Non-looped carousels navigate their real panes directly.
265
+ if (this.loop === false)
266
+ return;
188
267
  const realPanes = this.paneArray;
189
268
  const realCount = realPanes.length;
190
269
  const needsDuplicates = realCount === 2 || (!this.useFullWidthPanes && realCount >= 3 && realCount <= 5);
191
- const existingDuplicates = Array.from(this.hostElement.querySelectorAll('q2-carousel-pane[data-q2-pane-duplicate]'));
192
- existingDuplicates.forEach(node => node.remove());
193
270
  if (!needsDuplicates || realCount === 0)
194
271
  return;
195
272
  const parent = realPanes[0].parentElement;
@@ -271,7 +348,8 @@ export class Q2Carousel {
271
348
  return (h("div", { class: insufficientPanesContainerClasses.join(' ') }, h("div", { class: "insufficient-panes-icon-wrapper" }, h("q2-icon", { type: "warning" })), h("p", { class: "insufficient-panes-header" }, h("strong", null, loc('tecton.element.carousel.insufficientPanesMessageHeader'))), h("p", { class: "insufficient-panes-body" }, loc('tecton.element.carousel.insufficientPanesMessageBody'))));
272
349
  };
273
350
  this.renderNextNavBtn = () => {
274
- return (h("div", { class: "next-btn" }, h("button", { type: "button", class: "q2-carousel-navigation-button q2-carousel-navigation-button-next", "aria-label": loc('tecton.element.carousel.nextItemLabel'), onClick: () => { var _a; return (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slideNext(); } }, h("q2-icon", { type: "arrow-right" }))));
351
+ const disabled = this.loop === false && this.realIndex >= this.paneCount - 1;
352
+ return (h("div", { class: "next-btn" }, h("q2-btn", { class: "q2-carousel-navigation-button q2-carousel-navigation-button-next", intent: "workflow-primary", label: loc('tecton.element.carousel.nextItemLabel'), hideLabel: true, disabled: disabled || undefined, onTctClick: () => { var _a; return (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slideNext(); } }, h("q2-icon", { type: "arrow-right" }))));
275
353
  };
276
354
  this.renderPaginationArea = () => {
277
355
  const { useDynamicPaginationDots, realIndex, paneCount } = this;
@@ -290,14 +368,12 @@ export class Q2Carousel {
290
368
  const isWithinTwoOfActive = Math.abs(index - realIndex) <= 2 && !isActive;
291
369
  if (isWithinTwoOfActive)
292
370
  btnClasses = [...btnClasses, 'active-adjacent'];
293
- return (h("button", { type: "button", role: "tab", tabIndex: isActive ? undefined : -1, "aria-selected": `${isActive}`, class: btnClasses.join(' '), onClick: () => { var _a; return (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slideToLoop(index); }, onKeyDown: this.keydownHandler, "aria-label": loc('tecton.element.carousel.itemDescription', [
294
- (index + 1).toString(),
295
- paneCount.toString(),
296
- ]) }));
371
+ return (h("button", { type: "button", role: "tab", tabIndex: isActive ? undefined : -1, "aria-selected": `${isActive}`, class: btnClasses.join(' '), onClick: () => this.slideToPane(index), onKeyDown: this.keydownHandler, "aria-label": this.getPaginationLabel(index) }));
297
372
  })));
298
373
  };
299
374
  this.renderPrevNavBtn = () => {
300
- return (h("div", { class: "prev-btn" }, h("button", { type: "button", class: "q2-carousel-navigation-button q2-carousel-navigation-button-prev", "aria-label": loc('tecton.element.carousel.previousItemLabel'), onClick: () => { var _a; return (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slidePrev(); } }, h("q2-icon", { type: "arrow-left" }))));
375
+ const disabled = this.loop === false && this.realIndex <= 0;
376
+ return (h("div", { class: "prev-btn" }, h("q2-btn", { class: "q2-carousel-navigation-button q2-carousel-navigation-button-prev", intent: "workflow-primary", label: loc('tecton.element.carousel.previousItemLabel'), hideLabel: true, disabled: disabled || undefined, onTctClick: () => { var _a; return (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slidePrev(); } }, h("q2-icon", { type: "arrow-left" }))));
301
377
  };
302
378
  }
303
379
  // #endregion
@@ -324,53 +400,7 @@ export class Q2Carousel {
324
400
  if (!hasValidChildren(this.hostElement, 'q2-carousel-pane')) {
325
401
  filterChildren(this.hostElement, 'q2-carousel-pane');
326
402
  }
327
- this.universalCarouselOptions = {
328
- centeredSlides: true,
329
- loop: true,
330
- focusableElements: 'q2-btn, q2-dropdown, q2-item, q2-list, a, input, select, textarea, button, video, label, option',
331
- autoplay: this.autoPlay,
332
- modules: [Autoplay],
333
- on: {
334
- realIndexChange: swiper => {
335
- // When peek mode pads the DOM with duplicates (3- or 4-pane carousels),
336
- // `swiper.realIndex` can point at a duplicate; map it back to the 0..paneCount-1
337
- // range so `this.index`, pagination dots, and emitted events stay logical.
338
- const logicalIndex = this.paneCount > 0 ? swiper.realIndex % this.paneCount : swiper.realIndex;
339
- this.index = logicalIndex + 1;
340
- this.updateCarouselPaneProps();
341
- const isPaginationFocused = !!document.activeElement.closest(`#q2-carousel-${this.guid} .q2-carousel-page-indicator`);
342
- const isCarouselFocused = !!document.activeElement.closest(`#q2-carousel-${this.guid} q2-carousel-pane`);
343
- const isFocused = isPaginationFocused || isCarouselFocused;
344
- this.handleAriaLive(isFocused);
345
- mirrorEmit(this, ['change', 'tctChange'], { index: logicalIndex + 1 });
346
- if (isPaginationFocused) {
347
- this.paginationBtns[logicalIndex].focus({ preventScroll: true });
348
- }
349
- else if (isCarouselFocused)
350
- swiper.slides[swiper.activeIndex].focus({
351
- preventScroll: true,
352
- });
353
- },
354
- afterInit: swiper => {
355
- var _a;
356
- this.swiper = swiper;
357
- (_a = this.activePane) === null || _a === void 0 ? void 0 : _a.addEventListener('popoverStateChanged', this.handlePopovers);
358
- },
359
- slideChangeTransitionEnd: () => {
360
- var _a;
361
- (_a = this.activePane) === null || _a === void 0 ? void 0 : _a.addEventListener('popoverStateChanged', this.handlePopovers);
362
- },
363
- slideChangeTransitionStart: () => {
364
- var _a;
365
- (_a = this.activePane) === null || _a === void 0 ? void 0 : _a.removeEventListener('popoverStateChanged', this.handlePopovers);
366
- },
367
- },
368
- };
369
- this.fullWidthDisplayOptions = {
370
- slidesPerView: 1,
371
- spaceBetween: 100,
372
- ...this.universalCarouselOptions,
373
- };
403
+ this.buildCarouselOptions();
374
404
  }
375
405
  componentDidLoad() {
376
406
  this.setCarouselWrapperWidth();
@@ -385,8 +415,7 @@ export class Q2Carousel {
385
415
  // #endregion
386
416
  // #region Listeners
387
417
  carouselPaneClicked(event) {
388
- var _a;
389
- (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slideToLoop(event.detail.paneIndex);
418
+ this.slideToPane(event.detail.paneIndex);
390
419
  }
391
420
  delegateFocus(event) {
392
421
  var _a, _b;
@@ -402,12 +431,12 @@ export class Q2Carousel {
402
431
  * @testOnly
403
432
  */
404
433
  async selectCarouselPane(index) {
405
- var _a, _b, _c;
434
+ var _a, _b;
406
435
  if (index > this.paneCount)
407
436
  return;
408
437
  const actualIndex = index > 0 ? index - 1 : 0;
409
- (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slideToLoop(actualIndex);
410
- const activeSlide = (_b = this.swiper) === null || _b === void 0 ? void 0 : _b.slides[(_c = this.swiper) === null || _c === void 0 ? void 0 : _c.activeIndex];
438
+ this.slideToPane(actualIndex);
439
+ const activeSlide = (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slides[(_b = this.swiper) === null || _b === void 0 ? void 0 : _b.activeIndex];
411
440
  activeSlide === null || activeSlide === void 0 ? void 0 : activeSlide.focus({ preventScroll: true });
412
441
  }
413
442
  /**
@@ -441,6 +470,8 @@ export class Q2Carousel {
441
470
  this.revampCarousel();
442
471
  }
443
472
  revampCarousel() {
473
+ this.buildCarouselOptions();
474
+ this.syncPaneDuplicates();
444
475
  this.configureCarousel(this.carouselWrapper, this.activeCarouselOptions);
445
476
  }
446
477
  indexChanged(newIndex) {
@@ -452,7 +483,7 @@ export class Q2Carousel {
452
483
  // to programmatically slide — otherwise the watcher fights our own realIndexChange mapping.
453
484
  const swiperLogicalIndex = this.paneCount > 0 ? this.swiper.realIndex % this.paneCount : this.swiper.realIndex;
454
485
  if (newIndex !== swiperLogicalIndex + 1) {
455
- this.swiper.slideToLoop(this.realIndex);
486
+ this.slideToPane(this.realIndex);
456
487
  }
457
488
  }
458
489
  // #endregion
@@ -530,7 +561,7 @@ export class Q2Carousel {
530
561
  paginationWrapperClasses.push('evenly-space');
531
562
  if (showNavigationArrows && arrowPosition === 'hug')
532
563
  paginationWrapperClasses.push('center-space');
533
- return (h(Host, { key: 'e99de21a2de9706b1ff5fcd8dd2349c99920198b', id: `q2-carousel-${this.guid}`, class: "q2-carousel-instance" }, insufficientPanes ? (this.renderInsufficientPanesDisplay()) : (h(Fragment, null, paneCount > 1 && (h("div", { class: paginationWrapperClasses.join(' ') }, showNavigationArrows &&
564
+ return (h(Host, { key: '2c623516b2b0ce7800440110cde323bdf065abc1', id: `q2-carousel-${this.guid}`, class: "q2-carousel-instance" }, insufficientPanes ? (this.renderInsufficientPanesDisplay()) : (h(Fragment, null, paneCount > 1 && (h("div", { class: paginationWrapperClasses.join(' ') }, showNavigationArrows &&
534
565
  ['bottom', 'hug'].includes(arrowPosition) &&
535
566
  this.renderPrevNavBtn(), h("div", { class: "q2-carousel-control-center-tray" }, !hidePagination && this.renderPaginationArea(), autoPlay && this.renderAutoPlayBtn()), showNavigationArrows &&
536
567
  ['bottom', 'hug'].includes(arrowPosition) &&
@@ -792,6 +823,25 @@ export class Q2Carousel {
792
823
  "attribute": "label",
793
824
  "defaultValue": "'tecton.element.carousel.ariaLabel'"
794
825
  },
826
+ "loop": {
827
+ "type": "boolean",
828
+ "mutable": false,
829
+ "complexType": {
830
+ "original": "boolean",
831
+ "resolved": "boolean",
832
+ "references": {}
833
+ },
834
+ "required": false,
835
+ "optional": false,
836
+ "docs": {
837
+ "tags": [],
838
+ "text": "Enables continuous looping so navigating past the last pane wraps to the first (and vice versa). Defaults to enabled; pass `false` to disable."
839
+ },
840
+ "getter": false,
841
+ "setter": false,
842
+ "reflect": true,
843
+ "attribute": "loop"
844
+ },
795
845
  "showNavigationArrows": {
796
846
  "type": "boolean",
797
847
  "mutable": false,
@@ -944,6 +994,9 @@ export class Q2Carousel {
944
994
  }, {
945
995
  "propName": "autoPlay",
946
996
  "methodName": "revampCarousel"
997
+ }, {
998
+ "propName": "loop",
999
+ "methodName": "revampCarousel"
947
1000
  }, {
948
1001
  "propName": "index",
949
1002
  "methodName": "indexChanged"
@@ -50,6 +50,10 @@ const VARIANTS = [
50
50
  name: 'hide-pagination',
51
51
  html: carousel('hide-pagination show-navigation-arrows'),
52
52
  },
53
+ {
54
+ name: 'loop-disabled',
55
+ html: carousel('loop="false" show-navigation-arrows'),
56
+ },
53
57
  ];
54
58
  // Focus is exercised on the with-arrows variant, which has all three interactive
55
59
  // regions present: navigation arrows, pagination indicator (tablist), and the
@@ -82,10 +86,7 @@ const focusIndicatorCase = (variant, theme) => {
82
86
  const focusPaneCase = (variant, theme) => {
83
87
  test(`q2-carousel--${variant.name}--focus-pane — ${theme}`, async ({ page }) => {
84
88
  await setupPage(page, variant.html, { theme, setupLoc: true });
85
- await page.keyboard.press('Tab');
86
- await page.keyboard.press('Tab');
87
- await page.keyboard.press('Tab');
88
- await page.keyboard.press('Tab');
89
+ await page.locator('q2-carousel-pane.swiper-slide-active').focus();
89
90
  await expect(page).toHaveScreenshot(`q2-carousel--${variant.name}--focus-pane--${theme}.png`);
90
91
  });
91
92
  };
@@ -65,6 +65,28 @@ button {
65
65
  visibility: hidden;
66
66
  }
67
67
 
68
+ @container style(--t-prefers-motion: "reduced") {
69
+ *,
70
+ *::before,
71
+ *::after {
72
+ animation-duration: 0.01ms !important;
73
+ transition-duration: 0.01ms !important;
74
+ animation-delay: 0ms !important;
75
+ transition-delay: 0ms !important;
76
+ }
77
+ }
78
+ @container (not style(--t-prefers-motion: "normal")) and (not style(--t-prefers-motion: "reduced")) {
79
+ @media (prefers-reduced-motion: reduce) {
80
+ *,
81
+ *::before,
82
+ *::after {
83
+ animation-duration: 0.01ms !important;
84
+ transition-duration: 0.01ms !important;
85
+ animation-delay: 0ms !important;
86
+ transition-delay: 0ms !important;
87
+ }
88
+ }
89
+ }
68
90
  /**
69
91
  * @prop --tct-carousel-pane-border-color: (<color>) Controls the border color of the carousel pane container.
70
92
  * @prop --tct-carousel-pane-border-radius: (<length-percentage>) Controls the corner radius of the carousel pane container.
@@ -65,6 +65,28 @@ button {
65
65
  visibility: hidden;
66
66
  }
67
67
 
68
+ @container style(--t-prefers-motion: "reduced") {
69
+ *,
70
+ *::before,
71
+ *::after {
72
+ animation-duration: 0.01ms !important;
73
+ transition-duration: 0.01ms !important;
74
+ animation-delay: 0ms !important;
75
+ transition-delay: 0ms !important;
76
+ }
77
+ }
78
+ @container (not style(--t-prefers-motion: "normal")) and (not style(--t-prefers-motion: "reduced")) {
79
+ @media (prefers-reduced-motion: reduce) {
80
+ *,
81
+ *::before,
82
+ *::after {
83
+ animation-duration: 0.01ms !important;
84
+ transition-duration: 0.01ms !important;
85
+ animation-delay: 0ms !important;
86
+ transition-delay: 0ms !important;
87
+ }
88
+ }
89
+ }
68
90
  /**
69
91
  * @prop --tct-area-chart-width?: (<length-percentage>) Controls the width of the area chart.
70
92
  * @prop --tct-area-chart-height?: (<length-percentage>) Controls the height of the area chart.
@@ -65,6 +65,28 @@ button {
65
65
  visibility: hidden;
66
66
  }
67
67
 
68
+ @container style(--t-prefers-motion: "reduced") {
69
+ *,
70
+ *::before,
71
+ *::after {
72
+ animation-duration: 0.01ms !important;
73
+ transition-duration: 0.01ms !important;
74
+ animation-delay: 0ms !important;
75
+ transition-delay: 0ms !important;
76
+ }
77
+ }
78
+ @container (not style(--t-prefers-motion: "normal")) and (not style(--t-prefers-motion: "reduced")) {
79
+ @media (prefers-reduced-motion: reduce) {
80
+ *,
81
+ *::before,
82
+ *::after {
83
+ animation-duration: 0.01ms !important;
84
+ transition-duration: 0.01ms !important;
85
+ animation-delay: 0ms !important;
86
+ transition-delay: 0ms !important;
87
+ }
88
+ }
89
+ }
68
90
  /**
69
91
  * @prop --tct-bar-chart-width?: (<length-percentage>) Controls the width of the bar chart.
70
92
  * @prop --tct-bar-chart-height?: (<length-percentage>) Controls the height of the bar chart.
@@ -65,6 +65,28 @@ button {
65
65
  visibility: hidden;
66
66
  }
67
67
 
68
+ @container style(--t-prefers-motion: "reduced") {
69
+ *,
70
+ *::before,
71
+ *::after {
72
+ animation-duration: 0.01ms !important;
73
+ transition-duration: 0.01ms !important;
74
+ animation-delay: 0ms !important;
75
+ transition-delay: 0ms !important;
76
+ }
77
+ }
78
+ @container (not style(--t-prefers-motion: "normal")) and (not style(--t-prefers-motion: "reduced")) {
79
+ @media (prefers-reduced-motion: reduce) {
80
+ *,
81
+ *::before,
82
+ *::after {
83
+ animation-duration: 0.01ms !important;
84
+ transition-duration: 0.01ms !important;
85
+ animation-delay: 0ms !important;
86
+ transition-delay: 0ms !important;
87
+ }
88
+ }
89
+ }
68
90
  /**
69
91
  * @prop --tct-chart-donut-text-color: (<color>) Controls the text color of the chart donut center card content.
70
92
  * @prop --tct-chart-donut-focus-visible-box-shadow: (*) Controls the box shadow of the chart container when focused via keyboard.
@@ -186,11 +208,11 @@ q2-icon {
186
208
  }
187
209
 
188
210
  .name {
189
- font-size: var(--tct-chart-donut-name-font-size, var(--t-chart-donut-name-font-size, 14px));
211
+ font-size: var(--tct-chart-donut-name-font-size, var(--t-chart-donut-name-font-size, var(--const-px-14, 14px)));
190
212
  }
191
213
 
192
214
  .value {
193
- font-size: var(--tct-chart-donut-value-font-size, var(--t-chart-donut-value-font-size, 21px));
215
+ font-size: var(--tct-chart-donut-value-font-size, var(--t-chart-donut-value-font-size, var(--const-px-21, 21px)));
194
216
  }
195
217
 
196
218
  figure {
@@ -1,6 +1,6 @@
1
1
  import { expect } from "@playwright/test";
2
2
  import { test } from "@stencil/playwright";
3
- import { setupPage, THEMES } from "../../../utils/test/vr-helpers";
3
+ import { setupPage, THEMES, FONT_SCALE_PX, FONT_SCALE_SUFFIX } from "../../../utils/test/vr-helpers";
4
4
  const SHORT_DATA = [
5
5
  { id: 'food', name: 'Food & Dining', value: 2796.59, icon: 'silverware' },
6
6
  { id: 'uncategorized', name: 'Uncategorized', value: 2702.52, icon: 'question' },
@@ -148,3 +148,15 @@ test.describe('q2-chart-donut — variants × themes', () => {
148
148
  }
149
149
  }
150
150
  });
151
+ // 'with-summary' renders center-card name + value, exercising
152
+ // --tct-chart-donut-name-font-size and --tct-chart-donut-value-font-size.
153
+ const WITH_SUMMARY_VARIANT = VARIANTS.find(v => v.name === 'with-summary');
154
+ test.describe(`q2-chart-donut — scaled font size × themes`, () => {
155
+ for (const theme of THEMES) {
156
+ test(`q2-chart-donut--with-summary--resting--${FONT_SCALE_SUFFIX} — ${theme}`, async ({ page }) => {
157
+ await setupPage(page, WITH_SUMMARY_VARIANT.html, { theme, setupLoc: true, fontSizePx: FONT_SCALE_PX });
158
+ await setChartData(page, SHORT_DATA);
159
+ await expect(page).toHaveScreenshot(`q2-chart-donut--with-summary--resting--${FONT_SCALE_SUFFIX}--${theme}.png`);
160
+ });
161
+ }
162
+ });
@@ -65,6 +65,28 @@ button {
65
65
  visibility: hidden;
66
66
  }
67
67
 
68
+ @container style(--t-prefers-motion: "reduced") {
69
+ *,
70
+ *::before,
71
+ *::after {
72
+ animation-duration: 0.01ms !important;
73
+ transition-duration: 0.01ms !important;
74
+ animation-delay: 0ms !important;
75
+ transition-delay: 0ms !important;
76
+ }
77
+ }
78
+ @container (not style(--t-prefers-motion: "normal")) and (not style(--t-prefers-motion: "reduced")) {
79
+ @media (prefers-reduced-motion: reduce) {
80
+ *,
81
+ *::before,
82
+ *::after {
83
+ animation-duration: 0.01ms !important;
84
+ transition-duration: 0.01ms !important;
85
+ animation-delay: 0ms !important;
86
+ transition-delay: 0ms !important;
87
+ }
88
+ }
89
+ }
68
90
  /**
69
91
  * @prop --tct-checkbox-margin: (<length-percentage>+) Controls the outer margin of the checkbox host.
70
92
  * @prop --tct-checkbox-margin-top?: (<length-percentage>) Controls the optional top margin of the checkbox host when --tct-checkbox-margin is not set.
@@ -207,7 +229,7 @@ button {
207
229
  --comp-checkbox-default-column-gap: var(--app-scale-2x, 10px);
208
230
  --comp-checkbox-default-row-gap: 0;
209
231
  --comp-checkbox-default-gap: var(--comp-checkbox-default-row-gap) var(--comp-checkbox-default-column-gap);
210
- --comp-checkbox-label-line-height: var(--tct-checkbox-label-line-height, 24px);
232
+ --comp-checkbox-label-line-height: var(--tct-checkbox-label-line-height, var(--const-px-24, 24px));
211
233
  --comp-checkbox-tween: var(--tct-tween-1, var(--app-tween-1, 0.2s ease));
212
234
  --comp-checkbox-toggle-width: var(--tct-checkbox-toggle-width, var(--t-checkbox-toggle-width, 38px));
213
235
  --comp-checkbox-toggle-track-fill: var(--tct-checkbox-toggle-track-fill, var(--tct-checkbox-toggle-track-color, transparent));
@@ -1,6 +1,6 @@
1
1
  import { expect } from "@playwright/test";
2
2
  import { test } from "@stencil/playwright";
3
- import { setupPage, THEMES } from "../../../utils/test/vr-helpers";
3
+ import { setupPage, THEMES, FONT_SCALE_PX, FONT_SCALE_SUFFIX } from "../../../utils/test/vr-helpers";
4
4
  const VARIANTS = [
5
5
  { name: 'default-unchecked', html: `<q2-checkbox label="Option"></q2-checkbox>` },
6
6
  { name: 'default-checked', html: `<q2-checkbox label="Option" checked></q2-checkbox>` },
@@ -66,3 +66,13 @@ test.describe('q2-checkbox — variants × themes', () => {
66
66
  }
67
67
  }
68
68
  });
69
+ // 'default-unchecked' exercises --tct-checkbox-label-line-height (label text line-height).
70
+ const DEFAULT_UNCHECKED = VARIANTS.find(v => v.name === 'default-unchecked');
71
+ test.describe(`q2-checkbox — scaled font size × themes`, () => {
72
+ for (const theme of THEMES) {
73
+ test(`q2-checkbox--default-unchecked--resting--${FONT_SCALE_SUFFIX} — ${theme}`, async ({ page }) => {
74
+ await setupPage(page, DEFAULT_UNCHECKED.html, { theme, fontSizePx: FONT_SCALE_PX });
75
+ await expect(page).toHaveScreenshot(`q2-checkbox--default-unchecked--resting--${FONT_SCALE_SUFFIX}--${theme}.png`);
76
+ });
77
+ }
78
+ });
@@ -65,6 +65,28 @@ button {
65
65
  visibility: hidden;
66
66
  }
67
67
 
68
+ @container style(--t-prefers-motion: "reduced") {
69
+ *,
70
+ *::before,
71
+ *::after {
72
+ animation-duration: 0.01ms !important;
73
+ transition-duration: 0.01ms !important;
74
+ animation-delay: 0ms !important;
75
+ transition-delay: 0ms !important;
76
+ }
77
+ }
78
+ @container (not style(--t-prefers-motion: "normal")) and (not style(--t-prefers-motion: "reduced")) {
79
+ @media (prefers-reduced-motion: reduce) {
80
+ *,
81
+ *::before,
82
+ *::after {
83
+ animation-duration: 0.01ms !important;
84
+ transition-duration: 0.01ms !important;
85
+ animation-delay: 0ms !important;
86
+ transition-delay: 0ms !important;
87
+ }
88
+ }
89
+ }
68
90
  /**
69
91
  * @prop --tct-checkbox-group-margin: (<length-percentage>+) Controls the outer margin of the checkbox-group host.
70
92
  * @prop --tct-checkbox-group-margin-top: (<length-percentage>) Controls the top margin of the checkbox-group host when --tct-checkbox-group-margin is not set.
@@ -149,7 +171,7 @@ legend.sr-only {
149
171
  .optional-tag {
150
172
  margin-left: var(--tct-checkbox-group-label-optional-margin-left, var(--app-scale-1x, 5px));
151
173
  color: var(--tct-checkbox-group-label-optional-color, var(--t-checkbox-group-label-optional-color, var(--tct-a11y-color, var(--t-a11y-color, var(--tct-a11y-gray-color, var(--t-a11y-gray-color, var(--tct-gray-7, var(--t-gray-7, var(--tct-gray-d1, var(--t-gray-d1, var(--app-gray-d1, rgba(77, 77, 77, 0.77))))))))))));
152
- font-size: var(--tct-checkbox-group-label-optional-font-size, 12px);
174
+ font-size: var(--tct-checkbox-group-label-optional-font-size, var(--const-px-12, 12px));
153
175
  font-weight: var(--tct-checkbox-group-label-optional-font-weight, 400);
154
176
  }
155
177
 
@@ -1,6 +1,6 @@
1
1
  import { expect } from "@playwright/test";
2
2
  import { test } from "@stencil/playwright";
3
- import { setupPage, THEMES } from "../../../utils/test/vr-helpers";
3
+ import { setupPage, THEMES, FONT_SCALE_PX, FONT_SCALE_SUFFIX } from "../../../utils/test/vr-helpers";
4
4
  const STANDARD_CHILDREN = `
5
5
  <q2-checkbox label="Option 1" value="opt-1"></q2-checkbox>
6
6
  <q2-checkbox label="Option 2" value="opt-2"></q2-checkbox>
@@ -58,3 +58,13 @@ test.describe('q2-checkbox-group — variants × themes', () => {
58
58
  }
59
59
  }
60
60
  });
61
+ // 'optional' exercises --tct-checkbox-group-label-optional-font-size (.optional-tag).
62
+ const OPTIONAL_VARIANT = VARIANTS.find(v => v.name === 'optional');
63
+ test.describe(`q2-checkbox-group — scaled font size × themes`, () => {
64
+ for (const theme of THEMES) {
65
+ test(`q2-checkbox-group--optional--resting--${FONT_SCALE_SUFFIX} — ${theme}`, async ({ page }) => {
66
+ await setupPage(page, OPTIONAL_VARIANT.html, { theme, fontSizePx: FONT_SCALE_PX });
67
+ await expect(page).toHaveScreenshot(`q2-checkbox-group--optional--resting--${FONT_SCALE_SUFFIX}--${theme}.png`);
68
+ });
69
+ }
70
+ });