q2-tecton-elements 1.55.5 → 1.55.7

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 (268) hide show
  1. package/dist/bundle-report.json +262 -214
  2. package/dist/cjs/{index-905f4c87.js → index-ac3330d8.js} +33 -1
  3. package/dist/cjs/index-ac3330d8.js.map +1 -0
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/q2-action-group.cjs.entry.js +2 -2
  6. package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
  7. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  8. package/dist/cjs/q2-badge_7.cjs.entry.js +4 -4
  9. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  12. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
  14. package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
  15. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  16. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  21. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-dropdown.cjs.entry.js +27 -22
  23. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  24. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-form.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-item_3.cjs.entry.js +3 -3
  30. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  33. package/dist/cjs/q2-modal.cjs.entry.js +2 -2
  34. package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
  35. package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
  36. package/dist/cjs/q2-option-list_2.cjs.entry.js +73 -69
  37. package/dist/cjs/q2-option-list_2.cjs.entry.js.map +1 -1
  38. package/dist/cjs/q2-option.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
  40. package/dist/cjs/q2-pill.cjs.entry.js +2 -2
  41. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  43. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  44. package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
  45. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  46. package/dist/cjs/q2-select.cjs.entry.js +122 -12
  47. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  48. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  49. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  50. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-tag.cjs.entry.js +2 -2
  52. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  53. package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
  54. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  55. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  56. package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
  57. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
  58. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  59. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  60. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +2 -2
  61. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
  62. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  63. package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
  64. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
  65. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
  66. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  67. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  68. package/dist/collection/components/q2-dropdown/q2-dropdown.js +27 -21
  69. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  70. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +34 -32
  71. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
  72. package/dist/collection/components/q2-example/q2-example.js +1 -1
  73. package/dist/collection/components/q2-form/q2-form.js +1 -1
  74. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  75. package/dist/collection/components/q2-input/q2-input.js +1 -1
  76. package/dist/collection/components/q2-item/q2-item.js +1 -1
  77. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  78. package/dist/collection/components/q2-list/q2-list.js +1 -1
  79. package/dist/collection/components/q2-message/q2-message.js +1 -1
  80. package/dist/collection/components/q2-modal/q2-modal.js +1 -1
  81. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  82. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  83. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +1 -0
  84. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
  85. package/dist/collection/components/q2-pill/q2-pill.js +1 -1
  86. package/dist/collection/components/q2-popover/q2-popover.css +18 -10
  87. package/dist/collection/components/q2-popover/q2-popover.js +74 -69
  88. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  89. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js +1 -34
  90. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -1
  91. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +902 -511
  92. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
  93. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  94. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  95. package/dist/collection/components/q2-section/q2-section.js +2 -2
  96. package/dist/collection/components/q2-select/q2-select.js +137 -15
  97. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  98. package/dist/collection/components/q2-select/test/q2-select-test.spec.js +467 -0
  99. package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -1
  100. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  101. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  102. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  103. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  104. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  105. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +5 -0
  106. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
  107. package/dist/collection/components/q2-textarea/q2-textarea.js +1 -1
  108. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  109. package/dist/collection/utils/index.js +37 -0
  110. package/dist/collection/utils/index.js.map +1 -1
  111. package/dist/components/index2.js +32 -1
  112. package/dist/components/index2.js.map +1 -1
  113. package/dist/components/q2-action-group2.js +1 -1
  114. package/dist/components/q2-action-sheet.js +1 -1
  115. package/dist/components/q2-avatar2.js +1 -1
  116. package/dist/components/q2-carousel-pane.js +2 -2
  117. package/dist/components/q2-chart-area.js +1 -1
  118. package/dist/components/q2-chart-bar.js +1 -1
  119. package/dist/components/q2-chart-donut.js +1 -1
  120. package/dist/components/q2-currency.js +1 -1
  121. package/dist/components/q2-detail.js +1 -1
  122. package/dist/components/q2-dropdown.js +26 -21
  123. package/dist/components/q2-dropdown.js.map +1 -1
  124. package/dist/components/q2-example.js +1 -1
  125. package/dist/components/q2-form.js +1 -1
  126. package/dist/components/q2-formatted-text.js +1 -1
  127. package/dist/components/q2-input2.js +1 -1
  128. package/dist/components/q2-item2.js +1 -1
  129. package/dist/components/q2-legend2.js +1 -1
  130. package/dist/components/q2-list2.js +1 -1
  131. package/dist/components/q2-message2.js +1 -1
  132. package/dist/components/q2-modal.js +1 -1
  133. package/dist/components/q2-month-picker.js +2 -2
  134. package/dist/components/q2-optgroup2.js +1 -1
  135. package/dist/components/q2-pagination.js +3 -3
  136. package/dist/components/q2-pill.js +1 -1
  137. package/dist/components/q2-popover2.js +73 -69
  138. package/dist/components/q2-popover2.js.map +1 -1
  139. package/dist/components/q2-relative-time.js +1 -1
  140. package/dist/components/q2-resize-observer2.js +1 -1
  141. package/dist/components/q2-section.js +2 -2
  142. package/dist/components/q2-select2.js +125 -15
  143. package/dist/components/q2-select2.js.map +1 -1
  144. package/dist/components/q2-stepper-vertical.js +1 -1
  145. package/dist/components/q2-stepper.js +1 -1
  146. package/dist/components/q2-tab-container.js +1 -1
  147. package/dist/components/q2-tab-pane.js +1 -1
  148. package/dist/components/q2-tag.js +1 -1
  149. package/dist/components/q2-textarea.js +1 -1
  150. package/dist/components/tecton-tab-pane.js +2 -2
  151. package/dist/esm/{index-f2a66217.js → index-e4c2bfff.js} +33 -2
  152. package/dist/{cjs/index-905f4c87.js.map → esm/index-e4c2bfff.js.map} +1 -1
  153. package/dist/esm/loader.js +1 -1
  154. package/dist/esm/q2-action-group.entry.js +2 -2
  155. package/dist/esm/q2-action-sheet.entry.js +2 -2
  156. package/dist/esm/q2-avatar.entry.js +1 -1
  157. package/dist/esm/q2-badge_7.entry.js +4 -4
  158. package/dist/esm/q2-calendar.entry.js +1 -1
  159. package/dist/esm/q2-card.entry.js +1 -1
  160. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  161. package/dist/esm/q2-carousel.entry.js +1 -1
  162. package/dist/esm/q2-chart-area.entry.js +2 -2
  163. package/dist/esm/q2-chart-bar.entry.js +2 -2
  164. package/dist/esm/q2-chart-donut.entry.js +2 -2
  165. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  166. package/dist/esm/q2-checkbox.entry.js +1 -1
  167. package/dist/esm/q2-currency.entry.js +1 -1
  168. package/dist/esm/q2-data-table.entry.js +1 -1
  169. package/dist/esm/q2-detail.entry.js +2 -2
  170. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  171. package/dist/esm/q2-dropdown.entry.js +27 -22
  172. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  173. package/dist/esm/q2-editable-field.entry.js +1 -1
  174. package/dist/esm/q2-example.entry.js +1 -1
  175. package/dist/esm/q2-file-picker.entry.js +1 -1
  176. package/dist/esm/q2-form.entry.js +1 -1
  177. package/dist/esm/q2-formatted-text.entry.js +1 -1
  178. package/dist/esm/q2-item_3.entry.js +3 -3
  179. package/dist/esm/q2-legend.entry.js +1 -1
  180. package/dist/esm/q2-loc.entry.js +1 -1
  181. package/dist/esm/q2-message.entry.js +2 -2
  182. package/dist/esm/q2-modal.entry.js +2 -2
  183. package/dist/esm/q2-month-picker.entry.js +3 -3
  184. package/dist/esm/q2-optgroup.entry.js +2 -2
  185. package/dist/esm/q2-option-list_2.entry.js +73 -69
  186. package/dist/esm/q2-option-list_2.entry.js.map +1 -1
  187. package/dist/esm/q2-option.entry.js +1 -1
  188. package/dist/esm/q2-pagination.entry.js +4 -4
  189. package/dist/esm/q2-pill.entry.js +2 -2
  190. package/dist/esm/q2-radio-group.entry.js +1 -1
  191. package/dist/esm/q2-radio.entry.js +1 -1
  192. package/dist/esm/q2-relative-time.entry.js +2 -2
  193. package/dist/esm/q2-resize-observer.entry.js +1 -1
  194. package/dist/esm/q2-section.entry.js +3 -3
  195. package/dist/esm/q2-select.entry.js +123 -13
  196. package/dist/esm/q2-select.entry.js.map +1 -1
  197. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  198. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  199. package/dist/esm/q2-stepper.entry.js +2 -2
  200. package/dist/esm/q2-tag.entry.js +2 -2
  201. package/dist/esm/q2-tecton-elements.js +1 -1
  202. package/dist/esm/q2-textarea.entry.js +2 -2
  203. package/dist/esm/q2-tooltip.entry.js +1 -1
  204. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  205. package/dist/jest.setup.js +11 -0
  206. package/dist/jest.setup.js.map +1 -1
  207. package/dist/q2-tecton-elements/{index-f2a66217.js → index-e4c2bfff.js} +71 -46
  208. package/dist/q2-tecton-elements/index-e4c2bfff.js.map +1 -0
  209. package/dist/q2-tecton-elements/q2-action-group.entry.js +4 -4
  210. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +9 -9
  211. package/dist/q2-tecton-elements/q2-avatar.entry.js +6 -6
  212. package/dist/q2-tecton-elements/q2-badge_7.entry.js +17 -17
  213. package/dist/q2-tecton-elements/q2-calendar.entry.js +1 -1
  214. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  215. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +4 -4
  216. package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
  217. package/dist/q2-tecton-elements/q2-chart-area.entry.js +3 -3
  218. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +80 -80
  219. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +101 -101
  220. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +4 -4
  221. package/dist/q2-tecton-elements/q2-checkbox.entry.js +1 -1
  222. package/dist/q2-tecton-elements/q2-currency.entry.js +6 -6
  223. package/dist/q2-tecton-elements/q2-data-table.entry.js +1 -1
  224. package/dist/q2-tecton-elements/q2-detail.entry.js +4 -4
  225. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
  226. package/dist/q2-tecton-elements/q2-dropdown.entry.js +81 -75
  227. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  228. package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
  229. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  230. package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
  231. package/dist/q2-tecton-elements/q2-form.entry.js +7 -7
  232. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  233. package/dist/q2-tecton-elements/q2-item_3.entry.js +22 -22
  234. package/dist/q2-tecton-elements/q2-legend.entry.js +5 -5
  235. package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
  236. package/dist/q2-tecton-elements/q2-message.entry.js +6 -6
  237. package/dist/q2-tecton-elements/q2-modal.entry.js +18 -18
  238. package/dist/q2-tecton-elements/q2-month-picker.entry.js +30 -30
  239. package/dist/q2-tecton-elements/q2-optgroup.entry.js +5 -5
  240. package/dist/q2-tecton-elements/q2-option-list_2.entry.js +150 -140
  241. package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +1 -1
  242. package/dist/q2-tecton-elements/q2-option.entry.js +1 -1
  243. package/dist/q2-tecton-elements/q2-pagination.entry.js +38 -38
  244. package/dist/q2-tecton-elements/q2-pill.entry.js +14 -14
  245. package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
  246. package/dist/q2-tecton-elements/q2-radio.entry.js +1 -1
  247. package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
  248. package/dist/q2-tecton-elements/q2-resize-observer.entry.js +1 -1
  249. package/dist/q2-tecton-elements/q2-section.entry.js +12 -12
  250. package/dist/q2-tecton-elements/q2-select.entry.js +186 -89
  251. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  252. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +1 -1
  253. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +28 -28
  254. package/dist/q2-tecton-elements/q2-stepper.entry.js +21 -21
  255. package/dist/q2-tecton-elements/q2-tag.entry.js +6 -6
  256. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  257. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  258. package/dist/q2-tecton-elements/q2-textarea.entry.js +3 -3
  259. package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
  260. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +9 -9
  261. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +9 -0
  262. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +6 -4
  263. package/dist/types/components/q2-popover/q2-popover.d.ts +4 -4
  264. package/dist/types/components/q2-select/q2-select.d.ts +22 -0
  265. package/dist/types/utils/index.d.ts +3 -0
  266. package/package.json +3 -3
  267. package/dist/esm/index-f2a66217.js.map +0 -1
  268. package/dist/q2-tecton-elements/index-f2a66217.js.map +0 -1
@@ -281,7 +281,7 @@ export class Q2StepperVertical {
281
281
  return (h("li", { role: "presentation" }, h("button", { class: stepClasses.join(' '), type: "button", "aria-labelledby": labelId, "aria-describedBy": descriptionId, "aria-label": btnLabel, "aria-selected": `${isCurrentStep}`, "aria-expanded": !!pane.children.length ? `${isExpanded}` : null, id: id, "aria-disabled": isLocked ? 'true' : null, role: "tab", tabIndex: isCurrentStep ? 0 : -1, onKeyDown: ev => !isLocked && this.onStepKeyDown(ev, id), onClick: ev => !isLocked && this.onStepClick(ev, id) }, statusIcon ? (h("div", { class: "step-icon" }, h("q2-icon", { type: statusIcon }))) : (h("div", { class: "step-bubble" }, stepNumber)), label && (h("div", null, h("div", { class: "step-label", id: labelId }, stepLabel), description && (h("div", { class: "step-description", id: descriptionId }, loc(description)))))), this.renderSpacer(pane, stepLabel, isExpanded, isLastStep)));
282
282
  }
283
283
  render() {
284
- return (h(Fragment, { key: '7a334a54447a302cd17f4f334649269f13f0d251' }, h("ul", { key: '702386cfdc56201e55a878c16338e0d711f45487', role: "tablist" }, this.structuredPanes.map((pane, index) => this.renderStepBtn(pane, index))), h("div", { key: '9ecaef0497b3647532d0ebf6e3944af766458037', role: "list" }, h("slot", { key: 'ddf8fdfb3ed775c26afd0ace060d54c3b302b290' }))));
284
+ return (h(Fragment, { key: 'ddfdf8857753fe7a35d136b9f623f67942216cf1' }, h("ul", { key: '71656d48408a505ccfd735857050c4be3d49ee47', role: "tablist" }, this.structuredPanes.map((pane, index) => this.renderStepBtn(pane, index))), h("div", { key: '2147cbcfdc480fdbc20dc203a759105e955bcd55', role: "list" }, h("slot", { key: '1bdd3ddfec8d11a92429b4a84560695e170f2f6d' }))));
285
285
  }
286
286
  static get is() { return "q2-stepper-vertical"; }
287
287
  static get encapsulation() { return "shadow"; }
@@ -250,7 +250,7 @@ export class Q2TabContainer {
250
250
  return (h("div", { class: "tab-pane-badge", "aria-label": `${tab.label}, ${tab.badgeCount} ${description}` }, tab.label, h("q2-badge", { value: tab.badgeCount, theme: theme, status: tab.badgeStatus })));
251
251
  }
252
252
  render() {
253
- return (h(Fragment, { key: '97f2da0c2b5b73725ba7df8df2a0eb549f9cfd88' }, h("div", { key: 'ff697afe9618dfc6e262701febdca55b279de4d5', class: "tab-container" }, this.scrollEnabled && (h(Fragment, { key: '11151d37351e2770f29f5f0b31df5afb68855dc2' }, h("div", { key: 'd2bf7ed9da0348421a767ba7d38faf942ad44634', class: "gradient-left", hidden: !this.showScrollLeft }), h("div", { key: 'f53cc922938e075b524cae7289a4b5645b867078', class: "gradient-right", hidden: !this.showScrollRight }), h("q2-btn", { key: '0c17c23b928f2aab34632073d3b3ba380e153865', class: "btn-left", hidden: !this.showScrollLeft, onClick: () => this.onScrollBtnClick('left') }, h("q2-icon", { key: 'ea146cfc55d86e1531bbe94a9a217b93463f9fea', type: "chevron-left", label: "scroll left" })), h("q2-btn", { key: 'fce01f8a17e78df73cc834a203b55b9427c4facc', class: "btn-right", hidden: !this.showScrollRight, onClick: () => this.onScrollBtnClick('right') }, h("q2-icon", { key: 'd379b82bd9465278b1e40f82137fc08bd8b0c750', type: "chevron-right", label: "scroll right" })))), h("ul", { key: '97d39c2ff74ac064da28ca763fbd3d6e98a952dd', onScroll: this.checkScrollState, ref: el => (this.listElement = el), class: this.noPrint ? 'no-print' : null, role: "tablist" }, this.tabs.map((tab, index) => this.renderTab(tab, index)))), h("div", { key: '5a9a728931e3dfafe2b20b5a1d1e72b5ef67913c', class: "tab-content" }, h("slot", { key: 'e10400800c9ff9e3b7d9947a32abeeb146981f8b', onSlotchange: () => this.onSlotChange() }))));
253
+ return (h(Fragment, { key: 'c89fe2837c1075d6b456aa81c0bbfdbd1adb216b' }, h("div", { key: 'd0e015387c1cf3c4e9e3c645a345e2ab1e7385c0', class: "tab-container" }, this.scrollEnabled && (h(Fragment, { key: 'f46f428c45eb6708dac66595270cf8eb2058dea3' }, h("div", { key: '78e5e6bb2fc0de116e0a7a73f0598317c3881868', class: "gradient-left", hidden: !this.showScrollLeft }), h("div", { key: '6e923a319b64508310de2135a3f76249fefe33f3', class: "gradient-right", hidden: !this.showScrollRight }), h("q2-btn", { key: '3e6a69a9dd8977a57c5ad645e47697eafb9a7b5b', class: "btn-left", hidden: !this.showScrollLeft, onClick: () => this.onScrollBtnClick('left') }, h("q2-icon", { key: '258bb459c027cff471ae752fa1abe623f718d94e', type: "chevron-left", label: "scroll left" })), h("q2-btn", { key: '732a1f3f5081de393735a859d85a6b424e79d59b', class: "btn-right", hidden: !this.showScrollRight, onClick: () => this.onScrollBtnClick('right') }, h("q2-icon", { key: 'f4f4aae0b2c9589376fcfea523481709f8b1a678', type: "chevron-right", label: "scroll right" })))), h("ul", { key: '85ffe9e0129ef306611316a4a5be918937d9e139', onScroll: this.checkScrollState, ref: el => (this.listElement = el), class: this.noPrint ? 'no-print' : null, role: "tablist" }, this.tabs.map((tab, index) => this.renderTab(tab, index)))), h("div", { key: '9dfa00e1e412dc7b9dc38559183460c8da814a97', class: "tab-content" }, h("slot", { key: '985d948ee990ab8861537bc7f9f0ac1fd8dfeb90', onSlotchange: () => this.onSlotChange() }))));
254
254
  }
255
255
  static get is() { return "q2-tab-container"; }
256
256
  static get encapsulation() { return "shadow"; }
@@ -20,7 +20,7 @@ export class Q2TabPane {
20
20
  // #endregion
21
21
  // #region Render Methods
22
22
  render() {
23
- return (h("div", { key: '8f27e390528c79ae1589e1a7614c72455ebbdd32', id: `tab-pane-${this.guid}-${this.index}`, class: `tab-pane${this.selected ? '' : ' hidden'}`, role: "tabpanel", tabindex: "-1", "aria-hidden": `${!this.selected}`, "aria-labelledby": `tab-${this.guid}-${this.index}` }, h("slot", { key: '2d00ea2e03bbac11a63193debd2bb9904050ba37' })));
23
+ return (h("div", { key: 'cf5a8eb75b97459214c279b02f0fdd7c3fe1b203', id: `tab-pane-${this.guid}-${this.index}`, class: `tab-pane${this.selected ? '' : ' hidden'}`, role: "tabpanel", tabindex: "-1", "aria-hidden": `${!this.selected}`, "aria-labelledby": `tab-${this.guid}-${this.index}` }, h("slot", { key: '00b05dbda891dbbbc3f40d6dc531e8940edbe761' })));
24
24
  }
25
25
  static get is() { return "q2-tab-pane"; }
26
26
  static get encapsulation() { return "shadow"; }
@@ -188,7 +188,7 @@ export class Q2Tag {
188
188
  if (this.optionCount)
189
189
  wrapperClassNames.push('has-options');
190
190
  const shouldShowOptions = this.optionCount > 0;
191
- return (h(Host, { key: '6ccc1d85936667bad9622cbec28a27d54bc48e76', role: shouldShowOptions ? 'list' : undefined }, h("click-elsewhere", { key: '6c6fac08128198e6b0a0f5733b67cc26ec4bed02', onChange: this.onClickElsewhere }, shouldShowOptions ? (h(Fragment, null, h("div", { class: "btn-wrapper", onClick: this.handleWrapperClick }, h("button", { class: "tag-wrapper", ref: el => (this.dropdownBtn = el), "test-id": "btn-control", type: "button", role: "combobox", onClick: this.handleClick, onKeyDown: this.handleKeydown, onFocusout: this.handleButtonFocusout, "aria-controls": "option-list", "aria-expanded": open ? 'true' : 'false', "aria-describedby": "option-description" }, h("div", { class: wrapperClassNames.join(' ') }, loc(this.label)), h("q2-icon", { type: "options" }))), this.renderHiddenElement())) : (h("div", { class: "tag-wrapper", onClick: e => e.stopPropagation() }, h("div", { class: wrapperClassNames.join(' ') }, h("slot", { name: "decorator" }), loc(this.label)))), shouldShowOptions && (h("q2-popover", { key: '134f0deaa4ea93ceb451329f2cdd7c27d0ecda71', ref: el => (this.popoverElement = el), controlElement: this.dropdownBtn, open: this.open, maxHeight: this.popoverMaxHeight, minHeight: this.popoverMinHeight, direction: this.popoverDirection, align: this.popoverAlignment }, h("q2-option-list", { key: '43ccf161a1eea92b5f8c591d5ed7aec8fb8fb9a7', id: "option-list", ref: el => (this.optionList = el), onChange: this.handleChange, type: "menu", align: "right", label: loc('tecton.element.optionList.label', [this.optionListLabel]), "no-select": true }, h("slot", { key: '2fedc4307ddbe7024c0c8e9884c3fc7ae42efada' })))))));
191
+ return (h(Host, { key: '1a60bcc67a02d8e35d77a090cd2480cde44e878c', role: shouldShowOptions ? 'list' : undefined }, h("click-elsewhere", { key: 'bee4b84d1132d6d64d686f4df22fe831f15d3ebe', onChange: this.onClickElsewhere }, shouldShowOptions ? (h(Fragment, null, h("div", { class: "btn-wrapper", onClick: this.handleWrapperClick }, h("button", { class: "tag-wrapper", ref: el => (this.dropdownBtn = el), "test-id": "btn-control", type: "button", role: "combobox", onClick: this.handleClick, onKeyDown: this.handleKeydown, onFocusout: this.handleButtonFocusout, "aria-controls": "option-list", "aria-expanded": open ? 'true' : 'false', "aria-describedby": "option-description" }, h("div", { class: wrapperClassNames.join(' ') }, loc(this.label)), h("q2-icon", { type: "options" }))), this.renderHiddenElement())) : (h("div", { class: "tag-wrapper", onClick: e => e.stopPropagation() }, h("div", { class: wrapperClassNames.join(' ') }, h("slot", { name: "decorator" }), loc(this.label)))), shouldShowOptions && (h("q2-popover", { key: '3dcb294fedf7f648d869c154168a43ad48073a85', ref: el => (this.popoverElement = el), controlElement: this.dropdownBtn, open: this.open, maxHeight: this.popoverMaxHeight, minHeight: this.popoverMinHeight, direction: this.popoverDirection, align: this.popoverAlignment }, h("q2-option-list", { key: '26542e19410b4b9f5daa1f358f02f23e2652c3a0', id: "option-list", ref: el => (this.optionList = el), onChange: this.handleChange, type: "menu", align: "right", label: loc('tecton.element.optionList.label', [this.optionListLabel]), "no-select": true }, h("slot", { key: 'ea986aef75184e4abd3263fe6af8f7c04d486394' })))))));
192
192
  }
193
193
  static get is() { return "q2-tag"; }
194
194
  static get encapsulation() { return "shadow"; }
@@ -163,6 +163,11 @@ describe('q2-tag', () => {
163
163
  await page.waitForChanges();
164
164
  expect(await getFocusedAttribute(page, 'test-id')).toEqual('btn-control');
165
165
  });
166
+ it('focuses active option and opens the list when element.focus() is called', async function () {
167
+ await tag.focus();
168
+ await page.waitForChanges();
169
+ expect(await getFocusedAttribute(page, 'test-id')).toEqual('btn-control');
170
+ });
166
171
  });
167
172
  describe('Regressions', () => {
168
173
  describe('TCT-2161', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"q2-tag-test.e2e.js","sourceRoot":"","sources":["../../../../../src/components/q2-tag/test/q2-tag-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage, EventSpy } from '@stencil/core/testing';\nimport { ActionSheetListCloseData } from 'q2-tecton-common/lib/utility/action-sheet';\nimport {\n setup,\n getFocusedAttribute,\n getFocusedOptionValue,\n getActiveElementTestId,\n getListOfStyleCompilationIssues,\n evaluateA11y,\n} from '@/utils/helpers';\n\ndescribe('q2-tag', () => {\n let page: E2EPage;\n let tag: E2EElement;\n let popover: E2EElement;\n let controlBtn: E2EElement;\n let allOptions: E2EElement[];\n let optionContainer: E2EElement;\n let clickSpy: EventSpy;\n let changeSpy: EventSpy;\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: `<q2-tag></q2-tag>` });\n expect(await getListOfStyleCompilationIssues(page, 'q2-tag')).toHaveLength(0);\n });\n\n describe('Props', () => {\n describe('hoist', () => {\n const runHoistSetup = async (\n action: string,\n hoistEnabled: boolean = false,\n defineShowActionSheet: boolean = false,\n isCancelled: boolean = false\n ) => {\n page = await setup({\n html: `\n <q2-tag ${hoistEnabled ? 'hoist' : ''} label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `,\n });\n\n if (defineShowActionSheet) {\n await page.evaluate(isCancelled => {\n const returnValue: ActionSheetListCloseData = isCancelled\n ? {\n type: 'cancel',\n value: '',\n values: [],\n }\n : {\n value: '3',\n values: [{ display: 'Option 3', value: '3' }],\n type: 'confirm',\n };\n (this as Window).TectonElements.showActionSheet = async () => returnValue;\n }, isCancelled);\n }\n\n popover = await page.find('q2-tag >>> q2-popover');\n tag = await page.find('q2-tag');\n controlBtn = await page.find('q2-tag >>> button');\n clickSpy = await tag.spyOnEvent('click');\n\n expect(popover).not.toHaveAttribute('open');\n\n if (action === 'click') {\n await controlBtn.click();\n } else {\n await controlBtn.press(action);\n }\n await page.waitForChanges();\n };\n\n describe('when window.Tecton.useActionSheets is true', () => {\n it('defaults the hoist prop to true', async () => {\n page = await setup({ html: `` });\n await page.evaluate(() => {\n (this as Window).Tecton = {\n inMobileApp: false,\n useActionSheets: true,\n noStrings: false,\n platformDimensions: null,\n platformUrl: null,\n };\n });\n await page.setContent(`\n <q2-tag label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `);\n await page.waitForChanges();\n\n tag = await page.find('q2-tag');\n expect(await tag.getProperty('hoist')).toEqual(true);\n });\n\n it('sets hoist to false when manually set to false', async () => {\n page = await setup({ html: `` });\n await page.evaluate(() => {\n (this as Window).Tecton = {\n inMobileApp: false,\n useActionSheets: true,\n noStrings: false,\n platformDimensions: null,\n platformUrl: null,\n };\n });\n await page.setContent(`\n <q2-tag label=\"My tag\" hoist=\"false\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `);\n await page.waitForChanges();\n\n tag = await page.find('q2-tag');\n expect(await tag.getProperty('hoist')).toEqual(false);\n });\n });\n\n describe('when false (default)', () => {\n it('opens popover on click', async () => {\n await runHoistSetup('click', false, true);\n\n expect(popover).toHaveAttribute('open');\n\n const option = await page.find('q2-option[value=\"3\"]');\n await option.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n describe('when true', () => {\n describe('when window.TectonElements.showActionSheet is not defined', () => {\n it('opens popover on click', async () => {\n await runHoistSetup('click', true, false);\n\n const option = await page.find('q2-option[value=\"3\"]');\n await option.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n describe('when window.TectonElements.showActionSheet is defined', () => {\n ['click', 'ArrowDown', 'Space', 'Enter'].forEach(action => {\n it(`calls showActionSheet on ${action}`, async () => {\n await runHoistSetup(action, true, true);\n\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n it(`calls showActionSheet on click and returns no data when cancelled`, async () => {\n await runHoistSetup('click', true, true, true);\n\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '',\n });\n });\n });\n });\n });\n\n describe('focus', () => {\n let page: E2EPage;\n let tag: E2EElement;\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-tag label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `,\n });\n tag = await page.find('q2-tag');\n });\n\n it('focuses the <button> element when focus event is dispatched', async function (): Promise<void> {\n tag.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await getFocusedAttribute(page, 'test-id')).toEqual('btn-control');\n });\n });\n\n describe('Regressions', () => {\n describe('TCT-2161', () => {\n it('leaves the element when Tab is pressed', async function (): Promise<void> {\n page = await setup({\n html: `\n <q2-tag label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n <button test-id=\"btn-next\">Test</button>\n `,\n });\n tag = await page.find('q2-tag');\n await tag.focus();\n\n expect(await getActiveElementTestId(page)).toEqual('btn-control');\n\n await tag.press('Tab');\n await page.waitForChanges();\n\n expect(await getActiveElementTestId(page)).toEqual('btn-next');\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({\n html: `<q2-tag label=\"My tag\" theme=\"primary\"></q2-tag>`,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {\n it(\"option-list should have a role of 'menu' and the options a role of 'menuoption'\", async () => {\n page = await setup({\n html: `\n <q2-tag label=\"My tag\" open>\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `,\n });\n await page.waitForChanges();\n\n const snapshot = await page.accessibility.snapshot();\n const button = snapshot.children[0];\n const optionList = snapshot.children[1].children[0];\n\n expect(button.role).toEqual('combobox');\n expect(optionList.role).toEqual('menu');\n expect(optionList.children).toHaveLength(3);\n optionList.children.forEach(child => {\n expect(child.role).toEqual('menuitem');\n });\n });\n });\n\n describe('Keyboard Controls', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-tag label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `,\n });\n tag = await page.find('q2-tag');\n allOptions = await page.findAll('q2-option');\n popover = await page.find('q2-tag >>> q2-popover');\n optionContainer = await page.find('q2-tag >>> q2-option-list >>> .options');\n controlBtn = await page.find('q2-tag >>> button');\n clickSpy = await tag.spyOnEvent('click');\n changeSpy = await tag.spyOnEvent('change');\n });\n\n it('can select option via keyboard', async () => {\n const tagLabel = await page.find('q2-tag >>> .tag');\n\n expect(tagLabel.classList.contains('has-options')).toBe(true);\n expect(popover).not.toHaveAttribute('open');\n\n await controlBtn.press('ArrowDown');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('1');\n\n await optionContainer.press('ArrowDown');\n await page.waitForChanges();\n expect(await getFocusedOptionValue(page)).toEqual('2');\n await allOptions[1].press(' ');\n await page.waitForChanges();\n\n expect(tag).not.toHaveAttribute('open');\n expect(popover).not.toHaveAttribute('open');\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '2',\n });\n expect(changeSpy).not.toHaveReceivedEvent();\n });\n\n describe('when keyboard is pressed', () => {\n it('opens list and focuses first option on ArrowDown', async () => {\n await controlBtn.press('ArrowDown');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('1');\n });\n\n it('opens list and focuses last option on ArrowUp', async () => {\n await controlBtn.press('ArrowUp');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('3');\n });\n\n it('opens list and focuses first option on Enter', async () => {\n await controlBtn.press('Enter');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('1');\n });\n\n it('opens list and focuses first option on Space', async () => {\n await controlBtn.press(' ');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('1');\n });\n\n it('opens list and focuses last option on Home', async () => {\n await controlBtn.press('Home');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedAttribute(page, 'value')).toEqual('1');\n });\n\n it('opens list and focuses last option on End', async () => {\n await controlBtn.press('End');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedAttribute(page, 'value')).toEqual('3');\n });\n });\n });\n\n describe('Other', () => {});\n });\n });\n});\n"]}
1
+ {"version":3,"file":"q2-tag-test.e2e.js","sourceRoot":"","sources":["../../../../../src/components/q2-tag/test/q2-tag-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage, EventSpy } from '@stencil/core/testing';\nimport { ActionSheetListCloseData } from 'q2-tecton-common/lib/utility/action-sheet';\nimport {\n setup,\n getFocusedAttribute,\n getFocusedOptionValue,\n getActiveElementTestId,\n getListOfStyleCompilationIssues,\n evaluateA11y,\n} from '@/utils/helpers';\n\ndescribe('q2-tag', () => {\n let page: E2EPage;\n let tag: E2EElement;\n let popover: E2EElement;\n let controlBtn: E2EElement;\n let allOptions: E2EElement[];\n let optionContainer: E2EElement;\n let clickSpy: EventSpy;\n let changeSpy: EventSpy;\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: `<q2-tag></q2-tag>` });\n expect(await getListOfStyleCompilationIssues(page, 'q2-tag')).toHaveLength(0);\n });\n\n describe('Props', () => {\n describe('hoist', () => {\n const runHoistSetup = async (\n action: string,\n hoistEnabled: boolean = false,\n defineShowActionSheet: boolean = false,\n isCancelled: boolean = false\n ) => {\n page = await setup({\n html: `\n <q2-tag ${hoistEnabled ? 'hoist' : ''} label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `,\n });\n\n if (defineShowActionSheet) {\n await page.evaluate(isCancelled => {\n const returnValue: ActionSheetListCloseData = isCancelled\n ? {\n type: 'cancel',\n value: '',\n values: [],\n }\n : {\n value: '3',\n values: [{ display: 'Option 3', value: '3' }],\n type: 'confirm',\n };\n (this as Window).TectonElements.showActionSheet = async () => returnValue;\n }, isCancelled);\n }\n\n popover = await page.find('q2-tag >>> q2-popover');\n tag = await page.find('q2-tag');\n controlBtn = await page.find('q2-tag >>> button');\n clickSpy = await tag.spyOnEvent('click');\n\n expect(popover).not.toHaveAttribute('open');\n\n if (action === 'click') {\n await controlBtn.click();\n } else {\n await controlBtn.press(action);\n }\n await page.waitForChanges();\n };\n\n describe('when window.Tecton.useActionSheets is true', () => {\n it('defaults the hoist prop to true', async () => {\n page = await setup({ html: `` });\n await page.evaluate(() => {\n (this as Window).Tecton = {\n inMobileApp: false,\n useActionSheets: true,\n noStrings: false,\n platformDimensions: null,\n platformUrl: null,\n };\n });\n await page.setContent(`\n <q2-tag label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `);\n await page.waitForChanges();\n\n tag = await page.find('q2-tag');\n expect(await tag.getProperty('hoist')).toEqual(true);\n });\n\n it('sets hoist to false when manually set to false', async () => {\n page = await setup({ html: `` });\n await page.evaluate(() => {\n (this as Window).Tecton = {\n inMobileApp: false,\n useActionSheets: true,\n noStrings: false,\n platformDimensions: null,\n platformUrl: null,\n };\n });\n await page.setContent(`\n <q2-tag label=\"My tag\" hoist=\"false\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `);\n await page.waitForChanges();\n\n tag = await page.find('q2-tag');\n expect(await tag.getProperty('hoist')).toEqual(false);\n });\n });\n\n describe('when false (default)', () => {\n it('opens popover on click', async () => {\n await runHoistSetup('click', false, true);\n\n expect(popover).toHaveAttribute('open');\n\n const option = await page.find('q2-option[value=\"3\"]');\n await option.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n describe('when true', () => {\n describe('when window.TectonElements.showActionSheet is not defined', () => {\n it('opens popover on click', async () => {\n await runHoistSetup('click', true, false);\n\n const option = await page.find('q2-option[value=\"3\"]');\n await option.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n describe('when window.TectonElements.showActionSheet is defined', () => {\n ['click', 'ArrowDown', 'Space', 'Enter'].forEach(action => {\n it(`calls showActionSheet on ${action}`, async () => {\n await runHoistSetup(action, true, true);\n\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n it(`calls showActionSheet on click and returns no data when cancelled`, async () => {\n await runHoistSetup('click', true, true, true);\n\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '',\n });\n });\n });\n });\n });\n\n describe('focus', () => {\n let page: E2EPage;\n let tag: E2EElement;\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-tag label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `,\n });\n tag = await page.find('q2-tag');\n });\n\n it('focuses the <button> element when focus event is dispatched', async function (): Promise<void> {\n tag.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await getFocusedAttribute(page, 'test-id')).toEqual('btn-control');\n });\n\n it('focuses active option and opens the list when element.focus() is called', async function (): Promise<void> {\n await tag.focus();\n await page.waitForChanges();\n\n expect(await getFocusedAttribute(page, 'test-id')).toEqual('btn-control');\n });\n });\n\n describe('Regressions', () => {\n describe('TCT-2161', () => {\n it('leaves the element when Tab is pressed', async function (): Promise<void> {\n page = await setup({\n html: `\n <q2-tag label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n <button test-id=\"btn-next\">Test</button>\n `,\n });\n tag = await page.find('q2-tag');\n await tag.focus();\n\n expect(await getActiveElementTestId(page)).toEqual('btn-control');\n\n await tag.press('Tab');\n await page.waitForChanges();\n\n expect(await getActiveElementTestId(page)).toEqual('btn-next');\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({\n html: `<q2-tag label=\"My tag\" theme=\"primary\"></q2-tag>`,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {\n it(\"option-list should have a role of 'menu' and the options a role of 'menuoption'\", async () => {\n page = await setup({\n html: `\n <q2-tag label=\"My tag\" open>\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `,\n });\n await page.waitForChanges();\n\n const snapshot = await page.accessibility.snapshot();\n const button = snapshot.children[0];\n const optionList = snapshot.children[1].children[0];\n\n expect(button.role).toEqual('combobox');\n expect(optionList.role).toEqual('menu');\n expect(optionList.children).toHaveLength(3);\n optionList.children.forEach(child => {\n expect(child.role).toEqual('menuitem');\n });\n });\n });\n\n describe('Keyboard Controls', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-tag label=\"My tag\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-tag>\n `,\n });\n tag = await page.find('q2-tag');\n allOptions = await page.findAll('q2-option');\n popover = await page.find('q2-tag >>> q2-popover');\n optionContainer = await page.find('q2-tag >>> q2-option-list >>> .options');\n controlBtn = await page.find('q2-tag >>> button');\n clickSpy = await tag.spyOnEvent('click');\n changeSpy = await tag.spyOnEvent('change');\n });\n\n it('can select option via keyboard', async () => {\n const tagLabel = await page.find('q2-tag >>> .tag');\n\n expect(tagLabel.classList.contains('has-options')).toBe(true);\n expect(popover).not.toHaveAttribute('open');\n\n await controlBtn.press('ArrowDown');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('1');\n\n await optionContainer.press('ArrowDown');\n await page.waitForChanges();\n expect(await getFocusedOptionValue(page)).toEqual('2');\n await allOptions[1].press(' ');\n await page.waitForChanges();\n\n expect(tag).not.toHaveAttribute('open');\n expect(popover).not.toHaveAttribute('open');\n expect(clickSpy).toHaveReceivedEventDetail({\n value: '2',\n });\n expect(changeSpy).not.toHaveReceivedEvent();\n });\n\n describe('when keyboard is pressed', () => {\n it('opens list and focuses first option on ArrowDown', async () => {\n await controlBtn.press('ArrowDown');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('1');\n });\n\n it('opens list and focuses last option on ArrowUp', async () => {\n await controlBtn.press('ArrowUp');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('3');\n });\n\n it('opens list and focuses first option on Enter', async () => {\n await controlBtn.press('Enter');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('1');\n });\n\n it('opens list and focuses first option on Space', async () => {\n await controlBtn.press(' ');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedOptionValue(page)).toEqual('1');\n });\n\n it('opens list and focuses last option on Home', async () => {\n await controlBtn.press('Home');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedAttribute(page, 'value')).toEqual('1');\n });\n\n it('opens list and focuses last option on End', async () => {\n await controlBtn.press('End');\n await page.waitForChanges();\n\n expect(tag).toHaveAttribute('open');\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedAttribute(page, 'value')).toEqual('3');\n });\n });\n });\n\n describe('Other', () => {});\n });\n });\n});\n"]}
@@ -286,7 +286,7 @@ export class Q2Textarea {
286
286
  ]))));
287
287
  }
288
288
  render() {
289
- return (h("div", { key: '68675332520dee274c1fe2c5da917cdcc5af4aa4', class: this.wrapperClasses }, renderLabel(this), h("div", { key: 'fe7c68c3db02f0b6876d93f7676911f64bd16101', class: "content-container", ref: el => (this.contentContainer = el) }, this.renderInput(), this.maxlength ? this.renderMaxLength() : '', renderMessages(this))));
289
+ return (h("div", { key: '90b9dba18e3a771334b2e7d29bd7b69530b563be', class: this.wrapperClasses }, renderLabel(this), h("div", { key: '0c0f2f4a01c417ba73de51bc7476b2c0a7a2bac6', class: "content-container", ref: el => (this.contentContainer = el) }, this.renderInput(), this.maxlength ? this.renderMaxLength() : '', renderMessages(this))));
290
290
  }
291
291
  static get is() { return "q2-textarea"; }
292
292
  static get encapsulation() { return "shadow"; }
@@ -63,9 +63,9 @@ export class TectonTabPane {
63
63
  // #endregion
64
64
  // #region Render Methods
65
65
  render() {
66
- return (h("div", { key: '3922f0d87f79f76fb09a678254465fa23de753cc', id: `tab-pane-${this.guid}-${this.index}`, class: `tab-pane${this.selected ? '' : ' hidden'}`, role: "tabpanel", tabindex: "-1", "aria-hidden": `${!this.selected}`, "aria-labelledby": `tab-${this.guid}-${this.index}` }, this.selected && this.provided !== undefined && !this.provided && (h("div", { key: 'ff1ea2bab4efe8d9c5d5aa6ca8abb63eab0ef53c' }, h("slot", { key: '15643803e95acb5c1d68d3257acacd80e07bfa06', name: "loading-wrapper" }), h("iframe", { key: '90203cf205d92440cda111873bf86c66d0776188', hidden: true, name: this.moduleId, scrolling: "no", src: this.showForm && this.authPayload.length ? '' : this.url || '', "data-module-id": this.moduleId, style: this.minHeight ? { minHeight: this.minHeight } : null, onLoad: this.onIFrameLoad, title: this.iframeTitle, allow: "geolocation; camera" }), this._showForm && this.authPayload ? (h("form", { hidden: true, method: "post", action: this.url, target: this.moduleId, encType: "multipart/form-data" }, this.authPayload.map(element => {
66
+ return (h("div", { key: '5f6a78006318ef46a888346b83a809478c861b1f', id: `tab-pane-${this.guid}-${this.index}`, class: `tab-pane${this.selected ? '' : ' hidden'}`, role: "tabpanel", tabindex: "-1", "aria-hidden": `${!this.selected}`, "aria-labelledby": `tab-${this.guid}-${this.index}` }, this.selected && this.provided !== undefined && !this.provided && (h("div", { key: 'b18bbd5b2059c74bbd5b5b1b670e62b00f402a42' }, h("slot", { key: '113d12ac60c5bb30385d3ba8e05af9eae2be57dc', name: "loading-wrapper" }), h("iframe", { key: 'ad81a257cbc3891d4c3afe06b300265d2d016a06', hidden: true, name: this.moduleId, scrolling: "no", src: this.showForm && this.authPayload.length ? '' : this.url || '', "data-module-id": this.moduleId, style: this.minHeight ? { minHeight: this.minHeight } : null, onLoad: this.onIFrameLoad, title: this.iframeTitle, allow: "geolocation; camera" }), this._showForm && this.authPayload ? (h("form", { hidden: true, method: "post", action: this.url, target: this.moduleId, encType: "multipart/form-data" }, this.authPayload.map(element => {
67
67
  return (h("input", { type: "hidden", value: element.value, name: element.key }));
68
- }))) : (''))), h("div", { key: 'f8ac689f47d2db0acf5f09024ad7014ab8894670', class: "slot-wrapper", hidden: this.selected && this.provided !== undefined && !this.provided }, h("slot", { key: 'd10d91dd7b72f1aa95eb2cba06b06129d479efaa' }))));
68
+ }))) : (''))), h("div", { key: '5bff139d2ca8d81f324236629108c661cf70256d', class: "slot-wrapper", hidden: this.selected && this.provided !== undefined && !this.provided }, h("slot", { key: 'abe8fc700eef1a2f33bdd087f71d6253082e40a3' }))));
69
69
  }
70
70
  static get is() { return "tecton-tab-pane"; }
71
71
  static get encapsulation() { return "shadow"; }
@@ -8,9 +8,46 @@ export const debounce = (fn, delay = 300) => {
8
8
  }, delay);
9
9
  };
10
10
  };
11
+ export function isAndroid() {
12
+ return /Android/i.test(navigator.userAgent);
13
+ }
14
+ export function isIOS() {
15
+ return /iPad|iPhone|iPod/.test(navigator.userAgent);
16
+ }
11
17
  export function isMobile() {
12
18
  return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(navigator.userAgent);
13
19
  }
20
+ export function isInScrollableContainer(element) {
21
+ let current = element;
22
+ while (current && current !== document.body && current !== document.documentElement) {
23
+ // Move to parent
24
+ if (current.parentElement) {
25
+ current = current.parentElement;
26
+ }
27
+ else {
28
+ // Try to cross shadow DOM boundary
29
+ const root = current.getRootNode();
30
+ if (root && root.host) {
31
+ current = root.host;
32
+ }
33
+ else {
34
+ break;
35
+ }
36
+ }
37
+ const style = window.getComputedStyle(current);
38
+ const hasScrollableOverflow = style.overflow === 'scroll' ||
39
+ style.overflow === 'auto' ||
40
+ style.overflowX === 'scroll' ||
41
+ style.overflowX === 'auto' ||
42
+ style.overflowY === 'scroll' ||
43
+ style.overflowY === 'auto';
44
+ const hasOverflowingContent = current.scrollHeight > current.clientHeight || current.scrollWidth > current.clientWidth;
45
+ if (hasScrollableOverflow && hasOverflowingContent) {
46
+ return true;
47
+ }
48
+ }
49
+ return false;
50
+ }
14
51
  export function isHostLosingFocus(event, hostElement) {
15
52
  const type = event.type;
16
53
  const focusInTypes = ['focusin', 'focus'];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from '@stencil/core';\nimport { Q2Btn } from 'src/components/q2-btn/q2-btn';\nimport { Q2Calendar } from 'src/components/q2-calendar/q2-calendar';\nimport { Q2Carousel } from 'src/components/q2-carousel/q2-carousel';\nimport { Q2Checkbox } from 'src/components/q2-checkbox/q2-checkbox';\nimport { Q2CheckboxGroup } from 'src/components/q2-checkbox-group/q2-checkbox-group';\nimport { Q2RadioGroup } from 'src/components/q2-radio-group/q2-radio-group';\nimport { Q2Dropdown } from 'src/components/q2-dropdown/q2-dropdown';\nimport { Q2DropdownItem } from 'src/components/q2-dropdown-item/q2-dropdown-item';\nimport { Q2EditableField } from 'src/components/q2-editable-field/q2-editable-field';\nimport { Q2Input } from 'src/components/q2-input/q2-input';\nimport { Q2Loading } from 'src/components/q2-loading/q2-loading';\nimport { Q2Radio } from 'src/components/q2-radio/q2-radio';\nimport { Q2Select } from 'src/components/q2-select/q2-select';\nimport { FormFieldTypes, IDict } from 'src/util';\nimport { Q2Popover } from '@/components/q2-popover/q2-popover';\n\nexport const debounce = <F extends (...args: Parameters<F>) => ReturnType<F>>(fn: F, delay: number = 300) => {\n let timeout: ReturnType<typeof setTimeout>;\n return function (...args: Parameters<F>) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n};\n\nexport function isMobile(): boolean {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(\n navigator.userAgent\n );\n}\n\nexport function isHostLosingFocus(event: FocusEvent, hostElement: HTMLElement) {\n const type = event.type;\n const focusInTypes = ['focusin', 'focus'];\n const isFocusIn = focusInTypes.includes(type);\n\n // on focusin: `target` is element losing focus, `relatedTarget` is element gaining focus\n // on focusout: `target` is element gaining focus, `relatedTarget` is element losing focus\n const elementGainingFocus = isFocusIn ? event.target : event.relatedTarget;\n\n const isElementNestedInHostElement = (element: HTMLElement) => {\n if (element === hostElement) return true;\n if (element.parentElement) {\n return isElementNestedInHostElement(element.parentElement);\n }\n return false;\n };\n\n if (!(elementGainingFocus instanceof HTMLElement)) return true;\n return !isElementNestedInHostElement(elementGainingFocus);\n}\n\nexport function isRelatedTargetWithinHost(event: FocusEvent, element: HTMLElement) {\n return event.relatedTarget !== element && !element.contains(event.relatedTarget as Node);\n}\n\nexport function isEventFromElement(event: Event, element: HTMLElement): boolean {\n return event.composedPath?.()[0] === element;\n}\n\nexport function overrideFocus(hostElement: HTMLElement) {\n hostElement.focus = () => hostElement?.dispatchEvent(new FocusEvent('focus', { bubbles: false }));\n}\n\nexport function isFirefox() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('firefox');\n}\n\nexport function isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n}\n\nexport function isSafari() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('safari') && !userAgent.includes('chrome');\n}\n\n/**\n * Returns the value of a prop if it is defined and included in the `validValues`\n * array. This is used primarily to prevent Vue wrappers from setting aria props\n * to \"Symbol()\" when the prop is not set.\n */\nexport function getAriaValueFromProp(prop: string, validValues?: string[]) {\n if (prop === undefined) return prop;\n if (!validValues) return prop !== 'Symbol()' ? prop : undefined;\n return validValues.includes(prop) || prop === '' ? prop : undefined;\n}\n\nlet guid: number = 1000;\nexport function createGuid(): number {\n return guid++;\n}\n\nexport function nextPaint(fn: (value?: unknown) => void) {\n requestAnimationFrame(() => {\n requestAnimationFrame(fn);\n });\n}\n\nexport function isVisible(element: HTMLElement) {\n return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\n}\n\nexport function waitForNextPaint() {\n return new Promise(resolve => nextPaint(resolve));\n}\n\nexport function capitalize(value: string) {\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n\nexport function pick(props: string[]): (obj: object) => object {\n return obj => {\n return props.reduce((memo, prop) => {\n return {\n ...memo,\n [prop]: obj[prop],\n };\n }, {});\n };\n}\n\nexport function loc(key: string, subs?: IDict<any> | string[]) {\n if (!key) return '';\n if (window.Tecton?.noStrings === true) {\n return key;\n }\n return window?.TectonElements?.loc(key, subs) ?? key;\n}\n\nexport function renderLabel(target: FormFieldTypes | Q2RadioGroup | Q2CheckboxGroup) {\n const { label, hideLabel, optional, readonly } = target;\n const labelClasses: string[] = ['input-label'];\n let helpText = '';\n\n let shouldHideLabel = hideLabel;\n if (!shouldHideLabel) {\n const labelSlotElements = target.hostElement.querySelectorAll<HTMLSlotElement>('[slot=\"label\"]');\n const hasSlotContent = labelSlotElements.length > 0;\n const hasLabel = !!label;\n\n shouldHideLabel = hasLabel || hasSlotContent ? false : true;\n }\n\n if (shouldHideLabel) labelClasses.push('sr');\n if (optional) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.optional')}</span>;\n }\n if (readonly) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.readonly')}</span>;\n labelClasses.push('readonly-field');\n }\n return (\n <label\n htmlFor={target.inputId}\n class={labelClasses.join(' ')}\n >\n <slot name=\"label\">\n {label ? loc(label) : undefined}\n {helpText}\n </slot>\n </label>\n );\n}\n\nexport function hasSlotContent(target: HTMLElement, slotName: string) {\n return target.querySelector(`[slot=\"${slotName}\"]`) !== null;\n}\n\nexport function handleAriaLabel(\n target:\n | Q2Input\n | Q2Select\n | Q2Radio\n | Q2Checkbox\n | Q2EditableField\n | Q2Dropdown\n | Q2DropdownItem\n | Q2Loading\n | Q2Carousel\n | Q2Calendar\n | Q2Btn\n) {\n const { ariaLabel } = target;\n if (!ariaLabel) return;\n\n // If empty ariaLabel prop is set to primitive symbol by framework wrapper, set ariaLabel to undefined and return\n const FW_WRAPPERS_EMPTY_PROP = Symbol().toString();\n if (ariaLabel === FW_WRAPPERS_EMPTY_PROP) {\n target.ariaLabel = undefined;\n return;\n }\n\n // If ariaLabel is set, set hideLabel to true and set label to ariaLabel\n if ('hideLabel' in target) target.hideLabel = true;\n target.label = loc(ariaLabel);\n target.ariaLabel = undefined;\n}\n\n/**\n * Handles when a prop has been renamed on a component without introducing a breaking change.\n */\nexport function handleRenamedProp(\n target: Q2Btn | Q2Calendar | Q2Dropdown | Q2Popover,\n oldProp: string,\n newProp: string,\n removeOldProp?: boolean\n) {\n if (typeof target[oldProp] === 'undefined') return;\n\n // If old prop has value, aka set in component, call handleDeprecationWarning()\n if (target[oldProp]) {\n handleDeprecationWarning(target, oldProp, 'prop');\n }\n\n target[newProp] = target[oldProp];\n\n if (removeOldProp) {\n delete target[oldProp];\n }\n}\n\nexport function handleDeprecationWarning(\n target: Q2Btn | Q2Calendar | Q2Dropdown | Q2Popover,\n deprecatedItemName: string,\n deprecatedItemType: 'function' | 'prop' | 'method' | 'event'\n) {\n if (window.location.hostname === 'localhost' || window.location.host === 'stack.q2developer.com') {\n if (target[deprecatedItemName] === 'undefined') return;\n\n const componentName =\n target.constructor?.name?.toLowerCase()?.slice(2) || target.hostElement?.tagName?.toLowerCase().slice(3);\n switch (deprecatedItemType) {\n case 'prop':\n if (deprecatedItemName === 'size' && componentName === 'btn') {\n console.warn(\n `The property of size in q2-btn should not be typeof number, or typeof string containing a number. This functionality will be deprecated in an upcoming release. Instead, please use the value 'undefined', or typeof string with any of the following values: \"small\" / \"medium\" / \"large\" `\n );\n } else {\n console.warn(\n `The property ${deprecatedItemName} in q2-${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n }\n break;\n\n case 'function':\n console.warn(\n `The function ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'method':\n console.warn(\n `The method ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'event':\n console.warn(\n `The event ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n default:\n console.error(\n `handleDeprecationWarning --> No type found for desired deprecation: ${deprecatedItemName} in q2-${componentName}: deprecatedItemType = ${deprecatedItemName}`\n );\n }\n }\n}\n\nexport function renderMessages(target: FormFieldTypes) {\n const type = target.hasError ? 'danger' : 'info';\n\n return (\n <div class=\"messages-container\">\n <q2-message\n appearance=\"minimal\"\n description\n type={type}\n test-id=\"message\"\n >\n <ul id={target.inputDescribedBy}>\n {target.messages.map(message => (\n <li test-id=\"messageListItem\">{loc(message)}</li>\n ))}\n </ul>\n </q2-message>\n </div>\n );\n}\n\nexport function setMessageHeight(target: FormFieldTypes) {\n const messageContainer = (target.hostElement.shadowRoot as ShadowRoot).querySelector<HTMLDivElement>(\n '.messages-container'\n );\n const q2Message = messageContainer.querySelector('q2-message');\n nextPaint(() => {\n const height = target.showMessages && target.hasFocus ? q2Message.getBoundingClientRect().height : 0;\n\n if (messageContainer.style.getPropertyValue('height') === `${height}px`) return;\n\n if (height === 0) {\n q2Message.classList.add('invisible');\n messageContainer.style.removeProperty('height');\n } else {\n q2Message.classList.remove('invisible');\n messageContainer.style.setProperty('height', `${height}px`);\n }\n });\n}\n\nexport const resizeIframe = () => {\n return window.TectonElements?.resizeIframe?.();\n};\n\n// Handling color attribute (deprecated)\nexport const handleColor = (target: Q2Btn) => {\n if (!target.intent && ['primary', 'secondary'].includes(target.color)) {\n target.intent = `workflow-${target.color}` as HTMLQ2BtnElement['intent'];\n target.color = undefined;\n }\n};\n\n/**\n * Gets all translated text content from an element, including shadow DOM content\n *\n * @param {Element} element - The element to extract text from\n * @param {Object} options - Configuration options\n * @param {boolean} [options.trim=true] - Whether to trim whitespace\n * @param {boolean} [options.normalizeWhitespace=false] - Whether to normalize whitespace\n * @param {boolean} [options.skipComponentReady=false] - Skip waiting for components (for test environments)\n * @return {Promise<string>} All translated text content in DOM order\n */\nexport const getAllText = async (element, options = {}) => {\n if (!element) return '';\n\n const opts = {\n trim: true,\n normalizeWhitespace: false,\n skipComponentReady: false,\n ...options,\n };\n\n const nodesToSkip = new Set(['STYLE', 'SCRIPT', 'NOSCRIPT', 'TEMPLATE', '#comment']);\n const processedNodes = new WeakSet();\n let result = '';\n\n async function processNode(node) {\n if (processedNodes.has(node) || nodesToSkip.has(node.nodeName)) return;\n\n processedNodes.add(node);\n\n // Handle text nodes\n if (node.nodeType === Node.TEXT_NODE) {\n const text = opts.trim ? node.textContent.trim() : node.textContent;\n\n if (text) {\n // Add space between adjacent text nodes if needed\n if (result && !result.endsWith(' ') && !text.startsWith(' ')) {\n result += ' ';\n }\n\n // Translate the text\n result += opts.skipComponentReady ? window.TectonElements?.loc(text) : loc(text);\n }\n return;\n }\n\n // Handle element nodes\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Wait for Stencil component if needed\n const isStencilComponent = node.nodeName.startsWith('Q2-') && typeof node.componentOnReady === 'function';\n\n if (isStencilComponent && !opts.skipComponentReady) {\n await node.componentOnReady();\n }\n\n // Process children in light DOM\n for (const child of node.childNodes) {\n await processNode(child);\n }\n\n // Process shadow DOM if present\n if (node.shadowRoot) {\n for (const shadowChild of node.shadowRoot.childNodes) {\n await processNode(shadowChild);\n }\n }\n\n // Handle slot elements with assigned nodes\n if (node.nodeName === 'SLOT' && typeof node.assignedNodes === 'function') {\n const assignedNodes = node.assignedNodes();\n\n if (assignedNodes.length > 0) {\n for (const assigned of assignedNodes) {\n if (!processedNodes.has(assigned)) {\n await processNode(assigned);\n }\n }\n } else {\n // Process slot fallback content\n for (const fallback of node.childNodes) {\n if (!processedNodes.has(fallback)) {\n await processNode(fallback);\n }\n }\n }\n }\n }\n }\n\n await processNode(element);\n\n // Apply final formatting\n if (opts.trim) {\n result = result.trim();\n }\n\n if (opts.normalizeWhitespace) {\n result = result.replace(/\\s+/g, ' ');\n }\n\n return result;\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from '@stencil/core';\nimport { Q2Btn } from 'src/components/q2-btn/q2-btn';\nimport { Q2Calendar } from 'src/components/q2-calendar/q2-calendar';\nimport { Q2Carousel } from 'src/components/q2-carousel/q2-carousel';\nimport { Q2Checkbox } from 'src/components/q2-checkbox/q2-checkbox';\nimport { Q2CheckboxGroup } from 'src/components/q2-checkbox-group/q2-checkbox-group';\nimport { Q2RadioGroup } from 'src/components/q2-radio-group/q2-radio-group';\nimport { Q2Dropdown } from 'src/components/q2-dropdown/q2-dropdown';\nimport { Q2DropdownItem } from 'src/components/q2-dropdown-item/q2-dropdown-item';\nimport { Q2EditableField } from 'src/components/q2-editable-field/q2-editable-field';\nimport { Q2Input } from 'src/components/q2-input/q2-input';\nimport { Q2Loading } from 'src/components/q2-loading/q2-loading';\nimport { Q2Radio } from 'src/components/q2-radio/q2-radio';\nimport { Q2Select } from 'src/components/q2-select/q2-select';\nimport { FormFieldTypes, IDict } from 'src/util';\nimport { Q2Popover } from '@/components/q2-popover/q2-popover';\n\nexport const debounce = <F extends (...args: Parameters<F>) => ReturnType<F>>(fn: F, delay: number = 300) => {\n let timeout: ReturnType<typeof setTimeout>;\n return function (...args: Parameters<F>) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n};\n\nexport function isAndroid(): boolean {\n return /Android/i.test(navigator.userAgent);\n}\n\nexport function isIOS(): boolean {\n return /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function isMobile(): boolean {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(\n navigator.userAgent\n );\n}\n\nexport function isInScrollableContainer(element) {\n let current = element;\n\n while (current && current !== document.body && current !== document.documentElement) {\n // Move to parent\n if (current.parentElement) {\n current = current.parentElement;\n } else {\n // Try to cross shadow DOM boundary\n const root = current.getRootNode();\n if (root && root.host) {\n current = root.host;\n } else {\n break;\n }\n }\n\n const style = window.getComputedStyle(current);\n const hasScrollableOverflow =\n style.overflow === 'scroll' ||\n style.overflow === 'auto' ||\n style.overflowX === 'scroll' ||\n style.overflowX === 'auto' ||\n style.overflowY === 'scroll' ||\n style.overflowY === 'auto';\n\n const hasOverflowingContent =\n current.scrollHeight > current.clientHeight || current.scrollWidth > current.clientWidth;\n\n if (hasScrollableOverflow && hasOverflowingContent) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isHostLosingFocus(event: FocusEvent, hostElement: HTMLElement) {\n const type = event.type;\n const focusInTypes = ['focusin', 'focus'];\n const isFocusIn = focusInTypes.includes(type);\n\n // on focusin: `target` is element losing focus, `relatedTarget` is element gaining focus\n // on focusout: `target` is element gaining focus, `relatedTarget` is element losing focus\n const elementGainingFocus = isFocusIn ? event.target : event.relatedTarget;\n\n const isElementNestedInHostElement = (element: HTMLElement) => {\n if (element === hostElement) return true;\n if (element.parentElement) {\n return isElementNestedInHostElement(element.parentElement);\n }\n return false;\n };\n\n if (!(elementGainingFocus instanceof HTMLElement)) return true;\n return !isElementNestedInHostElement(elementGainingFocus);\n}\n\nexport function isRelatedTargetWithinHost(event: FocusEvent, element: HTMLElement) {\n return event.relatedTarget !== element && !element.contains(event.relatedTarget as Node);\n}\n\nexport function isEventFromElement(event: Event, element: HTMLElement): boolean {\n return event.composedPath?.()[0] === element;\n}\n\nexport function overrideFocus(hostElement: HTMLElement) {\n hostElement.focus = () => hostElement?.dispatchEvent(new FocusEvent('focus', { bubbles: false }));\n}\n\nexport function isFirefox() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('firefox');\n}\n\nexport function isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n}\n\nexport function isSafari() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('safari') && !userAgent.includes('chrome');\n}\n\n/**\n * Returns the value of a prop if it is defined and included in the `validValues`\n * array. This is used primarily to prevent Vue wrappers from setting aria props\n * to \"Symbol()\" when the prop is not set.\n */\nexport function getAriaValueFromProp(prop: string, validValues?: string[]) {\n if (prop === undefined) return prop;\n if (!validValues) return prop !== 'Symbol()' ? prop : undefined;\n return validValues.includes(prop) || prop === '' ? prop : undefined;\n}\n\nlet guid: number = 1000;\nexport function createGuid(): number {\n return guid++;\n}\n\nexport function nextPaint(fn: (value?: unknown) => void) {\n requestAnimationFrame(() => {\n requestAnimationFrame(fn);\n });\n}\n\nexport function isVisible(element: HTMLElement) {\n return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\n}\n\nexport function waitForNextPaint() {\n return new Promise(resolve => nextPaint(resolve));\n}\n\nexport function capitalize(value: string) {\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n\nexport function pick(props: string[]): (obj: object) => object {\n return obj => {\n return props.reduce((memo, prop) => {\n return {\n ...memo,\n [prop]: obj[prop],\n };\n }, {});\n };\n}\n\nexport function loc(key: string, subs?: IDict<any> | string[]) {\n if (!key) return '';\n if (window.Tecton?.noStrings === true) {\n return key;\n }\n return window?.TectonElements?.loc(key, subs) ?? key;\n}\n\nexport function renderLabel(target: FormFieldTypes | Q2RadioGroup | Q2CheckboxGroup) {\n const { label, hideLabel, optional, readonly } = target;\n const labelClasses: string[] = ['input-label'];\n let helpText = '';\n\n let shouldHideLabel = hideLabel;\n if (!shouldHideLabel) {\n const labelSlotElements = target.hostElement.querySelectorAll<HTMLSlotElement>('[slot=\"label\"]');\n const hasSlotContent = labelSlotElements.length > 0;\n const hasLabel = !!label;\n\n shouldHideLabel = hasLabel || hasSlotContent ? false : true;\n }\n\n if (shouldHideLabel) labelClasses.push('sr');\n if (optional) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.optional')}</span>;\n }\n if (readonly) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.readonly')}</span>;\n labelClasses.push('readonly-field');\n }\n return (\n <label\n htmlFor={target.inputId}\n class={labelClasses.join(' ')}\n >\n <slot name=\"label\">\n {label ? loc(label) : undefined}\n {helpText}\n </slot>\n </label>\n );\n}\n\nexport function hasSlotContent(target: HTMLElement, slotName: string) {\n return target.querySelector(`[slot=\"${slotName}\"]`) !== null;\n}\n\nexport function handleAriaLabel(\n target:\n | Q2Input\n | Q2Select\n | Q2Radio\n | Q2Checkbox\n | Q2EditableField\n | Q2Dropdown\n | Q2DropdownItem\n | Q2Loading\n | Q2Carousel\n | Q2Calendar\n | Q2Btn\n) {\n const { ariaLabel } = target;\n if (!ariaLabel) return;\n\n // If empty ariaLabel prop is set to primitive symbol by framework wrapper, set ariaLabel to undefined and return\n const FW_WRAPPERS_EMPTY_PROP = Symbol().toString();\n if (ariaLabel === FW_WRAPPERS_EMPTY_PROP) {\n target.ariaLabel = undefined;\n return;\n }\n\n // If ariaLabel is set, set hideLabel to true and set label to ariaLabel\n if ('hideLabel' in target) target.hideLabel = true;\n target.label = loc(ariaLabel);\n target.ariaLabel = undefined;\n}\n\n/**\n * Handles when a prop has been renamed on a component without introducing a breaking change.\n */\nexport function handleRenamedProp(\n target: Q2Btn | Q2Calendar | Q2Dropdown | Q2Popover,\n oldProp: string,\n newProp: string,\n removeOldProp?: boolean\n) {\n if (typeof target[oldProp] === 'undefined') return;\n\n // If old prop has value, aka set in component, call handleDeprecationWarning()\n if (target[oldProp]) {\n handleDeprecationWarning(target, oldProp, 'prop');\n }\n\n target[newProp] = target[oldProp];\n\n if (removeOldProp) {\n delete target[oldProp];\n }\n}\n\nexport function handleDeprecationWarning(\n target: Q2Btn | Q2Calendar | Q2Dropdown | Q2Popover,\n deprecatedItemName: string,\n deprecatedItemType: 'function' | 'prop' | 'method' | 'event'\n) {\n if (window.location.hostname === 'localhost' || window.location.host === 'stack.q2developer.com') {\n if (target[deprecatedItemName] === 'undefined') return;\n\n const componentName =\n target.constructor?.name?.toLowerCase()?.slice(2) || target.hostElement?.tagName?.toLowerCase().slice(3);\n switch (deprecatedItemType) {\n case 'prop':\n if (deprecatedItemName === 'size' && componentName === 'btn') {\n console.warn(\n `The property of size in q2-btn should not be typeof number, or typeof string containing a number. This functionality will be deprecated in an upcoming release. Instead, please use the value 'undefined', or typeof string with any of the following values: \"small\" / \"medium\" / \"large\" `\n );\n } else {\n console.warn(\n `The property ${deprecatedItemName} in q2-${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n }\n break;\n\n case 'function':\n console.warn(\n `The function ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'method':\n console.warn(\n `The method ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'event':\n console.warn(\n `The event ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n default:\n console.error(\n `handleDeprecationWarning --> No type found for desired deprecation: ${deprecatedItemName} in q2-${componentName}: deprecatedItemType = ${deprecatedItemName}`\n );\n }\n }\n}\n\nexport function renderMessages(target: FormFieldTypes) {\n const type = target.hasError ? 'danger' : 'info';\n\n return (\n <div class=\"messages-container\">\n <q2-message\n appearance=\"minimal\"\n description\n type={type}\n test-id=\"message\"\n >\n <ul id={target.inputDescribedBy}>\n {target.messages.map(message => (\n <li test-id=\"messageListItem\">{loc(message)}</li>\n ))}\n </ul>\n </q2-message>\n </div>\n );\n}\n\nexport function setMessageHeight(target: FormFieldTypes) {\n const messageContainer = (target.hostElement.shadowRoot as ShadowRoot).querySelector<HTMLDivElement>(\n '.messages-container'\n );\n const q2Message = messageContainer.querySelector('q2-message');\n nextPaint(() => {\n const height = target.showMessages && target.hasFocus ? q2Message.getBoundingClientRect().height : 0;\n\n if (messageContainer.style.getPropertyValue('height') === `${height}px`) return;\n\n if (height === 0) {\n q2Message.classList.add('invisible');\n messageContainer.style.removeProperty('height');\n } else {\n q2Message.classList.remove('invisible');\n messageContainer.style.setProperty('height', `${height}px`);\n }\n });\n}\n\nexport const resizeIframe = () => {\n return window.TectonElements?.resizeIframe?.();\n};\n\n// Handling color attribute (deprecated)\nexport const handleColor = (target: Q2Btn) => {\n if (!target.intent && ['primary', 'secondary'].includes(target.color)) {\n target.intent = `workflow-${target.color}` as HTMLQ2BtnElement['intent'];\n target.color = undefined;\n }\n};\n\n/**\n * Gets all translated text content from an element, including shadow DOM content\n *\n * @param {Element} element - The element to extract text from\n * @param {Object} options - Configuration options\n * @param {boolean} [options.trim=true] - Whether to trim whitespace\n * @param {boolean} [options.normalizeWhitespace=false] - Whether to normalize whitespace\n * @param {boolean} [options.skipComponentReady=false] - Skip waiting for components (for test environments)\n * @return {Promise<string>} All translated text content in DOM order\n */\nexport const getAllText = async (element, options = {}) => {\n if (!element) return '';\n\n const opts = {\n trim: true,\n normalizeWhitespace: false,\n skipComponentReady: false,\n ...options,\n };\n\n const nodesToSkip = new Set(['STYLE', 'SCRIPT', 'NOSCRIPT', 'TEMPLATE', '#comment']);\n const processedNodes = new WeakSet();\n let result = '';\n\n async function processNode(node) {\n if (processedNodes.has(node) || nodesToSkip.has(node.nodeName)) return;\n\n processedNodes.add(node);\n\n // Handle text nodes\n if (node.nodeType === Node.TEXT_NODE) {\n const text = opts.trim ? node.textContent.trim() : node.textContent;\n\n if (text) {\n // Add space between adjacent text nodes if needed\n if (result && !result.endsWith(' ') && !text.startsWith(' ')) {\n result += ' ';\n }\n\n // Translate the text\n result += opts.skipComponentReady ? window.TectonElements?.loc(text) : loc(text);\n }\n return;\n }\n\n // Handle element nodes\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Wait for Stencil component if needed\n const isStencilComponent = node.nodeName.startsWith('Q2-') && typeof node.componentOnReady === 'function';\n\n if (isStencilComponent && !opts.skipComponentReady) {\n await node.componentOnReady();\n }\n\n // Process children in light DOM\n for (const child of node.childNodes) {\n await processNode(child);\n }\n\n // Process shadow DOM if present\n if (node.shadowRoot) {\n for (const shadowChild of node.shadowRoot.childNodes) {\n await processNode(shadowChild);\n }\n }\n\n // Handle slot elements with assigned nodes\n if (node.nodeName === 'SLOT' && typeof node.assignedNodes === 'function') {\n const assignedNodes = node.assignedNodes();\n\n if (assignedNodes.length > 0) {\n for (const assigned of assignedNodes) {\n if (!processedNodes.has(assigned)) {\n await processNode(assigned);\n }\n }\n } else {\n // Process slot fallback content\n for (const fallback of node.childNodes) {\n if (!processedNodes.has(fallback)) {\n await processNode(fallback);\n }\n }\n }\n }\n }\n }\n\n await processNode(element);\n\n // Apply final formatting\n if (opts.trim) {\n result = result.trim();\n }\n\n if (opts.normalizeWhitespace) {\n result = result.replace(/\\s+/g, ' ');\n }\n\n return result;\n};\n"]}
@@ -12,6 +12,37 @@ const debounce = (fn, delay = 300) => {
12
12
  function isMobile() {
13
13
  return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(navigator.userAgent);
14
14
  }
15
+ function isInScrollableContainer(element) {
16
+ let current = element;
17
+ while (current && current !== document.body && current !== document.documentElement) {
18
+ // Move to parent
19
+ if (current.parentElement) {
20
+ current = current.parentElement;
21
+ }
22
+ else {
23
+ // Try to cross shadow DOM boundary
24
+ const root = current.getRootNode();
25
+ if (root && root.host) {
26
+ current = root.host;
27
+ }
28
+ else {
29
+ break;
30
+ }
31
+ }
32
+ const style = window.getComputedStyle(current);
33
+ const hasScrollableOverflow = style.overflow === 'scroll' ||
34
+ style.overflow === 'auto' ||
35
+ style.overflowX === 'scroll' ||
36
+ style.overflowX === 'auto' ||
37
+ style.overflowY === 'scroll' ||
38
+ style.overflowY === 'auto';
39
+ const hasOverflowingContent = current.scrollHeight > current.clientHeight || current.scrollWidth > current.clientWidth;
40
+ if (hasScrollableOverflow && hasOverflowingContent) {
41
+ return true;
42
+ }
43
+ }
44
+ return false;
45
+ }
15
46
  function isRelatedTargetWithinHost(event, element) {
16
47
  return event.relatedTarget !== element && !element.contains(event.relatedTarget);
17
48
  }
@@ -271,6 +302,6 @@ const getAllText = async (element, options = {}) => {
271
302
  return result;
272
303
  };
273
304
 
274
- export { handleRenamedProp as a, isTouchDevice as b, createGuid as c, isMobile as d, resizeIframe as e, hasSlotContent as f, debounce as g, handleAriaLabel as h, isEventFromElement as i, renderMessages as j, handleDeprecationWarning as k, loc as l, handleColor as m, nextPaint as n, overrideFocus as o, getAriaValueFromProp as p, isFirefox as q, renderLabel as r, setMessageHeight as s, getAllText as t, isVisible as u, isRelatedTargetWithinHost as v, waitForNextPaint as w };
305
+ export { handleRenamedProp as a, isTouchDevice as b, createGuid as c, isMobile as d, resizeIframe as e, hasSlotContent as f, debounce as g, handleAriaLabel as h, isEventFromElement as i, renderMessages as j, handleDeprecationWarning as k, loc as l, handleColor as m, nextPaint as n, overrideFocus as o, getAriaValueFromProp as p, isFirefox as q, renderLabel as r, setMessageHeight as s, getAllText as t, isVisible as u, isInScrollableContainer as v, waitForNextPaint as w, isRelatedTargetWithinHost as x };
275
306
 
276
307
  //# sourceMappingURL=index2.js.map