q2-tecton-elements 1.26.1 → 1.27.1

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 (190) hide show
  1. package/dist/cjs/{index-d62f5a7e.js → index-ffd19146.js} +2 -2
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
  4. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  5. package/dist/cjs/q2-badge_2.cjs.entry.js +4 -4
  6. package/dist/cjs/q2-btn_2.cjs.entry.js +7 -5
  7. package/dist/cjs/q2-calendar.cjs.entry.js +3 -3
  8. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-checkbox-group.cjs.entry.js +6 -5
  15. package/dist/cjs/q2-checkbox.cjs.entry.js +3 -3
  16. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-dropdown.cjs.entry.js +3 -2
  18. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-optgroup_2.cjs.entry.js +2 -2
  24. package/dist/cjs/q2-option-list_2.cjs.entry.js +66 -25
  25. package/dist/cjs/q2-pagination.cjs.entry.js +18 -16
  26. package/dist/cjs/q2-pill.cjs.entry.js +82 -14
  27. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-radio.cjs.entry.js +2 -2
  29. package/dist/cjs/q2-section.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-select.cjs.entry.js +24 -19
  31. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-tab-container.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-tag.cjs.entry.js +11 -4
  36. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  37. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  39. package/dist/collection/components/q2-avatar/styles.css +14 -14
  40. package/dist/collection/components/q2-btn/index.js +22 -3
  41. package/dist/collection/components/q2-btn/styles.css +26 -11
  42. package/dist/collection/components/q2-calendar/index.js +1 -1
  43. package/dist/collection/components/q2-calendar/styles.css +7 -1
  44. package/dist/collection/components/q2-carousel-pane/index.js +15 -6
  45. package/dist/collection/components/q2-checkbox/index.js +6 -3
  46. package/dist/collection/components/q2-checkbox/styles.css +1 -0
  47. package/dist/collection/components/q2-checkbox-group/index.js +5 -4
  48. package/dist/collection/components/q2-dropdown/index.js +20 -1
  49. package/dist/collection/components/q2-input/index.js +6 -6
  50. package/dist/collection/components/q2-input/styles.css +4 -0
  51. package/dist/collection/components/q2-message/index.js +1 -1
  52. package/dist/collection/components/q2-option/index.js +21 -9
  53. package/dist/collection/components/q2-option-list/index.js +55 -14
  54. package/dist/collection/components/q2-pagination/index.js +16 -14
  55. package/dist/collection/components/q2-pagination/styles.css +5 -0
  56. package/dist/collection/components/q2-pill/index.js +84 -14
  57. package/dist/collection/components/q2-popover/index.js +10 -10
  58. package/dist/collection/components/q2-radio/index.js +20 -8
  59. package/dist/collection/components/q2-radio/styles.css +2 -0
  60. package/dist/collection/components/q2-select/index.js +40 -17
  61. package/dist/collection/components/q2-select/styles.css +41 -3
  62. package/dist/collection/components/q2-stepper/index.js +5 -2
  63. package/dist/collection/components/q2-stepper-pane/index.js +5 -2
  64. package/dist/collection/components/q2-tab-pane/index.js +20 -8
  65. package/dist/collection/components/q2-tag/index.js +10 -3
  66. package/dist/collection/utils/index.js +1 -1
  67. package/dist/components/index10.js +1 -1
  68. package/dist/components/index12.js +1 -1
  69. package/dist/components/index13.js +55 -14
  70. package/dist/components/index14.js +10 -10
  71. package/dist/components/index15.js +2 -2
  72. package/dist/components/index3.js +1 -1
  73. package/dist/components/index5.js +7 -4
  74. package/dist/components/index8.js +4 -4
  75. package/dist/components/q2-calendar.js +2 -2
  76. package/dist/components/q2-checkbox-group.js +5 -4
  77. package/dist/components/q2-checkbox.js +2 -2
  78. package/dist/components/q2-dropdown.js +3 -1
  79. package/dist/components/q2-pagination.js +18 -16
  80. package/dist/components/q2-pill.js +82 -14
  81. package/dist/components/q2-radio.js +1 -1
  82. package/dist/components/q2-select.js +25 -19
  83. package/dist/components/q2-tag.js +10 -3
  84. package/dist/docs.json +167 -46
  85. package/dist/esm/{index-5040cd84.js → index-a0cc60e3.js} +2 -2
  86. package/dist/esm/loader.js +1 -1
  87. package/dist/esm/q2-action-sheet.entry.js +1 -1
  88. package/dist/esm/q2-avatar.entry.js +1 -1
  89. package/dist/esm/q2-badge_2.entry.js +4 -4
  90. package/dist/esm/q2-btn_2.entry.js +7 -5
  91. package/dist/esm/q2-calendar.entry.js +3 -3
  92. package/dist/esm/q2-card.entry.js +1 -1
  93. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  94. package/dist/esm/q2-carousel.entry.js +1 -1
  95. package/dist/esm/q2-chart-area.entry.js +1 -1
  96. package/dist/esm/q2-chart-bar.entry.js +1 -1
  97. package/dist/esm/q2-chart-donut.entry.js +1 -1
  98. package/dist/esm/q2-checkbox-group.entry.js +6 -5
  99. package/dist/esm/q2-checkbox.entry.js +3 -3
  100. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  101. package/dist/esm/q2-dropdown.entry.js +3 -2
  102. package/dist/esm/q2-editable-field.entry.js +1 -1
  103. package/dist/esm/q2-icon.entry.js +1 -1
  104. package/dist/esm/q2-loc.entry.js +1 -1
  105. package/dist/esm/q2-message.entry.js +2 -2
  106. package/dist/esm/q2-month-picker.entry.js +1 -1
  107. package/dist/esm/q2-optgroup_2.entry.js +2 -2
  108. package/dist/esm/q2-option-list_2.entry.js +66 -25
  109. package/dist/esm/q2-pagination.entry.js +18 -16
  110. package/dist/esm/q2-pill.entry.js +82 -14
  111. package/dist/esm/q2-radio-group.entry.js +1 -1
  112. package/dist/esm/q2-radio.entry.js +2 -2
  113. package/dist/esm/q2-section.entry.js +1 -1
  114. package/dist/esm/q2-select.entry.js +24 -19
  115. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  116. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  117. package/dist/esm/q2-stepper.entry.js +1 -1
  118. package/dist/esm/q2-tab-container.entry.js +1 -1
  119. package/dist/esm/q2-tag.entry.js +11 -4
  120. package/dist/esm/q2-tecton-elements.js +1 -1
  121. package/dist/esm/q2-textarea.entry.js +1 -1
  122. package/dist/esm/q2-tooltip.entry.js +1 -1
  123. package/dist/q2-tecton-elements/p-04b9a7ee.entry.js +1 -0
  124. package/dist/q2-tecton-elements/{p-c506314d.entry.js → p-05bdc0aa.entry.js} +1 -1
  125. package/dist/q2-tecton-elements/{p-f5c9ef75.entry.js → p-0b8943da.entry.js} +1 -1
  126. package/dist/q2-tecton-elements/{p-ece7a1ca.entry.js → p-12e65423.entry.js} +1 -1
  127. package/dist/q2-tecton-elements/{p-f3096cce.entry.js → p-1d28c600.entry.js} +1 -1
  128. package/dist/q2-tecton-elements/{p-839ef27d.js → p-2453cd92.js} +1 -1
  129. package/dist/q2-tecton-elements/{p-a1f91d8c.entry.js → p-256e5161.entry.js} +1 -1
  130. package/dist/q2-tecton-elements/{p-5878b8bd.entry.js → p-25ea01d3.entry.js} +1 -1
  131. package/dist/q2-tecton-elements/p-2b8a8981.entry.js +1 -0
  132. package/dist/q2-tecton-elements/{p-e4aa271e.entry.js → p-31b655b6.entry.js} +1 -1
  133. package/dist/q2-tecton-elements/p-396fd275.entry.js +1 -0
  134. package/dist/q2-tecton-elements/p-3dca7465.entry.js +1 -0
  135. package/dist/q2-tecton-elements/p-521c9085.entry.js +1 -0
  136. package/dist/q2-tecton-elements/{p-bfaff58b.entry.js → p-5a670d93.entry.js} +1 -1
  137. package/dist/q2-tecton-elements/p-72374b8e.entry.js +1 -0
  138. package/dist/q2-tecton-elements/p-8545c3cb.entry.js +1 -0
  139. package/dist/q2-tecton-elements/p-85e780b2.entry.js +1 -0
  140. package/dist/q2-tecton-elements/{p-18808c27.entry.js → p-869e899c.entry.js} +1 -1
  141. package/dist/q2-tecton-elements/p-8e652d59.entry.js +1 -0
  142. package/dist/q2-tecton-elements/{p-74ac19cd.entry.js → p-9292bd80.entry.js} +1 -1
  143. package/dist/q2-tecton-elements/{p-fbe8b4c0.entry.js → p-9367dc29.entry.js} +1 -1
  144. package/dist/q2-tecton-elements/{p-bc8a507b.entry.js → p-949fa312.entry.js} +1 -1
  145. package/dist/q2-tecton-elements/{p-a8258fb1.entry.js → p-a298cbfb.entry.js} +1 -1
  146. package/dist/q2-tecton-elements/p-aae8b9fc.entry.js +1 -0
  147. package/dist/q2-tecton-elements/{p-bea1fda1.entry.js → p-ac6dd5b1.entry.js} +1 -1
  148. package/dist/q2-tecton-elements/{p-8b5639a1.entry.js → p-bafb5e70.entry.js} +1 -1
  149. package/dist/q2-tecton-elements/{p-a411f2f3.entry.js → p-be0d3bfe.entry.js} +1 -1
  150. package/dist/q2-tecton-elements/p-c1d33fd2.entry.js +1 -0
  151. package/dist/q2-tecton-elements/{p-1cc42a02.entry.js → p-d06d752f.entry.js} +1 -1
  152. package/dist/q2-tecton-elements/{p-7b124d8c.entry.js → p-d69cb7d1.entry.js} +1 -1
  153. package/dist/q2-tecton-elements/{p-bda877fe.entry.js → p-edcf49fd.entry.js} +1 -1
  154. package/dist/q2-tecton-elements/{p-8954cc63.entry.js → p-ef657f8f.entry.js} +1 -1
  155. package/dist/q2-tecton-elements/{p-0cbad3bc.entry.js → p-f3e4bb52.entry.js} +1 -1
  156. package/dist/q2-tecton-elements/{p-7d35c1a1.entry.js → p-fb768d19.entry.js} +1 -1
  157. package/dist/q2-tecton-elements/{p-87cecc80.entry.js → p-fcad1609.entry.js} +1 -1
  158. package/dist/q2-tecton-elements/{p-7eca74d4.entry.js → p-fe3625ad.entry.js} +1 -1
  159. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  160. package/dist/test/helpers.js +20 -1
  161. package/dist/types/components/q2-btn/index.d.ts +2 -0
  162. package/dist/types/components/q2-carousel-pane/index.d.ts +12 -0
  163. package/dist/types/components/q2-checkbox/index.d.ts +4 -0
  164. package/dist/types/components/q2-checkbox-group/index.d.ts +1 -1
  165. package/dist/types/components/q2-dropdown/index.d.ts +1 -0
  166. package/dist/types/components/q2-input/index.d.ts +1 -1
  167. package/dist/types/components/q2-option/index.d.ts +16 -0
  168. package/dist/types/components/q2-option-list/index.d.ts +6 -0
  169. package/dist/types/components/q2-pagination/index.d.ts +1 -1
  170. package/dist/types/components/q2-pill/index.d.ts +6 -2
  171. package/dist/types/components/q2-radio/index.d.ts +16 -0
  172. package/dist/types/components/q2-select/index.d.ts +3 -2
  173. package/dist/types/components/q2-stepper/index.d.ts +4 -0
  174. package/dist/types/components/q2-stepper-pane/index.d.ts +4 -0
  175. package/dist/types/components/q2-tab-pane/index.d.ts +16 -0
  176. package/dist/types/components/q2-tag/index.d.ts +1 -1
  177. package/dist/types/components.d.ts +150 -0
  178. package/dist/types/workspace/workspace/{tecton-production_release_1.26.x → tecton-production_release_1.27.x}/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +1 -0
  179. package/package.json +3 -3
  180. package/dist/q2-tecton-elements/p-09639e95.entry.js +0 -1
  181. package/dist/q2-tecton-elements/p-0b82891e.entry.js +0 -1
  182. package/dist/q2-tecton-elements/p-224d3c31.entry.js +0 -1
  183. package/dist/q2-tecton-elements/p-4734a577.entry.js +0 -1
  184. package/dist/q2-tecton-elements/p-55d192b3.entry.js +0 -1
  185. package/dist/q2-tecton-elements/p-721d0aee.entry.js +0 -1
  186. package/dist/q2-tecton-elements/p-73643653.entry.js +0 -1
  187. package/dist/q2-tecton-elements/p-8d703466.entry.js +0 -1
  188. package/dist/q2-tecton-elements/p-a7679912.entry.js +0 -1
  189. package/dist/q2-tecton-elements/p-aafb9537.entry.js +0 -1
  190. package/dist/q2-tecton-elements/p-b8420bfe.entry.js +0 -1
@@ -17,12 +17,30 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
17
17
  var _a;
18
18
  this.scheduledAfterRender = [];
19
19
  /// Helpers ///
20
+ this.syncValueProperties = () => {
21
+ const { value, selectedOptions } = this;
22
+ if (!!(selectedOptions === null || selectedOptions === void 0 ? void 0 : selectedOptions.length))
23
+ this.selectedOptionsChanged(selectedOptions);
24
+ else if (value)
25
+ this.valueChanged(value);
26
+ };
27
+ this.getOption = async (value) => {
28
+ if (this.optionList) {
29
+ const options = await this.optionList.getOptions();
30
+ return options.find(option => option.value === value);
31
+ }
32
+ else {
33
+ return this.hostElement.querySelector(`q2-option[value="${value}"]`);
34
+ }
35
+ };
20
36
  this.updateSelectedOptionElements = async () => {
21
37
  var _a;
22
38
  const { selectedOptions } = this;
23
39
  const selectedValues = selectedOptions.map(option => option.value);
24
40
  const options = await ((_a = this.optionList) === null || _a === void 0 ? void 0 : _a.getOptions());
25
- this.selectedOptionElements = options === null || options === void 0 ? void 0 : options.filter(option => selectedValues.includes(option.value));
41
+ if (this.hasOptions)
42
+ this.active = !!selectedValues.length;
43
+ this.selectedOptionElements = (options === null || options === void 0 ? void 0 : options.filter(option => selectedValues.includes(option.value))) || [];
26
44
  };
27
45
  this.determineHasOptions = () => {
28
46
  const hasOptions = !!this.hostElement.querySelectorAll('q2-option').length;
@@ -30,6 +48,7 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
30
48
  };
31
49
  this.clearSelectedOptions = () => {
32
50
  this.selectedOptions = [];
51
+ this.value = null;
33
52
  this.active = false;
34
53
  this.open = false;
35
54
  this.primaryBtn.focus();
@@ -62,9 +81,10 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
62
81
  }
63
82
  };
64
83
  this.handleKeydown = async (event) => {
65
- event.preventDefault();
66
- if (!this.hasOptions || this.disabled)
84
+ const isTabMetaOrCtrl = event.metaKey || event.ctrlKey || event.key === 'Tab';
85
+ if (!this.hasOptions || this.disabled || isTabMetaOrCtrl)
67
86
  return;
87
+ event.preventDefault();
68
88
  if (shouldShowActionSheet(this, event)) {
69
89
  this.executeActionSheet(event);
70
90
  }
@@ -72,6 +92,13 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
72
92
  this.optionList.handleExternalKeydown(event);
73
93
  }
74
94
  };
95
+ this.handleButtonFocusout = async (event) => {
96
+ var _a;
97
+ const relatedTarget = event.relatedTarget;
98
+ if ((_a = (relatedTarget === null || relatedTarget === void 0 ? void 0 : relatedTarget.tagName) === 'Q2-OPTION') !== null && _a !== void 0 ? _a : false)
99
+ return;
100
+ this.open = false;
101
+ };
75
102
  this.handleChange = event => {
76
103
  event.stopPropagation();
77
104
  if (!this.hasOptions)
@@ -86,7 +113,10 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
86
113
  const target = event.target;
87
114
  if (target.localName === 'click-elsewhere') {
88
115
  event.stopPropagation();
89
- this.popoverElement.open = false;
116
+ const { popoverElement } = this;
117
+ if (!popoverElement)
118
+ return;
119
+ popoverElement.open = false;
90
120
  }
91
121
  };
92
122
  this.hoist = !!((_a = window.Tecton) === null || _a === void 0 ? void 0 : _a.useActionSheets);
@@ -112,6 +142,7 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
112
142
  }
113
143
  componentDidLoad() {
114
144
  overrideFocus(this.hostElement);
145
+ this.syncValueProperties();
115
146
  }
116
147
  componentDidRender() {
117
148
  this.scheduledAfterRender.forEach(fn => fn());
@@ -141,12 +172,22 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
141
172
  const result = await showActionSheetList(this, event);
142
173
  this.handleSelectionChanges(result);
143
174
  }
144
- handleSelectionChanges(changeDetails) {
175
+ async handleSelectionChanges(changeDetails) {
176
+ const { multiple } = this;
145
177
  const { value = '', values = [] } = changeDetails;
146
- const isActive = !!values.length;
178
+ const isActive = multiple ? !!values.length : !!value;
147
179
  if (!this.hostElement.onchange) {
148
- this.selectedOptions = values;
149
- this.active = isActive;
180
+ if (multiple) {
181
+ this.selectedOptions = values;
182
+ this.value = undefined;
183
+ }
184
+ else {
185
+ const selectedOption = await this.getOption(value);
186
+ this.selectedOptions = selectedOption
187
+ ? [{ value: selectedOption.value, display: selectedOption.display }]
188
+ : undefined;
189
+ this.value = selectedOption.value || undefined;
190
+ }
150
191
  }
151
192
  this.change.emit({
152
193
  value,
@@ -155,8 +196,35 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
155
196
  });
156
197
  }
157
198
  /// Watchers ///
158
- selectedOptionsWatcher() {
159
- this.updateSelectedOptionElements();
199
+ async valueChanged(newValue) {
200
+ var _a, _b;
201
+ const { multiple, selectedOptions } = this;
202
+ const firstValue = (_b = (_a = selectedOptions === null || selectedOptions === void 0 ? void 0 : selectedOptions[0]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : null;
203
+ if (multiple)
204
+ return;
205
+ if (newValue === firstValue)
206
+ this.updateSelectedOptionElements();
207
+ else {
208
+ const selectedOption = await this.getOption(newValue);
209
+ const { value, display } = selectedOption || { value: newValue, display: null };
210
+ this.selectedOptions = [{ value, display }];
211
+ }
212
+ }
213
+ selectedOptionsChanged(newValue) {
214
+ var _a, _b;
215
+ const { multiple } = this;
216
+ const firstValue = (_b = (_a = newValue === null || newValue === void 0 ? void 0 : newValue[0]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : null;
217
+ if (multiple) {
218
+ if (this.value)
219
+ this.value = null;
220
+ this.updateSelectedOptionElements();
221
+ }
222
+ else if (this.value === firstValue) {
223
+ this.updateSelectedOptionElements();
224
+ }
225
+ else {
226
+ this.value = firstValue;
227
+ }
160
228
  }
161
229
  /// Listeners ///
162
230
  delegateFocus(event) {
@@ -170,7 +238,6 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
170
238
  if (open)
171
239
  return;
172
240
  this.optionList.setActiveElement(null);
173
- this.primaryBtn.focus();
174
241
  }
175
242
  /// DOM ///
176
243
  generateIcon() {
@@ -187,11 +254,12 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
187
254
  wrapperClassNames.push('has-icon');
188
255
  if (hasOptions)
189
256
  wrapperClassNames.push('has-options');
190
- return (h("click-elsewhere", { onChange: this.onClickElsewhere }, h("div", { class: wrapperClassNames.join(' ') }, h("div", { class: "btn-height-wrapper", ref: el => (this.primaryBtnWrapper = el), onClick: this.handleWrapperClick, tabIndex: -1 }, h("button", { class: "btn-primary", "test-id": "btn-control", type: "button", ref: el => (this.primaryBtn = el), onClick: this.handleClick, onKeyDown: this.handleKeydown, disabled: this.disabled, "aria-selected": !hasOptions && active ? 'true' : 'false', "aria-roledescription": !hasOptions && 'filter', "aria-controls": hasOptions && 'option-list', "aria-haspopup": hasOptions && 'true', "aria-expanded": (hasOptions && `${!!open}`) || undefined, "aria-label": this.maxLength && this.buttonContent }, this.truncatedButtonContent, !hasOptions && active && h("span", { class: "sr" }, "(", loc('tecton.element.pill.active'), ")"))), this.generateIcon()), this.hasOptions && (h("q2-popover", { ref: el => (this.popoverElement = el), controlElement: this.primaryBtn, open: this.open, minHeight: this.popoverMinHeight, direction: this.popoverDirection, align: "right" }, h("q2-option-list", { role: "menu", ref: el => (this.optionList = el), id: "option-list", onChange: this.handleChange, multiple: this.multiple, selectedOptions: this.selectedOptions, onReady: () => this.updateSelectedOptionElements() }, h("slot", null))))));
257
+ return (h("click-elsewhere", { onChange: this.onClickElsewhere }, h("div", { class: wrapperClassNames.join(' ') }, h("div", { class: "btn-height-wrapper", ref: el => (this.primaryBtnWrapper = el), onClick: this.handleWrapperClick, tabIndex: -1 }, h("button", { class: "btn-primary", "test-id": "btn-control", type: "button", ref: el => (this.primaryBtn = el), onClick: this.handleClick, onKeyDown: this.handleKeydown, onFocusout: this.handleButtonFocusout, disabled: this.disabled, "aria-selected": !hasOptions && active ? 'true' : 'false', "aria-roledescription": !hasOptions && 'filter', "aria-controls": hasOptions && 'option-list', "aria-haspopup": hasOptions && 'true', "aria-expanded": (hasOptions && `${!!open}`) || undefined, "aria-label": this.maxLength && this.buttonContent }, this.truncatedButtonContent, !hasOptions && active && h("span", { class: "sr" }, "(", loc('tecton.element.pill.active'), ")"))), this.generateIcon()), this.hasOptions && (h("q2-popover", { ref: el => (this.popoverElement = el), controlElement: this.primaryBtn, open: this.open, minHeight: this.popoverMinHeight, direction: this.popoverDirection, align: "right" }, h("q2-option-list", { role: "menu", ref: el => (this.optionList = el), id: "option-list", onChange: this.handleChange, multiple: this.multiple, selectedOptions: this.selectedOptions, onReady: () => this.updateSelectedOptionElements() }, h("slot", null))))));
191
258
  }
192
259
  get hostElement() { return this; }
193
260
  static get watchers() { return {
194
- "selectedOptions": ["selectedOptionsWatcher"]
261
+ "value": ["valueChanged"],
262
+ "selectedOptions": ["selectedOptionsChanged"]
195
263
  }; }
196
264
  static get style() { return stylesCss; }
197
265
  }, [1, "q2-pill", {
@@ -202,7 +270,7 @@ const Q2Pill$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
202
270
  "multiple": [516],
203
271
  "maxLength": [514, "max-length"],
204
272
  "label": [513],
205
- "value": [513],
273
+ "value": [1537],
206
274
  "theme": [513],
207
275
  "selectedOptions": [1040],
208
276
  "popoverMinHeight": [2, "popover-min-height"],
@@ -1,7 +1,7 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
2
  import { c as createGuid, h as handleAriaLabel, o as overrideFocus, l as loc } from './index15.js';
3
3
 
4
- 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}:host{display:block}.radio-container{margin-top:var(--tct-radio-margin-vertical, var(--tct-scale-2, 10px));margin-right:var(--tct-radio-margin-horizontal, var(--tct-scale-3, 15px));margin-bottom:var(--tct-radio-margin-vertical, var(--tct-scale-2, 10px))}.radio-container label[for]{font-weight:var(--tct-radio-font-weight, var(--tct-checkbox-font-weight, 400));align-items:center;cursor:pointer;margin-right:1rem;display:grid;grid-template-columns:18px 1fr;gap:var(--tct-scale-1, var(--app-scale-1x, 5px))}.radio-container svg{border-radius:50%;transition:box-shadow var(--tct-tween-1, var(--app-tween-1, 0.2s ease));outline:0;width:100%}.radio-container circle:nth-child(1){stroke-width:2;stroke:var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494))}.radio-container input:focus+label svg{box-shadow:var(--const-double-focus-ring)}.radio-container input:focus+label circle:nth-child(1){stroke:var(--tct-radio-focus-stroke-color, var(--tct-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)))}.radio-container input:checked+label circle:nth-child(1){background-color:var(--tct-radio-checked-bg, transparent);stroke:var(--tct-radio-checked-stroke-color, var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494)))}.radio-container input:checked+label .label-content{font-weight:var(--tct-checkbox-selected-font-weight, 600);letter-spacing:var(--tct-checkbox-selected-letter-spacing, 0.25)}.radio-container input:checked+label circle:nth-child(2){fill:var(--tct-radio-checked-fill, var(--tct-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)))}.radio-tile{flex-basis:100px;flex-grow:0;flex-wrap:wrap}.radio-tile label[for]{align-items:center;border-radius:3px;border:2px solid var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494));cursor:pointer;display:block;padding:10px;position:relative;text-align:center;transition:border-color var(--tct-tween-1, var(--app-tween-1, 0.2s ease));white-space:nowrap}.radio-tile input:focus+label,.radio-tile input:focus:checked+label{border-color:var(--tct-checkbox-check-stroke-color, var(--t-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)));box-shadow:var(--const-double-focus-ring), var(--tct-global-focus, 0 0 0 2px #33b4ff)}.radio-tile input:checked+label{border-color:var(--tct-checkbox-check-stroke-color, var(--t-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)));box-shadow:inset 0 0 0 2px #ffffff}.radio-tile input:checked+label:after{border-bottom-width:3px;border-bottom:5px solid var(--tct-checkbox-check-stroke-color, var(--t-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)));border-left-width:5px;border-left:8px solid transparent;border-right-width:5px;border-right:8px solid transparent;bottom:0;content:\"\";height:0;left:50%;margin-left:-5px;position:absolute;width:0}input:disabled+label[for]{cursor:not-allowed;opacity:var(--tct-disabled-opacity, var(--app-disabled-opacity, 0.4))}";
4
+ 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}:host{display:block}.radio-container{margin-top:var(--tct-radio-margin-vertical, var(--tct-scale-2, 10px));margin-right:var(--tct-radio-margin-horizontal, var(--tct-scale-3, 15px));margin-bottom:var(--tct-radio-margin-vertical, var(--tct-scale-2, 10px))}.radio-container label[for]{color:var(--tct-radio-label-color);font-weight:var(--tct-radio-font-weight, var(--tct-checkbox-font-weight, 400));align-items:center;cursor:pointer;margin-right:1rem;display:grid;grid-template-columns:18px 1fr;gap:var(--tct-scale-1, var(--app-scale-1x, 5px))}.radio-container svg{border-radius:50%;transition:box-shadow var(--tct-tween-1, var(--app-tween-1, 0.2s ease));outline:0;width:100%}.radio-container circle:nth-child(1){stroke-width:2;stroke:var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494))}.radio-container input:focus+label svg{box-shadow:var(--const-double-focus-ring)}.radio-container input:focus+label circle:nth-child(1){stroke:var(--tct-radio-focus-stroke-color, var(--tct-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)))}.radio-container input:checked+label circle:nth-child(1){background-color:var(--tct-radio-checked-bg, transparent);stroke:var(--tct-radio-checked-stroke-color, var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494)))}.radio-container input:checked+label .label-content{font-weight:var(--tct-checkbox-selected-font-weight, 600);letter-spacing:var(--tct-checkbox-selected-letter-spacing, 0.25)}.radio-container input:checked+label circle:nth-child(2){fill:var(--tct-radio-checked-fill, var(--tct-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)))}.radio-tile{flex-basis:100px;flex-grow:0;flex-wrap:wrap}.radio-tile label[for]{color:var(--tct-radio-label-color);align-items:center;border-radius:3px;border:2px solid var(--tct-radio-stroke-color, var(--t-a11y-gray-color-AA, #949494));cursor:pointer;display:block;padding:10px;position:relative;text-align:center;transition:border-color var(--tct-tween-1, var(--app-tween-1, 0.2s ease));white-space:nowrap}.radio-tile input:focus+label,.radio-tile input:focus:checked+label{border-color:var(--tct-checkbox-check-stroke-color, var(--t-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)));box-shadow:var(--const-double-focus-ring), var(--tct-global-focus, 0 0 0 2px #33b4ff)}.radio-tile input:checked+label{border-color:var(--tct-checkbox-check-stroke-color, var(--t-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)));box-shadow:inset 0 0 0 2px #ffffff}.radio-tile input:checked+label:after{border-bottom-width:3px;border-bottom:5px solid var(--tct-checkbox-check-stroke-color, var(--t-checkbox-check-stroke-color, var(--t-checkbox-fill, #2e2e2e)));border-left-width:5px;border-left:8px solid transparent;border-right-width:5px;border-right:8px solid transparent;bottom:0;content:\"\";height:0;left:50%;margin-left:-5px;position:absolute;width:0}input:disabled+label[for]{cursor:not-allowed;opacity:var(--tct-disabled-opacity, var(--app-disabled-opacity, 0.4))}";
5
5
 
6
6
  const Q2Radio$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
7
7
  constructor() {
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
- import { h as handleAriaLabel, o as overrideFocus, l as loc, d as isRelatedTargetWithinHost, a as isEventFromElement, e as isHostLosingFocus } from './index15.js';
2
+ import { l as loc, h as handleAriaLabel, o as overrideFocus, d as isRelatedTargetWithinHost, a as isEventFromElement, e as isHostLosingFocus } from './index15.js';
3
3
  import { s as shouldShowActionSheet, a as showActionSheetList } from './action-sheet.js';
4
4
  import { d as defineCustomElement$9 } from './index2.js';
5
5
  import { d as defineCustomElement$8 } from './index4.js';
@@ -10,7 +10,7 @@ import { d as defineCustomElement$4 } from './index9.js';
10
10
  import { d as defineCustomElement$3 } from './index13.js';
11
11
  import { d as defineCustomElement$2 } from './index14.js';
12
12
 
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}";
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)))}.popover-content{display:flex;flex-direction:column-reverse}.multi-select-header{padding:var(--tct-scale-2, var(--app-scale-2x, 10px)) var(--tct-scale-2, var(--app-scale-2x, 10px));position:sticky;top:0;z-index:5;background:var(--app-white);display:flex;gap:var(--app-scale-2x, 10px);align-items:center}.multi-select-header fieldset{margin:0;padding:0;border:0;display:flex;gap:var(--app-scale-2x, 10px)}.multi-select-header legend{padding:0;float:left}.multi-select-header label{cursor:pointer;padding:var(--tct-select-multi-select-option-padding, var(--t-select-multi-select-option-padding, var(--tct-btn-badge-padding, var(--t-btn-badge-padding, 2px 5px))));font-size:var(--tct-select-multi-select-option-font-size, var(--t-select-multi-select-option-font-size, var(--tct-btn-badge-font-size, var(--t-btn-badge-font-size, inherit))));border-radius:var(--tct-select-multi-select-option-radius, var(--t-select-multi-select-option-radius, var(--tct-btn-badge-border-radius, var(--t-btn-badge-border-radius, var(--app-border-radius-1, 3px)))));background-color:var(--tct-select-multi-select-option-bg, var(--t-select-multi-select-option-bg, var(--tct-btn-badge-bg, var(--t-btn-badge-bg, transparent))));color:var(--tct-select-multi-select-option-color, var(--t-select-multi-select-option-color, var(--tct-btn-badge-font-color, var(--t-btn-badge-font-color, inherit))))}.multi-select-header label:hover{background-color:var(--tct-select-multi-select-option-hover-background-color, var(--t-select-multi-select-option-hover-background-color, var(--tct-btn-badge-hover-bg, var(--t-btn-badge-hover-bg, var(--tct-gray-14, var(--t-gray-14, var(--app-gray-l3, #f2f2f2)))))));color:var(--tct-select-multi-select-option-color, var(--t-select-multi-select-option-color, var(--tct-btn-badge-hover-font-color, var(--t-btn-badge-hover-font-color, var(--tct-gray-5, var(--t-gray-5, var(--app-gray-d2, #404040)))))))}.multi-select-header input:checked+label,.multi-select-header input:checked+label:enabled:hover{background-color:var(--tct-select-multi-select-option-active-background-color, var(--t-select-multi-select-option-active-background-color, var(--tct-btn-primary-bg, var(--t-btn-primary-bg, #2e2e2e))));color:var(--tct-select-multi-select-option-active-color, var(--t-select-multi-select-option-active-color, var(--tct-btn-primary-font-color, var(--t-btn-primary-font-color, var(--app-white, #ffffff)))))}.multi-select-header input:disabled+label{opacity:var(--tct-select-multi-select-option-active-color, var(--t-select-multi-select-option-active-color, var(--tct-btn-disabled-opacity, var(--t-btn-disabled-opacity, var(--app-disabled-opacity, 0.4)))));cursor:not-allowed}.multi-select-header input:focus+label{box-shadow:var(--const-double-focus-ring)}";
14
14
 
15
15
  const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
16
16
  constructor() {
@@ -21,12 +21,10 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
21
21
  this.input = createEvent(this, "input", 7);
22
22
  var _a;
23
23
  this.scheduledAfterRender = [];
24
- this.showSelectedOptions = (event) => {
25
- event.stopPropagation();
24
+ this.showSelectedOptions = () => {
26
25
  this.showSelected = true;
27
26
  };
28
- this.showAllOptions = (event) => {
29
- event === null || event === void 0 ? void 0 : event.stopPropagation();
27
+ this.showAllOptions = () => {
30
28
  this.showSelected = false;
31
29
  };
32
30
  this.onMutationObserved = () => {
@@ -79,14 +77,14 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
79
77
  this.optionList.handleExternalKeydown(event);
80
78
  };
81
79
  this.visibilityToggleKeyDown = (event) => {
82
- const keysForOptionListToHandle = ['ArrowDown', 'ArrowUp'];
83
- const keysThatTriggerClick = ['Enter', ' '];
84
80
  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'));
81
+ const isShiftTab = key === 'Tab' && event.shiftKey;
82
+ const isRadioControlKey = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(key);
83
+ if (isRadioControlKey)
84
+ event.stopPropagation();
85
+ if (isShiftTab) {
86
+ event.stopPropagation();
87
+ this.optionList.setDefaultActiveElement();
90
88
  }
91
89
  };
92
90
  this.inputClickHandler = async (event) => {
@@ -141,6 +139,7 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
141
139
  this.disabled = false;
142
140
  this.readonly = false;
143
141
  this.invalid = undefined;
142
+ this.listLabel = loc('tecton.element.select.listLabel');
144
143
  this.errors = undefined;
145
144
  this.multiple = false;
146
145
  this.minRows = 3;
@@ -364,7 +363,7 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
364
363
  this.change.emit({ value: multiple ? undefined : '', selectedOptions: multiple ? [] : undefined });
365
364
  }
366
365
  calculateMultiSelectSelectedDisplay() {
367
- var _a;
366
+ var _a, _b, _c;
368
367
  const { firstSelectedOptionElement, firstSelectedValue, multilineOptions } = this;
369
368
  if (!firstSelectedValue)
370
369
  return '';
@@ -374,11 +373,15 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
374
373
  return this.searchText;
375
374
  if (multilineOptions)
376
375
  return '';
377
- return (_a = firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.value) !== null && _a !== void 0 ? _a : firstSelectedValue;
376
+ return ((_c = (_b = (_a = firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.value) !== null && _c !== void 0 ? _c : firstSelectedValue);
378
377
  }
379
378
  calculateSingleSelectSelectedDisplay() {
379
+ var _a;
380
380
  const { firstSelectedOptionElement } = this;
381
- return ((firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.display) && loc(firstSelectedOptionElement.display)) || this.value || '';
381
+ return (((firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.display) && loc(firstSelectedOptionElement.display)) ||
382
+ ((_a = firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) ||
383
+ this.value ||
384
+ '');
382
385
  }
383
386
  openDropdownWithoutActiveElement() {
384
387
  if (this.readonly || this.disabled)
@@ -470,16 +473,18 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
470
473
  this.errors.length > 0 &&
471
474
  this.errors.map(error => loc(error))) ||
472
475
  (this.invalid && ['tecton.element.select.invalid']) ||
473
- [], 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()));
476
+ [], disabled: this.disabled, optional: this.optional, readonly: this.readonly, placeholder: this.placeholder || undefined, hideLabel: this.hideLabel, ariaExpanded: `${this.open}`, ariaControls: "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()));
474
477
  }
475
478
  optionsDropdown() {
476
- return (h("q2-popover", { ref: el => (this.popoverElement = el), controlElement: this.innerInputField, 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))));
479
+ return (h("q2-popover", { ref: el => (this.popoverElement = el), controlElement: this.innerInputField, open: this.open, minHeight: this.popoverMinHeight, direction: this.popDirection, onPopoverStateChanged: this.popoverStateChanged, block: true }, h("div", { class: "popover-content", tabindex: "-1" }, h("q2-option-list", { ref: el => (this.optionList = el), id: "option-list", "show-selected": this.showSelected, "aria-label": this.listLabel, multiple: this.multiple, selectedOptions: this.structuredSelectedOptions, onChange: this.onOptionListChange }, h("slot", null)), this.multiple && this.visibilityToggle())));
477
480
  }
478
481
  visibilityToggle() {
479
482
  var _a, _b;
480
483
  const selectedOptionsCount = (_b = (_a = this.selectedOptions) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
481
484
  const { showSelected } = this;
482
- 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]))));
485
+ return (h("div", { class: "multi-select-header", ref: el => (this.multiSelectHeader = el) }, h("fieldset", null, h("legend", { "aria-label": loc('tecton.element.select.multiHeader.showing') }, loc('tecton.element.select.multiHeader.showing')), h("div", null, h("input", { class: "sr", type: "radio", id: "all", name: "viewDisplay", value: "all", checked: !showSelected, "aria-label": loc('tecton.element.select.multiHeader.allAriaLabel'), "test-id": "allOptionsButton", onClick: this.showAllOptions, onKeyDown: this.visibilityToggleKeyDown }), h("label", { htmlFor: "all" }, loc('tecton.element.select.multiHeader.all'))), h("div", null, h("input", { class: "sr", type: "radio", id: "selected", disabled: selectedOptionsCount === 0, name: "viewDisplay", value: "selected", "aria-label": loc('tecton.element.select.multiHeader.selectedAriaLabel', [
486
+ selectedOptionsCount,
487
+ ]), checked: showSelected, "test-id": "selectedOptionsButton", onClick: this.showSelectedOptions, onKeyDown: this.visibilityToggleKeyDown }), h("label", { htmlFor: "selected" }, loc('tecton.element.select.multiHeader.selected', [selectedOptionsCount]))))));
483
488
  }
484
489
  get hostElement() { return this; }
485
490
  static get watchers() { return {
@@ -498,6 +503,7 @@ const Q2Select$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
498
503
  "disabled": [516],
499
504
  "readonly": [516],
500
505
  "invalid": [516],
506
+ "listLabel": [1, "list-label"],
501
507
  "errors": [16],
502
508
  "multiple": [516],
503
509
  "minRows": [2, "min-rows"],
@@ -26,7 +26,10 @@ const Q2Tag$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
26
26
  const target = event.target;
27
27
  if (target.localName === 'click-elsewhere') {
28
28
  event.stopPropagation();
29
- this.popoverElement.open = false;
29
+ const { popoverElement } = this;
30
+ if (!popoverElement)
31
+ return;
32
+ popoverElement.open = false;
30
33
  }
31
34
  };
32
35
  this.handleChange = event => {
@@ -38,6 +41,7 @@ const Q2Tag$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
38
41
  };
39
42
  this.handleClick = async (event) => {
40
43
  event.stopPropagation();
44
+ this.popoverElement.controlElement = this.dropdownBtn;
41
45
  if (shouldShowActionSheet(this)) {
42
46
  const { value } = await showActionSheetList(this, event);
43
47
  this.click.emit({ value });
@@ -47,7 +51,11 @@ const Q2Tag$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
47
51
  }
48
52
  };
49
53
  this.handleKeydown = async (event) => {
54
+ const isTabMetaOrCtrl = event.metaKey || event.ctrlKey || event.key === 'Tab';
55
+ if (isTabMetaOrCtrl)
56
+ return;
50
57
  event.preventDefault();
58
+ this.popoverElement.controlElement = this.dropdownBtn;
51
59
  if (shouldShowActionSheet(this, event)) {
52
60
  const { value } = await showActionSheetList(this, event);
53
61
  this.click.emit({ value });
@@ -56,7 +64,7 @@ const Q2Tag$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
56
64
  this.optionList.handleExternalKeydown(event);
57
65
  }
58
66
  };
59
- this.handleButtonFocusout = (event) => {
67
+ this.handleButtonFocusout = async (event) => {
60
68
  var _a;
61
69
  const relatedTarget = event.relatedTarget;
62
70
  if ((_a = (relatedTarget === null || relatedTarget === void 0 ? void 0 : relatedTarget.tagName) === 'Q2-OPTION') !== null && _a !== void 0 ? _a : false)
@@ -102,7 +110,6 @@ const Q2Tag$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
102
110
  if (open)
103
111
  return;
104
112
  this.optionList.setActiveElement(null);
105
- this.dropdownBtn.focus();
106
113
  }
107
114
  /// DOM ///
108
115
  render() {