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
@@ -131,7 +131,7 @@ dialog {
131
131
  --comp-dialog-gap: var(--tct-modal-gap, var(--app-scale-2x, 10px));
132
132
  --comp-dialog-max-width: var(--tct-modal-max-width, 600px);
133
133
  --comp-dialog-max-height: var(--tct-modal-max-height, 100vh);
134
- --comp-dialog-min-height: var(--tct-modal-min-height, 40vh);
134
+ --comp-dialog-min-height: var(--tct-modal-min-height, inherit);
135
135
  --comp-dialog-box-shadow: var(--tct-modal-box-shadow, var(--app-shadow-2, 0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)));
136
136
  position: fixed;
137
137
  top: 100%;
@@ -141,6 +141,7 @@ dialog {
141
141
  transition: transform var(--tct-modal-tween, var(--app-tween-2, 0.4s ease)), opacity var(--tct-modal-tween, var(--app-tween-2, 0.4s ease));
142
142
  width: 100%;
143
143
  max-width: var(--comp-dialog-max-width);
144
+ max-height: var(--comp-dialog-max-height);
144
145
  border: 0;
145
146
  border-radius: var(--comp-border-radius);
146
147
  box-shadow: var(--comp-dialog-box-shadow);
@@ -222,11 +223,12 @@ dialog[open].is-closing::backdrop {
222
223
  }
223
224
 
224
225
  .interior {
226
+ box-sizing: border-box;
225
227
  display: grid;
226
228
  min-height: var(--comp-dialog-min-height);
227
- grid-template-rows: auto 1fr auto;
229
+ grid-template-rows: auto minmax(0, 1fr) auto;
228
230
  gap: var(--comp-dialog-gap);
229
- max-height: calc(var(--comp-dialog-max-height) - var(--comp-dialog-padding));
231
+ max-height: min(var(--comp-dialog-max-height), 100vh - 2 * var(--comp-dialog-padding));
230
232
  padding: var(--comp-dialog-padding);
231
233
  }
232
234
  .interior.is-list header,
@@ -263,4 +265,39 @@ header .btn-close {
263
265
  grid-area: close;
264
266
  width: var(--comp-close-button-size);
265
267
  height: var(--comp-close-button-size);
268
+ }
269
+
270
+ footer {
271
+ --tct-action-group-margin: var(--app-scale-2x, 10px) 0 0;
272
+ align-self: end;
273
+ }
274
+
275
+ @media screen and (max-height: 400px) {
276
+ .content {
277
+ -webkit-mask-image: none;
278
+ mask-image: none;
279
+ overflow-y: visible;
280
+ }
281
+ .interior {
282
+ grid-template-rows: auto auto auto;
283
+ overflow-y: auto;
284
+ --comp-scrollbar-size: var(--tct-scrollbar-size, var(--t-scrollbar-size, var(--app-scale-1x, 5px)));
285
+ --comp-scrollbar-border-radius: var(--tct-scrollbar-border-radius, var(--t-scrollbar-border-radius, var(--app-border-radius-1, 4px)));
286
+ --comp-scrollbar-color: var(--tct-scrollbar-color, var(--t-scrollbar-color, var(--t-a11y-gray-color, #747474)));
287
+ scrollbar-width: thin;
288
+ scrollbar-color: var(--comp-scrollbar-color) transparent;
289
+ }
290
+ .interior::-webkit-scrollbar {
291
+ width: var(--comp-scrollbar-size);
292
+ height: var(--comp-scrollbar-size);
293
+ margin: 5px;
294
+ }
295
+ .interior::-webkit-scrollbar-thumb {
296
+ background: var(--comp-scrollbar-color);
297
+ border-radius: var(--comp-scrollbar-border-radius);
298
+ }
299
+ .interior::-webkit-scrollbar-track {
300
+ background: transparent;
301
+ border-radius: var(--comp-scrollbar-border-radius);
302
+ }
266
303
  }
@@ -21,11 +21,19 @@ export class Q2Modal {
21
21
  // #endregion
22
22
  // #region Public Property API
23
23
  /**
24
- * Controls visibility of the close button in the top right corner.
24
+ * Controls visibility of the close button and whether the modal can be dismissed with the backdrop or Escape key.
25
25
  */
26
26
  this.closable = true;
27
+ /**
28
+ * Whether the action buttons should take up the full width of the modal footer.
29
+ */
30
+ this.fullWidthButton = true;
27
31
  // #endregion
28
32
  // #region Local Methods
33
+ this.hasDialogTransition = () => {
34
+ const transitionDurations = (getComputedStyle(this.dialogElement).transitionDuration || '0s').split(',');
35
+ return transitionDurations.some(duration => parseFloat(duration) > 0);
36
+ };
29
37
  this.initializeModal = () => {
30
38
  // limits 4 buttons in action slot
31
39
  this.hostElement.querySelectorAll('[slot="action"]').forEach((el, i) => {
@@ -39,6 +47,8 @@ export class Q2Modal {
39
47
  };
40
48
  this.onCancel = (event) => {
41
49
  event.preventDefault();
50
+ if (!this.closable)
51
+ return;
42
52
  this.closeModal();
43
53
  };
44
54
  this.onClick = (event) => {
@@ -49,12 +59,16 @@ export class Q2Modal {
49
59
  const slot = eventTarget.getAttribute('slot');
50
60
  if (slot === 'action') {
51
61
  this.tctClick.emit({ value: eventTarget.dataset.value });
52
- this.onCancel(event);
62
+ event.preventDefault();
63
+ this.closeModal();
53
64
  }
54
65
  else {
55
66
  const isInContent = !!eventTarget.closest('.interior , q2-modal');
56
67
  if (isInContent)
57
68
  return;
69
+ this.tctBackdropClick.emit();
70
+ if (!this.closable)
71
+ return;
58
72
  this.onCancel(event);
59
73
  }
60
74
  };
@@ -78,33 +92,50 @@ export class Q2Modal {
78
92
  // #region Component Lifecycle Events
79
93
  disconnectedCallback() {
80
94
  var _a;
81
- this.dialogElement.removeEventListener('cancel', this.onCancel);
82
95
  (_a = this.contentElement) === null || _a === void 0 ? void 0 : _a.removeEventListener('scroll', this.debouncedScroll);
83
96
  }
84
97
  componentDidLoad() {
85
- this.dialogElement.addEventListener('cancel', this.onCancel);
86
98
  this.tctReady.emit();
87
99
  this.bodyOverflow = document.body.style.overflow;
88
100
  this.debouncedScroll = debounce(this.onContentScroll, 100);
89
101
  this.contentElement.addEventListener('scroll', this.debouncedScroll);
90
102
  }
91
103
  componentDidRender() {
92
- var _a;
93
- (_a = this.scheduledAfterRender) === null || _a === void 0 ? void 0 : _a.forEach(fn => fn());
104
+ var _a, _b;
105
+ (_a = this.dialogElement) === null || _a === void 0 ? void 0 : _a.setAttribute('closedby', this.closable ? 'closerequest' : 'none');
106
+ (_b = this.scheduledAfterRender) === null || _b === void 0 ? void 0 : _b.forEach(fn => fn());
94
107
  this.scheduledAfterRender = [];
95
108
  }
96
109
  // #endregion
97
110
  // #region Public Methods API
98
111
  async closeModal(data) {
99
- this.tctClose.emit(data);
100
- this.renderStatus = 'is-closing';
112
+ var _a;
113
+ if (!((_a = this.dialogElement) === null || _a === void 0 ? void 0 : _a.open))
114
+ return;
115
+ const shouldWaitForTransition = this.renderStatus === 'is-open' && this.hasDialogTransition();
101
116
  document.body.style.overflow = this.bodyOverflow;
102
- this.dialogElement.addEventListener('transitionend', () => {
117
+ const completeClose = () => {
103
118
  if (this.renderStatus !== 'is-closing')
104
119
  return;
120
+ this.dialogElement.removeEventListener('transitionend', onTransitionComplete);
121
+ this.dialogElement.removeEventListener('transitioncancel', onTransitionComplete);
105
122
  this.dialogElement.close();
106
123
  this.renderStatus = null;
107
- }, { once: true });
124
+ this.tctClose.emit(data);
125
+ };
126
+ const onTransitionComplete = (event) => {
127
+ if (event.target !== this.dialogElement || event.propertyName !== 'transform')
128
+ return;
129
+ completeClose();
130
+ };
131
+ if (shouldWaitForTransition) {
132
+ this.dialogElement.addEventListener('transitionend', onTransitionComplete);
133
+ this.dialogElement.addEventListener('transitioncancel', onTransitionComplete);
134
+ }
135
+ this.renderStatus = 'is-closing';
136
+ if (!shouldWaitForTransition) {
137
+ completeClose();
138
+ }
108
139
  }
109
140
  async openModal(option) {
110
141
  var _a;
@@ -125,18 +156,28 @@ export class Q2Modal {
125
156
  document.body.style.overflow = 'hidden';
126
157
  this.initializeModal();
127
158
  this.renderStatus = 'is-opening';
128
- this.dialogElement.addEventListener('transitionend', () => {
129
- if (this.renderStatus !== 'is-opening')
130
- return;
159
+ if (!this.hasDialogTransition()) {
131
160
  this.renderStatus = 'is-open';
132
- }, { once: true });
161
+ return;
162
+ }
163
+ const completeOpen = (event) => {
164
+ if (event.target !== this.dialogElement || event.propertyName !== 'transform')
165
+ return;
166
+ this.dialogElement.removeEventListener('transitionend', completeOpen);
167
+ this.dialogElement.removeEventListener('transitioncancel', completeOpen);
168
+ if (this.renderStatus === 'is-opening') {
169
+ this.renderStatus = 'is-open';
170
+ }
171
+ };
172
+ this.dialogElement.addEventListener('transitionend', completeOpen);
173
+ this.dialogElement.addEventListener('transitioncancel', completeOpen);
133
174
  }
134
175
  // #endregion
135
176
  // #region Render Methods
136
177
  render() {
137
178
  const interiorClasses = `interior`;
138
179
  const renderStatus = `${this.renderStatus || ''}`;
139
- return (h("dialog", { key: '92dc143e4337dbe56582ec8ef8f0568dd71e3e55', ref: el => (this.dialogElement = el), class: renderStatus, onClick: this.onClick }, h("div", { key: '8528e0443f56c88b0e3454cc5b33e5307c93b4b3', class: interiorClasses }, this.title && (h("header", { key: '58082ec96ee55a2054ced1d14c71ca048a9af336' }, this.title && h("h2", { key: '8ac56ee9d3eb84056faaa748a9a2d69ef946eeeb', class: "title" }, this.title), !!this.closable && (h("q2-btn", { key: '664890ce00ec76f4f4339f1b32579cfe95f8ad40', class: "btn-close", "test-id": "btnClose", onClick: this.onCancel, label: "tecton.element.modal.close", "hide-label": true }, h("q2-icon", { key: '3c9349bf6456c8684ac87d3c6918820081e2657b', type: "close" }))))), h("div", { key: '76fa2465d4d60db5e0843274348b85eaf1a49ed6', class: "content", ref: el => (this.contentElement = el) }, this.icon && (h("div", { key: 'd9d7ae8b43dae09abbaf3fcfec61fdf66ab0f619', class: "icon" }, h("q2-icon", { key: '3db0ae939a529933b79018a23b88a7d429658a9a', type: this.icon }))), this.imageSrc && (h("div", { key: 'bf295b4c233610b87b6f75557f4c4d439d757c96', class: "image" }, h("img", { key: 'ffcd4e115096ed4e48349ba28b00a261bdd78f7b', src: this.imageSrc }))), hasSlotContent(this.hostElement, 'content') && h("slot", { key: '09342f081d5307fe109e247a6c2de7bca0fd6b0f', name: "content" }), this.description && h("p", { key: '892e4550e230f47e26e757b6f483c2bee0f424ce', class: "description" }, this.description), this.customMarkup && (h("p", { key: '625a6ee4350fe16c3589ebed630f86be8a420609', class: "customMarkup", innerHTML: sanitizeHTMLString(this.customMarkup) }))), h("footer", { key: '7663cc739e8fe908b9a916e1ddbc0a0364c8023f' }, h("q2-action-group", { key: 'a426f7228f0f4a7ae991fc65d221795279ec2530', "full-width": true }, h("slot", { key: 'f6862c2074f18f31a9775f2de07aaa3e8904ac76', name: "action" }))))));
180
+ return (h("dialog", { key: '67c724b2e94aa823893cc3477ffa364bc07f3c91', ref: el => (this.dialogElement = el), class: renderStatus, onCancel: this.onCancel, onClick: this.onClick }, h("div", { key: '67b97fe323985b56db793d1cf939192bbfbd424e', class: interiorClasses }, this.title && (h("header", { key: 'ec0c82831007887e2baeddc50f2b8c0ec24b0d97' }, this.title && h("h2", { key: '10bbd7f9216ce221616acc4c77984aca582eba10', class: "title" }, this.title), !!this.closable && (h("q2-btn", { key: '8f801bf013c9015c3ae50543067393b26941d3d4', class: "btn-close", "test-id": "btnClose", onClick: this.onCancel, label: "tecton.element.modal.close", "hide-label": true }, h("q2-icon", { key: 'b546a86894aa6b5dd3576a33eadfa63e21a13590', type: "close" }))))), h("div", { key: 'cdc674c3cee4bca6bda0c60ca2c9f08f83ab4440', class: "content", ref: el => (this.contentElement = el) }, this.icon && (h("div", { key: '8b8ffc983cecd2ddf1f912db7f00a6ed198a6b16', class: "icon" }, h("q2-icon", { key: 'cb3430c9216268ed7e8eeea85a83168b2d72ceb1', type: this.icon }))), this.imageSrc && (h("div", { key: 'eab34ebad157a6c81a0e24bc726505e3541eac05', class: "image" }, h("img", { key: 'cdf8e7a1c381a099d811241a410998e16405bda4', src: this.imageSrc }))), hasSlotContent(this.hostElement, 'content') && h("slot", { key: '2674f81de64e3d6069e043f4c0a0db39d70f466a', name: "content" }), this.description && h("p", { key: '8dc2a0b031812a6e65012df8d78e5ff3373c117e', class: "description" }, this.description), this.customMarkup && (h("p", { key: '218d120d1109cff6a1aa79e5b76befbca0ca5857', class: "customMarkup", innerHTML: sanitizeHTMLString(this.customMarkup) }))), h("footer", { key: 'ffc5c49fbaabde579fda002a25ac893e798c07de' }, h("q2-action-group", { key: '295cde61c6e9851aab36f3903f892a5775aca76c', "full-width": this.fullWidthButton }, h("slot", { key: 'e8ece0f36c2647515d82e3cd21b9c36faf731fd2', name: "action" }))))));
140
181
  }
141
182
  static get is() { return "q2-modal"; }
142
183
  static get encapsulation() { return "shadow"; }
@@ -164,7 +205,7 @@ export class Q2Modal {
164
205
  "optional": false,
165
206
  "docs": {
166
207
  "tags": [],
167
- "text": "Controls visibility of the close button in the top right corner."
208
+ "text": "Controls visibility of the close button and whether the modal can be dismissed with the backdrop or Escape key."
168
209
  },
169
210
  "getter": false,
170
211
  "setter": false,
@@ -210,6 +251,26 @@ export class Q2Modal {
210
251
  "reflect": false,
211
252
  "attribute": "description"
212
253
  },
254
+ "fullWidthButton": {
255
+ "type": "boolean",
256
+ "mutable": false,
257
+ "complexType": {
258
+ "original": "boolean",
259
+ "resolved": "boolean",
260
+ "references": {}
261
+ },
262
+ "required": false,
263
+ "optional": false,
264
+ "docs": {
265
+ "tags": [],
266
+ "text": "Whether the action buttons should take up the full width of the modal footer."
267
+ },
268
+ "getter": false,
269
+ "setter": false,
270
+ "reflect": true,
271
+ "attribute": "full-width-button",
272
+ "defaultValue": "true"
273
+ },
213
274
  "icon": {
214
275
  "type": "string",
215
276
  "mutable": false,
@@ -277,6 +338,21 @@ export class Q2Modal {
277
338
  }
278
339
  static get events() {
279
340
  return [{
341
+ "method": "tctBackdropClick",
342
+ "name": "tctBackdropClick",
343
+ "bubbles": true,
344
+ "cancelable": true,
345
+ "composed": true,
346
+ "docs": {
347
+ "tags": [],
348
+ "text": "Emitted when the modal backdrop is clicked."
349
+ },
350
+ "complexType": {
351
+ "original": "undefined",
352
+ "resolved": "undefined",
353
+ "references": {}
354
+ }
355
+ }, {
280
356
  "method": "tctClick",
281
357
  "name": "tctClick",
282
358
  "bubbles": true,
@@ -361,6 +437,10 @@ export class Q2Modal {
361
437
  "path": "q2-tecton-common/lib/types/modal",
362
438
  "id": "../q2-tecton-common/lib/types/modal.d.ts::ModalResponse",
363
439
  "referenceLocation": "ModalResponse"
440
+ },
441
+ "TransitionEvent": {
442
+ "location": "global",
443
+ "id": "global::TransitionEvent"
364
444
  }
365
445
  },
366
446
  "return": "Promise<void>"
@@ -388,6 +468,10 @@ export class Q2Modal {
388
468
  "path": "q2-tecton-common/lib/types/modal",
389
469
  "id": "../q2-tecton-common/lib/types/modal.d.ts::ModalOption",
390
470
  "referenceLocation": "ModalOption"
471
+ },
472
+ "TransitionEvent": {
473
+ "location": "global",
474
+ "id": "global::TransitionEvent"
391
475
  }
392
476
  },
393
477
  "return": "Promise<void>"
@@ -2,15 +2,15 @@ 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
4
  const ACTIONS = `
5
- <q2-btn slot="action" intent="workflow-primary" label="Submit"></q2-btn>
6
- <q2-btn slot="action" intent="workflow-secondary" label="Cancel"></q2-btn>
5
+ <q2-btn slot="action" intent="primary" label="Submit"></q2-btn>
6
+ <q2-btn slot="action" intent="secondary" label="Cancel"></q2-btn>
7
7
  `;
8
8
  const MANY_ACTIONS = `
9
- <q2-btn slot="action" intent="workflow-primary" label="Submit"></q2-btn>
10
- <q2-btn slot="action" intent="workflow-secondary" label="Cancel"></q2-btn>
11
- <q2-btn slot="action" intent="workflow-escape" label="Reset 1"></q2-btn>
12
- <q2-btn slot="action" intent="workflow-escape" label="Reset 2"></q2-btn>
13
- <q2-btn slot="action" intent="workflow-escape" label="Reset 3"></q2-btn>
9
+ <q2-btn slot="action" intent="primary" label="Submit"></q2-btn>
10
+ <q2-btn slot="action" intent="secondary" label="Cancel"></q2-btn>
11
+ <q2-btn slot="action" intent="escape" label="Reset 1"></q2-btn>
12
+ <q2-btn slot="action" intent="escape" label="Reset 2"></q2-btn>
13
+ <q2-btn slot="action" intent="escape" label="Reset 3"></q2-btn>
14
14
  `;
15
15
  const LONG_DESC = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula.';
16
16
  // Inline SVG data URL — stable across runs, no network dependency.
@@ -92,6 +92,7 @@ const focusCase = (variant, theme) => {
92
92
  });
93
93
  };
94
94
  const BASIC_VARIANT = VARIANTS.find(v => v.name === 'basic');
95
+ const LONG_DESCRIPTION_VARIANT = VARIANTS.find(v => v.name === 'long-description');
95
96
  test.describe('q2-modal — variants × themes', () => {
96
97
  for (const variant of VARIANTS) {
97
98
  for (const theme of THEMES) {
@@ -104,6 +105,11 @@ test.describe('q2-modal — variants × themes', () => {
104
105
  }
105
106
  }
106
107
  });
108
+ test('q2-modal--full-width-button-false--open — standard', async ({ page }) => {
109
+ await setupPage(page, `${VISIBLE_HYDRATION_ANCHOR}<q2-modal title="Confirm action" description="Are you sure you want to continue with this action?" full-width-button="false">${ACTIONS}</q2-modal>`, { theme: 'standard', setupLoc: true });
110
+ await openModal(page);
111
+ await expect(page).toHaveScreenshot('q2-modal--full-width-button-false--open--standard.png');
112
+ });
107
113
  test.describe(`q2-modal — scaled font size × themes`, () => {
108
114
  if (BASIC_VARIANT) {
109
115
  for (const theme of THEMES) {
@@ -115,3 +121,22 @@ test.describe(`q2-modal — scaled font size × themes`, () => {
115
121
  }
116
122
  }
117
123
  });
124
+ test.describe('q2-modal — 400% zoom equivalent × themes', () => {
125
+ if (LONG_DESCRIPTION_VARIANT) {
126
+ for (const theme of THEMES) {
127
+ test(`q2-modal--long-description--400-percent-zoom — ${theme}`, async ({ page }) => {
128
+ await page.setViewportSize({ width: 320, height: 256 });
129
+ await setupPage(page, LONG_DESCRIPTION_VARIANT.html, { theme, setupLoc: true });
130
+ await openModal(page);
131
+ await page.locator('q2-modal').evaluate((el) => {
132
+ var _a;
133
+ const interior = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.interior');
134
+ if (!interior)
135
+ throw new Error('q2-modal interior not found in shadow DOM');
136
+ interior.scrollTop = interior.scrollHeight;
137
+ });
138
+ await expect(page).toHaveScreenshot(`q2-modal--long-description--400-percent-zoom--${theme}.png`);
139
+ });
140
+ }
141
+ }
142
+ });
@@ -92,7 +92,7 @@ export class Q2MutationObserver {
92
92
  // #endregion
93
93
  // #region Render Methods
94
94
  render() {
95
- return h("slot", { key: 'e60ef36a762c6af123a91fe6c4def64179663098', onSlotchange: this.handleSlotChange });
95
+ return h("slot", { key: '8e33d51e7485e5477d3cf98cde060dd87effc2f7', onSlotchange: this.handleSlotChange });
96
96
  }
97
97
  static get is() { return "q2-mutation-observer"; }
98
98
  static get encapsulation() { return "shadow"; }
@@ -55,7 +55,7 @@ export class Q2Optgroup {
55
55
  // #endregion
56
56
  // #region Render Methods
57
57
  render() {
58
- return (h("div", { key: '4271765f1422cd33d73e1ed66b967994395bb4e1', class: "q2-optgroup-container", hidden: this.hidden, "aria-labelledby": this.headerId, role: "group" }, h("div", { key: 'f5efb564a7049f7e8d78c0b6fa5749e239ea5133', class: "q2-optgroup-header", id: this.headerId }, (this.label && loc(this.label)) || ''), h("div", { key: '9f932967082554e86e8048bba66a1493258f6d06', class: "q2-optgroup-options" }, h("slot", { key: 'd58e647529d66c50b6e0c9a79705128f0ffdf806' }))));
58
+ return (h("div", { key: '829ae5ebec150734128c98343ddb8112de0ee21e', class: "q2-optgroup-container", hidden: this.hidden, "aria-labelledby": this.headerId, role: "group" }, h("div", { key: '6683155f922a2d15349f885aabac0bf9ee6a4575', class: "q2-optgroup-header", id: this.headerId }, (this.label && loc(this.label)) || ''), h("div", { key: 'b974da306256b13283183fa03e4dc8bcc8be3f44', class: "q2-optgroup-options" }, h("slot", { key: '2f0035aad12309be2c5c4ea3125077cc704e65e4' }))));
59
59
  }
60
60
  static get is() { return "q2-optgroup"; }
61
61
  static get encapsulation() { return "shadow"; }
@@ -419,6 +419,26 @@ export class Q2OptionList {
419
419
  option.role = optionRole;
420
420
  });
421
421
  }
422
+ findScrollableAncestor(node) {
423
+ var _a, _b;
424
+ let current = node;
425
+ while (current) {
426
+ if (current instanceof HTMLElement && current !== node) {
427
+ const overflowY = getComputedStyle(current).overflowY;
428
+ // Skip html/body so page-level scroll isn't treated as our container.
429
+ if ((overflowY === 'auto' || overflowY === 'scroll') &&
430
+ current !== document.documentElement &&
431
+ current !== document.body) {
432
+ return current;
433
+ }
434
+ }
435
+ const slot = current.assignedSlot;
436
+ const parent = current.parentNode;
437
+ const shadowHost = current.host;
438
+ current = (_b = (_a = slot !== null && slot !== void 0 ? slot : parent) !== null && _a !== void 0 ? _a : shadowHost) !== null && _b !== void 0 ? _b : null;
439
+ }
440
+ return null;
441
+ }
422
442
  focusSelectedSibling(option) {
423
443
  const { allVisibleOptions, allOptions } = this;
424
444
  const hasNoSiblings = allVisibleOptions.length < 2;
@@ -500,9 +520,18 @@ export class Q2OptionList {
500
520
  const activeOption = this.allOptions[this.activeIndex];
501
521
  if (!activeOption)
502
522
  return;
503
- const { scrollX, scrollY } = window;
504
- activeOption.scrollIntoView({ block: 'center' });
505
- window.scrollTo(scrollX, scrollY);
523
+ // Do our own scroll math so `scrollIntoView` doesn't cascade to the parent window in an SDK iframe.
524
+ const container = this.findScrollableAncestor(activeOption);
525
+ if (container) {
526
+ if (container.scrollHeight > container.clientHeight) {
527
+ const optionRect = activeOption.getBoundingClientRect();
528
+ const containerRect = container.getBoundingClientRect();
529
+ const optionCenter = optionRect.top - containerRect.top + optionRect.height / 2;
530
+ container.scrollTop += optionCenter - containerRect.height / 2;
531
+ }
532
+ return;
533
+ }
534
+ activeOption.scrollIntoView({ block: 'nearest' });
506
535
  }
507
536
  searchOptions(key, shouldSelect) {
508
537
  this.searchString = key;
@@ -586,7 +615,7 @@ export class Q2OptionList {
586
615
  // #endregion
587
616
  // #region Render Methods
588
617
  render() {
589
- return (h(Host, { key: '14f2a8ab97077ed7b93d746b75f89b98f416a55d' }, h("div", { key: '1184c5d8d4cf8af63a60bef1282d6442b8539cf6', class: "content", ref: el => (this.contentElement = el), onFocusout: this.focusoutHandler }, h("div", { key: '5dcb6a82f1759e46d5e742e72075bf3dfa3c6d70', class: "options", "aria-label": loc('tecton.element.optionList.label', [this.label]), "aria-multiselectable": this.type === 'menu' ? undefined : this.multiple ? 'true' : undefined, role: this.type || 'listbox', onKeyDown: this.internalKeydownHandler, onClick: this.clickHandler }, h("slot", { key: '39372ab91b081ba124ff4c4dc04fc0c84be7a4ad' })))));
618
+ return (h(Host, { key: '19cadb5668db33a912951df4ec0e81a74b2b78ce' }, h("div", { key: '1d5a8f310ee97bc2189b839ee3d87e08bf0fa269', class: "content", ref: el => (this.contentElement = el), onFocusout: this.focusoutHandler }, h("div", { key: '24b1616962a9b544fb6215acc1e6edb4f12a5a03', class: "options", "aria-label": loc('tecton.element.optionList.label', [this.label]), "aria-multiselectable": this.type === 'menu' ? undefined : this.multiple ? 'true' : undefined, role: this.type || 'listbox', onKeyDown: this.internalKeydownHandler, onClick: this.clickHandler }, h("slot", { key: 'eeb0342b7c319f5f5af95daa54dcaa732c3159d9' })))));
590
619
  }
591
620
  static get is() { return "q2-option-list"; }
592
621
  static get encapsulation() { return "shadow"; }
@@ -358,16 +358,16 @@ export class Q2Otp {
358
358
  renderSendCodeButton() {
359
359
  if (!this.isAwaitingSendCode)
360
360
  return;
361
- return (h("q2-btn", { block: true, class: "send-code-button", disabled: this.disabled, intent: "workflow-primary", label: this.localizedSendCodeLabel, onClick: this.handleSendCodeClick, ref: el => (this.sendCodeRef = el) }));
361
+ return (h("q2-btn", { block: true, class: "send-code-button", disabled: this.disabled, intent: "primary", label: this.localizedSendCodeLabel, onClick: this.handleSendCodeClick, ref: el => (this.sendCodeRef = el) }));
362
362
  }
363
363
  renderSubmitArea() {
364
364
  if (this.isSuccess) {
365
365
  return (h("q2-btn", { block: true, class: "submit-button", intent: "neutral", onClick: this.handleSubmitClick }, h("q2-icon", { type: "checkmark" }), loc('Success')));
366
366
  }
367
- return (h("q2-btn", { block: true, class: "submit-button", disabled: this.disabled || !this.isComplete, intent: "workflow-primary", label: this.isVerifying ? this.localizedProcessingLabel : this.localizedSubmitLabel, loading: this.isVerifying, onClick: this.handleSubmitClick }));
367
+ return (h("q2-btn", { block: true, class: "submit-button", disabled: this.disabled || !this.isComplete, intent: "primary", label: this.isVerifying ? this.localizedProcessingLabel : this.localizedSubmitLabel, loading: this.isVerifying, onClick: this.handleSubmitClick }));
368
368
  }
369
369
  render() {
370
- return (h("div", { key: '80f709fb9ccac37057bc3da569e4aefa6675d864', "aria-busy": this.isVerifying ? 'true' : undefined, "aria-labelledby": this.label ? this.labelId : undefined, class: {
370
+ return (h("div", { key: '8f4ada9f194f1b0995995e946097b3e24a11f605', "aria-busy": this.isVerifying ? 'true' : undefined, "aria-labelledby": this.label ? this.labelId : undefined, class: {
371
371
  'otp-container': true,
372
372
  'has-focus': this.hasFocus,
373
373
  'is-masked': this.masked,
@@ -375,7 +375,7 @@ export class Q2Otp {
375
375
  'state-success': this.state === 'success',
376
376
  'state-verifying': this.isVerifying,
377
377
  [`length-${this.normalizedLength}`]: true,
378
- }, role: "group" }, this.renderSendCodeButton(), h("div", { key: '1192f341199e8fbbd2c04c3fe58d69129888410c', class: { 'otp-content': true, 'send-code-hidden': this.state === 'ready' } }, this.renderLabel(), h("div", { key: 'f84aa0d243808206cf31e2900e633f5c5199b197', class: "otp-control-group" }, h("div", { key: '8e01108ff520da247f80bb2204b2620a477a652f', class: "fields-shell" }, h("div", { key: '7f942c6fb6be407f4c43cb2349614cf33c0ec62b', class: "fields-container" }, h("input", { key: '5c1df9b3ff79098f47f40f2ad14165e25a59e5d8', "aria-describedby": this.describedBy, "aria-invalid": this.state === 'error' ? 'true' : 'false', "aria-label": this.inputAriaLabel, autocomplete: "one-time-code", autofocus: this.autoFocus, class: "otp-hidden-input", disabled: this.disabled || this.isVerifying || this.isSuccess, inputmode: "numeric", maxLength: this.normalizedLength, onBlur: this.handleFocusOut, onFocus: this.handleFocusIn, onInput: this.handleInputEvent, onKeyDown: this.handleKeyDown, onPaste: this.handlePaste, pattern: "[0-9]*", ref: el => (this.inputRef = el), "test-id": "q2OtpInput", type: "text", value: this.value }), this.renderFields()), this.renderProcessingOverlay()), this.renderSubmitArea(), this.renderMessage()), this.renderHelperText())));
378
+ }, role: "group" }, this.renderSendCodeButton(), h("div", { key: '099e1ef5ccc09846faf9952772e61ff7644e5085', class: { 'otp-content': true, 'send-code-hidden': this.state === 'ready' } }, this.renderLabel(), h("div", { key: '5ad6ff061779de6562f523148459729d73bbf53a', class: "otp-control-group" }, h("div", { key: 'd60e93f2d79d0f4b0348a5b581647ece89e9973c', class: "fields-shell" }, h("div", { key: '55b515c8a04e664024dcc66e4d894dcb0ddd4ca4', class: "fields-container" }, h("input", { key: 'b8319da6e91ea06ff5632c72326460c0e532393d', "aria-describedby": this.describedBy, "aria-invalid": this.state === 'error' ? 'true' : 'false', "aria-label": this.inputAriaLabel, autocomplete: "one-time-code", autofocus: this.autoFocus, class: "otp-hidden-input", disabled: this.disabled || this.isVerifying || this.isSuccess, inputmode: "numeric", maxLength: this.normalizedLength, onBlur: this.handleFocusOut, onFocus: this.handleFocusIn, onInput: this.handleInputEvent, onKeyDown: this.handleKeyDown, onPaste: this.handlePaste, pattern: "[0-9]*", ref: el => (this.inputRef = el), "test-id": "q2OtpInput", type: "text", value: this.value }), this.renderFields()), this.renderProcessingOverlay()), this.renderSubmitArea(), this.renderMessage()), this.renderHelperText())));
379
379
  }
380
380
  static get is() { return "q2-otp"; }
381
381
  static get encapsulation() { return "shadow"; }
@@ -312,7 +312,7 @@ export class Q2Pagination {
312
312
  total,
313
313
  });
314
314
  }
315
- return (h("nav", { key: 'c42b191eccb70b9e3c684843cebf9f6b06f3c3b3', class: this.containerClasses.join(' '), ref: el => (this.containerElement = el), "aria-label": loc('tecton.element.pagination.title') }, h("div", { key: 'eb03cdc19938adac4a5c44887fa7d9853c9b89ab', class: "description", "test-id": "description" }, pagesOnly
315
+ return (h("nav", { key: '647c141a9df399b3764fdc90c5ae05f113e0019d', class: this.containerClasses.join(' '), ref: el => (this.containerElement = el), "aria-label": loc('tecton.element.pagination.title') }, h("div", { key: 'fd595002af27dd639391665573433783342d2aee', class: "description", "test-id": "description" }, pagesOnly
316
316
  ? loc('tecton.element.pagination.pages', {
317
317
  current: page,
318
318
  total: totalPages,
@@ -321,10 +321,10 @@ export class Q2Pagination {
321
321
  range: currentRange,
322
322
  recordType: recordType.toLowerCase(),
323
323
  total: total.toLocaleString(),
324
- })), h("div", { key: '0e9a0bcfa6545b08843423378066989cf96ad18e', class: "controls" }, h("div", { key: '4ea3b0a64165885dfd1bd525527e2617e4f4d748', class: "btn-group" }, h("q2-btn", { key: '72d72c7b974ecbca50c4259cca5028515786af5b', ref: el => (this.firstPageBtn = el), label: loc('tecton.element.pagination.goToFirstPage'), disabled: disabled || onFirstPage, hidden: isFullViewHidden, onTctClick: () => this.handlePageChange(1), "test-id": "firstPageBtn", "hide-label": true }, h("q2-icon", { key: '26f5f8e8cf23a6d924b4a01796827fb62017809d', type: "chevron-double-left" })), h("q2-btn", { key: '5f7845c5917137131cc6703bb59d90c842e32a7e', ref: el => (this.prevPageBtn = el), label: prevButtonLabel, disabled: disabled || onFirstPage, onTctClick: () => this.handlePageChange(page - 1), "test-id": "prevPageBtn", "hide-label": true }, h("q2-icon", { key: 'e02ccf51de21789099e2b254019f962dbb5011dc', type: "chevron-left" }))), h("div", { key: 'ca201f7a4382e7f3835093c4c3877f7e2a0b5150', class: "input-display", hidden: isFullViewHidden }, h("span", { key: 'c690830341a15c25e4ad5a2d2a524d876c9f7cdb', "aria-hidden": "true" }, loc('tecton.element.pagination.page')), h("div", { key: '7d08062d6cd495d4025a82413b347ed87915cbce', class: "input-wrapper", onClick: () => this.inputField.dispatchEvent(new FocusEvent('focus')) }, h("q2-input", { key: 'e30795721d66d75dd5f349ad4d6d3ffda6023820', ref: el => (this.inputField = el), type: "number", value: `${page}`, min: 1, max: this.totalPages, hideLabel: true, optional: true, label: `${loc('tecton.element.pagination.page')} (${loc('tecton.element.pagination.ofPages', [totalPages.toLocaleString()])})`, onChange: event => event.stopImmediatePropagation(), onTctChange: event => {
324
+ })), h("div", { key: 'da4c7137ed566532a9471a7b83a63c49c51c8e82', class: "controls" }, h("div", { key: 'ef59aadb7b6cfb82707ffb1ee9e1626428a84801', class: "btn-group" }, h("q2-btn", { key: 'e5d551764bec56fed3dc34684c4ff2cdfadd95ea', ref: el => (this.firstPageBtn = el), label: loc('tecton.element.pagination.goToFirstPage'), disabled: disabled || onFirstPage, hidden: isFullViewHidden, onTctClick: () => this.handlePageChange(1), "test-id": "firstPageBtn", "hide-label": true }, h("q2-icon", { key: '7423721c4c3082b8f0fdea5d6bde9fc62640fa24', type: "chevron-double-left" })), h("q2-btn", { key: '90b3544e9983fa652f225eda9d18d08883b31c39', ref: el => (this.prevPageBtn = el), label: prevButtonLabel, disabled: disabled || onFirstPage, onTctClick: () => this.handlePageChange(page - 1), "test-id": "prevPageBtn", "hide-label": true }, h("q2-icon", { key: '6535f2c3745421cbf1dd5750e3ab8d08288bc148', type: "chevron-left" }))), h("div", { key: 'd4a581982a62f360e5b693a110a7d75eaf0ba24c', class: "input-display", hidden: isFullViewHidden }, h("span", { key: '45a28afc71ee038d829cbe64550bf929210002a9', "aria-hidden": "true" }, loc('tecton.element.pagination.page')), h("div", { key: 'ba5df7f89aed5be2f882057d8cf344981e3f1127', class: "input-wrapper", onClick: () => this.inputField.dispatchEvent(new FocusEvent('focus')) }, h("q2-input", { key: '686c5c8891bd64a40ba9abe8436475bf3ef8fd38', ref: el => (this.inputField = el), type: "number", value: `${page}`, min: 1, max: this.totalPages, hideLabel: true, optional: true, label: `${loc('tecton.element.pagination.page')} (${loc('tecton.element.pagination.ofPages', [totalPages.toLocaleString()])})`, onChange: event => event.stopImmediatePropagation(), onTctChange: event => {
325
325
  event.stopPropagation();
326
326
  this.handlePageChange(event.detail.value);
327
- }, "test-id": "pageInput", current: "page", disabled: disabled })), h("span", { key: 'e2f1e51306298ddf428fd4e9fa665b58b2535fc8', "aria-hidden": "true" }, loc('tecton.element.pagination.ofPages', [totalPages.toLocaleString()]))), h("div", { key: 'c7a095aaa30743441c0c4d22f55e94801b3a823f', class: "btn-group" }, h("q2-btn", { key: 'c52d8837ec35b128a9d3f9c87766ed770edc9600', ref: el => (this.nextPageBtn = el), label: nextButtonLabel, disabled: disabled || onLastPage, onTctClick: () => this.handlePageChange(page + 1), "test-id": "nextPageBtn", "hide-label": true }, h("q2-icon", { key: 'd1d802bddb426070fa1ca92a7937b8405949f01c', type: "chevron-right" })), h("q2-btn", { key: '357f5bf5426e6c0004b737238a3c66697fc6a672', ref: el => (this.lastPageBtn = el), label: "tecton.element.pagination.goToLastPage", disabled: disabled || onLastPage, hidden: isFullViewHidden, onTctClick: () => this.handlePageChange(totalPages), "test-id": "lastPageBtn", "hide-label": true }, h("q2-icon", { key: '1be92d6fa9252168baf63420271c8b8a77f41d92', type: "chevron-double-right" })))), h("div", { key: '96ca4bc582b1dcb830bad146fbf1233f2549f256', class: "per-page", hidden: isFullViewHidden || !((_a = this.perPageIncrements) === null || _a === void 0 ? void 0 : _a.length) }, showPerPageSelect && this.renderPerPage())));
327
+ }, "test-id": "pageInput", current: "page", disabled: disabled })), h("span", { key: '59853a0308d1f97b6722f40c29219d887842c54c', "aria-hidden": "true" }, loc('tecton.element.pagination.ofPages', [totalPages.toLocaleString()]))), h("div", { key: '17fa28deff49d5a3a28b6d66b5639428a309057a', class: "btn-group" }, h("q2-btn", { key: '0e5eca8dc228a8285015d5941d9c4e44af5e5353', ref: el => (this.nextPageBtn = el), label: nextButtonLabel, disabled: disabled || onLastPage, onTctClick: () => this.handlePageChange(page + 1), "test-id": "nextPageBtn", "hide-label": true }, h("q2-icon", { key: '9a42a4961ac7efd40c176145a39f0c63540daf14', type: "chevron-right" })), h("q2-btn", { key: 'fe0c41536c25d7deffa26fdab4f91405e5b197d6', ref: el => (this.lastPageBtn = el), label: "tecton.element.pagination.goToLastPage", disabled: disabled || onLastPage, hidden: isFullViewHidden, onTctClick: () => this.handlePageChange(totalPages), "test-id": "lastPageBtn", "hide-label": true }, h("q2-icon", { key: '5beccc87ad5ef95350cb21d969b15c0996911126', type: "chevron-double-right" })))), h("div", { key: 'd60b56b2f8173ea2a6fcf3cf4fd1b5f2807fbc5c', class: "per-page", hidden: isFullViewHidden || !((_a = this.perPageIncrements) === null || _a === void 0 ? void 0 : _a.length) }, showPerPageSelect && this.renderPerPage())));
328
328
  }
329
329
  static get is() { return "q2-pagination"; }
330
330
  static get encapsulation() { return "shadow"; }
@@ -349,8 +349,8 @@ q2-popover,
349
349
  q2-icon {
350
350
  --tct-icon-stroke-primary: var(--tct-pill-icon-stroke, currentcolor);
351
351
  --tct-icon-stroke-width: var(--tct-pill-icon-stroke-width, inherit);
352
- width: var(--tct-pill-icon-size, var(--t-pill-icon-size, 14px));
353
- height: var(--tct-pill-icon-size, var(--t-pill-icon-size, 14px));
352
+ width: var(--tct-pill-icon-size, var(--t-pill-icon-size, var(--const-px-18, 18px)));
353
+ height: var(--tct-pill-icon-size, var(--t-pill-icon-size, var(--const-px-18, 18px)));
354
354
  transition-property: transform;
355
355
  transition: var(--tct-pill-btn-tween, var(--t-pill-btn-tween, var(--app-tween-1, 0.2s ease)));
356
356
  }
@@ -273,11 +273,14 @@ export class Q2Pill {
273
273
  this.primaryBtn.focus();
274
274
  }
275
275
  async popoverStateHandler({ detail: { open } }) {
276
- if (this.open !== open)
277
- this.open = open;
276
+ var _a;
277
+ if (this.open === open)
278
+ return;
279
+ this.open = open;
278
280
  if (open)
279
281
  return;
280
282
  this.setOptionListActiveElement(null);
283
+ (_a = this.primaryBtn) === null || _a === void 0 ? void 0 : _a.focus();
281
284
  }
282
285
  // #endregion
283
286
  // #region Public Methods API
@@ -410,7 +413,7 @@ export class Q2Pill {
410
413
  wrapperClassNames.push('has-icon');
411
414
  if (optionCount)
412
415
  wrapperClassNames.push('has-options');
413
- return (h("click-elsewhere", { key: '5bbfce776dcd2ef3ac7097b37fd2df039d47c21f', onChange: this.onClickElsewhere }, h("div", { key: '9d8d7a4b6afb1d931d762a0e656509a2036180ba', class: wrapperClassNames.join(' ') }, h("div", { key: '5bbf245bd78d2ed075b9a16cc46396528f20b823', class: "btn-height-wrapper", ref: el => (this.primaryBtnWrapper = el), onClick: this.handleWrapperClick, tabIndex: -1 }, h("button", { key: '494b1555d332a62c8a2946da260a9bb5f26849d5', class: "btn-primary", "test-id": "btn-control", type: "button", role: (optionCount && 'combobox') || undefined, ref: el => (this.primaryBtn = el), onClick: this.handleClick, onKeyDown: this.handleKeydown, onFocusout: this.handleFocusOut, disabled: this.disabled, "aria-roledescription": !optionCount && 'filter', "aria-controls": (optionCount && 'option-list') || undefined, "aria-expanded": (optionCount && `${!!open}`) || undefined, "aria-label": text, "aria-pressed": !optionCount ? `${!!active}` : undefined, "aria-describedby": (optionCount && 'option-description') || undefined }, h("slot", { key: 'd26426863ec1dadfbf2049ca6b85dcdb28875858', name: "decorator" }), truncatedText)), this.renderIcon(), !!optionCount && this.renderHiddenElement()), this.optionCount > 0 && (h("q2-popover", { key: '1b06b432ce4ab98a1d1d0b70acb7074849e94999', ref: el => (this.popoverElement = el), controlElement: this.primaryBtn, open: this.open, "max-height": this.popoverMaxHeight, minHeight: this.popoverMinHeight, direction: this.popoverDirection, align: this.popoverAlignment, onFocusout: this.handleFocusOut }, h("div", { key: 'ea87e923fe84d94fc1f9a1b72b9fd1deef5cb5ad', class: "popover-content" }, h("div", { key: '53b50f438af20d4474b42511ee334391ff429fa0', ref: el => (this.popoverTopContainer = el), class: "popover-top-container", tabindex: "-1", hidden: !this.hasPopoverTop, onKeyDown: this.handleSlotKeydown }, h("slot", { key: '0996ca12d288c696601919df48ef6c8784bbf8d4', name: "popover-top" })), h("q2-option-list", { key: '9faef4049f040e8c22b46107a7a618224cd0e82c', type: "listbox", ref: el => (this.optionList = el), id: "option-list", onChange: this.handleChange, multiple: this.multiple, selectedOptions: this.selectedOptions, onReady: () => this.updateSelectedOptionElements(), onPopoverState: this.onPopoverState, label: loc('tecton.element.optionList.label', [this.optionListLabel]) }, h("slot", { key: '8f54a5eb6670b9bffb2062eeb9815834b2aa8de7' })), h("div", { key: '1e61e07bb5c6bdcdfd68080cc606bb1a42f48d79', ref: el => (this.popoverBottomContainer = el), class: "popover-bottom-container", tabindex: "-1", hidden: !this.hasPopoverBottom, onKeyDown: this.handleSlotKeydown }, h("slot", { key: '48a8d60e3eae7de823d1e55ab9153dedda9a739d', name: "popover-bottom" })))))));
416
+ return (h("click-elsewhere", { key: '8cba59cde3746d0397305512334eb56357e9e5d4', onChange: this.onClickElsewhere }, h("div", { key: '391da54f9fd870e223765e6266291dff9775abe6', class: wrapperClassNames.join(' ') }, h("div", { key: '06431fd76c0a9d30833756407c89ff59609bc3a3', class: "btn-height-wrapper", ref: el => (this.primaryBtnWrapper = el), onClick: this.handleWrapperClick, tabIndex: -1 }, h("button", { key: '609557b9206c91511e78e26c990230e61f7e5c19', class: "btn-primary", "test-id": "btn-control", type: "button", role: (optionCount && 'combobox') || undefined, ref: el => (this.primaryBtn = el), onClick: this.handleClick, onKeyDown: this.handleKeydown, onFocusout: this.handleFocusOut, disabled: this.disabled, "aria-roledescription": !optionCount && 'filter', "aria-controls": (optionCount && 'option-list') || undefined, "aria-expanded": (optionCount && `${!!open}`) || undefined, "aria-label": text, "aria-pressed": !optionCount ? `${!!active}` : undefined, "aria-describedby": (optionCount && 'option-description') || undefined }, h("slot", { key: 'e1f4c57b7526f714cf0242e101ec0f5c39ebafa5', name: "decorator" }), truncatedText)), this.renderIcon(), !!optionCount && this.renderHiddenElement()), this.optionCount > 0 && (h("q2-popover", { key: '2777b45efbd94516a633ca4ff1e2d6a452ecbd81', ref: el => (this.popoverElement = el), controlElement: this.primaryBtn, open: this.open, "max-height": this.popoverMaxHeight, minHeight: this.popoverMinHeight, direction: this.popoverDirection, align: this.popoverAlignment, onFocusout: this.handleFocusOut }, h("div", { key: '54d2c1c8814be9265b4ed8092bd3360da76cc2b0', class: "popover-content" }, h("div", { key: 'fb95b6f0ab78119f0bf944fa67ec0bcf391088dc', ref: el => (this.popoverTopContainer = el), class: "popover-top-container", tabindex: "-1", hidden: !this.hasPopoverTop, onKeyDown: this.handleSlotKeydown }, h("slot", { key: '8e522c96fa1241e7c05fbc989d59f71ec2bc1d98', name: "popover-top" })), h("q2-option-list", { key: '5e7a827ac08395399e0b04fa9074f5b6a3fa1c48', type: "listbox", ref: el => (this.optionList = el), id: "option-list", onChange: this.handleChange, multiple: this.multiple, selectedOptions: this.selectedOptions, onReady: () => this.updateSelectedOptionElements(), onPopoverState: this.onPopoverState, label: loc('tecton.element.optionList.label', [this.optionListLabel]) }, h("slot", { key: '4197780a058b3937ac748b53aef6afc5eabd8c7a' })), h("div", { key: '78992c83515dcfe6acbf7e09a5efced2d65c1903', ref: el => (this.popoverBottomContainer = el), class: "popover-bottom-container", tabindex: "-1", hidden: !this.hasPopoverBottom, onKeyDown: this.handleSlotKeydown }, h("slot", { key: '553f959ec8b866111b2e5c5f9090d8ddee5fd208', name: "popover-bottom" })))))));
414
417
  }
415
418
  static get is() { return "q2-pill"; }
416
419
  static get encapsulation() { return "shadow"; }
@@ -142,6 +142,7 @@ button {
142
142
  margin: 0;
143
143
  padding: var(--tct-popover-padding, 0);
144
144
  overflow: auto;
145
+ overscroll-behavior: contain;
145
146
  background: var(--tct-popover-background, var(--app-white, #ffffff));
146
147
  backdrop-filter: var(--tct-popover-backdrop-filter, none);
147
148
  color: var(--tct-popover-font-color, inherit);
@@ -199,8 +200,9 @@ button {
199
200
  }
200
201
  :popover-open.up,
201
202
  .show.up {
202
- top: unset;
203
- bottom: var(--comp-pop-bottom);
203
+ top: var(--comp-pop-top);
204
+ bottom: unset;
205
+ translate: 0 calc(-100% - var(--app-scale-2x, 10px));
204
206
  }
205
207
  :popover-open.down.left:not(.mobile),
206
208
  .show.down.left:not(.mobile) {