q2-tecton-elements 1.44.1 → 1.45.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 (479) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +2 -2
  2. package/dist/cjs/{index-1deac3ee.js → index-0e15dc8d.js} +14 -1
  3. package/dist/cjs/index-0e15dc8d.js.map +1 -0
  4. package/dist/cjs/{index-9272f57a.js → index-c385e32f.js} +1 -1
  5. package/dist/cjs/{index-9272f57a.js.map → index-c385e32f.js.map} +1 -1
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
  8. package/dist/cjs/q2-avatar.cjs.entry.js +1 -5
  9. package/dist/cjs/q2-avatar.cjs.entry.js.map +1 -1
  10. package/dist/cjs/q2-badge.cjs.entry.js +4 -4
  11. package/dist/cjs/q2-badge.cjs.entry.js.map +1 -1
  12. package/dist/cjs/q2-btn_2.cjs.entry.js +20 -9
  13. package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
  14. package/dist/cjs/q2-calendar.cjs.entry.js +51 -20
  15. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  16. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-carousel-pane.cjs.entry.js +7 -6
  18. package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
  19. package/dist/cjs/q2-carousel.cjs.entry.js +25 -11
  20. package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
  21. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-chart-donut.cjs.entry.js +18 -10
  24. package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
  25. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-data-table.cjs.entry.js +3 -3
  28. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  29. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  30. package/dist/cjs/q2-detail.cjs.entry.js.map +1 -1
  31. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  32. package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
  33. package/dist/cjs/q2-dropdown.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-icon.cjs.entry.js +203 -212
  36. package/dist/cjs/q2-icon.cjs.entry.js.map +1 -1
  37. package/dist/cjs/q2-input.cjs.entry.js +31 -6
  38. package/dist/cjs/q2-input.cjs.entry.js.map +1 -1
  39. package/dist/cjs/q2-item.cjs.entry.js +120 -0
  40. package/dist/cjs/q2-item.cjs.entry.js.map +1 -0
  41. package/dist/cjs/q2-list.cjs.entry.js +84 -0
  42. package/dist/cjs/q2-list.cjs.entry.js.map +1 -0
  43. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  44. package/dist/cjs/q2-message.cjs.entry.js +3 -3
  45. package/dist/cjs/q2-message.cjs.entry.js.map +1 -1
  46. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  47. package/dist/cjs/q2-optgroup_2.cjs.entry.js +4 -4
  48. package/dist/cjs/q2-optgroup_2.cjs.entry.js.map +1 -1
  49. package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
  50. package/dist/cjs/q2-pagination.cjs.entry.js +3 -3
  51. package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
  52. package/dist/cjs/q2-pill.cjs.entry.js +4 -3
  53. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  54. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  55. package/dist/cjs/q2-radio.cjs.entry.js +3 -3
  56. package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
  57. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  58. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  59. package/dist/cjs/q2-select.cjs.entry.js +1 -1
  60. package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
  61. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +3 -3
  62. package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
  63. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  64. package/dist/cjs/q2-tab-container.cjs.entry.js +3 -3
  65. package/dist/cjs/q2-tab-container.cjs.entry.js.map +1 -1
  66. package/dist/cjs/q2-tab-pane.cjs.entry.js +1 -1
  67. package/dist/cjs/q2-tag.cjs.entry.js +3 -3
  68. package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
  69. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  70. package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
  71. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  72. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  73. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  74. package/dist/collection/collection-manifest.json +2 -0
  75. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -5
  76. package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
  77. package/dist/collection/components/q2-badge/q2-badge.js +5 -4
  78. package/dist/collection/components/q2-badge/q2-badge.js.map +1 -1
  79. package/dist/collection/components/q2-btn/q2-btn.css +1 -1
  80. package/dist/collection/components/q2-btn/q2-btn.js +25 -8
  81. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  82. package/dist/collection/components/q2-calendar/q2-calendar-helpers.js +1 -1
  83. package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
  84. package/dist/collection/components/q2-calendar/q2-calendar.js +48 -17
  85. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  86. package/dist/collection/components/q2-carousel/q2-carousel.css +3 -1
  87. package/dist/collection/components/q2-carousel/q2-carousel.js +47 -10
  88. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  89. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.css +6 -0
  90. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +25 -4
  91. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
  92. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +17 -12
  93. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  94. package/dist/collection/components/q2-data-table/q2-data-table.css +1 -1
  95. package/dist/collection/components/q2-data-table/q2-data-table.js +8 -8
  96. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  97. package/dist/collection/components/q2-detail/q2-detail.css +24 -21
  98. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js +1 -1
  99. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  100. package/dist/collection/components/q2-icon/assets/cards.symbol.svg +1 -1
  101. package/dist/collection/components/q2-icon/assets/icon-list.json +1 -1
  102. package/dist/collection/components/q2-icon/assets/icon-map.json +1 -1
  103. package/dist/collection/components/q2-icon/assets/standard.symbol.svg +1 -1
  104. package/dist/collection/components/q2-icon/q2-icon.js +4 -36
  105. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  106. package/dist/collection/components/q2-input/q2-input.css +3 -5
  107. package/dist/collection/components/q2-input/q2-input.js +31 -6
  108. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  109. package/dist/collection/components/q2-item/q2-item.css +261 -0
  110. package/dist/collection/components/q2-item/q2-item.js +145 -0
  111. package/dist/collection/components/q2-item/q2-item.js.map +1 -0
  112. package/dist/collection/components/q2-list/q2-list.css +173 -0
  113. package/dist/collection/components/q2-list/q2-list.js +126 -0
  114. package/dist/collection/components/q2-list/q2-list.js.map +1 -0
  115. package/dist/collection/components/q2-loc/q2-loc.js +1 -1
  116. package/dist/collection/components/q2-message/q2-message.css +6 -3
  117. package/dist/collection/components/q2-message/q2-message.js +1 -1
  118. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  119. package/dist/collection/components/q2-option/q2-option.css +1 -1
  120. package/dist/collection/components/q2-option/q2-option.js +1 -1
  121. package/dist/collection/components/q2-option-list/q2-option-list.js +2 -2
  122. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  123. package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
  124. package/dist/collection/components/q2-pill/q2-pill.css +13 -9
  125. package/dist/collection/components/q2-pill/q2-pill.js +19 -1
  126. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  127. package/dist/collection/components/q2-popover/q2-popover.js +1 -1
  128. package/dist/collection/components/q2-radio/q2-radio.css +9 -6
  129. package/dist/collection/components/q2-radio/q2-radio.js +1 -1
  130. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  131. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  132. package/dist/collection/components/q2-section/q2-section.js +2 -2
  133. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  134. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +3 -3
  135. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +6 -2
  136. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  137. package/dist/collection/components/q2-tab-container/q2-tab-container.css +2 -2
  138. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  139. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  140. package/dist/collection/components/q2-tag/q2-tag.css +6 -6
  141. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  142. package/dist/collection/components/q2-textarea/q2-textarea.css +4 -24
  143. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  144. package/dist/collection/utils/index.js +12 -0
  145. package/dist/collection/utils/index.js.map +1 -1
  146. package/dist/components/index.js +4 -0
  147. package/dist/components/index.js.map +1 -1
  148. package/dist/components/index2.js +13 -1
  149. package/dist/components/index2.js.map +1 -1
  150. package/dist/components/q2-avatar2.js +2 -5
  151. package/dist/components/q2-avatar2.js.map +1 -1
  152. package/dist/components/q2-badge2.js +4 -4
  153. package/dist/components/q2-badge2.js.map +1 -1
  154. package/dist/components/q2-btn2.js +21 -10
  155. package/dist/components/q2-btn2.js.map +1 -1
  156. package/dist/components/q2-calendar.js +49 -18
  157. package/dist/components/q2-calendar.js.map +1 -1
  158. package/dist/components/q2-carousel-pane.js +8 -6
  159. package/dist/components/q2-carousel-pane.js.map +1 -1
  160. package/dist/components/q2-carousel.js +26 -10
  161. package/dist/components/q2-carousel.js.map +1 -1
  162. package/dist/components/q2-chart-donut.js +19 -11
  163. package/dist/components/q2-chart-donut.js.map +1 -1
  164. package/dist/components/q2-checkbox-group.js +1 -1
  165. package/dist/components/q2-data-table.js +2 -2
  166. package/dist/components/q2-data-table.js.map +1 -1
  167. package/dist/components/q2-detail.js +2 -2
  168. package/dist/components/q2-detail.js.map +1 -1
  169. package/dist/components/q2-dropdown-item2.js.map +1 -1
  170. package/dist/components/q2-icon2.js +204 -3107
  171. package/dist/components/q2-icon2.js.map +1 -1
  172. package/dist/components/q2-input2.js +31 -6
  173. package/dist/components/q2-input2.js.map +1 -1
  174. package/dist/components/q2-item.d.ts +11 -0
  175. package/dist/components/q2-item.js +137 -0
  176. package/dist/components/q2-item.js.map +1 -0
  177. package/dist/components/q2-list.d.ts +11 -0
  178. package/dist/components/q2-list.js +102 -0
  179. package/dist/components/q2-list.js.map +1 -0
  180. package/dist/components/q2-loc.js +1 -1
  181. package/dist/components/q2-message2.js +3 -3
  182. package/dist/components/q2-message2.js.map +1 -1
  183. package/dist/components/q2-optgroup2.js +1 -1
  184. package/dist/components/q2-option-list2.js +1 -1
  185. package/dist/components/q2-option2.js +2 -2
  186. package/dist/components/q2-option2.js.map +1 -1
  187. package/dist/components/q2-pagination.js +2 -2
  188. package/dist/components/q2-pagination.js.map +1 -1
  189. package/dist/components/q2-pill.js +4 -2
  190. package/dist/components/q2-pill.js.map +1 -1
  191. package/dist/components/q2-popover2.js +2 -2
  192. package/dist/components/q2-radio-group.js +1 -1
  193. package/dist/components/q2-radio.js +2 -2
  194. package/dist/components/q2-radio.js.map +1 -1
  195. package/dist/components/q2-relative-time.js +1 -1
  196. package/dist/components/q2-section.js +2 -2
  197. package/dist/components/q2-select.js +1 -1
  198. package/dist/components/q2-stepper-pane.js +1 -1
  199. package/dist/components/q2-stepper-vertical.js +2 -2
  200. package/dist/components/q2-stepper-vertical.js.map +1 -1
  201. package/dist/components/q2-stepper.js +1 -1
  202. package/dist/components/q2-tab-container.js +2 -2
  203. package/dist/components/q2-tab-container.js.map +1 -1
  204. package/dist/components/q2-tab-pane.js +1 -1
  205. package/dist/components/q2-tag.js +2 -2
  206. package/dist/components/q2-tag.js.map +1 -1
  207. package/dist/components/q2-textarea.js +2 -2
  208. package/dist/components/q2-textarea.js.map +1 -1
  209. package/dist/components/tecton-tab-pane.js +2 -2
  210. package/dist/esm/click-elsewhere_2.entry.js +2 -2
  211. package/dist/esm/{index-12c2a320.js → index-0a702dd6.js} +14 -2
  212. package/dist/esm/index-0a702dd6.js.map +1 -0
  213. package/dist/esm/{index-113a38d1.js → index-f0dfb099.js} +1 -1
  214. package/dist/esm/{index-113a38d1.js.map → index-f0dfb099.js.map} +1 -1
  215. package/dist/esm/loader.js +1 -1
  216. package/dist/esm/q2-action-sheet.entry.js +1 -1
  217. package/dist/esm/q2-avatar.entry.js +1 -5
  218. package/dist/esm/q2-avatar.entry.js.map +1 -1
  219. package/dist/esm/q2-badge.entry.js +4 -4
  220. package/dist/esm/q2-badge.entry.js.map +1 -1
  221. package/dist/esm/q2-btn_2.entry.js +20 -9
  222. package/dist/esm/q2-btn_2.entry.js.map +1 -1
  223. package/dist/esm/q2-calendar.entry.js +51 -20
  224. package/dist/esm/q2-calendar.entry.js.map +1 -1
  225. package/dist/esm/q2-card.entry.js +1 -1
  226. package/dist/esm/q2-carousel-pane.entry.js +7 -6
  227. package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
  228. package/dist/esm/q2-carousel.entry.js +25 -11
  229. package/dist/esm/q2-carousel.entry.js.map +1 -1
  230. package/dist/esm/q2-chart-area.entry.js +1 -1
  231. package/dist/esm/q2-chart-bar.entry.js +1 -1
  232. package/dist/esm/q2-chart-donut.entry.js +18 -10
  233. package/dist/esm/q2-chart-donut.entry.js.map +1 -1
  234. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  235. package/dist/esm/q2-checkbox.entry.js +1 -1
  236. package/dist/esm/q2-data-table.entry.js +3 -3
  237. package/dist/esm/q2-data-table.entry.js.map +1 -1
  238. package/dist/esm/q2-detail.entry.js +2 -2
  239. package/dist/esm/q2-detail.entry.js.map +1 -1
  240. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  241. package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
  242. package/dist/esm/q2-dropdown.entry.js +1 -1
  243. package/dist/esm/q2-editable-field.entry.js +1 -1
  244. package/dist/esm/q2-icon.entry.js +203 -212
  245. package/dist/esm/q2-icon.entry.js.map +1 -1
  246. package/dist/esm/q2-input.entry.js +31 -6
  247. package/dist/esm/q2-input.entry.js.map +1 -1
  248. package/dist/esm/q2-item.entry.js +116 -0
  249. package/dist/esm/q2-item.entry.js.map +1 -0
  250. package/dist/esm/q2-list.entry.js +80 -0
  251. package/dist/esm/q2-list.entry.js.map +1 -0
  252. package/dist/esm/q2-loc.entry.js +2 -2
  253. package/dist/esm/q2-message.entry.js +3 -3
  254. package/dist/esm/q2-message.entry.js.map +1 -1
  255. package/dist/esm/q2-month-picker.entry.js +1 -1
  256. package/dist/esm/q2-optgroup_2.entry.js +4 -4
  257. package/dist/esm/q2-optgroup_2.entry.js.map +1 -1
  258. package/dist/esm/q2-option-list.entry.js +1 -1
  259. package/dist/esm/q2-pagination.entry.js +3 -3
  260. package/dist/esm/q2-pagination.entry.js.map +1 -1
  261. package/dist/esm/q2-pill.entry.js +4 -3
  262. package/dist/esm/q2-pill.entry.js.map +1 -1
  263. package/dist/esm/q2-radio-group.entry.js +1 -1
  264. package/dist/esm/q2-radio.entry.js +3 -3
  265. package/dist/esm/q2-radio.entry.js.map +1 -1
  266. package/dist/esm/q2-relative-time.entry.js +2 -2
  267. package/dist/esm/q2-section.entry.js +3 -3
  268. package/dist/esm/q2-select.entry.js +1 -1
  269. package/dist/esm/q2-stepper-pane.entry.js +2 -2
  270. package/dist/esm/q2-stepper-vertical.entry.js +3 -3
  271. package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
  272. package/dist/esm/q2-stepper.entry.js +2 -2
  273. package/dist/esm/q2-tab-container.entry.js +3 -3
  274. package/dist/esm/q2-tab-container.entry.js.map +1 -1
  275. package/dist/esm/q2-tab-pane.entry.js +1 -1
  276. package/dist/esm/q2-tag.entry.js +3 -3
  277. package/dist/esm/q2-tag.entry.js.map +1 -1
  278. package/dist/esm/q2-tecton-elements.js +1 -1
  279. package/dist/esm/q2-textarea.entry.js +2 -2
  280. package/dist/esm/q2-textarea.entry.js.map +1 -1
  281. package/dist/esm/q2-tooltip.entry.js +1 -1
  282. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  283. package/dist/q2-tecton-elements/assets/cards.symbol.svg +1 -1
  284. package/dist/q2-tecton-elements/assets/icon-list.json +1 -1
  285. package/dist/q2-tecton-elements/assets/icon-map.json +1 -1
  286. package/dist/q2-tecton-elements/assets/standard.symbol.svg +1 -1
  287. package/dist/q2-tecton-elements/p-05b015a8.entry.js +2 -0
  288. package/dist/q2-tecton-elements/p-05b015a8.entry.js.map +1 -0
  289. package/dist/q2-tecton-elements/p-0d548810.entry.js +2 -0
  290. package/dist/q2-tecton-elements/p-0d548810.entry.js.map +1 -0
  291. package/dist/q2-tecton-elements/{p-cbbc7659.entry.js → p-1c17d118.entry.js} +2 -2
  292. package/dist/q2-tecton-elements/p-1c17d118.entry.js.map +1 -0
  293. package/dist/q2-tecton-elements/{p-86cf292d.entry.js → p-2132da06.entry.js} +2 -2
  294. package/dist/q2-tecton-elements/{p-1fac9c85.entry.js → p-22661533.entry.js} +2 -2
  295. package/dist/q2-tecton-elements/p-2436c843.entry.js +2 -0
  296. package/dist/q2-tecton-elements/p-2436c843.entry.js.map +1 -0
  297. package/dist/q2-tecton-elements/{p-5ebb80b6.entry.js → p-391acc00.entry.js} +2 -2
  298. package/dist/q2-tecton-elements/{p-5ebb80b6.entry.js.map → p-391acc00.entry.js.map} +1 -1
  299. package/dist/q2-tecton-elements/p-3b1ea100.entry.js +2 -0
  300. package/dist/q2-tecton-elements/p-3b1ea100.entry.js.map +1 -0
  301. package/dist/q2-tecton-elements/{p-be430cd5.js → p-3c42c90f.js} +1 -1
  302. package/dist/q2-tecton-elements/p-42302f6f.js +2 -0
  303. package/dist/q2-tecton-elements/p-42302f6f.js.map +1 -0
  304. package/dist/q2-tecton-elements/{p-92955258.entry.js → p-4570ff06.entry.js} +2 -2
  305. package/dist/q2-tecton-elements/p-47868d6d.entry.js +2 -0
  306. package/dist/q2-tecton-elements/p-47868d6d.entry.js.map +1 -0
  307. package/dist/q2-tecton-elements/{p-c1e03092.entry.js → p-4a332c2a.entry.js} +2 -2
  308. package/dist/q2-tecton-elements/{p-0a705412.entry.js → p-4b81a121.entry.js} +2 -2
  309. package/dist/q2-tecton-elements/p-4bbe563f.entry.js +2 -0
  310. package/dist/q2-tecton-elements/p-4bbe563f.entry.js.map +1 -0
  311. package/dist/q2-tecton-elements/p-4f7e2c8a.entry.js +2 -0
  312. package/dist/q2-tecton-elements/p-4f7e2c8a.entry.js.map +1 -0
  313. package/dist/q2-tecton-elements/p-50bd4437.entry.js +2 -0
  314. package/dist/q2-tecton-elements/p-50bd4437.entry.js.map +1 -0
  315. package/dist/q2-tecton-elements/p-515d424b.entry.js +2 -0
  316. package/dist/q2-tecton-elements/{p-913a23f5.entry.js.map → p-515d424b.entry.js.map} +1 -1
  317. package/dist/q2-tecton-elements/{p-bb6e6290.entry.js → p-57bf9342.entry.js} +2 -2
  318. package/dist/q2-tecton-elements/{p-0fccdca2.entry.js → p-5dc5c4e2.entry.js} +2 -2
  319. package/dist/q2-tecton-elements/p-5dc5c4e2.entry.js.map +1 -0
  320. package/dist/q2-tecton-elements/{p-5b9ee831.entry.js → p-63192fac.entry.js} +2 -2
  321. package/dist/q2-tecton-elements/{p-281e7ce7.entry.js → p-685b821c.entry.js} +2 -2
  322. package/dist/q2-tecton-elements/{p-bd5e5864.entry.js → p-71180fcd.entry.js} +2 -2
  323. package/dist/q2-tecton-elements/{p-db615608.entry.js → p-7523305d.entry.js} +2 -2
  324. package/dist/q2-tecton-elements/{p-ca8dd86f.entry.js → p-7f663376.entry.js} +2 -2
  325. package/dist/q2-tecton-elements/{p-79cd6ab5.entry.js → p-8dc489e1.entry.js} +2 -2
  326. package/dist/q2-tecton-elements/p-a214077c.entry.js +2 -0
  327. package/dist/q2-tecton-elements/p-a214077c.entry.js.map +1 -0
  328. package/dist/q2-tecton-elements/{p-3bc27513.entry.js → p-aec64fcb.entry.js} +2 -2
  329. package/dist/q2-tecton-elements/p-aed969d4.entry.js +2 -0
  330. package/dist/q2-tecton-elements/p-aed969d4.entry.js.map +1 -0
  331. package/dist/q2-tecton-elements/p-b21ed2d9.entry.js +2 -0
  332. package/dist/q2-tecton-elements/p-b21ed2d9.entry.js.map +1 -0
  333. package/dist/q2-tecton-elements/{p-1954ab7d.entry.js → p-b3322f94.entry.js} +2 -2
  334. package/dist/q2-tecton-elements/p-b3322f94.entry.js.map +1 -0
  335. package/dist/q2-tecton-elements/{p-25eccf38.entry.js → p-b3d10d52.entry.js} +2 -2
  336. package/dist/q2-tecton-elements/{p-25eccf38.entry.js.map → p-b3d10d52.entry.js.map} +1 -1
  337. package/dist/q2-tecton-elements/{p-5b3f885f.entry.js → p-b7d5fd12.entry.js} +2 -2
  338. package/dist/q2-tecton-elements/p-b7d5fd12.entry.js.map +1 -0
  339. package/dist/q2-tecton-elements/{p-cb30f949.entry.js → p-bf125cdf.entry.js} +2 -2
  340. package/dist/q2-tecton-elements/p-d1a9ed3d.entry.js +2 -0
  341. package/dist/q2-tecton-elements/p-d1a9ed3d.entry.js.map +1 -0
  342. package/dist/q2-tecton-elements/{p-73a3c437.entry.js → p-d635e39f.entry.js} +2 -2
  343. package/dist/q2-tecton-elements/{p-a5b16c01.entry.js → p-d9e19f70.entry.js} +2 -2
  344. package/dist/q2-tecton-elements/p-d9e19f70.entry.js.map +1 -0
  345. package/dist/q2-tecton-elements/{p-a89814b8.entry.js → p-dc057a9c.entry.js} +2 -2
  346. package/dist/q2-tecton-elements/p-debd5249.entry.js +2 -0
  347. package/dist/q2-tecton-elements/p-debd5249.entry.js.map +1 -0
  348. package/dist/q2-tecton-elements/p-df297a77.entry.js +2 -0
  349. package/dist/q2-tecton-elements/p-df297a77.entry.js.map +1 -0
  350. package/dist/q2-tecton-elements/{p-6afb4d46.entry.js → p-e762526f.entry.js} +2 -2
  351. package/dist/q2-tecton-elements/{p-698f82c5.entry.js → p-f1265647.entry.js} +2 -2
  352. package/dist/q2-tecton-elements/{p-954d49de.entry.js → p-f162c670.entry.js} +2 -2
  353. package/dist/q2-tecton-elements/p-f418967b.entry.js +2 -0
  354. package/dist/q2-tecton-elements/p-f418967b.entry.js.map +1 -0
  355. package/dist/q2-tecton-elements/{p-fddebc47.entry.js → p-f4d77672.entry.js} +2 -2
  356. package/dist/q2-tecton-elements/p-fcc84527.entry.js +2 -0
  357. package/dist/q2-tecton-elements/p-fcc84527.entry.js.map +1 -0
  358. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  359. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  360. package/dist/test/elements/q2-badge-test.e2e.js +11 -3
  361. package/dist/test/elements/q2-badge-test.e2e.js.map +1 -1
  362. package/dist/test/elements/q2-btn-test.e2e.js +25 -25
  363. package/dist/test/elements/q2-btn-test.e2e.js.map +1 -1
  364. package/dist/test/elements/q2-calendar-test.e2e.js +3 -3
  365. package/dist/test/elements/q2-calendar-test.e2e.js.map +1 -1
  366. package/dist/test/elements/q2-carousel-pane-test.e2e.js +16 -86
  367. package/dist/test/elements/q2-carousel-pane-test.e2e.js.map +1 -1
  368. package/dist/test/elements/q2-carousel-pane-test.spec.js +113 -0
  369. package/dist/test/elements/q2-carousel-pane-test.spec.js.map +1 -0
  370. package/dist/test/elements/q2-carousel-test.e2e.js +27 -1
  371. package/dist/test/elements/q2-carousel-test.e2e.js.map +1 -1
  372. package/dist/test/elements/q2-chart-donut-test.e2e.js +64 -30
  373. package/dist/test/elements/q2-chart-donut-test.e2e.js.map +1 -1
  374. package/dist/test/elements/q2-currency-test.e2e.js +7 -7
  375. package/dist/test/elements/q2-currency-test.e2e.js.map +1 -1
  376. package/dist/test/elements/q2-detail/q2-detail-test.e2e.js +1 -1
  377. package/dist/test/elements/q2-detail/q2-detail-test.e2e.js.map +1 -1
  378. package/dist/test/elements/q2-detail/q2-item-test.e2e.js +223 -0
  379. package/dist/test/elements/q2-detail/q2-item-test.e2e.js.map +1 -0
  380. package/dist/test/elements/q2-detail/q2-list-test.e2e.js +92 -0
  381. package/dist/test/elements/q2-detail/q2-list-test.e2e.js.map +1 -0
  382. package/dist/test/elements/q2-icon-test.e2e.js +17 -95
  383. package/dist/test/elements/q2-icon-test.e2e.js.map +1 -1
  384. package/dist/test/elements/q2-input-test.e2e.js +140 -7
  385. package/dist/test/elements/q2-input-test.e2e.js.map +1 -1
  386. package/dist/test/elements/q2-pill-test.e2e.js +23 -0
  387. package/dist/test/elements/q2-pill-test.e2e.js.map +1 -1
  388. package/dist/test/elements/q2-relative-time-test.e2e.js +50 -48
  389. package/dist/test/elements/q2-relative-time-test.e2e.js.map +1 -1
  390. package/dist/test/elements/q2-textarea-test.e2e.js +4 -8
  391. package/dist/test/elements/q2-textarea-test.e2e.js.map +1 -1
  392. package/dist/test/helpers.js +18 -16
  393. package/dist/test/helpers.js.map +1 -1
  394. package/dist/test/utils/index.spec.js +18 -0
  395. package/dist/test/utils/index.spec.js.map +1 -0
  396. package/dist/types/components/q2-avatar/q2-avatar.d.ts +0 -1
  397. package/dist/types/components/q2-badge/q2-badge.d.ts +1 -0
  398. package/dist/types/components/q2-btn/q2-btn.d.ts +1 -0
  399. package/dist/types/components/q2-carousel/q2-carousel.d.ts +3 -0
  400. package/dist/types/components/q2-carousel-pane/q2-carousel-pane.d.ts +5 -0
  401. package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +13 -12
  402. package/dist/types/components/q2-icon/q2-icon.d.ts +0 -5
  403. package/dist/types/components/q2-input/q2-input.d.ts +8 -0
  404. package/dist/types/components/q2-item/q2-item.d.ts +21 -0
  405. package/dist/types/components/q2-list/q2-list.d.ts +20 -0
  406. package/dist/types/components.d.ts +82 -14
  407. package/dist/types/global.d.ts +1 -1
  408. package/dist/types/utils/index.d.ts +6 -0
  409. package/dist/types/workspace/workspace/{tecton-production_release_1.44.x → _Gitlab_tecton-production_master}/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +1 -1
  410. package/package.json +3 -3
  411. package/dist/cjs/icons-04e4f595.js +0 -2900
  412. package/dist/cjs/icons-04e4f595.js.map +0 -1
  413. package/dist/cjs/index-1deac3ee.js.map +0 -1
  414. package/dist/collection/components/q2-icon/icons.js +0 -1184
  415. package/dist/collection/components/q2-icon/icons.js.map +0 -1
  416. package/dist/esm/icons-8f4c3b69.js +0 -2898
  417. package/dist/esm/icons-8f4c3b69.js.map +0 -1
  418. package/dist/esm/index-12c2a320.js.map +0 -1
  419. package/dist/q2-tecton-elements/p-043bb5c0.entry.js +0 -2
  420. package/dist/q2-tecton-elements/p-043bb5c0.entry.js.map +0 -1
  421. package/dist/q2-tecton-elements/p-081b779e.entry.js +0 -2
  422. package/dist/q2-tecton-elements/p-081b779e.entry.js.map +0 -1
  423. package/dist/q2-tecton-elements/p-0e2e7b2d.entry.js +0 -2
  424. package/dist/q2-tecton-elements/p-0e2e7b2d.entry.js.map +0 -1
  425. package/dist/q2-tecton-elements/p-0fccdca2.entry.js.map +0 -1
  426. package/dist/q2-tecton-elements/p-1954ab7d.entry.js.map +0 -1
  427. package/dist/q2-tecton-elements/p-55bc5c9b.entry.js +0 -2
  428. package/dist/q2-tecton-elements/p-55bc5c9b.entry.js.map +0 -1
  429. package/dist/q2-tecton-elements/p-5b3f885f.entry.js.map +0 -1
  430. package/dist/q2-tecton-elements/p-5c46acb8.js +0 -2
  431. package/dist/q2-tecton-elements/p-5c46acb8.js.map +0 -1
  432. package/dist/q2-tecton-elements/p-5dd0eede.entry.js +0 -2
  433. package/dist/q2-tecton-elements/p-5dd0eede.entry.js.map +0 -1
  434. package/dist/q2-tecton-elements/p-6479c450.entry.js +0 -2
  435. package/dist/q2-tecton-elements/p-6479c450.entry.js.map +0 -1
  436. package/dist/q2-tecton-elements/p-7c5d43cf.entry.js +0 -2
  437. package/dist/q2-tecton-elements/p-7c5d43cf.entry.js.map +0 -1
  438. package/dist/q2-tecton-elements/p-7ff4c446.entry.js +0 -2
  439. package/dist/q2-tecton-elements/p-7ff4c446.entry.js.map +0 -1
  440. package/dist/q2-tecton-elements/p-87d72e3e.entry.js +0 -2
  441. package/dist/q2-tecton-elements/p-87d72e3e.entry.js.map +0 -1
  442. package/dist/q2-tecton-elements/p-8dc573f5.entry.js +0 -2
  443. package/dist/q2-tecton-elements/p-8dc573f5.entry.js.map +0 -1
  444. package/dist/q2-tecton-elements/p-913a23f5.entry.js +0 -2
  445. package/dist/q2-tecton-elements/p-a5b16c01.entry.js.map +0 -1
  446. package/dist/q2-tecton-elements/p-cbbc7659.entry.js.map +0 -1
  447. package/dist/q2-tecton-elements/p-d7e608f7.entry.js +0 -2
  448. package/dist/q2-tecton-elements/p-d7e608f7.entry.js.map +0 -1
  449. package/dist/q2-tecton-elements/p-dce084f9.entry.js +0 -2
  450. package/dist/q2-tecton-elements/p-dce084f9.entry.js.map +0 -1
  451. package/dist/q2-tecton-elements/p-ecce27a0.entry.js +0 -2
  452. package/dist/q2-tecton-elements/p-ecce27a0.entry.js.map +0 -1
  453. package/dist/q2-tecton-elements/p-f6c1f69b.js +0 -2
  454. package/dist/q2-tecton-elements/p-f6c1f69b.js.map +0 -1
  455. package/dist/q2-tecton-elements/p-f8c7cad7.entry.js +0 -2
  456. package/dist/q2-tecton-elements/p-f8c7cad7.entry.js.map +0 -1
  457. package/dist/types/components/q2-icon/icons.d.ts +0 -3
  458. /package/dist/q2-tecton-elements/{p-86cf292d.entry.js.map → p-2132da06.entry.js.map} +0 -0
  459. /package/dist/q2-tecton-elements/{p-1fac9c85.entry.js.map → p-22661533.entry.js.map} +0 -0
  460. /package/dist/q2-tecton-elements/{p-be430cd5.js.map → p-3c42c90f.js.map} +0 -0
  461. /package/dist/q2-tecton-elements/{p-92955258.entry.js.map → p-4570ff06.entry.js.map} +0 -0
  462. /package/dist/q2-tecton-elements/{p-c1e03092.entry.js.map → p-4a332c2a.entry.js.map} +0 -0
  463. /package/dist/q2-tecton-elements/{p-0a705412.entry.js.map → p-4b81a121.entry.js.map} +0 -0
  464. /package/dist/q2-tecton-elements/{p-bb6e6290.entry.js.map → p-57bf9342.entry.js.map} +0 -0
  465. /package/dist/q2-tecton-elements/{p-5b9ee831.entry.js.map → p-63192fac.entry.js.map} +0 -0
  466. /package/dist/q2-tecton-elements/{p-281e7ce7.entry.js.map → p-685b821c.entry.js.map} +0 -0
  467. /package/dist/q2-tecton-elements/{p-bd5e5864.entry.js.map → p-71180fcd.entry.js.map} +0 -0
  468. /package/dist/q2-tecton-elements/{p-db615608.entry.js.map → p-7523305d.entry.js.map} +0 -0
  469. /package/dist/q2-tecton-elements/{p-ca8dd86f.entry.js.map → p-7f663376.entry.js.map} +0 -0
  470. /package/dist/q2-tecton-elements/{p-79cd6ab5.entry.js.map → p-8dc489e1.entry.js.map} +0 -0
  471. /package/dist/q2-tecton-elements/{p-3bc27513.entry.js.map → p-aec64fcb.entry.js.map} +0 -0
  472. /package/dist/q2-tecton-elements/{p-cb30f949.entry.js.map → p-bf125cdf.entry.js.map} +0 -0
  473. /package/dist/q2-tecton-elements/{p-73a3c437.entry.js.map → p-d635e39f.entry.js.map} +0 -0
  474. /package/dist/q2-tecton-elements/{p-a89814b8.entry.js.map → p-dc057a9c.entry.js.map} +0 -0
  475. /package/dist/q2-tecton-elements/{p-6afb4d46.entry.js.map → p-e762526f.entry.js.map} +0 -0
  476. /package/dist/q2-tecton-elements/{p-698f82c5.entry.js.map → p-f1265647.entry.js.map} +0 -0
  477. /package/dist/q2-tecton-elements/{p-954d49de.entry.js.map → p-f162c670.entry.js.map} +0 -0
  478. /package/dist/q2-tecton-elements/{p-fddebc47.entry.js.map → p-f4d77672.entry.js.map} +0 -0
  479. /package/dist/types/workspace/workspace/{tecton-production_release_1.44.x → _Gitlab_tecton-production_master}/packages/q2-tecton-elements/.stencil/test/elements/q2-detail/slot-component.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"file":"index-12c2a320.js","mappings":"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","names":[],"sources":["src/utils/index.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { Q2Btn } from 'src/components/q2-btn/q2-btn';\nimport { Q2Calendar } from 'src/components/q2-calendar/q2-calendar';\nimport { Q2Carousel } from 'src/components/q2-carousel/q2-carousel';\nimport { Q2Checkbox } from 'src/components/q2-checkbox/q2-checkbox';\nimport { Q2CheckboxGroup } from 'src/components/q2-checkbox-group/q2-checkbox-group';\nimport { Q2RadioGroup } from 'src/components/q2-radio-group/q2-radio-group';\nimport { Q2Dropdown } from 'src/components/q2-dropdown/q2-dropdown';\nimport { Q2DropdownItem } from 'src/components/q2-dropdown-item/q2-dropdown-item';\nimport { Q2EditableField } from 'src/components/q2-editable-field/q2-editable-field';\nimport { Q2Input } from 'src/components/q2-input/q2-input';\nimport { Q2Loading } from 'src/components/q2-loading/q2-loading';\nimport { Q2Radio } from 'src/components/q2-radio/q2-radio';\nimport { Q2Select } from 'src/components/q2-select/q2-select';\nimport { FormFieldTypes, IDict } from 'src/util';\n\nexport function isMobile(): boolean {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(\n navigator.userAgent\n );\n}\n\nexport function isHostLosingFocus(event: FocusEvent, hostElement: HTMLElement) {\n const type = event.type;\n const focusInTypes = ['focusin', 'focus'];\n const isFocusIn = focusInTypes.includes(type);\n\n // on focusin: `target` is element losing focus, `relatedTarget` is element gaining focus\n // on focusout: `target` is element gaining focus, `relatedTarget` is element losing focus\n const elementGainingFocus = isFocusIn ? event.target : event.relatedTarget;\n\n const isElementNestedInHostElement = (element: HTMLElement) => {\n if (element === hostElement) return true;\n if (element.parentElement) {\n return isElementNestedInHostElement(element.parentElement);\n }\n return false;\n };\n\n if (!(elementGainingFocus instanceof HTMLElement)) return true;\n return !isElementNestedInHostElement(elementGainingFocus);\n}\n\nexport function isRelatedTargetWithinHost(event: FocusEvent, element: HTMLElement) {\n return event.relatedTarget !== element && !element.contains(event.relatedTarget as Node);\n}\n\nexport function isEventFromElement(event: Event, element: HTMLElement): boolean {\n return event.composedPath?.()[0] === element;\n}\n\nexport function overrideFocus(hostElement: HTMLElement) {\n hostElement.focus = () => hostElement?.dispatchEvent(new FocusEvent('focus', { bubbles: false }));\n}\n\nexport function isFirefox() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('firefox');\n}\n\nexport function isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n}\n\nexport function isSafari() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('safari') && !userAgent.includes('chrome');\n}\n\nlet guid: number = 1000;\nexport function createGuid(): number {\n return guid++;\n}\n\nexport function nextPaint(fn: (value?: unknown) => void) {\n requestAnimationFrame(() => {\n requestAnimationFrame(fn);\n });\n}\n\nexport function isVisible(element: HTMLElement) {\n return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\n}\n\nexport function waitForNextPaint() {\n return new Promise(resolve => nextPaint(resolve));\n}\n\nexport function capitalize(value: string) {\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n\nexport function pick(props: string[]): (obj: object) => object {\n return obj => {\n return props.reduce((memo, prop) => {\n return {\n ...memo,\n [prop]: obj[prop],\n };\n }, {});\n };\n}\n\nexport function loc(key: string, subs?: IDict<any> | string[]) {\n if (!key) return '';\n if (window.Tecton?.noStrings === true) {\n return key;\n }\n return window?.TectonElements?.loc(key, subs) ?? key;\n}\n\nexport function labelDOM(target: FormFieldTypes | Q2RadioGroup | Q2CheckboxGroup) {\n const { label, hideLabel, optional, readonly } = target;\n const labelClasses: string[] = ['input-label'];\n let helpText = '';\n\n let shouldHideLabel = hideLabel;\n if (!shouldHideLabel) {\n const labelSlot = target.hostElement.shadowRoot.querySelector<HTMLSlotElement>('slot[name=\"label\"]');\n const hasSlotContent = labelSlot?.assignedNodes().length > 0;\n const hasLabel = !!label;\n\n shouldHideLabel = hasLabel || hasSlotContent ? false : true;\n }\n\n if (shouldHideLabel) labelClasses.push('sr');\n if (optional) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.optional')}</span>;\n }\n if (readonly) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.readonly')}</span>;\n labelClasses.push('readonly-field');\n }\n return (\n <label\n htmlFor={target.inputId}\n class={labelClasses.join(' ')}\n >\n <slot name=\"label\">\n {label ? loc(label) : undefined}\n {helpText}\n </slot>\n </label>\n );\n}\n\nexport function hasSlotContent(target: HTMLElement, slotName: string) {\n return target.querySelector(`[slot=\"${slotName}\"]`) !== null;\n}\n\nexport function handleAriaLabel(\n target:\n | Q2Input\n | Q2Select\n | Q2Radio\n | Q2Checkbox\n | Q2EditableField\n | Q2Dropdown\n | Q2DropdownItem\n | Q2Loading\n | Q2Carousel\n | Q2Calendar\n | Q2Btn\n) {\n const { ariaLabel } = target;\n if (!ariaLabel) return;\n\n // If empty ariaLabel prop is set to primitive symbol by framework wrapper, set ariaLabel to undefined and return\n const FW_WRAPPERS_EMPTY_PROP = Symbol().toString();\n if (ariaLabel === FW_WRAPPERS_EMPTY_PROP) {\n target.ariaLabel = undefined;\n return;\n }\n\n // If ariaLabel is set, set hideLabel to true and set label to ariaLabel\n if ('hideLabel' in target) target.hideLabel = true;\n target.label = loc(ariaLabel);\n target.ariaLabel = undefined;\n}\n\n/**\n * Handles when a prop has been renamed on a component without introducing a breaking change.\n */\nexport function handleRenamedProp(target: object, oldProp: string, newProp: string, removeOldProp?: boolean) {\n if (typeof target[oldProp] === 'undefined') return;\n\n // If old prop has value, aka set in component, call handleDeprecationWarning()\n if (target[oldProp]) {\n handleDeprecationWarning(target, oldProp, 'prop');\n }\n\n target[newProp] = target[oldProp];\n\n if (removeOldProp) {\n delete target[oldProp];\n }\n}\n\nexport function handleDeprecationWarning(\n target: object,\n deprecatedItemName: string,\n deprecatedItemType: 'function' | 'prop' | 'method' | 'event'\n) {\n if (window.location.hostname === 'localhost' || window.location.host === 'stack.q2developer.com') {\n if (target[deprecatedItemName] === 'undefined') return;\n\n const componentName = target.constructor.name.toLowerCase().slice(2);\n\n switch (deprecatedItemType) {\n case 'prop':\n if (deprecatedItemName === 'size' && componentName === 'btn') {\n console.warn(\n `The property of size in q2-btn should not be typeof number, or typeof string containing a number. This functionality will be deprecated in an upcoming release. Instead, please use the value 'undefined', or typeof string with any of the following values: \"small\" / \"medium\" / \"large\" `\n );\n } else {\n console.warn(\n `The property ${deprecatedItemName} in q2-${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n }\n break;\n\n case 'function':\n console.warn(\n `The function ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'method':\n console.warn(\n `The method ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'event':\n console.warn(\n `The event ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n default:\n console.error(\n `handleDeprecationWarning --> No type found for desired deprecation: ${deprecatedItemName} in q2-${componentName}: deprecatedItemType = ${deprecatedItemName}`\n );\n }\n }\n}\n\nexport function messagesDOM(target: FormFieldTypes) {\n const type = target.hasError ? 'danger' : 'info';\n\n return (\n <div class=\"messages-container\">\n <q2-message\n appearance=\"minimal\"\n description\n type={type}\n test-id=\"message\"\n >\n <ul id={target.inputDescribedBy}>\n {target.messages.map(message => (\n <li test-id=\"messageListItem\">{loc(message)}</li>\n ))}\n </ul>\n </q2-message>\n </div>\n );\n}\n\nexport function setMessageHeight(target: FormFieldTypes) {\n const messageContainer = (target.hostElement.shadowRoot as ShadowRoot).querySelector<HTMLDivElement>(\n '.messages-container'\n );\n const q2Message = messageContainer.querySelector('q2-message');\n nextPaint(() => {\n const height = target.showMessages && target.hasFocus ? q2Message.getBoundingClientRect().height : 0;\n\n if (messageContainer.style.getPropertyValue('height') === `${height}px`) return;\n\n if (height === 0) {\n q2Message.classList.add('invisible');\n messageContainer.style.removeProperty('height');\n } else {\n q2Message.classList.remove('invisible');\n messageContainer.style.setProperty('height', `${height}px`);\n }\n });\n}\n\nexport const resizeIframe = () => {\n return window.TectonElements?.resizeIframe?.();\n};\n\n// Handling color attribute (deprecated)\nexport const handleColor = (target: Q2Btn) => {\n if (!target.intent && ['primary', 'secondary'].includes(target.color)) {\n target.intent = `workflow-${target.color}` as HTMLQ2BtnElement['intent'];\n target.color = undefined;\n }\n};\n"],"version":3}
@@ -1,2 +0,0 @@
1
- import{r as t,c as a,h as i,F as e,H as o,g as r}from"./p-a5f18e27.js";import{o as n,i as s,l as c}from"./p-5c46acb8.js";import{s as p,a as h}from"./p-780a1d0e.js";const l="*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:inline-block;position:relative;line-height:0}:host(:not(:last-child)){margin-inline-end:var(--tct-tag-margin, var(--t-tag-margin, var(--app-scale-2x, 10px)))}.tag-wrapper{--comp-tag-btn-size:var(--tct-tag-btn-size, var(--t-tag-btn-size, var(--app-scale-6x)));--comp-tag-background:var(--tct-tag-background, var(--t-tag-background, var(--t-gray-13, #e6e6e6)));--comp-tag-color:var(--tct-tag-color, var(--t-tag-color, var(--t-gray-3, #262626)));background:var(--comp-tag-background);color:var(--comp-tag-color);border-radius:var(--tct-tag-border-radius, var(--t-tag-border-radius, var(--app-border-radius-1, 3px)));position:relative}:host([theme=primary]) .tag-wrapper{--comp-tag-background:var(--tct-tag-primary-background, var(--t-primary, #61c4ff));--comp-tag-color:var(--tct-tag-primary-font-color, var(--t-primary-text, #ffffff))}:host([theme=secondary]) .tag-wrapper{--comp-tag-background:var(--tct-tag-secondary-background, var(--t-secondary, #d9e1e6));--comp-tag-color:var(--tct-tag-secondary-font-color, var(--t-secondary-text, #000000))}:host([theme=tertiary]) .tag-wrapper{--comp-tag-background:var(--tct-tag-tertiary-background, var(--t-tertiary, #f4fafe));--comp-tag-color:var(--tct-tag-tertiary-font-color, var(--t-tertiary-text, #000000))}.tag{display:flex;width:max-content;height:var(--tct-tag-height, var(--t-tag-height, var(--app-scale-6x, 30px)));line-height:var(--tct-tag-height, var(--t-tag-height, var(--app-scale-6x, 30px)));padding-inline:var(--tct-tag-padding-inline, var(--t-tag-padding-inline, var(--app-scale-3x, 15px)))}.tag.has-options{padding-right:6px}.btn-wrapper{--comp-tag-clickable-size:var(--tct-tag-clickable-size, var(--t-tag-clickable-size, 44px));--comp-tag-btn-offset:calc(calc(calc(var(--comp-tag-clickable-size) - var(--comp-tag-btn-size)) / 2) * -1);--comp-tag-background:var(--tct-tag-background, var(--t-tag-background, var(--t-gray-13, #e6e6e6)));height:var(--comp-tag-clickable-size);display:flex;align-items:center;justify-content:center;position:relative;right:var(--comp-tag-btn-offset);top:var(--comp-tag-btn-offset);cursor:pointer}button{height:var(--comp-tag-btn-size);stroke:var(--comp-tag-color);--tct-icon-stroke-primary:var(--comp-tag-color);cursor:pointer;border:0;background:transparent;display:flex;align-items:center;justify-content:center;padding:0;padding-right:6px;--tct-icon-size:18px}";const d=l;const g=class{constructor(i){t(this,i);this.click=a(this,"click",7);var e;this.determineOptionCount=()=>{const t=this.hostElement.querySelectorAll("q2-option").length;this.optionCount=t};this.onClickElsewhere=t=>{const a=t.target;if(a.localName==="click-elsewhere"){t.stopPropagation();const{popoverElement:a}=this;if(!a)return;a.open=false}};this.handleChange=t=>{t.stopPropagation();if(!this.optionCount)return;const{value:a}=t.detail;this.click.emit({value:a})};this.handleClick=async t=>{t.stopPropagation();this.popoverElement.controlElement=this.dropdownBtn;if(p(this)){const{value:a}=await h(this,t);this.click.emit({value:a})}else{await this.popoverElement.toggle()}};this.handleKeydown=async t=>{const a=t.metaKey||t.ctrlKey||t.key==="Tab";if(a)return;t.preventDefault();this.popoverElement.controlElement=this.dropdownBtn;if(p(this,t)){const{value:a}=await h(this,t);this.click.emit({value:a})}else{this.optionList.handleExternalKeydown(t)}};this.handleButtonFocusout=async t=>{var a;const i=t.relatedTarget;if((a=(i===null||i===void 0?void 0:i.tagName)==="Q2-OPTION")!==null&&a!==void 0?a:false)return;this.open=false};this.handleWrapperClick=()=>{this.dropdownBtn.focus();this.dropdownBtn.click()};this.hoist=!!((e=window.Tecton)===null||e===void 0?void 0:e.useActionSheets);this.label=undefined;this.open=undefined;this.optionListLabel="options";this.popoverDirection=undefined;this.popoverAlignment="right";this.popoverMinHeight=150;this.theme=undefined;this.optionCount=undefined}componentWillLoad(){const t=new MutationObserver(this.determineOptionCount);t.observe(this.hostElement,{childList:true,attributes:true});this.mutationObserver=t}componentDidLoad(){n(this.hostElement)}disconnectedCallback(){this.mutationObserver.disconnect();this.mutationObserver=null}delegateFocus(t){if(!s(t,this.hostElement))return;if(!this.optionCount)return;this.dropdownBtn.focus()}popoverStateHandler({detail:{open:t}}){if(this.open!==t)this.open=t;if(t)return;this.optionList.setActiveElement(null)}generateHiddenElement(){return i("div",{id:"option-description",class:"sr","aria-hidden":"true"},c("tecton.element.optionList.optionCount",[this.optionCount]))}render(){const{optionCount:t,open:a}=this;const r=["tag"];if(t)r.push("has-options");return i(o,{key:"7aec0f4ed14508c1ca433ef3237bd14a169903f8",role:"listitem"},i("click-elsewhere",{key:"2eea98a5c7e62347198d69e2ee0501fbd9765c96",onChange:this.onClickElsewhere},this.optionCount?i(e,null,i("div",{class:"btn-wrapper",onClick:this.handleWrapperClick},i("button",{class:"tag-wrapper",ref:t=>this.dropdownBtn=t,"test-id":"btn-control",type:"button",role:"combobox",onClick:this.handleClick,onKeyDown:this.handleKeydown,onFocusout:this.handleButtonFocusout,"aria-controls":"option-list","aria-expanded":a?"true":"false","aria-describedby":"option-description"},i("div",{class:r.join(" ")},this.label),i("q2-icon",{type:"options"}))),this.generateHiddenElement()):i("div",{class:"tag-wrapper",onClick:t=>t.stopPropagation()},i("div",{class:r.join(" ")},this.label)),this.optionCount>0&&i("q2-popover",{key:"a292fdd778159f01109237d4cecdc5fa314ba24b",ref:t=>this.popoverElement=t,controlElement:this.dropdownBtn,open:this.open,minHeight:this.popoverMinHeight,direction:this.popoverDirection,align:this.popoverAlignment},i("q2-option-list",{key:"aac94c76c0de7f9096a59adb0df8d76d77662648",id:"option-list",ref:t=>this.optionList=t,onChange:this.handleChange,type:"menu",align:"right",label:c("tecton.element.optionList.label",[this.optionListLabel]),"no-select":true},i("slot",{key:"359cd7855af9a6c4336a6a72b47c4c1cd5049d3d"})))))}get hostElement(){return r(this)}};g.style=d;export{g as q2_tag};
2
- //# sourceMappingURL=p-043bb5c0.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["q2TagCss","Q2TagStyle0","Q2Tag","this","determineOptionCount","numberOfOptions","hostElement","querySelectorAll","length","optionCount","onClickElsewhere","event","target","localName","stopPropagation","popoverElement","open","handleChange","value","detail","click","emit","handleClick","async","controlElement","dropdownBtn","shouldShowActionSheet","showActionSheetList","toggle","handleKeydown","isTabMetaOrCtrl","metaKey","ctrlKey","key","preventDefault","optionList","handleExternalKeydown","handleButtonFocusout","relatedTarget","_a","tagName","handleWrapperClick","focus","window","Tecton","useActionSheets","componentWillLoad","observer","MutationObserver","observe","childList","attributes","mutationObserver","componentDidLoad","overrideFocus","disconnectedCallback","disconnect","delegateFocus","isEventFromElement","popoverStateHandler","setActiveElement","generateHiddenElement","h","id","class","loc","render","wrapperClassNames","push","Host","role","onChange","Fragment","onClick","ref","el","type","onKeyDown","onFocusout","join","label","e","minHeight","popoverMinHeight","direction","popoverDirection","align","popoverAlignment","optionListLabel"],"sources":["src/components/q2-tag/q2-tag.scss?tag=q2-tag&encapsulation=shadow","src/components/q2-tag/q2-tag.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n position: relative;\n line-height: 0;\n}\n\n:host(:not(:last-child)) {\n margin-inline-end: var-list(var-prefixer(tag-margin), --app-scale-2x, 10px);\n}\n\n.tag-wrapper {\n --comp-tag-btn-size: #{var-list(var-prefixer(tag-btn-size), --app-scale-6x)};\n --comp-tag-background: #{var-list(var-prefixer(tag-background), --t-gray-13, #e6e6e6)};\n --comp-tag-color: #{var-list(var-prefixer(tag-color), --t-gray-3, #262626)};\n background: var(--comp-tag-background);\n color: var(--comp-tag-color);\n border-radius: var-list(var-prefixer(tag-border-radius), --app-border-radius-1, 3px);\n position: relative;\n\n :host([theme='primary']) & {\n --comp-tag-background: #{var-list(--tct-tag-primary-background, --t-primary, #61c4ff)};\n --comp-tag-color: #{var-list(--tct-tag-primary-font-color, --t-primary-text, #ffffff)};\n }\n\n :host([theme='secondary']) & {\n --comp-tag-background: #{var-list(--tct-tag-secondary-background, --t-secondary, #d9e1e6)};\n --comp-tag-color: #{var-list(--tct-tag-secondary-font-color, --t-secondary-text, #000000)};\n }\n\n :host([theme='tertiary']) & {\n --comp-tag-background: #{var-list(--tct-tag-tertiary-background, --t-tertiary, #f4fafe)};\n --comp-tag-color: #{var-list(--tct-tag-tertiary-font-color, --t-tertiary-text, #000000)};\n }\n}\n\n.tag {\n display: flex;\n width: max-content;\n height: var-list(var-prefixer(tag-height), --app-scale-6x, 30px);\n line-height: var-list(var-prefixer(tag-height), --app-scale-6x, 30px);\n padding-inline: var-list(var-prefixer(tag-padding-inline), --app-scale-3x, 15px);\n}\n\n.tag.has-options {\n padding-right: 6px;\n}\n\n.btn-wrapper {\n --comp-tag-clickable-size: #{var-list(var-prefixer(tag-clickable-size), 44px)};\n --comp-tag-btn-offset: calc(calc(calc(var(--comp-tag-clickable-size) - var(--comp-tag-btn-size)) / 2) * -1);\n --comp-tag-background: #{var-list(var-prefixer(tag-background), --t-gray-13, #e6e6e6)};\n height: var(--comp-tag-clickable-size);\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n right: var(--comp-tag-btn-offset);\n top: var(--comp-tag-btn-offset);\n cursor: pointer;\n}\n\nbutton {\n height: var(--comp-tag-btn-size);\n stroke: var(--comp-tag-color);\n --tct-icon-stroke-primary: var(--comp-tag-color);\n cursor: pointer;\n border: 0;\n background: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n padding-right: 6px;\n --tct-icon-size: 18px;\n}\n","import {\n Component,\n State,\n Prop,\n h,\n ComponentInterface,\n Host,\n Listen,\n Element,\n EventEmitter,\n Event,\n Fragment,\n} from '@stencil/core';\nimport { isEventFromElement, loc, overrideFocus } from 'src/utils';\nimport { shouldShowActionSheet, showActionSheetList } from 'src/utils/action-sheet';\n\n@Component({ tag: 'q2-tag', shadow: true, styleUrl: 'q2-tag.scss' })\nexport class Q2Tag implements ComponentInterface {\n /**\n * Instructs the component to use the action sheet workflow for displaying its options.\n *\n * For more information, see [Action Sheets](https://tecton.q2developer.com/guides/action-sheets/).\n */\n @Prop() hoist: boolean = !!window.Tecton?.useActionSheets;\n\n /**\n * The text that populates the label.\n * @localizable\n */\n @Prop({ reflect: true }) label: string;\n\n /** Determine whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true }) open: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop() optionListLabel: string = 'options';\n\n /**\n * Force the direction of the popover dropdown when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop() popoverDirection: 'up' | 'down';\n\n /** Aligns the popover dropdown to the left or right side of the input field. */\n @Prop({ mutable: true }) popoverAlignment: 'left' | 'right' = 'right';\n\n /** @deprecated */\n @Prop() popoverMinHeight: number = 150;\n\n /** The color of the element. */\n @Prop({ reflect: true }) theme: 'primary' | 'secondary' | 'tertiary';\n\n @State() optionCount: number;\n\n @Element() hostElement: HTMLElement;\n\n /**\n * Emitted when a provided option is clicked.\n *\n * Requires at least one option to be provided.\n */\n @Event() click: EventEmitter<{ value: string }>;\n dropdownBtn: HTMLButtonElement;\n popoverElement: HTMLQ2PopoverElement;\n optionList: HTMLQ2OptionListElement;\n mutationObserver: MutationObserver;\n\n /// LifeCycle Hooks ///\n componentWillLoad() {\n const observer = new MutationObserver(this.determineOptionCount);\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n }\n\n disconnectedCallback() {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n\n /// Getters ///\n\n /// Helpers\n determineOptionCount = () => {\n const numberOfOptions = this.hostElement.querySelectorAll('q2-option').length;\n this.optionCount = numberOfOptions;\n };\n\n /// Listeners ///\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n if (!this.optionCount) return;\n this.dropdownBtn.focus();\n }\n\n @Listen('popoverStateChanged')\n popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n if (open) return;\n this.optionList.setActiveElement(null);\n }\n\n /// Event Handlers ///\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n const { popoverElement } = this;\n if (!popoverElement) return;\n popoverElement.open = false;\n }\n };\n\n handleChange = event => {\n event.stopPropagation();\n if (!this.optionCount) return;\n const { value } = event.detail;\n\n this.click.emit({ value });\n };\n\n handleClick = async (event: MouseEvent) => {\n event.stopPropagation();\n this.popoverElement.controlElement = this.dropdownBtn;\n if (shouldShowActionSheet(this)) {\n const { value } = await showActionSheetList(this, event);\n this.click.emit({ value });\n } else {\n await this.popoverElement.toggle();\n }\n };\n\n handleKeydown = async (event: KeyboardEvent) => {\n const isTabMetaOrCtrl = event.metaKey || event.ctrlKey || event.key === 'Tab';\n if (isTabMetaOrCtrl) return;\n\n event.preventDefault();\n this.popoverElement.controlElement = this.dropdownBtn;\n if (shouldShowActionSheet(this, event)) {\n const { value } = await showActionSheetList(this, event);\n this.click.emit({ value });\n } else {\n this.optionList.handleExternalKeydown(event);\n }\n };\n\n handleButtonFocusout = async (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as unknown as HTMLElement;\n if (relatedTarget?.tagName === 'Q2-OPTION' ?? false) return;\n this.open = false;\n };\n\n handleWrapperClick = () => {\n this.dropdownBtn.focus();\n this.dropdownBtn.click();\n };\n\n /// DOM ///\n generateHiddenElement() {\n return (\n <div\n id=\"option-description\"\n class=\"sr\"\n aria-hidden=\"true\"\n >\n {loc('tecton.element.optionList.optionCount', [this.optionCount])}\n </div>\n );\n }\n\n render() {\n const { optionCount, open } = this;\n const wrapperClassNames = ['tag'];\n if (optionCount) wrapperClassNames.push('has-options');\n\n return (\n <Host role=\"listitem\">\n <click-elsewhere onChange={this.onClickElsewhere}>\n {this.optionCount ? (\n <Fragment>\n <div\n class=\"btn-wrapper\"\n onClick={this.handleWrapperClick}\n >\n <button\n class=\"tag-wrapper\"\n ref={el => (this.dropdownBtn = el)}\n test-id=\"btn-control\"\n type=\"button\"\n role=\"combobox\"\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n onFocusout={this.handleButtonFocusout}\n aria-controls=\"option-list\"\n aria-expanded={open ? 'true' : 'false'}\n aria-describedby=\"option-description\"\n >\n <div class={wrapperClassNames.join(' ')}>{this.label}</div>\n <q2-icon type=\"options\"></q2-icon>\n </button>\n </div>\n {this.generateHiddenElement()}\n </Fragment>\n ) : (\n <div\n class=\"tag-wrapper\"\n onClick={e => e.stopPropagation()}\n >\n <div class={wrapperClassNames.join(' ')}>{this.label}</div>\n </div>\n )}\n\n {this.optionCount > 0 && (\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.dropdownBtn}\n open={this.open}\n minHeight={this.popoverMinHeight}\n direction={this.popoverDirection}\n align={this.popoverAlignment}\n >\n <q2-option-list\n id=\"option-list\"\n ref={el => (this.optionList = el)}\n onChange={this.handleChange}\n type=\"menu\"\n align=\"right\"\n label={loc('tecton.element.optionList.label', [this.optionListLabel])}\n no-select\n >\n <slot />\n </q2-option-list>\n </q2-popover>\n )}\n </click-elsewhere>\n </Host>\n );\n }\n}\n"],"mappings":"oKAAA,MAAMA,EAAW,u9FACjB,MAAAC,EAAeD,E,MCgBFE,EAAK,M,4DAqEdC,KAAAC,qBAAuB,KACnB,MAAMC,EAAkBF,KAAKG,YAAYC,iBAAiB,aAAaC,OACvEL,KAAKM,YAAcJ,CAAe,EAmBtCF,KAAAO,iBAAoBC,IAChB,MAAMC,EAASD,EAAMC,OACrB,GAAIA,EAAOC,YAAc,kBAAmB,CACxCF,EAAMG,kBACN,MAAMC,eAAEA,GAAmBZ,KAC3B,IAAKY,EAAgB,OACrBA,EAAeC,KAAO,K,GAI9Bb,KAAAc,aAAeN,IACXA,EAAMG,kBACN,IAAKX,KAAKM,YAAa,OACvB,MAAMS,MAAEA,GAAUP,EAAMQ,OAExBhB,KAAKiB,MAAMC,KAAK,CAAEH,SAAQ,EAG9Bf,KAAAmB,YAAcC,MAAOZ,IACjBA,EAAMG,kBACNX,KAAKY,eAAeS,eAAiBrB,KAAKsB,YAC1C,GAAIC,EAAsBvB,MAAO,CAC7B,MAAMe,MAAEA,SAAgBS,EAAoBxB,KAAMQ,GAClDR,KAAKiB,MAAMC,KAAK,CAAEH,S,KACf,OACGf,KAAKY,eAAea,Q,GAIlCzB,KAAA0B,cAAgBN,MAAOZ,IACnB,MAAMmB,EAAkBnB,EAAMoB,SAAWpB,EAAMqB,SAAWrB,EAAMsB,MAAQ,MACxE,GAAIH,EAAiB,OAErBnB,EAAMuB,iBACN/B,KAAKY,eAAeS,eAAiBrB,KAAKsB,YAC1C,GAAIC,EAAsBvB,KAAMQ,GAAQ,CACpC,MAAMO,MAAEA,SAAgBS,EAAoBxB,KAAMQ,GAClDR,KAAKiB,MAAMC,KAAK,CAAEH,S,KACf,CACHf,KAAKgC,WAAWC,sBAAsBzB,E,GAI9CR,KAAAkC,qBAAuBd,MAAOZ,I,MAC1B,MAAM2B,EAAgB3B,EAAM2B,cAC5B,IAAIC,GAAAD,IAAa,MAAbA,SAAa,SAAbA,EAAeE,WAAY,eAAW,MAAAD,SAAA,EAAAA,EAAI,MAAO,OACrDpC,KAAKa,KAAO,KAAK,EAGrBb,KAAAsC,mBAAqB,KACjBtC,KAAKsB,YAAYiB,QACjBvC,KAAKsB,YAAYL,OAAO,E,eAvIDmB,EAAAI,OAAOC,UAAM,MAAAL,SAAA,SAAAA,EAAEM,iB,8DAYR,U,sDAS4B,Q,sBAG3B,I,gDAqBnC,iBAAAC,GACI,MAAMC,EAAW,IAAIC,iBAAiB7C,KAAKC,sBAC3C2C,EAASE,QAAQ9C,KAAKG,YAAa,CAAE4C,UAAW,KAAMC,WAAY,OAClEhD,KAAKiD,iBAAmBL,C,CAG5B,gBAAAM,GACIC,EAAcnD,KAAKG,Y,CAGvB,oBAAAiD,GACIpD,KAAKiD,iBAAiBI,aACtBrD,KAAKiD,iBAAmB,I,CAa5B,aAAAK,CAAc9C,GACV,IAAK+C,EAAmB/C,EAAOR,KAAKG,aAAc,OAClD,IAAKH,KAAKM,YAAa,OACvBN,KAAKsB,YAAYiB,O,CAIrB,mBAAAiB,EAAsBxC,QAAQH,KAAEA,KAC5B,GAAIb,KAAKa,OAASA,EAAMb,KAAKa,KAAOA,EACpC,GAAIA,EAAM,OACVb,KAAKgC,WAAWyB,iBAAiB,K,CA2DrC,qBAAAC,GACI,OACIC,EAAA,OACIC,GAAG,qBACHC,MAAM,KAAI,cACE,QAEXC,EAAI,wCAAyC,CAAC9D,KAAKM,c,CAKhE,MAAAyD,GACI,MAAMzD,YAAEA,EAAWO,KAAEA,GAASb,KAC9B,MAAMgE,EAAoB,CAAC,OAC3B,GAAI1D,EAAa0D,EAAkBC,KAAK,eAExC,OACIN,EAACO,EAAI,CAAApC,IAAA,2CAACqC,KAAK,YACPR,EAAA,mBAAA7B,IAAA,2CAAiBsC,SAAUpE,KAAKO,kBAC3BP,KAAKM,YACFqD,EAACU,EAAQ,KACLV,EAAA,OACIE,MAAM,cACNS,QAAStE,KAAKsC,oBAEdqB,EAAA,UACIE,MAAM,cACNU,IAAKC,GAAOxE,KAAKsB,YAAckD,EAAG,UAC1B,cACRC,KAAK,SACLN,KAAK,WACLG,QAAStE,KAAKmB,YACduD,UAAW1E,KAAK0B,cAChBiD,WAAY3E,KAAKkC,qBAAoB,gBACvB,cAAa,gBACZrB,EAAO,OAAS,QAAO,mBACrB,sBAEjB8C,EAAA,OAAKE,MAAOG,EAAkBY,KAAK,MAAO5E,KAAK6E,OAC/ClB,EAAA,WAASc,KAAK,cAGrBzE,KAAK0D,yBAGVC,EAAA,OACIE,MAAM,cACNS,QAASQ,GAAKA,EAAEnE,mBAEhBgD,EAAA,OAAKE,MAAOG,EAAkBY,KAAK,MAAO5E,KAAK6E,QAItD7E,KAAKM,YAAc,GAChBqD,EAAA,cAAA7B,IAAA,2CACIyC,IAAKC,GAAOxE,KAAKY,eAAiB4D,EAClCnD,eAAgBrB,KAAKsB,YACrBT,KAAMb,KAAKa,KACXkE,UAAW/E,KAAKgF,iBAChBC,UAAWjF,KAAKkF,iBAChBC,MAAOnF,KAAKoF,kBAEZzB,EAAA,kBAAA7B,IAAA,2CACI8B,GAAG,cACHW,IAAKC,GAAOxE,KAAKgC,WAAawC,EAC9BJ,SAAUpE,KAAKc,aACf2D,KAAK,OACLU,MAAM,QACNN,MAAOf,EAAI,kCAAmC,CAAC9D,KAAKqF,kBAAiB,kBAGrE1B,EAAA,QAAA7B,IAAA,gD"}
@@ -1,2 +0,0 @@
1
- import{r as e,c as t,h as i,g as n}from"./p-a5f18e27.js";import{d as a}from"./p-be430cd5.js";import{l as s,h as r,o as d,i as o,w as l,a as c}from"./p-5c46acb8.js";function h(e){const t=new Date(e);if(!a.isValid(t))return;return a.formatISO(t,{representation:"date"})}let u;function f(e){const t=new Date(e);if(!a.isValid(t))return;const i=t.toISOString();if(!u){u=new Intl.DateTimeFormat("en-US",{month:"2-digit",day:"2-digit",year:"numeric",timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone})}return u.format(new Date(i))}let v;function p(e){const t=new Date(e);if(!a.isValid(t))return;if(!v){v=new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric"})}return v.format(t)}let b;function y(e){if(!e)return;const t=new Date(e);if(!a.isValid(t))return;if(!b){b=new Intl.DateTimeFormat("en-US",{month:"long",day:"numeric",year:"numeric",weekday:"long",timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone})}return b.format(t)}function m(e){return e.replace(/[d]/g,"E").replace(/[D]/g,"d").replace(/[Y]/g,"y").replace(/[l]/g,"P").replace(/[W]/g,"I")}function g(e){const t=typeof e==="string";if(!t&&e&&a.isValid(new Date(e||undefined))){e=h(e)}else if(!e||!a.isValid(new Date(e))){return undefined}let i;const n=e.split(/[\/\-]/).map((e=>e.padStart(2,"0")));const s=t&&e.length>=24&&e[10]==="T";const r=n.length===3;const d=n.length<3;if(s){e=e.split("T")[0];i=new Date(e)}else if(r){const t=e.includes("/")&&n[2].length===4;if(t)n.unshift(n.pop());i=new Date(n.join("-"))}else if(d){const e=new Date;let t;let a;let s;switch(n.length){case 1:t=e.getFullYear();a=n[0];s="01";break;case 2:t=e.getFullYear();a=n[0];s=n[1];break}i=new Date(`${t}-${a}-${s}`)}if(!a.isValid(i))return undefined;i=w(i);return a.isValid(i)?i:undefined}function w(e){const t=e.getTimezoneOffset();return a.setMinutes(e,t+Math.abs(t%60))}function D(e){if(!Array.isArray(e)||e.length===0){return[]}return e.map((e=>g(e)))}function x(e=new Date){return{monthIndex:e.getMonth(),selectedYear:e.getFullYear()}}function k(e="",t=[],i=[],n=[],r,d,o="mm/dd/yyyy",l){let c=true;let u=false;let f="info";let v=`${s("tecton.element.calendar.hint.format")}: ${o}`;if(!e){return{isValid:c,inputDate:new Date(""),isAvailable:u,messageType:f,message:v}}const b=$(e,l);const y=b.getMonth()+1;const m=b.getDate();const g=b.getFullYear();const w=[y,m,g];if(a.isValid(b)){const a=C()[b.getMonth()];if(e.length===10){c=true;f=null;v=null}u=t.includes(b.getDay());const l=h(b);if(u){const e=i.length&&!i.includes(l);const t=n.length&&n.includes(l);const a=r&&r>l;const s=d&&d<l;if(e||t||a||s){u=false}}if(e.length>=5&&!u){c=false;f="error";const e=!a||!m||!g;v=e?`${s("tecton.element.calendar.hint.invalidDate")}: ${o}`:s("tecton.element.calendar.hint.notAvailableDate",[p(b)])}}else{c=false;f="error";v=`${s("tecton.element.calendar.hint.invalidDate")}: ${o}`}return{isValid:c,messageType:f,message:v,inputDate:b,isAvailable:u,calendarPosition:w}}function $(e,t){const i=new Date;let[n,a,s]=e.split("/");if(n==="0")n="01";if(a==="0")a="01";if(e.length===10){return new Date(e)}else if(n&&a&&Number(a)>0){const e=Number(a)<10?`0${Number(a)}`:a;const i=!s||s.length<4?T(n,a,t):s;return new Date(`${n}/${e}/${i}`)}else if(n){return new Date(`${n}/01/${i.getFullYear()}`)}}function T(e,t,i){const n=`${e}/${t}`;const a=new Date;const s=a.getMonth()<9?`0${a.getMonth()+1}`:`${a.getMonth()+1}`;const r=a.getDate()<10?`0${a.getDate()}`:`${a.getDate()}`;const d=`${s}/${r}/${a.getFullYear()}`;let o=a.getFullYear();if(i==="future"&&d.slice(0,5)>n){o=a.getFullYear()+1}else if(i==="past"&&d.slice(0,5)<n){o=a.getFullYear()-1}return o.toString()}function I(e){if(!e){return""}if(e.match(/^[1-9]\/$/)){return`0${e}/`}else if(e.match(/^[0-9]{2}\/[1-9]{1}\/$/)){const t=e.split("/");return`${t[0]}/0${t[1]}/`}return e}function A(e){const t=(e||"").split("-");if(t.length!==3)return"";return`${t[1]}/${t[2]}/${t[0]}`}function O(e,t){return new Date(t,e,1,1,1,1,1).getDay()}function V(){return[s("tecton.element.calendar.days.short.Sunday"),s("tecton.element.calendar.days.short.Monday"),s("tecton.element.calendar.days.short.Tuesday"),s("tecton.element.calendar.days.short.Wednesday"),s("tecton.element.calendar.days.short.Thursday"),s("tecton.element.calendar.days.short.Friday"),s("tecton.element.calendar.days.short.Saturday")]}function z(){return[s("tecton.element.calendar.days.Sunday"),s("tecton.element.calendar.days.Monday"),s("tecton.element.calendar.days.Tuesday"),s("tecton.element.calendar.days.Wednesday"),s("tecton.element.calendar.days.Thursday"),s("tecton.element.calendar.days.Friday"),s("tecton.element.calendar.days.Saturday")]}function C(){return[s("tecton.element.calendar.months.January"),s("tecton.element.calendar.months.February"),s("tecton.element.calendar.months.March"),s("tecton.element.calendar.months.April"),s("tecton.element.calendar.months.May"),s("tecton.element.calendar.months.June"),s("tecton.element.calendar.months.July"),s("tecton.element.calendar.months.August"),s("tecton.element.calendar.months.September"),s("tecton.element.calendar.months.October"),s("tecton.element.calendar.months.November"),s("tecton.element.calendar.months.December")]}function E(e,t){const i=a.getDaysInMonth(new Date(t,e));return[...Array(i).keys()].reduce(((i,n)=>{i.push(new Date(t,e,n+1));return i}),[])}function q(e=127){const t=e&1;const i=e&2;const n=e&4;const a=e&8;const s=e&16;const r=e&32;const d=e&64;const o=[];if(e<=0)return o;if(t)o.push(0);if(i)o.push(1);if(n)o.push(2);if(a)o.push(3);if(s)o.push(4);if(r)o.push(5);if(d)o.push(6);return o}function M(e,t){return e.includes(t.getDay())}function S(e,t){return!Y(e,t)}function Y(e,t){return e.some((e=>a.isSameDay(e,t)))}function F(e,t,i,n,a,s,r){const d=[H.bind(null,s,new Date)];if(t===null||t===void 0?void 0:t.length){d.push(Y.bind(null,t))}else{d.push(M.bind(null,e))}d.push(S.bind(null,i));return L(n,a,s,d,r)}function L({monthIndex:e,selectedYear:t},i,n,s,r){const d=!a.isValid(new Date(r));const o=E(e,t).map(((e,t)=>{const a=s.some((t=>!t(e)));const r=P(e,n,i);const o=j(Object.assign(Object.assign({},r),{isInvalid:a,isIncompleteDate:d}));return Object.assign(Object.assign({},r),{isValid:!a,date:e,integer:t+1,isEmpty:false,isActivity:false,classList:o})}));const l=B(O(e,t));const c=U((l.length+o.length)%7);return[...l,...o,...c]}function H(e,t,i){const n=a.isAfter(e===null||e===void 0?void 0:e.startDate,i);const s=a.isBefore(e===null||e===void 0?void 0:e.endDate,i);const r=a.isSameDay(t,i)&&a.isAfter(t,e===null||e===void 0?void 0:e.cutOffTime);return!(n||r||s)}function P(e,t,i){if(!i)i=new Date;const n=i&&a.isSameDay(i,e);const s=a.isSameDay(e,new Date);const r=a.isSameDay(e,t===null||t===void 0?void 0:t.startDate);const d=a.isSameDay(e,t===null||t===void 0?void 0:t.endDate);return{isSelected:n,isToday:s,isStartDate:r,isEndDate:d}}function j({isInvalid:e,isSelected:t,isEndDate:i,isStartDate:n,isToday:a,isIncompleteDate:s}){const r=[];if(!e)r.push("is-valid");if(t)r.push("is-selected");if(i)r.push("is-end-date");if(n)r.push("is-start-date");if(a)r.push("is-today");if(t&&e&&!s)r.push("is-unavailable");return r.join(" ")}function B(e){return K(0,e)}function U(e){if(e===0)return[];return K(e,7)}const W={date:null,integer:null,isActivity:false,isEmpty:true,isValid:false,isToday:false,isSelected:false,isStartDate:false,isEndDate:false,classList:""};function K(e,t){if(e===7)e=0;return[...Array(t-e).keys()].map((()=>Object.assign({},W)))}const N="*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:block}:host[hidden]{display:none}click-elsewhere{position:relative;display:block}q2-input{margin:0;cursor:pointer}q2-popover{--comp-min-tappable-size:44px;--comp-table-border-spacing:2px;--comp-min-tappable-size-and-spacing:calc(var(--comp-min-tappable-size) + var(--comp-table-border-spacing));--comp-popover-padding:var(--tct-calendar-popover-padding, var(--t-calendar-popover-padding, var(--app-scale-1x, 5px)));--comp-min-table-width:calc(var(--comp-min-tappable-size-and-spacing) * 7);--comp-table-container-border-spacing:calc(var(--comp-table-border-spacing) * 2);--comp-popover-total-padding:calc(var(--comp-popover-padding) * 2);--tct-popover-min-width:calc(\n var(--comp-min-table-width) + var(--comp-table-container-border-spacing) + var(--comp-popover-total-padding)\n )}.calendar-field-popup{padding:var(--comp-popover-padding)}.calendar-label{--comp-label-padding:var(--tct-calendar-label-padding, var(--tct-calendar-label-vertical-padding, var(--t-calendar-label-vertical-padding, var(--tct-scale-2, var(--app-scale-2x, 10px)))) 0);font-size:var(--tct-calendar-label-font-size, var(--t-calendar-label-font-size, 16px));flex:1 1;flex-basis:calc(100% - var(--tct-btn-icon-width, 44px));margin:0;padding:var(--comp-label-padding)}.cal-month-heading{padding:0 0 0.75rem;display:flex;justify-content:center;align-items:center;font-size:var(--tct-calendar-month-font-size, var(--t-calendar-month-font-size, 16px));font-weight:var(--tct-calendar-month-font-weight, var(--t-calendar-month-font-weight, 600));text-align:center}.cal-month-text{min-width:82px;display:inline-block}.cal-year-text{min-width:50px;display:inline-block}table{width:100%;margin-bottom:2px;text-align:center;border-spacing:var(--comp-table-border-spacing)}th{font-size:var(--tct-calendar-day-heading-font-size, var(--t-calendar-day-heading-font-size, inherit));font-weight:var(--tct-calendar-day-heading-font-weight, var(--t-calendar-day-heading-font-weight, 600));width:14.285714%}td{height:var(--comp-min-tappable-size);cursor:pointer;border:var(--tct-calendar-day-border, var(--t-calendar-day-border, 0));border-radius:var(--tct-calendar-day-border-radius, var(--t-calendar-day-border-radius))}td.is-unavailable{border:1px solid var(--tct-input-error-border-color, var(--const-stoplight-alert, #d20a0a))}td.is-valid:hover{border:var(--tct-calendar-day-hover-border, var(--t-calendar-day-hover-border, var(--tct-calendar-day-border, var(--t-calendar-day-border, 0))));border-radius:var(--tct-calendar-day-hover-border-radius, var(--t-calendar-day-hover-border-radius, var(--tct-calendar-day-border-radius, var(--t-calendar-day-border-radius))));background:var(--tct-calendar-day-hover-background, var(--tct-calendar-day-hover-bg, var(--t-calendar-day-hover-bg, var(--tct-gray-14, var(--app-gray14, var(--tct-gray-l4, var(--app-gray-l4, #f2f2f2)))))));color:var(--tct-calendar-day-hover-font-color, var(--t-calendar-day-hover-font-color, inherit))}td[aria-hidden],td[aria-disabled]{pointer-events:none;cursor:not-allowed}td[aria-disabled]{opacity:var(--tct-calendar-day-disabled-opacity, var(--t-calendar-day-disabled-opacity, var(--app-disabled-opacity, 0.4)))}td[aria-selected]{border:var(--tct-calendar-day-selected-border, var(--t-calendar-day-selected-border, var(--tct-calendar-day-border, var(--t-calendar-day-border, 0))));border-radius:var(--tct-calendar-day-selected-border-radius, var(--t-calendar-day-selected-border-radius, var(--tct-calendar-day-border-radius, var(--t-calendar-day-border-radius))));background:var(--tct-calendar-day-selected-background, var(--tct-calendar-day-selected-bg, var(--t-calendar-day-selected-bg, var(--tct-calendar-day-hover-background, var(--tct-calendar-day-hover-bg, var(--t-calendar-day-hover-bg, var(--tct-gray-14, var(--t-gray-14, var(--tct-gray-l4, var(--app-gray-l4, #f2f2f2))))))))));color:var(--tct-calendar-day-selected-font-color, var(--t-calendar-day-selected-font-color, var(--tct-calendar-day-hover-font-color, var(--t-calendar-day-hover-font-color, inherit))));box-shadow:0 0 0 2px var(--tct-calendar-day-selected-outline-color, var(--t-calendar-day-selected-outline-color, var(--tct-stoplight-info, var(--const-stoplight-info, #0079c1))))}.today-decorator{text-transform:uppercase;font-weight:700;font-size:10px;height:12px}.calendar-disclaimer{font-size:var(--tct-calendar-disclaimer-font-size, var(--t-calendar-disclaimer-font-size, var(--tct-font-size-small, var(--app-font-size-small, 12px))));border-style:solid;border-width:var(--tct-calendar-disclaimer-border-width, var(--t-calendar-disclaimer-border-width, 1px 0 0 0));border-color:var(--tct-calendar-disclaimer-border-color, var(--t-calendar-disclaimer-border-color, var(--tct-gray-13, var(--t-gray-13, var(--tct-gray-l3, var(--app-gray-l3, #e6e6e6))))));padding:var(--tct-calendar-disclaimer-padding, var(--tct-scale-2, var(--app-scale-2x, 10px)));text-align:left}";const J=N;const Z=class{constructor(i){e(this,i);this.change=t(this,"change",7);this.error=t(this,"error",7);this.success=t(this,"success",7);this.formatModifier="M/D/YYYY";this.defaultFormatString="mm/dd/yyyy";this.scheduledAfterRender=[];this.dayAbbrStrings=V();this.dayStrings=z();this.monthStrings=C();this.closeCalendar=()=>{if(!this.open)return;this.open=false;this.focusInput()};this.openCalendar=()=>{if(this.readonly||this.open)return;this.selectedMonthYear=x(this.dateValue);this.dateList=this.buildDateList(this.selectedMonthYear);this.open=true};this.toggleCalendar=()=>{if(this.readonly)return;if(this.open){this.closeCalendar()}else{this.openCalendar()}};this.onClickElsewhere=e=>{const t=e.target;if(t.localName==="click-elsewhere"){e.stopPropagation();this.closeCalendar()}};this.onPopupKeyup=e=>{if(e.key==="Escape"||e.key==="Esc"){this.onInputBlur();this.closeCalendar()}};this.onInputInput=({detail:{value:e}})=>{this.typedValue=e};this.onInputKeydown=e=>{const{dateValue:t}=this;switch(e.key){case"ArrowDown":e.preventDefault();this.openCalendar();this.activateDay(t||new Date);break}};this.onInputKeyup=e=>{if(this.disabled){return}switch(e.key){case"Escape":this.onInputBlur();this.closeCalendar();break}if(!this.isTypeable)return;this.typedValue=I(this.typedValue);const{typedValue:t}=this;const i=q(this.daysOfWeekChecksum);const{isValid:n,message:s,messageType:r,inputDate:d,isAvailable:o,calendarPosition:l}=k(t,i,this.validDates,this.invalidDates,this.startDate,this.endDate,this.defaultFormatString,this.assume);if(l){const[e,t,i]=l;const n=new Date(`${i}-${e}-${t}`);if(a.isValid(n)){this.selectedMonthYear=x(n);this.dateList=this.buildDateList(this.selectedMonthYear);this.validateDate()}}if(e.key==="Enter"){if(n||t&&t.length>4&&d&&a.isValid(d)&&o){this.setCompleteInput(d)}else if(this.value){this.value=null;this.change.emit({value:null});this.typedValue=t}if(this.keyboardSelection){this.keyboardSelection=false;this.closeCalendar()}else{this.toggleCalendar()}}else{this.setHints({isValid:n,message:s,messageType:r})}};this.onInputChange=e=>{e.stopPropagation()};this.onInputBlur=()=>{if(!this.isTypeable)return;const e=q(this.daysOfWeekChecksum);const{typedValue:t}=this;const{isValid:i,inputDate:n,isAvailable:s}=k(this.typedValue,e,this.validDates,this.invalidDates,this.startDate,this.endDate,this.defaultFormatString,this.assume);if(!t&&(n===null||n===void 0?void 0:n.toString())==="Invalid Date"){this.setHints({isValid:true,message:this.defaultHintMessage,messageType:"info"})}else if(i||t&&t.length>4&&n&&a.isValid(n)&&s){this.setCompleteInput(n)}else if(this.value){this.value=null;this.change.emit({value:null});this.typedValue=t}};this.onInputFocus=e=>{if(!this.isTypeable)return;if(e.target===this.controlElement)this.closeCalendar()};this.onInputClick=()=>{if(this.disabled)return;this.toggleCalendar()};this.onRefocus=()=>{var e;(e=this.btnPrevMonth)===null||e===void 0?void 0:e.dispatchEvent(new FocusEvent("focus"))};this.goToMonthYear=(e,t)=>{if(e<0){e=11;t--}else if(e>11){e=0;t++}this.selectedMonthYear={monthIndex:e,selectedYear:t};this.dateList=this.buildDateList(this.selectedMonthYear);this.scheduledAfterRender.push((()=>this.checkActiveCellForBlankness()))};this.selectDate=e=>{const{isValid:t}=this.dateList.find((({date:t})=>a.isSameDay(t,e)));if(!t)return;this.change.emit({value:h(e)});this.typedValue=f(e);this.invalid=false};this.onDateSelection=e=>{const t=e.target.closest("td:not([aria-hidden])");if(!t)return;const i=w(new Date(t.dataset.date));this.selectDate(i);this.closeCalendar()};this.onHeaderControlKeydown=e=>{var t;const i=this.generateDateFromDay(1);const n=(t=this.calendarBody)===null||t===void 0?void 0:t.querySelector('[aria-selected="true"]');if(e.key==="Tab"&&!n){e.preventDefault();this.activateDay(i)}};this.onDateKeydown=e=>{const{monthIndex:t,selectedYear:i}=this.selectedMonthYear;const n=parseInt(e.target.dataset.day);const s=this.generateDateFromDay(n);switch(e.key){case"ArrowUp":e.preventDefault();this.activateDay(a.addDays(s,-7));break;case"ArrowDown":e.preventDefault();this.activateDay(a.addDays(s,7));break;case"ArrowRight":e.preventDefault();this.activateDay(a.addDays(s,1));break;case"ArrowLeft":e.preventDefault();this.activateDay(a.addDays(s,-1));break;case"PageUp":e.preventDefault();if(e.shiftKey)this.goToMonthYear(t,i-1);else this.goToMonthYear(t-1,i);break;case"PageDown":e.preventDefault();if(e.shiftKey)this.goToMonthYear(t,i+1);else this.goToMonthYear(t+1,i);break;case"Home":e.preventDefault();this.activateDay(a.addDays(s,-s.getDay()));break;case"End":e.preventDefault();this.activateDay(a.addDays(s,6-s.getDay()));break;case"Escape":e.preventDefault();this.closeCalendar();this.focusInput();break;case"Enter":e.preventDefault();if(!this.dateList.find((({date:e})=>a.isSameDay(e,s))).isValid)return;this.selectDate(s);this.closeCalendar();this.focusInput();break;case" ":e.preventDefault();if(!this.dateList.find((({date:e})=>a.isSameDay(e,s))).isValid)return;this.selectDate(s);this.focusInput();break}};this.assume="current";this.calendarLabel=undefined;this.clearable=undefined;this.cutoffTime=undefined;this.daysOfWeekChecksum=undefined;this.disabled=undefined;this.disabledMsg=undefined;this.disclaimer=undefined;this.displayFormat=undefined;this.endDate=undefined;this.errors=undefined;this.hideLabel=undefined;this.hints=undefined;this.invalid=undefined;this.invalidDates=undefined;this.label=undefined;this.open=undefined;this.optional=undefined;this.placeholder=undefined;this.popoverAlignment=undefined;this.popoverDirection=undefined;this.popoverMinHeight=355;this.readonly=undefined;this.startDate=undefined;this.typeable=undefined;this.validDates=undefined;this.value=undefined;this.popDirection=undefined;this.onsuccess=undefined;this.buttonLabel=undefined;this.ariaLabel=undefined;this.keyboardSelection=false;this.typedValue="";this.dateList=undefined;this.hintMessage=this.defaultHintMessage;this.hintMessageType="info"}connectedCallback(){this.selectedMonthYear=x(this.dateValue);this.dateList=this.buildDateList(this.selectedMonthYear);if(this.value&&this.isTypeable&&!this.typedValue){this.typedValue=A(this.value)}this.validateDate()}componentWillLoad(){this.popDirectionHandler();r(this)}componentDidRender(){setTimeout((()=>{this.scheduledAfterRender.forEach((e=>e()));this.scheduledAfterRender=[]}),25)}componentDidLoad(){d(this.hostElement)}get selectedDate(){var e;const t=(e=this.calendarBody)===null||e===void 0?void 0:e.querySelector('[aria-selected="true"]');return t?w(new Date(t.dataset.date)):null}get innerInputField(){var e,t;return(t=(e=this.controlElement)===null||e===void 0?void 0:e.shadowRoot)===null||t===void 0?void 0:t.querySelector(".input-field")}get innerInputContainer(){var e,t;return(t=(e=this.controlElement)===null||e===void 0?void 0:e.shadowRoot)===null||t===void 0?void 0:t.querySelector(".input-container")}get defaultHintMessage(){return this.typeable?s("tecton.element.calendar.hint.format")+": "+this.defaultFormatString:s("tecton.element.calendar.hint.select")}get canClear(){if(this.isTypeable){return this.clearable&&!!this.typedValue}else{return this.clearable&&!!this.value}}get currentWeeks(){const e=this.dateList.reduce(((e,t,i)=>{const n=Math.floor(i/7);if(!e[n]){e[n]=[]}e[n].push(t);return e}),[]);return e}get formattedValue(){const{typedValue:e,dateValue:t,displayFormat:i,isTypeable:n}=this;if(n)return e;if(t===undefined)return"";if(i)return a.format(t,m(i));return new Intl.DateTimeFormat("en-US",{year:"numeric",month:"2-digit",day:"2-digit",timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone}).format(t)}get computedPlaceholder(){if(this.disabled&&this.disabledMsg){return s(this.disabledMsg)}if(this.buttonLabel&&(this.disabled||this.placeholder)){return s(this.buttonLabel)}return this.placeholder&&s(this.placeholder)||""}get dateValue(){if(this.isTypeable){return g(this.typedValue)}else{let{value:e}=this;const t=e&&typeof e!=="string"&&"toDate"in e;if(t)return e.toDate();const i=typeof e==="string"&&e.split(" ").length===6&&/GMT-\d{4}/g.test(e);if(i){e=h(e)}return g(e)}}get dateValidators(){const e=new Date(this.cutoffTime||"");return{startDate:g(this.startDate),endDate:g(this.endDate),cutOffTime:a.isValid(e)?e:undefined}}get isTypeable(){return this.typeable}get errorList(){const{errors:e,hintMessageType:t,hintMessage:i,invalid:n}=this;if(Array.isArray(e)&&e.length)return e.filter((e=>!!e)).map((e=>s(e)));if(t==="error"&&i)return[i];if(n)return["tecton.element.calendar.invalid"];return[]}get hintList(){const{hints:e,hintMessageType:t,hintMessage:i}=this;if(Array.isArray(e)&&e.length)return e.filter((e=>!!e)).map((e=>s(e)));if(t==="info"&&i)return[i];return[]}defaultChangeHandler(e){if(e.target===this.hostElement&&!this.hostElement.onchange&&!!e.detail){this.value=e.detail.value}}defaultErrorHandler(e){if(e.target===this.hostElement&&!this.hostElement.onerror){const{errors:e}=this;if(Array.isArray(e)&&e.includes("tecton.element.calendar.hint.invalidDate")){return}this.errors=(e||[]).concat(["tecton.element.calendar.hint.invalidDate"])}}defaultSuccessHandler(e){if(e.target!==this.hostElement){return}if(typeof this.onsuccess==="function"){this.onsuccess(e)}else{const{errors:e}=this;if(Array.isArray(e)&&e.includes("tecton.element.calendar.hint.invalidDate")){this.errors=e.filter((e=>e!=="tecton.element.calendar.hint.invalidDate"))}}}delegateFocus(e){if(!o(e,this.hostElement))return;this.controlElement.shadowRoot.querySelector(".input-field").focus()}handleClear(){this.change.emit({value:null});this.value=null;this.typedValue=""}popoverStateHandler({detail:{open:e}}){if(this.open!==e)this.open=e}_togglePopover(){const e=this.typeable?this.btnCalendarToggle:this.innerInputField;e===null||e===void 0?void 0:e.click();e===null||e===void 0?void 0:e.focus();e.dispatchEvent(new FocusEvent("focus"))}async openPopover(){if(this.open)return;this._togglePopover()}async closePopover(){if(!this.open)return;this._togglePopover()}async setValue(e){var t;const i=typeof e==="string"?g(e):e;if(!a.isValid(i))return;await this.openPopover();await l();this.goToMonthYear(i.getMonth(),i.getFullYear());await l();const n=(t=this.calendarTable)===null||t===void 0?void 0:t.querySelector(`td[data-date="${h(i)}"]`);n===null||n===void 0?void 0:n.click()}async typeValue(e){if(!this.typeable)return;const t=typeof e==="string"?g(e):e;const i=f(t);if(!a.isValid(t))return;const{innerInputField:n,controlElement:s}=this;n.focus();n.dispatchEvent(new FocusEvent("focus"));n.value=i;n.dispatchEvent(new InputEvent("input"));s.dispatchEvent(new KeyboardEvent("keyup"))}popDirectionHandler(){c(this,"popDirection","popoverDirection")}ariaLabelObserver(){r(this)}typeableChanged(){this.valueObserver(this.value)}valueObserver(e){if(e===""){this.value=undefined;this.setHints({isValid:true,message:this.defaultHintMessage,messageType:"info"});return}const t=e&&typeof e!=="string"&&"toDate"in e;const i=t?e.toDate():g(e);const n=f(i);if(this.isTypeable){this.typedValue=n}else{this.controlElement.value=n;this.selectedMonthYear=x(i);this.dateList=this.buildDateList(this.selectedMonthYear);this.validateDate()}if(this.invalid)return;if(n){this.setHints({isValid:true,message:null,messageType:null})}else{this.setHints({isValid:true,message:this.defaultHintMessage,messageType:"info"})}}daysOfWeekChecksumObserver(){this.dateList=this.buildDateList(this.selectedMonthYear);this.validateDate()}validDatesObserver(){this.dateList=this.buildDateList(this.selectedMonthYear);this.validateDate()}invalidDatesObserver(){this.dateList=this.buildDateList(this.selectedMonthYear);this.validateDate()}startDateObserver(){this.dateList=this.buildDateList(this.selectedMonthYear);this.validateDate()}endDateObserver(){this.dateList=this.buildDateList(this.selectedMonthYear);this.validateDate()}cutoffTimeObserver(){this.dateList=this.buildDateList(this.selectedMonthYear);this.validateDate()}buildDateList(e){const t=D(this.invalidDates);const i=q(this.daysOfWeekChecksum);const n=D(this.validDates);return F(i,n,t,e,this.dateValue,this.dateValidators,this.typedValue)}validateDate(){var e,t,i;try{if(!!this.value){const{dateValue:n}=this;const a=(e=n===null||n===void 0?void 0:n.getMonth())!==null&&e!==void 0?e:undefined;const s=(t=n===null||n===void 0?void 0:n.getFullYear())!==null&&t!==void 0?t:undefined;const{monthIndex:r,selectedYear:d}=this.selectedMonthYear;const o=a===r&&s===d;let l=[];if(!n){l=[]}else if(o){l=this.dateList}else{l=this.buildDateList({monthIndex:a,selectedYear:s})}const c=(i=n===null||n===void 0?void 0:n.getDate())!==null&&i!==void 0?i:undefined;const u=c?!l.find((({integer:e})=>e===c)).isValid:true;if(u){this.error.emit({errors:[{message:`Value passed is invalid: The date ${this.value} is not valid`,errorCode:"generalInvalid"}]})}else{this.success.emit({value:h(n)})}}}catch(e){console.warn("Invalid moment value ",this.dateValue)}}focusInput(){var e;(e=this.controlElement)===null||e===void 0?void 0:e.focus()}checkActiveCellForBlankness(){const e=this.hostElement.shadowRoot.activeElement;if(!e||e.tagName!=="TD"||!e.hasAttribute("aria-hidden"))return;const{calendarBody:t}=this;const i=Array.from(t.querySelectorAll("td"));const n=Array.from(i).indexOf(e);const a=n<15?1:i.filter((e=>!e.hasAttribute("aria-hidden"))).length;this.focusDay(this.generateDateFromDay(a))}generateDateFromDay(e){const{monthIndex:t,selectedYear:i}=this.selectedMonthYear;return new Date(i,t,e)}activateDay(e){this.goToMonthYear(e.getMonth(),e.getFullYear());this.scheduledAfterRender.push((()=>this.focusDay(e)))}async focusDay(e){var t;if(!e)return;await l();(t=this.calendarBody.querySelector(`td[data-day="${e.getDate()}"]`))===null||t===void 0?void 0:t.focus()}render(){return i("click-elsewhere",{key:"31cb3c3163c5e158275c270996788b15048e9e8e",class:this.open?"dropdown-open":undefined,onChange:this.onClickElsewhere},this.inputField(),i("q2-popover",{key:"716aae6b9e6e2c7a48b46a6d9104f07ba50a3e5c",ref:e=>this.popoverElement=e,controlElement:this.innerInputContainer,open:this.open,direction:this.popoverDirection,minHeight:this.popoverMinHeight,align:this.popoverAlignment,block:true},this.hintField(),this.calendarPopover()))}hintField(){if(!this.hintMessage)return;return i("q2-message",{class:"calendar-hint sr",ref:e=>this.hintMessageElement=e,type:this.hintMessageType},this.hintMessage)}setHints({isValid:e,message:t,messageType:i}){var n;if(t===this.hintMessage)return(n=this.hintMessageElement)===null||n===void 0?void 0:n.present();this.invalid=!e;this.hintMessage=t;this.hintMessageType=i}setCompleteInput(e){const t=f(e);this.change.emit({value:h(e)});this.typedValue=t;this.setHints({isValid:true,message:null,messageType:null})}inputField(){const{isTypeable:e}=this;return i("q2-input",{ref:e=>this.controlElement=e,class:"calendar-input-field",value:this.formattedValue,label:s(this.label),hideLabel:this.hideLabel,disabled:!!this.disabled,readonly:!!this.readonly,clearable:this.canClear,placeholder:this.computedPlaceholder,optional:!!this.optional,ariaExpanded:`${!!this.open}`,hints:this.hintList,errors:this.errorList,onClick:e?undefined:this.onInputClick,onChange:this.onInputChange,onInput:this.onInputInput,onKeyDown:this.onInputKeydown,onKeyUp:this.onInputKeyup,onBlur:this.onInputBlur,onFocus:this.onInputFocus,"icon-right":e?undefined:"calendar","format-modifier":e?this.formatModifier:this.displayFormat||this.formatModifier,pseudo:!e,type:"date","hide-messages":!e,"test-id":"inputAndCalendarToggle"},e&&i("q2-btn",{ref:e=>this.btnCalendarToggle=e,slot:"input-right",onClick:this.onInputClick,"test-id":"calendarToggle",label:"tecton.element.calendar.toggleAriaLabel","hide-label":true},i("q2-icon",{type:"calendar"})))}calendarPopover(){const{monthIndex:e,selectedYear:t}=this.selectedMonthYear;return i("div",{class:"calendar-field-popup",onKeyUp:this.onPopupKeyup},this.calendarLabel&&i("p",{class:"calendar-label"},s(this.calendarLabel)),i("div",{class:"cal-month-heading"},i("q2-btn",{label:s("tecton.element.calendar.previousMonth"),"hide-label":true,ref:e=>this.btnPrevMonth=e,class:"cal-nav-btn prev-month","test-id":"previousMonthButton",onClick:()=>this.goToMonthYear(e-1,t)},i("q2-icon",{type:"chevron-left"})),i("span",{class:"cal-month-text"},this.monthStrings[e]),i("q2-btn",{label:s("tecton.element.calendar.nextMonth"),"hide-label":true,class:"cal-nav-btn next-month",ref:e=>this.btnNextMonth=e,"test-id":"nextMonthButton",onClick:()=>this.goToMonthYear(e+1,t)},i("q2-icon",{type:"chevron-right"})),i("q2-btn",{label:s("tecton.element.calendar.previousYear"),"hide-label":true,class:"cal-nav-btn prev-year",ref:e=>this.btnPrevYear=e,"test-id":"previousYearButton",onClick:()=>this.goToMonthYear(e,t-1)},i("q2-icon",{type:"chevron-left"})),i("span",{class:"cal-year-text"},this.selectedMonthYear.selectedYear),i("q2-btn",{label:s("tecton.element.calendar.nextYear"),"hide-label":true,class:"cal-nav-btn next-year",ref:e=>this.btnNextYear=e,"test-id":"nextYearButton",onClick:()=>this.goToMonthYear(e,t+1),onKeyDown:this.onHeaderControlKeydown},i("q2-icon",{type:"chevron-right"}))),i("div",{class:"sr","aria-live":"polite",id:"table-label"},`${this.monthStrings[e]} ${t}`),this.calendarDays(),this.disclaimer&&i("div",{class:"calendar-disclaimer"},s(this.disclaimer)),i("q2-btn",{class:"sr refocus-popup",onFocus:this.onRefocus}))}calendarDays(){return i("table",{role:"grid","aria-labelledby":"table-label",ref:e=>this.calendarTable=e},i("thead",null,i("tr",null,[...Array(7).keys()].map((e=>i("th",{scope:"col","aria-label":this.dayStrings[e]},this.dayAbbrStrings[e]))))),i("tbody",{onClick:this.onDateSelection,onKeyDown:this.onDateKeydown,ref:e=>this.calendarBody=e,"test-id":"calendarTableBody"},this.currentWeeks.map((e=>i("tr",null,e.map((e=>{var t;let n="";if(e.isToday)n=`${s("tecton.element.calendar.today")}, `;n+=y(e.date);if(e.isSelected)n+=` (${s("tecton.element.calendar.selected")})`;return i("td",{class:e.classList,"aria-hidden":e.isEmpty?"true":undefined,tabindex:e.isSelected?0:-1,role:e.isSelected?"gridcell":undefined,"aria-selected":e.isSelected?"true":undefined,"aria-disabled":e.isValid?undefined:"true","data-day":e.integer||undefined,"data-date":e.date?h(e.date):undefined},(e===null||e===void 0?void 0:e.isToday)&&i("div",{class:"today-decorator","aria-hidden":"true"},s("tecton.element.calendar.today")),i("div",{"aria-label":n},(t=e===null||e===void 0?void 0:e.integer)!==null&&t!==void 0?t:""))})))))))}get hostElement(){return n(this)}static get watchers(){return{popDirection:["popDirectionHandler"],ariaLabel:["ariaLabelObserver"],typeable:["typeableChanged"],value:["valueObserver"],daysOfWeekChecksum:["daysOfWeekChecksumObserver"],validDates:["validDatesObserver"],invalidDates:["invalidDatesObserver"],startDate:["startDateObserver"],endDate:["endDateObserver"],cutoffTime:["cutoffTimeObserver"]}}};Z.style=J;export{Z as q2_calendar};
2
- //# sourceMappingURL=p-081b779e.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["formatDateISO","value","date","Date","isValidDate","formatISO","representation","memoizedFormatDateShort","formatDateShort","isoDate","toISOString","Intl","DateTimeFormat","month","day","year","timeZone","resolvedOptions","format","memoizedFormatDateLong","formatDateLong","memoizedFormatDateFull","formatDateFull","weekday","convertMomentFormat","stringFormat","replace","stringToDate","isString","undefined","result","dateParts","split","map","part","padStart","isIsoString","length","isCompleteDate","isPartialDate","isStandardSlashDate","includes","unshift","pop","join","now","yearNumber","monthNumber","dayNumber","getFullYear","removeTimezoneOffset","timeZoneOffset","getTimezoneOffset","setMinutes","Math","abs","stringArrayToDate","dateArray","Array","isArray","setupMonthYear","monthIndex","getMonth","selectedYear","validateInput","input","validDays","validDates","invalidDates","startDate","endDate","formatString","assume","isValid","isAvailable","messageType","message","loc","inputDate","buildInputDate","getDate","calendarPosition","monthName","getMonths","getDay","isoString","isNotValidDate","isInvalidDate","isBeforeStartDate","isAfterEndDate","isInvalid","Number","twoDigitDay","fourDigitYear","assumeYear","monthDay","mm","dd","nowLocal","assumedYear","slice","toString","handleMissingZeros","match","sp","reorderDateString","firstDayOfWeekInMonth","getDays","getDaysOfWeek","generateDatesFromMonthYear","daysInMonth","getDaysInMonth","keys","reduce","acc","stepIndex","push","getValidDaysOfWeek","checksum","sunValid","monValid","tuesValid","wedsValid","thursValid","friValid","satValid","ret","validateAgainstChecksum","validDaysOfWeek","newDate","validateAgainstBlacklist","validateAgainstWhitelist","some","validDate","isSameDay","buildDates","selectedMonthYear","currentSelection","dateValidators","typedValue","validationFns","baseValidation","bind","generateDateList","isIncompleteDate","datesInMonth","dayInMonth","dateIndex","fn","dayState","getDayState","classList","generateClassesForCalDay","Object","assign","integer","isEmpty","isActivity","startOfMonthEmpties","addEmptiesMonthStart","endOfMonthEmpties","addEmptiesMonthEnd","isNewDateBeforeStartDate","isAfter","isNewDateAfterEndDate","isBefore","isNowAfterCutoffTime","cutOffTime","currentDate","isSelected","isToday","isStartDate","isEndDate","classes","monthStartDayOfWeek","addEmptyDates","monthEndDayOfWeek","emptyDate","from","to","q2CalendarCss","Q2CalendarStyle0","Q2Calendar","this","formatModifier","defaultFormatString","scheduledAfterRender","dayAbbrStrings","dayStrings","monthStrings","closeCalendar","open","focusInput","openCalendar","readonly","dateValue","dateList","buildDateList","toggleCalendar","onClickElsewhere","event","target","localName","stopPropagation","onPopupKeyup","key","onInputBlur","onInputInput","detail","onInputKeydown","preventDefault","activateDay","onInputKeyup","disabled","isTypeable","daysOfWeekChecksum","yyyy","validateDate","setCompleteInput","change","emit","keyboardSelection","setHints","onInputChange","defaultHintMessage","onInputFocus","controlElement","onInputClick","onRefocus","_a","btnPrevMonth","dispatchEvent","FocusEvent","goToMonthYear","checkActiveCellForBlankness","selectDate","find","invalid","onDateSelection","dateCell","closest","clickedDate","dataset","onHeaderControlKeydown","generateDateFromDay","hasSelectedCell","calendarBody","querySelector","onDateKeydown","currentDay","parseInt","addDays","shiftKey","connectedCallback","componentWillLoad","popDirectionHandler","handleAriaLabel","componentDidRender","setTimeout","forEach","componentDidLoad","overrideFocus","hostElement","selectedDate","selectedCell","innerInputField","_b","shadowRoot","innerInputContainer","typeable","canClear","clearable","currentWeeks","weeks","accum","item","index","chunkIndex","floor","formattedValue","displayFormat","computedPlaceholder","disabledMsg","buttonLabel","placeholder","isMoment","toDate","isMomentString","test","ct","cutoffTime","errorList","errors","hintMessageType","hintMessage","filter","error","hintList","hints","hint","defaultChangeHandler","onchange","defaultErrorHandler","onerror","concat","defaultSuccessHandler","onsuccess","x","delegateFocus","isEventFromElement","focus","handleClear","popoverStateHandler","_togglePopover","toggleElement","btnCalendarToggle","click","openPopover","closePopover","setValue","waitForNextPaint","tableCell","calendarTable","typeValue","formattedDate","InputEvent","KeyboardEvent","handleRenamedProp","ariaLabelObserver","typeableChanged","valueObserver","newValue","shortFormattedValue","daysOfWeekChecksumObserver","validDatesObserver","invalidDatesObserver","startDateObserver","endDateObserver","cutoffTimeObserver","monthYear","isSelectedMonthAndYear","calculationDateList","dateValueDayOfMonth","_c","isDateValueInvalid","errorCode","success","console","warn","activeElement","tagName","hasAttribute","calendarCells","querySelectorAll","indexOfCell","indexOf","dayToFocus","cell","focusDay","render","h","class","onChange","inputField","ref","el","popoverElement","direction","popoverDirection","minHeight","popoverMinHeight","align","popoverAlignment","block","hintField","calendarPopover","hintMessageElement","type","present","label","hideLabel","optional","ariaExpanded","onClick","onInput","onKeyDown","onKeyUp","onBlur","onFocus","pseudo","slot","calendarLabel","elm","btnNextMonth","btnPrevYear","btnNextYear","id","calendarDays","disclaimer","role","scope","week","ariaLabel","tabindex"],"sources":["src/components/q2-calendar/q2-calendar-helpers.ts","src/components/q2-calendar/q2-calendar-validation.ts","src/components/q2-calendar/q2-calendar.scss?tag=q2-calendar&encapsulation=shadow","src/components/q2-calendar/q2-calendar.tsx"],"sourcesContent":["import { isValid as isValidDate, formatISO, setMinutes } from 'date-fns';\nimport { loc } from '../../utils';\nimport { ISelectedMonthYear, InputValidation } from './q2-calendar-types';\n\nexport interface IMomentLikeObject {\n toDate(): Date;\n}\n\nexport function formatDateISO(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n\n return formatISO(date, { representation: 'date' });\n}\n\nlet memoizedFormatDateShort: Intl.DateTimeFormat;\nexport function formatDateShort(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n\n const isoDate = date.toISOString();\n if (!memoizedFormatDateShort) {\n memoizedFormatDateShort = new Intl.DateTimeFormat('en-US', {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n }\n\n return memoizedFormatDateShort.format(new Date(isoDate));\n}\n\nlet memoizedFormatDateLong: Intl.DateTimeFormat;\nexport function formatDateLong(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n if (!memoizedFormatDateLong) {\n memoizedFormatDateLong = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n }\n\n return memoizedFormatDateLong.format(date);\n}\n\nlet memoizedFormatDateFull: Intl.DateTimeFormat;\nexport function formatDateFull(value: string | Date) {\n if (!value) return;\n const date = new Date(value);\n if (!isValidDate(date)) return;\n if (!memoizedFormatDateFull) {\n memoizedFormatDateFull = new Intl.DateTimeFormat('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n weekday: 'long',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n }\n\n return memoizedFormatDateFull.format(date);\n}\n\nexport function convertMomentFormat(stringFormat: string) {\n return stringFormat\n .replace(/[d]/g, 'E')\n .replace(/[D]/g, 'd')\n .replace(/[Y]/g, 'y')\n .replace(/[l]/g, 'P')\n .replace(/[W]/g, 'I');\n}\n\nexport function stringToDate(date: string | null | void): Date | undefined {\n const isString = typeof date === 'string';\n if (!isString && date && isValidDate(new Date(date || undefined))) {\n date = formatDateISO(date);\n } else if (!date || !isValidDate(new Date(date))) {\n return undefined;\n }\n\n let result: Date;\n const dateParts = date.split(/[\\/\\-]/).map(part => part.padStart(2, '0'));\n const isIsoString = isString && date.length >= 24 && date[10] === 'T';\n const isCompleteDate = dateParts.length === 3;\n const isPartialDate = dateParts.length < 3;\n if (isIsoString) {\n date = date.split('T')[0];\n result = new Date(date);\n } else if (isCompleteDate) {\n const isStandardSlashDate = date.includes('/') && dateParts[2].length === 4;\n\n // Reorder mm/dd/yyyy dates for ISO formatting\n // [mm, dd, yyyy] -> [yyyy, mm, dd]\n if (isStandardSlashDate) dateParts.unshift(dateParts.pop());\n\n result = new Date(dateParts.join('-'));\n } else if (isPartialDate) {\n const now = new Date();\n\n let yearNumber: number;\n let monthNumber: string;\n let dayNumber: string;\n switch (dateParts.length) {\n case 1:\n yearNumber = now.getFullYear();\n monthNumber = dateParts[0];\n dayNumber = '01';\n break;\n\n case 2:\n yearNumber = now.getFullYear();\n monthNumber = dateParts[0];\n dayNumber = dateParts[1];\n break;\n }\n\n result = new Date(`${yearNumber}-${monthNumber}-${dayNumber}`);\n }\n\n if (!isValidDate(result)) return undefined;\n\n // result = setHours(result, 0);\n result = removeTimezoneOffset(result);\n\n return isValidDate(result) ? result : undefined;\n}\n\nexport function removeTimezoneOffset(date: Date) {\n const timeZoneOffset = date.getTimezoneOffset();\n // Minutes compensation for some timezones like India, Central Australia and etc use GMT+5:30, GMT+9:30\n return setMinutes(date, timeZoneOffset + Math.abs(timeZoneOffset % 60));\n}\n\nexport function stringArrayToDate(dateArray: string[]): Date[] {\n if (!Array.isArray(dateArray) || dateArray.length === 0) {\n return [];\n }\n return dateArray.map(date => stringToDate(date));\n}\n\nexport function setupMonthYear(value: Date | undefined = new Date()): ISelectedMonthYear {\n return {\n monthIndex: value.getMonth(),\n selectedYear: value.getFullYear(),\n };\n}\n\nexport function validateInput(\n input: string = '',\n validDays: number[] = [],\n validDates: string[] = [], // white list\n invalidDates: string[] = [], // black list\n startDate: string,\n endDate: string,\n formatString: string = 'mm/dd/yyyy',\n assume: string\n): InputValidation {\n let isValid: boolean = true;\n let isAvailable: boolean = false;\n let messageType: string = 'info';\n let message: string = `${loc('tecton.element.calendar.hint.format')}: ${formatString}`;\n if (!input) {\n return { isValid, inputDate: new Date(''), isAvailable, messageType, message };\n }\n\n const inputDate = buildInputDate(input, assume);\n const month = inputDate.getMonth() + 1;\n const date = inputDate.getDate();\n const year = inputDate.getFullYear();\n const calendarPosition = [month, date, year];\n\n if (isValidDate(inputDate)) {\n const monthName = getMonths()[inputDate.getMonth()];\n\n if (input.length === 10) {\n isValid = true;\n messageType = null;\n message = null;\n }\n\n isAvailable = validDays.includes(inputDate.getDay());\n const isoString = formatDateISO(inputDate);\n\n if (isAvailable) {\n const isNotValidDate = validDates.length && !validDates.includes(isoString);\n const isInvalidDate = invalidDates.length && invalidDates.includes(isoString);\n const isBeforeStartDate = startDate && startDate > isoString;\n const isAfterEndDate = endDate && endDate < isoString;\n\n if (isNotValidDate || isInvalidDate || isBeforeStartDate || isAfterEndDate) {\n isAvailable = false;\n }\n }\n\n if (input.length >= 5 && !isAvailable) {\n isValid = false;\n messageType = 'error';\n const isInvalid = !monthName || !date || !year;\n message = isInvalid\n ? `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`\n : loc('tecton.element.calendar.hint.notAvailableDate', [formatDateLong(inputDate)]);\n }\n } else {\n isValid = false;\n messageType = 'error';\n message = `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`;\n }\n\n return {\n isValid,\n messageType,\n message,\n inputDate,\n isAvailable,\n calendarPosition,\n };\n}\n\nexport function buildInputDate(input: string, assume: string) {\n const now = new Date();\n // eslint-disable-next-line prefer-const\n let [month, day, year] = input.split('/');\n if (month === '0') month = '01';\n if (day === '0') day = '01';\n if (input.length === 10) {\n return new Date(input);\n } else if (month && day && Number(day) > 0) {\n const twoDigitDay = Number(day) < 10 ? `0${Number(day)}` : day;\n const fourDigitYear = !year || year.length < 4 ? assumeYear(month, day, assume) : year;\n return new Date(`${month}/${twoDigitDay}/${fourDigitYear}`);\n } else if (month) {\n return new Date(`${month}/01/${now.getFullYear()}`);\n }\n}\n\nfunction assumeYear(month: string, day: string, assume: string): string {\n const monthDay = `${month}/${day}`;\n const now = new Date();\n const mm: string = now.getMonth() < 9 ? `0${now.getMonth() + 1}` : `${now.getMonth() + 1}`;\n const dd: string = now.getDate() < 10 ? `0${now.getDate()}` : `${now.getDate()}`;\n const nowLocal = `${mm}/${dd}/${now.getFullYear()}`;\n let assumedYear = now.getFullYear();\n if (assume === 'future' && nowLocal.slice(0, 5) > monthDay) {\n assumedYear = now.getFullYear() + 1;\n } else if (assume === 'past' && nowLocal.slice(0, 5) < monthDay) {\n assumedYear = now.getFullYear() - 1;\n }\n return assumedYear.toString();\n}\n\nexport function handleMissingZeros(input): string {\n if (!input) {\n return '';\n }\n if (input.match(/^[1-9]\\/$/)) {\n return `0${input}/`;\n } else if (input.match(/^[0-9]{2}\\/[1-9]{1}\\/$/)) {\n const sp = input.split('/');\n return `${sp[0]}/0${sp[1]}/`;\n }\n return input;\n}\n\nexport function reorderDateString(input: string): string {\n const dateParts = (input || '').split('-');\n if (dateParts.length !== 3) return '';\n return `${dateParts[1]}/${dateParts[2]}/${dateParts[0]}`;\n}\n\nexport function firstDayOfWeekInMonth(month: number, year: number): number {\n return new Date(year, month, 1, 1, 1, 1, 1).getDay();\n}\n\nexport function getDays(): string[] {\n return [\n loc('tecton.element.calendar.days.short.Sunday'),\n loc('tecton.element.calendar.days.short.Monday'),\n loc('tecton.element.calendar.days.short.Tuesday'),\n loc('tecton.element.calendar.days.short.Wednesday'),\n loc('tecton.element.calendar.days.short.Thursday'),\n loc('tecton.element.calendar.days.short.Friday'),\n loc('tecton.element.calendar.days.short.Saturday'),\n ];\n}\n\nexport function getDaysOfWeek(): string[] {\n return [\n loc('tecton.element.calendar.days.Sunday'),\n loc('tecton.element.calendar.days.Monday'),\n loc('tecton.element.calendar.days.Tuesday'),\n loc('tecton.element.calendar.days.Wednesday'),\n loc('tecton.element.calendar.days.Thursday'),\n loc('tecton.element.calendar.days.Friday'),\n loc('tecton.element.calendar.days.Saturday'),\n ];\n}\n\nexport function getMonths(): string[] {\n return [\n loc('tecton.element.calendar.months.January'),\n loc('tecton.element.calendar.months.February'),\n loc('tecton.element.calendar.months.March'),\n loc('tecton.element.calendar.months.April'),\n loc('tecton.element.calendar.months.May'),\n loc('tecton.element.calendar.months.June'),\n loc('tecton.element.calendar.months.July'),\n loc('tecton.element.calendar.months.August'),\n loc('tecton.element.calendar.months.September'),\n loc('tecton.element.calendar.months.October'),\n loc('tecton.element.calendar.months.November'),\n loc('tecton.element.calendar.months.December'),\n ];\n}\n","import { firstDayOfWeekInMonth } from './q2-calendar-helpers';\nimport { getDaysInMonth, isSameDay, isBefore, isAfter, isValid as isValidDate } from 'date-fns';\nimport { CalendarDay, DateEmpty, Year, IDateValidators, ISelectedMonthYear } from './q2-calendar-types';\n\n// Validation Helpers\nexport type DateList = CalendarDay[];\nexport type IsValid = boolean;\nexport type IsActivityDate = boolean;\nexport type DateValidation = (date: Date) => IsValid;\n\nexport function generateDatesFromMonthYear(month: number, year: Year): Date[] {\n const daysInMonth = getDaysInMonth(new Date(year, month));\n\n return [...Array(daysInMonth).keys()].reduce((acc, stepIndex) => {\n acc.push(new Date(year, month, stepIndex + 1));\n return acc;\n }, []);\n}\n\nexport function getValidDaysOfWeek(checksum: number = 127): number[] {\n /* tslint:disable:no-bitwise */\n const sunValid = checksum & 1;\n const monValid = checksum & 2;\n const tuesValid = checksum & 4;\n const wedsValid = checksum & 8;\n const thursValid = checksum & 16;\n const friValid = checksum & 32;\n const satValid = checksum & 64;\n /* tslint:enable:no-bitwise */\n const ret = [];\n\n if (checksum <= 0) return ret;\n if (sunValid) ret.push(0);\n if (monValid) ret.push(1);\n if (tuesValid) ret.push(2);\n if (wedsValid) ret.push(3);\n if (thursValid) ret.push(4);\n if (friValid) ret.push(5);\n if (satValid) ret.push(6);\n\n return ret;\n}\n\nexport function validateAgainstChecksum(validDaysOfWeek: number[], newDate: Date): IsValid {\n return validDaysOfWeek.includes(newDate.getDay());\n}\n\nexport function validateAgainstBlacklist(invalidDates: Date[], newDate: Date): IsValid {\n return !validateAgainstWhitelist(invalidDates, newDate);\n}\n\nexport function validateAgainstWhitelist(validDates: Date[], newDate: Date): IsValid {\n return validDates.some(validDate => isSameDay(validDate, newDate));\n}\n\nexport function buildDates(\n validDaysOfWeek: number[],\n validDates: Date[],\n invalidDates: Date[],\n selectedMonthYear: ISelectedMonthYear,\n currentSelection: Date | undefined,\n dateValidators: IDateValidators,\n typedValue: string\n): DateList {\n const validationFns = [baseValidation.bind(null, dateValidators, new Date())];\n if (validDates?.length) {\n validationFns.push(validateAgainstWhitelist.bind(null, validDates));\n } else {\n validationFns.push(validateAgainstChecksum.bind(null, validDaysOfWeek));\n }\n validationFns.push(validateAgainstBlacklist.bind(null, invalidDates));\n\n return generateDateList(selectedMonthYear, currentSelection, dateValidators, validationFns, typedValue);\n}\n\nexport function generateDateList(\n { monthIndex, selectedYear }: ISelectedMonthYear,\n currentSelection: Date | undefined,\n dateValidators: IDateValidators,\n validationFns: DateValidation[],\n typedValue: string\n): DateList {\n const isIncompleteDate = !isValidDate(new Date(typedValue));\n const datesInMonth = generateDatesFromMonthYear(monthIndex, selectedYear).map((dayInMonth, dateIndex) => {\n const isInvalid = validationFns.some(fn => !fn(dayInMonth));\n const dayState = getDayState(dayInMonth, dateValidators, currentSelection);\n const classList = generateClassesForCalDay({\n ...dayState,\n isInvalid,\n isIncompleteDate,\n });\n\n return {\n ...dayState,\n isValid: !isInvalid,\n date: dayInMonth,\n integer: dateIndex + 1,\n isEmpty: false,\n isActivity: false,\n classList,\n };\n });\n\n const startOfMonthEmpties = addEmptiesMonthStart(firstDayOfWeekInMonth(monthIndex, selectedYear));\n const endOfMonthEmpties = addEmptiesMonthEnd((startOfMonthEmpties.length + datesInMonth.length) % 7);\n\n return [...startOfMonthEmpties, ...datesInMonth, ...endOfMonthEmpties] as CalendarDay[];\n}\n\nexport function baseValidation(dateValidators: IDateValidators, now: Date, newDate: Date): boolean {\n const isNewDateBeforeStartDate = isAfter(dateValidators?.startDate, newDate);\n const isNewDateAfterEndDate = isBefore(dateValidators?.endDate, newDate);\n const isNowAfterCutoffTime = isSameDay(now, newDate) && isAfter(now, dateValidators?.cutOffTime);\n\n return !(isNewDateBeforeStartDate || isNowAfterCutoffTime || isNewDateAfterEndDate);\n}\n\nexport function getDayState(dayInMonth: Date, dateValidators: IDateValidators, currentDate: Date | undefined) {\n if (!currentDate) currentDate = new Date();\n const isSelected = currentDate && isSameDay(currentDate, dayInMonth);\n const isToday = isSameDay(dayInMonth, new Date());\n const isStartDate = isSameDay(dayInMonth, dateValidators?.startDate);\n const isEndDate = isSameDay(dayInMonth, dateValidators?.endDate);\n\n return { isSelected, isToday, isStartDate, isEndDate };\n}\n\nexport function generateClassesForCalDay({\n isInvalid,\n isSelected,\n isEndDate,\n isStartDate,\n isToday,\n isIncompleteDate,\n}: {\n isInvalid: boolean;\n isSelected: boolean;\n isEndDate: boolean;\n isStartDate: boolean;\n isToday: boolean;\n isIncompleteDate: boolean;\n}): string {\n const classes = [];\n if (!isInvalid) classes.push('is-valid');\n if (isSelected) classes.push('is-selected');\n if (isEndDate) classes.push('is-end-date');\n if (isStartDate) classes.push('is-start-date');\n if (isToday) classes.push('is-today');\n if (isSelected && isInvalid && !isIncompleteDate) classes.push('is-unavailable');\n\n return classes.join(' ');\n}\n\nexport function addEmptiesMonthStart(monthStartDayOfWeek: number): DateEmpty[] {\n return addEmptyDates(0, monthStartDayOfWeek);\n}\n\nexport function addEmptiesMonthEnd(monthEndDayOfWeek: number): DateEmpty[] {\n if (monthEndDayOfWeek === 0) return [];\n return addEmptyDates(monthEndDayOfWeek, 7);\n}\n\nexport const emptyDate: DateEmpty = {\n date: null,\n integer: null,\n isActivity: false,\n isEmpty: true,\n isValid: false,\n isToday: false,\n isSelected: false,\n isStartDate: false,\n isEndDate: false,\n classList: '',\n};\n\nexport function addEmptyDates(from: number, to: number): DateEmpty[] {\n if (from === 7) from = 0;\n return [...Array(to - from).keys()].map(() => ({ ...emptyDate }) as DateEmpty);\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n:host[hidden] {\n display: none;\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n\nq2-input {\n margin: 0;\n cursor: pointer;\n}\n\nq2-popover {\n --comp-min-tappable-size: 44px;\n --comp-table-border-spacing: 2px;\n --comp-min-tappable-size-and-spacing: calc(var(--comp-min-tappable-size) + var(--comp-table-border-spacing));\n --comp-popover-padding: #{var-list(var-prefixer(calendar-popover-padding), --app-scale-1x, 5px)};\n --comp-min-table-width: calc(var(--comp-min-tappable-size-and-spacing) * 7);\n --comp-table-container-border-spacing: calc(var(--comp-table-border-spacing) * 2);\n --comp-popover-total-padding: calc(var(--comp-popover-padding) * 2);\n\n --tct-popover-min-width: calc(\n var(--comp-min-table-width) + var(--comp-table-container-border-spacing) + var(--comp-popover-total-padding)\n );\n}\n\n.calendar-field-popup {\n padding: var(--comp-popover-padding);\n}\n\n.calendar-label {\n --comp-label-padding: #{var-list(\n --tct-calendar-label-padding,\n unquote('#{var-list(var-prefixer(calendar-label-vertical-padding), --tct-scale-2, --app-scale-2x, 10px)} 0')\n )};\n font-size: var-list(var-prefixer(calendar-label-font-size), 16px);\n flex: 1 1;\n flex-basis: calc(100% - var-list(--tct-btn-icon-width, 44px));\n margin: 0;\n padding: var(--comp-label-padding);\n}\n\n.cal-month-heading {\n padding: 0 0 0.75rem;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: var-list(var-prefixer(calendar-month-font-size), 16px);\n font-weight: var-list(var-prefixer(calendar-month-font-weight), 600);\n text-align: center;\n}\n\n.cal-month-text {\n min-width: 82px;\n display: inline-block;\n}\n\n.cal-year-text {\n min-width: 50px;\n display: inline-block;\n}\n\ntable {\n width: 100%;\n margin-bottom: 2px;\n text-align: center;\n border-spacing: var(--comp-table-border-spacing);\n}\n\nth {\n font-size: var-list(var-prefixer(calendar-day-heading-font-size), inherit);\n font-weight: var-list(var-prefixer(calendar-day-heading-font-weight), 600);\n width: 14.285714%;\n}\n\ntd {\n height: var(--comp-min-tappable-size);\n cursor: pointer;\n border: var-list(var-prefixer(calendar-day-border), 0);\n border-radius: var-list(var-prefixer(calendar-day-border-radius));\n\n &.is-unavailable {\n border: 1px solid var-list(--tct-input-error-border-color, --const-stoplight-alert, #d20a0a);\n }\n\n &.is-valid:hover {\n border: var-list(var-prefixer(calendar-day-hover-border), var-prefixer(calendar-day-border) 0);\n border-radius: var-list(\n var-prefixer(calendar-day-hover-border-radius),\n var-prefixer(calendar-day-border-radius)\n );\n\n background: var-list(\n --tct-calendar-day-hover-background,\n var-prefixer(calendar-day-hover-bg),\n --tct-gray-14,\n --app-gray14,\n --tct-gray-l4,\n --app-gray-l4,\n #f2f2f2\n );\n color: var-list(var-prefixer(calendar-day-hover-font-color), inherit);\n }\n\n &[aria-hidden],\n &[aria-disabled] {\n pointer-events: none;\n cursor: not-allowed;\n }\n\n &[aria-disabled] {\n opacity: var-list(var-prefixer(calendar-day-disabled-opacity), --app-disabled-opacity, 0.4);\n }\n\n &[aria-selected] {\n border: var-list(var-prefixer(calendar-day-selected-border), var-prefixer(calendar-day-border) 0);\n border-radius: var-list(\n var-prefixer(calendar-day-selected-border-radius),\n var-prefixer(calendar-day-border-radius)\n );\n background: var-list(\n --tct-calendar-day-selected-background,\n var-prefixer(calendar-day-selected-bg),\n --tct-calendar-day-hover-background,\n var-prefixer(calendar-day-hover-bg),\n var-prefixer(gray-14),\n --tct-gray-l4,\n --app-gray-l4,\n #f2f2f2\n );\n color: var-list(\n var-prefixer(calendar-day-selected-font-color),\n var-prefixer(calendar-day-hover-font-color),\n inherit\n );\n box-shadow: 0 0 0 2px\n var-list(\n var-prefixer(calendar-day-selected-outline-color),\n --tct-stoplight-info,\n --const-stoplight-info,\n #0079c1\n );\n }\n}\n\n.today-decorator {\n text-transform: uppercase;\n font-weight: 700;\n font-size: 10px;\n height: 12px;\n}\n\n.calendar-disclaimer {\n font-size: var-list(\n var-prefixer(calendar-disclaimer-font-size),\n --tct-font-size-small,\n --app-font-size-small,\n 12px\n );\n border-style: solid;\n border-width: var-list(var-prefixer(calendar-disclaimer-border-width), unquote('1px 0 0 0'));\n border-color: var-list(\n var-prefixer(calendar-disclaimer-border-color),\n var-prefixer(gray-13),\n --tct-gray-l3,\n --app-gray-l3,\n #e6e6e6\n );\n padding: var-list(--tct-calendar-disclaimer-padding, --tct-scale-2, --app-scale-2x, 10px);\n text-align: left;\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n Listen,\n Watch,\n Method,\n h,\n} from '@stencil/core';\nimport { ISelectedMonthYear, CalendarDay, IDateValidators } from './q2-calendar-types';\nimport { addDays, isSameDay, format, isValid as isValidDate } from 'date-fns';\nimport {\n stringToDate,\n setupMonthYear,\n getMonths,\n getDays,\n getDaysOfWeek,\n stringArrayToDate,\n convertMomentFormat,\n validateInput,\n handleMissingZeros,\n formatDateISO,\n formatDateShort,\n IMomentLikeObject,\n removeTimezoneOffset,\n reorderDateString,\n formatDateFull,\n} from './q2-calendar-helpers';\nimport { buildDates, getValidDaysOfWeek, DateList } from './q2-calendar-validation';\nimport {\n handleAriaLabel,\n loc,\n overrideFocus,\n isEventFromElement,\n handleRenamedProp,\n waitForNextPaint,\n} from '../../utils';\nimport { IEventDetail } from '../q2-input/q2-input-types';\nimport { Q2InputCustomEvent } from 'src/components';\n\n@Component({ tag: 'q2-calendar', shadow: true, styleUrl: 'q2-calendar.scss' })\nexport class Q2Calendar implements ComponentInterface {\n /**\n * Detects the year automatically based on today's date when the user presses the `Escape` key or the `Blur` mouse event occurs.\n * Setting `future` or `past` as the value will increase or decrease the year by one, respectively.\n */\n @Prop({ reflect: true }) assume: 'current' | 'future' | 'past' = 'current';\n\n /** A label shown at the top of the popover date picker. */\n @Prop({ reflect: true }) calendarLabel: string;\n\n /** Display a button in the input field allowing the user to clear their selection. */\n @Prop({ reflect: true }) clearable: boolean;\n\n /**\n * Specifies a time of day after which a date is no longer valid.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true }) cutoffTime: string;\n\n /**\n * The most concise way to define valid days of the week for calendar. Each day of the week has a checksum value:\n *\n * - Sunday = 1\n * - Monday = 2\n * - Tuesday = 4\n * - Wednesday = 8\n * - Thursday = 16\n * - Friday = 32\n * - Saturday = 64\n *\n * Add the checksum values of your desired valid days together, and set `daysOfWeekChecksum` to that summed value.\n *\n * **Example:**\n * @snippet\n * element.daysOfWeekChecksum = 127 // All days of the week are valid\n * element.daysOfWeekChecksum = 62; // Only weekdays are valid\n * element.daysOfWeekChecksum = 65; // Only Saturday and Sunday are valid\n *\n */\n @Prop({ reflect: true }) daysOfWeekChecksum: number;\n\n /** Disable the input field. */\n @Prop({ reflect: true }) disabled: boolean;\n\n /**\n * Text that displays as the placeholder when the field is marked `disabled`.\n * @localizable\n */\n @Prop({ reflect: true }) disabledMsg: string;\n\n /** Text that appears at the bottom of the popover date picker. */\n @Prop({ reflect: true }) disclaimer: string;\n\n /**\n * Determines the display format of the date field value.\n *\n * Must follow the [date-fns](https://date-fns.org/v2.28.0/docs/format) token specification.\n */\n @Prop({ reflect: true }) displayFormat: string;\n\n /**\n * Defines the last selectable date in the date picker popover.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true }) endDate: string;\n\n /**\n * Each item in the `errors` array will appear below the input field when the field is focused and `typeable` is `true`.\n * @localizable\n */\n @Prop({ mutable: true }) errors: string[];\n\n /** Hide the input field's ` <label> ` element from view. */\n @Prop({ reflect: true, mutable: true }) hideLabel: boolean;\n\n /**\n * Each item in the `hints` array will appear below the input field when the field is focused and `typeable` is true.\n * @localizable\n */\n @Prop({ mutable: true }) hints: string[];\n\n /** Show error styles when the calendar is in an errant state. */\n @Prop({ reflect: true, mutable: true }) invalid: boolean;\n\n /**\n * Defines an explicit date blacklist.\n *\n * @warning\n * Must be a valid ISO date string.\n *\n * @info\n * When explicit date definitions like `invalidDates` is used, other date validity methods like `daysOfWeekChecksum` are overriden.\n */\n @Prop() invalidDates: string[];\n\n /** The visible label for the `q2-calendar` input field. */\n @Prop({ reflect: true, mutable: true }) label: string;\n\n /** Determine whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true }) open: boolean;\n\n /** Appends \"(optional)\" to the label and sets `aria-required=\"false\"`. */\n @Prop({ reflect: true }) optional: boolean;\n\n /**\n * Text that appears within the input field when it is blurred and empty.\n * Placeholder text disappears when the user focuses on the field and provides input.\n */\n @Prop({ reflect: true }) placeholder: string;\n\n /** Aligns the popover date picker to the left or right side of the input field. */\n @Prop() popoverAlignment: 'left' | 'right';\n\n /**\n * Force the direction of the popover date picker when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ mutable: true }) popoverDirection: 'up' | 'down';\n\n /** @deprecated */\n @Prop() popoverMinHeight: number = 355;\n\n /**\n * The field's content is not editable, but the field remains focusable.\n *\n * Appends \"(readonly)\" to the field label. Supersedes `optional` if both are `true`.\n */\n @Prop({ reflect: true }) readonly: boolean;\n\n /**\n * Defines the first selectabe date in the date picker popover.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true }) startDate: string;\n\n /** The user can type in the field. Only available in desktop browsers. */\n @Prop({ reflect: true }) typeable: boolean;\n\n /**\n * Defines an explicit date whitelist.\n *\n * @warning\n * Must be a valid ISO date string.\n *\n * @info\n * When explicit date definitions like `validDates` is used, other date validity methods like `daysOfWeekChecksum` are overriden.\n */\n @Prop() validDates: string[];\n\n /**\n * The value of the `q2-calendar` element, e.g. the selected date.\n *\n * **How to change or clear the value with javascript:**\n * @snippet\n * // change date\n * element.value = '2022-12-21';\n * // clear date\n * element.value = null;\n */\n @Prop({ mutable: true, reflect: true }) value: string | { toDate(): Date };\n\n /** @deprecated */\n @Prop({ reflect: true }) popDirection: 'up' | 'down';\n /** @deprecated */\n @Prop() onsuccess: (e: CustomEvent) => void;\n /** @deprecated */\n @Prop({ reflect: true }) buttonLabel: string;\n /** @deprecated */\n @Prop({ reflect: true, mutable: true }) ariaLabel: string;\n\n @Element() hostElement: HTMLElement;\n\n @State() keyboardSelection: boolean = false;\n @State() typedValue: string = '';\n @State() dateList: CalendarDay[];\n @State() hintMessage: string = this.defaultHintMessage;\n @State() hintMessageType: 'info' | 'error' = 'info';\n formatModifier: string = 'M/D/YYYY'; // To allow missing leading zero, 4/3/2021 => converts into 04/03/2021\n hintMessageElement: HTMLQ2MessageElement;\n controlElement: HTMLQ2InputElement;\n btnCalendarToggle: HTMLQ2BtnElement;\n calendarTable: HTMLTableElement;\n btnPrevMonth: HTMLQ2BtnElement;\n btnNextMonth: HTMLQ2BtnElement;\n btnPrevYear: HTMLQ2BtnElement;\n btnNextYear: HTMLQ2BtnElement;\n calendarBody: HTMLDivElement;\n defaultFormatString = 'mm/dd/yyyy';\n selectedMonthYear: ISelectedMonthYear;\n scheduledAfterRender: (() => void)[] = [];\n privatePopDirection: 'up' | 'down';\n popoverElement?: HTMLQ2PopoverElement;\n\n connectedCallback() {\n this.selectedMonthYear = setupMonthYear(this.dateValue);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n if (this.value && this.isTypeable && !this.typedValue) {\n this.typedValue = reorderDateString(this.value as string);\n }\n this.validateDate();\n }\n\n componentWillLoad() {\n this.popDirectionHandler();\n handleAriaLabel(this);\n }\n\n componentDidRender() {\n setTimeout(() => {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }, 25);\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n }\n\n dayAbbrStrings = getDays();\n dayStrings = getDaysOfWeek();\n monthStrings = getMonths();\n\n get selectedDate() {\n const selectedCell = this.calendarBody?.querySelector<HTMLTableCellElement>('[aria-selected=\"true\"]');\n return selectedCell ? removeTimezoneOffset(new Date(selectedCell.dataset.date)) : null;\n }\n\n get innerInputField(): HTMLInputElement | HTMLButtonElement {\n return this.controlElement?.shadowRoot?.querySelector('.input-field');\n }\n\n get innerInputContainer(): HTMLElement {\n return this.controlElement?.shadowRoot?.querySelector('.input-container');\n }\n\n get defaultHintMessage() {\n return this.typeable\n ? loc('tecton.element.calendar.hint.format') + ': ' + this.defaultFormatString\n : loc('tecton.element.calendar.hint.select');\n }\n\n get canClear() {\n if (this.isTypeable) {\n return this.clearable && !!this.typedValue;\n } else {\n return this.clearable && !!this.value;\n }\n }\n\n get currentWeeks() {\n const weeks = this.dateList.reduce<CalendarDay[][]>((accum, item, index) => {\n const chunkIndex = Math.floor(index / 7);\n\n if (!accum[chunkIndex]) {\n accum[chunkIndex] = [];\n }\n\n accum[chunkIndex].push(item);\n\n return accum;\n }, []);\n\n return weeks;\n }\n\n get formattedValue() {\n const { typedValue, dateValue, displayFormat, isTypeable } = this;\n if (isTypeable) return typedValue;\n\n if (dateValue === undefined) return '';\n if (displayFormat) return format(dateValue, convertMomentFormat(displayFormat));\n\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n }).format(dateValue);\n }\n\n get computedPlaceholder(): string {\n if (this.disabled && this.disabledMsg) {\n return loc(this.disabledMsg);\n }\n\n if (this.buttonLabel && (this.disabled || this.placeholder)) {\n return loc(this.buttonLabel);\n }\n\n return (this.placeholder && loc(this.placeholder)) || '';\n }\n\n get dateValue(): Date | undefined {\n if (this.isTypeable) {\n return stringToDate(this.typedValue);\n } else {\n let { value } = this;\n const isMoment = value && typeof value !== 'string' && 'toDate' in value;\n if (isMoment) return (value as IMomentLikeObject).toDate();\n\n // stringified moment value assigned in html template e.g.) handlebar\n const isMomentString =\n typeof value === 'string' && value.split(' ').length === 6 && /GMT-\\d{4}/g.test(value);\n if (isMomentString) {\n value = formatDateISO(value as string);\n }\n\n return stringToDate(value as string);\n }\n }\n\n get dateValidators(): IDateValidators {\n const ct = new Date(this.cutoffTime || ''); // should fallback to InvalidDate\n return {\n startDate: stringToDate(this.startDate),\n endDate: stringToDate(this.endDate),\n cutOffTime: isValidDate(ct) ? ct : undefined,\n };\n }\n\n get isTypeable(): boolean {\n return this.typeable;\n }\n\n get errorList() {\n const { errors, hintMessageType, hintMessage, invalid } = this;\n if (Array.isArray(errors) && errors.length) return errors.filter(error => !!error).map(error => loc(error));\n if (hintMessageType === 'error' && hintMessage) return [hintMessage];\n if (invalid) return ['tecton.element.calendar.invalid'];\n return [];\n }\n\n get hintList() {\n const { hints, hintMessageType, hintMessage } = this;\n if (Array.isArray(hints) && hints.length) return hints.filter(hint => !!hint).map(hint => loc(hint));\n if (hintMessageType === 'info' && hintMessage) return [hintMessage];\n return [];\n }\n\n //////// Host Element Events ////////\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onchange && !!event.detail) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('error')\n defaultErrorHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onerror) {\n const { errors } = this;\n if (Array.isArray(errors) && errors.includes('tecton.element.calendar.hint.invalidDate')) {\n return;\n }\n this.errors = (errors || []).concat(['tecton.element.calendar.hint.invalidDate']);\n }\n }\n\n @Listen('success')\n defaultSuccessHandler(event: CustomEvent) {\n if (event.target !== this.hostElement) {\n return;\n }\n\n if (typeof this.onsuccess === 'function') {\n this.onsuccess(event);\n } else {\n const { errors } = this;\n if (Array.isArray(errors) && errors.includes('tecton.element.calendar.hint.invalidDate')) {\n this.errors = errors.filter(x => x !== 'tecton.element.calendar.hint.invalidDate');\n }\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.controlElement.shadowRoot.querySelector<HTMLElement>('.input-field').focus();\n }\n\n @Listen('clear')\n handleClear() {\n this.change.emit({ value: null });\n this.value = null;\n this.typedValue = '';\n }\n\n @Listen('popoverStateChanged')\n popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n }\n\n /// Methods ///\n _togglePopover() {\n const toggleElement = this.typeable ? this.btnCalendarToggle : this.innerInputField;\n toggleElement?.click();\n toggleElement?.focus();\n toggleElement.dispatchEvent(new FocusEvent('focus'));\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover if it is hidden.\n *\n * @testOnly\n */\n @Method()\n async openPopover() {\n if (this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to hide the popover if it is visible.\n *\n * @testOnly\n */\n @Method()\n async closePopover() {\n if (!this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover, moving to the correct month and year, and clicking the\n * provided date.\n *\n * While a `string` value can be passed, we recommended passing a `Date` object. If the value is invalid, the method\n * will not select the date.\n *\n * @testOnly\n */\n @Method()\n async setValue(value: string | Date) {\n const date = typeof value === 'string' ? stringToDate(value) : value;\n if (!isValidDate(date)) return;\n\n await this.openPopover();\n await waitForNextPaint();\n\n this.goToMonthYear(date.getMonth(), date.getFullYear());\n await waitForNextPaint();\n const tableCell = this.calendarTable?.querySelector<HTMLTableCellElement>(\n `td[data-date=\"${formatDateISO(date)}\"]`\n );\n tableCell?.click();\n }\n\n /**\n * Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n *\n * While a `string` value can be passed, we recommended passing a `Date` object. If the value is invalid, the method\n * will not select the date.\n *\n * @warning\n * Only applicable when the input is typeable.\n *\n * @testOnly\n */\n @Method()\n async typeValue(value: string | Date) {\n if (!this.typeable) return;\n\n const date = typeof value === 'string' ? stringToDate(value) : value;\n const formattedDate = formatDateShort(date);\n if (!isValidDate(date)) return;\n\n const { innerInputField, controlElement } = this;\n innerInputField.focus();\n innerInputField.dispatchEvent(new FocusEvent('focus'));\n innerInputField.value = formattedDate;\n innerInputField.dispatchEvent(new InputEvent('input'));\n controlElement.dispatchEvent(new KeyboardEvent('keyup'));\n }\n\n //////// Observers //////////\n @Watch('popDirection')\n popDirectionHandler() {\n handleRenamedProp(this, 'popDirection', 'popoverDirection');\n }\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('typeable')\n typeableChanged() {\n this.valueObserver(this.value);\n }\n\n @Watch('value')\n valueObserver(newValue: string | IMomentLikeObject) {\n // resetting by empty string\n if (newValue === '') {\n this.value = undefined;\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n return;\n }\n const isMoment = newValue && typeof newValue !== 'string' && 'toDate' in newValue;\n const newDate = isMoment ? (newValue as IMomentLikeObject).toDate() : stringToDate(newValue as string);\n const shortFormattedValue = formatDateShort(newDate);\n if (this.isTypeable) {\n this.typedValue = shortFormattedValue;\n } else {\n this.controlElement.value = shortFormattedValue;\n this.selectedMonthYear = setupMonthYear(newDate);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n // reset hint when value is cleared\n if (this.invalid) return;\n\n if (shortFormattedValue) {\n this.setHints({\n isValid: true,\n message: null,\n messageType: null,\n });\n } else {\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n }\n }\n\n @Watch('daysOfWeekChecksum')\n daysOfWeekChecksumObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('validDates')\n validDatesObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('invalidDates')\n invalidDatesObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('startDate')\n startDateObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('endDate')\n endDateObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('cutoffTime')\n cutoffTimeObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n ///////// Event /////////\n /**\n * Emitted when a date is selected or typed in the input field.\n * @legacyEvent\n */\n @Event() change: EventEmitter<{\n // ISO formatted date\n value: string | null;\n }>;\n\n /**\n * Emitted when an invalid date is entered into the field.\n */\n @Event() error: EventEmitter<{ errors: { message: string; errorCode: string }[] }>;\n\n /**\n * Emitted when a valid date is entered or selected.\n */\n @Event() success: EventEmitter<{\n // ISO formatted date\n value: string;\n }>;\n\n ///// Actions ////////\n\n buildDateList(monthYear: ISelectedMonthYear): DateList {\n const invalidDates = stringArrayToDate(this.invalidDates);\n const validDaysOfWeek = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const validDates = stringArrayToDate(this.validDates);\n return buildDates(\n validDaysOfWeek,\n validDates,\n invalidDates,\n monthYear,\n this.dateValue,\n this.dateValidators,\n this.typedValue\n );\n }\n\n validateDate() {\n try {\n if (!!this.value) {\n const { dateValue } = this;\n const month = dateValue?.getMonth() ?? undefined;\n const year = dateValue?.getFullYear() ?? undefined;\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n\n const isSelectedMonthAndYear = month === monthIndex && year === selectedYear;\n let calculationDateList = [];\n\n if (!dateValue) {\n calculationDateList = [];\n } else if (isSelectedMonthAndYear) {\n calculationDateList = this.dateList;\n } else {\n calculationDateList = this.buildDateList({\n monthIndex: month,\n selectedYear: year,\n });\n }\n\n const dateValueDayOfMonth = dateValue?.getDate() ?? undefined;\n const isDateValueInvalid = dateValueDayOfMonth\n ? !calculationDateList.find(({ integer }) => integer === dateValueDayOfMonth).isValid\n : true;\n\n if (isDateValueInvalid) {\n this.error.emit({\n errors: [\n {\n message: `Value passed is invalid: The date ${this.value} is not valid`,\n errorCode: 'generalInvalid',\n },\n ],\n });\n } else {\n this.success.emit({ value: formatDateISO(dateValue) });\n }\n }\n } catch (error) {\n console.warn('Invalid moment value ', this.dateValue);\n }\n }\n\n focusInput() {\n this.controlElement?.focus();\n }\n\n closeCalendar = () => {\n if (!this.open) return;\n this.open = false;\n this.focusInput();\n };\n\n openCalendar = () => {\n if (this.readonly || this.open) return;\n this.selectedMonthYear = setupMonthYear(this.dateValue);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.open = true;\n };\n\n toggleCalendar = () => {\n if (this.readonly) return;\n if (this.open) {\n this.closeCalendar();\n } else {\n this.openCalendar();\n }\n };\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n this.closeCalendar();\n }\n };\n\n onPopupKeyup = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.onInputBlur();\n this.closeCalendar();\n }\n };\n\n onInputInput = ({ detail: { value } }: Q2InputCustomEvent<IEventDetail> & InputEvent) => {\n this.typedValue = value;\n };\n\n onInputKeydown = (event: KeyboardEvent) => {\n const { dateValue } = this;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.openCalendar();\n this.activateDay(dateValue || new Date());\n break;\n }\n };\n\n onInputKeyup = (event: KeyboardEvent) => {\n if (this.disabled) {\n return;\n }\n\n switch (event.key) {\n case 'Escape':\n this.onInputBlur();\n this.closeCalendar();\n break;\n }\n\n if (!this.isTypeable) return;\n\n // handle missing zero in month and date\n this.typedValue = handleMissingZeros(this.typedValue);\n const { typedValue } = this;\n const validDays = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const { isValid, message, messageType, inputDate, isAvailable, calendarPosition } = validateInput(\n typedValue,\n validDays,\n this.validDates,\n this.invalidDates,\n this.startDate,\n this.endDate,\n this.defaultFormatString,\n this.assume\n );\n\n if (calendarPosition) {\n const [mm, dd, yyyy] = calendarPosition;\n const date = new Date(`${yyyy}-${mm}-${dd}`);\n\n if (isValidDate(date)) {\n this.selectedMonthYear = setupMonthYear(date);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n }\n\n if (event.key === 'Enter') {\n if (\n isValid ||\n (typedValue &&\n typedValue.length > 4 && // at least mm/dd provided\n inputDate &&\n isValidDate(inputDate) &&\n isAvailable)\n ) {\n this.setCompleteInput(inputDate);\n } else if (this.value) {\n this.value = null;\n this.change.emit({ value: null });\n this.typedValue = typedValue;\n }\n\n if (this.keyboardSelection) {\n this.keyboardSelection = false;\n this.closeCalendar();\n } else {\n this.toggleCalendar();\n }\n } else {\n this.setHints({ isValid, message, messageType });\n }\n };\n\n onInputChange = (event: Event) => {\n event.stopPropagation();\n };\n\n onInputBlur = () => {\n if (!this.isTypeable) return;\n\n const validDays = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const { typedValue } = this;\n const { isValid, inputDate, isAvailable } = validateInput(\n this.typedValue,\n validDays,\n this.validDates,\n this.invalidDates,\n this.startDate,\n this.endDate,\n this.defaultFormatString,\n this.assume\n );\n\n if (!typedValue && inputDate?.toString() === 'Invalid Date') {\n // initial/clear state\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n } else if (\n isValid ||\n (typedValue &&\n typedValue.length > 4 && // at least mm/dd provided\n inputDate &&\n isValidDate(inputDate) &&\n isAvailable)\n ) {\n this.setCompleteInput(inputDate);\n } else if (this.value) {\n this.value = null;\n this.change.emit({ value: null });\n this.typedValue = typedValue;\n }\n };\n\n onInputFocus = (event: FocusEvent) => {\n if (!this.isTypeable) return;\n if (event.target === this.controlElement) this.closeCalendar();\n };\n\n onInputClick = () => {\n if (this.disabled) return;\n this.toggleCalendar();\n };\n\n onRefocus = () => {\n this.btnPrevMonth?.dispatchEvent(new FocusEvent('focus'));\n };\n\n goToMonthYear = (monthIndex: number, year: number) => {\n if (monthIndex < 0) {\n monthIndex = 11;\n year--;\n } else if (monthIndex > 11) {\n monthIndex = 0;\n year++;\n }\n this.selectedMonthYear = {\n monthIndex,\n selectedYear: year,\n };\n this.dateList = this.buildDateList(this.selectedMonthYear);\n\n this.scheduledAfterRender.push(() => this.checkActiveCellForBlankness());\n };\n\n checkActiveCellForBlankness() {\n const activeElement = this.hostElement.shadowRoot.activeElement;\n if (!activeElement || activeElement.tagName !== 'TD' || !activeElement.hasAttribute('aria-hidden')) return;\n\n const { calendarBody } = this;\n const calendarCells = Array.from(calendarBody.querySelectorAll<Element>('td'));\n const indexOfCell = Array.from(calendarCells).indexOf(activeElement);\n\n const dayToFocus =\n indexOfCell < 15 ? 1 : calendarCells.filter(cell => !cell.hasAttribute('aria-hidden')).length;\n\n this.focusDay(this.generateDateFromDay(dayToFocus));\n }\n\n selectDate = (newDate: Date) => {\n const { isValid } = this.dateList.find(({ date }) => isSameDay(date, newDate));\n if (!isValid) return;\n this.change.emit({ value: formatDateISO(newDate) });\n this.typedValue = formatDateShort(newDate);\n this.invalid = false;\n };\n\n onDateSelection = (event: MouseEvent) => {\n const dateCell = (event.target as HTMLElement).closest<HTMLElement>('td:not([aria-hidden])');\n if (!dateCell) return;\n const clickedDate = removeTimezoneOffset(new Date(dateCell.dataset.date));\n this.selectDate(clickedDate);\n this.closeCalendar();\n };\n\n generateDateFromDay(day: number) {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n return new Date(selectedYear, monthIndex, day);\n }\n\n onHeaderControlKeydown = (event: KeyboardEvent) => {\n const currentDate = this.generateDateFromDay(1);\n const hasSelectedCell = this.calendarBody?.querySelector<HTMLTableCellElement>('[aria-selected=\"true\"]');\n\n if (event.key === 'Tab' && !hasSelectedCell) {\n event.preventDefault();\n this.activateDay(currentDate);\n }\n };\n\n onDateKeydown = (event: KeyboardEvent) => {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n const currentDay = parseInt((event.target as HTMLElement).dataset.day);\n const currentDate = this.generateDateFromDay(currentDay);\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -7));\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 7));\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 1));\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -1));\n break;\n\n case 'PageUp':\n event.preventDefault();\n if (event.shiftKey) this.goToMonthYear(monthIndex, selectedYear - 1);\n else this.goToMonthYear(monthIndex - 1, selectedYear);\n break;\n\n case 'PageDown':\n event.preventDefault();\n if (event.shiftKey) this.goToMonthYear(monthIndex, selectedYear + 1);\n else this.goToMonthYear(monthIndex + 1, selectedYear);\n break;\n\n case 'Home':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -currentDate.getDay()));\n break;\n\n case 'End':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 6 - currentDate.getDay()));\n break;\n\n case 'Escape':\n event.preventDefault();\n this.closeCalendar();\n this.focusInput();\n break;\n\n case 'Enter':\n event.preventDefault();\n if (!this.dateList.find(({ date }) => isSameDay(date, currentDate)).isValid) return;\n this.selectDate(currentDate);\n this.closeCalendar();\n this.focusInput();\n break;\n\n case ' ':\n event.preventDefault();\n if (!this.dateList.find(({ date }) => isSameDay(date, currentDate)).isValid) return;\n this.selectDate(currentDate);\n this.focusInput();\n break;\n }\n };\n\n activateDay(date: Date) {\n this.goToMonthYear(date.getMonth(), date.getFullYear());\n this.scheduledAfterRender.push(() => this.focusDay(date));\n }\n\n async focusDay(date: Date) {\n if (!date) return;\n await waitForNextPaint();\n this.calendarBody.querySelector<HTMLElement>(`td[data-day=\"${date.getDate()}\"]`)?.focus();\n }\n\n render() {\n return (\n <click-elsewhere\n class={this.open ? 'dropdown-open' : undefined}\n onChange={this.onClickElsewhere}\n >\n {this.inputField()}\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.innerInputContainer}\n open={this.open}\n direction={this.popoverDirection}\n minHeight={this.popoverMinHeight}\n align={this.popoverAlignment}\n block\n >\n {this.hintField()}\n {this.calendarPopover()}\n </q2-popover>\n </click-elsewhere>\n );\n }\n\n hintField() {\n if (!this.hintMessage) return;\n\n return (\n <q2-message\n class=\"calendar-hint sr\"\n ref={el => (this.hintMessageElement = el)}\n type={this.hintMessageType}\n >\n {this.hintMessage}\n </q2-message>\n );\n }\n\n setHints({ isValid, message, messageType }) {\n if (message === this.hintMessage) return this.hintMessageElement?.present();\n this.invalid = !isValid;\n this.hintMessage = message;\n this.hintMessageType = messageType;\n }\n\n setCompleteInput(inputDate: Date) {\n const formattedDate = formatDateShort(inputDate);\n this.change.emit({ value: formatDateISO(inputDate) });\n this.typedValue = formattedDate;\n\n this.setHints({\n isValid: true,\n message: null,\n messageType: null,\n });\n }\n\n inputField() {\n const { isTypeable } = this;\n return (\n <q2-input\n ref={el => (this.controlElement = el)}\n class=\"calendar-input-field\"\n value={this.formattedValue}\n label={loc(this.label)}\n hideLabel={this.hideLabel}\n disabled={!!this.disabled}\n readonly={!!this.readonly}\n clearable={this.canClear}\n placeholder={this.computedPlaceholder}\n optional={!!this.optional}\n ariaExpanded={`${!!this.open}`}\n hints={this.hintList}\n errors={this.errorList}\n onClick={isTypeable ? undefined : this.onInputClick}\n onChange={this.onInputChange}\n onInput={this.onInputInput}\n onKeyDown={this.onInputKeydown}\n onKeyUp={this.onInputKeyup}\n onBlur={this.onInputBlur}\n onFocus={this.onInputFocus}\n icon-right={isTypeable ? undefined : 'calendar'}\n format-modifier={isTypeable ? this.formatModifier : this.displayFormat || this.formatModifier}\n pseudo={!isTypeable}\n type=\"date\"\n hide-messages={!isTypeable}\n test-id=\"inputAndCalendarToggle\"\n >\n {isTypeable && (\n <q2-btn\n ref={el => (this.btnCalendarToggle = el)}\n slot=\"input-right\"\n onClick={this.onInputClick}\n test-id=\"calendarToggle\"\n label=\"tecton.element.calendar.toggleAriaLabel\"\n hide-label\n >\n <q2-icon type=\"calendar\" />\n </q2-btn>\n )}\n </q2-input>\n );\n }\n\n calendarPopover() {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n return (\n <div\n class=\"calendar-field-popup\"\n onKeyUp={this.onPopupKeyup}\n >\n {this.calendarLabel && <p class=\"calendar-label\">{loc(this.calendarLabel)}</p>}\n <div class=\"cal-month-heading\">\n <q2-btn\n label={loc('tecton.element.calendar.previousMonth')}\n hide-label\n ref={elm => (this.btnPrevMonth = elm)}\n class=\"cal-nav-btn prev-month\"\n test-id=\"previousMonthButton\"\n onClick={() => this.goToMonthYear(monthIndex - 1, selectedYear)}\n >\n <q2-icon type=\"chevron-left\" />\n </q2-btn>\n <span class=\"cal-month-text\">{this.monthStrings[monthIndex]}</span>\n <q2-btn\n label={loc('tecton.element.calendar.nextMonth')}\n hide-label\n class=\"cal-nav-btn next-month\"\n ref={elm => (this.btnNextMonth = elm)}\n test-id=\"nextMonthButton\"\n onClick={() => this.goToMonthYear(monthIndex + 1, selectedYear)}\n >\n <q2-icon type=\"chevron-right\" />\n </q2-btn>\n <q2-btn\n label={loc('tecton.element.calendar.previousYear')}\n hide-label\n class=\"cal-nav-btn prev-year\"\n ref={elm => (this.btnPrevYear = elm)}\n test-id=\"previousYearButton\"\n onClick={() => this.goToMonthYear(monthIndex, selectedYear - 1)}\n >\n <q2-icon type=\"chevron-left\" />\n </q2-btn>\n <span class=\"cal-year-text\">{this.selectedMonthYear.selectedYear}</span>\n <q2-btn\n label={loc('tecton.element.calendar.nextYear')}\n hide-label\n class=\"cal-nav-btn next-year\"\n ref={elm => (this.btnNextYear = elm)}\n test-id=\"nextYearButton\"\n onClick={() => this.goToMonthYear(monthIndex, selectedYear + 1)}\n onKeyDown={this.onHeaderControlKeydown}\n >\n <q2-icon type=\"chevron-right\" />\n </q2-btn>\n </div>\n <div\n class=\"sr\"\n aria-live=\"polite\"\n id=\"table-label\"\n >\n {`${this.monthStrings[monthIndex]} ${selectedYear}`}\n </div>\n {this.calendarDays()}\n {this.disclaimer && <div class=\"calendar-disclaimer\">{loc(this.disclaimer)}</div>}\n <q2-btn\n class=\"sr refocus-popup\"\n onFocus={this.onRefocus}\n />\n </div>\n );\n }\n\n calendarDays() {\n return (\n <table\n role=\"grid\"\n aria-labelledby=\"table-label\"\n ref={ref => (this.calendarTable = ref)}\n >\n <thead>\n <tr>\n {[...Array(7).keys()].map(index => (\n <th\n scope=\"col\"\n aria-label={this.dayStrings[index]}\n >\n {this.dayAbbrStrings[index]}\n </th>\n ))}\n </tr>\n </thead>\n <tbody\n onClick={this.onDateSelection}\n onKeyDown={this.onDateKeydown}\n ref={elm => (this.calendarBody = elm)}\n test-id=\"calendarTableBody\"\n >\n {this.currentWeeks.map(week => (\n <tr>\n {week.map(day => {\n let ariaLabel = '';\n if (day.isToday) ariaLabel = `${loc('tecton.element.calendar.today')}, `;\n ariaLabel += formatDateFull(day.date);\n if (day.isSelected) ariaLabel += ` (${loc('tecton.element.calendar.selected')})`;\n return (\n <td\n class={day.classList}\n aria-hidden={day.isEmpty ? 'true' : undefined}\n tabindex={day.isSelected ? 0 : -1}\n role={day.isSelected ? 'gridcell' : undefined}\n aria-selected={day.isSelected ? 'true' : undefined}\n aria-disabled={day.isValid ? undefined : 'true'}\n data-day={day.integer || undefined}\n data-date={day.date ? formatDateISO(day.date) : undefined}\n >\n {day?.isToday && (\n <div\n class=\"today-decorator\"\n aria-hidden=\"true\"\n >\n {loc('tecton.element.calendar.today')}\n </div>\n )}\n <div aria-label={ariaLabel}>{day?.integer ?? ''}</div>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n}\n"],"mappings":"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"}