q2-tecton-elements 1.13.0-alpha.0 → 1.13.2

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 (235) hide show
  1. package/dist/cjs/click-elsewhere.cjs.entry.js +5 -7
  2. package/dist/cjs/{icons-4595ee47.js → icons-08ffe5c9.js} +394 -384
  3. package/dist/cjs/{index-c2e53804.js → index-7febb200.js} +112 -65
  4. package/dist/cjs/{index-a55d3c34.js → index-dd823ee6.js} +27 -14
  5. package/dist/cjs/loader.cjs.js +3 -3
  6. package/dist/cjs/q2-avatar.cjs.entry.js +2 -2
  7. package/dist/cjs/q2-badge.cjs.entry.js +43 -0
  8. package/dist/cjs/q2-btn_2.cjs.entry.js +13 -13
  9. package/dist/cjs/q2-calendar.cjs.entry.js +54 -59
  10. package/dist/cjs/q2-card.cjs.entry.js +127 -0
  11. package/dist/cjs/q2-carousel-pane.cjs.entry.js +5 -5
  12. package/dist/cjs/q2-carousel.cjs.entry.js +318 -106
  13. package/dist/cjs/q2-checkbox-group.cjs.entry.js +6 -3
  14. package/dist/cjs/q2-checkbox.cjs.entry.js +19 -11
  15. package/dist/cjs/q2-dropdown-item.cjs.entry.js +7 -7
  16. package/dist/cjs/q2-dropdown.cjs.entry.js +8 -17
  17. package/dist/cjs/q2-editable-field.cjs.entry.js +5 -8
  18. package/dist/cjs/q2-icon.cjs.entry.js +3 -3
  19. package/dist/cjs/q2-input.cjs.entry.js +439 -437
  20. package/dist/cjs/q2-loading-element.cjs.entry.js +3 -3
  21. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-message.cjs.entry.js +5 -5
  23. package/dist/cjs/q2-optgroup.cjs.entry.js +3 -3
  24. package/dist/cjs/q2-option-list.cjs.entry.js +359 -0
  25. package/dist/cjs/q2-option.cjs.entry.js +3 -11
  26. package/dist/cjs/q2-pagination.cjs.entry.js +116 -0
  27. package/dist/cjs/q2-pill.cjs.entry.js +137 -0
  28. package/dist/cjs/q2-radio-group.cjs.entry.js +43 -18
  29. package/dist/cjs/q2-radio.cjs.entry.js +21 -4
  30. package/dist/cjs/q2-section.cjs.entry.js +5 -7
  31. package/dist/cjs/q2-select.cjs.entry.js +36 -31
  32. package/dist/cjs/q2-stepper-pane.cjs.entry.js +42 -4
  33. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +278 -0
  34. package/dist/cjs/q2-stepper.cjs.entry.js +10 -12
  35. package/dist/cjs/q2-tab-container.cjs.entry.js +12 -8
  36. package/dist/cjs/q2-tab-pane.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-tag.cjs.entry.js +94 -0
  38. package/dist/cjs/q2-tecton-elements.cjs.js +3 -3
  39. package/dist/cjs/q2-textarea.cjs.entry.js +8 -8
  40. package/dist/cjs/{shapes-086c0365.js → shapes-305746b5.js} +9 -16
  41. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -5
  42. package/dist/collection/collection-manifest.json +10 -3
  43. package/dist/collection/components/click-elsewhere/index.js +4 -6
  44. package/dist/collection/components/q2-badge/index.js +148 -0
  45. package/dist/collection/components/q2-badge/styles.css +134 -0
  46. package/dist/collection/components/q2-btn/index.js +14 -14
  47. package/dist/collection/components/q2-btn/styles.css +1 -1
  48. package/dist/collection/components/q2-calendar/helpers.js +22 -20
  49. package/dist/collection/components/q2-calendar/index.js +45 -37
  50. package/dist/collection/components/q2-calendar/validation.js +4 -2
  51. package/dist/collection/components/q2-card/index.js +347 -0
  52. package/dist/collection/components/q2-card/styles.css +177 -0
  53. package/dist/collection/components/q2-carousel/index.js +11 -16
  54. package/dist/collection/components/q2-carousel/styles.css +3 -3
  55. package/dist/collection/components/q2-carousel-pane/index.js +2 -2
  56. package/dist/collection/components/q2-carousel-pane/styles.css +8 -3
  57. package/dist/collection/components/q2-checkbox/index.js +36 -11
  58. package/dist/collection/components/q2-checkbox/styles.css +1 -0
  59. package/dist/collection/components/q2-checkbox-group/index.js +22 -1
  60. package/dist/collection/components/q2-dropdown/index.js +6 -15
  61. package/dist/collection/components/q2-dropdown-item/index.js +5 -5
  62. package/dist/collection/components/q2-editable-field/index.js +3 -6
  63. package/dist/collection/components/q2-icon/icons.js +393 -383
  64. package/dist/collection/components/q2-input/formatting/credit-card.js +15 -13
  65. package/dist/collection/components/q2-input/formatting/currency.js +162 -162
  66. package/dist/collection/components/q2-input/formatting/date.js +1 -1
  67. package/dist/collection/components/q2-input/formatting/generic.js +7 -8
  68. package/dist/collection/components/q2-input/formatting/number.js +6 -9
  69. package/dist/collection/components/q2-input/formatting/numeric.js +5 -5
  70. package/dist/collection/components/q2-input/formatting/phone.js +215 -215
  71. package/dist/collection/components/q2-input/formatting/postal.js +1 -1
  72. package/dist/collection/components/q2-input/index.js +81 -25
  73. package/dist/collection/components/q2-input/styles.css +19 -14
  74. package/dist/collection/components/q2-loading/index.js +4 -4
  75. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js +1 -1
  76. package/dist/collection/components/q2-loading/skeleton/shapes.js +8 -15
  77. package/dist/collection/components/q2-message/index.js +3 -3
  78. package/dist/collection/components/q2-optgroup/index.js +1 -1
  79. package/dist/collection/components/q2-option/index.js +19 -25
  80. package/dist/collection/components/q2-option/styles.css +5 -0
  81. package/dist/collection/components/q2-option-list/index.js +648 -0
  82. package/dist/collection/components/q2-option-list/styles.css +128 -0
  83. package/dist/collection/components/q2-pagination/index.js +275 -0
  84. package/dist/collection/components/q2-pagination/styles.css +120 -0
  85. package/dist/collection/components/q2-pill/index.js +324 -0
  86. package/dist/collection/components/q2-pill/styles.css +229 -0
  87. package/dist/collection/components/q2-radio/index.js +38 -1
  88. package/dist/collection/components/q2-radio-group/index.js +66 -24
  89. package/dist/collection/components/q2-section/index.js +5 -7
  90. package/dist/collection/components/q2-select/index.js +53 -30
  91. package/dist/collection/components/q2-stepper/index.js +8 -10
  92. package/dist/collection/components/q2-stepper/styles.css +5 -5
  93. package/dist/collection/components/q2-stepper-pane/index.js +133 -5
  94. package/dist/collection/components/q2-stepper-vertical/index.js +346 -0
  95. package/dist/collection/components/q2-stepper-vertical/styles.css +273 -0
  96. package/dist/collection/components/q2-tab-container/index.js +11 -7
  97. package/dist/collection/components/q2-tag/index.js +200 -0
  98. package/dist/collection/components/q2-tag/styles.css +141 -0
  99. package/dist/collection/components/q2-textarea/index.js +6 -6
  100. package/dist/collection/components/tecton-tab-pane/index.js +3 -10
  101. package/dist/collection/utils/index.js +25 -13
  102. package/dist/esm/click-elsewhere.entry.js +5 -7
  103. package/dist/esm/{icons-3ee662ea.js → icons-b1e11526.js} +394 -384
  104. package/dist/esm/{index-ec6660af.js → index-0ff8de52.js} +27 -15
  105. package/dist/esm/{index-be8376c0.js → index-dbfb3ecc.js} +112 -65
  106. package/dist/esm/loader.js +3 -3
  107. package/dist/esm/polyfills/css-shim.js +1 -1
  108. package/dist/esm/q2-avatar.entry.js +2 -2
  109. package/dist/esm/q2-badge.entry.js +39 -0
  110. package/dist/esm/q2-btn_2.entry.js +13 -13
  111. package/dist/esm/q2-calendar.entry.js +54 -59
  112. package/dist/esm/q2-card.entry.js +123 -0
  113. package/dist/esm/q2-carousel-pane.entry.js +5 -5
  114. package/dist/esm/q2-carousel.entry.js +318 -106
  115. package/dist/esm/q2-checkbox-group.entry.js +6 -3
  116. package/dist/esm/q2-checkbox.entry.js +19 -11
  117. package/dist/esm/q2-dropdown-item.entry.js +7 -7
  118. package/dist/esm/q2-dropdown.entry.js +8 -17
  119. package/dist/esm/q2-editable-field.entry.js +5 -8
  120. package/dist/esm/q2-icon.entry.js +3 -3
  121. package/dist/esm/q2-input.entry.js +439 -437
  122. package/dist/esm/q2-loading-element.entry.js +3 -3
  123. package/dist/esm/q2-loc.entry.js +2 -2
  124. package/dist/esm/q2-message.entry.js +5 -5
  125. package/dist/esm/q2-optgroup.entry.js +3 -3
  126. package/dist/esm/q2-option-list.entry.js +355 -0
  127. package/dist/esm/q2-option.entry.js +3 -11
  128. package/dist/esm/q2-pagination.entry.js +112 -0
  129. package/dist/esm/q2-pill.entry.js +133 -0
  130. package/dist/esm/q2-radio-group.entry.js +43 -18
  131. package/dist/esm/q2-radio.entry.js +21 -4
  132. package/dist/esm/q2-section.entry.js +5 -7
  133. package/dist/esm/q2-select.entry.js +36 -31
  134. package/dist/esm/q2-stepper-pane.entry.js +42 -4
  135. package/dist/esm/q2-stepper-vertical.entry.js +274 -0
  136. package/dist/esm/q2-stepper.entry.js +10 -12
  137. package/dist/esm/q2-tab-container.entry.js +12 -8
  138. package/dist/esm/q2-tab-pane.entry.js +1 -1
  139. package/dist/esm/q2-tag.entry.js +90 -0
  140. package/dist/esm/q2-tecton-elements.js +3 -3
  141. package/dist/esm/q2-textarea.entry.js +8 -8
  142. package/dist/esm/{shapes-81c11dfe.js → shapes-cff4e1f0.js} +9 -16
  143. package/dist/esm/tecton-tab-pane.entry.js +2 -5
  144. package/dist/loader/index.d.ts +0 -1
  145. package/dist/q2-tecton-elements/{p-75e87cca.entry.js → p-00e8f782.entry.js} +1 -1
  146. package/dist/q2-tecton-elements/p-01ae8461.entry.js +1 -0
  147. package/dist/q2-tecton-elements/p-0900bec1.entry.js +1 -0
  148. package/dist/q2-tecton-elements/p-10264ecb.entry.js +1 -0
  149. package/dist/q2-tecton-elements/{p-fbf7c5e6.entry.js → p-1305ec5f.entry.js} +1 -1
  150. package/dist/q2-tecton-elements/p-148391d6.entry.js +1 -0
  151. package/dist/q2-tecton-elements/p-1dfaee64.entry.js +1 -0
  152. package/dist/q2-tecton-elements/{p-32ad664c.entry.js → p-221abbf6.entry.js} +1 -1
  153. package/dist/q2-tecton-elements/{p-c90a6016.js → p-255b2b4c.js} +1 -1
  154. package/dist/q2-tecton-elements/p-27736b6b.entry.js +1 -0
  155. package/dist/q2-tecton-elements/p-2846ab94.entry.js +1 -0
  156. package/dist/q2-tecton-elements/p-2bc1de01.entry.js +1 -0
  157. package/dist/q2-tecton-elements/{p-8ea2c4f7.entry.js → p-2c15414c.entry.js} +1 -1
  158. package/dist/q2-tecton-elements/p-2caa89fd.js +1 -0
  159. package/dist/q2-tecton-elements/p-327cca41.entry.js +1 -0
  160. package/dist/q2-tecton-elements/p-3a420dbf.entry.js +1 -0
  161. package/dist/q2-tecton-elements/p-3abcb09d.entry.js +1 -0
  162. package/dist/q2-tecton-elements/p-3fe98e3e.entry.js +1 -0
  163. package/dist/q2-tecton-elements/{p-bb2e110a.entry.js → p-430a979b.entry.js} +1 -1
  164. package/dist/q2-tecton-elements/{p-7e6fc65d.entry.js → p-45eb7739.entry.js} +1 -1
  165. package/dist/q2-tecton-elements/{p-750bcd33.entry.js → p-49b2abc4.entry.js} +1 -1
  166. package/dist/q2-tecton-elements/{p-9b50c3c3.entry.js → p-4ab30466.entry.js} +1 -1
  167. package/dist/q2-tecton-elements/p-5bbf2bfe.entry.js +1 -0
  168. package/dist/q2-tecton-elements/{p-ac859fcc.entry.js → p-6fec9235.entry.js} +1 -1
  169. package/dist/q2-tecton-elements/p-824aebd9.js +1 -0
  170. package/dist/q2-tecton-elements/p-a4ae89cc.entry.js +1 -0
  171. package/dist/q2-tecton-elements/{p-50967020.entry.js → p-a5562aaa.entry.js} +1 -1
  172. package/dist/q2-tecton-elements/p-ae130f70.entry.js +1 -0
  173. package/dist/q2-tecton-elements/p-b2302cd3.entry.js +1 -0
  174. package/dist/q2-tecton-elements/p-c20cbb2d.entry.js +1 -0
  175. package/dist/q2-tecton-elements/p-ca7a3380.entry.js +1 -0
  176. package/dist/q2-tecton-elements/{p-a6f8d09a.entry.js → p-d33e152c.entry.js} +1 -1
  177. package/dist/q2-tecton-elements/{p-9024859f.entry.js → p-d5218cd6.entry.js} +1 -1
  178. package/dist/q2-tecton-elements/p-d52b435e.entry.js +1 -0
  179. package/dist/q2-tecton-elements/p-dd02cf8d.js +1 -0
  180. package/dist/q2-tecton-elements/{p-07a5d703.entry.js → p-e0e7ae8b.entry.js} +1 -1
  181. package/dist/q2-tecton-elements/{p-7e030e92.entry.js → p-ede12fc1.entry.js} +1 -1
  182. package/dist/q2-tecton-elements/{p-df182f61.entry.js → p-fdfbe75b.entry.js} +1 -1
  183. package/dist/q2-tecton-elements/p-ffbded54.entry.js +1 -0
  184. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  185. package/dist/test/elements/q2-tag-test.js +151 -0
  186. package/dist/test/helpers.js +20 -9
  187. package/dist/types/components/q2-badge/index.d.ts +13 -0
  188. package/dist/types/components/q2-btn/index.d.ts +3 -3
  189. package/dist/types/components/q2-calendar/helpers.d.ts +1 -0
  190. package/dist/types/components/q2-calendar/index.d.ts +2 -1
  191. package/dist/types/components/q2-calendar/validation.d.ts +1 -1
  192. package/dist/types/components/q2-card/index.d.ts +35 -0
  193. package/dist/types/components/q2-checkbox/index.d.ts +3 -1
  194. package/dist/types/components/q2-checkbox-group/index.d.ts +1 -0
  195. package/dist/types/components/q2-dropdown/index.d.ts +1 -1
  196. package/dist/types/components/q2-editable-field/index.d.ts +1 -1
  197. package/dist/types/components/q2-input/formatting/credit-card.d.ts +1 -3
  198. package/dist/types/components/q2-input/index.d.ts +5 -2
  199. package/dist/types/components/q2-option/index.d.ts +2 -3
  200. package/dist/types/components/q2-option-list/index.d.ts +62 -0
  201. package/dist/types/components/q2-pagination/index.d.ts +30 -0
  202. package/dist/types/components/q2-pill/index.d.ts +39 -0
  203. package/dist/types/components/q2-radio/index.d.ts +4 -1
  204. package/dist/types/components/q2-radio-group/index.d.ts +5 -1
  205. package/dist/types/components/q2-select/index.d.ts +2 -1
  206. package/dist/types/components/q2-stepper/index.d.ts +1 -1
  207. package/dist/types/components/q2-stepper-pane/index.d.ts +16 -1
  208. package/dist/types/components/q2-stepper-vertical/index.d.ts +52 -0
  209. package/dist/types/components/q2-tab-container/index.d.ts +1 -1
  210. package/dist/types/components/q2-tag/index.d.ts +28 -0
  211. package/dist/types/components/tecton-tab-pane/index.d.ts +2 -2
  212. package/dist/types/components.d.ts +235 -11
  213. package/dist/types/global.d.ts +1 -0
  214. package/dist/types/stencil-public-runtime.d.ts +6 -4
  215. package/dist/types/util.d.ts +2 -10
  216. package/dist/types/utils/index.d.ts +1 -0
  217. package/dist/types/workspace/workspace/tecton-production_release_1.13.x/packages/q2-tecton-elements/.stencil/test/elements/q2-tag-test.d.ts +1 -0
  218. package/dist/types/workspace/workspace/{_production_release_1.11.0-alpha → tecton-production_release_1.13.x}/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +6 -3
  219. package/package.json +13 -13
  220. package/dist/q2-tecton-elements/p-06fff43d.entry.js +0 -1
  221. package/dist/q2-tecton-elements/p-080839ed.js +0 -1
  222. package/dist/q2-tecton-elements/p-29a37091.entry.js +0 -1
  223. package/dist/q2-tecton-elements/p-37aba2a4.js +0 -1
  224. package/dist/q2-tecton-elements/p-4cd00f1a.js +0 -1
  225. package/dist/q2-tecton-elements/p-6702eb4d.entry.js +0 -1
  226. package/dist/q2-tecton-elements/p-768e3a5d.entry.js +0 -1
  227. package/dist/q2-tecton-elements/p-843b1ee9.entry.js +0 -1
  228. package/dist/q2-tecton-elements/p-943c7745.entry.js +0 -1
  229. package/dist/q2-tecton-elements/p-95a73559.entry.js +0 -1
  230. package/dist/q2-tecton-elements/p-9a977ee6.entry.js +0 -1
  231. package/dist/q2-tecton-elements/p-b281c349.entry.js +0 -1
  232. package/dist/q2-tecton-elements/p-c5e55b9f.entry.js +0 -1
  233. package/dist/q2-tecton-elements/p-ccbe9158.entry.js +0 -1
  234. package/dist/q2-tecton-elements/p-db6f90ac.entry.js +0 -1
  235. package/dist/q2-tecton-elements/p-fa6eea5c.entry.js +0 -1
@@ -1,4 +1,4 @@
1
- import { Component, Prop, Element, h, Listen, Event, Watch } from '@stencil/core';
1
+ import { Component, Prop, Element, h, Listen, Event, Watch, Fragment, } from '@stencil/core';
2
2
  import { createGuid, isEventFromElement, loc, overrideFocus } from 'src/utils';
3
3
  export class Q2RadioGroup {
4
4
  constructor() {
@@ -7,13 +7,16 @@ export class Q2RadioGroup {
7
7
  this.hasError = false;
8
8
  this.id = `radio-group-${createGuid()}`;
9
9
  this.onMutationObserved = () => {
10
- this.valueUpdated();
10
+ this.valueUpdated(this.value);
11
11
  this.nameUpdated();
12
12
  this.disabledUpdated();
13
+ this.readonlyUpdated();
13
14
  this.tileLayoutUpdated();
14
15
  };
15
16
  this.onInnerRadioChange = (event) => {
16
17
  event.stopImmediatePropagation();
18
+ if (this.readonly)
19
+ return;
17
20
  this.change.emit({ value: event.detail.value });
18
21
  };
19
22
  }
@@ -21,17 +24,19 @@ export class Q2RadioGroup {
21
24
  return Array.from(this.hostElement.querySelectorAll('q2-radio'));
22
25
  }
23
26
  /////// LIFECYCLE HOOK ///////
27
+ componentWillLoad() {
28
+ this.onMutationObserved();
29
+ }
24
30
  componentDidLoad() {
25
31
  const observer = new MutationObserver(this.onMutationObserved);
26
32
  observer.observe(this.hostElement, { childList: true });
27
33
  this.mutationObserver = observer;
28
- this.onMutationObserved();
29
34
  overrideFocus(this.hostElement);
30
35
  }
31
36
  /////// OBSERVERS ///////
32
- valueUpdated() {
37
+ valueUpdated(newVal) {
33
38
  this.radioElements.forEach(radio => {
34
- radio.checked = this.value === radio.value;
39
+ radio.checked = newVal === radio.value;
35
40
  });
36
41
  }
37
42
  nameUpdated() {
@@ -44,6 +49,10 @@ export class Q2RadioGroup {
44
49
  radio.groupDisabled = this.disabled;
45
50
  });
46
51
  }
52
+ readonlyUpdated() {
53
+ const readonly = this.readonly;
54
+ this.radioElements.forEach(radio => (radio.groupReadonly = readonly));
55
+ }
47
56
  tileLayoutUpdated() {
48
57
  this.radioElements.forEach(radio => {
49
58
  radio.groupTileLayout = this.tilelayout;
@@ -59,19 +68,22 @@ export class Q2RadioGroup {
59
68
  delegateFocus(event) {
60
69
  if (!isEventFromElement(event, this.hostElement))
61
70
  return;
62
- const radio = this.hostElement.querySelector('q2-radio[checked]') ||
63
- this.hostElement.querySelector('q2-radio');
71
+ const radio = this.hostElement.querySelector('q2-radio[checked]') || this.hostElement.querySelector('q2-radio');
64
72
  radio === null || radio === void 0 ? void 0 : radio.dispatchEvent(new FocusEvent('focus'));
65
73
  }
66
74
  keydownHandler(event) {
67
75
  const currentValue = event.target.getAttribute('value') || this.value;
68
76
  let index = this.radioElements.findIndex(el => el === event.target || el.getAttribute('value') === currentValue);
69
77
  let sign = 0;
70
- if (['ArrowLeft', 'Left', 'ArrowUp', 'Up'].includes(event.key)) {
71
- sign = -1;
72
- }
73
- else if (['ArrowRight', 'Right', 'ArrowDown', 'Down'].includes(event.key)) {
74
- sign = 1;
78
+ switch (event.key) {
79
+ case 'ArrowLeft':
80
+ case 'ArrowUp':
81
+ sign = -1;
82
+ break;
83
+ case 'ArrowRight':
84
+ case 'ArrowDown':
85
+ sign = 1;
86
+ break;
75
87
  }
76
88
  if (index === -1 || sign === 0) {
77
89
  return;
@@ -79,28 +91,38 @@ export class Q2RadioGroup {
79
91
  index += sign;
80
92
  index = sign < 0 ? Math.max(0, index) : Math.min(this.radioElements.length - 1, index);
81
93
  event.preventDefault();
82
- this.value = this.radioElements[index].value;
94
+ if (!this.readonly) {
95
+ this.value = this.radioElements[index].value;
96
+ }
83
97
  this.radioElements[index].dispatchEvent(new FocusEvent('focus'));
84
98
  }
99
+ labelDOM() {
100
+ const { label, optional, readonly } = this;
101
+ let helpText = '';
102
+ if (readonly) {
103
+ helpText = h("span", { class: "optional-tag" }, loc('tecton.element.input.readonly'));
104
+ }
105
+ else if (optional) {
106
+ helpText = h("span", { class: "optional-tag" }, loc('tecton.element.input.optional'));
107
+ }
108
+ return (h(Fragment, null,
109
+ label && loc(label),
110
+ !!helpText && h("span", { class: "optional-tag" }, helpText)));
111
+ }
85
112
  render() {
113
+ const showLabel = this.label || this.optional || this.readonly;
86
114
  return (h("div", null,
87
- this.label || this.optional ? (h("div", { class: "group-legend" },
88
- this.label && loc(this.label),
89
- this.optional ? (h("span", { class: "optional-tag" }, loc('tecton.element.input.optional'))) : (''))) : (''),
90
- h("fieldset", { class: `q2-radio-fieldset ${this.hasError ? 'has-error' : ''}`, onChange: this.onInnerRadioChange, "aria-required": `${!this.optional}` },
91
- this.label || this.optional ? (h("legend", { class: "sr-only" },
92
- this.label && loc(this.label),
93
- this.optional ? (h("span", { class: "optional-tag" }, loc('tecton.element.input.optional'))) : (''))) : (''),
94
- this.hasError ? (h("div", { class: `error-icon-container ${this.label || this.optional ? '' : 'no-label'}` },
115
+ showLabel && h("div", { class: "group-legend" }, this.labelDOM()),
116
+ h("fieldset", { class: `q2-radio-fieldset ${this.hasError ? 'has-error' : ''}`, onChange: this.onInnerRadioChange, "aria-required": `${!this.optional}`, "aria-readonly": `${this.readonly}` },
117
+ showLabel && h("legend", { class: "sr-only" }, this.labelDOM()),
118
+ this.hasError ? (h("div", { class: `error-icon-container ${!showLabel && 'no-label'}` },
95
119
  h("q2-icon", { class: "h(4) w(4) mrg-b(2)", type: "error" }))) : (''),
96
120
  this.inputDom())));
97
121
  }
98
122
  inputDom() {
99
123
  if (this.tilelayout) {
100
124
  const { tileAlignment } = this;
101
- const alignment = ['left', 'center', 'right'].includes(tileAlignment)
102
- ? tileAlignment
103
- : 'center';
125
+ const alignment = ['left', 'center', 'right'].includes(tileAlignment) ? tileAlignment : 'center';
104
126
  return (h("div", { class: `flexed ${alignment}` },
105
127
  h("slot", null)));
106
128
  }
@@ -203,6 +225,23 @@ export class Q2RadioGroup {
203
225
  "attribute": "optional",
204
226
  "reflect": true
205
227
  },
228
+ "readonly": {
229
+ "type": "boolean",
230
+ "mutable": false,
231
+ "complexType": {
232
+ "original": "boolean",
233
+ "resolved": "boolean",
234
+ "references": {}
235
+ },
236
+ "required": false,
237
+ "optional": false,
238
+ "docs": {
239
+ "tags": [],
240
+ "text": ""
241
+ },
242
+ "attribute": "readonly",
243
+ "reflect": true
244
+ },
206
245
  "tilelayout": {
207
246
  "type": "boolean",
208
247
  "mutable": false,
@@ -283,6 +322,9 @@ export class Q2RadioGroup {
283
322
  }, {
284
323
  "propName": "disabled",
285
324
  "methodName": "disabledUpdated"
325
+ }, {
326
+ "propName": "readonly",
327
+ "methodName": "readonlyUpdated"
286
328
  }, {
287
329
  "propName": "tilelayout",
288
330
  "methodName": "tileLayoutUpdated"
@@ -1,4 +1,4 @@
1
- import { Component, Prop, Element, Listen, State, Watch, h, Event } from '@stencil/core';
1
+ import { Component, Prop, Element, Listen, State, Watch, h, Event, } from '@stencil/core';
2
2
  import { createGuid, isEventFromElement, loc, overrideFocus } from 'src/utils';
3
3
  export class Q2Section {
4
4
  constructor() {
@@ -11,7 +11,7 @@ export class Q2Section {
11
11
  this.onHeaderClick = () => {
12
12
  this.collapsible &&
13
13
  this.change.emit({
14
- expanded: !this.expanded
14
+ expanded: !this.expanded,
15
15
  });
16
16
  };
17
17
  this.onAnimationStart = () => {
@@ -79,9 +79,7 @@ export class Q2Section {
79
79
  };
80
80
  }
81
81
  resizeIframe() {
82
- return (window.TectonElements &&
83
- window.TectonElements.resizeIframe &&
84
- window.TectonElements.resizeIframe());
82
+ return window.TectonElements && window.TectonElements.resizeIframe && window.TectonElements.resizeIframe();
85
83
  }
86
84
  componentWillLoad() {
87
85
  this.onHeaderSlotChange();
@@ -155,10 +153,10 @@ export class Q2Section {
155
153
  return (h("section", { class: this.wrapperClasses },
156
154
  h("div", { class: "q2-section-header" },
157
155
  h("div", { class: "q2-section-header-content", id: this.titleId, onClick: this.onHeaderClick },
158
- !this.hasYieldedHeader && !!this.label ? (h("h2", { class: "title" }, loc(this.label))) : (''),
156
+ !this.hasYieldedHeader && !!this.label ? h("h2", { class: "title" }, loc(this.label)) : '',
159
157
  h("div", { class: "q2-section-header-slot-wrapper" },
160
158
  h("slot", { name: "q2-section-header" }))),
161
- this.collapsible && !this.noCollapseIcon ? (h("q2-btn", { class: `q2-section-content-toggle ${this.expanded ? 'expanded' : 'collapsed'}`, label: this.label, ariaExpanded: !!this.expanded, ariaControls: this.contentId, "test-id": "toggleButton", "hide-label": true, onClick: this.onHeaderClick },
159
+ this.collapsible && !this.noCollapseIcon ? (h("q2-btn", { class: `q2-section-content-toggle ${this.expanded ? 'expanded' : 'collapsed'}`, label: this.label, ariaExpanded: `${!!this.expanded}`, ariaControls: this.contentId, "test-id": "toggleButton", "hide-label": true, onClick: this.onHeaderClick },
162
160
  h("q2-icon", { type: "chevron-up", class: "toggle-icon" }))) : ('')),
163
161
  h("div", { class: "q2-section-content-wrapper", id: this.contentId, "aria-labelledby": this.titleId, role: "region", onAnimationStart: this.onAnimationStart, onAnimationEnd: this.onAnimationEnd },
164
162
  h("div", { class: "q2-section-content", tabindex: "-1" },
@@ -1,9 +1,10 @@
1
- import { Component, Prop, Element, h, Listen, State, Event, Watch } from '@stencil/core';
1
+ import { Component, Prop, Element, h, Listen, State, Event, Watch, } from '@stencil/core';
2
2
  import { createGuid, handleAriaLabel, isEventFromElement, loc, overrideFocus, setPopProperties } from 'src/utils';
3
3
  export class Q2Select {
4
4
  constructor() {
5
5
  this.selectedOptions = [];
6
6
  this.disabled = false;
7
+ this.readonly = false;
7
8
  this.multiple = false;
8
9
  this.minRows = 3;
9
10
  this.searchable = false;
@@ -11,12 +12,13 @@ export class Q2Select {
11
12
  this.optional = false;
12
13
  this.dropdownOpen = false;
13
14
  this.onlyShowingSelected = false;
15
+ this.searchText = '';
14
16
  this.hasCustomDisplay = false;
15
17
  this.inputFocused = false;
16
18
  this.scheduledAfterRender = [];
17
19
  this.keyStore = {
18
20
  queue: [],
19
- lastPressedAt: new Date()
21
+ lastPressedAt: new Date(),
20
22
  };
21
23
  this.guid = createGuid();
22
24
  this.onMutationObserved = () => {
@@ -61,9 +63,7 @@ export class Q2Select {
61
63
  return list.find(v => {
62
64
  return (!v.element.disabled &&
63
65
  v.element.display &&
64
- v.element.display
65
- .replace(/\s/g, '')
66
- .match(new RegExp(`^${this.keyStore.queue.join('')}`, 'i')));
66
+ v.element.display.replace(/\s/g, '').match(new RegExp(`^${this.keyStore.queue.join('')}`, 'i')));
67
67
  });
68
68
  };
69
69
  const setFocus = ({ element, index }) => {
@@ -93,13 +93,13 @@ export class Q2Select {
93
93
  return;
94
94
  this.closeDropdown();
95
95
  };
96
+ /* tslint:disable:cyclomatic-complexity */
96
97
  this.dropdownKeydownHandler = (event) => {
97
98
  event.stopPropagation();
98
99
  const { activeIndex, searchable, optionElements, multiSelectHeader } = this;
99
100
  const { key, shiftKey } = event;
100
- if (multiSelectHeader &&
101
- multiSelectHeader.contains(event.target) &&
102
- [' ', 'Enter'].includes(key))
101
+ if (this.readonly ||
102
+ (multiSelectHeader && multiSelectHeader.contains(event.target) && [' ', 'Enter'].includes(key)))
103
103
  return;
104
104
  switch (key) {
105
105
  case ' ':
@@ -230,10 +230,17 @@ export class Q2Select {
230
230
  };
231
231
  this.inputInputHandler = (event) => {
232
232
  event.stopPropagation();
233
+ const inputValue = this.inputField.value;
234
+ const eventValue = event.detail.value;
235
+ const didChangeText = inputValue !== eventValue;
236
+ const shouldClearValue = !!this.value && didChangeText;
237
+ if (shouldClearValue) {
238
+ this.selectOption('');
239
+ }
233
240
  if (!this.dropdownOpen)
234
241
  this.openDropdownWithoutActiveElement();
235
- this.searchText = event.detail.value;
236
- this.input.emit({ query: event.detail.value });
242
+ this.searchText = eventValue;
243
+ this.input.emit({ query: eventValue });
237
244
  };
238
245
  this.inputFocusHandler = () => {
239
246
  this.inputFocused = true;
@@ -274,9 +281,7 @@ export class Q2Select {
274
281
  };
275
282
  }
276
283
  resizeIframe() {
277
- return (window.TectonElements &&
278
- window.TectonElements.resizeIframe &&
279
- window.TectonElements.resizeIframe());
284
+ return window.TectonElements && window.TectonElements.resizeIframe && window.TectonElements.resizeIframe();
280
285
  }
281
286
  getDefaultActiveIndex() {
282
287
  const firstSelected = this.optionElements.findIndex(element => element.selected);
@@ -337,9 +342,7 @@ export class Q2Select {
337
342
  const selectedOption = this.optionElements.find(option => {
338
343
  return this.value === option.value;
339
344
  });
340
- return ((selectedOption && selectedOption.display && loc(selectedOption.display)) ||
341
- this.value ||
342
- '');
345
+ return (selectedOption && selectedOption.display && loc(selectedOption.display)) || this.value || '';
343
346
  }
344
347
  get minPopHeight() {
345
348
  const { minRows } = this;
@@ -356,9 +359,7 @@ export class Q2Select {
356
359
  // when closed they display the same as non searchable select (what is selected)
357
360
  return this.searchText || '';
358
361
  }
359
- return this.multiple
360
- ? this.calculateMultiSelectSelectedDisplay()
361
- : this.calculateSingleSelectSelectedDisplay();
362
+ return this.multiple ? this.calculateMultiSelectSelectedDisplay() : this.calculateSingleSelectSelectedDisplay();
362
363
  }
363
364
  get selectedOptionsCount() {
364
365
  return this.selectedOptions.length;
@@ -396,7 +397,7 @@ export class Q2Select {
396
397
  const isSelected = this.selectedOptions.includes(value);
397
398
  if (isSelected) {
398
399
  this.change.emit({
399
- selectedOptions: this.selectedOptions.filter(selectedValue => selectedValue !== value)
400
+ selectedOptions: this.selectedOptions.filter(selectedValue => selectedValue !== value),
400
401
  });
401
402
  }
402
403
  else {
@@ -415,12 +416,16 @@ export class Q2Select {
415
416
  activeOption === null || activeOption === void 0 ? void 0 : activeOption.scrollIntoView({ block: 'nearest' });
416
417
  }
417
418
  openDropdownWithoutActiveElement() {
419
+ if (this.readonly)
420
+ return;
418
421
  this.activeIndex = undefined;
419
422
  this.setActiveOption();
420
423
  this.dropdownOpen = true;
421
424
  this.scheduledAfterRender.push(this.resizeIframe);
422
425
  }
423
426
  openDropdownWithActiveElement(activeIndex) {
427
+ if (this.readonly)
428
+ return;
424
429
  this.activeIndex = activeIndex;
425
430
  this.dropdownOpen = true;
426
431
  this.setActiveOption();
@@ -530,6 +535,8 @@ export class Q2Select {
530
535
  });
531
536
  }
532
537
  onHostElementChange(event) {
538
+ if (this.readonly)
539
+ return;
533
540
  if (event.target === this.hostElement && !this.hostElement.onchange) {
534
541
  if (this.multiple) {
535
542
  this.selectedOptions = event.detail.selectedOptions;
@@ -550,14 +557,13 @@ export class Q2Select {
550
557
  }
551
558
  else {
552
559
  const { display = '', innerText = '' } = option;
553
- const matched = display.toLowerCase().includes(query) ||
554
- innerText.toLowerCase().includes(query);
560
+ const matched = display.toLowerCase().includes(query) || innerText.toLowerCase().includes(query);
555
561
  option.hidden = !matched;
556
562
  if (matched)
557
563
  matchedCount++;
558
564
  }
559
565
  });
560
- let statusMessageLocString = query
566
+ const statusMessageLocString = query
561
567
  ? 'tecton.element.select.searchable.results'
562
568
  : 'tecton.element.select.allOptions';
563
569
  const count = query ? matchedCount : options.length;
@@ -577,12 +583,13 @@ export class Q2Select {
577
583
  }, 1000);
578
584
  }
579
585
  clickHandler(event) {
580
- const target = event.target;
581
- if (target.localName !== 'q2-option' || target.disabled) {
586
+ const selected = event.target.closest('q2-option');
587
+ if (!selected || (selected.hasAttribute('disabled') && selected.getAttribute('disabled') !== 'false')) {
582
588
  return;
583
589
  }
584
- this.selectOption(target.value, true);
590
+ this.selectOption(selected.getAttribute('value'), true);
585
591
  }
592
+ /* tslint:enable:cyclomatic-complexity */
586
593
  keydownHandler(event) {
587
594
  this.inputKeydownHandler(event);
588
595
  }
@@ -593,7 +600,7 @@ export class Q2Select {
593
600
  this.errors.length > 0 &&
594
601
  this.errors.map(error => loc(error))) ||
595
602
  (this.invalid && ['tecton.element.select.invalid']) ||
596
- [], disabled: this.disabled, optional: this.optional, hideLabel: this.hideLabel, ariaExpanded: this.dropdownOpen, ariaOwns: "dropdown", ariaHaspopup: "listbox", role: this.searchable ? 'combobox' : null, pseudo: !this.searchable, "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 }),
603
+ [], disabled: this.disabled, optional: this.optional, readonly: this.readonly, hideLabel: this.hideLabel, ariaExpanded: `${!!this.dropdownOpen}`, ariaOwns: "dropdown", ariaHaspopup: "listbox", role: this.searchable ? 'combobox' : null, pseudo: !this.searchable, "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 }),
597
604
  h("div", { class: "custom-display-content", hidden: !this.hasCustomDisplay || !!this.searchText, onClick: this.onCustomDisplayClick },
598
605
  h("slot", { name: "q2-select-display" })),
599
606
  this.optionsDropdown()));
@@ -609,9 +616,7 @@ export class Q2Select {
609
616
  return (h("div", { class: "multi-select-header", ref: el => (this.multiSelectHeader = el) },
610
617
  loc('tecton.element.select.multiHeader.showing'),
611
618
  h("q2-btn", { class: `option-toggle show-all-options${this.onlyShowingSelected ? '' : ' selected'}`, badge: true, "aria-selected": !this.onlyShowingSelected || undefined, "test-id": "allOptionsButton", onClick: this.showAllOptions, label: loc('tecton.element.select.multiHeader.allAriaLabel'), "hide-label": true }, loc('tecton.element.select.multiHeader.all')),
612
- h("q2-btn", { class: `option-toggle show-selected-options${this.onlyShowingSelected ? ' selected' : ''}`, "aria-selected": this.onlyShowingSelected || undefined, disabled: this.selectedOptions.length === 0, badge: true, "test-id": "selectedOptionsButton", onClick: this.showSelectedOptions, label: loc('tecton.element.select.multiHeader.selectedAriaLabel', [
613
- this.selectedOptionsCount
614
- ]), "hide-label": true }, loc('tecton.element.select.multiHeader.selected', [this.selectedOptionsCount]))));
619
+ h("q2-btn", { class: `option-toggle show-selected-options${this.onlyShowingSelected ? ' selected' : ''}`, "aria-selected": this.onlyShowingSelected || undefined, disabled: this.selectedOptions.length === 0, badge: true, "test-id": "selectedOptionsButton", onClick: this.showSelectedOptions, label: loc('tecton.element.select.multiHeader.selectedAriaLabel', [this.selectedOptionsCount]), "hide-label": true }, loc('tecton.element.select.multiHeader.selected', [this.selectedOptionsCount]))));
615
620
  }
616
621
  static get is() { return "q2-select"; }
617
622
  static get encapsulation() { return "shadow"; }
@@ -726,6 +731,24 @@ export class Q2Select {
726
731
  "reflect": true,
727
732
  "defaultValue": "false"
728
733
  },
734
+ "readonly": {
735
+ "type": "boolean",
736
+ "mutable": false,
737
+ "complexType": {
738
+ "original": "boolean",
739
+ "resolved": "boolean",
740
+ "references": {}
741
+ },
742
+ "required": false,
743
+ "optional": false,
744
+ "docs": {
745
+ "tags": [],
746
+ "text": ""
747
+ },
748
+ "attribute": "readonly",
749
+ "reflect": true,
750
+ "defaultValue": "false"
751
+ },
729
752
  "invalid": {
730
753
  "type": "boolean",
731
754
  "mutable": false,
@@ -1,4 +1,4 @@
1
- import { Component, Prop, h, Element, State, Watch, Listen, Event, Fragment } from '@stencil/core';
1
+ import { Component, Prop, h, Element, State, Watch, Listen, Event, Fragment, } from '@stencil/core';
2
2
  import { loc, addSmoothScrollPolyfill, overrideFocus, isEventFromElement } from 'src/utils';
3
3
  addSmoothScrollPolyfill();
4
4
  export class Q2Stepper {
@@ -17,7 +17,7 @@ export class Q2Stepper {
17
17
  const scrollAmount = Math.floor(this.listElement.clientWidth / 2);
18
18
  this.listElement.scrollBy({
19
19
  left: direction === 'left' ? -scrollAmount : scrollAmount,
20
- behavior: 'smooth'
20
+ behavior: 'smooth',
21
21
  });
22
22
  };
23
23
  this.onStepClick = (event, selectedStep) => {
@@ -29,7 +29,7 @@ export class Q2Stepper {
29
29
  selectedStep,
30
30
  lastEnabledStep,
31
31
  currentStep,
32
- stepCount
32
+ stepCount,
33
33
  });
34
34
  };
35
35
  this.onStepKeyDown = (event, stepNumber) => {
@@ -100,9 +100,7 @@ export class Q2Stepper {
100
100
  ////////// HOST EVENTS ////////
101
101
  defaultChangeHandler(event) {
102
102
  const { hostElement } = this;
103
- if (event.target === hostElement &&
104
- !hostElement.getAttribute('onchange') &&
105
- !!event.detail) {
103
+ if (event.target === hostElement && !hostElement.getAttribute('onchange') && !!event.detail) {
106
104
  this.currentStep = event.detail.selectedStep;
107
105
  }
108
106
  }
@@ -124,7 +122,7 @@ export class Q2Stepper {
124
122
  selectedStep: null,
125
123
  lastEnabledStep: stepNumber,
126
124
  currentStep,
127
- stepCount
125
+ stepCount,
128
126
  });
129
127
  }
130
128
  this.scheduledAfterRender.push(this.resizeIframe);
@@ -132,8 +130,8 @@ export class Q2Stepper {
132
130
  this.focusStep(stepNumber, this.scrollEnabled);
133
131
  }
134
132
  resizeIframe() {
135
- var _a;
136
- return (_a = window === null || window === void 0 ? void 0 : window.TectonElements) === null || _a === void 0 ? void 0 : _a.resizeIframe();
133
+ var _a, _b;
134
+ return (_b = (_a = window === null || window === void 0 ? void 0 : window.TectonElements) === null || _a === void 0 ? void 0 : _a.resizeIframe) === null || _b === void 0 ? void 0 : _b.call(_a);
137
135
  }
138
136
  showStepPane(stepNumber) {
139
137
  this.allPanes.forEach((pane, index) => {
@@ -153,7 +151,7 @@ export class Q2Stepper {
153
151
  const left = stepListItem.offsetLeft - this.listElement.clientWidth / 2;
154
152
  this.listElement.scrollTo({
155
153
  left,
156
- behavior: 'smooth'
154
+ behavior: 'smooth',
157
155
  });
158
156
  }
159
157
  }
@@ -141,7 +141,7 @@ li {
141
141
  }
142
142
  .step-btn[aria-disabled], .step-btn[aria-disabled] + hr {
143
143
  --comp-bullet-font-color: var(--tct-stepper-bullet-inactive-font-color, var(--t-stepper-bullet-inactive-font-color, var(--t-text, #4d4d4d)));
144
- --comp-bullet-bg: var(--tct-stepper-bullet-inactive-bg, var(--t-stepper-bullet-inactive-bg, var(--t-gray12, #d9d9d9)));
144
+ --comp-bullet-bg: var(--tct-stepper-bullet-inactive-bg, var(--t-stepper-bullet-inactive-bg, var(--t-gray-12, #d9d9d9)));
145
145
  }
146
146
 
147
147
  .step-bubble {
@@ -190,11 +190,11 @@ hr {
190
190
  color: var(--tct-stepper-title-color, var(--t-stepper-title-color, var(--t-text, #4d4d4d)));
191
191
  font-size: var(--tct-stepper-title-font-size, var(--t-stepper-title-font-size, var(--app-font-size-small, 12px)));
192
192
  height: 1.5em;
193
+ text-overflow: ellipsis;
194
+ overflow: hidden;
193
195
  display: -webkit-box;
194
196
  -webkit-line-clamp: 2;
195
197
  -webkit-box-orient: vertical;
196
- overflow: hidden;
197
- text-overflow: ellipsis;
198
198
  }
199
199
  [aria-selected] .step-label {
200
200
  font-weight: var(--tct-stepper-active-font-weight, var(--t-stepper-active-font-weight, 600));
@@ -206,11 +206,11 @@ hr {
206
206
  .step-description {
207
207
  color: var(--tct-stepper-description-color, var(--t-stepper-description-color, var(--t-textA, rgba(77, 77, 77, 0.77))));
208
208
  font-size: var(--tct-stepper-description-font-size, var(--t-stepper-description-font-size, var(--app-font-size-small, 12px)));
209
+ text-overflow: ellipsis;
210
+ overflow: hidden;
209
211
  display: -webkit-box;
210
212
  -webkit-line-clamp: 4;
211
213
  -webkit-box-orient: vertical;
212
- overflow: hidden;
213
- text-overflow: ellipsis;
214
214
  padding-bottom: 0.2em;
215
215
  }
216
216