q2-tecton-elements 1.23.0-alpha.0 → 1.24.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 (236) hide show
  1. package/dist/cjs/action-sheet-4b366e9a.js +84 -0
  2. package/dist/cjs/charting-d02cba1f.js +3127 -0
  3. package/dist/cjs/{index-3518c78c.js → index-e00b4210.js} +33 -7
  4. package/dist/cjs/{installCanvasRenderer-b4d10c92.js → installCanvasRenderer-6c4fbcc9.js} +230 -1130
  5. package/dist/cjs/installLabelLayout-d6b548fe.js +1048 -0
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/q2-action-sheet.cjs.entry.js +218 -0
  8. package/dist/cjs/q2-badge_2.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-btn_2.cjs.entry.js +2 -2
  10. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-card.cjs.entry.js +2 -2
  12. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-chart-area.cjs.entry.js +4569 -0
  15. package/dist/cjs/q2-chart-bar.cjs.entry.js +25 -3133
  16. package/dist/cjs/q2-chart-donut.cjs.entry.js +9 -8
  17. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-checkbox.cjs.entry.js +2 -2
  19. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-dropdown.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-loading-element.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-optgroup_2.cjs.entry.js +93 -0
  28. package/dist/cjs/q2-option-list_2.cjs.entry.js +230 -88
  29. package/dist/cjs/q2-pagination.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-pill.cjs.entry.js +57 -18
  31. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-section.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-select.cjs.entry.js +149 -409
  35. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-tab-container.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-tag.cjs.entry.js +21 -6
  40. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  41. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  42. package/dist/collection/collection-manifest.json +2 -0
  43. package/dist/collection/components/q2-action-sheet/index.js +345 -0
  44. package/dist/collection/components/q2-action-sheet/styles.css +215 -0
  45. package/dist/collection/components/q2-card/index.js +1 -1
  46. package/dist/collection/components/q2-chart-area/index.js +622 -0
  47. package/dist/collection/components/q2-chart-area/styles.css +82 -0
  48. package/dist/collection/components/q2-chart-bar/index.js +4 -4
  49. package/dist/collection/components/q2-chart-bar/styles.css +3 -6
  50. package/dist/collection/components/q2-chart-donut/index.js +1 -1
  51. package/dist/collection/components/q2-checkbox/index.js +2 -2
  52. package/dist/collection/components/q2-checkbox/styles.css +1 -0
  53. package/dist/collection/components/q2-dropdown/index.js +1 -1
  54. package/dist/collection/components/q2-loading/index.js +1 -1
  55. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/styles.css +4 -0
  56. package/dist/collection/components/q2-loading/styles.css +4 -0
  57. package/dist/collection/components/q2-optgroup/styles.css +2 -2
  58. package/dist/collection/components/q2-option/index.js +1 -56
  59. package/dist/collection/components/q2-option/styles.css +7 -0
  60. package/dist/collection/components/q2-option-list/index.js +290 -102
  61. package/dist/collection/components/q2-pill/index.js +79 -18
  62. package/dist/collection/components/q2-pill/styles.css +1 -2
  63. package/dist/collection/components/q2-popover/index.js +21 -5
  64. package/dist/collection/components/q2-popover/styles.css +10 -67
  65. package/dist/collection/components/q2-radio/index.js +2 -2
  66. package/dist/collection/components/q2-select/index.js +197 -427
  67. package/dist/collection/components/q2-select/styles.css +5 -11
  68. package/dist/collection/components/q2-tag/index.js +38 -5
  69. package/dist/collection/utils/action-sheet.js +79 -0
  70. package/dist/collection/utils/index.js +31 -7
  71. package/dist/components/action-sheet.js +81 -0
  72. package/dist/components/charting.js +3113 -0
  73. package/dist/components/index.d.ts +2 -0
  74. package/dist/components/index.js +2 -0
  75. package/dist/components/index10.js +1 -1
  76. package/dist/components/index11.js +42 -353
  77. package/dist/components/index12.js +44 -97
  78. package/dist/components/index13.js +495 -580
  79. package/dist/components/index14.js +137 -0
  80. package/dist/components/index15.js +626 -0
  81. package/dist/components/index5.js +1 -1
  82. package/dist/components/index6.js +1 -1
  83. package/dist/components/index7.js +1 -1
  84. package/dist/components/index8.js +1 -1
  85. package/dist/components/index9.js +3 -3
  86. package/dist/components/installCanvasRenderer.js +188 -1123
  87. package/dist/components/installLabelLayout.js +1042 -0
  88. package/dist/components/q2-action-sheet.d.ts +11 -0
  89. package/dist/components/q2-action-sheet.js +282 -0
  90. package/dist/components/q2-calendar.js +1 -1
  91. package/dist/components/q2-card.js +2 -2
  92. package/dist/components/q2-carousel-pane.js +1 -1
  93. package/dist/components/q2-carousel.js +1 -1
  94. package/dist/components/q2-chart-area.d.ts +11 -0
  95. package/dist/components/q2-chart-area.js +4604 -0
  96. package/dist/components/q2-chart-bar.js +11 -3119
  97. package/dist/components/q2-chart-donut.js +4 -3
  98. package/dist/components/q2-checkbox-group.js +1 -1
  99. package/dist/components/q2-checkbox.js +2 -2
  100. package/dist/components/q2-dropdown.js +2 -2
  101. package/dist/components/q2-editable-field.js +1 -1
  102. package/dist/components/q2-loading-element.js +1 -1
  103. package/dist/components/q2-loc.js +1 -1
  104. package/dist/components/q2-month-picker.js +1 -1
  105. package/dist/components/q2-optgroup.js +1 -70
  106. package/dist/components/q2-option-list.js +1 -1
  107. package/dist/components/q2-option.js +1 -76
  108. package/dist/components/q2-pagination.js +1 -1
  109. package/dist/components/q2-pill.js +62 -21
  110. package/dist/components/q2-popover.js +1 -1
  111. package/dist/components/q2-radio-group.js +1 -1
  112. package/dist/components/q2-radio.js +3 -3
  113. package/dist/components/q2-section.js +1 -1
  114. package/dist/components/q2-select.js +181 -427
  115. package/dist/components/q2-stepper-pane.js +1 -1
  116. package/dist/components/q2-stepper-vertical.js +1 -1
  117. package/dist/components/q2-stepper.js +1 -1
  118. package/dist/components/q2-tab-container.js +1 -1
  119. package/dist/components/q2-tag.js +24 -8
  120. package/dist/components/q2-textarea.js +1 -1
  121. package/dist/esm/action-sheet-a9597b32.js +81 -0
  122. package/dist/esm/charting-2a73ba8e.js +3113 -0
  123. package/dist/esm/{index-9c591682.js → index-ca21e539.js} +32 -8
  124. package/dist/esm/{installCanvasRenderer-0143b52d.js → installCanvasRenderer-4a470516.js} +188 -1123
  125. package/dist/esm/installLabelLayout-d660eaad.js +1042 -0
  126. package/dist/esm/loader.js +1 -1
  127. package/dist/esm/q2-action-sheet.entry.js +214 -0
  128. package/dist/esm/q2-badge_2.entry.js +1 -1
  129. package/dist/esm/q2-btn_2.entry.js +2 -2
  130. package/dist/esm/q2-calendar.entry.js +1 -1
  131. package/dist/esm/q2-card.entry.js +2 -2
  132. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  133. package/dist/esm/q2-carousel.entry.js +1 -1
  134. package/dist/esm/q2-chart-area.entry.js +4565 -0
  135. package/dist/esm/q2-chart-bar.entry.js +11 -3119
  136. package/dist/esm/q2-chart-donut.entry.js +4 -3
  137. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  138. package/dist/esm/q2-checkbox.entry.js +2 -2
  139. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  140. package/dist/esm/q2-dropdown.entry.js +1 -1
  141. package/dist/esm/q2-editable-field.entry.js +1 -1
  142. package/dist/esm/q2-icon.entry.js +1 -1
  143. package/dist/esm/q2-loading-element.entry.js +1 -1
  144. package/dist/esm/q2-loc.entry.js +1 -1
  145. package/dist/esm/q2-message.entry.js +1 -1
  146. package/dist/esm/q2-month-picker.entry.js +1 -1
  147. package/dist/esm/q2-optgroup_2.entry.js +88 -0
  148. package/dist/esm/q2-option-list_2.entry.js +230 -88
  149. package/dist/esm/q2-pagination.entry.js +1 -1
  150. package/dist/esm/q2-pill.entry.js +57 -18
  151. package/dist/esm/q2-radio-group.entry.js +1 -1
  152. package/dist/esm/q2-radio.entry.js +1 -1
  153. package/dist/esm/q2-section.entry.js +1 -1
  154. package/dist/esm/q2-select.entry.js +149 -409
  155. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  156. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  157. package/dist/esm/q2-stepper.entry.js +1 -1
  158. package/dist/esm/q2-tab-container.entry.js +1 -1
  159. package/dist/esm/q2-tag.entry.js +21 -6
  160. package/dist/esm/q2-tecton-elements.js +1 -1
  161. package/dist/esm/q2-textarea.entry.js +1 -1
  162. package/dist/q2-tecton-elements/{p-db873db2.entry.js → p-0473f4f7.entry.js} +1 -1
  163. package/dist/q2-tecton-elements/{p-520c40f6.entry.js → p-13a1390b.entry.js} +1 -1
  164. package/dist/q2-tecton-elements/{p-9ebb283a.entry.js → p-13deb3ed.entry.js} +1 -1
  165. package/dist/q2-tecton-elements/{p-0ba564b1.entry.js → p-1d854203.entry.js} +1 -1
  166. package/dist/q2-tecton-elements/p-1f71774f.entry.js +1 -0
  167. package/dist/q2-tecton-elements/{p-18cc4758.entry.js → p-256d3fe6.entry.js} +1 -1
  168. package/dist/q2-tecton-elements/{p-9281adaa.entry.js → p-282f0f8c.entry.js} +1 -1
  169. package/dist/q2-tecton-elements/{p-2d2c5af2.entry.js → p-30969629.entry.js} +1 -1
  170. package/dist/q2-tecton-elements/p-30cd888b.entry.js +1 -0
  171. package/dist/q2-tecton-elements/{p-fc134a5d.entry.js → p-37cf9c97.entry.js} +1 -1
  172. package/dist/q2-tecton-elements/{p-fb37e67e.entry.js → p-388349b5.entry.js} +1 -1
  173. package/dist/q2-tecton-elements/p-458b1987.js +1 -0
  174. package/dist/q2-tecton-elements/p-52063431.js +39 -0
  175. package/dist/q2-tecton-elements/p-5589ae0f.entry.js +1 -0
  176. package/dist/q2-tecton-elements/p-619aed74.entry.js +1 -0
  177. package/dist/q2-tecton-elements/{p-4625184b.entry.js → p-63b67260.entry.js} +1 -1
  178. package/dist/q2-tecton-elements/{p-e4dc9ac0.entry.js → p-63e363ad.entry.js} +1 -1
  179. package/dist/q2-tecton-elements/{p-cbd1289a.entry.js → p-6736df05.entry.js} +1 -1
  180. package/dist/q2-tecton-elements/p-72fe10cc.entry.js +1 -0
  181. package/dist/q2-tecton-elements/{p-c4640b55.entry.js → p-75b817c6.entry.js} +1 -1
  182. package/dist/q2-tecton-elements/{p-c3f27fe2.entry.js → p-7a116095.entry.js} +1 -1
  183. package/dist/q2-tecton-elements/p-7c94119b.entry.js +1 -0
  184. package/dist/q2-tecton-elements/p-833398d1.js +1 -0
  185. package/dist/q2-tecton-elements/{p-ce015552.entry.js → p-90572e43.entry.js} +1 -1
  186. package/dist/q2-tecton-elements/p-91153c61.entry.js +1 -0
  187. package/dist/q2-tecton-elements/p-9792de8a.entry.js +1 -0
  188. package/dist/q2-tecton-elements/p-9acfa94e.js +1 -0
  189. package/dist/q2-tecton-elements/p-a1926e65.js +1 -0
  190. package/dist/q2-tecton-elements/{p-ffb48ccc.entry.js → p-b3a8cdc5.entry.js} +1 -1
  191. package/dist/q2-tecton-elements/p-ce3f203c.entry.js +1 -0
  192. package/dist/q2-tecton-elements/{p-041b3a82.entry.js → p-ce91cd9b.entry.js} +1 -1
  193. package/dist/q2-tecton-elements/{p-b8b00394.entry.js → p-cefc9d0b.entry.js} +1 -1
  194. package/dist/q2-tecton-elements/p-d05beeb7.entry.js +1 -0
  195. package/dist/q2-tecton-elements/p-dc7c8371.entry.js +1 -0
  196. package/dist/q2-tecton-elements/{p-16c11d74.entry.js → p-e58581fc.entry.js} +1 -1
  197. package/dist/q2-tecton-elements/{p-f800fd1e.entry.js → p-e886c55b.entry.js} +1 -1
  198. package/dist/q2-tecton-elements/{p-6e6b5b80.entry.js → p-f0ec4d2c.entry.js} +1 -1
  199. package/dist/q2-tecton-elements/{p-97aa8423.entry.js → p-f94e7043.entry.js} +1 -1
  200. package/dist/q2-tecton-elements/{p-c444a60b.entry.js → p-fcb7d191.entry.js} +1 -1
  201. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  202. package/dist/test/helpers.js +3 -2
  203. package/dist/types/components/q2-action-sheet/index.d.ts +52 -0
  204. package/dist/types/components/q2-card/index.d.ts +1 -1
  205. package/dist/types/components/q2-chart-area/index.d.ts +40 -0
  206. package/dist/types/components/q2-chart-bar/index.d.ts +2 -2
  207. package/dist/types/components/q2-chart-donut/index.d.ts +1 -1
  208. package/dist/types/components/q2-checkbox/index.d.ts +4 -1
  209. package/dist/types/components/q2-option/index.d.ts +0 -3
  210. package/dist/types/components/q2-option-list/index.d.ts +16 -8
  211. package/dist/types/components/q2-pill/index.d.ts +10 -1
  212. package/dist/types/components/q2-popover/index.d.ts +2 -0
  213. package/dist/types/components/q2-select/index.d.ts +46 -47
  214. package/dist/types/components/q2-tag/index.d.ts +3 -2
  215. package/dist/types/components.d.ts +100 -13
  216. package/dist/types/global.d.ts +10 -1
  217. package/dist/types/utils/action-sheet.d.ts +12 -0
  218. package/dist/types/utils/index.d.ts +3 -1
  219. package/dist/types/workspace/workspace/{_production_release_1.22.x-alpha → Tecton_tecton-production_master}/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +1 -1
  220. package/package.json +3 -2
  221. package/dist/cjs/q2-optgroup.cjs.entry.js +0 -56
  222. package/dist/cjs/q2-option.cjs.entry.js +0 -46
  223. package/dist/esm/q2-optgroup.entry.js +0 -52
  224. package/dist/esm/q2-option.entry.js +0 -42
  225. package/dist/q2-tecton-elements/p-0d8dd75a.entry.js +0 -1
  226. package/dist/q2-tecton-elements/p-0fad9c5a.entry.js +0 -1
  227. package/dist/q2-tecton-elements/p-1f85cced.js +0 -39
  228. package/dist/q2-tecton-elements/p-2c9b1308.entry.js +0 -1
  229. package/dist/q2-tecton-elements/p-5e374fbd.js +0 -1
  230. package/dist/q2-tecton-elements/p-6b52a262.entry.js +0 -1
  231. package/dist/q2-tecton-elements/p-aaf42539.entry.js +0 -1
  232. package/dist/q2-tecton-elements/p-cf41970f.entry.js +0 -1
  233. package/dist/q2-tecton-elements/p-de164483.entry.js +0 -1
  234. package/dist/q2-tecton-elements/p-e6d26f39.entry.js +0 -1
  235. package/dist/q2-tecton-elements/p-f1d06917.entry.js +0 -1
  236. package/dist/q2-tecton-elements/p-f35bf6a3.entry.js +0 -1
@@ -1,13 +1,16 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
- import { c as createGuid, s as setPopProperties, h as handleAriaLabel, o as overrideFocus, l as loc, b as isRelatedTargetWithinHost, i as isEventFromElement, r as resizeIframe } from './index13.js';
3
- import { d as defineCustomElement$7 } from './index2.js';
4
- import { d as defineCustomElement$6 } from './index4.js';
5
- import { d as defineCustomElement$5 } from './index5.js';
6
- import { d as defineCustomElement$4 } from './index7.js';
7
- import { d as defineCustomElement$3 } from './index8.js';
8
- import { d as defineCustomElement$2 } from './index9.js';
2
+ import { h as handleAriaLabel, o as overrideFocus, l as loc, b as isRelatedTargetWithinHost, i as isEventFromElement, d as isHostLosingFocus } from './index15.js';
3
+ import { s as shouldShowActionSheet, a as showActionSheetList } from './action-sheet.js';
4
+ import { d as defineCustomElement$9 } from './index2.js';
5
+ import { d as defineCustomElement$8 } from './index4.js';
6
+ import { d as defineCustomElement$7 } from './index5.js';
7
+ import { d as defineCustomElement$6 } from './index7.js';
8
+ import { d as defineCustomElement$5 } from './index8.js';
9
+ import { d as defineCustomElement$4 } from './index9.js';
10
+ import { d as defineCustomElement$3 } from './index13.js';
11
+ import { d as defineCustomElement$2 } from './index14.js';
9
12
 
10
- const stylesCss = "*{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 #33b4ff #06C)}: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}.q2-element-dropdown{display:none;position:absolute;background-color:var(--app-white, #ffffff);color:var(--t-text, #4d4d4d);left:0;width:100%;z-index:100;margin-top:1px;box-shadow:var(--app-shadow-1, 0 2px 4px rgba(0, 0, 0, 0.3));height:0;overflow:hidden;opacity:0;visibility:hidden;transition:opacity var(--app-tween-1, 0.2s ease);border-radius:var(--tct-dropdown-border-radius, --t-dropdown-border-radius, 0);--comp-scrollbar-size:var(--tct-scrollbar-size, var(--t-scrollbar-size, var(--app-scale-1x, 5px)));--comp-scrollbar-border-radius:var(--tct-scrollbar-border-radius, var(--t-scrollbar-border-radius, var(--app-border-radius-1, 3px)));--comp-scrollbar-color:var(--tct-scrollbar-color, var(--t-scrollbar-color, var(--t-a11y-gray-color, #747474)));scrollbar-width:thin;scrollbar-color:var(--comp-scrollbar-color) transparent}.q2-element-dropdown::-webkit-scrollbar{width:var(--comp-scrollbar-size);height:var(--comp-scrollbar-size);margin:5px}.q2-element-dropdown::-webkit-scrollbar-thumb{background:var(--comp-scrollbar-color);border-radius:var(--comp-scrollbar-border-radius)}.q2-element-dropdown::-webkit-scrollbar-track{background:transparent;border-radius:var(--comp-scrollbar-border-radius)}.q2-element-dropdown.sizable{display:block;height:auto}.dropdown-open .q2-element-dropdown{display:block;height:auto;overflow:auto;opacity:1;visibility:visible}:host([alignment=right]) .q2-element-dropdown{left:auto;right:0}:host([block]) q2-btn,:host([block]){display:block}:host{display:block;margin-top:var(--tct-select-margin-top, var(--app-scale-4, 30px));margin-bottom:var(--tct-select-margin-bottom, var(--app-scale-4, 30px))}.q2-select-container{position:relative;display:block}.q2-select-input{margin:0;--tct-input-min-height:var(--tct-select-input-min-height, var(--t-select-input-min-height));--tct-input-max-height:var(--tct-select-input-max-height, var(--t-select-input-max-height, 100px))}::slotted([slot=_selected-display]){width:100%;min-height:var(--comp-selected-display-height, 44px)}.custom-display-content{position:absolute;bottom:0;left:calc(var(--tct-scale-2, var(--app-scale-2x, 10px)) + 1px);height:44px;width:calc(100% - 34px - var(--tct-scale-3, var(--app-scale-3x, 15px)));overflow:hidden;cursor:pointer;transition:left var(--tct-tween-2, var(--app-tween-1, 0.2s ease))}.custom-display-content:not([hidden]){display:flex;align-items:center}.is-searchable.is-focused .custom-display-content,.is-searchable .custom-display-content:active{left:calc(var(--tct-scale-3, var(--app-scale-3x, 15px)) + 1px)}.has-error .custom-display-content{width:calc(100% - 68px - var(--tct-scale-3, var(--app-scale-3x, 15px)))}.dropdown-open .q2-select-dropdown{overflow-y:auto;max-height:300px}.multi-select-header{padding:var(--tct-scale-1, var(--app-scale-1x, 5px)) var(--tct-scale-2, var(--app-scale-2x, 10px));position:sticky;top:0;z-index:5;background:var(--app-white)}.show-all-options{margin-right:var(--tct-scale-1, var(--app-scale-1x, 5px));margin-left:var(--tct-scale-2, var(--app-scale-2x, 10px))}.q2-element-dropdown.dropup{bottom:var(--comp-dropup-offset)}";
13
+ const stylesCss = "*{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 #33b4ff #06C)}: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}.q2-element-dropdown{display:none;position:absolute;background-color:var(--app-white, #ffffff);color:var(--t-text, #4d4d4d);left:0;width:100%;z-index:100;margin-top:1px;box-shadow:var(--app-shadow-1, 0 2px 4px rgba(0, 0, 0, 0.3));height:0;overflow:hidden;opacity:0;visibility:hidden;transition:opacity var(--app-tween-1, 0.2s ease);border-radius:var(--tct-dropdown-border-radius, --t-dropdown-border-radius, 0);--comp-scrollbar-size:var(--tct-scrollbar-size, var(--t-scrollbar-size, var(--app-scale-1x, 5px)));--comp-scrollbar-border-radius:var(--tct-scrollbar-border-radius, var(--t-scrollbar-border-radius, var(--app-border-radius-1, 3px)));--comp-scrollbar-color:var(--tct-scrollbar-color, var(--t-scrollbar-color, var(--t-a11y-gray-color, #747474)));scrollbar-width:thin;scrollbar-color:var(--comp-scrollbar-color) transparent}.q2-element-dropdown::-webkit-scrollbar{width:var(--comp-scrollbar-size);height:var(--comp-scrollbar-size);margin:5px}.q2-element-dropdown::-webkit-scrollbar-thumb{background:var(--comp-scrollbar-color);border-radius:var(--comp-scrollbar-border-radius)}.q2-element-dropdown::-webkit-scrollbar-track{background:transparent;border-radius:var(--comp-scrollbar-border-radius)}.q2-element-dropdown.sizable{display:block;height:auto}.dropdown-open .q2-element-dropdown{display:block;height:auto;overflow:auto;opacity:1;visibility:visible}:host([alignment=right]) .q2-element-dropdown{left:auto;right:0}:host([block]) q2-btn,:host([block]){display:block}:host{display:block;margin-top:var(--tct-select-margin-top, var(--app-scale-4, 30px));margin-bottom:var(--tct-select-margin-bottom, var(--app-scale-4, 30px))}.q2-select-container{position:relative;display:block}.q2-select-input{margin:0;--tct-input-min-height:var(--tct-select-input-min-height, var(--t-select-input-min-height));--tct-input-max-height:var(--tct-select-input-max-height, var(--t-select-input-max-height, none))}::slotted([slot=_selected-display]){width:100%;min-height:var(--comp-selected-display-height, 44px)}.custom-display-content{position:absolute;bottom:0;left:calc(var(--tct-scale-2, var(--app-scale-2x, 10px)) + 1px);height:44px;width:calc(100% - 34px - var(--tct-scale-3, var(--app-scale-3x, 15px)));overflow:hidden;cursor:pointer;transition:left var(--tct-tween-2, var(--app-tween-1, 0.2s ease))}.custom-display-content:not([hidden]){display:flex;align-items:center}.is-searchable.is-focused .custom-display-content,.is-searchable .custom-display-content:active{left:calc(var(--tct-scale-3, var(--app-scale-3x, 15px)) + 1px)}.has-error .custom-display-content{width:calc(100% - 68px - var(--tct-scale-3, var(--app-scale-3x, 15px)))}.multi-select-header{padding:var(--tct-scale-1, var(--app-scale-1x, 5px)) var(--tct-scale-2, var(--app-scale-2x, 10px));position:sticky;top:0;z-index:5;background:var(--app-white);display:inline-grid;grid-template-columns:repeat(3, auto);gap:var(--app-scale-2x, 10px);align-items:center}.q2-element-dropdown.dropup{bottom:var(--comp-dropup-offset)}";
11
14
 
12
15
  const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
13
16
  constructor() {
@@ -16,12 +19,16 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
16
19
  this.__attachShadow();
17
20
  this.change = createEvent(this, "change", 7);
18
21
  this.input = createEvent(this, "input", 7);
22
+ var _a;
19
23
  this.scheduledAfterRender = [];
20
- this.keyStore = {
21
- queue: [],
22
- lastPressedAt: new Date(),
24
+ this.showSelectedOptions = (event) => {
25
+ event.stopPropagation();
26
+ this.showSelected = true;
27
+ };
28
+ this.showAllOptions = (event) => {
29
+ event === null || event === void 0 ? void 0 : event.stopPropagation();
30
+ this.showSelected = false;
23
31
  };
24
- this.guid = createGuid();
25
32
  this.onMutationObserved = () => {
26
33
  const slotContainer = this.hostElement.querySelector('.custom-display-content');
27
34
  const displaySlot = this.hostElement.shadowRoot.querySelector('slot[name="q2-select-display"]');
@@ -31,201 +38,62 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
31
38
  if (this.hasCustomDisplay !== hasCustomDisplay) {
32
39
  this.hasCustomDisplay = hasCustomDisplay;
33
40
  }
34
- if (this.multiple) {
35
- this.updateMultipleOptionAttrs();
36
- return;
37
- }
38
- this.updateSingleOptionAttrs();
39
- const activeOption = this.optionElements[this.activeIndex];
40
- if (!activeOption || activeOption.id !== this.activeOptionId) {
41
- this.activeIndex = this.getDefaultActiveIndex();
42
- this.setActiveOption();
43
- }
44
41
  };
45
- this.searchAndFocus = keyValue => {
46
- // pseudo search in non-searchable select
47
- const reorder = () => {
48
- this.pivotIndex = this.pivotIndex === undefined ? 0 : (this.activeIndex || 0) + 1;
49
- const list = this.optionElements.map((element, index) => ({ element, index }));
50
- return [...list.slice(this.pivotIndex), ...list.slice(0, this.pivotIndex)];
51
- };
52
- const buildQueue = () => {
53
- const now = new Date();
54
- if (now.getTime() - this.keyStore.lastPressedAt.getTime() > 1000) {
55
- // empty stored keys if delay > 1s
56
- this.keyStore.queue = [];
57
- }
58
- if (this.keyStore.queue.length !== 1 || this.keyStore.queue[0] !== keyValue) {
59
- this.keyStore.queue.push(keyValue);
60
- }
61
- this.keyStore.lastPressedAt = now;
62
- };
63
- const searchIndex = list => {
64
- return list.find(v => {
65
- return (!v.element.disabled &&
66
- v.element.display &&
67
- v.element.display.replace(/\s/g, '').match(new RegExp(`^${this.keyStore.queue.join('')}`, 'i')));
68
- });
69
- };
70
- const setFocus = ({ element, index }) => {
71
- if (this.dropdownOpen || this.multiple) {
72
- // multiple: should open to make sure that which options are selected
73
- this.openDropdownWithActiveElement(index);
74
- }
75
- else {
76
- this.activeIndex = index;
77
- this.change.emit({ value: element.value });
78
- }
79
- };
80
- buildQueue();
81
- const matched = searchIndex(reorder());
82
- if (matched) {
83
- setFocus(matched);
84
- }
42
+ this.onOptionListChange = (event) => {
43
+ event.stopPropagation();
44
+ const { values } = event.detail;
45
+ if (values.length === 0)
46
+ this.showAllOptions();
47
+ this.handleSelectionChanges(event.detail);
85
48
  };
86
49
  /// Event handlers ///
87
- this.dropdownFocusoutHandler = (event) => {
88
- const { relatedTarget } = event;
89
- const isInDropdown = this.dropdownContainer.contains(relatedTarget);
90
- const isInLightDom = !isInDropdown && this.hostElement.contains(relatedTarget);
91
- if (isInDropdown || isInLightDom)
50
+ this.popoverStateChanged = ({ detail: { open } }) => {
51
+ if (this.open === open)
92
52
  return;
93
- if (!this.dropdownOpen)
53
+ this.open = open;
54
+ if (open && !this.searchText)
94
55
  return;
95
- this.closeDropdown();
56
+ this.optionList.setActiveElement(null);
57
+ this.inputField.focus();
96
58
  };
97
- /* tslint:disable:cyclomatic-complexity */
98
- this.dropdownKeydownHandler = (event) => {
99
- event.stopPropagation();
100
- const { activeIndex, searchable, optionElements, multiSelectHeader } = this;
101
- const { key, shiftKey } = event;
102
- if (this.readonly ||
103
- (multiSelectHeader && multiSelectHeader.contains(event.target) && [' ', 'Enter'].includes(key)))
59
+ this.inputKeydownHandler = (event) => {
60
+ if (this.readonly || this.disabled)
104
61
  return;
105
- switch (key) {
106
- case ' ':
107
- case 'Enter':
108
- event.preventDefault();
109
- const newOption = this.hostElement.querySelector(`[option-id="${this.activeOptionId}"]`);
110
- if (!newOption || newOption.disabled)
111
- break;
112
- this.selectOption(newOption, true);
113
- break;
114
- case 'ArrowUp':
115
- event.preventDefault();
116
- const isFirstOption = activeIndex === 0;
117
- if (isFirstOption)
118
- break;
119
- if (activeIndex !== undefined) {
120
- const nextIndex = this.getNextVisibleIndex(-1);
121
- if (nextIndex === -1)
122
- break;
123
- this.adjustActiveOptionAndScroll(nextIndex - activeIndex);
124
- }
125
- else {
126
- this.setDefaultActiveElement();
127
- }
128
- break;
129
- case 'ArrowDown':
130
- event.preventDefault();
131
- const isLastOption = activeIndex === optionElements.length - 1;
132
- if (isLastOption)
133
- break;
134
- if (activeIndex !== undefined) {
135
- const nextIndex = this.getNextVisibleIndex(1);
136
- if (nextIndex === -1)
137
- break;
138
- this.adjustActiveOptionAndScroll(nextIndex - activeIndex);
139
- }
140
- else {
141
- this.setDefaultActiveElement();
142
- }
143
- break;
144
- case 'Home':
145
- event.preventDefault();
146
- this.openDropdownWithActiveElement(0);
147
- break;
148
- case 'End':
149
- event.preventDefault();
150
- this.openDropdownWithActiveElement(optionElements.length - 1);
151
- break;
152
- case 'PageUp':
153
- event.preventDefault();
154
- this.openDropdownWithActiveElement(Math.max(activeIndex - 10, 0));
155
- break;
156
- case 'PageDown':
157
- event.preventDefault();
158
- this.openDropdownWithActiveElement(Math.min(activeIndex + 10, optionElements.length - 1));
159
- break;
160
- case 'Tab':
161
- if (shiftKey)
162
- break;
163
- const myOption = this.hostElement.querySelector(`[option-id="${this.activeOptionId}"]`);
164
- if (!myOption || myOption.disabled)
165
- return;
166
- if (myOption.selected)
167
- return;
168
- this.selectOption(myOption);
169
- break;
170
- case 'Esc':
171
- case 'Escape':
172
- this.closeDropdown();
173
- this.focusInput();
174
- break;
175
- default:
176
- if (searchable)
177
- break;
178
- if (!key.match(/^[A-Za-z0-9]$/))
179
- break;
180
- // search in non-searchable select: alpha-numeric only
181
- this.searchAndFocus(key);
182
- break;
62
+ const keysForOptionListToHandle = [
63
+ 'ArrowDown',
64
+ 'ArrowUp',
65
+ 'PageDown',
66
+ 'PageUp',
67
+ 'Home',
68
+ 'End',
69
+ 'Escape',
70
+ 'Tab',
71
+ ];
72
+ if (shouldShowActionSheet(this, event)) {
73
+ return this.executeActionSheet(event);
183
74
  }
75
+ if (this.searchable && !keysForOptionListToHandle.includes(event.key))
76
+ return;
77
+ if (this.shouldClearSearchText(event))
78
+ this.clearSearchText();
79
+ this.optionList.handleExternalKeydown(event);
184
80
  };
185
- /* tslint:enable:cyclomatic-complexity */
186
- this.inputKeydownHandler = (event) => {
187
- event.stopPropagation();
188
- const { key } = event;
189
- const { optionElements, searchable } = this;
190
- switch (key) {
191
- case 'ArrowDown':
192
- event.preventDefault();
193
- this.openDropdownWithActiveElement(this.getDefaultActiveIndex());
194
- break;
195
- case 'ArrowUp':
196
- event.preventDefault();
197
- this.openDropdownWithActiveElement(this.getLastEnabledIndex());
198
- this.setFocusedOption();
199
- break;
200
- case 'Home':
201
- event.preventDefault();
202
- this.openDropdownWithActiveElement(0);
203
- break;
204
- case 'End':
205
- event.preventDefault();
206
- this.openDropdownWithActiveElement(optionElements.length - 1);
207
- break;
208
- case 'Escape':
209
- case 'Esc':
210
- this.closeDropdown();
211
- break;
212
- case 'Tab':
213
- this.closeDropdown();
214
- break;
215
- default:
216
- if (!key.match(/^[A-Za-z0-9]$/))
217
- break;
218
- if (searchable) {
219
- this.openDropdownWithoutActiveElement();
220
- break;
221
- }
222
- // search in non-searchable select: alpha-numeric only
223
- this.searchAndFocus(key);
81
+ this.visibilityToggleKeyDown = (event) => {
82
+ const keysForOptionListToHandle = ['ArrowDown', 'ArrowUp'];
83
+ const keysThatTriggerClick = ['Enter', ' '];
84
+ const key = event.key;
85
+ if (keysForOptionListToHandle.includes(key)) {
86
+ this.optionList.handleExternalKeydown(event);
87
+ }
88
+ else if (keysThatTriggerClick.includes(key)) {
89
+ event.target.dispatchEvent(new MouseEvent('click'));
224
90
  }
225
91
  };
226
- this.inputClickHandler = (event) => {
92
+ this.inputClickHandler = async (event) => {
227
93
  event.stopPropagation();
228
- setPopProperties(this);
94
+ if (shouldShowActionSheet(this)) {
95
+ return this.executeActionSheet(event);
96
+ }
229
97
  this.toggleDropdown();
230
98
  this.focusInput();
231
99
  };
@@ -235,10 +103,9 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
235
103
  const eventValue = event.detail.value;
236
104
  const didChangeText = inputValue !== eventValue;
237
105
  const shouldClearValue = !!this.value && didChangeText;
238
- if (shouldClearValue) {
239
- this.selectOption(null);
240
- }
241
- if (!this.dropdownOpen)
106
+ if (shouldClearValue)
107
+ this.clearValue();
108
+ if (!this.open)
242
109
  this.openDropdownWithoutActiveElement();
243
110
  this.prioritizeSearch = true;
244
111
  this.searchText = eventValue;
@@ -255,32 +122,18 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
255
122
  };
256
123
  this.clickedElsewhere = (event) => {
257
124
  const target = event.target;
258
- if (target.localName === 'click-elsewhere') {
259
- event.stopPropagation();
260
- if (this.dropdownOpen) {
261
- this.closeDropdown();
262
- }
263
- }
125
+ if (target.localName !== 'click-elsewhere')
126
+ return;
127
+ event.stopPropagation();
128
+ if (!this.open)
129
+ return;
130
+ this.closeDropdown();
264
131
  };
265
132
  this.onCustomDisplayClick = (event) => {
266
133
  event.stopPropagation();
267
134
  this.focusInput();
268
135
  this.toggleDropdown();
269
136
  };
270
- this.showSelectedOptions = (event) => {
271
- event.stopImmediatePropagation();
272
- this.onlyShowingSelected = true;
273
- this.optionElements.forEach(optionElement => {
274
- optionElement._multiSelectHidden = !optionElement.selected;
275
- });
276
- };
277
- this.showAllOptions = (event) => {
278
- event.stopPropagation();
279
- this.onlyShowingSelected = false;
280
- this.optionElements.forEach(optionElement => {
281
- optionElement._multiSelectHidden = false;
282
- });
283
- };
284
137
  this.label = undefined;
285
138
  this.hideLabel = undefined;
286
139
  this.value = undefined;
@@ -296,18 +149,22 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
296
149
  this.searchable = false;
297
150
  this.multilineOptions = false;
298
151
  this.optional = false;
299
- this.dropdownOpen = false;
300
- this.onlyShowingSelected = false;
301
- this.activeOptionId = undefined;
152
+ this.placeholder = undefined;
153
+ this.hoist = !!((_a = window.Tecton) === null || _a === void 0 ? void 0 : _a.useActionSheets);
154
+ this.open = false;
155
+ this.showSelected = false;
302
156
  this.searchText = '';
303
157
  this.hasCustomDisplay = false;
304
158
  this.inputFocused = false;
305
159
  this.statusMessage = undefined;
306
160
  this.prioritizeSearch = false;
161
+ this.structuredSelectedOptions = [];
307
162
  }
308
163
  /// Lifecycle Hooks ///
309
164
  componentWillLoad() {
310
165
  handleAriaLabel(this);
166
+ this.buildStructuredSelectedOptions();
167
+ this.handleMultilineOptionsUpdate(this.multilineOptions, false);
311
168
  }
312
169
  componentDidLoad() {
313
170
  const observer = new MutationObserver(this.onMutationObserved);
@@ -329,22 +186,17 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
329
186
  this.mutationObserver = null;
330
187
  }
331
188
  /// Getters ///
332
- get isComponentFocused() {
333
- return document.activeElement === this.hostElement || !!this.hostElement.querySelector(':focus');
334
- }
335
- get isSearchMode() {
336
- return (this.searchable && this.inputFocused) || this.searchText;
337
- }
338
189
  get badgeValue() {
190
+ var _a, _b;
339
191
  if (!this.multiple)
340
- return;
341
- const optionsLength = this.selectedOptions.length;
342
- if (this.dropdownOpen && this.searchable)
343
- return optionsLength || null;
192
+ return null;
193
+ const optionsLength = (_b = (_a = this.selectedOptions) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
194
+ if (this.open && this.searchable)
195
+ return optionsLength ? `${optionsLength}` : null;
344
196
  else
345
197
  return optionsLength > 1 ? `+${optionsLength - 1}` : null;
346
198
  }
347
- get minPopHeight() {
199
+ get popoverMinHeight() {
348
200
  const { minRows } = this;
349
201
  const firstOption = this.hostElement.querySelector('q2-option:not([hidden])');
350
202
  const minHeight = firstOption ? window.getComputedStyle(firstOption).minHeight : '44px';
@@ -361,10 +213,8 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
361
213
  return this.hostElement.querySelector('[slot="_selected-display"]');
362
214
  }
363
215
  get firstSelectedValue() {
364
- var _a, _b;
365
- if (this.multiple)
366
- return (_b = (_a = this.selectedOptions) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null;
367
- return this.value;
216
+ var _a;
217
+ return this.multiple ? (_a = this.selectedOptions) === null || _a === void 0 ? void 0 : _a[0] : this.value;
368
218
  }
369
219
  get firstSelectedOptionElement() {
370
220
  const { firstSelectedValue } = this;
@@ -373,14 +223,9 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
373
223
  get optionElements() {
374
224
  return Array.from(this.hostElement.querySelectorAll('q2-option'));
375
225
  }
376
- get visibleOptionElements() {
377
- return Array.from(this.hostElement.querySelectorAll('q2-option:not([_multiselecthidden])'));
378
- }
379
226
  get wrapperClasses() {
380
227
  const { errors } = this;
381
228
  const classes = ['q2-select-container'];
382
- if (this.dropdownOpen)
383
- classes.push('dropdown-open');
384
229
  if (Array.isArray(errors) && errors.length > 0)
385
230
  classes.push('has-error');
386
231
  if (this.inputFocused)
@@ -390,33 +235,39 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
390
235
  return classes.join(' ');
391
236
  }
392
237
  /// Watchers ///
238
+ buildStructuredSelectedOptions() {
239
+ const { multiple, selectedOptions, value } = this;
240
+ if (multiple) {
241
+ this.structuredSelectedOptions = !!(selectedOptions === null || selectedOptions === void 0 ? void 0 : selectedOptions.length)
242
+ ? selectedOptions.map(option => (typeof option === 'string' ? { value: option } : option))
243
+ : [];
244
+ }
245
+ else {
246
+ this.structuredSelectedOptions = value ? [{ value }] : [];
247
+ }
248
+ }
393
249
  ariaLabelObserver() {
394
250
  handleAriaLabel(this);
395
251
  }
396
252
  valueUpdated() {
397
253
  if (this.multiple)
398
254
  return;
399
- this.updateSingleOptionAttrs();
255
+ this.clearSearchText();
400
256
  }
401
- selectedOptionsUpdated() {
402
- if (!this.multiple)
403
- return;
404
- this.updateMultipleOptionAttrs();
405
- }
406
- multilineOptionsChanged(newValue, oldValue) {
257
+ handleMultilineOptionsUpdate(newValue, oldValue) {
407
258
  if (newValue === oldValue)
408
259
  return;
409
260
  this.optionElements.forEach(element => (element.multiline = newValue));
410
261
  }
411
- dropdownOpenChanged(isOpen) {
262
+ openChanged(isOpen) {
412
263
  this.scheduledAfterRender.push(() => {
413
- const { multiple, multiSelectHeader, dropdownContainer } = this;
264
+ const { multiple, multiSelectHeader, popoverElement } = this;
414
265
  const height = (isOpen && multiple && (multiSelectHeader === null || multiSelectHeader === void 0 ? void 0 : multiSelectHeader.offsetHeight)) || 0;
415
266
  if (height) {
416
- dropdownContainer.style.setProperty('--comp-multi-select-header-height', `${height}px`);
267
+ popoverElement.style.setProperty('--comp-multi-select-header-height', `${height}px`);
417
268
  }
418
269
  else {
419
- dropdownContainer.style.removeProperty('--comp-multi-select-header-height');
270
+ popoverElement.style.removeProperty('--comp-multi-select-header-height');
420
271
  }
421
272
  });
422
273
  }
@@ -425,15 +276,17 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
425
276
  this.inputKeydownHandler(event);
426
277
  }
427
278
  onHostElementChange(event) {
428
- if (this.readonly)
279
+ if (this.readonly || this.disabled)
429
280
  return;
430
281
  if (event.target !== this.hostElement || this.hostElement.onchange)
431
282
  return;
432
283
  if (this.multiple) {
284
+ this.value = null;
433
285
  this.selectedOptions = event.detail.selectedOptions;
434
286
  }
435
287
  else {
436
288
  this.value = event.detail.value;
289
+ this.selectedOptions = [];
437
290
  }
438
291
  }
439
292
  onHostElementInput(event) {
@@ -475,54 +328,33 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
475
328
  }
476
329
  }
477
330
  handleFocusout(event) {
478
- this.prioritizeSearch = !isRelatedTargetWithinHost(event, this.hostElement) && this.searchable;
479
- }
480
- clickHandler(event) {
481
- const selectedOption = event.target.closest('q2-option');
482
- if (!selectedOption ||
483
- (selectedOption.hasAttribute('disabled') && selectedOption.getAttribute('disabled') !== 'false'))
484
- return;
485
- this.selectOption(selectedOption, true);
331
+ const isLeavingHost = isHostLosingFocus(event, this.hostElement);
332
+ if (isLeavingHost)
333
+ this.closeDropdown();
334
+ this.prioritizeSearch = !isLeavingHost && this.searchable;
486
335
  }
487
336
  /// Helpers ///
488
- getDefaultActiveIndex() {
489
- const firstSelected = this.optionElements.findIndex(element => element.selected && !element.hidden);
490
- if (firstSelected > -1)
491
- return firstSelected;
492
- const firstEnabled = this.optionElements.findIndex(element => !element.hidden);
493
- if (firstEnabled > -1)
494
- return firstEnabled;
495
- else
496
- return 0;
497
- }
498
- getLastEnabledIndex() {
499
- const enabledIndexes = this.optionElements.reduce((acc, element, index) => {
500
- if (!element.hidden && !element.disabled)
501
- acc.push(index);
502
- return acc;
503
- }, []);
504
- return enabledIndexes[enabledIndexes.length - 1];
505
- }
506
- setActiveOption() {
507
- if (!this.dropdownOpen)
508
- return;
509
- const activeIndex = this.activeIndex;
510
- this.optionElements.forEach((element, elementIndex) => {
511
- if (activeIndex === elementIndex) {
512
- element.active = true;
513
- this.activeOptionId = element.optionId;
514
- }
515
- else {
516
- element.active = false;
517
- }
337
+ async executeActionSheet(event) {
338
+ const result = await showActionSheetList(this, event);
339
+ this.handleSelectionChanges(result);
340
+ }
341
+ handleSelectionChanges(changeDetails) {
342
+ const { value = '', values = [] } = changeDetails;
343
+ const selectedOptionValues = values.map(value => value.value);
344
+ const { multiple } = this;
345
+ if (!this.hostElement.onchange) {
346
+ this.selectedOptions = selectedOptionValues;
347
+ }
348
+ this.change.emit({
349
+ value: multiple ? undefined : value,
350
+ selectedOptions: multiple ? selectedOptionValues : undefined,
518
351
  });
519
352
  }
520
- setFocusedOption() {
521
- const option = this.optionElements[this.activeIndex];
522
- if (!option)
523
- return;
524
- option.dispatchEvent(new FocusEvent('focus'));
525
- option.focus();
353
+ clearValue() {
354
+ const { multiple } = this;
355
+ this.value = '';
356
+ this.selectedOptions = [];
357
+ this.change.emit({ value: multiple ? undefined : '', selectedOptions: multiple ? [] : undefined });
526
358
  }
527
359
  calculateMultiSelectSelectedDisplay() {
528
360
  var _a;
@@ -541,130 +373,36 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
541
373
  const { firstSelectedOptionElement } = this;
542
374
  return ((firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.display) && loc(firstSelectedOptionElement.display)) || this.value || '';
543
375
  }
544
- updateSingleOptionAttrs() {
545
- const { value, guid, multilineOptions } = this;
546
- this.optionElements.forEach((element, index) => {
547
- element.selected = element.value === value;
548
- element.optionId = `q2-select-${guid}-option-${index}`;
549
- element.multiline = multilineOptions;
550
- });
551
- }
552
- updateMultipleOptionAttrs() {
553
- if (this.selectedOptions.length === 0) {
554
- this.onlyShowingSelected = false;
555
- }
556
- const { selectedOptions, onlyShowingSelected, guid, multilineOptions } = this;
557
- this.optionElements.forEach((element, index) => {
558
- element.selected = selectedOptions.includes(element.value);
559
- element._multiSelectHidden = onlyShowingSelected ? !element.selected : false;
560
- element.optionId = `q2-select-${guid}-option-${index}`;
561
- element.multiline = multilineOptions;
562
- });
563
- }
564
- focusSelectedSibling(option) {
565
- if (!this.onlyShowingSelected)
566
- return;
567
- const { visibleOptionElements } = this;
568
- if (visibleOptionElements.length < 2)
569
- return;
570
- const optionIndex = visibleOptionElements.indexOf(option);
571
- const visibleFocusIndex = optionIndex ? optionIndex - 1 : optionIndex + 1;
572
- const optionToFocus = visibleOptionElements[visibleFocusIndex];
573
- const focusIndex = this.optionElements.indexOf(optionToFocus);
574
- this.activeIndex = focusIndex;
575
- this.setFocusedOption();
576
- }
577
- selectOption(option, focusInputOnClose = false) {
578
- var _a;
579
- const value = (_a = option === null || option === void 0 ? void 0 : option.value) !== null && _a !== void 0 ? _a : '';
580
- if (this.multiple) {
581
- const isSelected = this.selectedOptions.includes(value);
582
- if (isSelected) {
583
- this.focusSelectedSibling(option);
584
- this.change.emit({
585
- selectedOptions: this.selectedOptions.filter(selectedValue => selectedValue !== value),
586
- });
587
- }
588
- else if (value) {
589
- this.change.emit({ selectedOptions: [...this.selectedOptions, value] });
590
- }
591
- }
592
- else {
593
- this.change.emit({ value });
594
- this.closeDropdown();
595
- if (focusInputOnClose)
596
- this.focusInput();
597
- }
598
- }
599
- scrollToActiveOption() {
600
- const activeOption = this.optionElements[this.activeIndex];
601
- activeOption === null || activeOption === void 0 ? void 0 : activeOption.scrollIntoView({ block: 'nearest' });
602
- }
603
376
  openDropdownWithoutActiveElement() {
604
- if (this.readonly)
377
+ if (this.readonly || this.disabled)
605
378
  return;
606
- this.activeIndex = undefined;
607
- this.setActiveOption();
608
- this.dropdownOpen = true;
609
- this.scheduledAfterRender.push(resizeIframe);
610
- }
611
- openDropdownWithActiveElement(activeIndex) {
612
- if (this.readonly)
613
- return;
614
- this.activeIndex = activeIndex;
615
- this.dropdownOpen = true;
616
- this.setActiveOption();
617
- this.scheduledAfterRender.push(() => {
618
- this.setFocusedOption();
619
- this.scrollToActiveOption();
620
- resizeIframe();
621
- });
379
+ this.optionList.setActiveElement(null);
380
+ this.open = true;
622
381
  }
623
382
  closeDropdown() {
624
- this.dropdownOpen = false;
625
- if (this.searchText) {
626
- this.searchText = '';
627
- this.input.emit({ query: '' });
628
- }
629
- this.scheduledAfterRender.push(resizeIframe);
383
+ this.open = false;
384
+ this.clearSearchText();
385
+ }
386
+ clearSearchText() {
387
+ if (!this.searchText)
388
+ return;
389
+ this.searchText = '';
390
+ this.input.emit({ query: '' });
630
391
  }
631
392
  toggleDropdown() {
632
- if (this.disabled)
393
+ if (this.readonly || this.disabled)
633
394
  return;
634
- if (this.dropdownOpen && !this.searchText) {
395
+ if (this.open && !this.searchText) {
635
396
  this.closeDropdown();
636
397
  }
637
398
  else {
638
399
  this.openDropdownWithoutActiveElement();
639
400
  }
640
401
  }
641
- adjustActiveOptionAndScroll(numToAdd) {
642
- this.activeIndex += numToAdd;
643
- this.setActiveOption();
644
- this.setFocusedOption();
645
- this.scrollToActiveOption();
646
- }
647
- setDefaultActiveElement() {
648
- this.activeIndex = this.getDefaultActiveIndex();
649
- this.setActiveOption();
650
- this.setFocusedOption();
651
- }
652
402
  focusInput() {
653
403
  var _a;
654
404
  (_a = this.inputField) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new FocusEvent('focus'));
655
405
  }
656
- getNextVisibleIndex(direction) {
657
- let index = this.activeIndex + direction;
658
- const { optionElements } = this;
659
- while (index >= 0 && index <= optionElements.length - 1) {
660
- const { display, visibility } = window.getComputedStyle(optionElements[index]);
661
- if (display !== 'none' && visibility !== 'hidden') {
662
- return index;
663
- }
664
- index = index + direction;
665
- }
666
- return -1;
667
- }
668
406
  setStatusMessage(message) {
669
407
  clearTimeout(this.statusMessageTimer);
670
408
  this.statusMessage = '';
@@ -679,7 +417,7 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
679
417
  checkSelectedDisplay() {
680
418
  let namedSlot = this.selectedDisplaySlot;
681
419
  const { value, multiple, selectedOptions, multilineOptions, firstSelectedOptionElement, prioritizeSearch } = this;
682
- const hasNoValue = !value && multiple && !selectedOptions.length;
420
+ const hasNoValue = !value && multiple && !(selectedOptions === null || selectedOptions === void 0 ? void 0 : selectedOptions.length);
683
421
  if (prioritizeSearch || !multilineOptions || hasNoValue)
684
422
  return this.clearSelectedDisplay();
685
423
  if (!firstSelectedOptionElement || firstSelectedOptionElement.display)
@@ -708,6 +446,9 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
708
446
  return;
709
447
  selectedDisplaySlot.style.setProperty('--comp-selected-display-height', '44px');
710
448
  }
449
+ shouldClearSearchText(event) {
450
+ return this.searchable && !!this.searchText && event.key === 'Escape';
451
+ }
711
452
  /// DOM ///
712
453
  renderCustomDisplay() {
713
454
  const hasSelectedDisplay = this.checkSelectedDisplay();
@@ -722,23 +463,24 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
722
463
  this.errors.length > 0 &&
723
464
  this.errors.map(error => loc(error))) ||
724
465
  (this.invalid && ['tecton.element.select.invalid']) ||
725
- [], disabled: this.disabled, optional: this.optional, readonly: this.readonly, hideLabel: this.hideLabel, ariaExpanded: `${!!this.dropdownOpen}`, ariaOwns: "dropdown", ariaHaspopup: "listbox", role: this.searchable ? 'combobox' : null, pseudo: showAsPseudo, "test-id": "toggleDropdown", "hide-messages": true, iconRight: "chevron-down", onClick: this.inputClickHandler, onInput: this.inputInputHandler, onKeyDown: this.inputKeydownHandler, onFocus: this.inputFocusHandler, onBlur: this.inputBlurHandler, onChange: this.inputChangeHandler, badgeValue: this.badgeValue, badgeTheme: this.isComponentFocused ? 'primary' : undefined }, this.renderCustomDisplay()), h("div", { class: "custom-display-content", hidden: !this.hasCustomDisplay || !!this.searchText, onClick: this.onCustomDisplayClick }, h("slot", { name: "q2-select-display" })), this.optionsDropdown()));
466
+ [], disabled: this.disabled, optional: this.optional, readonly: this.readonly, placeholder: this.placeholder || undefined, hideLabel: this.hideLabel, ariaExpanded: `${!!this.open}`, ariaOwns: "option-list", ariaHaspopup: "listbox", role: this.searchable ? 'combobox' : null, pseudo: showAsPseudo, "test-id": "toggleDropdown", "hide-messages": true, iconRight: "chevron-down", onClick: this.inputClickHandler, onInput: this.inputInputHandler, onKeyDown: this.inputKeydownHandler, onFocus: this.inputFocusHandler, onBlur: this.inputBlurHandler, onChange: this.inputChangeHandler, badgeValue: this.badgeValue, badgeTheme: this.inputFocused ? 'primary' : undefined }, this.renderCustomDisplay()), h("div", { class: "custom-display-content", hidden: !this.hasCustomDisplay || !!this.searchText, onClick: this.onCustomDisplayClick }, h("slot", { name: "q2-select-display" })), this.optionsDropdown()));
726
467
  }
727
468
  optionsDropdown() {
728
- const dropDirection = this.privatePopDirection === 'up' ? 'dropup' : '';
729
- return (h("div", { class: `q2-select-dropdown q2-element-dropdown ${dropDirection}`, ref: el => (this.dropdownContainer = el), onKeyDown: this.dropdownKeydownHandler, onFocusout: this.dropdownFocusoutHandler }, this.multiple ? this.visibilityToggle() : '', h("div", { class: "q2-select-options", id: "dropdown", role: "listbox" }, h("slot", null))));
469
+ return (h("q2-popover", { ref: el => (this.popoverElement = el), controlElement: this.inputField, open: this.open, minHeight: this.popoverMinHeight, direction: this.popDirection, onPopoverStateChanged: this.popoverStateChanged, block: true }, this.multiple ? this.visibilityToggle() : '', h("q2-option-list", { ref: el => (this.optionList = el), id: "option-list", "show-selected": this.showSelected, multiple: this.multiple, selectedOptions: this.structuredSelectedOptions, onChange: this.onOptionListChange }, h("slot", null))));
730
470
  }
731
471
  visibilityToggle() {
732
- const selectedOptionsCount = this.selectedOptions.length;
733
- return (h("div", { class: "multi-select-header", ref: el => (this.multiSelectHeader = el) }, loc('tecton.element.select.multiHeader.showing'), h("q2-btn", { class: `show-all-options${this.onlyShowingSelected ? '' : ' selected'}`, badge: true, "aria-selected": !this.onlyShowingSelected || undefined, "test-id": "allOptionsButton", onClick: this.showAllOptions, label: loc('tecton.element.select.multiHeader.allAriaLabel'), "hide-label": true }, loc('tecton.element.select.multiHeader.all')), h("q2-btn", { class: `show-selected-options${this.onlyShowingSelected ? ' selected' : ''}`, "aria-selected": this.onlyShowingSelected || undefined, disabled: this.selectedOptions.length === 0, badge: true, "test-id": "selectedOptionsButton", onClick: this.showSelectedOptions, label: loc('tecton.element.select.multiHeader.selectedAriaLabel', [selectedOptionsCount]), "hide-label": true }, loc('tecton.element.select.multiHeader.selected', [selectedOptionsCount]))));
472
+ var _a, _b;
473
+ const selectedOptionsCount = (_b = (_a = this.selectedOptions) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
474
+ const { showSelected } = this;
475
+ return (h("div", { class: "multi-select-header", ref: el => (this.multiSelectHeader = el) }, h("span", null, loc('tecton.element.select.multiHeader.showing')), h("q2-btn", { class: showSelected ? '' : 'selected', badge: true, "aria-selected": !showSelected || undefined, "test-id": "allOptionsButton", onClick: this.showAllOptions, onKeyDown: this.visibilityToggleKeyDown, label: loc('tecton.element.select.multiHeader.allAriaLabel'), "hide-label": true }, loc('tecton.element.select.multiHeader.all')), h("q2-btn", { class: showSelected ? 'selected' : '', "aria-selected": showSelected || undefined, disabled: selectedOptionsCount === 0, badge: true, "test-id": "selectedOptionsButton", onClick: this.showSelectedOptions, onKeyDown: this.visibilityToggleKeyDown, label: loc('tecton.element.select.multiHeader.selectedAriaLabel', [selectedOptionsCount]), "hide-label": true }, loc('tecton.element.select.multiHeader.selected', [selectedOptionsCount]))));
734
476
  }
735
477
  get hostElement() { return this; }
736
478
  static get watchers() { return {
479
+ "value": ["buildStructuredSelectedOptions", "valueUpdated"],
480
+ "selectedOptions": ["buildStructuredSelectedOptions"],
737
481
  "ariaLabel": ["ariaLabelObserver"],
738
- "value": ["valueUpdated"],
739
- "selectedOptions": ["selectedOptionsUpdated"],
740
- "multilineOptions": ["multilineOptionsChanged"],
741
- "dropdownOpen": ["dropdownOpenChanged"]
482
+ "multilineOptions": ["handleMultilineOptionsUpdate"],
483
+ "open": ["openChanged"]
742
484
  }; }
743
485
  static get style() { return stylesCss; }
744
486
  }, [1, "q2-select", {
@@ -746,7 +488,7 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
746
488
  "hideLabel": [1540, "hide-label"],
747
489
  "value": [1025],
748
490
  "ariaLabel": [1537, "aria-label"],
749
- "selectedOptions": [1032, "selected-options"],
491
+ "selectedOptions": [1040],
750
492
  "disabled": [516],
751
493
  "readonly": [516],
752
494
  "invalid": [516],
@@ -757,20 +499,22 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
757
499
  "searchable": [516],
758
500
  "multilineOptions": [516, "multiline-options"],
759
501
  "optional": [516],
760
- "dropdownOpen": [32],
761
- "onlyShowingSelected": [32],
762
- "activeOptionId": [32],
502
+ "placeholder": [513],
503
+ "hoist": [4],
504
+ "open": [32],
505
+ "showSelected": [32],
763
506
  "searchText": [32],
764
507
  "hasCustomDisplay": [32],
765
508
  "inputFocused": [32],
766
509
  "statusMessage": [32],
767
- "prioritizeSearch": [32]
768
- }, [[0, "keydown", "keydownHandler"], [0, "change", "onHostElementChange"], [0, "input", "onHostElementInput"], [0, "focus", "delegateFocus"], [0, "focusout", "handleFocusout"], [0, "click", "clickHandler"]]]);
510
+ "prioritizeSearch": [32],
511
+ "structuredSelectedOptions": [32]
512
+ }, [[0, "keydown", "keydownHandler"], [0, "change", "onHostElementChange"], [0, "input", "onHostElementInput"], [0, "focus", "delegateFocus"], [0, "focusout", "handleFocusout"]]]);
769
513
  function defineCustomElement$1() {
770
514
  if (typeof customElements === "undefined") {
771
515
  return;
772
516
  }
773
- const components = ["q2-select", "click-elsewhere", "q2-badge", "q2-btn", "q2-icon", "q2-input", "q2-loading"];
517
+ const components = ["q2-select", "click-elsewhere", "q2-badge", "q2-btn", "q2-icon", "q2-input", "q2-loading", "q2-option-list", "q2-popover"];
774
518
  components.forEach(tagName => { switch (tagName) {
775
519
  case "q2-select":
776
520
  if (!customElements.get(tagName)) {
@@ -779,30 +523,40 @@ function defineCustomElement$1() {
779
523
  break;
780
524
  case "click-elsewhere":
781
525
  if (!customElements.get(tagName)) {
782
- defineCustomElement$7();
526
+ defineCustomElement$9();
783
527
  }
784
528
  break;
785
529
  case "q2-badge":
786
530
  if (!customElements.get(tagName)) {
787
- defineCustomElement$6();
531
+ defineCustomElement$8();
788
532
  }
789
533
  break;
790
534
  case "q2-btn":
791
535
  if (!customElements.get(tagName)) {
792
- defineCustomElement$5();
536
+ defineCustomElement$7();
793
537
  }
794
538
  break;
795
539
  case "q2-icon":
796
540
  if (!customElements.get(tagName)) {
797
- defineCustomElement$4();
541
+ defineCustomElement$6();
798
542
  }
799
543
  break;
800
544
  case "q2-input":
801
545
  if (!customElements.get(tagName)) {
802
- defineCustomElement$3();
546
+ defineCustomElement$5();
803
547
  }
804
548
  break;
805
549
  case "q2-loading":
550
+ if (!customElements.get(tagName)) {
551
+ defineCustomElement$4();
552
+ }
553
+ break;
554
+ case "q2-option-list":
555
+ if (!customElements.get(tagName)) {
556
+ defineCustomElement$3();
557
+ }
558
+ break;
559
+ case "q2-popover":
806
560
  if (!customElements.get(tagName)) {
807
561
  defineCustomElement$2();
808
562
  }