q2-tecton-elements 1.12.0-alpha.0 → 1.13.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 (234) hide show
  1. package/dist/cjs/click-elsewhere.cjs.entry.js +5 -7
  2. package/dist/cjs/{icons-4595ee47.js → icons-08ffe5c9.js} +394 -384
  3. package/dist/cjs/{index-c2e53804.js → index-7febb200.js} +112 -65
  4. package/dist/cjs/{index-a55d3c34.js → index-dd823ee6.js} +27 -14
  5. package/dist/cjs/loader.cjs.js +3 -3
  6. package/dist/cjs/q2-avatar.cjs.entry.js +2 -2
  7. package/dist/cjs/q2-badge.cjs.entry.js +43 -0
  8. package/dist/cjs/q2-btn_2.cjs.entry.js +13 -13
  9. package/dist/cjs/q2-calendar.cjs.entry.js +53 -59
  10. package/dist/cjs/q2-card.cjs.entry.js +127 -0
  11. package/dist/cjs/q2-carousel-pane.cjs.entry.js +5 -5
  12. package/dist/cjs/q2-carousel.cjs.entry.js +318 -106
  13. package/dist/cjs/q2-checkbox-group.cjs.entry.js +6 -3
  14. package/dist/cjs/q2-checkbox.cjs.entry.js +18 -10
  15. package/dist/cjs/q2-dropdown-item.cjs.entry.js +7 -7
  16. package/dist/cjs/q2-dropdown.cjs.entry.js +8 -17
  17. package/dist/cjs/q2-editable-field.cjs.entry.js +5 -8
  18. package/dist/cjs/q2-icon.cjs.entry.js +3 -3
  19. package/dist/cjs/q2-input.cjs.entry.js +439 -437
  20. package/dist/cjs/q2-loading-element.cjs.entry.js +3 -3
  21. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-message.cjs.entry.js +5 -5
  23. package/dist/cjs/q2-optgroup.cjs.entry.js +3 -3
  24. package/dist/cjs/q2-option-list.cjs.entry.js +359 -0
  25. package/dist/cjs/q2-option.cjs.entry.js +3 -11
  26. package/dist/cjs/q2-pagination.cjs.entry.js +116 -0
  27. package/dist/cjs/q2-pill.cjs.entry.js +137 -0
  28. package/dist/cjs/q2-radio-group.cjs.entry.js +43 -18
  29. package/dist/cjs/q2-radio.cjs.entry.js +21 -4
  30. package/dist/cjs/q2-section.cjs.entry.js +5 -7
  31. package/dist/cjs/q2-select.cjs.entry.js +23 -26
  32. package/dist/cjs/q2-stepper-pane.cjs.entry.js +42 -4
  33. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +278 -0
  34. package/dist/cjs/q2-stepper.cjs.entry.js +10 -12
  35. package/dist/cjs/q2-tab-container.cjs.entry.js +12 -8
  36. package/dist/cjs/q2-tab-pane.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-tag.cjs.entry.js +94 -0
  38. package/dist/cjs/q2-tecton-elements.cjs.js +3 -3
  39. package/dist/cjs/q2-textarea.cjs.entry.js +8 -8
  40. package/dist/cjs/{shapes-086c0365.js → shapes-305746b5.js} +9 -16
  41. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -5
  42. package/dist/collection/collection-manifest.json +10 -3
  43. package/dist/collection/components/click-elsewhere/index.js +4 -6
  44. package/dist/collection/components/q2-badge/index.js +148 -0
  45. package/dist/collection/components/q2-badge/styles.css +134 -0
  46. package/dist/collection/components/q2-btn/index.js +14 -14
  47. package/dist/collection/components/q2-btn/styles.css +1 -1
  48. package/dist/collection/components/q2-calendar/helpers.js +22 -20
  49. package/dist/collection/components/q2-calendar/index.js +44 -37
  50. package/dist/collection/components/q2-calendar/validation.js +4 -2
  51. package/dist/collection/components/q2-card/index.js +347 -0
  52. package/dist/collection/components/q2-card/styles.css +177 -0
  53. package/dist/collection/components/q2-carousel/index.js +11 -16
  54. package/dist/collection/components/q2-carousel/styles.css +3 -3
  55. package/dist/collection/components/q2-carousel-pane/index.js +2 -2
  56. package/dist/collection/components/q2-carousel-pane/styles.css +8 -3
  57. package/dist/collection/components/q2-checkbox/index.js +37 -12
  58. package/dist/collection/components/q2-checkbox-group/index.js +22 -1
  59. package/dist/collection/components/q2-dropdown/index.js +6 -15
  60. package/dist/collection/components/q2-dropdown-item/index.js +5 -5
  61. package/dist/collection/components/q2-editable-field/index.js +3 -6
  62. package/dist/collection/components/q2-icon/icons.js +393 -383
  63. package/dist/collection/components/q2-input/formatting/credit-card.js +15 -13
  64. package/dist/collection/components/q2-input/formatting/currency.js +162 -162
  65. package/dist/collection/components/q2-input/formatting/date.js +1 -1
  66. package/dist/collection/components/q2-input/formatting/generic.js +7 -8
  67. package/dist/collection/components/q2-input/formatting/number.js +6 -9
  68. package/dist/collection/components/q2-input/formatting/numeric.js +5 -5
  69. package/dist/collection/components/q2-input/formatting/phone.js +215 -215
  70. package/dist/collection/components/q2-input/formatting/postal.js +1 -1
  71. package/dist/collection/components/q2-input/index.js +81 -25
  72. package/dist/collection/components/q2-input/styles.css +19 -14
  73. package/dist/collection/components/q2-loading/index.js +4 -4
  74. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js +1 -1
  75. package/dist/collection/components/q2-loading/skeleton/shapes.js +8 -15
  76. package/dist/collection/components/q2-message/index.js +3 -3
  77. package/dist/collection/components/q2-optgroup/index.js +1 -1
  78. package/dist/collection/components/q2-option/index.js +19 -25
  79. package/dist/collection/components/q2-option/styles.css +5 -0
  80. package/dist/collection/components/q2-option-list/index.js +648 -0
  81. package/dist/collection/components/q2-option-list/styles.css +128 -0
  82. package/dist/collection/components/q2-pagination/index.js +275 -0
  83. package/dist/collection/components/q2-pagination/styles.css +120 -0
  84. package/dist/collection/components/q2-pill/index.js +324 -0
  85. package/dist/collection/components/q2-pill/styles.css +229 -0
  86. package/dist/collection/components/q2-radio/index.js +38 -1
  87. package/dist/collection/components/q2-radio-group/index.js +66 -24
  88. package/dist/collection/components/q2-section/index.js +5 -7
  89. package/dist/collection/components/q2-select/index.js +40 -25
  90. package/dist/collection/components/q2-stepper/index.js +8 -10
  91. package/dist/collection/components/q2-stepper/styles.css +5 -5
  92. package/dist/collection/components/q2-stepper-pane/index.js +133 -5
  93. package/dist/collection/components/q2-stepper-vertical/index.js +346 -0
  94. package/dist/collection/components/q2-stepper-vertical/styles.css +273 -0
  95. package/dist/collection/components/q2-tab-container/index.js +11 -7
  96. package/dist/collection/components/q2-tag/index.js +200 -0
  97. package/dist/collection/components/q2-tag/styles.css +141 -0
  98. package/dist/collection/components/q2-textarea/index.js +6 -6
  99. package/dist/collection/components/tecton-tab-pane/index.js +3 -10
  100. package/dist/collection/utils/index.js +25 -13
  101. package/dist/esm/click-elsewhere.entry.js +5 -7
  102. package/dist/esm/{icons-3ee662ea.js → icons-b1e11526.js} +394 -384
  103. package/dist/esm/{index-ec6660af.js → index-0ff8de52.js} +27 -15
  104. package/dist/esm/{index-be8376c0.js → index-dbfb3ecc.js} +112 -65
  105. package/dist/esm/loader.js +3 -3
  106. package/dist/esm/polyfills/css-shim.js +1 -1
  107. package/dist/esm/q2-avatar.entry.js +2 -2
  108. package/dist/esm/q2-badge.entry.js +39 -0
  109. package/dist/esm/q2-btn_2.entry.js +13 -13
  110. package/dist/esm/q2-calendar.entry.js +53 -59
  111. package/dist/esm/q2-card.entry.js +123 -0
  112. package/dist/esm/q2-carousel-pane.entry.js +5 -5
  113. package/dist/esm/q2-carousel.entry.js +318 -106
  114. package/dist/esm/q2-checkbox-group.entry.js +6 -3
  115. package/dist/esm/q2-checkbox.entry.js +18 -10
  116. package/dist/esm/q2-dropdown-item.entry.js +7 -7
  117. package/dist/esm/q2-dropdown.entry.js +8 -17
  118. package/dist/esm/q2-editable-field.entry.js +5 -8
  119. package/dist/esm/q2-icon.entry.js +3 -3
  120. package/dist/esm/q2-input.entry.js +439 -437
  121. package/dist/esm/q2-loading-element.entry.js +3 -3
  122. package/dist/esm/q2-loc.entry.js +2 -2
  123. package/dist/esm/q2-message.entry.js +5 -5
  124. package/dist/esm/q2-optgroup.entry.js +3 -3
  125. package/dist/esm/q2-option-list.entry.js +355 -0
  126. package/dist/esm/q2-option.entry.js +3 -11
  127. package/dist/esm/q2-pagination.entry.js +112 -0
  128. package/dist/esm/q2-pill.entry.js +133 -0
  129. package/dist/esm/q2-radio-group.entry.js +43 -18
  130. package/dist/esm/q2-radio.entry.js +21 -4
  131. package/dist/esm/q2-section.entry.js +5 -7
  132. package/dist/esm/q2-select.entry.js +23 -26
  133. package/dist/esm/q2-stepper-pane.entry.js +42 -4
  134. package/dist/esm/q2-stepper-vertical.entry.js +274 -0
  135. package/dist/esm/q2-stepper.entry.js +10 -12
  136. package/dist/esm/q2-tab-container.entry.js +12 -8
  137. package/dist/esm/q2-tab-pane.entry.js +1 -1
  138. package/dist/esm/q2-tag.entry.js +90 -0
  139. package/dist/esm/q2-tecton-elements.js +3 -3
  140. package/dist/esm/q2-textarea.entry.js +8 -8
  141. package/dist/esm/{shapes-81c11dfe.js → shapes-cff4e1f0.js} +9 -16
  142. package/dist/esm/tecton-tab-pane.entry.js +2 -5
  143. package/dist/loader/index.d.ts +0 -1
  144. package/dist/q2-tecton-elements/{p-75e87cca.entry.js → p-00e8f782.entry.js} +1 -1
  145. package/dist/q2-tecton-elements/p-0900bec1.entry.js +1 -0
  146. package/dist/q2-tecton-elements/p-10264ecb.entry.js +1 -0
  147. package/dist/q2-tecton-elements/p-123cdfb9.entry.js +1 -0
  148. package/dist/q2-tecton-elements/{p-fbf7c5e6.entry.js → p-1305ec5f.entry.js} +1 -1
  149. package/dist/q2-tecton-elements/p-148391d6.entry.js +1 -0
  150. package/dist/q2-tecton-elements/p-1dfaee64.entry.js +1 -0
  151. package/dist/q2-tecton-elements/{p-32ad664c.entry.js → p-221abbf6.entry.js} +1 -1
  152. package/dist/q2-tecton-elements/{p-c90a6016.js → p-255b2b4c.js} +1 -1
  153. package/dist/q2-tecton-elements/p-27736b6b.entry.js +1 -0
  154. package/dist/q2-tecton-elements/p-2846ab94.entry.js +1 -0
  155. package/dist/q2-tecton-elements/p-2bc1de01.entry.js +1 -0
  156. package/dist/q2-tecton-elements/{p-8ea2c4f7.entry.js → p-2c15414c.entry.js} +1 -1
  157. package/dist/q2-tecton-elements/p-2caa89fd.js +1 -0
  158. package/dist/q2-tecton-elements/p-327cca41.entry.js +1 -0
  159. package/dist/q2-tecton-elements/p-3a420dbf.entry.js +1 -0
  160. package/dist/q2-tecton-elements/p-3abcb09d.entry.js +1 -0
  161. package/dist/q2-tecton-elements/p-3fe98e3e.entry.js +1 -0
  162. package/dist/q2-tecton-elements/{p-bb2e110a.entry.js → p-430a979b.entry.js} +1 -1
  163. package/dist/q2-tecton-elements/{p-7e6fc65d.entry.js → p-45eb7739.entry.js} +1 -1
  164. package/dist/q2-tecton-elements/{p-750bcd33.entry.js → p-49b2abc4.entry.js} +1 -1
  165. package/dist/q2-tecton-elements/{p-9b50c3c3.entry.js → p-4ab30466.entry.js} +1 -1
  166. package/dist/q2-tecton-elements/p-50e218c7.entry.js +1 -0
  167. package/dist/q2-tecton-elements/p-5bbf2bfe.entry.js +1 -0
  168. package/dist/q2-tecton-elements/{p-ac859fcc.entry.js → p-6fec9235.entry.js} +1 -1
  169. package/dist/q2-tecton-elements/p-824aebd9.js +1 -0
  170. package/dist/q2-tecton-elements/p-a4ae89cc.entry.js +1 -0
  171. package/dist/q2-tecton-elements/{p-50967020.entry.js → p-a5562aaa.entry.js} +1 -1
  172. package/dist/q2-tecton-elements/p-ae4fed23.entry.js +1 -0
  173. package/dist/q2-tecton-elements/p-b2302cd3.entry.js +1 -0
  174. package/dist/q2-tecton-elements/p-c20cbb2d.entry.js +1 -0
  175. package/dist/q2-tecton-elements/p-ca7a3380.entry.js +1 -0
  176. package/dist/q2-tecton-elements/{p-a6f8d09a.entry.js → p-d33e152c.entry.js} +1 -1
  177. package/dist/q2-tecton-elements/{p-9024859f.entry.js → p-d5218cd6.entry.js} +1 -1
  178. package/dist/q2-tecton-elements/p-d52b435e.entry.js +1 -0
  179. package/dist/q2-tecton-elements/p-dd02cf8d.js +1 -0
  180. package/dist/q2-tecton-elements/{p-07a5d703.entry.js → p-e0e7ae8b.entry.js} +1 -1
  181. package/dist/q2-tecton-elements/{p-7e030e92.entry.js → p-ede12fc1.entry.js} +1 -1
  182. package/dist/q2-tecton-elements/{p-df182f61.entry.js → p-fdfbe75b.entry.js} +1 -1
  183. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  184. package/dist/test/elements/q2-tag-test.js +151 -0
  185. package/dist/test/helpers.js +20 -9
  186. package/dist/types/components/q2-badge/index.d.ts +13 -0
  187. package/dist/types/components/q2-btn/index.d.ts +3 -3
  188. package/dist/types/components/q2-calendar/helpers.d.ts +1 -0
  189. package/dist/types/components/q2-calendar/index.d.ts +2 -1
  190. package/dist/types/components/q2-calendar/validation.d.ts +1 -1
  191. package/dist/types/components/q2-card/index.d.ts +35 -0
  192. package/dist/types/components/q2-checkbox/index.d.ts +3 -1
  193. package/dist/types/components/q2-checkbox-group/index.d.ts +1 -0
  194. package/dist/types/components/q2-dropdown/index.d.ts +1 -1
  195. package/dist/types/components/q2-editable-field/index.d.ts +1 -1
  196. package/dist/types/components/q2-input/formatting/credit-card.d.ts +1 -3
  197. package/dist/types/components/q2-input/index.d.ts +5 -2
  198. package/dist/types/components/q2-option/index.d.ts +2 -3
  199. package/dist/types/components/q2-option-list/index.d.ts +62 -0
  200. package/dist/types/components/q2-pagination/index.d.ts +30 -0
  201. package/dist/types/components/q2-pill/index.d.ts +39 -0
  202. package/dist/types/components/q2-radio/index.d.ts +4 -1
  203. package/dist/types/components/q2-radio-group/index.d.ts +5 -1
  204. package/dist/types/components/q2-select/index.d.ts +2 -1
  205. package/dist/types/components/q2-stepper/index.d.ts +1 -1
  206. package/dist/types/components/q2-stepper-pane/index.d.ts +16 -1
  207. package/dist/types/components/q2-stepper-vertical/index.d.ts +52 -0
  208. package/dist/types/components/q2-tab-container/index.d.ts +1 -1
  209. package/dist/types/components/q2-tag/index.d.ts +28 -0
  210. package/dist/types/components/tecton-tab-pane/index.d.ts +2 -2
  211. package/dist/types/components.d.ts +235 -11
  212. package/dist/types/global.d.ts +1 -0
  213. package/dist/types/stencil-public-runtime.d.ts +6 -4
  214. package/dist/types/util.d.ts +2 -10
  215. package/dist/types/utils/index.d.ts +1 -0
  216. package/dist/types/workspace/workspace/Tecton_tecton-production_master/packages/q2-tecton-elements/.stencil/test/elements/q2-tag-test.d.ts +1 -0
  217. package/dist/types/workspace/workspace/{_production_release_1.11.0-alpha → Tecton_tecton-production_master}/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +6 -3
  218. package/package.json +13 -13
  219. package/dist/q2-tecton-elements/p-06fff43d.entry.js +0 -1
  220. package/dist/q2-tecton-elements/p-080839ed.js +0 -1
  221. package/dist/q2-tecton-elements/p-29a37091.entry.js +0 -1
  222. package/dist/q2-tecton-elements/p-37aba2a4.js +0 -1
  223. package/dist/q2-tecton-elements/p-4cd00f1a.js +0 -1
  224. package/dist/q2-tecton-elements/p-6702eb4d.entry.js +0 -1
  225. package/dist/q2-tecton-elements/p-768e3a5d.entry.js +0 -1
  226. package/dist/q2-tecton-elements/p-843b1ee9.entry.js +0 -1
  227. package/dist/q2-tecton-elements/p-943c7745.entry.js +0 -1
  228. package/dist/q2-tecton-elements/p-95a73559.entry.js +0 -1
  229. package/dist/q2-tecton-elements/p-9a977ee6.entry.js +0 -1
  230. package/dist/q2-tecton-elements/p-b281c349.entry.js +0 -1
  231. package/dist/q2-tecton-elements/p-c5e55b9f.entry.js +0 -1
  232. package/dist/q2-tecton-elements/p-ccbe9158.entry.js +0 -1
  233. package/dist/q2-tecton-elements/p-db6f90ac.entry.js +0 -1
  234. package/dist/q2-tecton-elements/p-fa6eea5c.entry.js +0 -1
@@ -0,0 +1,648 @@
1
+ import { Component, Prop, h, Event, State, Element, Host, Method, Watch, Listen, } from '@stencil/core';
2
+ import { isEventFromElement, overrideFocus } from 'src/utils';
3
+ export class Q2OptionList {
4
+ constructor() {
5
+ this.role = 'listbox';
6
+ this.direction = 'down';
7
+ this.selectedOptions = [];
8
+ this.scheduledAfterRender = [];
9
+ /// Event Handlers ///
10
+ /* tslint:disable:cyclomatic-complexity */
11
+ this.keydownHandler = (event, ignoreSelectionEvents) => {
12
+ event.stopPropagation();
13
+ const { activeIndex, customSearch, allOptions } = this;
14
+ const { key, shiftKey } = event;
15
+ let newOption;
16
+ switch (key) {
17
+ case ' ':
18
+ case 'Enter':
19
+ if (ignoreSelectionEvents) {
20
+ this.setDefaultActiveElement();
21
+ break;
22
+ }
23
+ event.preventDefault();
24
+ newOption = allOptions.find(element => element.active);
25
+ if (!newOption || newOption.disabled)
26
+ break;
27
+ this.selectOption(newOption.value);
28
+ break;
29
+ case 'ArrowUp':
30
+ event.preventDefault();
31
+ const isFirstOption = activeIndex === 0;
32
+ if (isFirstOption)
33
+ break;
34
+ if (activeIndex === undefined) {
35
+ this.setDefaultActiveElement();
36
+ }
37
+ else {
38
+ const nextIndex = this.getNextVisibleIndex(-1);
39
+ if (nextIndex === -1)
40
+ break;
41
+ this.adjustActiveOptionAndScroll(nextIndex - activeIndex);
42
+ }
43
+ break;
44
+ case 'ArrowDown':
45
+ event.preventDefault();
46
+ const isLastOption = activeIndex === allOptions.length - 1;
47
+ if (isLastOption)
48
+ break;
49
+ if (activeIndex === undefined) {
50
+ this.setDefaultActiveElement();
51
+ }
52
+ else {
53
+ const nextIndex = this.getNextVisibleIndex(1);
54
+ if (nextIndex === -1)
55
+ break;
56
+ this.adjustActiveOptionAndScroll(nextIndex - activeIndex);
57
+ }
58
+ break;
59
+ case 'Home':
60
+ event.preventDefault();
61
+ this.openDropdownWithActiveElement(0);
62
+ break;
63
+ case 'End':
64
+ event.preventDefault();
65
+ this.openDropdownWithActiveElement(allOptions.length - 1);
66
+ break;
67
+ case 'PageUp':
68
+ event.preventDefault();
69
+ this.openDropdownWithActiveElement(Math.max(activeIndex - 10, 0));
70
+ break;
71
+ case 'PageDown':
72
+ event.preventDefault();
73
+ this.openDropdownWithActiveElement(Math.min(activeIndex + 10, allOptions.length - 1));
74
+ break;
75
+ case 'Tab':
76
+ if (ignoreSelectionEvents)
77
+ break;
78
+ if (shiftKey)
79
+ break;
80
+ newOption = allOptions.find(element => element.active);
81
+ if (!newOption || newOption.disabled)
82
+ return;
83
+ this.selectOption(newOption.value);
84
+ break;
85
+ case 'Esc':
86
+ case 'Escape':
87
+ if (this.noSelect)
88
+ this.setActiveElement(null);
89
+ this.open = false;
90
+ break;
91
+ default:
92
+ if (customSearch)
93
+ break;
94
+ if (!key.match(/^[A-Za-z0-9]$/))
95
+ break;
96
+ // search in non-searchable select: alpha-numeric only
97
+ this.searchAndFocus(key);
98
+ break;
99
+ }
100
+ };
101
+ /* tslint:enable:cyclomatic-complexity */
102
+ this.focusoutHandler = (event) => {
103
+ const { relatedTarget } = event;
104
+ const isInDropdown = this.allOptions.includes(relatedTarget);
105
+ const isInLightDom = !isInDropdown && this.hostElement.contains(relatedTarget);
106
+ if (isInDropdown || isInLightDom) {
107
+ event.stopPropagation();
108
+ }
109
+ };
110
+ this.clickHandler = (event) => {
111
+ const target = event.target;
112
+ if (target.localName !== 'q2-option' || target.disabled) {
113
+ return;
114
+ }
115
+ this.selectOption(target.value);
116
+ };
117
+ }
118
+ /// LifeCycle Hooks ///
119
+ componentWillLoad() {
120
+ this.hasOptions = !!this.hostElement.querySelectorAll('q2-option').length;
121
+ }
122
+ componentDidLoad() {
123
+ overrideFocus(this.hostElement);
124
+ this.checkOptions();
125
+ }
126
+ componentDidRender() {
127
+ this.scheduledAfterRender.forEach(fn => fn());
128
+ this.scheduledAfterRender = [];
129
+ }
130
+ /// Getters ///
131
+ get allOptions() {
132
+ return this.getRootSlot(this.hostElement);
133
+ }
134
+ /// Helpers ///
135
+ checkOptions() {
136
+ const { noSelect, type, allOptions } = this;
137
+ if (!noSelect && !type)
138
+ return;
139
+ const optionRole = type === 'menu' ? 'menuitem' : 'option';
140
+ allOptions.forEach(option => {
141
+ if (noSelect)
142
+ option.noSelect = true;
143
+ if (type)
144
+ option.role = optionRole;
145
+ });
146
+ }
147
+ getRootSlot(element) {
148
+ var _a;
149
+ const slot = element.querySelector('slot');
150
+ const assignedElements = (_a = slot === null || slot === void 0 ? void 0 : slot.assignedElements()) !== null && _a !== void 0 ? _a : Array.from(element.children);
151
+ const hasAnotherSlot = !!assignedElements.length && assignedElements[0].tagName === 'SLOT';
152
+ if (hasAnotherSlot) {
153
+ return this.getRootSlot(assignedElements[0]);
154
+ }
155
+ else {
156
+ return assignedElements;
157
+ }
158
+ }
159
+ scrollToActiveOption() {
160
+ const activeOption = this.allOptions[this.activeIndex];
161
+ activeOption === null || activeOption === void 0 ? void 0 : activeOption.scrollIntoView({ block: 'nearest' });
162
+ }
163
+ resizeIframe() {
164
+ var _a, _b;
165
+ return (_b = (_a = window.TectonElements) === null || _a === void 0 ? void 0 : _a.resizeIframe) === null || _b === void 0 ? void 0 : _b.call(_a);
166
+ }
167
+ openDropdownWithActiveElement(activeIndex) {
168
+ if (this.disabled)
169
+ return;
170
+ this.activeIndex = activeIndex;
171
+ this.open = true;
172
+ this.setActiveOption();
173
+ this.setFocusedOption();
174
+ this.scheduledAfterRender.push(() => {
175
+ this.scrollToActiveOption();
176
+ this.resizeIframe();
177
+ });
178
+ }
179
+ getDefaultActiveIndex() {
180
+ const { allOptions } = this;
181
+ const firstSelected = allOptions.findIndex(element => element.selected);
182
+ if (firstSelected > -1)
183
+ return firstSelected;
184
+ const firstEnabled = allOptions.findIndex(element => !element.hidden);
185
+ if (firstEnabled > -1)
186
+ return firstEnabled;
187
+ return 0;
188
+ }
189
+ updateSingleOptionAttrs() {
190
+ var _a, _b;
191
+ const { allOptions, selectedOptions } = this;
192
+ const singleValue = (_b = (_a = selectedOptions[0]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : undefined;
193
+ allOptions.forEach(element => {
194
+ element.selected = element.value === singleValue;
195
+ });
196
+ }
197
+ updateMultipleOptionAttrs() {
198
+ const { allOptions, selectedOptions } = this;
199
+ const selectedValues = selectedOptions.map(option => option.value);
200
+ allOptions.forEach(element => {
201
+ element.selected = selectedValues.includes(element.value);
202
+ });
203
+ }
204
+ setActiveOption() {
205
+ if (!this.open)
206
+ return;
207
+ const activeIndex = this.activeIndex;
208
+ this.allOptions.forEach((element, elementIndex) => {
209
+ element.active = activeIndex === elementIndex;
210
+ });
211
+ }
212
+ setFocusedOption() {
213
+ const option = this.allOptions[this.activeIndex];
214
+ if (!option)
215
+ return;
216
+ setTimeout(() => {
217
+ option.focus();
218
+ }, 25);
219
+ }
220
+ getNextVisibleIndex(direction) {
221
+ let index = this.activeIndex + direction;
222
+ while (index >= 0 && index <= this.allOptions.length - 1) {
223
+ const { display, visibility } = window.getComputedStyle(this.allOptions[index]);
224
+ if (display !== 'none' && visibility !== 'hidden') {
225
+ return index;
226
+ }
227
+ index = index + direction;
228
+ }
229
+ return -1;
230
+ }
231
+ selectOption(selectedValue) {
232
+ const option = this.allOptions.find(({ value }) => value === selectedValue);
233
+ const valueObject = {
234
+ value: selectedValue,
235
+ display: option.display || option.innerText.trim(),
236
+ };
237
+ const { multiple, noSelect } = this;
238
+ let values;
239
+ if (multiple) {
240
+ const { selectedOptions = [] } = this;
241
+ const isAlreadySelected = !!selectedOptions.find(({ value }) => value === selectedValue);
242
+ if (isAlreadySelected) {
243
+ values = selectedOptions.filter(({ value }) => value !== selectedValue);
244
+ }
245
+ else {
246
+ values = [...selectedOptions, valueObject];
247
+ }
248
+ }
249
+ else {
250
+ values = [valueObject];
251
+ }
252
+ if (noSelect)
253
+ this.setActiveElement(null);
254
+ else
255
+ this.selectedOptions = values;
256
+ this.change.emit({ value: selectedValue, values });
257
+ if (multiple)
258
+ return;
259
+ this.open = false;
260
+ }
261
+ adjustActiveOptionAndScroll(numToAdd) {
262
+ this.activeIndex += numToAdd;
263
+ this.setActiveOption();
264
+ this.setFocusedOption();
265
+ this.scrollToActiveOption();
266
+ }
267
+ resetTimer() {
268
+ if (this.searchStringTimer) {
269
+ clearTimeout(this.searchStringTimer);
270
+ }
271
+ this.searchStringTimer = window.setTimeout(() => {
272
+ this.searchString = null;
273
+ }, 2000);
274
+ }
275
+ searchAndFocus(key) {
276
+ this.resetTimer();
277
+ let searchString = this.searchString ? `${this.searchString}${key}` : key;
278
+ searchString = searchString.replace(/[^0-9a-z]/gi, '');
279
+ this.searchString = searchString;
280
+ const searchRegEx = new RegExp(searchString, 'i');
281
+ const foundIndex = this.allOptions.findIndex(option => option.value === searchString || option.textContent.match(searchRegEx));
282
+ if (foundIndex === -1)
283
+ return;
284
+ this.setActiveElement(foundIndex);
285
+ }
286
+ /// Watchers ///
287
+ selectedOptionsUpdated() {
288
+ if (this.multiple) {
289
+ this.updateMultipleOptionAttrs();
290
+ }
291
+ else {
292
+ this.updateSingleOptionAttrs();
293
+ }
294
+ }
295
+ openChanged(newValue) {
296
+ this.optionListState.emit({ open: newValue });
297
+ }
298
+ /// Listeners ///
299
+ delegateFocus(event) {
300
+ if (!isEventFromElement(event, this.hostElement))
301
+ return;
302
+ this.open = true;
303
+ this.setDefaultActiveElement();
304
+ }
305
+ handleClick(event) {
306
+ event.stopPropagation();
307
+ }
308
+ /// Public Methods ///
309
+ toggle() {
310
+ const isOpen = !this.open;
311
+ this.open = isOpen;
312
+ }
313
+ setDefaultActiveElement() {
314
+ this.activeIndex = this.getDefaultActiveIndex();
315
+ this.setActiveOption();
316
+ this.setFocusedOption();
317
+ }
318
+ setActiveElement(index) {
319
+ this.activeIndex = index;
320
+ this.setActiveOption();
321
+ this.setFocusedOption();
322
+ }
323
+ handleExternalKeydown(event) {
324
+ const keysThatTriggerOpen = ['ArrowDown', 'ArrowUp', 'PageDown', 'PageUp', 'Home', 'End'];
325
+ if (keysThatTriggerOpen.includes(event.key)) {
326
+ this.open = true;
327
+ }
328
+ const keysThatTriggerDefault = ['ArrowDown', 'ArrowUp'];
329
+ if (keysThatTriggerDefault.includes(event.key)) {
330
+ event.preventDefault();
331
+ this.setDefaultActiveElement();
332
+ }
333
+ else {
334
+ this.keydownHandler(event, true);
335
+ }
336
+ }
337
+ /// DOM ///
338
+ render() {
339
+ return (h(Host, null,
340
+ h("div", { class: "content", ref: el => (this.contentElement = el), onFocusout: this.focusoutHandler },
341
+ h("div", { class: "options", role: this.type || 'listbox', onKeyDown: this.keydownHandler, onClick: this.clickHandler },
342
+ h("slot", null)))));
343
+ }
344
+ static get is() { return "q2-option-list"; }
345
+ static get encapsulation() { return "shadow"; }
346
+ static get originalStyleUrls() { return {
347
+ "$": ["styles.scss"]
348
+ }; }
349
+ static get styleUrls() { return {
350
+ "$": ["styles.css"]
351
+ }; }
352
+ static get properties() { return {
353
+ "role": {
354
+ "type": "string",
355
+ "mutable": false,
356
+ "complexType": {
357
+ "original": "'listbox' | 'menu'",
358
+ "resolved": "\"listbox\" | \"menu\"",
359
+ "references": {}
360
+ },
361
+ "required": false,
362
+ "optional": false,
363
+ "docs": {
364
+ "tags": [],
365
+ "text": ""
366
+ },
367
+ "attribute": "role",
368
+ "reflect": true,
369
+ "defaultValue": "'listbox'"
370
+ },
371
+ "direction": {
372
+ "type": "string",
373
+ "mutable": false,
374
+ "complexType": {
375
+ "original": "'up' | 'down'",
376
+ "resolved": "\"down\" | \"up\"",
377
+ "references": {}
378
+ },
379
+ "required": false,
380
+ "optional": false,
381
+ "docs": {
382
+ "tags": [],
383
+ "text": ""
384
+ },
385
+ "attribute": "direction",
386
+ "reflect": true,
387
+ "defaultValue": "'down'"
388
+ },
389
+ "open": {
390
+ "type": "boolean",
391
+ "mutable": true,
392
+ "complexType": {
393
+ "original": "boolean",
394
+ "resolved": "boolean",
395
+ "references": {}
396
+ },
397
+ "required": false,
398
+ "optional": false,
399
+ "docs": {
400
+ "tags": [],
401
+ "text": ""
402
+ },
403
+ "attribute": "open",
404
+ "reflect": true
405
+ },
406
+ "customSearch": {
407
+ "type": "boolean",
408
+ "mutable": false,
409
+ "complexType": {
410
+ "original": "boolean",
411
+ "resolved": "boolean",
412
+ "references": {}
413
+ },
414
+ "required": false,
415
+ "optional": false,
416
+ "docs": {
417
+ "tags": [],
418
+ "text": ""
419
+ },
420
+ "attribute": "custom-search",
421
+ "reflect": true
422
+ },
423
+ "noSelect": {
424
+ "type": "boolean",
425
+ "mutable": false,
426
+ "complexType": {
427
+ "original": "boolean",
428
+ "resolved": "boolean",
429
+ "references": {}
430
+ },
431
+ "required": false,
432
+ "optional": false,
433
+ "docs": {
434
+ "tags": [],
435
+ "text": ""
436
+ },
437
+ "attribute": "no-select",
438
+ "reflect": true
439
+ },
440
+ "align": {
441
+ "type": "string",
442
+ "mutable": false,
443
+ "complexType": {
444
+ "original": "'left' | 'right'",
445
+ "resolved": "\"left\" | \"right\"",
446
+ "references": {}
447
+ },
448
+ "required": false,
449
+ "optional": false,
450
+ "docs": {
451
+ "tags": [],
452
+ "text": ""
453
+ },
454
+ "attribute": "align",
455
+ "reflect": true
456
+ },
457
+ "selectedOptions": {
458
+ "type": "unknown",
459
+ "mutable": true,
460
+ "complexType": {
461
+ "original": "IOptionValue[]",
462
+ "resolved": "IOptionValue[]",
463
+ "references": {
464
+ "IOptionValue": {
465
+ "location": "local"
466
+ }
467
+ }
468
+ },
469
+ "required": false,
470
+ "optional": false,
471
+ "docs": {
472
+ "tags": [],
473
+ "text": ""
474
+ },
475
+ "defaultValue": "[]"
476
+ },
477
+ "multiple": {
478
+ "type": "boolean",
479
+ "mutable": false,
480
+ "complexType": {
481
+ "original": "boolean",
482
+ "resolved": "boolean",
483
+ "references": {}
484
+ },
485
+ "required": false,
486
+ "optional": false,
487
+ "docs": {
488
+ "tags": [],
489
+ "text": ""
490
+ },
491
+ "attribute": "multiple",
492
+ "reflect": true
493
+ },
494
+ "disabled": {
495
+ "type": "boolean",
496
+ "mutable": false,
497
+ "complexType": {
498
+ "original": "boolean",
499
+ "resolved": "boolean",
500
+ "references": {}
501
+ },
502
+ "required": false,
503
+ "optional": false,
504
+ "docs": {
505
+ "tags": [],
506
+ "text": ""
507
+ },
508
+ "attribute": "disabled",
509
+ "reflect": true
510
+ },
511
+ "type": {
512
+ "type": "string",
513
+ "mutable": false,
514
+ "complexType": {
515
+ "original": "'menu' | 'listbox'",
516
+ "resolved": "\"listbox\" | \"menu\"",
517
+ "references": {}
518
+ },
519
+ "required": false,
520
+ "optional": false,
521
+ "docs": {
522
+ "tags": [],
523
+ "text": ""
524
+ },
525
+ "attribute": "type",
526
+ "reflect": false
527
+ }
528
+ }; }
529
+ static get states() { return {
530
+ "hasOptions": {}
531
+ }; }
532
+ static get events() { return [{
533
+ "method": "change",
534
+ "name": "change",
535
+ "bubbles": true,
536
+ "cancelable": true,
537
+ "composed": true,
538
+ "docs": {
539
+ "tags": [],
540
+ "text": ""
541
+ },
542
+ "complexType": {
543
+ "original": "{ value: string; values: IOptionValue[] }",
544
+ "resolved": "{ value: string; values: IOptionValue[]; }",
545
+ "references": {
546
+ "IOptionValue": {
547
+ "location": "local"
548
+ }
549
+ }
550
+ }
551
+ }, {
552
+ "method": "optionListState",
553
+ "name": "optionListState",
554
+ "bubbles": true,
555
+ "cancelable": true,
556
+ "composed": true,
557
+ "docs": {
558
+ "tags": [],
559
+ "text": ""
560
+ },
561
+ "complexType": {
562
+ "original": "{ open: boolean }",
563
+ "resolved": "{ open: boolean; }",
564
+ "references": {}
565
+ }
566
+ }]; }
567
+ static get methods() { return {
568
+ "toggle": {
569
+ "complexType": {
570
+ "signature": "() => Promise<void>",
571
+ "parameters": [],
572
+ "references": {},
573
+ "return": "Promise<void>"
574
+ },
575
+ "docs": {
576
+ "text": "",
577
+ "tags": []
578
+ }
579
+ },
580
+ "setDefaultActiveElement": {
581
+ "complexType": {
582
+ "signature": "() => Promise<void>",
583
+ "parameters": [],
584
+ "references": {},
585
+ "return": "Promise<void>"
586
+ },
587
+ "docs": {
588
+ "text": "",
589
+ "tags": []
590
+ }
591
+ },
592
+ "setActiveElement": {
593
+ "complexType": {
594
+ "signature": "(index: number) => Promise<void>",
595
+ "parameters": [{
596
+ "tags": [],
597
+ "text": ""
598
+ }],
599
+ "references": {},
600
+ "return": "Promise<void>"
601
+ },
602
+ "docs": {
603
+ "text": "",
604
+ "tags": []
605
+ }
606
+ },
607
+ "handleExternalKeydown": {
608
+ "complexType": {
609
+ "signature": "(event: KeyboardEvent) => Promise<void>",
610
+ "parameters": [{
611
+ "tags": [],
612
+ "text": ""
613
+ }],
614
+ "references": {
615
+ "KeyboardEvent": {
616
+ "location": "global"
617
+ }
618
+ },
619
+ "return": "Promise<void>"
620
+ },
621
+ "docs": {
622
+ "text": "",
623
+ "tags": []
624
+ }
625
+ }
626
+ }; }
627
+ static get elementRef() { return "hostElement"; }
628
+ static get watchers() { return [{
629
+ "propName": "selectedOptions",
630
+ "methodName": "selectedOptionsUpdated"
631
+ }, {
632
+ "propName": "open",
633
+ "methodName": "openChanged"
634
+ }]; }
635
+ static get listeners() { return [{
636
+ "name": "focus",
637
+ "method": "delegateFocus",
638
+ "target": undefined,
639
+ "capture": false,
640
+ "passive": false
641
+ }, {
642
+ "name": "click",
643
+ "method": "handleClick",
644
+ "target": undefined,
645
+ "capture": false,
646
+ "passive": false
647
+ }]; }
648
+ }