q2-tecton-elements 1.26.0 → 1.27.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 (188) 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 +2 -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 +22 -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 +1 -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 +1 -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 +145 -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 +2 -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-396fd275.entry.js +1 -0
  133. package/dist/q2-tecton-elements/p-3dca7465.entry.js +1 -0
  134. package/dist/q2-tecton-elements/p-414ca427.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-a7679912.entry.js → p-ce67d77a.entry.js} +1 -1
  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 +1 -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-input/index.d.ts +1 -1
  166. package/dist/types/components/q2-option/index.d.ts +16 -0
  167. package/dist/types/components/q2-option-list/index.d.ts +6 -0
  168. package/dist/types/components/q2-pagination/index.d.ts +1 -1
  169. package/dist/types/components/q2-pill/index.d.ts +6 -2
  170. package/dist/types/components/q2-radio/index.d.ts +16 -0
  171. package/dist/types/components/q2-select/index.d.ts +3 -2
  172. package/dist/types/components/q2-stepper/index.d.ts +4 -0
  173. package/dist/types/components/q2-stepper-pane/index.d.ts +4 -0
  174. package/dist/types/components/q2-tab-pane/index.d.ts +16 -0
  175. package/dist/types/components/q2-tag/index.d.ts +1 -1
  176. package/dist/types/components.d.ts +148 -0
  177. package/package.json +3 -3
  178. package/dist/q2-tecton-elements/p-09639e95.entry.js +0 -1
  179. package/dist/q2-tecton-elements/p-0b82891e.entry.js +0 -1
  180. package/dist/q2-tecton-elements/p-224d3c31.entry.js +0 -1
  181. package/dist/q2-tecton-elements/p-4734a577.entry.js +0 -1
  182. package/dist/q2-tecton-elements/p-55d192b3.entry.js +0 -1
  183. package/dist/q2-tecton-elements/p-721d0aee.entry.js +0 -1
  184. package/dist/q2-tecton-elements/p-73643653.entry.js +0 -1
  185. package/dist/q2-tecton-elements/p-8d703466.entry.js +0 -1
  186. package/dist/q2-tecton-elements/p-aafb9537.entry.js +0 -1
  187. package/dist/q2-tecton-elements/p-b8420bfe.entry.js +0 -1
  188. package/dist/q2-tecton-elements/p-e4aa271e.entry.js +0 -1
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-bb1c8c7f.js';
2
- import { o as overrideFocus, w as waitForNextPaint, n as nextPaint, a as isEventFromElement, r as resizeIframe } from './index-5040cd84.js';
2
+ import { o as overrideFocus, w as waitForNextPaint, n as nextPaint, a as isEventFromElement, r as resizeIframe } from './index-a0cc60e3.js';
3
3
 
4
4
  const stylesCss$1 = "*{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{position:relative;width:100%;display:block;line-height:var(--tct-option-list-line-height, var(--t-option-list-line-height, var(--app-line-height, 1.428571429em)))}.content{text-align:start}:host([is-sizeable]) .content{display:block;height:auto}";
5
5
 
@@ -10,6 +10,56 @@ const Q2OptionList = class {
10
10
  this.popoverState = createEvent(this, "popoverState", 7);
11
11
  this.ready = createEvent(this, "ready", 3);
12
12
  this.scheduledAfterRender = [];
13
+ this.keyStore = {
14
+ queue: [],
15
+ lastPressedAt: new Date(),
16
+ };
17
+ this.searchAndFocus = (keyValue, shouldSelect) => {
18
+ // pseudo search in non-searchable select
19
+ const reorder = () => {
20
+ this.pivotIndex = this.pivotIndex === undefined ? 0 : (this.activeIndex || 0) + 1;
21
+ const list = this.allOptions.map((element, index) => ({ element, index }));
22
+ return [...list.slice(this.pivotIndex), ...list.slice(0, this.pivotIndex)];
23
+ };
24
+ const buildQueue = () => {
25
+ const now = new Date();
26
+ if (now.getTime() - this.keyStore.lastPressedAt.getTime() > 1000) {
27
+ // empty stored keys if delay > 1s
28
+ this.keyStore.queue.length = 0;
29
+ }
30
+ if (this.keyStore.queue.length !== 1 || this.keyStore.queue[0] !== keyValue) {
31
+ this.keyStore.queue.push(keyValue);
32
+ }
33
+ this.keyStore.lastPressedAt = now;
34
+ };
35
+ const searchIndex = (list) => {
36
+ const keyStr = this.keyStore.queue.join('');
37
+ return list.find(v => {
38
+ return (!v.element.disabled &&
39
+ v.element.display &&
40
+ (v.element.display.match(new RegExp(`^${keyStr}`, 'i')) ||
41
+ v.element.display.replace(/\s/g, '').match(new RegExp(`^${keyStr}`, 'i'))));
42
+ });
43
+ };
44
+ const setFocus = ({ index }) => {
45
+ if (this.multiple) {
46
+ // multiple: should open to make sure that which options are selected
47
+ this.openDropdownWithActiveElement(index);
48
+ }
49
+ else {
50
+ this.activeIndex = index;
51
+ if (shouldSelect)
52
+ this.selectOption(this.allOptions[index]);
53
+ else
54
+ this.setActiveElement(index);
55
+ }
56
+ };
57
+ buildQueue();
58
+ const matched = searchIndex(reorder());
59
+ if (matched) {
60
+ setFocus(matched);
61
+ }
62
+ };
13
63
  /// Event Handlers ///
14
64
  /* tslint:disable:cyclomatic-complexity */
15
65
  this.externalKeydownHandler = (event) => {
@@ -99,7 +149,7 @@ const Q2OptionList = class {
99
149
  let newOption;
100
150
  switch (key) {
101
151
  case ' ':
102
- if (this.searchString) {
152
+ if (this.searchString && !this.multiple) {
103
153
  if (customSearch)
104
154
  break;
105
155
  this.searchOptions(key, false);
@@ -169,6 +219,8 @@ const Q2OptionList = class {
169
219
  case 'Tab':
170
220
  if (shiftKey)
171
221
  break;
222
+ if (this.multiple && this.role === 'listbox')
223
+ break;
172
224
  newOption = allOptions.find(element => element.active);
173
225
  if (!newOption || newOption.disabled)
174
226
  return;
@@ -415,19 +467,8 @@ const Q2OptionList = class {
415
467
  }, 2000);
416
468
  }
417
469
  searchOptions(key, shouldSelect) {
418
- this.resetTimer();
419
- let searchString = this.searchString ? `${this.searchString}${key}` : key;
420
- searchString = searchString.replace(/[^\w\s]/gi, '');
421
- this.searchString = searchString;
422
- const searchRegEx = new RegExp(`^${searchString}`, 'i');
423
- const { allOptions } = this;
424
- const foundIndex = allOptions.findIndex(option => option.value === searchString || option.textContent.trim().match(searchRegEx));
425
- if (foundIndex === -1)
426
- return;
427
- if (shouldSelect)
428
- this.selectOption(this.allOptions[foundIndex]);
429
- else
430
- this.setActiveElement(foundIndex);
470
+ this.searchString = key;
471
+ this.searchAndFocus(key, shouldSelect);
431
472
  }
432
473
  /// Watchers ///
433
474
  showSelectedUpdated(showSelected) {
@@ -549,6 +590,7 @@ const Q2Popover = class {
549
590
  if (this.open)
550
591
  return;
551
592
  this.currentDirection = undefined;
593
+ this.containerElement.style.removeProperty('display');
552
594
  this.containerElement.style.removeProperty('--comp-pop-max-height');
553
595
  }, { once: true });
554
596
  this.show = false;
@@ -582,9 +624,8 @@ const Q2Popover = class {
582
624
  const { containerElement, contentElement, direction, controlElement, currentDirection } = this;
583
625
  if (containerElement)
584
626
  containerElement.style.maxHeight = null;
585
- // If direction defined, use it
586
- if (direction)
587
- return this.setDirectionAndShow(direction);
627
+ // If the direction is already set then use it, otherwise use the current direction
628
+ const currentOrStatedDirection = direction !== null && direction !== void 0 ? direction : currentDirection;
588
629
  // Set the container to block so we can get the height
589
630
  containerElement.style.setProperty('display', 'block');
590
631
  await waitForNextPaint();
@@ -603,13 +644,13 @@ const Q2Popover = class {
603
644
  const canShowFullSizeAbove = contentHeight <= topOffset;
604
645
  let determinedDirection;
605
646
  // Show the full-size popover below or above if it will fit
606
- if (currentDirection === 'down' && canShowFullSizeBelow)
647
+ if (currentOrStatedDirection === 'down' && canShowFullSizeBelow)
607
648
  return this.setDirectionAndShow('down');
608
- else if (currentDirection === 'up' && canShowFullSizeAbove)
649
+ else if (currentOrStatedDirection === 'up' && canShowFullSizeAbove)
609
650
  return this.setDirectionAndShow('up');
610
- else if (currentDirection === undefined && canShowFullSizeBelow)
651
+ else if (currentOrStatedDirection === undefined && canShowFullSizeBelow)
611
652
  determinedDirection = 'down';
612
- else if (currentDirection === undefined && canShowFullSizeAbove)
653
+ else if (currentOrStatedDirection === undefined && canShowFullSizeAbove)
613
654
  determinedDirection = 'up';
614
655
  if (determinedDirection)
615
656
  return this.setDirectionAndShow(determinedDirection);
@@ -618,11 +659,11 @@ const Q2Popover = class {
618
659
  const displayBuffer = 5;
619
660
  const canShowMinHeightBelow = bottomOffset >= minHeight + displayBuffer;
620
661
  let maxHeight;
621
- if (currentDirection === 'down') {
662
+ if (currentOrStatedDirection === 'down') {
622
663
  maxHeight = Math.max(bottomOffset - displayBuffer, minHeight);
623
664
  determinedDirection = 'down';
624
665
  }
625
- else if (currentDirection === 'up') {
666
+ else if (currentOrStatedDirection === 'up') {
626
667
  maxHeight = Math.max(topOffset - displayBuffer, minHeight);
627
668
  determinedDirection = 'up';
628
669
  }
@@ -648,7 +689,7 @@ const Q2Popover = class {
648
689
  const containerClasses = ['container', this.currentDirection];
649
690
  if (this.show)
650
691
  containerClasses.push('show');
651
- return (h("div", { ref: el => (this.containerElement = el), class: containerClasses.join(' '), role: "menu" }, h("div", { ref: el => (this.contentElement = el), class: "content" }, h("slot", null))));
692
+ return (h("div", { ref: el => (this.containerElement = el), class: containerClasses.join(' '), "test-id": "outerContainer" }, h("div", { ref: el => (this.contentElement = el), class: "content" }, h("slot", null))));
652
693
  }
653
694
  get hostElement() { return getElement(this); }
654
695
  static get watchers() { return {
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, c as createEvent, h, g as getElement } from './index-bb1c8c7f.js';
2
- import { o as overrideFocus, a as isEventFromElement, l as loc, n as nextPaint } from './index-5040cd84.js';
2
+ import { n as nextPaint, o as overrideFocus, a as isEventFromElement, l as loc } from './index-a0cc60e3.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{text-align:right;display:block}:host([hidden]){display:none}.container{display:inline-flex;column-gap:var(--tct-pagination-column-gap, var(--t-pagination-column-gap, var(--app-scale-2x, 10px)));align-items:center;height:var(--tct-pagination-height, var(--t-pagination-height, 44px))}.btn-group{display:flex;gap:var(--tct-pagination-btn-gap, var(--t-pagination-btn-gap, 0))}.description,.controls{white-space:nowrap}.controls{display:grid;grid-template-columns:auto 50px auto;align-items:center;gap:var(--tct-pagination-controls-gap, var(--t-pagination-controls-gap, var(--app-scale-1x, 5px)))}.controls[hidden]{display:none}.input-wrapper{height:var(--tct-pagination-height, var(--t-pagination-height, 44px));display:flex;align-items:center}q2-icon{--tct-icon-size:var(--tct-pagination-icon-size, var(--t-pagination-icon-size, 12px));color:var(--tct-pagination-icon-color, var(--t-pagination-icon-color, var(--t-text, #4d4d4d)))}q2-input{--tct-input-margin-top:0;--tct-input-margin-bottom:0;--tct-input-height:var(--tct-pagination-input-height, var(--t-pagination-input-height, 30px));--tct-input-min-height:var(--tct-input-height);--tct-input-align:center}";
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{text-align:right;display:block}:host([hidden]){display:none}.container{display:inline-flex;column-gap:var(--tct-pagination-column-gap, var(--t-pagination-column-gap, var(--app-scale-2x, 10px)));align-items:center;height:var(--tct-pagination-height, var(--t-pagination-height, 44px))}.btn-group{display:flex;gap:var(--tct-pagination-btn-gap, var(--t-pagination-btn-gap, 0))}.description,.controls{white-space:nowrap}.controls{display:grid;grid-template-columns:auto 50px auto;align-items:center;gap:var(--tct-pagination-controls-gap, var(--t-pagination-controls-gap, var(--app-scale-1x, 5px)))}.controls[hidden]{display:none}.input-wrapper{height:var(--tct-pagination-height, var(--t-pagination-height, 44px));display:flex;align-items:center}q2-btn{--tct-btn-border-radius:var(--tct-pagination-btn-border-radius, var(--t-pagination-btn-border-radius));--tct-btn-border:var(--tct-pagination-btn-border, var(--t-pagination-btn-border))}q2-icon{--tct-icon-size:var(--tct-pagination-icon-size, var(--t-pagination-icon-size, 12px));color:var(--tct-pagination-icon-color, var(--t-pagination-icon-color, var(--t-text, #4d4d4d)))}q2-input{--tct-input-margin-top:0;--tct-input-margin-bottom:0;--tct-input-height:var(--tct-pagination-input-height, var(--t-pagination-input-height, 30px));--tct-input-min-height:var(--tct-input-height);--tct-input-align:center}";
5
5
 
6
6
  const Q2Pagination = class {
7
7
  constructor(hostRef) {
@@ -22,6 +22,20 @@ const Q2Pagination = class {
22
22
  }
23
23
  this.change.emit({ page });
24
24
  };
25
+ this.checkSize = () => {
26
+ const { hostElement, containerElement } = this;
27
+ const isOverflowing = this.containerWidth > hostElement.clientWidth;
28
+ this.isSmall = isOverflowing;
29
+ if (isOverflowing)
30
+ return;
31
+ nextPaint(() => {
32
+ const containerWidthHasNotChanged = this.containerWidth === containerElement.clientWidth;
33
+ if (containerWidthHasNotChanged)
34
+ return;
35
+ this.containerWidth = containerElement.clientWidth;
36
+ this.checkSize();
37
+ });
38
+ };
25
39
  this.recordType = undefined;
26
40
  this.perPage = undefined;
27
41
  this.total = undefined;
@@ -37,12 +51,14 @@ const Q2Pagination = class {
37
51
  return;
38
52
  this.containerWidth = this.containerElement.clientWidth;
39
53
  this.resizeObserver = new ResizeObserver(() => this.checkSize());
54
+ window.addEventListener('resize', this.checkSize);
40
55
  this.resizeObserver.observe(this.hostElement);
41
56
  overrideFocus(this.hostElement);
42
57
  }
43
58
  disconnectedCallback() {
44
59
  var _a;
45
60
  (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
61
+ window.removeEventListener('resize', this.checkSize);
46
62
  }
47
63
  onHostElementFocus(event) {
48
64
  var _a;
@@ -83,20 +99,6 @@ const Q2Pagination = class {
83
99
  return pages;
84
100
  return Math.ceil(total / perPage);
85
101
  }
86
- checkSize() {
87
- const { hostElement, containerElement } = this;
88
- const isOverflowing = this.containerWidth > hostElement.clientWidth;
89
- this.isSmall = isOverflowing;
90
- if (isOverflowing)
91
- return;
92
- nextPaint(() => {
93
- const containerWidthHasNotChanged = this.containerWidth === containerElement.clientWidth;
94
- if (containerWidthHasNotChanged)
95
- return;
96
- this.containerWidth = containerElement.clientWidth;
97
- this.checkSize();
98
- });
99
- }
100
102
  ////////// OBSERVERS //////////
101
103
  render() {
102
104
  const { pagesOnly, isFullViewHidden, recordTypeWithDefault: recordType, totalPages, totalWithDefault: total, pageWithDefault: page, currentRange, } = this;
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, c as createEvent, h, g as getElement } from './index-bb1c8c7f.js';
2
- import { r as resizeIframe, o as overrideFocus, l as loc, a as isEventFromElement } from './index-5040cd84.js';
2
+ import { r as resizeIframe, o as overrideFocus, l as loc, a as isEventFromElement } from './index-a0cc60e3.js';
3
3
  import { s as shouldShowActionSheet, a as showActionSheetList } from './action-sheet-a9597b32.js';
4
4
 
5
5
  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:inline-block;position:relative;line-height:0}:host(:not(:last-child)){margin-inline-end:var(--tct-pill-margin, var(--t-pill-margin, var(--app-scale-2x, 10px)))}q2-popover,.btn-wrapper{--comp-pill-min-height:var(--tct-pill-min-height, var(--t-pill-min-height, 44px));--comp-pill-btn-height:var(--tct-pill-btn-height, var(--t-pill-btn-height, 30px))}.btn-wrapper{--comp-pill-btn-border-width:var(--tct-pill-btn-border-width, var(--t-pill-btn-border-width, 2px));--comp-close-size:0px;--comp-btn-background:var(--tct-pill-btn-background, var(--t-pill-btn-background, var(--t-base, #ffffff)));--compt-hover-btn-background:var(--tct-pill-hover-btn-background, var(--t-pill-hover-btn-background, var(--t-gray-13, #e6e6e6)));--comp-btn-padding:var(--tct-pill-btn-padding-inline, var(--t-pill-btn-padding-inline, var(--app-scale-3x, 15px)));--comp-btn-color:var(--tct-pill-btn-color, var(--t-pill-btn-color, var(--t-gray-3, #262626)));--comp-active-btn-color:var(--comp-btn-background);--comp-active-btn-background:var(--tct-pill-active-btn-background, var(--t-pill-active-btn-background, var(--t-gray-7, #666666)));--comp-active-btn-border-color:var(--tct-pill-active-btn-border-color, var(--t-pill-active-btn-border-color, var(--t-gray-7, #666666)));--comp-hover-active-btn-background:var(--tct-pill-active-btn-background, var(--t-pill-active-btn-background, var(--t-gray-6, #4d4d4d)));--comp-hover-active-btn-border-color:var(--tct-pill-active-btn-background, var(--t-pill-active-btn-background, var(--t-gray-6, #4d4d4d)));position:relative}:host(:not(:empty)) .btn-wrapper,.btn-wrapper.has-icon{--comp-close-size:var(--comp-pill-btn-height)}:host([active]) .btn-wrapper{--comp-btn-color:var(--tct-pill-active-btn-color, var(--t-pill-active-btn-color, var(--t-base, #ffffff)))}:host([theme=primary]) .btn-wrapper{--comp-active-btn-background:var(--t-primary-l5, #61c4ff);--comp-active-btn-color:var(--t-primary-text, #ffffff);--comp-active-btn-border-color:var(--t-primary-l5, #61c4ff);--comp-hover-active-btn-background:var(--t-primary-l3, #21acff);--comp-hover-active-btn-border-color:var(--t-primary-l3, #21acff)}:host([theme=secondary]) .btn-wrapper{--comp-active-btn-background:var(--t-secondary-l5, #d9e1e6);--comp-active-btn-color:var(--t-secondary-text, #141414);--comp-active-btn-border-color:var(--t-secondary-l5, #d9e1e6);--comp-hover-active-btn-background:var(--t-secondary-l3, #c9d5db);--comp-hover-active-btn-border-color:var(--t-secondary-l3, #c9d5db)}:host([theme=tertiary]) .btn-wrapper{--comp-active-btn-background:var(--t-tertiary-l5, #f4fafe);--comp-active-btn-color:var(--t-tertiary-text, #141414);--comp-active-btn-border-color:var(--t-tertiary-l5, #f4fafe);--comp-hover-active-btn-background:var(--t-tertiary-l3, #eff8fd);--comp-hover-active-btn-border-color:var(--t-tertiary-l3, #eff8fd)}.btn-height-wrapper{height:var(--comp-pill-min-height);display:flex;align-items:center;cursor:pointer}.btn-height-wrapper:focus{box-shadow:none}:host([disabled]) .btn-height-wrapper{cursor:not-allowed}.btn-close,.btn-primary{cursor:pointer;height:var(--comp-pill-btn-height);border-style:solid;border-radius:var(--tct-pill-btn-border-radius, var(--t-pill-btn-border-radius, 30px));transition-property:background, color, padding, width, opacity;transition:var(--tct-pill-btn-tween, var(--t-pill-btn-tween, var(--app-tween-1, 0.2s ease)))}:host([disabled]) .btn-close,:host([disabled]) .btn-primary,:host([disabled]) q2-icon{opacity:var(--tct-pill-disabled-opacity, var(--t-pill-disabled-opacity, var(--tct-disabled-opacity, var(--app-disabled-opacity, 0.4))));cursor:not-allowed}.btn-primary{background:var(--comp-btn-background);border-width:var(--comp-pill-btn-border-width);border-color:var(--tct-pill-btn-border-color, var(--t-pill-btn-border-color, var(--t-a11y-gray-color-AA, #949494)));padding-inline:var(--comp-btn-padding);padding-right:calc(var(--comp-btn-padding) + var(--comp-close-size));font-size:var(--tct-pill-btn-font-size, var(--t-pill-btn-font-size, var(--app-font-size, 14px)));color:var(--comp-btn-color);display:block;width:100%;text-align:start}.btn-primary:focus,.btn-primary:hover{background:var(--comp-hover-btn-background)}:host(:not(:empty)) .btn-primary,.has-icon .btn-primary{padding-right:calc(var(--tct-pill-icon-gap, var(--t-pill-icon-gap, var(--app-scale-1x, 5px))) + var(--comp-close-size))}.has-options .btn-primary{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:var(--tct-pill-max-width, var(--t-pill-max-width, 200px))}:host([active]) .btn-primary{background:var(--comp-active-btn-background);border-color:var(--comp-active-btn-border-color);color:var(--comp-active-btn-color)}:host([active]) .btn-primary:focus,:host([active]) .btn-primary:hover{background:var(--comp-hover-active-btn-background);border-color:var(--comp-hover-active-btn-border-color)}.btn-close{background:transparent;border-color:transparent;border-width:var(--comp-pill-btn-border-width);width:var(--comp-close-size);height:var(--comp-close-size);padding:0;border:0;display:inline-flex;justify-content:center;align-items:center;position:absolute;right:0;top:50%;transform:translateY(-50%);opacity:0}:host([active]) .btn-close{color:var(--comp-active-btn-color)}:host(:not(:empty)) .btn-close,.has-icon .btn-close{opacity:1}q2-icon{--t-icon-stroke-primary:currentColor;width:var(--tct-pill-icon-size, var(--t-pill-icon-size, 14px));height:var(--tct-pill-icon-size, var(--t-pill-icon-size, 14px));transition-property:transform;transition:var(--tct-pill-btn-tween, var(--t-pill-btn-tween, var(--app-tween-1, 0.2s ease)))}div.btn-close{pointer-events:none}:host([open]) div.btn-close q2-icon{transform:rotate(180deg)}:host([active]) button.btn-close:focus,:host([active]) button.btn-close:hover{background:var(--tct-pill-hover-close-btn-background, var(--t-pill-hover-close-btn-background, var(--t-top-a1, rgba(13, 13, 13, 0.35))));border-color:var(--tct-pill-hover-close-btn-border-color, var(--t-pill-hover-close-btn-border-color, var(--t-top-a1, rgba(13, 13, 13, 0.35))))}q2-popover{top:calc(var(--comp-pill-min-height) - (var(--comp-pill-min-height) - var(--comp-pill-btn-height)) / 2)}";
@@ -11,12 +11,30 @@ const Q2Pill = class {
11
11
  var _a;
12
12
  this.scheduledAfterRender = [];
13
13
  /// Helpers ///
14
+ this.syncValueProperties = () => {
15
+ const { value, selectedOptions } = this;
16
+ if (!!(selectedOptions === null || selectedOptions === void 0 ? void 0 : selectedOptions.length))
17
+ this.selectedOptionsChanged(selectedOptions);
18
+ else if (value)
19
+ this.valueChanged(value);
20
+ };
21
+ this.getOption = async (value) => {
22
+ if (this.optionList) {
23
+ const options = await this.optionList.getOptions();
24
+ return options.find(option => option.value === value);
25
+ }
26
+ else {
27
+ return this.hostElement.querySelector(`q2-option[value="${value}"]`);
28
+ }
29
+ };
14
30
  this.updateSelectedOptionElements = async () => {
15
31
  var _a;
16
32
  const { selectedOptions } = this;
17
33
  const selectedValues = selectedOptions.map(option => option.value);
18
34
  const options = await ((_a = this.optionList) === null || _a === void 0 ? void 0 : _a.getOptions());
19
- this.selectedOptionElements = options === null || options === void 0 ? void 0 : options.filter(option => selectedValues.includes(option.value));
35
+ if (this.hasOptions)
36
+ this.active = !!selectedValues.length;
37
+ this.selectedOptionElements = (options === null || options === void 0 ? void 0 : options.filter(option => selectedValues.includes(option.value))) || [];
20
38
  };
21
39
  this.determineHasOptions = () => {
22
40
  const hasOptions = !!this.hostElement.querySelectorAll('q2-option').length;
@@ -24,6 +42,7 @@ const Q2Pill = class {
24
42
  };
25
43
  this.clearSelectedOptions = () => {
26
44
  this.selectedOptions = [];
45
+ this.value = null;
27
46
  this.active = false;
28
47
  this.open = false;
29
48
  this.primaryBtn.focus();
@@ -56,9 +75,10 @@ const Q2Pill = class {
56
75
  }
57
76
  };
58
77
  this.handleKeydown = async (event) => {
59
- event.preventDefault();
60
- if (!this.hasOptions || this.disabled)
78
+ const isTabMetaOrCtrl = event.metaKey || event.ctrlKey || event.key === 'Tab';
79
+ if (!this.hasOptions || this.disabled || isTabMetaOrCtrl)
61
80
  return;
81
+ event.preventDefault();
62
82
  if (shouldShowActionSheet(this, event)) {
63
83
  this.executeActionSheet(event);
64
84
  }
@@ -66,6 +86,13 @@ const Q2Pill = class {
66
86
  this.optionList.handleExternalKeydown(event);
67
87
  }
68
88
  };
89
+ this.handleButtonFocusout = async (event) => {
90
+ var _a;
91
+ const relatedTarget = event.relatedTarget;
92
+ if ((_a = (relatedTarget === null || relatedTarget === void 0 ? void 0 : relatedTarget.tagName) === 'Q2-OPTION') !== null && _a !== void 0 ? _a : false)
93
+ return;
94
+ this.open = false;
95
+ };
69
96
  this.handleChange = event => {
70
97
  event.stopPropagation();
71
98
  if (!this.hasOptions)
@@ -80,7 +107,10 @@ const Q2Pill = class {
80
107
  const target = event.target;
81
108
  if (target.localName === 'click-elsewhere') {
82
109
  event.stopPropagation();
83
- this.popoverElement.open = false;
110
+ const { popoverElement } = this;
111
+ if (!popoverElement)
112
+ return;
113
+ popoverElement.open = false;
84
114
  }
85
115
  };
86
116
  this.hoist = !!((_a = window.Tecton) === null || _a === void 0 ? void 0 : _a.useActionSheets);
@@ -106,6 +136,7 @@ const Q2Pill = class {
106
136
  }
107
137
  componentDidLoad() {
108
138
  overrideFocus(this.hostElement);
139
+ this.syncValueProperties();
109
140
  }
110
141
  componentDidRender() {
111
142
  this.scheduledAfterRender.forEach(fn => fn());
@@ -135,12 +166,22 @@ const Q2Pill = class {
135
166
  const result = await showActionSheetList(this, event);
136
167
  this.handleSelectionChanges(result);
137
168
  }
138
- handleSelectionChanges(changeDetails) {
169
+ async handleSelectionChanges(changeDetails) {
170
+ const { multiple } = this;
139
171
  const { value = '', values = [] } = changeDetails;
140
- const isActive = !!values.length;
172
+ const isActive = multiple ? !!values.length : !!value;
141
173
  if (!this.hostElement.onchange) {
142
- this.selectedOptions = values;
143
- this.active = isActive;
174
+ if (multiple) {
175
+ this.selectedOptions = values;
176
+ this.value = undefined;
177
+ }
178
+ else {
179
+ const selectedOption = await this.getOption(value);
180
+ this.selectedOptions = selectedOption
181
+ ? [{ value: selectedOption.value, display: selectedOption.display }]
182
+ : undefined;
183
+ this.value = selectedOption.value || undefined;
184
+ }
144
185
  }
145
186
  this.change.emit({
146
187
  value,
@@ -149,8 +190,35 @@ const Q2Pill = class {
149
190
  });
150
191
  }
151
192
  /// Watchers ///
152
- selectedOptionsWatcher() {
153
- this.updateSelectedOptionElements();
193
+ async valueChanged(newValue) {
194
+ var _a, _b;
195
+ const { multiple, selectedOptions } = this;
196
+ 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;
197
+ if (multiple)
198
+ return;
199
+ if (newValue === firstValue)
200
+ this.updateSelectedOptionElements();
201
+ else {
202
+ const selectedOption = await this.getOption(newValue);
203
+ const { value, display } = selectedOption || { value: newValue, display: null };
204
+ this.selectedOptions = [{ value, display }];
205
+ }
206
+ }
207
+ selectedOptionsChanged(newValue) {
208
+ var _a, _b;
209
+ const { multiple } = this;
210
+ 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;
211
+ if (multiple) {
212
+ if (this.value)
213
+ this.value = null;
214
+ this.updateSelectedOptionElements();
215
+ }
216
+ else if (this.value === firstValue) {
217
+ this.updateSelectedOptionElements();
218
+ }
219
+ else {
220
+ this.value = firstValue;
221
+ }
154
222
  }
155
223
  /// Listeners ///
156
224
  delegateFocus(event) {
@@ -164,7 +232,6 @@ const Q2Pill = class {
164
232
  if (open)
165
233
  return;
166
234
  this.optionList.setActiveElement(null);
167
- this.primaryBtn.focus();
168
235
  }
169
236
  /// DOM ///
170
237
  generateIcon() {
@@ -181,11 +248,12 @@ const Q2Pill = class {
181
248
  wrapperClassNames.push('has-icon');
182
249
  if (hasOptions)
183
250
  wrapperClassNames.push('has-options');
184
- 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))))));
251
+ 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))))));
185
252
  }
186
253
  get hostElement() { return getElement(this); }
187
254
  static get watchers() { return {
188
- "selectedOptions": ["selectedOptionsWatcher"]
255
+ "value": ["valueChanged"],
256
+ "selectedOptions": ["selectedOptionsChanged"]
189
257
  }; }
190
258
  };
191
259
  Q2Pill.style = stylesCss;
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, c as createEvent, h, F as Fragment, g as getElement } from './index-bb1c8c7f.js';
2
- import { c as createGuid, o as overrideFocus, a as isEventFromElement, l as loc } from './index-5040cd84.js';
2
+ import { c as createGuid, o as overrideFocus, a as isEventFromElement, l as loc } from './index-a0cc60e3.js';
3
3
 
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{margin-top:var(--tct-scale-2, var(--app-scale-2x, 10px))}fieldset{padding:0;margin:0;border:0;position:relative}.label-row{display:grid;grid-template-columns:1fr 24px;grid-template-areas:\"label icon\";gap:var(--app-scale-1x, 5px)}.label-row q2-icon{grid-area:icon;margin-top:-2px;margin-bottom:-2px}.group-legend{font-weight:600}.optional-tag{margin-left:var(--tct-input-label-optional-margin-left, var(--t-input-label-optional-margin-left, var(--tct-scale-1, var(--app-scale-1x, 5px))));color:var(--tct-input-label-optional-font-color, var(--t-input-label-optional-font-color, var(--t-textA, var(--t-a11y-gray-color, rgba(77, 77, 77, 0.77)))));font-size:var(--tct-input-label-optional-font-size, var(--t-input-label-optional-font-size, 12px));font-weight:var(--tct-input-label-optional-font-weight, var(--t-input-label-optional-font-weight, 400))}.tile-container,.tile-container .options-container{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex-grow:1}.options-container{--comp-default-margin:var(--app-scale-1x, 5px) 0;--comp-options-margin:var(--tct-radio-group-options-margin, var(--t-radio-group-options-margin, var(--comp-default-margin, 5px 0)));margin:var(--comp-options-margin);padding:var(--tct-radio-group-options-padding, var(--t-radio-group-options-padding, var(--app-scale-1x, 5px)));border-width:1px;border-color:transparent;border-style:solid;border-radius:var(--tct-border-radius-1, var(--app-border-radius-1, 2px))}:host([has-error]) .options-container{border-color:var(--tct-input-error-border-color, var(--const-stoplight-alert, #c30000))}:host([has-error=false]) .options-container{border-color:transparent}.tile-container.left{justify-content:start}.tile-container.right{justify-content:end}.tile-container .options-container{gap:var(--tct-radio-group-tile-gap, var(--t-radio-group-tile-gap, var(--app-scale-2x, 10px)));justify-content:inherit}";
5
5
 
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, c as createEvent, h, g as getElement } from './index-bb1c8c7f.js';
2
- import { c as createGuid, h as handleAriaLabel, o as overrideFocus, l as loc } from './index-5040cd84.js';
2
+ import { c as createGuid, h as handleAriaLabel, o as overrideFocus, l as loc } from './index-a0cc60e3.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 = class {
7
7
  constructor(hostRef) {
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, c as createEvent, h, g as getElement } from './index-bb1c8c7f.js';
2
- import { r as resizeIframe, o as overrideFocus, a as isEventFromElement, n as nextPaint, l as loc } from './index-5040cd84.js';
2
+ import { r as resizeIframe, o as overrideFocus, a as isEventFromElement, n as nextPaint, l as loc } from './index-a0cc60e3.js';
3
3
 
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;background-color:var(--tct-section-background-color, var(--t-section-background-color, var(--tct-section-bg, var(--t-section-bg, var(--app-white, #ffffff)))));color:var(--tct-section-font-color, var(--t-section-font-color, var(--t-text, #4d4d4d)));border-radius:var(--tct-section-border-radius, var(--t-section-border-radius, var(--app-border-radius-1, 3px)));margin:var(--tct-section-margin, var(--t-section-margin, var(--app-scale-3x, 15px)))}@media screen and (max-width: 767px){:host{--comp-default-margin:var(--app-scale-3x, 15px) 0;margin:var(--tct-section-margin, var(--t-section-margin, var(--comp-default-margin)))}}.wrapper{--comp-tween:var(--tct-section-tween, var(--t-section-tween, var(--app-tween-1, 0.2s ease)));--comp-default-wrapper-padding:var(--app-scale-1x, 5px) 0;display:block;padding:var(--tct-section-wrapper-padding, var(--t-section-wrapper-padding, var(--comp-default-wrapper-padding)))}.wrapper:hover{box-shadow:var(--tct-section-wrapper-hover-box-shadow, var(--t-section-wrapper-hover-box-shadow, inherit))}:host([collapsible]) .wrapper{--comp-tween:var(--tct-section-tween, var(--t-section-tween, var(--app-tween-2, 0.4s ease)))}header{--comp-default-header-padding:0 var(--app-scale-3x, 15px);padding:var(--tct-section-header-padding, var(--t-section-header-padding, var(--comp-default-header-padding)));display:flex}header.has-header{min-height:var(--tct-section-header-min-height, var(--t-section-header-min-height, 44px))}.header-content{flex:1 1 100%;min-width:0;align-self:center}:host([collapsible]) .header-content{cursor:pointer}.title{margin:0;font-size:20px;font-weight:600;text-transform:uppercase;letter-spacing:0.5px}q2-icon{transition:transform var(--comp-tween)}:host(:not([expanded])) q2-icon,:host([expanded=false]) q2-icon{transform:rotate(180deg)}.content-wrapper{height:auto}.content-wrapper.is-closed{display:none;overflow:hidden}.content-wrapper.is-transitioning{overflow:hidden}:host([collapsible]) .content-wrapper{transition:height var(--comp-tween)}.content{--comp-default-content-padding:var(--app-scale-2x, 10px) var(--app-scale-3x, 15px);padding:var(--tct-section-content-padding, var(--t-section-content-padding, var(--comp-default-content-padding)))}.content:focus{box-shadow:none}:host([collapsible]) :host(:not([expanded])) .content{visibility:hidden}";
5
5
 
@@ -1,8 +1,8 @@
1
1
  import { r as registerInstance, c as createEvent, h, g as getElement } from './index-bb1c8c7f.js';
2
- import { h as handleAriaLabel, o as overrideFocus, l as loc, d as isRelatedTargetWithinHost, a as isEventFromElement, e as isHostLosingFocus } from './index-5040cd84.js';
2
+ import { l as loc, h as handleAriaLabel, o as overrideFocus, d as isRelatedTargetWithinHost, a as isEventFromElement, e as isHostLosingFocus } from './index-a0cc60e3.js';
3
3
  import { s as shouldShowActionSheet, a as showActionSheetList } from './action-sheet-a9597b32.js';
4
4
 
5
- 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}";
5
+ 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)}";
6
6
 
7
7
  const Q2Select = class {
8
8
  constructor(hostRef) {
@@ -11,12 +11,10 @@ const Q2Select = class {
11
11
  this.input = createEvent(this, "input", 7);
12
12
  var _a;
13
13
  this.scheduledAfterRender = [];
14
- this.showSelectedOptions = (event) => {
15
- event.stopPropagation();
14
+ this.showSelectedOptions = () => {
16
15
  this.showSelected = true;
17
16
  };
18
- this.showAllOptions = (event) => {
19
- event === null || event === void 0 ? void 0 : event.stopPropagation();
17
+ this.showAllOptions = () => {
20
18
  this.showSelected = false;
21
19
  };
22
20
  this.onMutationObserved = () => {
@@ -69,14 +67,14 @@ const Q2Select = class {
69
67
  this.optionList.handleExternalKeydown(event);
70
68
  };
71
69
  this.visibilityToggleKeyDown = (event) => {
72
- const keysForOptionListToHandle = ['ArrowDown', 'ArrowUp'];
73
- const keysThatTriggerClick = ['Enter', ' '];
74
70
  const key = event.key;
75
- if (keysForOptionListToHandle.includes(key)) {
76
- this.optionList.handleExternalKeydown(event);
77
- }
78
- else if (keysThatTriggerClick.includes(key)) {
79
- event.target.dispatchEvent(new MouseEvent('click'));
71
+ const isShiftTab = key === 'Tab' && event.shiftKey;
72
+ const isRadioControlKey = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(key);
73
+ if (isRadioControlKey)
74
+ event.stopPropagation();
75
+ if (isShiftTab) {
76
+ event.stopPropagation();
77
+ this.optionList.setDefaultActiveElement();
80
78
  }
81
79
  };
82
80
  this.inputClickHandler = async (event) => {
@@ -131,6 +129,7 @@ const Q2Select = class {
131
129
  this.disabled = false;
132
130
  this.readonly = false;
133
131
  this.invalid = undefined;
132
+ this.listLabel = loc('tecton.element.select.listLabel');
134
133
  this.errors = undefined;
135
134
  this.multiple = false;
136
135
  this.minRows = 3;
@@ -354,7 +353,7 @@ const Q2Select = class {
354
353
  this.change.emit({ value: multiple ? undefined : '', selectedOptions: multiple ? [] : undefined });
355
354
  }
356
355
  calculateMultiSelectSelectedDisplay() {
357
- var _a;
356
+ var _a, _b, _c;
358
357
  const { firstSelectedOptionElement, firstSelectedValue, multilineOptions } = this;
359
358
  if (!firstSelectedValue)
360
359
  return '';
@@ -364,11 +363,15 @@ const Q2Select = class {
364
363
  return this.searchText;
365
364
  if (multilineOptions)
366
365
  return '';
367
- return (_a = firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.value) !== null && _a !== void 0 ? _a : firstSelectedValue;
366
+ 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);
368
367
  }
369
368
  calculateSingleSelectSelectedDisplay() {
369
+ var _a;
370
370
  const { firstSelectedOptionElement } = this;
371
- return ((firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.display) && loc(firstSelectedOptionElement.display)) || this.value || '';
371
+ return (((firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.display) && loc(firstSelectedOptionElement.display)) ||
372
+ ((_a = firstSelectedOptionElement === null || firstSelectedOptionElement === void 0 ? void 0 : firstSelectedOptionElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) ||
373
+ this.value ||
374
+ '');
372
375
  }
373
376
  openDropdownWithoutActiveElement() {
374
377
  if (this.readonly || this.disabled)
@@ -460,16 +463,18 @@ const Q2Select = class {
460
463
  this.errors.length > 0 &&
461
464
  this.errors.map(error => loc(error))) ||
462
465
  (this.invalid && ['tecton.element.select.invalid']) ||
463
- [], 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()));
466
+ [], 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()));
464
467
  }
465
468
  optionsDropdown() {
466
- 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))));
469
+ 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())));
467
470
  }
468
471
  visibilityToggle() {
469
472
  var _a, _b;
470
473
  const selectedOptionsCount = (_b = (_a = this.selectedOptions) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
471
474
  const { showSelected } = this;
472
- 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]))));
475
+ 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', [
476
+ selectedOptionsCount,
477
+ ]), checked: showSelected, "test-id": "selectedOptionsButton", onClick: this.showSelectedOptions, onKeyDown: this.visibilityToggleKeyDown }), h("label", { htmlFor: "selected" }, loc('tecton.element.select.multiHeader.selected', [selectedOptionsCount]))))));
473
478
  }
474
479
  get hostElement() { return getElement(this); }
475
480
  static get watchers() { return {
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, c as createEvent, h, F as Fragment, g as getElement } from './index-bb1c8c7f.js';
2
- import { c as createGuid, n as nextPaint, l as loc } from './index-5040cd84.js';
2
+ import { c as createGuid, n as nextPaint, l as loc } from './index-a0cc60e3.js';
3
3
 
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;position:relative}";
5
5