q2-tecton-elements 1.72.0 → 1.73.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 (392) hide show
  1. package/dist/bundle-report.json +39545 -34361
  2. package/dist/cjs/{charting-ClN1ldqv.js → charting-CdNTrVBe.js} +80 -0
  3. package/dist/cjs/click-elsewhere_3.cjs.entry.js +81 -14
  4. package/dist/cjs/{dataSample-BYR-wrOn.js → dataSample-B4blhlH4.js} +1 -1
  5. package/dist/cjs/date-picker-helpers-UYvPn98R.js +257 -0
  6. package/dist/cjs/{index-BY3aao8R.js → index-BqyWHpNu.js} +1 -1
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/q2-action-group.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-action-sheet.cjs.entry.js +98 -18
  10. package/dist/cjs/q2-avatar.cjs.entry.js +34 -1
  11. package/dist/cjs/q2-badge_2.cjs.entry.js +3 -3
  12. package/dist/cjs/q2-btn_2.cjs.entry.js +2 -2
  13. package/dist/cjs/q2-calendar.cjs.entry.js +9 -4
  14. package/dist/cjs/q2-card-image.cjs.entry.js +3 -3
  15. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  17. package/dist/cjs/q2-carousel.cjs.entry.js +20 -6
  18. package/dist/cjs/q2-chart-area.cjs.entry.js +38 -7
  19. package/dist/cjs/q2-chart-bar.cjs.entry.js +39 -8
  20. package/dist/cjs/q2-chart-donut.cjs.entry.js +31 -13
  21. package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-checkbox_2.cjs.entry.js +8 -5
  23. package/dist/cjs/q2-context.cjs.entry.js +4 -4
  24. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-data-table.cjs.entry.js +7 -7
  26. package/dist/cjs/q2-date-calendar.cjs.entry.js +452 -0
  27. package/dist/cjs/q2-date-picker_2.cjs.entry.js +968 -0
  28. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  29. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-dropdown.cjs.entry.js +3 -3
  31. package/dist/cjs/q2-editable-field.cjs.entry.js +20 -7
  32. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-file-picker.cjs.entry.js +2 -2
  34. package/dist/cjs/q2-form.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-item.cjs.entry.js +20 -2
  38. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
  40. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-message.cjs.entry.js +3 -3
  42. package/dist/cjs/q2-meter.cjs.entry.js +2 -2
  43. package/dist/cjs/q2-modal.cjs.entry.js +2 -2
  44. package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
  45. package/dist/cjs/q2-mutation-observer.cjs.entry.js +1 -1
  46. package/dist/cjs/q2-option.cjs.entry.js +1 -1
  47. package/dist/cjs/q2-otp.cjs.entry.js +5 -5
  48. package/dist/cjs/q2-pagination.cjs.entry.js +12 -6
  49. package/dist/cjs/q2-pill.cjs.entry.js +8 -5
  50. package/dist/cjs/q2-radio-group.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-radio.cjs.entry.js +2 -2
  52. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  53. package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
  54. package/dist/cjs/q2-search.cjs.entry.js +3 -3
  55. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  56. package/dist/cjs/q2-select.cjs.entry.js +8 -4
  57. package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
  58. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  59. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  60. package/dist/cjs/q2-surface.cjs.entry.js +1 -1
  61. package/dist/cjs/q2-tab-container.cjs.entry.js +2 -2
  62. package/dist/cjs/q2-tab-pane.cjs.entry.js +1 -1
  63. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  64. package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
  65. package/dist/cjs/q2-toast.cjs.entry.js +1 -1
  66. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  67. package/dist/cjs/{sectorHelper-9TWL-3dw.js → sectorHelper-CxhDl5ql.js} +1 -1
  68. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  69. package/dist/collection/collection-manifest.json +2 -0
  70. package/dist/collection/components/q2-action-sheet/q2-action-sheet.css +52 -0
  71. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +98 -18
  72. package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.vr.js +124 -0
  73. package/dist/collection/components/q2-avatar/q2-avatar.js +34 -1
  74. package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js +79 -4
  75. package/dist/collection/components/q2-btn/q2-btn.css +84 -136
  76. package/dist/collection/components/q2-btn/q2-btn.js +10 -4
  77. package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js +99 -43
  78. package/dist/collection/components/q2-calendar/q2-calendar.js +16 -5
  79. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  80. package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js +3 -13
  81. package/dist/collection/components/q2-card-image/q2-card-image.js +2 -2
  82. package/dist/collection/components/q2-carousel/q2-carousel.js +19 -5
  83. package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js +32 -0
  84. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  85. package/dist/collection/components/q2-chart-area/q2-chart-area.css +11 -0
  86. package/dist/collection/components/q2-chart-area/q2-chart-area.js +53 -7
  87. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js +14 -0
  88. package/dist/collection/components/q2-chart-bar/q2-chart-bar.css +11 -0
  89. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +50 -4
  90. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js +14 -0
  91. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +30 -10
  92. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js +25 -0
  93. package/dist/collection/components/q2-checkbox/q2-checkbox.js +6 -3
  94. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +6 -3
  95. package/dist/collection/components/q2-context/q2-context.js +3 -3
  96. package/dist/collection/components/q2-context/test/q2-context-test.vr.js +3 -3
  97. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  98. package/dist/collection/components/q2-data-table/q2-data-table.css +3 -0
  99. package/dist/collection/components/q2-data-table/q2-data-table.js +5 -5
  100. package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js +47 -0
  101. package/dist/collection/components/q2-date-calendar/q2-date-calendar.css +393 -0
  102. package/dist/collection/components/q2-date-calendar/q2-date-calendar.js +1022 -0
  103. package/dist/collection/components/q2-date-calendar/test/q2-date-calendar-test.vr.js +111 -0
  104. package/dist/collection/components/q2-date-picker/q2-date-picker.css +138 -0
  105. package/dist/collection/components/q2-date-picker/q2-date-picker.js +2010 -0
  106. package/dist/collection/components/q2-date-picker/test/q2-date-picker-test.vr.js +179 -0
  107. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  108. package/dist/collection/components/q2-dropdown/q2-dropdown.js +5 -5
  109. package/dist/collection/components/q2-editable-field/q2-editable-field.js +27 -8
  110. package/dist/collection/components/q2-example/q2-example.js +1 -1
  111. package/dist/collection/components/q2-file-picker/q2-file-picker.js +1 -1
  112. package/dist/collection/components/q2-form/q2-form.js +1 -1
  113. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  114. package/dist/collection/components/q2-input/formatting/phone-number-formats.js +1 -1
  115. package/dist/collection/components/q2-input/q2-input.js +6 -3
  116. package/dist/collection/components/q2-item/q2-item.js +19 -1
  117. package/dist/collection/components/q2-item/test/q2-item-test.vr.js +2 -2
  118. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  119. package/dist/collection/components/q2-list/q2-list.js +1 -1
  120. package/dist/collection/components/q2-message/q2-message.css +1 -1
  121. package/dist/collection/components/q2-message/q2-message.js +1 -1
  122. package/dist/collection/components/q2-message/test/q2-message-test.vr.js +11 -2
  123. package/dist/collection/components/q2-meter/q2-meter.js +1 -1
  124. package/dist/collection/components/q2-modal/q2-modal.js +1 -1
  125. package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js +7 -7
  126. package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
  127. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  128. package/dist/collection/components/q2-option-list/q2-option-list.js +36 -4
  129. package/dist/collection/components/q2-otp/q2-otp.js +4 -4
  130. package/dist/collection/components/q2-pagination/q2-pagination.css +17 -0
  131. package/dist/collection/components/q2-pagination/q2-pagination.js +10 -4
  132. package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js +39 -0
  133. package/dist/collection/components/q2-pill/q2-pill.css +14 -10
  134. package/dist/collection/components/q2-pill/q2-pill.js +6 -3
  135. package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js +25 -0
  136. package/dist/collection/components/q2-popover/q2-popover.css +1 -0
  137. package/dist/collection/components/q2-popover/q2-popover.js +43 -8
  138. package/dist/collection/components/q2-radio/q2-radio.js +5 -2
  139. package/dist/collection/components/q2-radio-group/q2-radio-group.js +6 -3
  140. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  141. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  142. package/dist/collection/components/q2-search/q2-search.js +6 -3
  143. package/dist/collection/components/q2-section/q2-section.js +2 -2
  144. package/dist/collection/components/q2-select/q2-select.js +12 -5
  145. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  146. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +1 -1
  147. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  148. package/dist/collection/components/q2-surface/q2-surface.js +1 -1
  149. package/dist/collection/components/q2-surface/test/q2-surface-test.vr.js +2 -2
  150. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  151. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  152. package/dist/collection/components/q2-tag/q2-tag.js +6 -3
  153. package/dist/collection/components/q2-textarea/q2-textarea.js +6 -3
  154. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js +1 -1
  155. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  156. package/dist/collection/utils/chart-keyboard.js +76 -0
  157. package/dist/collection/utils/date-picker/date-picker-helpers.js +239 -0
  158. package/dist/collection/utils/date-picker/date-picker-types.js +1 -0
  159. package/dist/collection/utils/index.js +1 -1
  160. package/dist/components/charting.js +1603 -1532
  161. package/dist/components/dataSample.js +7 -7
  162. package/dist/components/index.js +57 -53
  163. package/dist/components/index2.js +2 -2
  164. package/dist/components/q2-action-sheet.js +224 -103
  165. package/dist/components/q2-avatar2.js +41 -27
  166. package/dist/components/q2-btn2.js +2 -2
  167. package/dist/components/q2-calendar.js +6 -3
  168. package/dist/components/q2-card-image.js +2 -2
  169. package/dist/components/q2-carousel-pane2.js +3 -3
  170. package/dist/components/q2-carousel.js +37 -24
  171. package/dist/components/q2-chart-area.js +415 -369
  172. package/dist/components/q2-chart-bar.js +193 -148
  173. package/dist/components/q2-chart-donut.js +185 -158
  174. package/dist/components/q2-checkbox-group.js +6 -6
  175. package/dist/components/q2-checkbox2.js +11 -11
  176. package/dist/components/q2-context.js +20 -20
  177. package/dist/components/q2-currency.js +9 -9
  178. package/dist/components/q2-data-table.js +111 -111
  179. package/dist/components/q2-date-calendar.d.ts +11 -0
  180. package/dist/components/q2-date-calendar.js +5 -0
  181. package/dist/components/q2-date-calendar2.js +678 -0
  182. package/dist/components/q2-date-picker.d.ts +11 -0
  183. package/dist/components/q2-date-picker.js +5 -0
  184. package/dist/components/q2-date-picker2.js +875 -0
  185. package/dist/components/q2-detail.js +3 -3
  186. package/dist/components/q2-dropdown.js +17 -17
  187. package/dist/components/q2-editable-field.js +16 -5
  188. package/dist/components/q2-example.js +11 -11
  189. package/dist/components/q2-file-picker.js +1 -1
  190. package/dist/components/q2-form.js +6 -6
  191. package/dist/components/q2-formatted-text.js +2 -2
  192. package/dist/components/q2-input2.js +6 -6
  193. package/dist/components/q2-item2.js +32 -22
  194. package/dist/components/q2-legend2.js +7 -7
  195. package/dist/components/q2-list2.js +6 -6
  196. package/dist/components/q2-message2.js +10 -10
  197. package/dist/components/q2-meter.js +7 -7
  198. package/dist/components/q2-modal.js +22 -22
  199. package/dist/components/q2-month-picker.js +17 -17
  200. package/dist/components/q2-mutation-observer.js +1 -1
  201. package/dist/components/q2-optgroup2.js +7 -7
  202. package/dist/components/q2-option-list2.js +55 -34
  203. package/dist/components/q2-otp.js +8 -8
  204. package/dist/components/q2-pagination.js +70 -68
  205. package/dist/components/q2-pill.js +51 -46
  206. package/dist/components/q2-popover2.js +70 -49
  207. package/dist/components/q2-radio-group.js +7 -7
  208. package/dist/components/q2-radio.js +6 -6
  209. package/dist/components/q2-relative-time.js +1 -1
  210. package/dist/components/q2-resize-observer2.js +1 -1
  211. package/dist/components/q2-search.js +5 -5
  212. package/dist/components/q2-section.js +17 -17
  213. package/dist/components/q2-select2.js +2 -2
  214. package/dist/components/q2-stepper-pane.js +29 -29
  215. package/dist/components/q2-stepper-vertical.js +4 -4
  216. package/dist/components/q2-stepper.js +57 -57
  217. package/dist/components/q2-surface.js +3 -3
  218. package/dist/components/q2-tab-container.js +21 -21
  219. package/dist/components/q2-tab-pane.js +6 -6
  220. package/dist/components/q2-tag2.js +8 -6
  221. package/dist/components/q2-textarea.js +3 -3
  222. package/dist/components/sectorHelper.js +78 -78
  223. package/dist/components/tecton-tab-pane.js +10 -10
  224. package/dist/esm/{charting-DOZct-UB.js → charting-DFXJklqs.js} +79 -1
  225. package/dist/esm/click-elsewhere_3.entry.js +81 -14
  226. package/dist/esm/{dataSample-Dm1zpQNi.js → dataSample-CP_VKNqt.js} +1 -1
  227. package/dist/esm/date-picker-helpers-D8QnN_AS.js +242 -0
  228. package/dist/esm/{index-DJw6Feh0.js → index-CP8pXJ-l.js} +1 -1
  229. package/dist/esm/loader.js +1 -1
  230. package/dist/esm/q2-action-group.entry.js +1 -1
  231. package/dist/esm/q2-action-sheet.entry.js +99 -19
  232. package/dist/esm/q2-avatar.entry.js +34 -1
  233. package/dist/esm/q2-badge_2.entry.js +3 -3
  234. package/dist/esm/q2-btn_2.entry.js +2 -2
  235. package/dist/esm/q2-calendar.entry.js +9 -4
  236. package/dist/esm/q2-card-image.entry.js +3 -3
  237. package/dist/esm/q2-card.entry.js +1 -1
  238. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  239. package/dist/esm/q2-carousel.entry.js +20 -6
  240. package/dist/esm/q2-chart-area.entry.js +38 -7
  241. package/dist/esm/q2-chart-bar.entry.js +39 -8
  242. package/dist/esm/q2-chart-donut.entry.js +31 -13
  243. package/dist/esm/q2-checkbox-group.entry.js +2 -2
  244. package/dist/esm/q2-checkbox_2.entry.js +8 -5
  245. package/dist/esm/q2-context.entry.js +4 -4
  246. package/dist/esm/q2-currency.entry.js +1 -1
  247. package/dist/esm/q2-data-table.entry.js +7 -7
  248. package/dist/esm/q2-date-calendar.entry.js +450 -0
  249. package/dist/esm/q2-date-picker_2.entry.js +965 -0
  250. package/dist/esm/q2-detail.entry.js +2 -2
  251. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  252. package/dist/esm/q2-dropdown.entry.js +3 -3
  253. package/dist/esm/q2-editable-field.entry.js +20 -7
  254. package/dist/esm/q2-example.entry.js +1 -1
  255. package/dist/esm/q2-file-picker.entry.js +2 -2
  256. package/dist/esm/q2-form.entry.js +1 -1
  257. package/dist/esm/q2-formatted-text.entry.js +1 -1
  258. package/dist/esm/q2-icon.entry.js +1 -1
  259. package/dist/esm/q2-item.entry.js +20 -2
  260. package/dist/esm/q2-legend.entry.js +1 -1
  261. package/dist/esm/q2-link_2.entry.js +2 -2
  262. package/dist/esm/q2-loc.entry.js +1 -1
  263. package/dist/esm/q2-message.entry.js +3 -3
  264. package/dist/esm/q2-meter.entry.js +2 -2
  265. package/dist/esm/q2-modal.entry.js +2 -2
  266. package/dist/esm/q2-month-picker.entry.js +3 -3
  267. package/dist/esm/q2-mutation-observer.entry.js +1 -1
  268. package/dist/esm/q2-option.entry.js +1 -1
  269. package/dist/esm/q2-otp.entry.js +5 -5
  270. package/dist/esm/q2-pagination.entry.js +12 -6
  271. package/dist/esm/q2-pill.entry.js +8 -5
  272. package/dist/esm/q2-radio-group.entry.js +2 -2
  273. package/dist/esm/q2-radio.entry.js +2 -2
  274. package/dist/esm/q2-relative-time.entry.js +2 -2
  275. package/dist/esm/q2-resize-observer.entry.js +1 -1
  276. package/dist/esm/q2-search.entry.js +3 -3
  277. package/dist/esm/q2-section.entry.js +3 -3
  278. package/dist/esm/q2-select.entry.js +8 -4
  279. package/dist/esm/q2-stepper-pane.entry.js +2 -2
  280. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  281. package/dist/esm/q2-stepper.entry.js +2 -2
  282. package/dist/esm/q2-surface.entry.js +1 -1
  283. package/dist/esm/q2-tab-container.entry.js +2 -2
  284. package/dist/esm/q2-tab-pane.entry.js +1 -1
  285. package/dist/esm/q2-tecton-elements.js +1 -1
  286. package/dist/esm/q2-textarea.entry.js +2 -2
  287. package/dist/esm/q2-toast.entry.js +1 -1
  288. package/dist/esm/q2-tooltip.entry.js +1 -1
  289. package/dist/esm/{sectorHelper--RMGWGAy.js → sectorHelper-DBtkWtpl.js} +1 -1
  290. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  291. package/dist/q2-tecton-elements/{charting-DOZct-UB.js → charting-DFXJklqs.js} +1625 -1554
  292. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +85 -43
  293. package/dist/q2-tecton-elements/{dataSample-Dm1zpQNi.js → dataSample-CP_VKNqt.js} +33 -33
  294. package/dist/q2-tecton-elements/date-picker-helpers-D8QnN_AS.js +153 -0
  295. package/dist/q2-tecton-elements/{index-DJw6Feh0.js → index-CP8pXJ-l.js} +1 -1
  296. package/dist/q2-tecton-elements/q2-action-group.entry.js +1 -1
  297. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +169 -84
  298. package/dist/q2-tecton-elements/q2-avatar.entry.js +24 -10
  299. package/dist/q2-tecton-elements/q2-badge_2.entry.js +6 -6
  300. package/dist/q2-tecton-elements/q2-btn_2.entry.js +23 -23
  301. package/dist/q2-tecton-elements/q2-calendar.entry.js +7 -4
  302. package/dist/q2-tecton-elements/q2-card-image.entry.js +3 -3
  303. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  304. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +4 -4
  305. package/dist/q2-tecton-elements/q2-carousel.entry.js +24 -11
  306. package/dist/q2-tecton-elements/q2-chart-area.entry.js +187 -141
  307. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +377 -333
  308. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +184 -158
  309. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +7 -7
  310. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +20 -18
  311. package/dist/q2-tecton-elements/q2-context.entry.js +21 -21
  312. package/dist/q2-tecton-elements/q2-currency.entry.js +9 -9
  313. package/dist/q2-tecton-elements/q2-data-table.entry.js +7 -7
  314. package/dist/q2-tecton-elements/q2-date-calendar.entry.js +438 -0
  315. package/dist/q2-tecton-elements/q2-date-picker_2.entry.js +792 -0
  316. package/dist/q2-tecton-elements/q2-detail.entry.js +4 -4
  317. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
  318. package/dist/q2-tecton-elements/q2-dropdown.entry.js +16 -16
  319. package/dist/q2-tecton-elements/q2-editable-field.entry.js +17 -6
  320. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  321. package/dist/q2-tecton-elements/q2-file-picker.entry.js +2 -2
  322. package/dist/q2-tecton-elements/q2-form.entry.js +2 -2
  323. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  324. package/dist/q2-tecton-elements/q2-icon.entry.js +1 -1
  325. package/dist/q2-tecton-elements/q2-item.entry.js +26 -16
  326. package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
  327. package/dist/q2-tecton-elements/q2-link_2.entry.js +7 -7
  328. package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
  329. package/dist/q2-tecton-elements/q2-message.entry.js +29 -29
  330. package/dist/q2-tecton-elements/q2-meter.entry.js +8 -8
  331. package/dist/q2-tecton-elements/q2-modal.entry.js +18 -18
  332. package/dist/q2-tecton-elements/q2-month-picker.entry.js +14 -14
  333. package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
  334. package/dist/q2-tecton-elements/q2-option.entry.js +1 -1
  335. package/dist/q2-tecton-elements/q2-otp.entry.js +9 -9
  336. package/dist/q2-tecton-elements/q2-pagination.entry.js +51 -49
  337. package/dist/q2-tecton-elements/q2-pill.entry.js +22 -17
  338. package/dist/q2-tecton-elements/q2-radio-group.entry.js +8 -8
  339. package/dist/q2-tecton-elements/q2-radio.entry.js +7 -7
  340. package/dist/q2-tecton-elements/q2-relative-time.entry.js +6 -6
  341. package/dist/q2-tecton-elements/q2-resize-observer.entry.js +13 -13
  342. package/dist/q2-tecton-elements/q2-search.entry.js +31 -31
  343. package/dist/q2-tecton-elements/q2-section.entry.js +20 -20
  344. package/dist/q2-tecton-elements/q2-select.entry.js +3 -3
  345. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +10 -10
  346. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +9 -9
  347. package/dist/q2-tecton-elements/q2-stepper.entry.js +45 -45
  348. package/dist/q2-tecton-elements/q2-surface.entry.js +15 -15
  349. package/dist/q2-tecton-elements/q2-tab-container.entry.js +20 -20
  350. package/dist/q2-tecton-elements/q2-tab-pane.entry.js +9 -9
  351. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  352. package/dist/q2-tecton-elements/q2-textarea.entry.js +3 -3
  353. package/dist/q2-tecton-elements/q2-toast.entry.js +1 -1
  354. package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
  355. package/dist/q2-tecton-elements/{sectorHelper--RMGWGAy.js → sectorHelper-DBtkWtpl.js} +56 -56
  356. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +9 -9
  357. package/dist/types/components/q2-action-sheet/q2-action-sheet.d.ts +21 -1
  358. package/dist/types/components/q2-action-sheet/test/q2-action-sheet-test.vr.d.ts +1 -0
  359. package/dist/types/components/q2-avatar/q2-avatar.d.ts +5 -0
  360. package/dist/types/components/q2-btn/q2-btn.d.ts +7 -3
  361. package/dist/types/components/q2-calendar/q2-calendar.d.ts +10 -2
  362. package/dist/types/components/q2-carousel/q2-carousel.d.ts +5 -0
  363. package/dist/types/components/q2-chart-area/q2-chart-area.d.ts +11 -2
  364. package/dist/types/components/q2-chart-bar/q2-chart-bar.d.ts +9 -0
  365. package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +1 -0
  366. package/dist/types/components/q2-checkbox/q2-checkbox.d.ts +4 -3
  367. package/dist/types/components/q2-checkbox-group/q2-checkbox-group.d.ts +4 -2
  368. package/dist/types/components/q2-date-calendar/q2-date-calendar.d.ts +122 -0
  369. package/dist/types/components/q2-date-calendar/test/q2-date-calendar-test.vr.d.ts +1 -0
  370. package/dist/types/components/q2-date-picker/q2-date-picker.d.ts +304 -0
  371. package/dist/types/components/q2-date-picker/test/q2-date-picker-test.vr.d.ts +1 -0
  372. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +3 -3
  373. package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +14 -1
  374. package/dist/types/components/q2-input/q2-input.d.ts +4 -2
  375. package/dist/types/components/q2-item/q2-item.d.ts +3 -0
  376. package/dist/types/components/q2-option-list/q2-option-list.d.ts +1 -0
  377. package/dist/types/components/q2-popover/q2-popover.d.ts +4 -0
  378. package/dist/types/components/q2-radio/q2-radio.d.ts +3 -2
  379. package/dist/types/components/q2-radio-group/q2-radio-group.d.ts +4 -2
  380. package/dist/types/components/q2-search/q2-search.d.ts +3 -1
  381. package/dist/types/components/q2-select/q2-select.d.ts +4 -2
  382. package/dist/types/components/q2-textarea/q2-textarea.d.ts +4 -2
  383. package/dist/types/components.d.ts +858 -49
  384. package/dist/types/global.d.ts +1 -0
  385. package/dist/types/index.d.ts +1 -0
  386. package/dist/types/utils/chart-keyboard.d.ts +16 -0
  387. package/dist/types/utils/date-picker/date-picker-helpers.d.ts +47 -0
  388. package/dist/types/utils/date-picker/date-picker-types.d.ts +42 -0
  389. package/package.json +3 -3
  390. package/dist/cjs/q2-optgroup.cjs.entry.js +0 -70
  391. package/dist/esm/q2-optgroup.entry.js +0 -68
  392. package/dist/q2-tecton-elements/q2-optgroup.entry.js +0 -88
@@ -540,7 +540,10 @@ export class Q2Btn {
540
540
  "required": false,
541
541
  "optional": false,
542
542
  "docs": {
543
- "tags": [],
543
+ "tags": [{
544
+ "name": "warning",
545
+ "text": "Hides the label visually. `label` text is still required for screenreader compliance. Use for icon-only buttons."
546
+ }],
544
547
  "text": "Hides the `label`, and assigns its value to the `aria-label` attribute on the `<button>` element."
545
548
  },
546
549
  "getter": false,
@@ -552,15 +555,15 @@ export class Q2Btn {
552
555
  "type": "string",
553
556
  "mutable": true,
554
557
  "complexType": {
555
- "original": "| 'coin'\n | 'neutral-text'\n | 'neutral'\n | 'workflow-destroy'\n | 'workflow-escape'\n | 'workflow-primary'\n | 'workflow-secondary'",
556
- "resolved": "\"coin\" | \"neutral\" | \"neutral-text\" | \"workflow-destroy\" | \"workflow-escape\" | \"workflow-primary\" | \"workflow-secondary\"",
558
+ "original": "| 'coin'\n | 'destroy'\n | 'escape'\n | 'neutral-text'\n | 'neutral'\n | 'primary'\n | 'secondary'\n | 'workflow-destroy'\n | 'workflow-escape'\n | 'workflow-primary'\n | 'workflow-secondary'",
559
+ "resolved": "\"coin\" | \"destroy\" | \"escape\" | \"neutral\" | \"neutral-text\" | \"primary\" | \"secondary\" | \"workflow-destroy\" | \"workflow-escape\" | \"workflow-primary\" | \"workflow-secondary\"",
557
560
  "references": {}
558
561
  },
559
562
  "required": false,
560
563
  "optional": false,
561
564
  "docs": {
562
565
  "tags": [],
563
- "text": "Indicates the role of the component in the workflow, which will apply appropriate styling to the component."
566
+ "text": "Indicates the intended action type, which applies the appropriate styling.\nUse unprefixed values by default. The legacy `workflow-` prefix remains supported for backward compatibility."
564
567
  },
565
568
  "getter": false,
566
569
  "setter": false,
@@ -579,6 +582,9 @@ export class Q2Btn {
579
582
  "optional": false,
580
583
  "docs": {
581
584
  "tags": [{
585
+ "name": "warning",
586
+ "text": "Required for screen reader compliance even when `hideLabel` is `true`."
587
+ }, {
582
588
  "name": "localizable",
583
589
  "text": undefined
584
590
  }],
@@ -1,15 +1,7 @@
1
1
  import { expect } from "@playwright/test";
2
2
  import { test } from "@stencil/playwright";
3
3
  import { setupPage, THEMES, FONT_SCALE_PX, FONT_SCALE_SUFFIX } from "../../../utils/test/vr-helpers";
4
- const INTENTS = [
5
- 'workflow-primary',
6
- 'workflow-secondary',
7
- 'workflow-destroy',
8
- 'workflow-escape',
9
- 'neutral',
10
- 'neutral-text',
11
- 'coin',
12
- ];
4
+ const INTENTS = ['primary', 'secondary', 'destroy', 'escape', 'neutral', 'neutral-text', 'coin'];
13
5
  const SIZES = ['small', 'medium', 'large', 'none'];
14
6
  const coinHtml = () => `<q2-btn intent="coin" label="My Button"><q2-avatar icon="star"></q2-avatar></q2-btn>`;
15
7
  const labelAndIconHtml = (intent) => intent === 'coin'
@@ -22,10 +14,10 @@ const sizeHtml = (intent, size) => {
22
14
  };
23
15
  const plainHtml = () => `<q2-btn><q2-icon type="edit"></q2-icon><span>My Button</span></q2-btn>`;
24
16
  const SIZED_INTENTS = [
25
- 'workflow-primary',
26
- 'workflow-secondary',
27
- 'workflow-destroy',
28
- 'workflow-escape',
17
+ 'primary',
18
+ 'secondary',
19
+ 'destroy',
20
+ 'escape',
29
21
  'neutral',
30
22
  'neutral-text',
31
23
  ];
@@ -69,7 +61,7 @@ test.describe('q2-btn label+icon — intents × states × themes', () => {
69
61
  restingCase(`q2-btn--${intent}--resting`, labelAndIconHtml(intent), theme);
70
62
  hoverCase(`q2-btn--${intent}--hover`, labelAndIconHtml(intent), theme);
71
63
  focusCase(`q2-btn--${intent}--focus`, labelAndIconHtml(intent), theme);
72
- const settleAfterMs = intent === 'workflow-primary' && theme === 'default-2026' ? 125 : 50;
64
+ const settleAfterMs = intent === 'primary' && theme === 'default-2026' ? 125 : 50;
73
65
  activeCase(`q2-btn--${intent}--active`, labelAndIconHtml(intent), theme, settleAfterMs);
74
66
  }
75
67
  }
@@ -92,13 +84,13 @@ test.describe('q2-btn intents — sizes × themes (resting)', () => {
92
84
  }
93
85
  }
94
86
  });
95
- test.describe('q2-btn workflow-primary — updated states', () => {
87
+ test.describe('q2-btn primary — updated states', () => {
96
88
  for (const size of SIZES) {
97
- activeCase(`q2-btn--workflow-primary--size-${size}--active`, sizeHtml('workflow-primary', size), 'default-2026', 125);
89
+ activeCase(`q2-btn--primary--size-${size}--active`, sizeHtml('primary', size), 'default-2026', 125);
98
90
  }
99
- restingCase('q2-btn--workflow-primary--disabled', '<q2-btn intent="workflow-primary" disabled><span>My Button</span></q2-btn>', 'default-2026');
91
+ restingCase('q2-btn--primary--disabled', '<q2-btn intent="primary" disabled><span>My Button</span></q2-btn>', 'default-2026');
100
92
  test('uses the proposed-primary pointer and active contract', async ({ page }) => {
101
- await setupPage(page, labelAndIconHtml('workflow-primary'), {
93
+ await setupPage(page, labelAndIconHtml('primary'), {
102
94
  theme: 'default-2026',
103
95
  motion: 'normal',
104
96
  });
@@ -121,7 +113,7 @@ test.describe('q2-btn workflow-primary — updated states', () => {
121
113
  await page.mouse.up();
122
114
  });
123
115
  test('uses the proposed-primary keyboard focus contract', async ({ page }) => {
124
- await setupPage(page, labelAndIconHtml('workflow-primary'), { theme: 'default-2026' });
116
+ await setupPage(page, labelAndIconHtml('primary'), { theme: 'default-2026' });
125
117
  const button = page.locator('q2-btn').locator('button');
126
118
  await page.keyboard.press('Tab');
127
119
  await expect(button).toBeFocused();
@@ -129,30 +121,16 @@ test.describe('q2-btn workflow-primary — updated states', () => {
129
121
  expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toContain('rgb(106, 74, 158)');
130
122
  });
131
123
  test('removes the Flat hover ring', async ({ page }) => {
132
- await setupPage(page, labelAndIconHtml('workflow-primary'), { theme: 'flat' });
124
+ await setupPage(page, labelAndIconHtml('primary'), { theme: 'flat' });
133
125
  const host = page.locator('q2-btn');
134
126
  const button = host.locator('button');
135
127
  await host.hover();
136
128
  await page.waitForTimeout(125);
137
129
  expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toBe('none');
138
130
  });
139
- for (const theme of ['flat', 'neo-brutalist']) {
140
- test(`does not add a ${theme} pointer focus ring`, async ({ page }) => {
141
- await setupPage(page, labelAndIconHtml('workflow-primary'), { theme });
142
- const host = page.locator('q2-btn');
143
- const button = host.locator('button');
144
- await page.waitForTimeout(125);
145
- const restingShadow = await button.evaluate(element => getComputedStyle(element).boxShadow);
146
- await host.click();
147
- await page.mouse.move(0, 0);
148
- await page.waitForTimeout(125);
149
- await expect(button).toBeFocused();
150
- expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toBe(restingShadow);
151
- });
152
- }
153
- test('removes only the active scale for reduced motion', async ({ page }) => {
131
+ test('removes the active scale from intent buttons for reduced motion', async ({ page }) => {
154
132
  await page.emulateMedia({ reducedMotion: 'reduce' });
155
- await setupPage(page, labelAndIconHtml('workflow-primary'), { theme: 'default-2026' });
133
+ await setupPage(page, labelAndIconHtml('secondary'), { theme: 'default-2026' });
156
134
  const host = page.locator('q2-btn');
157
135
  const button = host.locator('button');
158
136
  const box = await host.boundingBox();
@@ -161,11 +139,55 @@ test.describe('q2-btn workflow-primary — updated states', () => {
161
139
  await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
162
140
  await page.mouse.down();
163
141
  await page.waitForTimeout(125);
164
- expect(await button.evaluate(element => getComputedStyle(element).backgroundColor)).toBe('rgb(82, 53, 120)');
165
142
  expect(await button.evaluate(element => getComputedStyle(element).transform)).toBe('none');
166
143
  await page.mouse.up();
167
144
  });
168
145
  });
146
+ test.describe('q2-btn intents — active press treatment', () => {
147
+ for (const intent of INTENTS) {
148
+ test(`scales ${intent} while pressed`, async ({ page }) => {
149
+ await setupPage(page, labelAndIconHtml(intent), {
150
+ theme: 'default-2026',
151
+ motion: 'normal',
152
+ });
153
+ const host = page.locator('q2-btn');
154
+ const button = host.locator('button');
155
+ const box = await host.boundingBox();
156
+ if (!box)
157
+ throw new Error('q2-btn bounding box unavailable');
158
+ await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
159
+ await page.mouse.down();
160
+ await page.waitForTimeout(125);
161
+ const scale = await button.evaluate(element => new DOMMatrixReadOnly(getComputedStyle(element).transform).a);
162
+ expect(scale).toBeGreaterThanOrEqual(0.97);
163
+ expect(scale).toBeLessThan(0.99);
164
+ await page.mouse.up();
165
+ });
166
+ }
167
+ });
168
+ test.describe('q2-btn — no-aesthetic fallbacks', () => {
169
+ test('adds the fallback shadow to primary', async ({ page }) => {
170
+ await setupPage(page, labelAndIconHtml('workflow-primary'));
171
+ const button = page.locator('q2-btn').locator('button');
172
+ expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).not.toBe('none');
173
+ });
174
+ for (const intent of ['workflow-secondary', 'workflow-destroy', 'neutral', 'neutral-text']) {
175
+ test(`changes the ${intent} background while pressed`, async ({ page }) => {
176
+ await setupPage(page, labelAndIconHtml(intent), { motion: 'normal' });
177
+ const host = page.locator('q2-btn');
178
+ const button = host.locator('button');
179
+ const restingBackground = await button.evaluate(element => getComputedStyle(element).backgroundColor);
180
+ const box = await host.boundingBox();
181
+ if (!box)
182
+ throw new Error('q2-btn bounding box unavailable');
183
+ await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
184
+ await page.mouse.down();
185
+ await page.waitForTimeout(125);
186
+ expect(await button.evaluate(element => getComputedStyle(element).backgroundColor)).not.toBe(restingBackground);
187
+ await page.mouse.up();
188
+ });
189
+ }
190
+ });
169
191
  test.describe('q2-btn coin — updated hover state', () => {
170
192
  for (const theme of [
171
193
  'default-2026',
@@ -210,7 +232,7 @@ test.describe('q2-btn intents — consistent focus ring', () => {
210
232
  });
211
233
  }
212
234
  test('prefers the per-intent outer ring color', async ({ page }) => {
213
- await setupPage(page, '<q2-btn intent="workflow-destroy" style="--tct-btn-destroy-focus-visible-outer-ring-color: #123456">My Button</q2-btn>', { theme: 'default-2026' });
235
+ await setupPage(page, '<q2-btn intent="destroy" style="--tct-btn-destroy-focus-visible-outer-ring-color: #123456">My Button</q2-btn>', { theme: 'default-2026' });
214
236
  const button = page.locator('q2-btn').locator('button');
215
237
  await page.keyboard.press('Tab');
216
238
  await expect(button).toBeFocused();
@@ -226,7 +248,7 @@ test.describe('q2-btn intents — consistent focus ring', () => {
226
248
  expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toContain('rgb(106, 74, 158)');
227
249
  });
228
250
  test('falls back to the constant focus color when the theme token is unavailable', async ({ page }) => {
229
- await setupPage(page, '<q2-btn intent="workflow-primary">My Button</q2-btn>', { theme: 'default-2026' });
251
+ await setupPage(page, '<q2-btn intent="primary">My Button</q2-btn>', { theme: 'default-2026' });
230
252
  await page.locator('html').evaluate(element => element.style.setProperty('--t-focus-color', 'initial'));
231
253
  const button = page.locator('q2-btn').locator('button');
232
254
  await page.keyboard.press('Tab');
@@ -244,6 +266,40 @@ test.describe('q2-btn intents — consistent focus ring', () => {
244
266
  expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toContain('rgb(0, 102, 204)');
245
267
  });
246
268
  });
269
+ test.describe('q2-btn intents — pointer focus', () => {
270
+ for (const intent of INTENTS) {
271
+ for (const theme of THEMES) {
272
+ test(`does not add a focus ring to ${intent} in ${theme}`, async ({ page }) => {
273
+ await setupPage(page, labelAndIconHtml(intent), { theme });
274
+ const host = page.locator('q2-btn');
275
+ const button = host.locator('button');
276
+ await page.waitForTimeout(125);
277
+ const restingShadow = await button.evaluate(element => getComputedStyle(element).boxShadow);
278
+ await host.click();
279
+ await page.mouse.move(0, 0);
280
+ await page.waitForTimeout(125);
281
+ await expect(button).toBeFocused();
282
+ expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toBe(restingShadow);
283
+ });
284
+ }
285
+ }
286
+ });
287
+ test.describe('q2-btn icon-only — pointer focus', () => {
288
+ for (const theme of THEMES) {
289
+ test(`does not keep the hover background after a click in ${theme}`, async ({ page }) => {
290
+ await setupPage(page, '<q2-btn><q2-icon type="edit"></q2-icon></q2-btn>', { theme });
291
+ const host = page.locator('q2-btn');
292
+ const button = host.locator('button');
293
+ const restingBackground = await button.evaluate(element => getComputedStyle(element).backgroundColor);
294
+ await host.click();
295
+ await page.mouse.move(0, 0);
296
+ await expect(button).toBeFocused();
297
+ await expect
298
+ .poll(() => button.evaluate(element => getComputedStyle(element).backgroundColor))
299
+ .toBe(restingBackground);
300
+ });
301
+ }
302
+ });
247
303
  test.describe('q2-btn plain (no intent) — states × themes', () => {
248
304
  for (const theme of THEMES) {
249
305
  restingCase('q2-btn--plain--resting', plainHtml(), theme);
@@ -252,12 +308,12 @@ test.describe('q2-btn plain (no intent) — states × themes', () => {
252
308
  }
253
309
  });
254
310
  // coin exercises --tct-btn-coin-label-font-size.
255
- // workflow-primary at each size exercises --tct-btn-font-size-small/medium/large.
311
+ // primary at each size exercises --tct-btn-font-size-small/medium/large.
256
312
  const BTN_FONT_SCALE_CASES = [
257
313
  { name: 'coin', html: coinHtml() },
258
- { name: 'workflow-primary--size-small', html: sizeHtml('workflow-primary', 'small') },
259
- { name: 'workflow-primary--size-medium', html: sizeHtml('workflow-primary', 'medium') },
260
- { name: 'workflow-primary--size-large', html: sizeHtml('workflow-primary', 'large') },
314
+ { name: 'primary--size-small', html: sizeHtml('primary', 'small') },
315
+ { name: 'primary--size-medium', html: sizeHtml('primary', 'medium') },
316
+ { name: 'primary--size-large', html: sizeHtml('primary', 'large') },
261
317
  ];
262
318
  test.describe(`q2-btn — scaled font size × themes`, () => {
263
319
  for (const { name, html } of BTN_FONT_SCALE_CASES) {
@@ -371,8 +371,13 @@ export class Q2Calendar {
371
371
  this.controlElement.shadowRoot.querySelector('.input-field').focus();
372
372
  }
373
373
  popoverStateHandler({ detail: { open } }) {
374
- if (this.open !== open)
375
- this.open = open;
374
+ if (this.open === open)
375
+ return;
376
+ this.open = open;
377
+ if (open)
378
+ return;
379
+ const trigger = this.typeable ? this.btnCalendarToggle : this.innerInputField;
380
+ trigger === null || trigger === void 0 ? void 0 : trigger.focus();
376
381
  }
377
382
  defaultSuccessHandler(event) {
378
383
  if (event.target !== this.hostElement) {
@@ -808,7 +813,7 @@ export class Q2Calendar {
808
813
  ]), ariaExpanded: `${!!this.open}`, ariaHasPopup: "dialog", "hide-label": true, disabled: !!this.disabled || !!this.readonly }, h("q2-icon", { type: "calendar" })))));
809
814
  }
810
815
  render() {
811
- return (h("click-elsewhere", { key: '89bfe4685021ec4fb3bf1abe1e1d5127c4712582', class: this.open ? 'dropdown-open' : undefined, onChange: this.onClickElsewhere }, this.renderInputField(), h("q2-popover", { key: '9508bb1a1d9d05b133df8e1842d1b9fd72f40937', ref: el => (this.popoverElement = el), id: "calendar-popover", controlElement: this.innerInputContainer, open: this.open, direction: this.popoverDirection, minHeight: this.popoverMinHeight, align: this.popoverAlignment, mode: this.popoverMode || undefined, block: true }, this.renderHintField(), this.renderCalendarPopover())));
816
+ return (h("click-elsewhere", { key: '11162237137dc92ffc61d85ab9facb1e8844ac9f', class: this.open ? 'dropdown-open' : undefined, onChange: this.onClickElsewhere }, this.renderInputField(), h("q2-popover", { key: '00f6dbdec8323951b6e997b544d7581a3d70719c', ref: el => (this.popoverElement = el), id: "calendar-popover", controlElement: this.innerInputContainer, open: this.open, direction: this.popoverDirection, minHeight: this.popoverMinHeight, align: this.popoverAlignment, mode: this.popoverMode || undefined, block: true }, this.renderHintField(), this.renderCalendarPopover())));
812
817
  }
813
818
  static get is() { return "q2-calendar"; }
814
819
  static get encapsulation() { return "shadow"; }
@@ -1102,7 +1107,10 @@ export class Q2Calendar {
1102
1107
  "required": false,
1103
1108
  "optional": false,
1104
1109
  "docs": {
1105
- "tags": [],
1110
+ "tags": [{
1111
+ "name": "warning",
1112
+ "text": "Hides the label visually. `label` text is still required for screenreader compliance."
1113
+ }],
1106
1114
  "text": "Hide the input field's ` <label> ` element from view."
1107
1115
  },
1108
1116
  "getter": false,
@@ -1183,7 +1191,10 @@ export class Q2Calendar {
1183
1191
  "required": false,
1184
1192
  "optional": false,
1185
1193
  "docs": {
1186
- "tags": [],
1194
+ "tags": [{
1195
+ "name": "warning",
1196
+ "text": "Required for screen reader compliance even when `hideLabel` is `true`."
1197
+ }],
1187
1198
  "text": "The visible label for the `q2-calendar` input field."
1188
1199
  },
1189
1200
  "getter": false,
@@ -134,10 +134,10 @@ export class Q2MonthPicker {
134
134
  // #endregion
135
135
  // #region Render Methods
136
136
  render() {
137
- return (h("div", { key: 'b7429b5ed21f7cda666f140a9a93ee643176979c', class: "month-container", onKeyDown: this.onMonthKeydown }, h("div", { key: '802900b16d0efa602df89edb22e174329736dca4', class: "navigation" }, h("q2-btn", { key: '0a318088ab2eb826620c056246599f5b7803c51e', class: "year-btn", onClick: () => this.viewChange.emit({
137
+ return (h("div", { key: '6e90b90e7720649681c2e95debe81d823095ccd0', class: "month-container", onKeyDown: this.onMonthKeydown }, h("div", { key: 'd1b83fce67fec3beacb73004a02d566f77a5729f', class: "navigation" }, h("q2-btn", { key: '0772d6553ee3a75ca829755b3abc7d75ac0fa1aa', class: "year-btn", onClick: () => this.viewChange.emit({
138
138
  view: 'year',
139
139
  selectedYear: this.year,
140
- }) }, h("span", { key: '02018f884cb7b48fb581597fc7d5a2a323497668', class: "year" }, this.year), h("q2-icon", { key: '9ab23a381d4fedb5aca2ecee19eb975d76ff4465', class: "year-icon off", type: "chevron-down" })), h("div", { key: '79dd4cd0864d051a4252c21ebbd697e0e75b0ec3', class: "month-controller" }, h("div", { key: 'd94ad2ebfc317206bfff5b16861c52507a168e09', class: "cal-year-prev-next" }, h("q2-btn", { key: '4d8b12fde9825bd5dca90012d42e73453f2cb777', label: loc('tecton.element.calendar.previousYear'), "hide-label": true, class: "cal-nav-btn prev-year", "test-id": "previousYearButton", onClick: () => this.selectYear(this.year - 1) }, h("q2-icon", { key: '428b2feb8854e145bdbc88bdd2c6a2c25a3a50ce', type: "arrow-left" })), h("q2-btn", { key: '2f7ef439402c9788ae002a199813387a370e0ed3', label: loc('tecton.element.calendar.nextYear'), "hide-label": true, class: "cal-nav-btn next-year", "test-id": "nextYearButton", onClick: () => this.selectYear(this.year + 1) }, h("q2-icon", { key: '5931c20eac7a2268c6b945b336f44e143e9fe484', type: "arrow-right" }))))), h("div", { key: '9e18ae0e86a741201eb2a8c6ff04b9007899cbae', class: "month-list", onClick: this.onMonthSelection }, this.months.map((month, index) => (h("div", { class: "month" }, h("span", { role: "button", class: "month-button", "data-index": index, "aria-label": month.label, tabindex: index === this.focusedIndex ? 0 : -1 }, month.abbr))))), this.today && (h("div", { key: '8dfee8bcf4ee9b4137c9c8644be7f38f5794bf4d', class: "today-label" }, loc('tecton.element.calendar.today'), ": ", this.today))));
140
+ }) }, h("span", { key: '689e2643923973447a38063260943bfaf98f673c', class: "year" }, this.year), h("q2-icon", { key: '590dcf2cf06e4980d70644b5be9e448cfe72abdc', class: "year-icon off", type: "chevron-down" })), h("div", { key: '3001ad6ece1c302809e27df855c921698b840c56', class: "month-controller" }, h("div", { key: '23397576c55f2f5ad32c248459ce986d38f25e5d', class: "cal-year-prev-next" }, h("q2-btn", { key: '8d38dd1bc2986e6c43b66c5cf3538adea921b259', label: loc('tecton.element.calendar.previousYear'), "hide-label": true, class: "cal-nav-btn prev-year", "test-id": "previousYearButton", onClick: () => this.selectYear(this.year - 1) }, h("q2-icon", { key: '55f8e258f83c0209b76efb3798478409ee246133', type: "arrow-left" })), h("q2-btn", { key: '578e4c4cd87cf3e25a09d55cb2c20ef0967d44bb', label: loc('tecton.element.calendar.nextYear'), "hide-label": true, class: "cal-nav-btn next-year", "test-id": "nextYearButton", onClick: () => this.selectYear(this.year + 1) }, h("q2-icon", { key: 'f2814f78597a04fca5617b3b59271d6c11221a5c', type: "arrow-right" }))))), h("div", { key: '7843d1db40f82116c3f82f544ad045a1f7dabadb', class: "month-list", onClick: this.onMonthSelection }, this.months.map((month, index) => (h("div", { class: "month" }, h("span", { role: "button", class: "month-button", "data-index": index, "aria-label": month.label, tabindex: index === this.focusedIndex ? 0 : -1 }, month.abbr))))), this.today && (h("div", { key: '71675483d7a2d770ad8f76b3540d47c10ebb0325', class: "today-label" }, loc('tecton.element.calendar.today'), ": ", this.today))));
141
141
  }
142
142
  static get is() { return "q2-month-picker"; }
143
143
  static get encapsulation() { return "shadow"; }
@@ -133,20 +133,10 @@ const dayKeyboardFocusCase = (variant, theme) => {
133
133
  await freezeClock(page);
134
134
  await setupPage(page, variant.html, { theme, setupLoc: true });
135
135
  await openPopoverViaKeyboard(page);
136
- // Open with no value selected leaves all day cells tabindex=-1, so the
137
- // keyboard focus is still on the input — pressing ArrowRight there is a
138
- // no-op for the calendar grid. Programmatically focus today first so the
139
- // calendarBody's onKeyDown handler is the one that receives ArrowRight.
140
- await page.evaluate(() => {
141
- var _a;
142
- const cal = document.querySelector('q2-calendar');
143
- const today = (_a = cal === null || cal === void 0 ? void 0 : cal.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('td[data-date="2026-05-17"]');
144
- today === null || today === void 0 ? void 0 : today.focus();
145
- });
136
+ // Opening and day navigation transfer focus after rendering and the next paint.
137
+ await expect(page.locator('q2-calendar td[data-date="2026-05-17"]')).toBeFocused();
146
138
  await page.keyboard.press('ArrowRight');
147
- // Sub-pixel anti-aliasing on the focus ring border can drift between runs,
148
- // particularly in themes with thicker borders (neo-brutalist) and
149
- // translucent backdrops (glassmorphism).
139
+ await expect(page.locator('q2-calendar td[data-date="2026-05-18"]')).toBeFocused();
150
140
  await expect(page).toHaveScreenshot(`q2-calendar--${variant.name}--day-keyboard-focus--${theme}.png`);
151
141
  });
152
142
  };
@@ -369,11 +369,11 @@ export class Q2CardImage {
369
369
  render() {
370
370
  const cardContent = this.clickable ? (h("q2-btn", { block: true, disabled: this.disabled, label: this.tctAriaLabel, hideLabel: true, onClick: this.handleCardClick }, this.renderCardContent())) : (this.renderCardContent());
371
371
  const showBanner = !!this.cardStatus && this.size === 'large';
372
- return (h(Host, { key: 'f9fef10f67ab8b4b5a7908afbe82db955bd6c6ed', class: {
372
+ return (h(Host, { key: '1210673a91d22bac5106d3807ec08179fb6cfd9f', class: {
373
373
  [`${this.orientation}`]: true,
374
374
  'has-action': this.hasActionSlotContent,
375
375
  'has-banner': showBanner,
376
- } }, this.renderStatusBanner(), h("div", { key: '2c14cd32230baa1ef4c4300d3d5485b24cce674e', class: "card-wrapper" }, cardContent, this.renderAction())));
376
+ } }, this.renderStatusBanner(), h("div", { key: 'b81dd3c1b02260e9ff1d7e7321d88a3c2d209f83', class: "card-wrapper" }, cardContent, this.renderAction())));
377
377
  }
378
378
  static get is() { return "q2-card-image"; }
379
379
  static get encapsulation() { return "shadow"; }
@@ -68,13 +68,14 @@ export class Q2Carousel {
68
68
  const logicalIndex = this.paneCount > 0 ? swiper.realIndex % this.paneCount : swiper.realIndex;
69
69
  this.index = logicalIndex + 1;
70
70
  this.updateCarouselPaneProps();
71
- const isPaginationFocused = !!document.activeElement.closest(`#q2-carousel-${this.guid} .q2-carousel-page-indicator`);
71
+ const focusSource = document.activeElement;
72
+ const isPaginationFocused = !!focusSource.closest(`#q2-carousel-${this.guid} .q2-carousel-page-indicator`);
72
73
  const isCarouselFocused = !!document.activeElement.closest(`#q2-carousel-${this.guid} q2-carousel-pane`);
73
74
  const isFocused = isPaginationFocused || isCarouselFocused;
74
75
  this.handleAriaLive(isFocused);
75
76
  mirrorEmit(this, ['change', 'tctChange'], { index: logicalIndex + 1 });
76
77
  if (isPaginationFocused) {
77
- this.paginationBtns[logicalIndex].focus({ preventScroll: true });
78
+ this.pendingPaginationFocus = { index: logicalIndex, source: focusSource };
78
79
  }
79
80
  else if (isCarouselFocused)
80
81
  swiper.slides[swiper.activeIndex].focus({
@@ -349,7 +350,7 @@ export class Q2Carousel {
349
350
  };
350
351
  this.renderNextNavBtn = () => {
351
352
  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" }))));
353
+ return (h("div", { class: "next-btn" }, h("q2-btn", { class: "q2-carousel-navigation-button q2-carousel-navigation-button-next", intent: "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" }))));
353
354
  };
354
355
  this.renderPaginationArea = () => {
355
356
  const { useDynamicPaginationDots, realIndex, paneCount } = this;
@@ -373,13 +374,14 @@ export class Q2Carousel {
373
374
  };
374
375
  this.renderPrevNavBtn = () => {
375
376
  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" }))));
377
+ return (h("div", { class: "prev-btn" }, h("q2-btn", { class: "q2-carousel-navigation-button q2-carousel-navigation-button-prev", intent: "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" }))));
377
378
  };
378
379
  }
379
380
  // #endregion
380
381
  // #region Component Lifecycle Events
381
382
  disconnectedCallback() {
382
383
  var _a;
384
+ this.pendingPaginationFocus = undefined;
383
385
  if (this.mutationObserver) {
384
386
  this.mutationObserver.disconnect();
385
387
  this.mutationObserver = null;
@@ -412,6 +414,18 @@ export class Q2Carousel {
412
414
  this.mutationObserver = observer;
413
415
  overrideFocus(this.hostElement);
414
416
  }
417
+ componentDidRender() {
418
+ var _a;
419
+ const pendingFocus = this.pendingPaginationFocus;
420
+ this.pendingPaginationFocus = undefined;
421
+ if (!pendingFocus)
422
+ return;
423
+ const activeElement = document.activeElement;
424
+ if (activeElement !== pendingFocus.source && activeElement !== document.body)
425
+ return;
426
+ // Dynamic pagination hides distant dots until the new active index renders.
427
+ (_a = this.paginationBtns[pendingFocus.index]) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });
428
+ }
415
429
  // #endregion
416
430
  // #region Listeners
417
431
  carouselPaneClicked(event) {
@@ -561,7 +575,7 @@ export class Q2Carousel {
561
575
  paginationWrapperClasses.push('evenly-space');
562
576
  if (showNavigationArrows && arrowPosition === 'hug')
563
577
  paginationWrapperClasses.push('center-space');
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 &&
578
+ return (h(Host, { key: 'e0ebc5ae08102ced9a732ca59217cd3c2c501172', id: `q2-carousel-${this.guid}`, class: "q2-carousel-instance" }, insufficientPanes ? (this.renderInsufficientPanesDisplay()) : (h(Fragment, null, paneCount > 1 && (h("div", { class: paginationWrapperClasses.join(' ') }, showNavigationArrows &&
565
579
  ['bottom', 'hug'].includes(arrowPosition) &&
566
580
  this.renderPrevNavBtn(), h("div", { class: "q2-carousel-control-center-tray" }, !hidePagination && this.renderPaginationArea(), autoPlay && this.renderAutoPlayBtn()), showNavigationArrows &&
567
581
  ['bottom', 'hug'].includes(arrowPosition) &&
@@ -93,6 +93,11 @@ const focusIndicatorCase = (variant, theme) => {
93
93
  await setupPage(page, variant.html, { theme, setupLoc: true });
94
94
  await page.keyboard.press('Tab');
95
95
  await page.keyboard.press('Tab');
96
+ await expect(page.locator('.q2-carousel-page-indicator-0')).toBeFocused();
97
+ await page.keyboard.press('End');
98
+ await expect(page.locator('.q2-carousel-page-indicator-4')).toBeFocused();
99
+ await page.keyboard.press('Home');
100
+ await expect(page.locator('.q2-carousel-page-indicator-0')).toBeFocused();
96
101
  await expect(page).toHaveScreenshot(`q2-carousel--${variant.name}--focus-indicator--${theme}.png`);
97
102
  });
98
103
  };
@@ -103,6 +108,32 @@ const focusPaneCase = (variant, theme) => {
103
108
  await expect(page).toHaveScreenshot(`q2-carousel--${variant.name}--focus-pane--${theme}.png`);
104
109
  });
105
110
  };
111
+ const focusDynamicIndicatorCase = (theme) => {
112
+ test(`q2-carousel--dynamic-pagination--focus-indicator — ${theme}`, async ({ page }) => {
113
+ const panes = Array.from({ length: 6 }, (_, index) => PANE(index + 1, 6)).join('');
114
+ await setupPage(page, `<q2-carousel auto-height>${panes}</q2-carousel>`, { theme, setupLoc: true });
115
+ await page.keyboard.press('Tab');
116
+ await expect(page.locator('.q2-carousel-page-indicator-0')).toBeFocused();
117
+ for (const [key, index] of [
118
+ ['End', 5],
119
+ ['Home', 0],
120
+ ['ArrowLeft', 5],
121
+ ['ArrowRight', 0],
122
+ ]) {
123
+ await page.keyboard.press(key);
124
+ const indicator = page.locator(`.q2-carousel-page-indicator-${index}`);
125
+ await expect(indicator).toBeFocused();
126
+ await expect(indicator).toHaveAttribute('aria-selected', 'true');
127
+ await expect(indicator).toBeVisible();
128
+ await expect(indicator).not.toHaveCSS('box-shadow', 'none');
129
+ await page.waitForFunction(() => {
130
+ const container = document.querySelector('.swiper');
131
+ return !container.swiper.animating;
132
+ });
133
+ }
134
+ await expect(page).toHaveScreenshot(`q2-carousel--dynamic-pagination--focus-indicator--${theme}.png`);
135
+ });
136
+ };
106
137
  test.describe('q2-carousel — variants × themes', () => {
107
138
  for (const variant of VARIANTS) {
108
139
  for (const theme of THEMES) {
@@ -113,5 +144,6 @@ test.describe('q2-carousel — variants × themes', () => {
113
144
  focusArrowCase(FOCUS_VARIANT, theme);
114
145
  focusIndicatorCase(FOCUS_VARIANT, theme);
115
146
  focusPaneCase(FOCUS_VARIANT, theme);
147
+ focusDynamicIndicatorCase(theme);
116
148
  }
117
149
  });
@@ -97,12 +97,12 @@ export class Q2CarouselPane {
97
97
  // #region Render Methods
98
98
  render() {
99
99
  const { label } = this;
100
- return (h(Host, { key: '6d221b15545378efa40b54864b2ebca1bcb1e983', class: this.generatePaneClass(this.currentPaneIndex), tabIndex: this.isActivePane ? 0 : -1, role: "group", "aria-roledescription": "slide", "aria-hidden": this.isActivePane ? undefined : 'true', "aria-label": label
100
+ return (h(Host, { key: 'f4a4c10d9e66146fae74ee206bb466563ff70957', class: this.generatePaneClass(this.currentPaneIndex), tabIndex: this.isActivePane ? 0 : -1, role: "group", "aria-roledescription": "slide", "aria-hidden": this.isActivePane ? undefined : 'true', "aria-label": label
101
101
  ? loc(label)
102
102
  : loc('tecton.element.carousel.itemDescription', [
103
103
  (this.currentPaneIndex + 1).toString(),
104
104
  (this.siblingCount || 0).toString(),
105
- ]), onClick: this.paneClicked }, h("article", { key: '394965fb0a46501fcd33aa3acadb2eaae6a1accd', class: "q2-carousel-pane-main-content" }, h("slot", { key: 'a059daeb1c5192cec8594b6c9843828d6b833f12' }))));
105
+ ]), onClick: this.paneClicked }, h("article", { key: '41030b6a419ccd15485eb0b8a04ba6171777f5e9', class: "q2-carousel-pane-main-content" }, h("slot", { key: '33850b8d35a3c134f014a6eb4638be25f7ab76c0' }))));
106
106
  }
107
107
  static get is() { return "q2-carousel-pane"; }
108
108
  static get originalStyleUrls() {
@@ -98,10 +98,21 @@ button {
98
98
  }
99
99
 
100
100
  .container {
101
+ position: relative;
101
102
  width: 100%;
102
103
  height: 100%;
103
104
  }
104
105
 
106
+ .chart-keyboard-value {
107
+ position: absolute;
108
+ top: 0;
109
+ right: 0;
110
+ padding: var(--app-scale-1x);
111
+ background: var(--t-base);
112
+ color: var(--t-text);
113
+ pointer-events: none;
114
+ }
115
+
105
116
  .chart-container {
106
117
  width: 100%;
107
118
  height: 100%;