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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/dist/cjs/click-elsewhere.cjs.entry.js +5 -7
  2. package/dist/cjs/{icons-4595ee47.js → icons-08ffe5c9.js} +394 -384
  3. package/dist/cjs/{index-c2e53804.js → index-7febb200.js} +112 -65
  4. package/dist/cjs/{index-a55d3c34.js → index-dd823ee6.js} +27 -14
  5. package/dist/cjs/loader.cjs.js +3 -3
  6. package/dist/cjs/q2-avatar.cjs.entry.js +2 -2
  7. package/dist/cjs/q2-badge.cjs.entry.js +43 -0
  8. package/dist/cjs/q2-btn_2.cjs.entry.js +13 -13
  9. package/dist/cjs/q2-calendar.cjs.entry.js +53 -59
  10. package/dist/cjs/q2-card.cjs.entry.js +127 -0
  11. package/dist/cjs/q2-carousel-pane.cjs.entry.js +5 -5
  12. package/dist/cjs/q2-carousel.cjs.entry.js +318 -106
  13. package/dist/cjs/q2-checkbox-group.cjs.entry.js +6 -3
  14. package/dist/cjs/q2-checkbox.cjs.entry.js +18 -10
  15. package/dist/cjs/q2-dropdown-item.cjs.entry.js +7 -7
  16. package/dist/cjs/q2-dropdown.cjs.entry.js +8 -17
  17. package/dist/cjs/q2-editable-field.cjs.entry.js +5 -8
  18. package/dist/cjs/q2-icon.cjs.entry.js +3 -3
  19. package/dist/cjs/q2-input.cjs.entry.js +439 -437
  20. package/dist/cjs/q2-loading-element.cjs.entry.js +3 -3
  21. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-message.cjs.entry.js +5 -5
  23. package/dist/cjs/q2-optgroup.cjs.entry.js +3 -3
  24. package/dist/cjs/q2-option-list.cjs.entry.js +359 -0
  25. package/dist/cjs/q2-option.cjs.entry.js +3 -11
  26. package/dist/cjs/q2-pagination.cjs.entry.js +116 -0
  27. package/dist/cjs/q2-pill.cjs.entry.js +137 -0
  28. package/dist/cjs/q2-radio-group.cjs.entry.js +43 -18
  29. package/dist/cjs/q2-radio.cjs.entry.js +21 -4
  30. package/dist/cjs/q2-section.cjs.entry.js +5 -7
  31. package/dist/cjs/q2-select.cjs.entry.js +23 -26
  32. package/dist/cjs/q2-stepper-pane.cjs.entry.js +42 -4
  33. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +278 -0
  34. package/dist/cjs/q2-stepper.cjs.entry.js +10 -12
  35. package/dist/cjs/q2-tab-container.cjs.entry.js +12 -8
  36. package/dist/cjs/q2-tab-pane.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-tag.cjs.entry.js +94 -0
  38. package/dist/cjs/q2-tecton-elements.cjs.js +3 -3
  39. package/dist/cjs/q2-textarea.cjs.entry.js +8 -8
  40. package/dist/cjs/{shapes-086c0365.js → shapes-305746b5.js} +9 -16
  41. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -5
  42. package/dist/collection/collection-manifest.json +10 -3
  43. package/dist/collection/components/click-elsewhere/index.js +4 -6
  44. package/dist/collection/components/q2-badge/index.js +148 -0
  45. package/dist/collection/components/q2-badge/styles.css +134 -0
  46. package/dist/collection/components/q2-btn/index.js +14 -14
  47. package/dist/collection/components/q2-btn/styles.css +1 -1
  48. package/dist/collection/components/q2-calendar/helpers.js +22 -20
  49. package/dist/collection/components/q2-calendar/index.js +44 -37
  50. package/dist/collection/components/q2-calendar/validation.js +4 -2
  51. package/dist/collection/components/q2-card/index.js +347 -0
  52. package/dist/collection/components/q2-card/styles.css +177 -0
  53. package/dist/collection/components/q2-carousel/index.js +11 -16
  54. package/dist/collection/components/q2-carousel/styles.css +3 -3
  55. package/dist/collection/components/q2-carousel-pane/index.js +2 -2
  56. package/dist/collection/components/q2-carousel-pane/styles.css +8 -3
  57. package/dist/collection/components/q2-checkbox/index.js +37 -12
  58. package/dist/collection/components/q2-checkbox-group/index.js +22 -1
  59. package/dist/collection/components/q2-dropdown/index.js +6 -15
  60. package/dist/collection/components/q2-dropdown-item/index.js +5 -5
  61. package/dist/collection/components/q2-editable-field/index.js +3 -6
  62. package/dist/collection/components/q2-icon/icons.js +393 -383
  63. package/dist/collection/components/q2-input/formatting/credit-card.js +15 -13
  64. package/dist/collection/components/q2-input/formatting/currency.js +162 -162
  65. package/dist/collection/components/q2-input/formatting/date.js +1 -1
  66. package/dist/collection/components/q2-input/formatting/generic.js +7 -8
  67. package/dist/collection/components/q2-input/formatting/number.js +6 -9
  68. package/dist/collection/components/q2-input/formatting/numeric.js +5 -5
  69. package/dist/collection/components/q2-input/formatting/phone.js +215 -215
  70. package/dist/collection/components/q2-input/formatting/postal.js +1 -1
  71. package/dist/collection/components/q2-input/index.js +81 -25
  72. package/dist/collection/components/q2-input/styles.css +19 -14
  73. package/dist/collection/components/q2-loading/index.js +4 -4
  74. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js +1 -1
  75. package/dist/collection/components/q2-loading/skeleton/shapes.js +8 -15
  76. package/dist/collection/components/q2-message/index.js +3 -3
  77. package/dist/collection/components/q2-optgroup/index.js +1 -1
  78. package/dist/collection/components/q2-option/index.js +19 -25
  79. package/dist/collection/components/q2-option/styles.css +5 -0
  80. package/dist/collection/components/q2-option-list/index.js +648 -0
  81. package/dist/collection/components/q2-option-list/styles.css +128 -0
  82. package/dist/collection/components/q2-pagination/index.js +275 -0
  83. package/dist/collection/components/q2-pagination/styles.css +120 -0
  84. package/dist/collection/components/q2-pill/index.js +324 -0
  85. package/dist/collection/components/q2-pill/styles.css +229 -0
  86. package/dist/collection/components/q2-radio/index.js +38 -1
  87. package/dist/collection/components/q2-radio-group/index.js +66 -24
  88. package/dist/collection/components/q2-section/index.js +5 -7
  89. package/dist/collection/components/q2-select/index.js +40 -25
  90. package/dist/collection/components/q2-stepper/index.js +8 -10
  91. package/dist/collection/components/q2-stepper/styles.css +5 -5
  92. package/dist/collection/components/q2-stepper-pane/index.js +133 -5
  93. package/dist/collection/components/q2-stepper-vertical/index.js +346 -0
  94. package/dist/collection/components/q2-stepper-vertical/styles.css +273 -0
  95. package/dist/collection/components/q2-tab-container/index.js +11 -7
  96. package/dist/collection/components/q2-tag/index.js +200 -0
  97. package/dist/collection/components/q2-tag/styles.css +141 -0
  98. package/dist/collection/components/q2-textarea/index.js +6 -6
  99. package/dist/collection/components/tecton-tab-pane/index.js +3 -10
  100. package/dist/collection/utils/index.js +25 -13
  101. package/dist/esm/click-elsewhere.entry.js +5 -7
  102. package/dist/esm/{icons-3ee662ea.js → icons-b1e11526.js} +394 -384
  103. package/dist/esm/{index-ec6660af.js → index-0ff8de52.js} +27 -15
  104. package/dist/esm/{index-be8376c0.js → index-dbfb3ecc.js} +112 -65
  105. package/dist/esm/loader.js +3 -3
  106. package/dist/esm/polyfills/css-shim.js +1 -1
  107. package/dist/esm/q2-avatar.entry.js +2 -2
  108. package/dist/esm/q2-badge.entry.js +39 -0
  109. package/dist/esm/q2-btn_2.entry.js +13 -13
  110. package/dist/esm/q2-calendar.entry.js +53 -59
  111. package/dist/esm/q2-card.entry.js +123 -0
  112. package/dist/esm/q2-carousel-pane.entry.js +5 -5
  113. package/dist/esm/q2-carousel.entry.js +318 -106
  114. package/dist/esm/q2-checkbox-group.entry.js +6 -3
  115. package/dist/esm/q2-checkbox.entry.js +18 -10
  116. package/dist/esm/q2-dropdown-item.entry.js +7 -7
  117. package/dist/esm/q2-dropdown.entry.js +8 -17
  118. package/dist/esm/q2-editable-field.entry.js +5 -8
  119. package/dist/esm/q2-icon.entry.js +3 -3
  120. package/dist/esm/q2-input.entry.js +439 -437
  121. package/dist/esm/q2-loading-element.entry.js +3 -3
  122. package/dist/esm/q2-loc.entry.js +2 -2
  123. package/dist/esm/q2-message.entry.js +5 -5
  124. package/dist/esm/q2-optgroup.entry.js +3 -3
  125. package/dist/esm/q2-option-list.entry.js +355 -0
  126. package/dist/esm/q2-option.entry.js +3 -11
  127. package/dist/esm/q2-pagination.entry.js +112 -0
  128. package/dist/esm/q2-pill.entry.js +133 -0
  129. package/dist/esm/q2-radio-group.entry.js +43 -18
  130. package/dist/esm/q2-radio.entry.js +21 -4
  131. package/dist/esm/q2-section.entry.js +5 -7
  132. package/dist/esm/q2-select.entry.js +23 -26
  133. package/dist/esm/q2-stepper-pane.entry.js +42 -4
  134. package/dist/esm/q2-stepper-vertical.entry.js +274 -0
  135. package/dist/esm/q2-stepper.entry.js +10 -12
  136. package/dist/esm/q2-tab-container.entry.js +12 -8
  137. package/dist/esm/q2-tab-pane.entry.js +1 -1
  138. package/dist/esm/q2-tag.entry.js +90 -0
  139. package/dist/esm/q2-tecton-elements.js +3 -3
  140. package/dist/esm/q2-textarea.entry.js +8 -8
  141. package/dist/esm/{shapes-81c11dfe.js → shapes-cff4e1f0.js} +9 -16
  142. package/dist/esm/tecton-tab-pane.entry.js +2 -5
  143. package/dist/loader/index.d.ts +0 -1
  144. package/dist/q2-tecton-elements/{p-75e87cca.entry.js → p-00e8f782.entry.js} +1 -1
  145. package/dist/q2-tecton-elements/p-0900bec1.entry.js +1 -0
  146. package/dist/q2-tecton-elements/p-10264ecb.entry.js +1 -0
  147. package/dist/q2-tecton-elements/p-123cdfb9.entry.js +1 -0
  148. package/dist/q2-tecton-elements/{p-fbf7c5e6.entry.js → p-1305ec5f.entry.js} +1 -1
  149. package/dist/q2-tecton-elements/p-148391d6.entry.js +1 -0
  150. package/dist/q2-tecton-elements/p-1dfaee64.entry.js +1 -0
  151. package/dist/q2-tecton-elements/{p-32ad664c.entry.js → p-221abbf6.entry.js} +1 -1
  152. package/dist/q2-tecton-elements/{p-c90a6016.js → p-255b2b4c.js} +1 -1
  153. package/dist/q2-tecton-elements/p-27736b6b.entry.js +1 -0
  154. package/dist/q2-tecton-elements/p-2846ab94.entry.js +1 -0
  155. package/dist/q2-tecton-elements/p-2bc1de01.entry.js +1 -0
  156. package/dist/q2-tecton-elements/{p-8ea2c4f7.entry.js → p-2c15414c.entry.js} +1 -1
  157. package/dist/q2-tecton-elements/p-2caa89fd.js +1 -0
  158. package/dist/q2-tecton-elements/p-327cca41.entry.js +1 -0
  159. package/dist/q2-tecton-elements/p-3a420dbf.entry.js +1 -0
  160. package/dist/q2-tecton-elements/p-3abcb09d.entry.js +1 -0
  161. package/dist/q2-tecton-elements/p-3fe98e3e.entry.js +1 -0
  162. package/dist/q2-tecton-elements/{p-bb2e110a.entry.js → p-430a979b.entry.js} +1 -1
  163. package/dist/q2-tecton-elements/{p-7e6fc65d.entry.js → p-45eb7739.entry.js} +1 -1
  164. package/dist/q2-tecton-elements/{p-750bcd33.entry.js → p-49b2abc4.entry.js} +1 -1
  165. package/dist/q2-tecton-elements/{p-9b50c3c3.entry.js → p-4ab30466.entry.js} +1 -1
  166. package/dist/q2-tecton-elements/p-50e218c7.entry.js +1 -0
  167. package/dist/q2-tecton-elements/p-5bbf2bfe.entry.js +1 -0
  168. package/dist/q2-tecton-elements/{p-ac859fcc.entry.js → p-6fec9235.entry.js} +1 -1
  169. package/dist/q2-tecton-elements/p-824aebd9.js +1 -0
  170. package/dist/q2-tecton-elements/p-a4ae89cc.entry.js +1 -0
  171. package/dist/q2-tecton-elements/{p-50967020.entry.js → p-a5562aaa.entry.js} +1 -1
  172. package/dist/q2-tecton-elements/p-ae4fed23.entry.js +1 -0
  173. package/dist/q2-tecton-elements/p-b2302cd3.entry.js +1 -0
  174. package/dist/q2-tecton-elements/p-c20cbb2d.entry.js +1 -0
  175. package/dist/q2-tecton-elements/p-ca7a3380.entry.js +1 -0
  176. package/dist/q2-tecton-elements/{p-a6f8d09a.entry.js → p-d33e152c.entry.js} +1 -1
  177. package/dist/q2-tecton-elements/{p-9024859f.entry.js → p-d5218cd6.entry.js} +1 -1
  178. package/dist/q2-tecton-elements/p-d52b435e.entry.js +1 -0
  179. package/dist/q2-tecton-elements/p-dd02cf8d.js +1 -0
  180. package/dist/q2-tecton-elements/{p-07a5d703.entry.js → p-e0e7ae8b.entry.js} +1 -1
  181. package/dist/q2-tecton-elements/{p-7e030e92.entry.js → p-ede12fc1.entry.js} +1 -1
  182. package/dist/q2-tecton-elements/{p-df182f61.entry.js → p-fdfbe75b.entry.js} +1 -1
  183. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  184. package/dist/test/elements/q2-tag-test.js +151 -0
  185. package/dist/test/helpers.js +20 -9
  186. package/dist/types/components/q2-badge/index.d.ts +13 -0
  187. package/dist/types/components/q2-btn/index.d.ts +3 -3
  188. package/dist/types/components/q2-calendar/helpers.d.ts +1 -0
  189. package/dist/types/components/q2-calendar/index.d.ts +2 -1
  190. package/dist/types/components/q2-calendar/validation.d.ts +1 -1
  191. package/dist/types/components/q2-card/index.d.ts +35 -0
  192. package/dist/types/components/q2-checkbox/index.d.ts +3 -1
  193. package/dist/types/components/q2-checkbox-group/index.d.ts +1 -0
  194. package/dist/types/components/q2-dropdown/index.d.ts +1 -1
  195. package/dist/types/components/q2-editable-field/index.d.ts +1 -1
  196. package/dist/types/components/q2-input/formatting/credit-card.d.ts +1 -3
  197. package/dist/types/components/q2-input/index.d.ts +5 -2
  198. package/dist/types/components/q2-option/index.d.ts +2 -3
  199. package/dist/types/components/q2-option-list/index.d.ts +62 -0
  200. package/dist/types/components/q2-pagination/index.d.ts +30 -0
  201. package/dist/types/components/q2-pill/index.d.ts +39 -0
  202. package/dist/types/components/q2-radio/index.d.ts +4 -1
  203. package/dist/types/components/q2-radio-group/index.d.ts +5 -1
  204. package/dist/types/components/q2-select/index.d.ts +2 -1
  205. package/dist/types/components/q2-stepper/index.d.ts +1 -1
  206. package/dist/types/components/q2-stepper-pane/index.d.ts +16 -1
  207. package/dist/types/components/q2-stepper-vertical/index.d.ts +52 -0
  208. package/dist/types/components/q2-tab-container/index.d.ts +1 -1
  209. package/dist/types/components/q2-tag/index.d.ts +28 -0
  210. package/dist/types/components/tecton-tab-pane/index.d.ts +2 -2
  211. package/dist/types/components.d.ts +235 -11
  212. package/dist/types/global.d.ts +1 -0
  213. package/dist/types/stencil-public-runtime.d.ts +6 -4
  214. package/dist/types/util.d.ts +2 -10
  215. package/dist/types/utils/index.d.ts +1 -0
  216. package/dist/types/workspace/workspace/Tecton_tecton-production_master/packages/q2-tecton-elements/.stencil/test/elements/q2-tag-test.d.ts +1 -0
  217. package/dist/types/workspace/workspace/{_production_release_1.11.0-alpha → Tecton_tecton-production_master}/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +6 -3
  218. package/package.json +13 -13
  219. package/dist/q2-tecton-elements/p-06fff43d.entry.js +0 -1
  220. package/dist/q2-tecton-elements/p-080839ed.js +0 -1
  221. package/dist/q2-tecton-elements/p-29a37091.entry.js +0 -1
  222. package/dist/q2-tecton-elements/p-37aba2a4.js +0 -1
  223. package/dist/q2-tecton-elements/p-4cd00f1a.js +0 -1
  224. package/dist/q2-tecton-elements/p-6702eb4d.entry.js +0 -1
  225. package/dist/q2-tecton-elements/p-768e3a5d.entry.js +0 -1
  226. package/dist/q2-tecton-elements/p-843b1ee9.entry.js +0 -1
  227. package/dist/q2-tecton-elements/p-943c7745.entry.js +0 -1
  228. package/dist/q2-tecton-elements/p-95a73559.entry.js +0 -1
  229. package/dist/q2-tecton-elements/p-9a977ee6.entry.js +0 -1
  230. package/dist/q2-tecton-elements/p-b281c349.entry.js +0 -1
  231. package/dist/q2-tecton-elements/p-c5e55b9f.entry.js +0 -1
  232. package/dist/q2-tecton-elements/p-ccbe9158.entry.js +0 -1
  233. package/dist/q2-tecton-elements/p-db6f90ac.entry.js +0 -1
  234. package/dist/q2-tecton-elements/p-fa6eea5c.entry.js +0 -1
@@ -61,17 +61,17 @@ export class Q2Btn {
61
61
  return (h("button", { "aria-expanded": ariaExpanded, "aria-haspopup": ariaHasPopup, "aria-label": hideLabel && loc(label), "aria-selected": ariaSelected, disabled: disabled, type: type, tabindex: tabindex, "test-id": "q2BtnInnerButton", class: iconPosition && `icon-${iconPosition}` },
62
62
  h("div", null,
63
63
  renderLoadingSpinner && (h("q2-loading", { hidden: !loading, modifiers: isLoadingSpinnerInline ? 'inline' : undefined })),
64
- !hideLabel && label ? (loc(label)) : (h("slot", { onSlotchange: this.handleSlotChange })))));
64
+ !hideLabel && label ? loc(label) : h("slot", { onSlotchange: this.handleSlotChange }))));
65
65
  }
66
66
  get buttonAttributes() {
67
67
  return {
68
- ariaExpanded: this.ariaExpanded !== undefined ? `${!!this.ariaExpanded}` : undefined,
69
- ariaHasPopup: this.ariaHasPopup ? `${this.ariaHasPopup}` : undefined,
68
+ ariaExpanded: this.ariaExpanded !== undefined ? `${this.ariaExpanded.toString() === 'true'}` : undefined,
69
+ ariaHasPopup: this.ariaHasPopup !== undefined ? `${this.ariaHasPopup.toString() === 'true'}` : undefined,
70
70
  ariaLabel: this.label && this.hideLabel ? loc(this.label) : undefined,
71
- ariaSelected: this.ariaSelected ? `${this.ariaSelected}` : undefined,
71
+ ariaSelected: this.ariaSelected !== undefined ? `${this.ariaSelected.toString() === 'true'}` : undefined,
72
72
  disabled: this.disabled || false,
73
73
  type: this.type || 'button',
74
- tabindex: this.tabIndex || undefined
74
+ tabindex: this.tabIndex || undefined,
75
75
  };
76
76
  }
77
77
  static get is() { return "q2-btn"; }
@@ -84,11 +84,11 @@ export class Q2Btn {
84
84
  }; }
85
85
  static get properties() { return {
86
86
  "ariaExpanded": {
87
- "type": "boolean",
87
+ "type": "string",
88
88
  "mutable": false,
89
89
  "complexType": {
90
- "original": "boolean",
91
- "resolved": "boolean",
90
+ "original": "string",
91
+ "resolved": "string",
92
92
  "references": {}
93
93
  },
94
94
  "required": false,
@@ -101,11 +101,11 @@ export class Q2Btn {
101
101
  "reflect": false
102
102
  },
103
103
  "ariaHasPopup": {
104
- "type": "any",
104
+ "type": "string",
105
105
  "mutable": false,
106
106
  "complexType": {
107
- "original": "boolean | string",
108
- "resolved": "boolean | string",
107
+ "original": "string",
108
+ "resolved": "string",
109
109
  "references": {}
110
110
  },
111
111
  "required": false,
@@ -135,11 +135,11 @@ export class Q2Btn {
135
135
  "reflect": false
136
136
  },
137
137
  "ariaSelected": {
138
- "type": "boolean",
138
+ "type": "string",
139
139
  "mutable": false,
140
140
  "complexType": {
141
- "original": "boolean",
142
- "resolved": "boolean",
141
+ "original": "string",
142
+ "resolved": "string",
143
143
  "references": {}
144
144
  },
145
145
  "required": false,
@@ -237,7 +237,7 @@ button:disabled {
237
237
  }
238
238
  :host([badge]) button {
239
239
  padding: var(--tct-btn-badge-padding, var(--t-btn-badge-padding, 2px 5px));
240
- font-size: var(--tct-btn-badge-font-size, var(--t-btn-badge-font-size, var(--tct---btn-font-size, var(--t---btn-font-size, inherit))));
240
+ font-size: var(--tct-btn-badge-font-size, var(--t-btn-badge-font-size, var(--tct-btn-font-size, var(--t-btn-font-size, inherit))));
241
241
  border-radius: var(--tct-btn-badge-border-radius, var(--t-btn-badge-border-radius, var(--tct-border-radius-1, var(--app-border-radius-1, 3px))));
242
242
  background-color: var(--tct-btn-badge-bg, var(--t-btn-badge-bg, transparent));
243
243
  color: var(--tct-btn-badge-font-color, var(--t-btn-badge-font-color, inherit));
@@ -15,7 +15,7 @@ export function formatDateShort(value) {
15
15
  month: '2-digit',
16
16
  day: '2-digit',
17
17
  year: 'numeric',
18
- timeZone: 'UTC'
18
+ timeZone: 'UTC',
19
19
  }).format(new Date(isoDate));
20
20
  }
21
21
  export function formatDateLong(value) {
@@ -25,7 +25,7 @@ export function formatDateLong(value) {
25
25
  return new Intl.DateTimeFormat('default', {
26
26
  month: 'short',
27
27
  day: 'numeric',
28
- year: 'numeric'
28
+ year: 'numeric',
29
29
  }).format(date);
30
30
  }
31
31
  export function convertMomentFormat(stringFormat) {
@@ -45,7 +45,7 @@ export function stringToDate(date) {
45
45
  return undefined;
46
46
  }
47
47
  let result;
48
- let dateParts = date.split(/[\/\-]/).map(part => part.padStart(2, '0'));
48
+ const dateParts = date.split(/[\/\-]/).map(part => part.padStart(2, '0'));
49
49
  const isIsoString = isString && date.length >= 24 && date[10] === 'T';
50
50
  const isCompleteDate = dateParts.length === 3;
51
51
  const isPartialDate = dateParts.length < 3;
@@ -100,7 +100,7 @@ export function setupMonthYear(value = new Date()) {
100
100
  const monthIndex = Number(value.toISOString().split('-')[1]) - 1;
101
101
  return {
102
102
  monthIndex,
103
- selectedYear: value.getFullYear()
103
+ selectedYear: value.getFullYear(),
104
104
  };
105
105
  }
106
106
  export function validateInput(input = '', validDays = [], validDates = [], // white list
@@ -144,14 +144,10 @@ startDate, endDate, formatString = 'mm/dd/yyyy', assume) {
144
144
  if (input.length >= 5 && !isAvailable) {
145
145
  isValid = false;
146
146
  messageType = 'error';
147
- if (!monthName || !date || !year) {
148
- message = `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`;
149
- }
150
- else {
151
- message = loc('tecton.element.calendar.hint.notAvailableDate', [
152
- formatDateLong(inputDate)
153
- ]);
154
- }
147
+ const isInvalid = !monthName || !date || !year;
148
+ message = isInvalid
149
+ ? `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`
150
+ : loc('tecton.element.calendar.hint.notAvailableDate', [formatDateLong(inputDate)]);
155
151
  }
156
152
  }
157
153
  else {
@@ -165,19 +161,19 @@ startDate, endDate, formatString = 'mm/dd/yyyy', assume) {
165
161
  message,
166
162
  inputDate,
167
163
  isAvailable,
168
- calendarPosition
164
+ calendarPosition,
169
165
  };
170
166
  }
171
167
  function buildInputDate(input, assume) {
172
168
  const now = new Date();
173
- let [month, day, year] = input.split('/');
169
+ const [month, day, year] = input.split('/');
174
170
  if (input.length === 10) {
175
171
  return new Date(input);
176
172
  }
177
173
  else if (month && day && Number(day) > 0) {
178
- day = Number(day) < 10 ? `0${Number(day)}` : day;
179
- year = !year || year.length < 4 ? assumeYear(month, day, assume) : year;
180
- return new Date(`${month}/${day}/${year}`);
174
+ const twoDigitDay = Number(day) < 10 ? `0${Number(day)}` : day;
175
+ const fourDigitYear = !year || year.length < 4 ? assumeYear(month, day, assume) : year;
176
+ return new Date(`${month}/${twoDigitDay}/${fourDigitYear}`);
181
177
  }
182
178
  else if (month && day && Number(day) === 0) {
183
179
  return new Date(''); // invalid date: 09/0/2021
@@ -214,6 +210,12 @@ export function handleMissingZeros(input) {
214
210
  }
215
211
  return input;
216
212
  }
213
+ export function reorderDateString(input) {
214
+ const dateParts = (input || '').split('-');
215
+ if (dateParts.length !== 3)
216
+ return '';
217
+ return `${dateParts[1]}/${dateParts[2]}/${dateParts[0]}`;
218
+ }
217
219
  export function firstDayOfWeekInMonth(month, year) {
218
220
  return new Date(year, month, 1, 1, 1, 1, 1).getDay();
219
221
  }
@@ -225,7 +227,7 @@ export function getDays() {
225
227
  loc('tecton.element.calendar.days.short.Wednesday'),
226
228
  loc('tecton.element.calendar.days.short.Thursday'),
227
229
  loc('tecton.element.calendar.days.short.Friday'),
228
- loc('tecton.element.calendar.days.short.Saturday')
230
+ loc('tecton.element.calendar.days.short.Saturday'),
229
231
  ];
230
232
  }
231
233
  export function getDaysOfWeek() {
@@ -236,7 +238,7 @@ export function getDaysOfWeek() {
236
238
  loc('tecton.element.calendar.days.Wednesday'),
237
239
  loc('tecton.element.calendar.days.Thursday'),
238
240
  loc('tecton.element.calendar.days.Friday'),
239
- loc('tecton.element.calendar.days.Saturday')
241
+ loc('tecton.element.calendar.days.Saturday'),
240
242
  ];
241
243
  }
242
244
  export function getMonths() {
@@ -252,6 +254,6 @@ export function getMonths() {
252
254
  loc('tecton.element.calendar.months.September'),
253
255
  loc('tecton.element.calendar.months.October'),
254
256
  loc('tecton.element.calendar.months.November'),
255
- loc('tecton.element.calendar.months.December')
257
+ loc('tecton.element.calendar.months.December'),
256
258
  ];
257
259
  }
@@ -1,6 +1,6 @@
1
- import { Component, Prop, Element, State, Event, Listen, Watch, h } from '@stencil/core';
1
+ import { Component, Prop, Element, State, Event, Listen, Watch, h, } from '@stencil/core';
2
2
  import { addDays, isSameDay, format, isValid as isValidDate } from 'date-fns';
3
- import { stringToDate, setupMonthYear, getMonths, getDays, getDaysOfWeek, stringArrayToDate, convertMomentFormat, validateInput, handleMissingZeros, formatDateISO, formatDateLong, formatDateShort, removeTimezoneOffset } from './helpers';
3
+ import { stringToDate, setupMonthYear, getMonths, getDays, getDaysOfWeek, stringArrayToDate, convertMomentFormat, validateInput, handleMissingZeros, formatDateISO, formatDateLong, formatDateShort, removeTimezoneOffset, reorderDateString, } from './helpers';
4
4
  import { buildDates, getValidDaysOfWeek } from './validation';
5
5
  import { handleAriaLabel, loc, setPopProperties, overrideFocus, isEventFromElement } from 'src/utils';
6
6
  export class Q2Calendar {
@@ -26,7 +26,7 @@ export class Q2Calendar {
26
26
  }
27
27
  };
28
28
  this.openCalendar = () => {
29
- if (!this.dropdownOpen) {
29
+ if (!this.readonly && !this.dropdownOpen) {
30
30
  this.selectedMonthYear = setupMonthYear(this.dateValue);
31
31
  this.dateList = this.buildDateList(this.selectedMonthYear);
32
32
  this.dropdownOpen = true;
@@ -35,6 +35,8 @@ export class Q2Calendar {
35
35
  }
36
36
  };
37
37
  this.toggleCalendar = () => {
38
+ if (this.readonly)
39
+ return;
38
40
  this.dropdownOpen = !this.dropdownOpen;
39
41
  this.scheduledAfterRender.push(this.resizeIframe);
40
42
  if (this.dropdownOpen) {
@@ -162,7 +164,7 @@ export class Q2Calendar {
162
164
  const newYear = removeTimezoneOffset(new Date(year, monthIndex));
163
165
  this.selectedMonthYear = {
164
166
  monthIndex: newYear.getMonth(),
165
- selectedYear: newYear.getFullYear()
167
+ selectedYear: newYear.getFullYear(),
166
168
  };
167
169
  this.dateList = this.buildDateList(this.selectedMonthYear);
168
170
  this.scheduledAfterRender.push(() => this.checkActiveCellForBlankness());
@@ -250,13 +252,14 @@ export class Q2Calendar {
250
252
  };
251
253
  }
252
254
  resizeIframe() {
253
- return (window.TectonElements &&
254
- window.TectonElements.resizeIframe &&
255
- window.TectonElements.resizeIframe());
255
+ return window.TectonElements && window.TectonElements.resizeIframe && window.TectonElements.resizeIframe();
256
256
  }
257
257
  connectedCallback() {
258
258
  this.selectedMonthYear = setupMonthYear(this.dateValue);
259
259
  this.dateList = this.buildDateList(this.selectedMonthYear);
260
+ if (this.value && this.isTypeable && !this.typedValue) {
261
+ this.typedValue = reorderDateString(this.value);
262
+ }
260
263
  this.validateDate();
261
264
  }
262
265
  componentWillLoad() {
@@ -284,9 +287,7 @@ export class Q2Calendar {
284
287
  }
285
288
  get localizedErrors() {
286
289
  return ((Array.isArray(this.errors) &&
287
- this.errors
288
- .filter((error) => error)
289
- .map((error) => error && loc(error))) ||
290
+ this.errors.filter((error) => error).map((error) => error && loc(error))) ||
290
291
  []);
291
292
  }
292
293
  get formattedValue() {
@@ -301,7 +302,7 @@ export class Q2Calendar {
301
302
  year: 'numeric',
302
303
  month: '2-digit',
303
304
  day: '2-digit',
304
- timeZone: 'UTC'
305
+ timeZone: 'UTC',
305
306
  }).format(dateValue);
306
307
  }
307
308
  get computedPlaceholder() {
@@ -323,9 +324,7 @@ export class Q2Calendar {
323
324
  if (isMoment)
324
325
  return value.toDate();
325
326
  // stringified moment value assigned in html template e.g.) handlebar
326
- const isMomentString = typeof value === 'string' &&
327
- value.split(' ').length === 6 &&
328
- /GMT-\d{4}/g.test(value);
327
+ const isMomentString = typeof value === 'string' && value.split(' ').length === 6 && /GMT-\d{4}/g.test(value);
329
328
  if (isMomentString) {
330
329
  value = formatDateISO(value);
331
330
  }
@@ -336,7 +335,7 @@ export class Q2Calendar {
336
335
  return {
337
336
  startDate: stringToDate(this.startDate),
338
337
  endDate: stringToDate(this.endDate),
339
- cutOffTime: stringToDate(this.cutoffTime)
338
+ cutOffTime: stringToDate(this.cutoffTime),
340
339
  };
341
340
  }
342
341
  get isTypeable() {
@@ -353,8 +352,7 @@ export class Q2Calendar {
353
352
  }
354
353
  defaultErrorHandler(event) {
355
354
  if (event.target === this.hostElement && !this.hostElement.onerror) {
356
- if (Array.isArray(this.errors) &&
357
- this.errors.includes('tecton.element.calendar.invalidDate')) {
355
+ if (Array.isArray(this.errors) && this.errors.includes('tecton.element.calendar.invalidDate')) {
358
356
  return;
359
357
  }
360
358
  this.errors = (this.errors || []).concat(['tecton.element.calendar.invalidDate']);
@@ -368,8 +366,7 @@ export class Q2Calendar {
368
366
  this.onsuccess(event);
369
367
  }
370
368
  else {
371
- if (Array.isArray(this.errors) &&
372
- this.errors.includes('tecton.element.calendar.invalidDate')) {
369
+ if (Array.isArray(this.errors) && this.errors.includes('tecton.element.calendar.invalidDate')) {
373
370
  this.errors = this.errors.filter(x => x !== 'tecton.element.calendar.invalidDate');
374
371
  }
375
372
  }
@@ -392,9 +389,7 @@ export class Q2Calendar {
392
389
  this.typedValue = newValueAsString;
393
390
  }
394
391
  else {
395
- const dateValue = isMoment
396
- ? newValue.toDate()
397
- : stringToDate(newValue);
392
+ const dateValue = isMoment ? newValue.toDate() : stringToDate(newValue);
398
393
  this.inputField.value = formatDateShort(dateValue);
399
394
  this.selectedMonthYear = setupMonthYear(dateValue);
400
395
  this.dateList = this.buildDateList(this.selectedMonthYear);
@@ -451,22 +446,21 @@ export class Q2Calendar {
451
446
  else {
452
447
  calculationDateList = this.buildDateList({
453
448
  monthIndex: month,
454
- selectedYear: year
449
+ selectedYear: year,
455
450
  });
456
451
  }
457
452
  const dateValueDayOfMonth = (_c = dateValue === null || dateValue === void 0 ? void 0 : dateValue.getDate()) !== null && _c !== void 0 ? _c : undefined;
458
453
  const isDateValueInvalid = dateValueDayOfMonth
459
- ? !calculationDateList.find(({ integer }) => integer === dateValueDayOfMonth)
460
- .isValid
454
+ ? !calculationDateList.find(({ integer }) => integer === dateValueDayOfMonth).isValid
461
455
  : true;
462
456
  if (isDateValueInvalid) {
463
457
  this.error.emit({
464
458
  errors: [
465
459
  {
466
460
  message: `Value passed is invalid: The date ${this.value} is not valid`,
467
- errorCode: 'generalInvalid'
468
- }
469
- ]
461
+ errorCode: 'generalInvalid',
462
+ },
463
+ ],
470
464
  });
471
465
  }
472
466
  else {
@@ -475,7 +469,7 @@ export class Q2Calendar {
475
469
  }
476
470
  }
477
471
  catch (error) {
478
- console.log('Invalid moment value ', this.dateValue);
472
+ console.warn('Invalid moment value ', this.dateValue);
479
473
  }
480
474
  }
481
475
  focusInput() {
@@ -484,16 +478,12 @@ export class Q2Calendar {
484
478
  }
485
479
  checkActiveCellForBlankness() {
486
480
  const activeElement = this.hostElement.shadowRoot.activeElement;
487
- if (!activeElement ||
488
- activeElement.tagName !== 'TD' ||
489
- !activeElement.hasAttribute('aria-hidden'))
481
+ if (!activeElement || activeElement.tagName !== 'TD' || !activeElement.hasAttribute('aria-hidden'))
490
482
  return;
491
483
  const { calendarBody } = this;
492
484
  const calendarCells = Array.from(calendarBody.querySelectorAll('td'));
493
485
  const indexOfCell = Array.from(calendarCells).indexOf(activeElement);
494
- const dayToFocus = indexOfCell < 15
495
- ? 1
496
- : calendarCells.filter(cell => !cell.hasAttribute('aria-hidden')).length;
486
+ const dayToFocus = indexOfCell < 15 ? 1 : calendarCells.filter(cell => !cell.hasAttribute('aria-hidden')).length;
497
487
  this.focusDay(this.generateDateFromDay(dayToFocus));
498
488
  }
499
489
  generateDateFromDay(day) {
@@ -533,11 +523,11 @@ export class Q2Calendar {
533
523
  this.setHints({
534
524
  isValid: true,
535
525
  message: `${loc('tecton.element.calendar.hint.selection')}: ${formatDateLong(inputDate)}`,
536
- messageType: 'success'
526
+ messageType: 'success',
537
527
  });
538
528
  }
539
529
  calendarField() {
540
- return (h("q2-input", { ref: el => (this.inputField = el), class: "calendar-input-field", value: this.formattedValue, label: loc(this.label), hideLabel: this.hideLabel, disabled: !!this.disabled, placeholder: this.computedPlaceholder, optional: !!this.optional, ariaExpanded: this.dropdownOpen, errors: (this.localizedErrors.length > 0 && this.localizedErrors) ||
530
+ return (h("q2-input", { ref: el => (this.inputField = el), class: "calendar-input-field", value: this.formattedValue, label: loc(this.label), hideLabel: this.hideLabel, disabled: !!this.disabled, readonly: !!this.readonly, placeholder: this.computedPlaceholder, optional: !!this.optional, ariaExpanded: `${!!this.dropdownOpen}`, errors: (this.localizedErrors.length > 0 && this.localizedErrors) ||
541
531
  (this.invalid && ['tecton.element.calendar.invalid']) ||
542
532
  [], onClick: this.onInputClick, onChange: this.onInputChange, onInput: this.onInputInput, onKeyDown: this.onInputKeydown, onKeyUp: this.onInputKeyup, onBlur: this.onInputBlur, "icon-right": "calendar", "format-modifier": this.isTypeable ? this.formatModifier : '', pseudo: !this.isTypeable, type: "date", "hide-messages": true, "test-id": "inputAndCalendarToggle" }));
543
533
  }
@@ -691,6 +681,23 @@ export class Q2Calendar {
691
681
  "attribute": "disabled",
692
682
  "reflect": true
693
683
  },
684
+ "readonly": {
685
+ "type": "boolean",
686
+ "mutable": false,
687
+ "complexType": {
688
+ "original": "boolean",
689
+ "resolved": "boolean",
690
+ "references": {}
691
+ },
692
+ "required": false,
693
+ "optional": false,
694
+ "docs": {
695
+ "tags": [],
696
+ "text": ""
697
+ },
698
+ "attribute": "readonly",
699
+ "reflect": true
700
+ },
694
701
  "invalid": {
695
702
  "type": "boolean",
696
703
  "mutable": true,
@@ -8,6 +8,7 @@ export function generateDatesFromMonthYear(month, year) {
8
8
  }, []);
9
9
  }
10
10
  export function getValidDaysOfWeek(checksum = 127) {
11
+ /* tslint:disable:no-bitwise */
11
12
  const sunValid = checksum & 1;
12
13
  const monValid = checksum & 2;
13
14
  const tuesValid = checksum & 4;
@@ -15,6 +16,7 @@ export function getValidDaysOfWeek(checksum = 127) {
15
16
  const thursValid = checksum & 16;
16
17
  const friValid = checksum & 32;
17
18
  const satValid = checksum & 64;
19
+ /* tslint:enable:no-bitwise */
18
20
  const ret = [];
19
21
  if (checksum <= 0)
20
22
  return ret;
@@ -82,7 +84,7 @@ export function getDayState(dayInMonth, dateValidators, currentDate) {
82
84
  const isEndDate = isSameDay(dayInMonth, dateValidators === null || dateValidators === void 0 ? void 0 : dateValidators.endDate);
83
85
  return { isSelected, isToday, isStartDate, isEndDate };
84
86
  }
85
- export function generateClassesForCalDay({ isInvalid, isSelected, isEndDate, isStartDate, isToday, isIncompleteDate }) {
87
+ export function generateClassesForCalDay({ isInvalid, isSelected, isEndDate, isStartDate, isToday, isIncompleteDate, }) {
86
88
  const classes = [];
87
89
  if (!isInvalid)
88
90
  classes.push('is-valid');
@@ -116,7 +118,7 @@ export const emptyDate = {
116
118
  isSelected: false,
117
119
  isStartDate: false,
118
120
  isEndDate: false,
119
- classList: ''
121
+ classList: '',
120
122
  };
121
123
  export function addEmptyDates(from, to) {
122
124
  if (from === 7)