q2-tecton-elements 1.71.4 → 1.73.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 (415) hide show
  1. package/dist/bundle-report.json +32564 -26687
  2. package/dist/cjs/{charting-ClN1ldqv.js → charting-CdNTrVBe.js} +80 -0
  3. package/dist/cjs/click-elsewhere_3.cjs.entry.js +85 -20
  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-SpDCZABA.js → index-BqyWHpNu.js} +2 -2
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/{q2-action-group_2.cjs.entry.js → q2-action-group.cjs.entry.js} +1 -89
  9. package/dist/cjs/q2-action-sheet.cjs.entry.js +98 -18
  10. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-badge_2.cjs.entry.js +113 -12
  12. package/dist/cjs/q2-btn_2.cjs.entry.js +2 -2
  13. package/dist/cjs/q2-calendar.cjs.entry.js +14 -7
  14. package/dist/cjs/q2-card-image.cjs.entry.js +4 -4
  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 +3 -3
  22. package/dist/cjs/q2-checkbox_2.cjs.entry.js +9 -6
  23. package/dist/cjs/q2-context.cjs.entry.js +6 -5
  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 +4 -4
  31. package/dist/cjs/q2-editable-field.cjs.entry.js +51 -37
  32. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-file-picker.cjs.entry.js +60 -4
  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 +21 -3
  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 +59 -17
  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 +4 -4
  49. package/dist/cjs/q2-pill.cjs.entry.js +8 -5
  50. package/dist/cjs/q2-radio-group.cjs.entry.js +22 -4
  51. package/dist/cjs/q2-radio.cjs.entry.js +3 -3
  52. package/dist/cjs/q2-relative-time.cjs.entry.js +3 -3
  53. package/dist/cjs/q2-resize-observer.cjs.entry.js +92 -0
  54. package/dist/cjs/q2-search.cjs.entry.js +4 -4
  55. package/dist/cjs/q2-section.cjs.entry.js +7 -7
  56. package/dist/cjs/q2-select.cjs.entry.js +41 -21
  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 +5 -3
  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 +1 -1
  74. package/dist/collection/components/q2-btn/q2-btn.css +152 -146
  75. package/dist/collection/components/q2-btn/q2-btn.js +10 -4
  76. package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js +229 -20
  77. package/dist/collection/components/q2-calendar/q2-calendar.css +3 -0
  78. package/dist/collection/components/q2-calendar/q2-calendar.js +20 -7
  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 +26 -15
  81. package/dist/collection/components/q2-card/test/q2-card-test.vr.js +4 -0
  82. package/dist/collection/components/q2-card-image/q2-card-image.css +89 -134
  83. package/dist/collection/components/q2-card-image/q2-card-image.js +4 -4
  84. package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js +4 -0
  85. package/dist/collection/components/q2-carousel/q2-carousel.js +19 -5
  86. package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js +45 -0
  87. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  88. package/dist/collection/components/q2-chart-area/q2-chart-area.css +11 -0
  89. package/dist/collection/components/q2-chart-area/q2-chart-area.js +53 -7
  90. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js +14 -0
  91. package/dist/collection/components/q2-chart-bar/q2-chart-bar.css +11 -0
  92. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +50 -4
  93. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js +14 -0
  94. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +30 -10
  95. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js +25 -0
  96. package/dist/collection/components/q2-checkbox/q2-checkbox.css +2 -2
  97. package/dist/collection/components/q2-checkbox/q2-checkbox.js +6 -3
  98. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +2 -0
  99. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +6 -3
  100. package/dist/collection/components/q2-context/q2-context.css +5 -0
  101. package/dist/collection/components/q2-context/q2-context.js +4 -3
  102. package/dist/collection/components/q2-context/test/q2-context-test.vr.js +14 -4
  103. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  104. package/dist/collection/components/q2-data-table/q2-data-table.css +6 -0
  105. package/dist/collection/components/q2-data-table/q2-data-table.js +5 -5
  106. package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js +52 -0
  107. package/dist/collection/components/q2-date-calendar/q2-date-calendar.css +393 -0
  108. package/dist/collection/components/q2-date-calendar/q2-date-calendar.js +1022 -0
  109. package/dist/collection/components/q2-date-calendar/test/q2-date-calendar-test.vr.js +111 -0
  110. package/dist/collection/components/q2-date-picker/q2-date-picker.css +138 -0
  111. package/dist/collection/components/q2-date-picker/q2-date-picker.js +2010 -0
  112. package/dist/collection/components/q2-date-picker/test/q2-date-picker-test.vr.js +179 -0
  113. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  114. package/dist/collection/components/q2-dropdown/q2-dropdown.css +2 -0
  115. package/dist/collection/components/q2-dropdown/q2-dropdown.js +5 -5
  116. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.vr.js +30 -0
  117. package/dist/collection/components/q2-editable-field/q2-editable-field.css +2 -0
  118. package/dist/collection/components/q2-editable-field/q2-editable-field.js +59 -45
  119. package/dist/collection/components/q2-example/q2-example.js +1 -1
  120. package/dist/collection/components/q2-file-picker/q2-file-picker.css +27 -0
  121. package/dist/collection/components/q2-file-picker/q2-file-picker.js +98 -2
  122. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js +22 -0
  123. package/dist/collection/components/q2-form/q2-form.js +1 -1
  124. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  125. package/dist/collection/components/q2-input/q2-input.css +67 -1
  126. package/dist/collection/components/q2-input/q2-input.js +160 -15
  127. package/dist/collection/components/q2-input/test/q2-input-test.vr.js +35 -0
  128. package/dist/collection/components/q2-item/q2-item.css +3 -1
  129. package/dist/collection/components/q2-item/q2-item.js +19 -1
  130. package/dist/collection/components/q2-item/test/q2-item-test.vr.js +8 -2
  131. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  132. package/dist/collection/components/q2-list/q2-list.js +1 -1
  133. package/dist/collection/components/q2-message/q2-message.css +5 -5
  134. package/dist/collection/components/q2-message/q2-message.js +1 -1
  135. package/dist/collection/components/q2-meter/q2-meter.js +1 -1
  136. package/dist/collection/components/q2-modal/q2-modal.css +40 -3
  137. package/dist/collection/components/q2-modal/q2-modal.js +100 -16
  138. package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js +32 -7
  139. package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
  140. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  141. package/dist/collection/components/q2-option-list/q2-option-list.js +33 -4
  142. package/dist/collection/components/q2-otp/q2-otp.js +4 -4
  143. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  144. package/dist/collection/components/q2-pill/q2-pill.css +2 -2
  145. package/dist/collection/components/q2-pill/q2-pill.js +6 -3
  146. package/dist/collection/components/q2-popover/q2-popover.css +4 -2
  147. package/dist/collection/components/q2-popover/q2-popover.js +50 -14
  148. package/dist/collection/components/q2-radio/q2-radio.css +158 -104
  149. package/dist/collection/components/q2-radio/q2-radio.js +5 -2
  150. package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js +25 -2
  151. package/dist/collection/components/q2-radio-group/q2-radio-group.css +39 -2
  152. package/dist/collection/components/q2-radio-group/q2-radio-group.js +73 -4
  153. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js +43 -1
  154. package/dist/collection/components/q2-relative-time/q2-relative-time.js +2 -2
  155. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  156. package/dist/collection/components/q2-search/q2-search.css +2 -0
  157. package/dist/collection/components/q2-search/q2-search.js +6 -3
  158. package/dist/collection/components/q2-section/q2-section.css +2 -0
  159. package/dist/collection/components/q2-section/q2-section.js +6 -6
  160. package/dist/collection/components/q2-select/q2-select.css +3 -0
  161. package/dist/collection/components/q2-select/q2-select.js +48 -22
  162. package/dist/collection/components/q2-select/test/q2-select-test.vr.js +13 -0
  163. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  164. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +1 -1
  165. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  166. package/dist/collection/components/q2-surface/q2-surface.js +1 -1
  167. package/dist/collection/components/q2-surface/test/q2-surface-test.vr.js +2 -2
  168. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  169. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  170. package/dist/collection/components/q2-tag/q2-tag.js +6 -3
  171. package/dist/collection/components/q2-textarea/q2-textarea.js +6 -3
  172. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js +1 -1
  173. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +5 -3
  174. package/dist/collection/utils/chart-keyboard.js +76 -0
  175. package/dist/collection/utils/date-picker/date-picker-helpers.js +239 -0
  176. package/dist/collection/utils/date-picker/date-picker-types.js +1 -0
  177. package/dist/collection/utils/index.js +2 -2
  178. package/dist/collection/utils/test/vr-helpers.js +16 -2
  179. package/dist/components/charting.js +1603 -1532
  180. package/dist/components/dataSample.js +7 -7
  181. package/dist/components/index.js +57 -53
  182. package/dist/components/index2.js +3 -3
  183. package/dist/components/q2-action-sheet.js +224 -103
  184. package/dist/components/q2-avatar2.js +8 -8
  185. package/dist/components/q2-btn2.js +2 -2
  186. package/dist/components/q2-calendar.js +15 -10
  187. package/dist/components/q2-card-image.js +24 -24
  188. package/dist/components/q2-carousel-pane2.js +3 -3
  189. package/dist/components/q2-carousel.js +37 -24
  190. package/dist/components/q2-chart-area.js +415 -369
  191. package/dist/components/q2-chart-bar.js +193 -148
  192. package/dist/components/q2-chart-donut.js +185 -158
  193. package/dist/components/q2-checkbox-group.js +12 -12
  194. package/dist/components/q2-checkbox2.js +12 -12
  195. package/dist/components/q2-context.js +30 -29
  196. package/dist/components/q2-currency.js +9 -9
  197. package/dist/components/q2-data-table.js +111 -111
  198. package/dist/components/q2-date-calendar.d.ts +11 -0
  199. package/dist/components/q2-date-calendar.js +5 -0
  200. package/dist/components/q2-date-calendar2.js +678 -0
  201. package/dist/components/q2-date-picker.d.ts +11 -0
  202. package/dist/components/q2-date-picker.js +5 -0
  203. package/dist/components/q2-date-picker2.js +875 -0
  204. package/dist/components/q2-detail.js +3 -3
  205. package/dist/components/q2-dropdown.js +13 -13
  206. package/dist/components/q2-editable-field.js +45 -36
  207. package/dist/components/q2-example.js +11 -11
  208. package/dist/components/q2-file-picker.js +71 -11
  209. package/dist/components/q2-form.js +6 -6
  210. package/dist/components/q2-formatted-text.js +2 -2
  211. package/dist/components/q2-input2.js +268 -163
  212. package/dist/components/q2-item2.js +33 -23
  213. package/dist/components/q2-legend2.js +7 -7
  214. package/dist/components/q2-list2.js +6 -6
  215. package/dist/components/q2-message2.js +29 -29
  216. package/dist/components/q2-meter.js +7 -7
  217. package/dist/components/q2-modal.js +94 -76
  218. package/dist/components/q2-month-picker.js +17 -17
  219. package/dist/components/q2-mutation-observer.js +1 -1
  220. package/dist/components/q2-optgroup2.js +7 -7
  221. package/dist/components/q2-option-list2.js +52 -32
  222. package/dist/components/q2-otp.js +8 -8
  223. package/dist/components/q2-pagination.js +67 -67
  224. package/dist/components/q2-pill.js +17 -15
  225. package/dist/components/q2-popover2.js +77 -53
  226. package/dist/components/q2-radio-group.js +70 -40
  227. package/dist/components/q2-radio.js +40 -55
  228. package/dist/components/q2-relative-time.js +5 -5
  229. package/dist/components/q2-resize-observer2.js +23 -23
  230. package/dist/components/q2-search.js +6 -6
  231. package/dist/components/q2-section.js +33 -33
  232. package/dist/components/q2-select2.js +47 -40
  233. package/dist/components/q2-stepper-pane.js +17 -13
  234. package/dist/components/q2-stepper-vertical.js +4 -4
  235. package/dist/components/q2-stepper.js +57 -57
  236. package/dist/components/q2-surface.js +3 -3
  237. package/dist/components/q2-tab-container.js +18 -18
  238. package/dist/components/q2-tab-pane.js +2 -2
  239. package/dist/components/q2-tag2.js +8 -6
  240. package/dist/components/q2-textarea.js +3 -3
  241. package/dist/components/sectorHelper.js +78 -78
  242. package/dist/components/tecton-tab-pane.js +12 -11
  243. package/dist/esm/{charting-DOZct-UB.js → charting-DFXJklqs.js} +79 -1
  244. package/dist/esm/click-elsewhere_3.entry.js +85 -20
  245. package/dist/esm/{dataSample-Dm1zpQNi.js → dataSample-CP_VKNqt.js} +1 -1
  246. package/dist/esm/date-picker-helpers-D8QnN_AS.js +242 -0
  247. package/dist/esm/{index-Cps4jSQM.js → index-CP8pXJ-l.js} +2 -2
  248. package/dist/esm/loader.js +1 -1
  249. package/dist/esm/{q2-action-group_2.entry.js → q2-action-group.entry.js} +3 -90
  250. package/dist/esm/q2-action-sheet.entry.js +99 -19
  251. package/dist/esm/q2-avatar.entry.js +1 -1
  252. package/dist/esm/q2-badge_2.entry.js +113 -12
  253. package/dist/esm/q2-btn_2.entry.js +2 -2
  254. package/dist/esm/q2-calendar.entry.js +14 -7
  255. package/dist/esm/q2-card-image.entry.js +4 -4
  256. package/dist/esm/q2-card.entry.js +1 -1
  257. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  258. package/dist/esm/q2-carousel.entry.js +20 -6
  259. package/dist/esm/q2-chart-area.entry.js +38 -7
  260. package/dist/esm/q2-chart-bar.entry.js +39 -8
  261. package/dist/esm/q2-chart-donut.entry.js +31 -13
  262. package/dist/esm/q2-checkbox-group.entry.js +3 -3
  263. package/dist/esm/q2-checkbox_2.entry.js +9 -6
  264. package/dist/esm/q2-context.entry.js +6 -5
  265. package/dist/esm/q2-currency.entry.js +1 -1
  266. package/dist/esm/q2-data-table.entry.js +7 -7
  267. package/dist/esm/q2-date-calendar.entry.js +450 -0
  268. package/dist/esm/q2-date-picker_2.entry.js +965 -0
  269. package/dist/esm/q2-detail.entry.js +2 -2
  270. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  271. package/dist/esm/q2-dropdown.entry.js +4 -4
  272. package/dist/esm/q2-editable-field.entry.js +51 -37
  273. package/dist/esm/q2-example.entry.js +1 -1
  274. package/dist/esm/q2-file-picker.entry.js +60 -4
  275. package/dist/esm/q2-form.entry.js +1 -1
  276. package/dist/esm/q2-formatted-text.entry.js +1 -1
  277. package/dist/esm/q2-icon.entry.js +1 -1
  278. package/dist/esm/q2-item.entry.js +21 -3
  279. package/dist/esm/q2-legend.entry.js +1 -1
  280. package/dist/esm/q2-link_2.entry.js +2 -2
  281. package/dist/esm/q2-loc.entry.js +1 -1
  282. package/dist/esm/q2-message.entry.js +3 -3
  283. package/dist/esm/q2-meter.entry.js +2 -2
  284. package/dist/esm/q2-modal.entry.js +59 -17
  285. package/dist/esm/q2-month-picker.entry.js +3 -3
  286. package/dist/esm/q2-mutation-observer.entry.js +1 -1
  287. package/dist/esm/q2-option.entry.js +1 -1
  288. package/dist/esm/q2-otp.entry.js +5 -5
  289. package/dist/esm/q2-pagination.entry.js +4 -4
  290. package/dist/esm/q2-pill.entry.js +8 -5
  291. package/dist/esm/q2-radio-group.entry.js +22 -4
  292. package/dist/esm/q2-radio.entry.js +3 -3
  293. package/dist/esm/q2-relative-time.entry.js +3 -3
  294. package/dist/esm/q2-resize-observer.entry.js +90 -0
  295. package/dist/esm/q2-search.entry.js +4 -4
  296. package/dist/esm/q2-section.entry.js +7 -7
  297. package/dist/esm/q2-select.entry.js +41 -21
  298. package/dist/esm/q2-stepper-pane.entry.js +2 -2
  299. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  300. package/dist/esm/q2-stepper.entry.js +2 -2
  301. package/dist/esm/q2-surface.entry.js +1 -1
  302. package/dist/esm/q2-tab-container.entry.js +2 -2
  303. package/dist/esm/q2-tab-pane.entry.js +1 -1
  304. package/dist/esm/q2-tecton-elements.js +1 -1
  305. package/dist/esm/q2-textarea.entry.js +2 -2
  306. package/dist/esm/q2-toast.entry.js +1 -1
  307. package/dist/esm/q2-tooltip.entry.js +1 -1
  308. package/dist/esm/{sectorHelper--RMGWGAy.js → sectorHelper-DBtkWtpl.js} +1 -1
  309. package/dist/esm/tecton-tab-pane.entry.js +5 -3
  310. package/dist/q2-tecton-elements/{charting-DOZct-UB.js → charting-DFXJklqs.js} +1625 -1554
  311. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +98 -54
  312. package/dist/q2-tecton-elements/{dataSample-Dm1zpQNi.js → dataSample-CP_VKNqt.js} +33 -33
  313. package/dist/q2-tecton-elements/date-picker-helpers-D8QnN_AS.js +153 -0
  314. package/dist/q2-tecton-elements/{index-Cps4jSQM.js → index-CP8pXJ-l.js} +2 -2
  315. package/dist/q2-tecton-elements/{q2-action-group_2.entry.js → q2-action-group.entry.js} +35 -113
  316. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +169 -84
  317. package/dist/q2-tecton-elements/q2-avatar.entry.js +8 -8
  318. package/dist/q2-tecton-elements/q2-badge_2.entry.js +240 -140
  319. package/dist/q2-tecton-elements/q2-btn_2.entry.js +23 -23
  320. package/dist/q2-tecton-elements/q2-calendar.entry.js +18 -13
  321. package/dist/q2-tecton-elements/q2-card-image.entry.js +9 -9
  322. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  323. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +4 -4
  324. package/dist/q2-tecton-elements/q2-carousel.entry.js +24 -11
  325. package/dist/q2-tecton-elements/q2-chart-area.entry.js +190 -144
  326. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +382 -338
  327. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +186 -160
  328. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +8 -8
  329. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +21 -19
  330. package/dist/q2-tecton-elements/q2-context.entry.js +18 -17
  331. package/dist/q2-tecton-elements/q2-currency.entry.js +9 -9
  332. package/dist/q2-tecton-elements/q2-data-table.entry.js +38 -38
  333. package/dist/q2-tecton-elements/q2-date-calendar.entry.js +438 -0
  334. package/dist/q2-tecton-elements/q2-date-picker_2.entry.js +792 -0
  335. package/dist/q2-tecton-elements/q2-detail.entry.js +4 -4
  336. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
  337. package/dist/q2-tecton-elements/q2-dropdown.entry.js +10 -10
  338. package/dist/q2-tecton-elements/q2-editable-field.entry.js +50 -41
  339. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  340. package/dist/q2-tecton-elements/q2-file-picker.entry.js +62 -7
  341. package/dist/q2-tecton-elements/q2-form.entry.js +2 -2
  342. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  343. package/dist/q2-tecton-elements/q2-icon.entry.js +1 -1
  344. package/dist/q2-tecton-elements/q2-item.entry.js +27 -17
  345. package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
  346. package/dist/q2-tecton-elements/q2-link_2.entry.js +7 -7
  347. package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
  348. package/dist/q2-tecton-elements/q2-message.entry.js +30 -30
  349. package/dist/q2-tecton-elements/q2-meter.entry.js +8 -8
  350. package/dist/q2-tecton-elements/q2-modal.entry.js +61 -45
  351. package/dist/q2-tecton-elements/q2-month-picker.entry.js +14 -14
  352. package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
  353. package/dist/q2-tecton-elements/q2-option.entry.js +1 -1
  354. package/dist/q2-tecton-elements/q2-otp.entry.js +9 -9
  355. package/dist/q2-tecton-elements/q2-pagination.entry.js +20 -20
  356. package/dist/q2-tecton-elements/q2-pill.entry.js +43 -41
  357. package/dist/q2-tecton-elements/q2-radio-group.entry.js +55 -34
  358. package/dist/q2-tecton-elements/q2-radio.entry.js +38 -53
  359. package/dist/q2-tecton-elements/q2-relative-time.entry.js +11 -11
  360. package/dist/q2-tecton-elements/q2-resize-observer.entry.js +81 -0
  361. package/dist/q2-tecton-elements/q2-search.entry.js +7 -7
  362. package/dist/q2-tecton-elements/q2-section.entry.js +25 -25
  363. package/dist/q2-tecton-elements/q2-select.entry.js +28 -21
  364. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +19 -15
  365. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +9 -9
  366. package/dist/q2-tecton-elements/q2-stepper.entry.js +45 -45
  367. package/dist/q2-tecton-elements/q2-surface.entry.js +3 -3
  368. package/dist/q2-tecton-elements/q2-tab-container.entry.js +15 -15
  369. package/dist/q2-tecton-elements/q2-tab-pane.entry.js +9 -9
  370. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  371. package/dist/q2-tecton-elements/q2-textarea.entry.js +3 -3
  372. package/dist/q2-tecton-elements/q2-toast.entry.js +1 -1
  373. package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
  374. package/dist/q2-tecton-elements/{sectorHelper--RMGWGAy.js → sectorHelper-DBtkWtpl.js} +56 -56
  375. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +8 -7
  376. package/dist/types/components/q2-action-sheet/q2-action-sheet.d.ts +21 -1
  377. package/dist/types/components/q2-action-sheet/test/q2-action-sheet-test.vr.d.ts +1 -0
  378. package/dist/types/components/q2-btn/q2-btn.d.ts +7 -3
  379. package/dist/types/components/q2-calendar/q2-calendar.d.ts +10 -2
  380. package/dist/types/components/q2-card-image/q2-card-image.d.ts +1 -1
  381. package/dist/types/components/q2-carousel/q2-carousel.d.ts +5 -0
  382. package/dist/types/components/q2-chart-area/q2-chart-area.d.ts +11 -2
  383. package/dist/types/components/q2-chart-bar/q2-chart-bar.d.ts +9 -0
  384. package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +1 -0
  385. package/dist/types/components/q2-checkbox/q2-checkbox.d.ts +4 -3
  386. package/dist/types/components/q2-checkbox-group/q2-checkbox-group.d.ts +4 -2
  387. package/dist/types/components/q2-date-calendar/q2-date-calendar.d.ts +122 -0
  388. package/dist/types/components/q2-date-calendar/test/q2-date-calendar-test.vr.d.ts +1 -0
  389. package/dist/types/components/q2-date-picker/q2-date-picker.d.ts +304 -0
  390. package/dist/types/components/q2-date-picker/test/q2-date-picker-test.vr.d.ts +1 -0
  391. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +3 -3
  392. package/dist/types/components/q2-dropdown/test/q2-dropdown-test.vr.d.ts +1 -0
  393. package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +20 -2
  394. package/dist/types/components/q2-file-picker/q2-file-picker.d.ts +20 -0
  395. package/dist/types/components/q2-input/q2-input.d.ts +32 -4
  396. package/dist/types/components/q2-item/q2-item.d.ts +3 -0
  397. package/dist/types/components/q2-modal/q2-modal.d.ts +10 -1
  398. package/dist/types/components/q2-option-list/q2-option-list.d.ts +1 -0
  399. package/dist/types/components/q2-popover/q2-popover.d.ts +4 -0
  400. package/dist/types/components/q2-radio/q2-radio.d.ts +3 -2
  401. package/dist/types/components/q2-radio-group/q2-radio-group.d.ts +18 -2
  402. package/dist/types/components/q2-search/q2-search.d.ts +3 -1
  403. package/dist/types/components/q2-select/q2-select.d.ts +12 -4
  404. package/dist/types/components/q2-textarea/q2-textarea.d.ts +4 -2
  405. package/dist/types/components.d.ts +1112 -195
  406. package/dist/types/global.d.ts +1 -0
  407. package/dist/types/index.d.ts +1 -0
  408. package/dist/types/utils/chart-keyboard.d.ts +16 -0
  409. package/dist/types/utils/date-picker/date-picker-helpers.d.ts +47 -0
  410. package/dist/types/utils/date-picker/date-picker-types.d.ts +42 -0
  411. package/dist/types/utils/test/vr-helpers.d.ts +2 -0
  412. package/package.json +3 -3
  413. package/dist/cjs/q2-optgroup.cjs.entry.js +0 -70
  414. package/dist/esm/q2-optgroup.entry.js +0 -68
  415. package/dist/q2-tecton-elements/q2-optgroup.entry.js +0 -88
@@ -0,0 +1,179 @@
1
+ import { expect } from "@playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { setupPage, THEMES } from "../../../utils/test/vr-helpers";
4
+ const MOBILE_VIEWPORT = { width: 360, height: 800 };
5
+ // Fixed dates keep the variants deterministic.
6
+ const SINGLE_VALUE = '2026-06-15';
7
+ const RANGE_START = '2026-06-10';
8
+ const RANGE_END = '2026-06-20';
9
+ const INVALID_RANGE_DATE = '2026-06-15';
10
+ const RESTING_VARIANTS = [
11
+ { name: 'default', html: `<q2-date-picker></q2-date-picker>` },
12
+ {
13
+ name: 'single-value',
14
+ html: `<q2-date-picker label="Date" placeholder="Select a date" value="${SINGLE_VALUE}"></q2-date-picker>`,
15
+ },
16
+ {
17
+ name: 'custom-display-format',
18
+ html: `<q2-date-picker label="Date" placeholder="Select a date" value="${SINGLE_VALUE}" display-format="dddd, MMMM D, YYYY"></q2-date-picker>`,
19
+ },
20
+ {
21
+ name: 'range-value',
22
+ html: `<q2-date-picker mode="range" label="Date Range" placeholder="Select date range" range-start="${RANGE_START}" range-end="${RANGE_END}"></q2-date-picker>`,
23
+ },
24
+ {
25
+ name: 'single-typeable',
26
+ html: `<q2-date-picker mode="single-typeable" label="Date" placeholder="MM/DD/YYYY"></q2-date-picker>`,
27
+ },
28
+ {
29
+ name: 'range-typeable',
30
+ html: `<q2-date-picker mode="range-typeable" label="Date Range" placeholder="MM/DD/YYYY - MM/DD/YYYY"></q2-date-picker>`,
31
+ },
32
+ {
33
+ name: 'disabled',
34
+ html: `<q2-date-picker label="Date" placeholder="Select a date" disabled disabled-msg="Dates unavailable"></q2-date-picker>`,
35
+ },
36
+ {
37
+ name: 'readonly',
38
+ html: `<q2-date-picker label="Date" placeholder="Select a date" readonly value="${SINGLE_VALUE}"></q2-date-picker>`,
39
+ },
40
+ {
41
+ name: 'invalid',
42
+ html: `<q2-date-picker label="Date" placeholder="Select a date" invalid></q2-date-picker>`,
43
+ },
44
+ {
45
+ name: 'valid',
46
+ html: `<q2-date-picker label="Date" placeholder="Select a date" valid value="${SINGLE_VALUE}"></q2-date-picker>`,
47
+ },
48
+ {
49
+ name: 'optional',
50
+ html: `<q2-date-picker label="Date" placeholder="Select a date" optional></q2-date-picker>`,
51
+ },
52
+ {
53
+ name: 'clearable-value',
54
+ html: `<q2-date-picker label="Date" placeholder="Select a date" clearable value="${SINGLE_VALUE}"></q2-date-picker>`,
55
+ },
56
+ {
57
+ name: 'hide-label',
58
+ html: `<q2-date-picker label="Date" placeholder="Select a date" hide-label value="${SINGLE_VALUE}"></q2-date-picker>`,
59
+ },
60
+ ];
61
+ const DEFAULT_HOVER_VARIANT = {
62
+ name: 'default',
63
+ html: `<q2-date-picker></q2-date-picker>`,
64
+ };
65
+ const DEFAULT_FOCUS_VARIANT = {
66
+ name: 'default',
67
+ html: `<q2-date-picker></q2-date-picker>`,
68
+ };
69
+ const EXPANDED_VARIANTS = [
70
+ {
71
+ name: 'expanded-single',
72
+ html: `<q2-date-picker label="Date" placeholder="Select a date" value="${SINGLE_VALUE}" popover-alignment="left"></q2-date-picker>`,
73
+ },
74
+ {
75
+ name: 'expanded-range',
76
+ html: `<q2-date-picker mode="range" label="Date Range" placeholder="Select date range" range-start="${RANGE_START}" range-end="${RANGE_END}" popover-alignment="left"></q2-date-picker>`,
77
+ },
78
+ {
79
+ name: 'expanded-up',
80
+ html: `<q2-date-picker style="margin-top: 450px" label="Date" placeholder="Select a date" value="${SINGLE_VALUE}" popover-alignment="left" popover-direction="up"></q2-date-picker>`,
81
+ },
82
+ ];
83
+ const INVALID_RANGE_VARIANT = {
84
+ name: 'range-invalid-confirm',
85
+ html: `<q2-date-picker mode="range" label="Date Range" placeholder="Select date range" range-start="${RANGE_START}" range-end="${RANGE_END}" open></q2-date-picker>`,
86
+ };
87
+ const MOBILE_ACTION_SHEET_RANGE_VARIANT = {
88
+ name: 'action-sheet-range-mobile',
89
+ html: `<q2-date-picker _action-sheet mode="range" range-start="${RANGE_START}" range-end="${RANGE_END}"></q2-date-picker>`,
90
+ };
91
+ const restingCase = (variant, theme) => {
92
+ test(`q2-date-picker--${variant.name}--resting — ${theme}`, async ({ page }) => {
93
+ await setupPage(page, variant.html, { theme, setupLoc: true });
94
+ await expect(page).toHaveScreenshot(`q2-date-picker--${variant.name}--resting--${theme}.png`);
95
+ });
96
+ };
97
+ const hoverCase = (variant, theme) => {
98
+ test(`q2-date-picker--${variant.name}--hover — ${theme}`, async ({ page }) => {
99
+ await setupPage(page, variant.html, { theme, setupLoc: true });
100
+ await page.locator('q2-date-picker').hover();
101
+ await expect(page).toHaveScreenshot(`q2-date-picker--${variant.name}--hover--${theme}.png`);
102
+ });
103
+ };
104
+ const focusCase = (variant, theme) => {
105
+ test(`q2-date-picker--${variant.name}--focus — ${theme}`, async ({ page }) => {
106
+ await setupPage(page, variant.html, { theme, setupLoc: true });
107
+ await page.keyboard.press('Tab');
108
+ await expect(page).toHaveScreenshot(`q2-date-picker--${variant.name}--focus--${theme}.png`);
109
+ });
110
+ };
111
+ // q2-popover renders its calendar before its opening animation completes. Wait
112
+ // for the animation instead of relying on a visibility check alone.
113
+ const waitForPopoverAnimation = async (page) => {
114
+ await page.locator('q2-popover .container').evaluate(async (element) => {
115
+ // A popover animation can be replaced while it is positioning itself. Its
116
+ // `finished` promise rejects when canceled, but that is still a settled
117
+ // visual state for this screenshot.
118
+ await Promise.allSettled(element.getAnimations({ subtree: true }).map(animation => animation.finished));
119
+ await new Promise(resolve => requestAnimationFrame(() => resolve()));
120
+ });
121
+ };
122
+ const expandedCase = (variant, theme) => {
123
+ test(`q2-date-picker--${variant.name}--expanded — ${theme}`, async ({ page }) => {
124
+ await setupPage(page, variant.html, { theme, setupLoc: true });
125
+ await page.locator('q2-date-picker').evaluate((el) => (el.open = true));
126
+ // Wait for the calendar panel inside the popover to render.
127
+ await page.locator('q2-date-calendar .cal-panel').waitFor({ state: 'visible' });
128
+ await waitForPopoverAnimation(page);
129
+ await expect(page).toHaveScreenshot(`q2-date-picker--${variant.name}--expanded--${theme}.png`);
130
+ });
131
+ };
132
+ const mobileActionSheetRangeCase = (theme) => {
133
+ test(`q2-date-picker--${MOBILE_ACTION_SHEET_RANGE_VARIANT.name}--resting — ${theme}`, async ({ page }) => {
134
+ await page.setViewportSize(MOBILE_VIEWPORT);
135
+ await setupPage(page, MOBILE_ACTION_SHEET_RANGE_VARIANT.html, { theme, setupLoc: true });
136
+ await expect(page).toHaveScreenshot(`q2-date-picker--${MOBILE_ACTION_SHEET_RANGE_VARIANT.name}--resting--${theme}.png`);
137
+ });
138
+ };
139
+ const invalidRangeCase = (variant, theme) => {
140
+ test(`q2-date-picker--${variant.name}--error — ${theme}`, async ({ page }) => {
141
+ await setupPage(page, variant.html, { theme, setupLoc: true });
142
+ await page.locator('q2-date-calendar .cal-panel').waitFor({ state: 'visible' });
143
+ await waitForPopoverAnimation(page);
144
+ await page.locator('q2-date-picker').evaluate((element, invalidDate) => {
145
+ element.invalidDates = [invalidDate];
146
+ }, INVALID_RANGE_DATE);
147
+ await expect(page.locator(`q2-date-calendar button[data-date="${INVALID_RANGE_DATE}"]`)).toHaveClass(/is-disabled/);
148
+ await page.locator('q2-date-calendar .cal-footer-actions q2-btn[intent="workflow-primary"] button').click();
149
+ const input = page.locator('q2-date-picker q2-input');
150
+ await expect(input).toHaveJSProperty('errors', ['Range includes unavailable dates.']);
151
+ await page.locator('q2-date-picker q2-popover .cal-panel').waitFor({ state: 'hidden' });
152
+ await input.locator('[test-id="iconError"]').waitFor({ state: 'visible' });
153
+ await expect(page).toHaveScreenshot(`q2-date-picker--${variant.name}--error--${theme}.png`);
154
+ });
155
+ };
156
+ test.describe('q2-date-picker — variants × themes', () => {
157
+ for (const variant of RESTING_VARIANTS) {
158
+ for (const theme of THEMES) {
159
+ restingCase(variant, theme);
160
+ }
161
+ }
162
+ for (const theme of THEMES) {
163
+ hoverCase(DEFAULT_HOVER_VARIANT, theme);
164
+ }
165
+ for (const theme of THEMES) {
166
+ focusCase(DEFAULT_FOCUS_VARIANT, theme);
167
+ }
168
+ for (const variant of EXPANDED_VARIANTS) {
169
+ for (const theme of THEMES) {
170
+ expandedCase(variant, theme);
171
+ }
172
+ }
173
+ for (const theme of THEMES) {
174
+ invalidRangeCase(INVALID_RANGE_VARIANT, theme);
175
+ }
176
+ for (const theme of THEMES) {
177
+ mobileActionSheetRangeCase(theme);
178
+ }
179
+ });
@@ -113,7 +113,7 @@ export class Q2Detail {
113
113
  // #endregion
114
114
  // #region Render Methods
115
115
  render() {
116
- return (h("div", { key: '0f3654772fe3929f6bf7294f454c774b495a6b62', class: this.detailClasses }, this.hasLabel && (h("div", { key: '3d0507462b8cb995a3f19dccd8bcede903a99800', class: this.labelClasses, "aria-describedby": !!this.description ? 'label-description' : undefined }, !!this.label ? loc(this.label) : this.hasLabelSlotContent ? h("slot", { name: "label" }) : '')), this.hasDescripiton && (h("div", { key: 'bef3f201c69fdee763fc302aecc15a28fd9940be', id: "label-description", class: this.descriptionClasses }, !!this.description ? loc(this.description) : this.hasDefaultSlotContent ? h("slot", null) : ''))));
116
+ return (h("div", { key: '18da4ca97fe076c40a3d6ef95b73b570cee07649', class: this.detailClasses }, this.hasLabel && (h("div", { key: '7b88ffdd3e42abb1313d729874d198642a83e66d', class: this.labelClasses, "aria-describedby": !!this.description ? 'label-description' : undefined }, !!this.label ? loc(this.label) : this.hasLabelSlotContent ? h("slot", { name: "label" }) : '')), this.hasDescripiton && (h("div", { key: '9eecdbf3aa2519da9508f1c210d3b3a9129824ce', id: "label-description", class: this.descriptionClasses }, !!this.description ? loc(this.description) : this.hasDefaultSlotContent ? h("slot", null) : ''))));
117
117
  }
118
118
  static get is() { return "q2-detail"; }
119
119
  static get encapsulation() { return "shadow"; }
@@ -88,6 +88,7 @@ button {
88
88
  }
89
89
  }
90
90
  /**
91
+ * @prop --tct-dropdown-icon-size: (<length>) Controls the size of the dropdown icon.
91
92
  * @prop --tct-dropdown-content-padding?: (<length-percentage>+) Controls the optional padding around the dropdown popover content.
92
93
  * @prop --tct-dropdown-popover-top-slot-padding: (<length-percentage>+) Controls the inner padding of the dropdown's popover-top slot.
93
94
  * @prop --tct-dropdown-popover-bottom-slot-padding: (<length-percentage>+) Controls the inner padding of the dropdown's popover-bottom slot.
@@ -122,6 +123,7 @@ button {
122
123
  q2-icon {
123
124
  pointer-events: none;
124
125
  margin-block: -100px;
126
+ --tct-icon-size: var(--tct-dropdown-icon-size, var(--const-px-18, 18px));
125
127
  }
126
128
 
127
129
  click-elsewhere {
@@ -252,7 +252,7 @@ export class Q2Dropdown {
252
252
  const custom = type === 'custom';
253
253
  let intent;
254
254
  if (allowedIntents.includes(type)) {
255
- intent = type === 'neutral' ? type : `workflow-${type}`;
255
+ intent = type;
256
256
  }
257
257
  const active = this.open;
258
258
  const disabled = !!this.disabled;
@@ -364,7 +364,7 @@ export class Q2Dropdown {
364
364
  // #region Render Methods
365
365
  render() {
366
366
  const btnProps = this.toggleButtonProps;
367
- return (h("click-elsewhere", { key: '27e7a560b21894fb10175be18c9cb07e37f59db3', class: this.open ? 'dropdown-open' : '', onChange: this.onClickElsewhere, "test-id": "dropdownContainer" }, h("q2-btn", { key: 'b53dace27e75fdbcd87a1689470a1466ad9e07d3', tabIndex: 0, ref: el => (this.controlElement = el), class: btnProps.className, onClick: this.onToggleClick, onKeyDown: this.onToggleKeydown, fab: btnProps.fab, intent: btnProps.intent, onFocusout: this.handleFocusOut, active: btnProps.active, disabled: btnProps.disabled, ariaExpanded: `${!!btnProps.ariaExpanded}`, label: this.hideLabel && this.label ? loc(this.label) : undefined, hideLabel: this.hideLabel, ariaHasPopup: "menu", "test-id": "dropdownButton", block: this.block, description: loc('tecton.element.dropdown.itemCount', [this.determineDropdownItemCount]) }, this.hasCustomControl ? (h("div", { "test-id": "dropdownControl", class: btnProps.custom ? '' : 'hidden' }, h("slot", { name: "control" }))) : (h(Fragment, null, this.label && !this.hideLabel && (h("span", { class: "dropdown-button-text" }, loc(this.label))), this.icon ? h("q2-icon", { type: this.icon }) : ' '))), h("q2-popover", { key: '4a15e7d6d8f474c8464e39e35437cd8edcc9487d', ref: el => (this.popoverElement = el), controlElement: this.controlElement, open: this.open, "max-height": this.popoverMaxHeight, onFocusout: this.handleFocusOut, minHeight: this.popoverMinHeight, direction: this.popoverDirection, align: this.popoverAlignment, mode: this.popoverMode || undefined, block: this.block }, h("slot", { key: '7854254650f81b8d5a229acbec55aa8beab36882', name: "popover-top" }), h("q2-option-list", { key: 'a38c9411306ad8d39456dce81bb50e9af13bf1f6', onPopoverState: this.onPopoverState, id: "option-list", ref: el => (this.optionList = el), type: "menu", label: loc('tecton.element.optionList.label', [this.optionListLabel]), "no-select": true }, h("slot", { key: '7472127d019366f76eff86cd744d050d197b25c1' })), h("slot", { key: '5af670e8f5ed273175100ddc9202c44e2c06f7b3', name: "popover-bottom" }))));
367
+ return (h("click-elsewhere", { key: '45129d88765c097736a818c203418921bc669d2f', class: this.open ? 'dropdown-open' : '', onChange: this.onClickElsewhere, "test-id": "dropdownContainer" }, h("q2-btn", { key: 'cb76fe56a37af0909e06f267969c0f6605be318d', tabIndex: 0, ref: el => (this.controlElement = el), class: btnProps.className, onClick: this.onToggleClick, onKeyDown: this.onToggleKeydown, fab: btnProps.fab, intent: btnProps.intent, onFocusout: this.handleFocusOut, active: btnProps.active, disabled: btnProps.disabled, ariaExpanded: `${!!btnProps.ariaExpanded}`, label: this.hideLabel && this.label ? loc(this.label) : undefined, hideLabel: this.hideLabel, ariaHasPopup: "menu", "test-id": "dropdownButton", block: this.block, description: loc('tecton.element.dropdown.itemCount', [this.determineDropdownItemCount]) }, this.hasCustomControl ? (h("div", { "test-id": "dropdownControl", class: btnProps.custom ? '' : 'hidden' }, h("slot", { name: "control" }))) : (h(Fragment, null, this.label && !this.hideLabel && (h("span", { class: "dropdown-button-text" }, loc(this.label))), this.icon ? h("q2-icon", { type: this.icon }) : ' '))), h("q2-popover", { key: '73bb8792c03313ae6074299d431d913435e95707', ref: el => (this.popoverElement = el), controlElement: this.controlElement, open: this.open, "max-height": this.popoverMaxHeight, onFocusout: this.handleFocusOut, minHeight: this.popoverMinHeight, direction: this.popoverDirection, align: this.popoverAlignment, mode: this.popoverMode || undefined, block: this.block }, h("slot", { key: '05fa5e37195ce747ac4e801e1decf55838d9c752', name: "popover-top" }), h("q2-option-list", { key: '534b2dfaf2616937933aa2377d1a647688c679c9', onPopoverState: this.onPopoverState, id: "option-list", ref: el => (this.optionList = el), type: "menu", label: loc('tecton.element.optionList.label', [this.optionListLabel]), "no-select": true }, h("slot", { key: '686b6b14ebc67aad7707e6dc0c0170b117afde4e' })), h("slot", { key: '43b916294d33ac547efc6eeed2b2fc1c87085ad3', name: "popover-bottom" }))));
368
368
  }
369
369
  static get is() { return "q2-dropdown"; }
370
370
  static get encapsulation() { return "shadow"; }
@@ -557,9 +557,9 @@ export class Q2Dropdown {
557
557
  "docs": {
558
558
  "tags": [{
559
559
  "name": "warning",
560
- "text": "Only use when a visible label is impractical."
560
+ "text": "Hides the label visually. `label` text is still required for screenreader compliance."
561
561
  }],
562
- "text": "Hide's the field's `<label>` element from view."
562
+ "text": "Hides the dropdown's label text from view."
563
563
  },
564
564
  "getter": false,
565
565
  "setter": false,
@@ -618,7 +618,7 @@ export class Q2Dropdown {
618
618
  "docs": {
619
619
  "tags": [{
620
620
  "name": "warning",
621
- "text": "This property should not be used if the `type` is `icon`."
621
+ "text": "Required for screen reader compliance even when `hideLabel` is `true`."
622
622
  }, {
623
623
  "name": "localizable",
624
624
  "text": undefined
@@ -0,0 +1,30 @@
1
+ import { expect } from "@playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { setupPage, THEMES } from "../../../utils/test/vr-helpers";
4
+ const VARIANTS = [
5
+ {
6
+ name: 'chevron',
7
+ html: `<q2-dropdown type="neutral" icon="chevron-down" label="Actions">
8
+ <q2-option value="view">View details</q2-option>
9
+ </q2-dropdown>`,
10
+ },
11
+ {
12
+ name: 'icon',
13
+ html: `<q2-dropdown type="icon" icon="options" label="More actions" hide-label>
14
+ <q2-option value="view">View details</q2-option>
15
+ </q2-dropdown>`,
16
+ },
17
+ ];
18
+ const restingCase = (variant, theme) => {
19
+ test(`q2-dropdown--${variant.name}--resting - ${theme}`, async ({ page }) => {
20
+ await setupPage(page, variant.html, { theme, setupLoc: true });
21
+ await expect(page).toHaveScreenshot(`q2-dropdown--${variant.name}--resting--${theme}.png`);
22
+ });
23
+ };
24
+ test.describe('q2-dropdown - variants x themes', () => {
25
+ for (const variant of VARIANTS) {
26
+ for (const theme of THEMES) {
27
+ restingCase(variant, theme);
28
+ }
29
+ }
30
+ });
@@ -88,6 +88,7 @@ button {
88
88
  }
89
89
  }
90
90
  /**
91
+ * @prop --tct-editable-field-icon-size: (<length>) Controls the size of edit, confirm, and cancel icons.
91
92
  * @prop --tct-editable-field-btn-hover-background: (<color>) Controls the background color of the editable field action buttons (begin, save, cancel) on hover.
92
93
  * @prop --tct-editable-field-btn-icon-stroke-primary: (<color>) Controls the primary stroke color of the editable field action button icons.
93
94
  * @prop --tct-editable-field-btn-icon-stroke-secondary: (<color>) Controls the secondary stroke color of the editable field action button icons.
@@ -101,6 +102,7 @@ button {
101
102
  .q2-editable-field-wrapper .save-edit,
102
103
  .q2-editable-field-wrapper .cancel-edit {
103
104
  flex: 0 0 44px;
105
+ --tct-icon-size: var(--tct-editable-field-icon-size, var(--const-px-18, 18px));
104
106
  --tct-btn-icon-hover-background: var(--tct-editable-field-btn-hover-background, var(--app-gray-l3, #f2f2f2));
105
107
  --tct-icon-stroke-primary: var(--tct-editable-field-btn-icon-stroke-primary, var(--app-gray, #747474));
106
108
  --tct-icon-stroke-secondary: var(--tct-editable-field-btn-icon-stroke-secondary, var(--app-gray, #747474));
@@ -14,6 +14,8 @@ export class Q2EditableField {
14
14
  /**
15
15
  * The visible descriptor for the element.
16
16
  * Serves as the input label while in the edit state and as a decorative label for the read state when `persistentLabel` is `true`.
17
+ * @warning
18
+ * Required for screen reader compliance even when `hideLabel` is `true`.
17
19
  * @localizable
18
20
  */
19
21
  this.label = '';
@@ -21,15 +23,21 @@ export class Q2EditableField {
21
23
  this.value = '';
22
24
  this.cancelClick = (event) => {
23
25
  event === null || event === void 0 ? void 0 : event.stopPropagation();
24
- mirrorEmit(this, ['change', 'tctChange'], { editing: false, name: 'cancel' });
25
- this.innerValue = undefined;
26
- this.formattedValue = undefined;
27
- this.inputElement.value = '';
28
- this.inputElement.value = this.defaultValue;
26
+ const emittedEvents = this.emitChangeEvents({ editing: false, name: 'cancel' });
27
+ queueMicrotask(() => {
28
+ if (this.isDefaultPrevented(emittedEvents))
29
+ return;
30
+ this.editing = false;
31
+ });
29
32
  };
30
33
  this.editClick = (event) => {
31
34
  event === null || event === void 0 ? void 0 : event.stopPropagation();
32
- mirrorEmit(this, ['change', 'tctChange'], { editing: true, name: 'edit' });
35
+ const emittedEvents = this.emitChangeEvents({ editing: true, name: 'edit' });
36
+ queueMicrotask(() => {
37
+ if (this.isDefaultPrevented(emittedEvents))
38
+ return;
39
+ this.editing = true;
40
+ });
33
41
  };
34
42
  this.inputChange = (e) => {
35
43
  e.stopPropagation();
@@ -58,11 +66,18 @@ export class Q2EditableField {
58
66
  this.saveClick = (event) => {
59
67
  event && event.stopPropagation();
60
68
  const valueFromInputProp = this.hostElement.shadowRoot.querySelector('q2-input').value;
61
- mirrorEmit(this, ['change', 'tctChange'], {
62
- editing: false,
63
- name: 'save',
64
- value: this.innerValue || valueFromInputProp,
65
- formattedValue: this.formattedValue || valueFromInputProp,
69
+ const value = this.innerValue || valueFromInputProp;
70
+ const formattedValue = this.formattedValue || valueFromInputProp;
71
+ const emittedEvents = this.emitChangeEvents({ editing: false, name: 'save', value, formattedValue });
72
+ queueMicrotask(() => {
73
+ if (this.isDefaultPrevented(emittedEvents))
74
+ return;
75
+ if (this.hasErrors) {
76
+ this.inputElement.focus();
77
+ return;
78
+ }
79
+ this.value = value;
80
+ this.editing = false;
66
81
  });
67
82
  };
68
83
  }
@@ -81,29 +96,6 @@ export class Q2EditableField {
81
96
  }
82
97
  // #endregion
83
98
  // #region Listeners
84
- onHostElementChange(event) {
85
- if (!isEventFromElement(event, this.hostElement) || this.hostElement.onchange)
86
- return;
87
- queueMicrotask(() => {
88
- switch (event.detail.name) {
89
- case 'save':
90
- if (this.hasErrors) {
91
- this.inputElement.focus();
92
- break;
93
- }
94
- this.value = event.detail.value;
95
- this.editing = event.detail.editing;
96
- break;
97
- case 'cancel':
98
- this.inputElement.value = this.value;
99
- this.editing = event.detail.editing;
100
- break;
101
- case 'edit':
102
- this.editing = event.detail.editing;
103
- break;
104
- }
105
- });
106
- }
107
99
  delegateFocus(event) {
108
100
  if (!isEventFromElement(event, this.hostElement))
109
101
  return;
@@ -172,6 +164,8 @@ export class Q2EditableField {
172
164
  observesEditing(newValue, oldValue) {
173
165
  if (newValue === oldValue)
174
166
  return;
167
+ if (!newValue)
168
+ this.discardDraft();
175
169
  this.scheduledAfterRender.push(this.hostElement.focus);
176
170
  }
177
171
  errorsObserver() {
@@ -199,6 +193,23 @@ export class Q2EditableField {
199
193
  get wrapperClass() {
200
194
  return `q2-editable-field-wrapper ${this.editing ? 'editing' : ''}`;
201
195
  }
196
+ /**
197
+ * Drops the in-progress draft and re-syncs the input and the read state display from `value`.
198
+ *
199
+ * Runs whenever the field leaves the edit state, including when a consumer drives `editing` itself, so the
200
+ * read state never renders a discarded draft.
201
+ */
202
+ discardDraft() {
203
+ this.innerValue = undefined;
204
+ this.formattedValue = undefined;
205
+ // `q2-input` only drops its own draft when its `value` prop actually changes, so bounce through a
206
+ // throwaway value that is guaranteed to differ from `value` before restoring it.
207
+ this.inputElement.value = this.value === '' ? ' ' : '';
208
+ this.inputElement.value = this.value;
209
+ }
210
+ emitChangeEvents(detail) {
211
+ return [this.change.emit(detail), this.tctChange.emit(detail)];
212
+ }
202
213
  generateEditStateDOM() {
203
214
  return (h("div", { class: this.wrapperClass, hidden: !this.editing }, h("q2-input", { ref: el => (this.inputElement = el), label: this.locLabel, hideLabel: this.hideLabel, value: this.value, hints: this.hasHints ? this.hints : undefined, errors: this.hasErrors ? this.errors : undefined, type: this.type, disabled: this.disabled, _updateValueOnInput: false, formatModifier: this.formatModifier, maxlength: this.maxlength, "test-id": "editableInput", onChange: e => e.stopImmediatePropagation(), onInput: e => e.stopImmediatePropagation(), onTctInput: this.inputInput, onTctChange: this.inputChange, onKeyDown: this.inputKeyDown, onClick: this.inputClick }), h("q2-btn", { ref: el => (this.cancelBtnElement = el), class: "cancel-edit", label: `${loc('tecton.element.editableField.cancel')} ${this.locLabel}`, "hide-label": true, "test-id": "cancelButton", onClick: e => e.stopImmediatePropagation(), onTctClick: this.cancelClick }, h("q2-icon", { type: "close" })), h("q2-btn", { ref: el => (this.saveBtnElement = el), class: "save-edit", label: `${loc('tecton.element.editableField.save')} ${this.locLabel}`, "hide-label": true, "test-id": "saveButton", onClick: e => e.stopImmediatePropagation(), onTctClick: this.saveClick }, h("q2-icon", { type: "checkmark" }))));
204
215
  }
@@ -208,10 +219,13 @@ export class Q2EditableField {
208
219
  }
209
220
  return (h("div", { class: this.wrapperClass, hidden: this.editing }, h("div", { class: "text-wrapper" }, this.formattedValue || this.value), h("q2-btn", { ref: el => (this.editBtnElement = el), class: "begin-edit", label: `${loc('tecton.element.editableField.edit')} ${this.locLabel}`, "hide-label": true, disabled: this.disabled, "test-id": "editButton", onClick: e => e.stopImmediatePropagation(), onTctClick: this.editClick }, h("q2-icon", { type: "edit" }))));
210
221
  }
222
+ isDefaultPrevented(events) {
223
+ return this.hostElement.onchange != null || events.some(event => event.defaultPrevented);
224
+ }
211
225
  // #endregion
212
226
  // #region Render Methods
213
227
  render() {
214
- return (h("div", { key: 'bd200b48458ec6c7cb6c6928a1758420dbca66e3' }, this.generateEditStateDOM(), this.generateReadStateDOM()));
228
+ return (h("div", { key: '38f7c5b55e8b6f0590c72ab81a4bb26c93506249' }, this.generateEditStateDOM(), this.generateReadStateDOM()));
215
229
  }
216
230
  static get is() { return "q2-editable-field"; }
217
231
  static get encapsulation() { return "shadow"; }
@@ -357,8 +371,11 @@ export class Q2EditableField {
357
371
  "required": false,
358
372
  "optional": false,
359
373
  "docs": {
360
- "tags": [],
361
- "text": "Hide's the field's `<label>` element from view."
374
+ "tags": [{
375
+ "name": "warning",
376
+ "text": "Hides the label visually. `label` text is still required for screenreader compliance."
377
+ }],
378
+ "text": "Hides the field's `<label>` element from view."
362
379
  },
363
380
  "getter": false,
364
381
  "setter": false,
@@ -394,6 +411,9 @@ export class Q2EditableField {
394
411
  "optional": false,
395
412
  "docs": {
396
413
  "tags": [{
414
+ "name": "warning",
415
+ "text": "Required for screen reader compliance even when `hideLabel` is `true`."
416
+ }, {
397
417
  "name": "localizable",
398
418
  "text": undefined
399
419
  }],
@@ -530,7 +550,7 @@ export class Q2EditableField {
530
550
  "name": "deprecated",
531
551
  "text": "Use 'tctChange' instead"
532
552
  }],
533
- "text": "Emitted when the 'Edit', 'Cancel', or 'Save' buttons are clicked.\n\nThe event detail will not include a `value` or `formattedValue` if the event name is 'edit' or 'cancel'."
553
+ "text": "Emitted when the 'Edit', 'Cancel', or 'Save' buttons are clicked.\n\nThe event detail will not include a `value` or `formattedValue` if the event name is 'edit' or 'cancel'.\n\nCall `event.preventDefault()` to prevent the default behavior (the component's internal `editing` and `value` updates)."
534
554
  },
535
555
  "complexType": {
536
556
  "original": "{\n editing: boolean;\n name: 'edit' | 'cancel' | 'save';\n value?: string;\n formattedValue?: string;\n }",
@@ -566,7 +586,7 @@ export class Q2EditableField {
566
586
  "name": "info",
567
587
  "text": "If you are utilizing events to provide input validation, it is recommended you use the `input` event, not the `change` event."
568
588
  }],
569
- "text": "Emitted when the 'Edit', 'Cancel', or 'Save' buttons are clicked.\n\nThe event detail will not include a `value` or `formattedValue` if the event name is 'edit' or 'cancel'."
589
+ "text": "Emitted when the 'Edit', 'Cancel', or 'Save' buttons are clicked.\n\nThe event detail will not include a `value` or `formattedValue` if the event name is 'edit' or 'cancel'.\n\nCall `event.preventDefault()` to prevent the default behavior (the component's internal `editing` and `value` updates)."
570
590
  },
571
591
  "complexType": {
572
592
  "original": "{\n editing: boolean;\n name: 'edit' | 'cancel' | 'save';\n value?: string;\n formattedValue?: string;\n }",
@@ -685,12 +705,6 @@ export class Q2EditableField {
685
705
  }
686
706
  static get listeners() {
687
707
  return [{
688
- "name": "change",
689
- "method": "onHostElementChange",
690
- "target": undefined,
691
- "capture": false,
692
- "passive": false
693
- }, {
694
708
  "name": "focus",
695
709
  "method": "delegateFocus",
696
710
  "target": undefined,
@@ -118,7 +118,7 @@ export class Q2Example {
118
118
  }, onClick: () => this.tctClick.emit(), role: "menu" }, h("slot", null))));
119
119
  }
120
120
  render() {
121
- return h(Host, { key: '7878622b0f2a455617e109b9aa32290bffc00a92', attribute: "navigation" }, this.renderMenuInner());
121
+ return h(Host, { key: 'e7adf64d703f0226f4ee5f5038ddbcda28b27ed2', attribute: "navigation" }, this.renderMenuInner());
122
122
  }
123
123
  static get is() { return "q2-example"; }
124
124
  static get encapsulation() { return "shadow"; }
@@ -230,6 +230,7 @@ button {
230
230
  * @prop --tct-file-picker-item-close-btn-border-radius: (<length-percentage>) Controls the corner radius of the file item close button.
231
231
  * @prop --tct-file-picker-item-close-btn-size: (<length>) Controls the width and height of the file item close button.
232
232
  * @prop --tct-file-picker-list-max-height: (<length-percentage>) Controls the maximum height of the file list container before scrolling.
233
+ * @prop --tct-file-picker-list-gradient-height: (<length-percentage>) Controls the height of the fade indicating more files are available below the visible list.
233
234
  * @prop --tct-file-picker-scrollbar-color: (<color>) Controls the scrollbar thumb color of the file list container.
234
235
  * @prop --tct-file-picker-loading-size: (<length>) Controls the font size driving the picker-level loading spinner.
235
236
  * @prop --tct-file-picker-loading-file-color: (<color>) Controls the text color of the loading-file message.
@@ -357,6 +358,28 @@ button {
357
358
  white-space: nowrap;
358
359
  }
359
360
 
361
+ .file-name-header {
362
+ display: flex;
363
+ align-items: center;
364
+ min-width: 0;
365
+ white-space: nowrap;
366
+ width: 100%;
367
+ }
368
+
369
+ .file-name-leading {
370
+ flex: 0 1 auto;
371
+ min-width: 0;
372
+ overflow: hidden;
373
+ text-overflow: ellipsis;
374
+ }
375
+
376
+ .file-name-trailing {
377
+ direction: rtl;
378
+ flex: 0 0 auto;
379
+ max-width: 50%;
380
+ overflow: hidden;
381
+ }
382
+
360
383
  .file-item-loading {
361
384
  /* stylelint-disable-next-line tecton/require-t-px-fallback */
362
385
  font-size: var(--tct-file-picker-file-item-loading-size, var(--app-scale-6x, 30px));
@@ -375,6 +398,10 @@ button {
375
398
  scrollbar-width: thin;
376
399
  scrollbar-color: var(--tct-file-picker-scrollbar-color, var(--t-a11y-gray-color, #949494)) transparent;
377
400
  }
401
+ .file-list-container.more-files {
402
+ -webkit-mask-image: linear-gradient(to bottom, currentColor calc(100% - var(--tct-file-picker-list-gradient-height, var(--app-scale-12x, 60px))), transparent 100%);
403
+ mask-image: linear-gradient(to bottom, currentColor calc(100% - var(--tct-file-picker-list-gradient-height, var(--app-scale-12x, 60px))), transparent 100%);
404
+ }
378
405
 
379
406
  .file-picker {
380
407
  display: flex;