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
@@ -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
  }
@@ -333,10 +332,11 @@ export class Q2Calendar {
333
332
  }
334
333
  }
335
334
  get dateValidators() {
335
+ const ct = new Date(this.cutoffTime || ''); // should fallback to InvalidDate
336
336
  return {
337
337
  startDate: stringToDate(this.startDate),
338
338
  endDate: stringToDate(this.endDate),
339
- cutOffTime: stringToDate(this.cutoffTime)
339
+ cutOffTime: isValidDate(ct) ? ct : undefined,
340
340
  };
341
341
  }
342
342
  get isTypeable() {
@@ -353,8 +353,7 @@ export class Q2Calendar {
353
353
  }
354
354
  defaultErrorHandler(event) {
355
355
  if (event.target === this.hostElement && !this.hostElement.onerror) {
356
- if (Array.isArray(this.errors) &&
357
- this.errors.includes('tecton.element.calendar.invalidDate')) {
356
+ if (Array.isArray(this.errors) && this.errors.includes('tecton.element.calendar.invalidDate')) {
358
357
  return;
359
358
  }
360
359
  this.errors = (this.errors || []).concat(['tecton.element.calendar.invalidDate']);
@@ -368,8 +367,7 @@ export class Q2Calendar {
368
367
  this.onsuccess(event);
369
368
  }
370
369
  else {
371
- if (Array.isArray(this.errors) &&
372
- this.errors.includes('tecton.element.calendar.invalidDate')) {
370
+ if (Array.isArray(this.errors) && this.errors.includes('tecton.element.calendar.invalidDate')) {
373
371
  this.errors = this.errors.filter(x => x !== 'tecton.element.calendar.invalidDate');
374
372
  }
375
373
  }
@@ -392,9 +390,7 @@ export class Q2Calendar {
392
390
  this.typedValue = newValueAsString;
393
391
  }
394
392
  else {
395
- const dateValue = isMoment
396
- ? newValue.toDate()
397
- : stringToDate(newValue);
393
+ const dateValue = isMoment ? newValue.toDate() : stringToDate(newValue);
398
394
  this.inputField.value = formatDateShort(dateValue);
399
395
  this.selectedMonthYear = setupMonthYear(dateValue);
400
396
  this.dateList = this.buildDateList(this.selectedMonthYear);
@@ -451,22 +447,21 @@ export class Q2Calendar {
451
447
  else {
452
448
  calculationDateList = this.buildDateList({
453
449
  monthIndex: month,
454
- selectedYear: year
450
+ selectedYear: year,
455
451
  });
456
452
  }
457
453
  const dateValueDayOfMonth = (_c = dateValue === null || dateValue === void 0 ? void 0 : dateValue.getDate()) !== null && _c !== void 0 ? _c : undefined;
458
454
  const isDateValueInvalid = dateValueDayOfMonth
459
- ? !calculationDateList.find(({ integer }) => integer === dateValueDayOfMonth)
460
- .isValid
455
+ ? !calculationDateList.find(({ integer }) => integer === dateValueDayOfMonth).isValid
461
456
  : true;
462
457
  if (isDateValueInvalid) {
463
458
  this.error.emit({
464
459
  errors: [
465
460
  {
466
461
  message: `Value passed is invalid: The date ${this.value} is not valid`,
467
- errorCode: 'generalInvalid'
468
- }
469
- ]
462
+ errorCode: 'generalInvalid',
463
+ },
464
+ ],
470
465
  });
471
466
  }
472
467
  else {
@@ -475,7 +470,7 @@ export class Q2Calendar {
475
470
  }
476
471
  }
477
472
  catch (error) {
478
- console.log('Invalid moment value ', this.dateValue);
473
+ console.warn('Invalid moment value ', this.dateValue);
479
474
  }
480
475
  }
481
476
  focusInput() {
@@ -484,16 +479,12 @@ export class Q2Calendar {
484
479
  }
485
480
  checkActiveCellForBlankness() {
486
481
  const activeElement = this.hostElement.shadowRoot.activeElement;
487
- if (!activeElement ||
488
- activeElement.tagName !== 'TD' ||
489
- !activeElement.hasAttribute('aria-hidden'))
482
+ if (!activeElement || activeElement.tagName !== 'TD' || !activeElement.hasAttribute('aria-hidden'))
490
483
  return;
491
484
  const { calendarBody } = this;
492
485
  const calendarCells = Array.from(calendarBody.querySelectorAll('td'));
493
486
  const indexOfCell = Array.from(calendarCells).indexOf(activeElement);
494
- const dayToFocus = indexOfCell < 15
495
- ? 1
496
- : calendarCells.filter(cell => !cell.hasAttribute('aria-hidden')).length;
487
+ const dayToFocus = indexOfCell < 15 ? 1 : calendarCells.filter(cell => !cell.hasAttribute('aria-hidden')).length;
497
488
  this.focusDay(this.generateDateFromDay(dayToFocus));
498
489
  }
499
490
  generateDateFromDay(day) {
@@ -533,11 +524,11 @@ export class Q2Calendar {
533
524
  this.setHints({
534
525
  isValid: true,
535
526
  message: `${loc('tecton.element.calendar.hint.selection')}: ${formatDateLong(inputDate)}`,
536
- messageType: 'success'
527
+ messageType: 'success',
537
528
  });
538
529
  }
539
530
  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) ||
531
+ 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
532
  (this.invalid && ['tecton.element.calendar.invalid']) ||
542
533
  [], 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
534
  }
@@ -691,6 +682,23 @@ export class Q2Calendar {
691
682
  "attribute": "disabled",
692
683
  "reflect": true
693
684
  },
685
+ "readonly": {
686
+ "type": "boolean",
687
+ "mutable": false,
688
+ "complexType": {
689
+ "original": "boolean",
690
+ "resolved": "boolean",
691
+ "references": {}
692
+ },
693
+ "required": false,
694
+ "optional": false,
695
+ "docs": {
696
+ "tags": [],
697
+ "text": ""
698
+ },
699
+ "attribute": "readonly",
700
+ "reflect": true
701
+ },
694
702
  "invalid": {
695
703
  "type": "boolean",
696
704
  "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)