q2-tecton-elements 1.52.2 → 1.54.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 (361) hide show
  1. package/dist/bundle-report.json +43422 -0
  2. package/dist/cjs/{action-sheet-d32c41ae.js → action-sheet-8254c0fd.js} +6 -3
  3. package/dist/cjs/action-sheet-8254c0fd.js.map +1 -0
  4. package/dist/cjs/click-elsewhere.cjs.entry.js +96 -0
  5. package/dist/cjs/click-elsewhere.cjs.entry.js.map +1 -0
  6. package/dist/cjs/{index-07285783.js → index-76f63767.js} +1 -21
  7. package/dist/cjs/index-76f63767.js.map +1 -0
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/q2-action-group.cjs.entry.js +38 -17
  10. package/dist/cjs/q2-action-group.cjs.entry.js.map +1 -1
  11. package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-avatar.cjs.entry.js.map +1 -1
  14. package/dist/cjs/q2-badge_7.cjs.entry.js +52 -18
  15. package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
  16. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-detail.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-dropdown-item.cjs.entry.js +17 -16
  28. package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
  29. package/dist/cjs/q2-dropdown.cjs.entry.js +48 -99
  30. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  31. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-file-picker.cjs.entry.js +236 -0
  33. package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -0
  34. package/dist/cjs/q2-item_3.cjs.entry.js +251 -0
  35. package/dist/cjs/q2-item_3.cjs.entry.js.map +1 -0
  36. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
  40. package/dist/cjs/{q2-option-list.cjs.entry.js → q2-option-list_2.cjs.entry.js} +355 -21
  41. package/dist/cjs/q2-option-list_2.cjs.entry.js.map +1 -0
  42. package/dist/cjs/q2-option.cjs.entry.js +18 -4
  43. package/dist/cjs/q2-option.cjs.entry.js.map +1 -1
  44. package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
  45. package/dist/cjs/q2-pill.cjs.entry.js +14 -9
  46. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  47. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  48. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  49. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  50. package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
  51. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  52. package/dist/cjs/q2-select.cjs.entry.js +8 -5
  53. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  54. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  55. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  56. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  57. package/dist/cjs/q2-tag.cjs.entry.js +9 -4
  58. package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
  59. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  60. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  61. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  62. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  63. package/dist/collection/collection-manifest.json +1 -0
  64. package/dist/collection/components/q2-action-group/q2-action-group.css +25 -8
  65. package/dist/collection/components/q2-action-group/q2-action-group.js +55 -33
  66. package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
  67. package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js +142 -6
  68. package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js.map +1 -1
  69. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js +126 -62
  70. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -1
  71. package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js +1 -1
  72. package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -1
  73. package/dist/collection/components/q2-avatar/q2-avatar.css +5 -0
  74. package/dist/collection/components/q2-btn/q2-btn.css +74 -0
  75. package/dist/collection/components/q2-btn/q2-btn.js +50 -16
  76. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  77. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js +29 -0
  78. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
  79. package/dist/collection/components/q2-dropdown/q2-dropdown.js +83 -103
  80. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  81. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +188 -24
  82. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
  83. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.css +1 -1
  84. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js +54 -16
  85. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  86. package/dist/collection/components/q2-file-picker/q2-file-picker.css +307 -0
  87. package/dist/collection/components/q2-file-picker/q2-file-picker.js +426 -0
  88. package/dist/collection/components/q2-file-picker/q2-file-picker.js.map +1 -0
  89. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.e2e.js +11 -0
  90. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.e2e.js.map +1 -0
  91. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.spec.js +435 -0
  92. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.spec.js.map +1 -0
  93. package/dist/collection/components/q2-item/q2-item.css +3 -0
  94. package/dist/collection/components/q2-link/q2-link.js +26 -7
  95. package/dist/collection/components/q2-link/q2-link.js.map +1 -1
  96. package/dist/collection/components/q2-link/test/q2-link-test.e2e.js +20 -118
  97. package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -1
  98. package/dist/collection/components/q2-link/test/q2-link-test.spec.js +193 -0
  99. package/dist/collection/components/q2-link/test/q2-link-test.spec.js.map +1 -0
  100. package/dist/collection/components/q2-list/q2-list.css +6 -0
  101. package/dist/collection/components/q2-loading/q2-loading.js +1 -1
  102. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  103. package/dist/collection/components/q2-option/q2-option.css +9 -3
  104. package/dist/collection/components/q2-option/q2-option.js +37 -4
  105. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  106. package/dist/collection/components/q2-option/test/q2-option-test.spec.js +22 -0
  107. package/dist/collection/components/q2-option/test/q2-option-test.spec.js.map +1 -1
  108. package/dist/collection/components/q2-option-list/q2-option-list.js +56 -29
  109. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  110. package/dist/collection/components/q2-option-list/test/q2-option-list.spec.js +489 -0
  111. package/dist/collection/components/q2-option-list/test/q2-option-list.spec.js.map +1 -0
  112. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  113. package/dist/collection/components/q2-pill/q2-pill.js +12 -7
  114. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  115. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +109 -1
  116. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
  117. package/dist/collection/components/q2-popover/q2-popover.js +1 -1
  118. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  119. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  120. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  121. package/dist/collection/components/q2-section/q2-section.js +2 -2
  122. package/dist/collection/components/q2-select/q2-select.js +7 -4
  123. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  124. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +1 -14
  125. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
  126. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  127. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  128. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  129. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  130. package/dist/collection/components/q2-tag/q2-tag.js +7 -2
  131. package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
  132. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +1 -1
  133. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
  134. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  135. package/dist/collection/utils/action-sheet.js +5 -2
  136. package/dist/collection/utils/action-sheet.js.map +1 -1
  137. package/dist/collection/utils/helpers.js +29 -3
  138. package/dist/collection/utils/helpers.js.map +1 -1
  139. package/dist/collection/utils/test/action-sheet-test.e2e.js +34 -6
  140. package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -1
  141. package/dist/components/action-sheet.js +6 -3
  142. package/dist/components/action-sheet.js.map +1 -1
  143. package/dist/components/index.js +2 -0
  144. package/dist/components/index.js.map +1 -1
  145. package/dist/components/index2.js +1 -20
  146. package/dist/components/index2.js.map +1 -1
  147. package/dist/components/q2-action-group.js +41 -19
  148. package/dist/components/q2-action-group.js.map +1 -1
  149. package/dist/components/q2-avatar2.js +1 -1
  150. package/dist/components/q2-avatar2.js.map +1 -1
  151. package/dist/components/q2-btn2.js +50 -16
  152. package/dist/components/q2-btn2.js.map +1 -1
  153. package/dist/components/q2-dropdown-item2.js +19 -17
  154. package/dist/components/q2-dropdown-item2.js.map +1 -1
  155. package/dist/components/q2-dropdown.js +67 -110
  156. package/dist/components/q2-dropdown.js.map +1 -1
  157. package/dist/components/q2-file-picker.d.ts +11 -0
  158. package/dist/components/q2-file-picker.js +301 -0
  159. package/dist/components/q2-file-picker.js.map +1 -0
  160. package/dist/components/q2-item.js +1 -130
  161. package/dist/components/q2-item.js.map +1 -1
  162. package/dist/{esm/q2-item.entry.js → components/q2-item2.js} +29 -11
  163. package/dist/components/q2-item2.js.map +1 -0
  164. package/dist/components/q2-link.js +1 -86
  165. package/dist/components/q2-link.js.map +1 -1
  166. package/dist/{esm/q2-link.entry.js → components/q2-link2.js} +42 -10
  167. package/dist/components/q2-link2.js.map +1 -0
  168. package/dist/components/q2-list.js +1 -94
  169. package/dist/components/q2-list.js.map +1 -1
  170. package/dist/{esm/q2-list.entry.js → components/q2-list2.js} +30 -11
  171. package/dist/components/q2-list2.js.map +1 -0
  172. package/dist/components/q2-loading2.js.map +1 -1
  173. package/dist/components/q2-option-list2.js +44 -19
  174. package/dist/components/q2-option-list2.js.map +1 -1
  175. package/dist/components/q2-option2.js +20 -4
  176. package/dist/components/q2-option2.js.map +1 -1
  177. package/dist/components/q2-pagination.js +3 -3
  178. package/dist/components/q2-pill.js +13 -8
  179. package/dist/components/q2-pill.js.map +1 -1
  180. package/dist/components/q2-popover2.js +1 -1
  181. package/dist/components/q2-popover2.js.map +1 -1
  182. package/dist/components/q2-relative-time.js +1 -1
  183. package/dist/components/q2-resize-observer2.js +1 -1
  184. package/dist/components/q2-section.js +2 -2
  185. package/dist/components/q2-select2.js +8 -5
  186. package/dist/components/q2-select2.js.map +1 -1
  187. package/dist/components/q2-stepper-vertical.js +1 -1
  188. package/dist/components/q2-stepper.js +1 -1
  189. package/dist/components/q2-tab-container.js +1 -1
  190. package/dist/components/q2-tab-pane.js +1 -1
  191. package/dist/components/q2-tag.js +8 -3
  192. package/dist/components/q2-tag.js.map +1 -1
  193. package/dist/components/tecton-tab-pane.js +2 -2
  194. package/dist/esm/{action-sheet-e64cb6f7.js → action-sheet-1e24cb38.js} +7 -4
  195. package/dist/esm/action-sheet-1e24cb38.js.map +1 -0
  196. package/dist/esm/click-elsewhere.entry.js +92 -0
  197. package/dist/esm/click-elsewhere.entry.js.map +1 -0
  198. package/dist/esm/{index-d18e2a20.js → index-504f1a9e.js} +2 -21
  199. package/dist/esm/index-504f1a9e.js.map +1 -0
  200. package/dist/esm/loader.js +1 -1
  201. package/dist/esm/q2-action-group.entry.js +39 -18
  202. package/dist/esm/q2-action-group.entry.js.map +1 -1
  203. package/dist/esm/q2-action-sheet.entry.js +1 -1
  204. package/dist/esm/q2-avatar.entry.js +1 -1
  205. package/dist/esm/q2-avatar.entry.js.map +1 -1
  206. package/dist/esm/q2-badge_7.entry.js +52 -18
  207. package/dist/esm/q2-badge_7.entry.js.map +1 -1
  208. package/dist/esm/q2-calendar.entry.js +1 -1
  209. package/dist/esm/q2-card.entry.js +1 -1
  210. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  211. package/dist/esm/q2-carousel.entry.js +1 -1
  212. package/dist/esm/q2-chart-area.entry.js +1 -1
  213. package/dist/esm/q2-chart-bar.entry.js +1 -1
  214. package/dist/esm/q2-chart-donut.entry.js +1 -1
  215. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  216. package/dist/esm/q2-checkbox.entry.js +1 -1
  217. package/dist/esm/q2-data-table.entry.js +1 -1
  218. package/dist/esm/q2-detail.entry.js +1 -1
  219. package/dist/esm/q2-dropdown-item.entry.js +18 -17
  220. package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
  221. package/dist/esm/q2-dropdown.entry.js +48 -99
  222. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  223. package/dist/esm/q2-editable-field.entry.js +1 -1
  224. package/dist/esm/q2-file-picker.entry.js +232 -0
  225. package/dist/esm/q2-file-picker.entry.js.map +1 -0
  226. package/dist/esm/q2-item_3.entry.js +245 -0
  227. package/dist/esm/q2-item_3.entry.js.map +1 -0
  228. package/dist/esm/q2-loc.entry.js +1 -1
  229. package/dist/esm/q2-message.entry.js +1 -1
  230. package/dist/esm/q2-month-picker.entry.js +1 -1
  231. package/dist/esm/q2-optgroup.entry.js +1 -1
  232. package/dist/esm/{q2-option-list.entry.js → q2-option-list_2.entry.js} +355 -22
  233. package/dist/esm/q2-option-list_2.entry.js.map +1 -0
  234. package/dist/esm/q2-option.entry.js +18 -4
  235. package/dist/esm/q2-option.entry.js.map +1 -1
  236. package/dist/esm/q2-pagination.entry.js +4 -4
  237. package/dist/esm/q2-pill.entry.js +14 -9
  238. package/dist/esm/q2-pill.entry.js.map +1 -1
  239. package/dist/esm/q2-radio-group.entry.js +1 -1
  240. package/dist/esm/q2-radio.entry.js +1 -1
  241. package/dist/esm/q2-relative-time.entry.js +2 -2
  242. package/dist/esm/q2-resize-observer.entry.js +1 -1
  243. package/dist/esm/q2-section.entry.js +3 -3
  244. package/dist/esm/q2-select.entry.js +8 -5
  245. package/dist/esm/q2-select.entry.js.map +1 -1
  246. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  247. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  248. package/dist/esm/q2-stepper.entry.js +2 -2
  249. package/dist/esm/q2-tag.entry.js +9 -4
  250. package/dist/esm/q2-tag.entry.js.map +1 -1
  251. package/dist/esm/q2-tecton-elements.js +1 -1
  252. package/dist/esm/q2-textarea.entry.js +1 -1
  253. package/dist/esm/q2-tooltip.entry.js +1 -1
  254. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  255. package/dist/q2-tecton-elements/action-sheet-1e24cb38.js +80 -0
  256. package/dist/q2-tecton-elements/action-sheet-1e24cb38.js.map +1 -0
  257. package/dist/q2-tecton-elements/click-elsewhere.entry.js +90 -0
  258. package/dist/q2-tecton-elements/click-elsewhere.entry.js.map +1 -0
  259. package/dist/q2-tecton-elements/{index-d18e2a20.js → index-504f1a9e.js} +51 -69
  260. package/dist/q2-tecton-elements/index-504f1a9e.js.map +1 -0
  261. package/dist/q2-tecton-elements/q2-action-group.entry.js +57 -33
  262. package/dist/q2-tecton-elements/q2-action-group.entry.js.map +1 -1
  263. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +1 -1
  264. package/dist/q2-tecton-elements/q2-avatar.entry.js +1 -1
  265. package/dist/q2-tecton-elements/q2-avatar.entry.js.map +1 -1
  266. package/dist/q2-tecton-elements/q2-badge_7.entry.js +222 -181
  267. package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
  268. package/dist/q2-tecton-elements/q2-calendar.entry.js +1 -1
  269. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  270. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +1 -1
  271. package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
  272. package/dist/q2-tecton-elements/q2-chart-area.entry.js +1 -1
  273. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +1 -1
  274. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +1 -1
  275. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +1 -1
  276. package/dist/q2-tecton-elements/q2-checkbox.entry.js +1 -1
  277. package/dist/q2-tecton-elements/q2-data-table.entry.js +1 -1
  278. package/dist/q2-tecton-elements/q2-detail.entry.js +1 -1
  279. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +34 -34
  280. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js.map +1 -1
  281. package/dist/q2-tecton-elements/q2-dropdown.entry.js +86 -137
  282. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  283. package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
  284. package/dist/q2-tecton-elements/q2-file-picker.entry.js +339 -0
  285. package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -0
  286. package/dist/q2-tecton-elements/q2-item_3.entry.js +332 -0
  287. package/dist/q2-tecton-elements/q2-item_3.entry.js.map +1 -0
  288. package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
  289. package/dist/q2-tecton-elements/q2-message.entry.js +1 -1
  290. package/dist/q2-tecton-elements/q2-month-picker.entry.js +1 -1
  291. package/dist/q2-tecton-elements/q2-optgroup.entry.js +1 -1
  292. package/dist/q2-tecton-elements/q2-option-list_2.entry.js +902 -0
  293. package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +1 -0
  294. package/dist/q2-tecton-elements/q2-option.entry.js +31 -21
  295. package/dist/q2-tecton-elements/q2-option.entry.js.map +1 -1
  296. package/dist/q2-tecton-elements/q2-pagination.entry.js +34 -34
  297. package/dist/q2-tecton-elements/q2-pill.entry.js +24 -20
  298. package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -1
  299. package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
  300. package/dist/q2-tecton-elements/q2-radio.entry.js +1 -1
  301. package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
  302. package/dist/q2-tecton-elements/q2-resize-observer.entry.js +1 -1
  303. package/dist/q2-tecton-elements/q2-section.entry.js +19 -19
  304. package/dist/q2-tecton-elements/q2-select.entry.js +21 -18
  305. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  306. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +1 -1
  307. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +37 -37
  308. package/dist/q2-tecton-elements/q2-stepper.entry.js +29 -29
  309. package/dist/q2-tecton-elements/q2-tag.entry.js +15 -11
  310. package/dist/q2-tecton-elements/q2-tag.entry.js.map +1 -1
  311. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  312. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  313. package/dist/q2-tecton-elements/q2-textarea.entry.js +1 -1
  314. package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
  315. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
  316. package/dist/types/components/q2-action-group/q2-action-group.d.ts +19 -11
  317. package/dist/types/components/q2-btn/q2-btn.d.ts +8 -3
  318. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +18 -9
  319. package/dist/types/components/q2-dropdown-item/q2-dropdown-item.d.ts +14 -1
  320. package/dist/types/components/q2-file-picker/q2-file-picker.d.ts +98 -0
  321. package/dist/types/components/q2-link/q2-link.d.ts +8 -6
  322. package/dist/types/components/q2-loading/q2-loading.d.ts +2 -2
  323. package/dist/types/components/q2-option/q2-option.d.ts +10 -1
  324. package/dist/types/components/q2-option-list/q2-option-list.d.ts +9 -8
  325. package/dist/types/components/q2-pill/q2-pill.d.ts +2 -2
  326. package/dist/types/components.d.ts +192 -28
  327. package/dist/types/util.d.ts +1 -0
  328. package/dist/types/utils/helpers.d.ts +1 -1
  329. package/package.json +4 -3
  330. package/dist/cjs/action-sheet-d32c41ae.js.map +0 -1
  331. package/dist/cjs/click-elsewhere_2.cjs.entry.js +0 -406
  332. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +0 -1
  333. package/dist/cjs/index-07285783.js.map +0 -1
  334. package/dist/cjs/q2-item.cjs.entry.js +0 -120
  335. package/dist/cjs/q2-item.cjs.entry.js.map +0 -1
  336. package/dist/cjs/q2-link.cjs.entry.js +0 -64
  337. package/dist/cjs/q2-link.cjs.entry.js.map +0 -1
  338. package/dist/cjs/q2-list.cjs.entry.js +0 -83
  339. package/dist/cjs/q2-list.cjs.entry.js.map +0 -1
  340. package/dist/cjs/q2-option-list.cjs.entry.js.map +0 -1
  341. package/dist/esm/action-sheet-e64cb6f7.js.map +0 -1
  342. package/dist/esm/click-elsewhere_2.entry.js +0 -401
  343. package/dist/esm/click-elsewhere_2.entry.js.map +0 -1
  344. package/dist/esm/index-d18e2a20.js.map +0 -1
  345. package/dist/esm/q2-item.entry.js.map +0 -1
  346. package/dist/esm/q2-link.entry.js.map +0 -1
  347. package/dist/esm/q2-list.entry.js.map +0 -1
  348. package/dist/esm/q2-option-list.entry.js.map +0 -1
  349. package/dist/q2-tecton-elements/action-sheet-e64cb6f7.js +0 -77
  350. package/dist/q2-tecton-elements/action-sheet-e64cb6f7.js.map +0 -1
  351. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js +0 -398
  352. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js.map +0 -1
  353. package/dist/q2-tecton-elements/index-d18e2a20.js.map +0 -1
  354. package/dist/q2-tecton-elements/q2-item.entry.js +0 -158
  355. package/dist/q2-tecton-elements/q2-item.entry.js.map +0 -1
  356. package/dist/q2-tecton-elements/q2-link.entry.js +0 -83
  357. package/dist/q2-tecton-elements/q2-link.entry.js.map +0 -1
  358. package/dist/q2-tecton-elements/q2-list.entry.js +0 -100
  359. package/dist/q2-tecton-elements/q2-list.entry.js.map +0 -1
  360. package/dist/q2-tecton-elements/q2-option-list.entry.js +0 -585
  361. package/dist/q2-tecton-elements/q2-option-list.entry.js.map +0 -1
@@ -1,585 +0,0 @@
1
- import { r as t, c as e, h as s, H as i, g as n } from "./index-7a5365e2.js";
2
-
3
- import { n as o, l as h, o as a, i as c, w as r, x as l } from "./index-d18e2a20.js";
4
-
5
- function sanitizeRegexString(t) {
6
- return t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
7
- }
8
-
9
- const d = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{position:relative;width:100%;display:block;line-height:var(--tct-option-list-line-height, var(--t-option-list-line-height, var(--app-line-height, 1.428571429em)))}.content{text-align:start}:host([is-sizeable]) .content{display:block;height:auto}";
10
-
11
- const f = d;
12
-
13
- const p = class {
14
- constructor(s) {
15
- t(this, s);
16
- this.change = e(this, "change", 7);
17
- this.popoverState = e(this, "popoverState", 7);
18
- this.ready = e(this, "ready", 3);
19
- this.keyStore = {
20
- queue: [],
21
- lastPressedAt: new Date
22
- };
23
- this.scheduledAfterRender = [];
24
- this.clickHandler = t => {
25
- const e = t.target;
26
- const s = e.closest("q2-option");
27
- this.selectOption(s);
28
- if (this.multiple) return;
29
- this.popoverState.emit({
30
- open: false,
31
- action: "select"
32
- });
33
- };
34
- /* tslint:disable:cyclomatic-complexity */ this.externalKeydownHandler = t => {
35
- t.stopPropagation();
36
- const {activeIndex: e, customSearch: s, allOptions: i} = this;
37
- const {key: n} = t;
38
- let h;
39
- switch (n) {
40
- case " ":
41
- if (this.searchString) {
42
- if (s) break;
43
- this.searchOptions(n, true);
44
- break;
45
- } else if (this.type === "menu") {
46
- this.activeIndex = 0;
47
- this.openDropdownWithActiveElement(0);
48
- } else {
49
- this.setDefaultActiveElement();
50
- o((() => this.popoverState.emit({
51
- open: true,
52
- action: "open"
53
- })));
54
- }
55
- break;
56
-
57
- case "Enter":
58
- if (this.type === "menu") {
59
- this.activeIndex = 0;
60
- this.openDropdownWithActiveElement(0);
61
- } else {
62
- this.setDefaultActiveElement();
63
- o((() => this.popoverState.emit({
64
- open: true,
65
- action: "open"
66
- })));
67
- }
68
- break;
69
-
70
- case "ArrowUp":
71
- t.preventDefault();
72
- h = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(-1);
73
- if (h === -1) break;
74
- this.openDropdownWithActiveElement(h);
75
- break;
76
-
77
- case "ArrowDown":
78
- t.preventDefault();
79
- h = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(1);
80
- if (h === -1) break;
81
- this.openDropdownWithActiveElement(h);
82
- break;
83
-
84
- case "Home":
85
- t.preventDefault();
86
- this.openDropdownWithActiveElement(0);
87
- break;
88
-
89
- case "End":
90
- t.preventDefault();
91
- this.openDropdownWithActiveElement(i.length - 1);
92
- break;
93
-
94
- case "PageUp":
95
- t.preventDefault();
96
- this.openDropdownWithActiveElement(Math.max((e || 0) - 10, 0));
97
- break;
98
-
99
- case "PageDown":
100
- t.preventDefault();
101
- this.openDropdownWithActiveElement(Math.min((e || 0) + 10, i.length - 1));
102
- break;
103
-
104
- case "Tab":
105
- this.popoverState.emit({
106
- open: false,
107
- action: "close"
108
- });
109
- break;
110
-
111
- case "Esc":
112
- case "Escape":
113
- if (this.noSelect) this.setActiveElement(null);
114
- this.popoverState.emit({
115
- open: false,
116
- action: "close"
117
- });
118
- break;
119
-
120
- default:
121
- if (s) break;
122
- if (!n.match(/^[\w]$/)) break;
123
- this.searchOptions(n, true);
124
- break;
125
- }
126
- };
127
- /* tslint:enable:cyclomatic-complexity */ this.focusoutHandler = t => {
128
- const {relatedTarget: e} = t;
129
- const s = this.allOptions.includes(e);
130
- const i = !s && this.hostElement.contains(e);
131
- if (s || i) {
132
- t.stopPropagation();
133
- }
134
- };
135
- this.internalKeydownHandler = t => {
136
- t.stopPropagation();
137
- const {activeIndex: e, customSearch: s, allOptions: i, allVisibleOptions: n, multiple: o} = this;
138
- const {key: h, shiftKey: a} = t;
139
- let c;
140
- switch (h) {
141
- case " ":
142
- if (this.searchString && !this.multiple) {
143
- if (s) break;
144
- this.searchOptions(h, false);
145
- break;
146
- }
147
- t.preventDefault();
148
- c = i.find((t => t.active));
149
- if (!c || c.disabled) break;
150
- this.selectOption(c);
151
- if (o) break;
152
- this.popoverState.emit({
153
- open: false,
154
- action: "select"
155
- });
156
- break;
157
-
158
- case "Enter":
159
- t.preventDefault();
160
- c = i.find((t => t.active));
161
- if (!c || c.disabled) break;
162
- this.selectOption(c);
163
- if (o) break;
164
- this.popoverState.emit({
165
- open: false,
166
- action: "select"
167
- });
168
- break;
169
-
170
- case "ArrowUp":
171
- t.preventDefault();
172
- const r = n[0].active;
173
- if (r) break;
174
- if (e === undefined) {
175
- this.setDefaultActiveElement();
176
- break;
177
- } else {
178
- const t = this.getNextVisibleIndex(-1);
179
- if (t === -1) break;
180
- this.adjustActiveOptionAndScroll(t - e);
181
- break;
182
- }
183
-
184
- case "ArrowDown":
185
- t.preventDefault();
186
- const l = n[n.length - 1].active;
187
- if (l) break;
188
- if (e === undefined) {
189
- this.setDefaultActiveElement();
190
- break;
191
- } else {
192
- const t = this.getNextVisibleIndex(1);
193
- if (t === -1) break;
194
- this.adjustActiveOptionAndScroll(t - e);
195
- break;
196
- }
197
-
198
- case "Home":
199
- t.preventDefault();
200
- this.openDropdownWithActiveElement(0);
201
- break;
202
-
203
- case "End":
204
- t.preventDefault();
205
- this.openDropdownWithActiveElement(i.length - 1);
206
- break;
207
-
208
- case "PageUp":
209
- t.preventDefault();
210
- this.openDropdownWithActiveElement(Math.max(e - 10, 0));
211
- break;
212
-
213
- case "PageDown":
214
- t.preventDefault();
215
- this.openDropdownWithActiveElement(Math.min(e + 10, i.length - 1));
216
- break;
217
-
218
- case "Tab":
219
- if (a) break;
220
- if (this.multiple && this.type === "listbox") break;
221
- if (this.type === "menu") {
222
- this.popoverState.emit({
223
- open: false,
224
- action: "close"
225
- });
226
- break;
227
- }
228
- c = i.find((t => t.active));
229
- if (!c || c.disabled) return;
230
- this.selectOption(c);
231
- break;
232
-
233
- case "Esc":
234
- case "Escape":
235
- if (this.noSelect) this.setActiveElement(null);
236
- this.popoverState.emit({
237
- open: false,
238
- action: "close"
239
- });
240
- break;
241
-
242
- default:
243
- if (s) break;
244
- if (!h.match(/^[\w]$/)) break;
245
- this.searchOptions(h, false);
246
- break;
247
- }
248
- };
249
- this.searchAndFocus = (t, e) => {
250
- // pseudo search in non-searchable select
251
- const reorder = () => {
252
- this.pivotIndex = this.pivotIndex === undefined ? 0 : (this.activeIndex || 0) + 1;
253
- const t = this.allOptions.map(((t, e) => ({
254
- element: t,
255
- index: e
256
- })));
257
- return [ ...t.slice(this.pivotIndex), ...t.slice(0, this.pivotIndex) ];
258
- };
259
- const buildQueue = () => {
260
- const e = new Date;
261
- if (e.getTime() - this.keyStore.lastPressedAt.getTime() > 1e3) {
262
- // empty stored keys if delay > 1s
263
- this.keyStore.queue.length = 0;
264
- }
265
- if (this.keyStore.queue.length !== 1 || this.keyStore.queue[0] !== t) {
266
- this.keyStore.queue.push(t);
267
- }
268
- this.keyStore.lastPressedAt = e;
269
- };
270
- const searchIndex = t => {
271
- const e = this.keyStore.queue.join("");
272
- const s = sanitizeRegexString(e);
273
- return t.find((t => !t.element.disabled && t.element.display && (t.element.display.match(new RegExp(`^${s}`, "i")) || t.element.display.replace(/\s/g, "").match(new RegExp(`^${s}`, "i")))));
274
- };
275
- const setFocus = ({index: t}) => {
276
- if (this.multiple) {
277
- // multiple: should open to make sure that which options are selected
278
- this.openDropdownWithActiveElement(t);
279
- } else {
280
- this.activeIndex = t;
281
- if (e) {
282
- this.selectOption(this.allOptions[t]);
283
- this.popoverState.emit({
284
- open: false,
285
- action: "select"
286
- });
287
- } else this.setActiveElement(t);
288
- }
289
- };
290
- buildQueue();
291
- const s = searchIndex(reorder());
292
- if (s) {
293
- setFocus(s);
294
- }
295
- };
296
- this.hasOptions = undefined;
297
- this.align = undefined;
298
- this.customSearch = undefined;
299
- this.disabled = undefined;
300
- this.label = h("tecton.element.optionList.label");
301
- this.multiple = undefined;
302
- this.noSelect = undefined;
303
- this.selectedOptions = [];
304
- this.showSelected = undefined;
305
- this.type = "listbox";
306
- }
307
- // #endregion
308
- // #region Component Lifecycle Events
309
- componentWillLoad() {
310
- this.hasOptions = !!this.hostElement.querySelectorAll("q2-option").length;
311
- }
312
- componentDidLoad() {
313
- a(this.hostElement);
314
- this.checkOptions();
315
- this.selectedOptionsUpdated();
316
- this.ready.emit();
317
- }
318
- componentDidRender() {
319
- this.scheduledAfterRender.forEach((t => t()));
320
- this.scheduledAfterRender = [];
321
- }
322
- // #endregion
323
- // #region Listeners
324
- handleClick(t) {
325
- t.stopPropagation();
326
- }
327
- delegateFocus(t) {
328
- if (!c(t, this.hostElement)) return;
329
- this.popoverState.emit({
330
- open: true,
331
- action: "open"
332
- });
333
- const {activeIndex: e} = this;
334
- if (typeof e === "number" && e > -1) {
335
- this.setActiveOption();
336
- this.setFocusedOption();
337
- } else {
338
- this.setDefaultActiveElement();
339
- }
340
- }
341
- // #endregion
342
- // #region Public Methods API
343
- async getContents() {
344
- return this.allContents;
345
- }
346
- async getOptions() {
347
- return this.allOptions;
348
- }
349
- async handleExternalKeydown(t) {
350
- this.externalKeydownHandler(t);
351
- }
352
- async setActiveElement(t) {
353
- this.activeIndex = t;
354
- this.setActiveOption();
355
- this.setFocusedOption();
356
- }
357
- async setDefaultActiveElement() {
358
- this.activeIndex = this.getDefaultActiveIndex();
359
- this.setActiveOption();
360
- this.setFocusedOption();
361
- }
362
- // #endregion
363
- // #region Watchers
364
- selectedOptionsUpdated() {
365
- if (this.multiple) {
366
- this.updateMultipleOptionAttrs();
367
- } else {
368
- this.updateSingleOptionAttrs();
369
- }
370
- }
371
- showSelectedUpdated(t) {
372
- if (t && this.selectedOptions.length === 0) {
373
- this.showSelected = false;
374
- return;
375
- }
376
- this.allOptions.forEach((e => e._multiSelectHidden = t ? !e.selected : false));
377
- }
378
- // #endregion
379
- // #region Local Methods
380
- get allContents() {
381
- const t = this.getRootSlot(this.hostElement);
382
- const e = [ "Q2-OPTGROUP", "Q2-OPTION" ];
383
- return t.filter((t => e.includes(t.tagName)));
384
- }
385
- get allOptions() {
386
- const t = this.allContents;
387
- const extractOptions = t => t.reduce(((t, e) => {
388
- if (e.tagName === "Q2-OPTGROUP") {
389
- return [ ...t, ...extractOptions(Array.from(e.children)) ];
390
- } else if (e.tagName === "Q2-OPTION") {
391
- return [ ...t, e ];
392
- } else {
393
- return t;
394
- }
395
- }), []);
396
- return extractOptions(t);
397
- }
398
- get allVisibleOptions() {
399
- return this.allOptions.filter((t => !t.hidden && !t._multiSelectHidden && !t.disabled && !t.disabledGroup));
400
- }
401
- adjustActiveOptionAndScroll(t) {
402
- this.activeIndex += t;
403
- this.setActiveOption();
404
- this.setFocusedOption();
405
- this.scrollToActiveOption();
406
- }
407
- async checkOptions() {
408
- const {type: t} = this;
409
- const e = await this.getOptions();
410
- if (!t) return;
411
- const s = t === "menu" ? "menuitem" : "option";
412
- e.forEach((t => {
413
- t.role = s;
414
- }));
415
- }
416
- focusSelectedSibling(t) {
417
- const {allVisibleOptions: e, allOptions: s} = this;
418
- const i = e.length < 2;
419
- if (i) {
420
- this.showSelected = false;
421
- return;
422
- }
423
- const n = e.indexOf(t);
424
- const o = n ? n - 1 : n + 1;
425
- const h = e[o];
426
- const a = s.indexOf(h);
427
- this.activeIndex = a;
428
- this.setFocusedOption();
429
- this.scheduledAfterRender.push((() => {
430
- t._multiSelectHidden = !t.selected;
431
- }));
432
- }
433
- getDefaultActiveIndex() {
434
- const {allOptions: t} = this;
435
- const e = t.findIndex((t => t.selected));
436
- if (e > -1) return e;
437
- const s = t.findIndex((t => !t.hidden));
438
- if (s > -1) return s;
439
- return 0;
440
- }
441
- getNextVisibleIndex(t) {
442
- const {allVisibleOptions: e, allOptions: s, activeIndex: i} = this;
443
- const n = s[i];
444
- const o = e.indexOf(n);
445
- let h = o + t;
446
- if (h < 0) {
447
- h = e.length - 1;
448
- } else if (h > e.length - 1) {
449
- h = 0;
450
- }
451
- const a = e[h];
452
- return s.indexOf(a);
453
- }
454
- getRootSlot(t) {
455
- var e;
456
- const s = t.querySelector("slot");
457
- const i = (e = s === null || s === void 0 ? void 0 : s.assignedElements()) !== null && e !== void 0 ? e : Array.from(t.children);
458
- const n = !!i.length && i[0].tagName === "SLOT";
459
- if (n) {
460
- return this.getRootSlot(i[0]);
461
- } else {
462
- return i;
463
- }
464
- }
465
- async openDropdownWithActiveElement(t) {
466
- if (this.disabled) return;
467
- this.popoverState.emit({
468
- open: true,
469
- action: "open"
470
- });
471
- await r();
472
- this.activeIndex = t;
473
- this.setActiveOption();
474
- this.setFocusedOption();
475
- this.scrollToActiveOption();
476
- }
477
- resetTimer() {
478
- if (this.searchStringTimer) {
479
- clearTimeout(this.searchStringTimer);
480
- }
481
- this.searchStringTimer = window.setTimeout((() => {
482
- this.searchString = null;
483
- }), 2e3);
484
- }
485
- scrollToActiveOption() {
486
- const t = this.allOptions[this.activeIndex];
487
- t === null || t === void 0 ? void 0 : t.scrollIntoView({
488
- block: "center"
489
- });
490
- }
491
- searchOptions(t, e) {
492
- this.searchString = t;
493
- this.searchAndFocus(t, e);
494
- }
495
- selectOption(t) {
496
- const {multiple: e, noSelect: s, showSelected: i} = this;
497
- if (!t || t.disabled || t.disabledGroup) return;
498
- const n = t.value;
499
- const o = {
500
- value: n,
501
- display: t.display || t.innerText.trim()
502
- };
503
- let h = [];
504
- if (e) {
505
- const {selectedOptions: e} = this;
506
- const s = e.find((t => t.value === n));
507
- if (s) {
508
- h = e.filter((({value: t}) => t !== n));
509
- } else {
510
- h = [ ...e, o ];
511
- }
512
- if (i) this.focusSelectedSibling(t);
513
- } else {
514
- h = [ o ];
515
- }
516
- if (s) this.setActiveElement(null); else this.selectedOptions = h;
517
- this.change.emit({
518
- value: n,
519
- values: h
520
- });
521
- }
522
- setActiveOption() {
523
- const t = this.activeIndex;
524
- this.allOptions.forEach(((e, s) => {
525
- e.active = t === s;
526
- }));
527
- }
528
- setFocusedOption() {
529
- const t = this.allOptions[this.activeIndex];
530
- if (!t) return;
531
- const e = l(t);
532
- if (e) t.focus(); else o((() => t.focus()));
533
- }
534
- updateMultipleOptionAttrs() {
535
- const {allOptions: t, selectedOptions: e} = this;
536
- const s = e.map((({value: t}) => t));
537
- t.forEach((t => {
538
- t.selected = s.includes(t.value);
539
- }));
540
- }
541
- updateSingleOptionAttrs() {
542
- var t;
543
- const {allOptions: e, selectedOptions: s} = this;
544
- const i = ((t = s[0]) === null || t === void 0 ? void 0 : t.value) || undefined;
545
- e.forEach((t => {
546
- t.selected = t.value === i;
547
- }));
548
- }
549
- // #endregion
550
- // #region Render Methods
551
- render() {
552
- return s(i, {
553
- key: "221e3d11f55902cd286a6f69cb1c30ce4cc3cb1c"
554
- }, s("div", {
555
- key: "5e08ad2fd5a1a773976285ad16f2e2ef6e2161be",
556
- class: "content",
557
- ref: t => this.contentElement = t,
558
- onFocusout: this.focusoutHandler
559
- }, s("div", {
560
- key: "537330008c139176aaa19ba997579e61f841fffb",
561
- class: "options",
562
- "aria-label": h("tecton.element.optionList.label", [ this.label ]),
563
- "aria-multiselectable": `${!!this.multiple}`,
564
- role: this.type || "listbox",
565
- onKeyDown: this.internalKeydownHandler,
566
- onClick: this.clickHandler
567
- }, s("slot", {
568
- key: "9204233743b02ead43bbe4f9329973059af24414"
569
- }))));
570
- }
571
- get hostElement() {
572
- return n(this);
573
- }
574
- static get watchers() {
575
- return {
576
- selectedOptions: [ "selectedOptionsUpdated" ],
577
- showSelected: [ "showSelectedUpdated" ]
578
- };
579
- }
580
- };
581
-
582
- p.style = f;
583
-
584
- export { p as q2_option_list };
585
- //# sourceMappingURL=q2-option-list.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["sanitizeRegexString","regexString","replace","q2OptionListCss","Q2OptionListStyle0","Q2OptionList","this","keyStore","queue","lastPressedAt","Date","scheduledAfterRender","clickHandler","event","target","option","closest","selectOption","multiple","popoverState","emit","open","action","externalKeydownHandler","stopPropagation","activeIndex","customSearch","allOptions","key","nextIndex","searchString","searchOptions","type","openDropdownWithActiveElement","setDefaultActiveElement","nextPaint","preventDefault","selectedOptions","length","getDefaultActiveIndex","getNextVisibleIndex","Math","max","min","noSelect","setActiveElement","match","focusoutHandler","relatedTarget","isInQ2OptionList","includes","isInLightDom","hostElement","contains","internalKeydownHandler","allVisibleOptions","shiftKey","newOption","find","element","active","disabled","isFirstVisibleOptionActive","undefined","adjustActiveOptionAndScroll","isLastVisibleOptionActive","searchAndFocus","keyValue","shouldSelect","reorder","pivotIndex","list","map","index","slice","buildQueue","now","getTime","push","searchIndex","keyStr","join","sanitizedKeyStr","v","display","RegExp","setFocus","matched","loc","componentWillLoad","hasOptions","querySelectorAll","componentDidLoad","overrideFocus","checkOptions","selectedOptionsUpdated","ready","componentDidRender","forEach","fn","handleClick","delegateFocus","isEventFromElement","setActiveOption","setFocusedOption","getContents","allContents","getOptions","handleExternalKeydown","updateMultipleOptionAttrs","updateSingleOptionAttrs","showSelectedUpdated","showSelected","_multiSelectHidden","selected","rootSlot","getRootSlot","acceptedTags","filter","tagName","contents","extractOptions","elements","reduce","acc","Array","from","children","hidden","disabledGroup","numToAdd","scrollToActiveOption","options","optionRole","role","focusSelectedSibling","hasNoSiblings","selectedOptionVisibleIndex","indexOf","nextVisibleSiblingIndex","nextVisibleSibling","nextSiblingIndex","firstSelected","findIndex","firstEnabled","direction","activeOption","visibleActiveOptionIndex","nextVisibleOptionIndex","nextVisibleOption","slot","querySelector","assignedElements","_a","hasAnotherSlot","waitForNextPaint","resetTimer","searchStringTimer","clearTimeout","window","setTimeout","scrollIntoView","block","selectedOption","selectedValue","value","valueObject","innerText","trim","values","isAlreadySelected","change","elementIndex","isOptionVisible","isVisible","focus","selectedValues","render","h","Host","class","ref","el","contentElement","onFocusout","label","onKeyDown","onClick"],"sources":["src/utils/sanitize-regex-string.ts","src/components/q2-option-list/q2-option-list.scss?tag=q2-option-list&encapsulation=shadow","src/components/q2-option-list/q2-option-list.tsx"],"sourcesContent":["export default function sanitizeRegexString(regexString: string) {\n return regexString.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n position: relative;\n width: 100%;\n display: block;\n line-height: var-list(var-prefixer(option-list-line-height),--app-line-height, 1.428571429em);\n}\n\n.content {\n text-align: start;\n\n :host([is-sizeable]) & {\n display: block;\n height: auto;\n }\n}\n","import sanitizeRegexString from '@/utils/sanitize-regex-string';\nimport {\n Component,\n Prop,\n h,\n Event,\n State,\n Element,\n ComponentInterface,\n Host,\n EventEmitter,\n Method,\n Watch,\n Listen,\n} from '@stencil/core';\nimport { isEventFromElement, isVisible, loc, nextPaint, overrideFocus, waitForNextPaint } from 'src/utils';\n\nexport interface IOptionValue {\n value: string;\n display?: string;\n}\n\n@Component({ tag: 'q2-option-list', shadow: true, styleUrl: 'q2-option-list.scss' })\nexport class Q2OptionList implements ComponentInterface {\n // #region Own Properties\n\n activeIndex: number;\n contentElement: HTMLElement;\n keyStore: {\n queue: string[];\n lastPressedAt: Date;\n } = {\n queue: [],\n lastPressedAt: new Date(),\n };\n pivotIndex: number;\n scheduledAfterRender: (() => void)[] = [];\n searchString: string;\n searchStringTimer: number;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n hasOptions: boolean;\n\n // #endregion\n // #region Public Property API\n\n @Prop({ reflect: true })\n align: 'left' | 'right';\n\n /** Indicates a custom search is being implemented for the option list. */\n @Prop({ reflect: true })\n customSearch: boolean;\n\n /** Disables the option list. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop()\n label: string = loc('tecton.element.optionList.label');\n\n /**\n * Enables the multi-select ability for the option list.\n * @info\n * Only applicable when options are provided.\n */\n @Prop({ reflect: true })\n multiple: boolean;\n\n /** Disables the logic that handles selecting and focusing an option in the option list. */\n @Prop({ reflect: true })\n noSelect: boolean;\n\n /** A list of the selected options on the element. */\n @Prop({ mutable: true })\n selectedOptions: IOptionValue[] = [];\n\n /** Applies focus to the selected option. */\n @Prop({ reflect: true, mutable: true })\n showSelected: boolean;\n\n /** Translates to the role of the option list */\n @Prop()\n type: 'menu' | 'listbox' = 'listbox';\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when an option is selected or deselected.\n *\n * When the multi-select is enabled, the `value` property will be `undefined` and the `selectedOptions` property\n * will contain the selected option values.\n */\n @Event()\n change: EventEmitter<{ value: string; values: IOptionValue[] }>;\n\n /**\n * Emitted to indicate the intended state of the popover.\n * @private\n */\n @Event()\n popoverState: EventEmitter<{ open: boolean; action: 'close' | 'select' | 'open' }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n ready: EventEmitter<undefined>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.hasOptions = !!this.hostElement.querySelectorAll('q2-option').length;\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n this.checkOptions();\n this.selectedOptionsUpdated();\n this.ready.emit();\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n handleClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.popoverState.emit({ open: true, action: 'open' });\n const { activeIndex } = this;\n if (typeof activeIndex === 'number' && activeIndex > -1) {\n this.setActiveOption();\n this.setFocusedOption();\n } else {\n this.setDefaultActiveElement();\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async getContents(): Promise<(HTMLQ2OptgroupElement | HTMLQ2OptionElement)[]> {\n return this.allContents;\n }\n\n @Method()\n async getOptions(): Promise<HTMLQ2OptionElement[]> {\n return this.allOptions;\n }\n\n @Method()\n async handleExternalKeydown(event: KeyboardEvent) {\n this.externalKeydownHandler(event);\n }\n\n @Method()\n async setActiveElement(index: number) {\n this.activeIndex = index;\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n @Method()\n async setDefaultActiveElement() {\n this.activeIndex = this.getDefaultActiveIndex();\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('selectedOptions')\n selectedOptionsUpdated() {\n if (this.multiple) {\n this.updateMultipleOptionAttrs();\n } else {\n this.updateSingleOptionAttrs();\n }\n }\n\n @Watch('showSelected')\n showSelectedUpdated(showSelected: boolean) {\n if (showSelected && this.selectedOptions.length === 0) {\n this.showSelected = false;\n return;\n }\n this.allOptions.forEach(option => (option._multiSelectHidden = showSelected ? !option.selected : false));\n }\n\n // #endregion\n // #region Local Methods\n\n get allContents(): (HTMLQ2OptgroupElement | HTMLQ2OptionElement)[] {\n const rootSlot = this.getRootSlot(this.hostElement);\n const acceptedTags = ['Q2-OPTGROUP', 'Q2-OPTION'];\n return rootSlot.filter(element => acceptedTags.includes(element.tagName)) as (\n | HTMLQ2OptgroupElement\n | HTMLQ2OptionElement\n )[];\n }\n\n get allOptions(): HTMLQ2OptionElement[] {\n const contents = this.allContents;\n\n const extractOptions = (\n elements: (HTMLQ2OptgroupElement | HTMLQ2OptionElement | Element)[]\n ): HTMLQ2OptionElement[] => {\n return elements.reduce((acc, element) => {\n if (element.tagName === 'Q2-OPTGROUP') {\n return [...acc, ...extractOptions(Array.from(element.children))];\n } else if (element.tagName === 'Q2-OPTION') {\n return [...acc, element];\n } else {\n return acc;\n }\n }, []);\n };\n\n return extractOptions(contents);\n }\n\n get allVisibleOptions(): HTMLQ2OptionElement[] {\n return this.allOptions.filter(\n option => !option.hidden && !option._multiSelectHidden && !option.disabled && !option.disabledGroup\n );\n }\n\n adjustActiveOptionAndScroll(numToAdd: number) {\n this.activeIndex += numToAdd;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n async checkOptions() {\n const { type } = this;\n const options = await this.getOptions();\n if (!type) return;\n const optionRole = type === 'menu' ? 'menuitem' : 'option';\n options.forEach(option => {\n option.role = optionRole;\n });\n }\n\n clickHandler = (event: Event) => {\n const target = event.target as HTMLQ2OptionElement;\n const option = target.closest('q2-option');\n this.selectOption(option);\n if (this.multiple) return;\n this.popoverState.emit({ open: false, action: 'select' });\n };\n\n /* tslint:disable:cyclomatic-complexity */\n externalKeydownHandler = (event: KeyboardEvent) => {\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions } = this;\n const { key } = event;\n\n let nextIndex;\n switch (key) {\n case ' ':\n if (this.searchString) {\n if (customSearch) break;\n\n this.searchOptions(key, true);\n break;\n } else if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'Enter':\n if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max((activeIndex || 0) - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min((activeIndex || 0) + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, true);\n break;\n }\n };\n\n /* tslint:enable:cyclomatic-complexity */\n\n focusoutHandler = (event: FocusEvent) => {\n const { relatedTarget } = event as unknown as { relatedTarget: HTMLQ2OptionElement };\n const isInQ2OptionList = this.allOptions.includes(relatedTarget);\n const isInLightDom = !isInQ2OptionList && this.hostElement.contains(relatedTarget);\n if (isInQ2OptionList || isInLightDom) {\n event.stopPropagation();\n }\n };\n\n focusSelectedSibling(option: HTMLQ2OptionElement) {\n const { allVisibleOptions, allOptions } = this;\n const hasNoSiblings = allVisibleOptions.length < 2;\n if (hasNoSiblings) {\n this.showSelected = false;\n return;\n }\n\n const selectedOptionVisibleIndex = allVisibleOptions.indexOf(option);\n const nextVisibleSiblingIndex = selectedOptionVisibleIndex\n ? selectedOptionVisibleIndex - 1\n : selectedOptionVisibleIndex + 1;\n const nextVisibleSibling = allVisibleOptions[nextVisibleSiblingIndex];\n const nextSiblingIndex = allOptions.indexOf(nextVisibleSibling);\n\n this.activeIndex = nextSiblingIndex;\n this.setFocusedOption();\n this.scheduledAfterRender.push(() => {\n option._multiSelectHidden = !option.selected;\n });\n }\n\n getDefaultActiveIndex() {\n const { allOptions } = this;\n const firstSelected = allOptions.findIndex(element => element.selected);\n if (firstSelected > -1) return firstSelected;\n\n const firstEnabled = allOptions.findIndex(element => !element.hidden);\n if (firstEnabled > -1) return firstEnabled;\n\n return 0;\n }\n\n getNextVisibleIndex(direction) {\n const { allVisibleOptions, allOptions, activeIndex } = this;\n const activeOption = allOptions[activeIndex];\n const visibleActiveOptionIndex = allVisibleOptions.indexOf(activeOption);\n let nextVisibleOptionIndex = visibleActiveOptionIndex + direction;\n\n if (nextVisibleOptionIndex < 0) {\n nextVisibleOptionIndex = allVisibleOptions.length - 1;\n } else if (nextVisibleOptionIndex > allVisibleOptions.length - 1) {\n nextVisibleOptionIndex = 0;\n }\n\n const nextVisibleOption = allVisibleOptions[nextVisibleOptionIndex];\n return allOptions.indexOf(nextVisibleOption);\n }\n\n getRootSlot(element: Element): Element[] {\n const slot = element.querySelector('slot');\n const assignedElements = slot?.assignedElements() ?? Array.from(element.children);\n const hasAnotherSlot = !!assignedElements.length && assignedElements[0].tagName === 'SLOT';\n if (hasAnotherSlot) {\n return this.getRootSlot(assignedElements[0]);\n } else {\n return assignedElements;\n }\n }\n\n internalKeydownHandler = (event: KeyboardEvent) => {\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions, allVisibleOptions, multiple } = this;\n const { key, shiftKey } = event;\n\n let newOption: HTMLQ2OptionElement;\n switch (key) {\n case ' ':\n if (this.searchString && !this.multiple) {\n if (customSearch) break;\n\n this.searchOptions(key, false);\n break;\n }\n\n event.preventDefault();\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.popoverState.emit({ open: false, action: 'select' });\n break;\n\n case 'Enter':\n event.preventDefault();\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.popoverState.emit({ open: false, action: 'select' });\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n const isFirstVisibleOptionActive = allVisibleOptions[0].active;\n if (isFirstVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'ArrowDown':\n event.preventDefault();\n const isLastVisibleOptionActive = allVisibleOptions[allVisibleOptions.length - 1].active;\n if (isLastVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max(activeIndex - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min(activeIndex + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n if (shiftKey) break;\n if (this.multiple && this.type === 'listbox') break;\n if (this.type === 'menu') {\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n }\n\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) return;\n this.selectOption(newOption);\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, false);\n break;\n }\n };\n\n async openDropdownWithActiveElement(activeIndex: number) {\n if (this.disabled) return;\n this.popoverState.emit({ open: true, action: 'open' });\n await waitForNextPaint();\n this.activeIndex = activeIndex;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n resetTimer() {\n if (this.searchStringTimer) {\n clearTimeout(this.searchStringTimer);\n }\n\n this.searchStringTimer = window.setTimeout(() => {\n this.searchString = null;\n }, 2000);\n }\n\n scrollToActiveOption() {\n const activeOption = this.allOptions[this.activeIndex];\n activeOption?.scrollIntoView({ block: 'center' });\n }\n\n searchAndFocus = (keyValue: string, shouldSelect: boolean) => {\n // pseudo search in non-searchable select\n const reorder = () => {\n this.pivotIndex = this.pivotIndex === undefined ? 0 : (this.activeIndex || 0) + 1;\n const list = this.allOptions.map((element, index) => ({ element, index }));\n return [...list.slice(this.pivotIndex), ...list.slice(0, this.pivotIndex)];\n };\n\n const buildQueue = () => {\n const now = new Date();\n if (now.getTime() - this.keyStore.lastPressedAt.getTime() > 1000) {\n // empty stored keys if delay > 1s\n this.keyStore.queue.length = 0;\n }\n if (this.keyStore.queue.length !== 1 || this.keyStore.queue[0] !== keyValue) {\n this.keyStore.queue.push(keyValue);\n }\n this.keyStore.lastPressedAt = now;\n };\n\n const searchIndex = (list: any[]) => {\n const keyStr = this.keyStore.queue.join('');\n const sanitizedKeyStr = sanitizeRegexString(keyStr);\n return list.find(v => {\n return (\n !v.element.disabled &&\n v.element.display &&\n (v.element.display.match(new RegExp(`^${sanitizedKeyStr}`, 'i')) ||\n v.element.display.replace(/\\s/g, '').match(new RegExp(`^${sanitizedKeyStr}`, 'i')))\n );\n });\n };\n\n const setFocus = ({ index }) => {\n if (this.multiple) {\n // multiple: should open to make sure that which options are selected\n this.openDropdownWithActiveElement(index);\n } else {\n this.activeIndex = index;\n if (shouldSelect) {\n this.selectOption(this.allOptions[index]);\n this.popoverState.emit({ open: false, action: 'select' });\n } else this.setActiveElement(index);\n }\n };\n\n buildQueue();\n const matched = searchIndex(reorder());\n if (matched) {\n setFocus(matched);\n }\n };\n\n searchOptions(key: string, shouldSelect?: boolean) {\n this.searchString = key;\n this.searchAndFocus(key, shouldSelect);\n }\n\n selectOption(selectedOption: HTMLQ2OptionElement) {\n const { multiple, noSelect, showSelected } = this;\n if (!selectedOption || selectedOption.disabled || selectedOption.disabledGroup) return;\n const selectedValue = selectedOption.value;\n const valueObject = {\n value: selectedValue,\n display: selectedOption.display || selectedOption.innerText.trim(),\n };\n\n let values: IOptionValue[] = [];\n if (multiple) {\n const { selectedOptions } = this;\n const isAlreadySelected = selectedOptions.find(option => option.value === selectedValue);\n\n if (isAlreadySelected) {\n values = selectedOptions.filter(({ value }) => value !== selectedValue);\n } else {\n values = [...selectedOptions, valueObject];\n }\n\n if (showSelected) this.focusSelectedSibling(selectedOption);\n } else {\n values = [valueObject];\n }\n\n if (noSelect) this.setActiveElement(null);\n else this.selectedOptions = values;\n\n this.change.emit({ value: selectedValue, values });\n }\n\n setActiveOption() {\n const activeIndex = this.activeIndex;\n\n this.allOptions.forEach((element, elementIndex) => {\n element.active = activeIndex === elementIndex;\n });\n }\n\n setFocusedOption() {\n const option = this.allOptions[this.activeIndex];\n if (!option) return;\n\n const isOptionVisible = isVisible(option);\n if (isOptionVisible) option.focus();\n else nextPaint(() => option.focus());\n }\n\n updateMultipleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValues = selectedOptions.map(({ value }) => value);\n allOptions.forEach(element => {\n element.selected = selectedValues.includes(element.value);\n });\n }\n\n updateSingleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValue = selectedOptions[0]?.value || undefined;\n allOptions.forEach(element => {\n element.selected = element.value === selectedValue;\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <Host>\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n onFocusout={this.focusoutHandler}\n >\n <div\n class=\"options\"\n aria-label={loc('tecton.element.optionList.label', [this.label])}\n aria-multiselectable={`${!!this.multiple}`}\n role={this.type || 'listbox'}\n onKeyDown={this.internalKeydownHandler}\n onClick={this.clickHandler}\n >\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}