igniteui-webcomponents 6.4.0-alpha.4 → 6.5.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 (431) hide show
  1. package/CHANGELOG.md +141 -2
  2. package/README.md +65 -56
  3. package/components/button/themes/button/dark/button.indigo.css.js +1 -1
  4. package/components/button/themes/button/dark/button.indigo.css.js.map +1 -1
  5. package/components/button/themes/button/dark/button.material.css.js +1 -1
  6. package/components/button/themes/button/dark/button.material.css.js.map +1 -1
  7. package/components/button/themes/button/light/button.indigo.css.js +1 -1
  8. package/components/button/themes/button/light/button.indigo.css.js.map +1 -1
  9. package/components/button/themes/button/light/button.material.css.js +1 -1
  10. package/components/button/themes/button/light/button.material.css.js.map +1 -1
  11. package/components/button/themes/button/shared/button.bootstrap.css.js +1 -1
  12. package/components/button/themes/button/shared/button.bootstrap.css.js.map +1 -1
  13. package/components/button/themes/button/shared/button.common.css.js +1 -1
  14. package/components/button/themes/button/shared/button.common.css.js.map +1 -1
  15. package/components/button/themes/button/shared/button.fluent.css.js +1 -1
  16. package/components/button/themes/button/shared/button.fluent.css.js.map +1 -1
  17. package/components/button/themes/button/shared/button.indigo.css.js +1 -1
  18. package/components/button/themes/button/shared/button.indigo.css.js.map +1 -1
  19. package/components/button/themes/button/shared/button.material.css.js +1 -1
  20. package/components/button/themes/button/shared/button.material.css.js.map +1 -1
  21. package/components/button-group/themes/dark/button-group.material.css.js +1 -1
  22. package/components/button-group/themes/dark/button-group.material.css.js.map +1 -1
  23. package/components/button-group/themes/light/button-group.material.css.js +1 -1
  24. package/components/button-group/themes/light/button-group.material.css.js.map +1 -1
  25. package/components/button-group/themes/shared/button/button.bootstrap.css.js +1 -1
  26. package/components/button-group/themes/shared/button/button.bootstrap.css.js.map +1 -1
  27. package/components/button-group/themes/shared/button/button.material.css.js +1 -1
  28. package/components/button-group/themes/shared/button/button.material.css.js.map +1 -1
  29. package/components/calendar/base.d.ts +7 -3
  30. package/components/calendar/base.js +10 -14
  31. package/components/calendar/base.js.map +1 -1
  32. package/components/calendar/calendar.d.ts +48 -44
  33. package/components/calendar/calendar.js +263 -259
  34. package/components/calendar/calendar.js.map +1 -1
  35. package/components/calendar/days-view/days-view.d.ts +49 -27
  36. package/components/calendar/days-view/days-view.js +170 -168
  37. package/components/calendar/days-view/days-view.js.map +1 -1
  38. package/components/calendar/helpers.js +40 -28
  39. package/components/calendar/helpers.js.map +1 -1
  40. package/components/calendar/model.d.ts +9 -3
  41. package/components/calendar/model.js +29 -19
  42. package/components/calendar/model.js.map +1 -1
  43. package/components/calendar/months-view/months-view.d.ts +6 -8
  44. package/components/calendar/months-view/months-view.js +25 -38
  45. package/components/calendar/months-view/months-view.js.map +1 -1
  46. package/components/calendar/themes/dark/calendar.bootstrap.css.js +1 -1
  47. package/components/calendar/themes/dark/calendar.bootstrap.css.js.map +1 -1
  48. package/components/calendar/themes/dark/calendar.fluent.css.js +1 -1
  49. package/components/calendar/themes/dark/calendar.fluent.css.js.map +1 -1
  50. package/components/calendar/themes/dark/calendar.indigo.css.js +1 -1
  51. package/components/calendar/themes/dark/calendar.indigo.css.js.map +1 -1
  52. package/components/calendar/themes/dark/calendar.material.css.js +1 -1
  53. package/components/calendar/themes/dark/calendar.material.css.js.map +1 -1
  54. package/components/calendar/themes/days.js +8 -23
  55. package/components/calendar/themes/days.js.map +1 -1
  56. package/components/calendar/themes/light/calendar.bootstrap.css.js +1 -1
  57. package/components/calendar/themes/light/calendar.bootstrap.css.js.map +1 -1
  58. package/components/calendar/themes/light/calendar.fluent.css.js +1 -1
  59. package/components/calendar/themes/light/calendar.fluent.css.js.map +1 -1
  60. package/components/calendar/themes/light/calendar.indigo.css.js +1 -1
  61. package/components/calendar/themes/light/calendar.indigo.css.js.map +1 -1
  62. package/components/calendar/themes/light/calendar.material.css.js +1 -1
  63. package/components/calendar/themes/light/calendar.material.css.js.map +1 -1
  64. package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js +1 -1
  65. package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js.map +1 -1
  66. package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js +1 -1
  67. package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js.map +1 -1
  68. package/components/calendar/themes/shared/fluent/days-view.fluent.css.js +1 -1
  69. package/components/calendar/themes/shared/fluent/days-view.fluent.css.js.map +1 -1
  70. package/components/calendar/themes/shared/indigo/days-view.indigo.css.js +1 -1
  71. package/components/calendar/themes/shared/indigo/days-view.indigo.css.js.map +1 -1
  72. package/components/calendar/themes/shared/material/days-view.material.css.js +1 -1
  73. package/components/calendar/themes/shared/material/days-view.material.css.js.map +1 -1
  74. package/components/calendar/themes/year-month.js +8 -23
  75. package/components/calendar/themes/year-month.js.map +1 -1
  76. package/components/calendar/years-view/years-view.d.ts +6 -5
  77. package/components/calendar/years-view/years-view.js +11 -14
  78. package/components/calendar/years-view/years-view.js.map +1 -1
  79. package/components/carousel/carousel.d.ts +2 -1
  80. package/components/carousel/carousel.js.map +1 -1
  81. package/components/checkbox/checkbox-base.d.ts +1 -1
  82. package/components/checkbox/themes/light/checkbox/checkbox.material.css.js +1 -1
  83. package/components/checkbox/themes/light/checkbox/checkbox.material.css.js.map +1 -1
  84. package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js +1 -1
  85. package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js.map +1 -1
  86. package/components/checkbox/themes/shared/switch/switch.common.css.js +1 -1
  87. package/components/checkbox/themes/shared/switch/switch.common.css.js.map +1 -1
  88. package/components/checkbox/themes/shared/switch/switch.fluent.css.js +1 -1
  89. package/components/checkbox/themes/shared/switch/switch.fluent.css.js.map +1 -1
  90. package/components/checkbox/themes/shared/switch/switch.indigo.css.js +1 -1
  91. package/components/checkbox/themes/shared/switch/switch.indigo.css.js.map +1 -1
  92. package/components/checkbox/themes/shared/switch/switch.material.css.js +1 -1
  93. package/components/checkbox/themes/shared/switch/switch.material.css.js.map +1 -1
  94. package/components/chip/chip.d.ts +2 -1
  95. package/components/chip/chip.js.map +1 -1
  96. package/components/chip/themes/dark/chip.fluent.css.js +1 -1
  97. package/components/chip/themes/dark/chip.fluent.css.js.map +1 -1
  98. package/components/chip/themes/dark/chip.indigo.css.js +1 -1
  99. package/components/chip/themes/dark/chip.indigo.css.js.map +1 -1
  100. package/components/chip/themes/light/chip.fluent.css.js +1 -1
  101. package/components/chip/themes/light/chip.fluent.css.js.map +1 -1
  102. package/components/chip/themes/light/chip.indigo.css.js +1 -1
  103. package/components/chip/themes/light/chip.indigo.css.js.map +1 -1
  104. package/components/chip/themes/light/chip.shared.css.js +1 -1
  105. package/components/chip/themes/light/chip.shared.css.js.map +1 -1
  106. package/components/chip/themes/shared/chip.indigo.css.js +1 -1
  107. package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
  108. package/components/combo/combo.d.ts +3 -2
  109. package/components/combo/combo.js +7 -0
  110. package/components/combo/combo.js.map +1 -1
  111. package/components/combo/controllers/selection.js.map +1 -1
  112. package/components/combo/validators.js +2 -2
  113. package/components/combo/validators.js.map +1 -1
  114. package/components/common/controllers/async-consumer.js.map +1 -1
  115. package/components/common/controllers/focus-ring.js +1 -5
  116. package/components/common/controllers/focus-ring.js.map +1 -1
  117. package/components/common/controllers/root-click.js +46 -21
  118. package/components/common/controllers/root-click.js.map +1 -1
  119. package/components/common/definitions/defineAllComponents.js +2 -0
  120. package/components/common/definitions/defineAllComponents.js.map +1 -1
  121. package/components/common/i18n/EN/calendar.resources.js +4 -1
  122. package/components/common/i18n/EN/calendar.resources.js.map +1 -1
  123. package/components/common/i18n/EN/date-range-picker.resources.js.map +1 -1
  124. package/components/common/i18n/i18n-controller.js +6 -9
  125. package/components/common/i18n/i18n-controller.js.map +1 -1
  126. package/components/common/i18n/utils.d.ts +0 -12
  127. package/components/common/i18n/utils.js +0 -12
  128. package/components/common/i18n/utils.js.map +1 -1
  129. package/components/common/mixins/forms/associated.js +3 -23
  130. package/components/common/mixins/forms/associated.js.map +1 -1
  131. package/components/common/util.d.ts +5 -0
  132. package/components/common/util.js +5 -0
  133. package/components/common/util.js.map +1 -1
  134. package/components/common/validators.d.ts +2 -4
  135. package/components/common/validators.js +13 -19
  136. package/components/common/validators.js.map +1 -1
  137. package/components/date-picker/date-picker.d.ts +7 -3
  138. package/components/date-picker/date-picker.js +2 -2
  139. package/components/date-picker/date-picker.js.map +1 -1
  140. package/components/date-picker/themes/dark/date-picker.bootstrap.css.js +1 -1
  141. package/components/date-picker/themes/dark/date-picker.bootstrap.css.js.map +1 -1
  142. package/components/date-picker/themes/dark/date-picker.fluent.css.js +1 -1
  143. package/components/date-picker/themes/dark/date-picker.fluent.css.js.map +1 -1
  144. package/components/date-picker/themes/dark/date-picker.indigo.css.js +1 -1
  145. package/components/date-picker/themes/dark/date-picker.indigo.css.js.map +1 -1
  146. package/components/date-picker/themes/dark/date-picker.material.css.js +1 -1
  147. package/components/date-picker/themes/dark/date-picker.material.css.js.map +1 -1
  148. package/components/date-picker/themes/light/date-picker.bootstrap.css.js +1 -1
  149. package/components/date-picker/themes/light/date-picker.bootstrap.css.js.map +1 -1
  150. package/components/date-picker/themes/light/date-picker.fluent.css.js +1 -1
  151. package/components/date-picker/themes/light/date-picker.fluent.css.js.map +1 -1
  152. package/components/date-picker/themes/light/date-picker.indigo.css.js +1 -1
  153. package/components/date-picker/themes/light/date-picker.indigo.css.js.map +1 -1
  154. package/components/date-picker/themes/light/date-picker.material.css.js +1 -1
  155. package/components/date-picker/themes/light/date-picker.material.css.js.map +1 -1
  156. package/components/date-picker/validators.js +2 -3
  157. package/components/date-picker/validators.js.map +1 -1
  158. package/components/date-range-picker/date-range-picker.d.ts +7 -2
  159. package/components/date-range-picker/date-range-picker.js +13 -10
  160. package/components/date-range-picker/date-range-picker.js.map +1 -1
  161. package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js +1 -1
  162. package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js.map +1 -1
  163. package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js +1 -1
  164. package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js.map +1 -1
  165. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js +1 -1
  166. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js.map +1 -1
  167. package/components/date-range-picker/themes/dark/date-range-picker.material.css.js +1 -1
  168. package/components/date-range-picker/themes/dark/date-range-picker.material.css.js.map +1 -1
  169. package/components/date-range-picker/themes/light/date-range-picker.bootstrap.css.js +1 -1
  170. package/components/date-range-picker/themes/light/date-range-picker.bootstrap.css.js.map +1 -1
  171. package/components/date-range-picker/themes/light/date-range-picker.fluent.css.js +1 -1
  172. package/components/date-range-picker/themes/light/date-range-picker.fluent.css.js.map +1 -1
  173. package/components/date-range-picker/themes/light/date-range-picker.indigo.css.js +1 -1
  174. package/components/date-range-picker/themes/light/date-range-picker.indigo.css.js.map +1 -1
  175. package/components/date-range-picker/themes/light/date-range-picker.material.css.js +1 -1
  176. package/components/date-range-picker/themes/light/date-range-picker.material.css.js.map +1 -1
  177. package/components/date-range-picker/validators.js +5 -8
  178. package/components/date-range-picker/validators.js.map +1 -1
  179. package/components/date-time-input/date-time-input.d.ts +10 -3
  180. package/components/date-time-input/date-time-input.js +39 -21
  181. package/components/date-time-input/date-time-input.js.map +1 -1
  182. package/components/date-time-input/date-util.d.ts +11 -9
  183. package/components/date-time-input/date-util.js +23 -219
  184. package/components/date-time-input/date-util.js.map +1 -1
  185. package/components/dialog/dialog.d.ts +2 -0
  186. package/components/dialog/dialog.js +18 -9
  187. package/components/dialog/dialog.js.map +1 -1
  188. package/components/dialog/themes/dark/dialog.fluent.css.js +1 -1
  189. package/components/dialog/themes/dark/dialog.fluent.css.js.map +1 -1
  190. package/components/dialog/themes/light/dialog.fluent.css.js +1 -1
  191. package/components/dialog/themes/light/dialog.fluent.css.js.map +1 -1
  192. package/components/dialog/themes/shared/dialog.bootstrap.css.js +1 -1
  193. package/components/dialog/themes/shared/dialog.bootstrap.css.js.map +1 -1
  194. package/components/dialog/themes/shared/dialog.indigo.css.js +1 -1
  195. package/components/dialog/themes/shared/dialog.indigo.css.js.map +1 -1
  196. package/components/expansion-panel/themes/light/expansion-panel.bootstrap.css.js +1 -1
  197. package/components/expansion-panel/themes/light/expansion-panel.bootstrap.css.js.map +1 -1
  198. package/components/file-input/file-input.d.ts +28 -13
  199. package/components/file-input/file-input.js +73 -46
  200. package/components/file-input/file-input.js.map +1 -1
  201. package/components/input/input-base.d.ts +31 -34
  202. package/components/input/input-base.js +58 -83
  203. package/components/input/input-base.js.map +1 -1
  204. package/components/input/input.d.ts +18 -7
  205. package/components/input/input.js +34 -19
  206. package/components/input/input.js.map +1 -1
  207. package/components/input/themes/dark/input.indigo.css.js +1 -1
  208. package/components/input/themes/dark/input.indigo.css.js.map +1 -1
  209. package/components/input/themes/light/input.indigo.css.js +1 -1
  210. package/components/input/themes/light/input.indigo.css.js.map +1 -1
  211. package/components/input/themes/light/input.shared.css.js +1 -1
  212. package/components/input/themes/light/input.shared.css.js.map +1 -1
  213. package/components/input/themes/shared/input.bootstrap.css.js +1 -1
  214. package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
  215. package/components/input/themes/shared/input.common.css.js +1 -1
  216. package/components/input/themes/shared/input.common.css.js.map +1 -1
  217. package/components/input/themes/shared/input.fluent.css.js +1 -1
  218. package/components/input/themes/shared/input.fluent.css.js.map +1 -1
  219. package/components/input/themes/shared/input.indigo.css.js +1 -1
  220. package/components/input/themes/shared/input.indigo.css.js.map +1 -1
  221. package/components/input/themes/shared/input.material.css.js +1 -1
  222. package/components/input/themes/shared/input.material.css.js.map +1 -1
  223. package/components/input/validators.js +3 -3
  224. package/components/input/validators.js.map +1 -1
  225. package/components/list/themes/dark/container/list.bootstrap.css.js +1 -1
  226. package/components/list/themes/dark/container/list.bootstrap.css.js.map +1 -1
  227. package/components/list/themes/light/container/list.fluent.css.js +1 -1
  228. package/components/list/themes/light/container/list.fluent.css.js.map +1 -1
  229. package/components/list/themes/shared/item/list-item.common.css.js +1 -1
  230. package/components/list/themes/shared/item/list-item.common.css.js.map +1 -1
  231. package/components/list/themes/shared/item/list-item.indigo.css.js +1 -1
  232. package/components/list/themes/shared/item/list-item.indigo.css.js.map +1 -1
  233. package/components/mask-input/mask-input-base.d.ts +10 -4
  234. package/components/mask-input/mask-input-base.js +21 -16
  235. package/components/mask-input/mask-input-base.js.map +1 -1
  236. package/components/mask-input/mask-input.d.ts +9 -3
  237. package/components/mask-input/mask-input.js +26 -6
  238. package/components/mask-input/mask-input.js.map +1 -1
  239. package/components/mask-input/mask-parser.d.ts +30 -7
  240. package/components/mask-input/mask-parser.js +70 -42
  241. package/components/mask-input/mask-parser.js.map +1 -1
  242. package/components/mask-input/validators.js +3 -3
  243. package/components/mask-input/validators.js.map +1 -1
  244. package/components/nav-drawer/themes/dark/container/nav-drawer.fluent.css.js +1 -1
  245. package/components/nav-drawer/themes/dark/container/nav-drawer.fluent.css.js.map +1 -1
  246. package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js +1 -1
  247. package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js.map +1 -1
  248. package/components/nav-drawer/themes/light/container/nav-drawer.material.css.js +1 -1
  249. package/components/nav-drawer/themes/light/container/nav-drawer.material.css.js.map +1 -1
  250. package/components/navbar/themes/shared/navbar.common.css.js +1 -1
  251. package/components/navbar/themes/shared/navbar.common.css.js.map +1 -1
  252. package/components/radio/themes/light/radio.material.css.js +1 -1
  253. package/components/radio/themes/light/radio.material.css.js.map +1 -1
  254. package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
  255. package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
  256. package/components/radio/themes/shared/radio.common.css.js +1 -1
  257. package/components/radio/themes/shared/radio.common.css.js.map +1 -1
  258. package/components/radio/themes/shared/radio.fluent.css.js +1 -1
  259. package/components/radio/themes/shared/radio.fluent.css.js.map +1 -1
  260. package/components/radio/themes/shared/radio.indigo.css.js +1 -1
  261. package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
  262. package/components/radio/themes/shared/radio.material.css.js +1 -1
  263. package/components/radio/themes/shared/radio.material.css.js.map +1 -1
  264. package/components/radio/validators.js +2 -2
  265. package/components/radio/validators.js.map +1 -1
  266. package/components/rating/themes/dark/rating.indigo.css.js +1 -1
  267. package/components/rating/themes/dark/rating.indigo.css.js.map +1 -1
  268. package/components/rating/themes/light/rating.indigo.css.js +1 -1
  269. package/components/rating/themes/light/rating.indigo.css.js.map +1 -1
  270. package/components/ripple/ripple.d.ts +3 -3
  271. package/components/ripple/ripple.js +34 -31
  272. package/components/ripple/ripple.js.map +1 -1
  273. package/components/stepper/step.js +2 -2
  274. package/components/stepper/step.js.map +1 -1
  275. package/components/stepper/themes/step/dark/step.bootstrap.css.js +1 -1
  276. package/components/stepper/themes/step/dark/step.bootstrap.css.js.map +1 -1
  277. package/components/stepper/themes/step/dark/step.fluent.css.js +1 -1
  278. package/components/stepper/themes/step/dark/step.fluent.css.js.map +1 -1
  279. package/components/stepper/themes/step/dark/step.indigo.css.js +1 -1
  280. package/components/stepper/themes/step/dark/step.indigo.css.js.map +1 -1
  281. package/components/stepper/themes/step/dark/step.material.css.js +1 -1
  282. package/components/stepper/themes/step/dark/step.material.css.js.map +1 -1
  283. package/components/stepper/themes/step/light/step.bootstrap.css.js +1 -1
  284. package/components/stepper/themes/step/light/step.bootstrap.css.js.map +1 -1
  285. package/components/stepper/themes/step/light/step.fluent.css.js +1 -1
  286. package/components/stepper/themes/step/light/step.fluent.css.js.map +1 -1
  287. package/components/stepper/themes/step/light/step.indigo.css.js +1 -1
  288. package/components/stepper/themes/step/light/step.indigo.css.js.map +1 -1
  289. package/components/stepper/themes/step/light/step.material.css.js +1 -1
  290. package/components/stepper/themes/step/light/step.material.css.js.map +1 -1
  291. package/components/stepper/themes/step/light/step.shared.css.js +1 -1
  292. package/components/stepper/themes/step/light/step.shared.css.js.map +1 -1
  293. package/components/stepper/themes/step/shared/step.common.css.js +1 -1
  294. package/components/stepper/themes/step/shared/step.common.css.js.map +1 -1
  295. package/components/stepper/themes/step/shared/step.indigo.css.js +1 -1
  296. package/components/stepper/themes/step/shared/step.indigo.css.js.map +1 -1
  297. package/components/tabs/tab-dom.js +8 -9
  298. package/components/tabs/tab-dom.js.map +1 -1
  299. package/components/tabs/themes/dark/tab.bootstrap.css.js +1 -1
  300. package/components/tabs/themes/dark/tab.bootstrap.css.js.map +1 -1
  301. package/components/tabs/themes/dark/tab.fluent.css.js +1 -1
  302. package/components/tabs/themes/dark/tab.fluent.css.js.map +1 -1
  303. package/components/tabs/themes/dark/tab.indigo.css.js +1 -1
  304. package/components/tabs/themes/dark/tab.indigo.css.js.map +1 -1
  305. package/components/tabs/themes/dark/tab.material.css.js +1 -1
  306. package/components/tabs/themes/dark/tab.material.css.js.map +1 -1
  307. package/components/tabs/themes/dark/tab.shared.css.js +1 -1
  308. package/components/tabs/themes/dark/tab.shared.css.js.map +1 -1
  309. package/components/tabs/themes/light/tab.bootstrap.css.js +1 -1
  310. package/components/tabs/themes/light/tab.bootstrap.css.js.map +1 -1
  311. package/components/tabs/themes/light/tab.fluent.css.js +1 -1
  312. package/components/tabs/themes/light/tab.fluent.css.js.map +1 -1
  313. package/components/tabs/themes/light/tab.indigo.css.js +1 -1
  314. package/components/tabs/themes/light/tab.indigo.css.js.map +1 -1
  315. package/components/tabs/themes/light/tab.material.css.js +1 -1
  316. package/components/tabs/themes/light/tab.material.css.js.map +1 -1
  317. package/components/tabs/themes/light/tab.shared.css.js +1 -1
  318. package/components/tabs/themes/light/tab.shared.css.js.map +1 -1
  319. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js +1 -1
  320. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js.map +1 -1
  321. package/components/tabs/themes/shared/tab/tab.common.css.js +1 -1
  322. package/components/tabs/themes/shared/tab/tab.common.css.js.map +1 -1
  323. package/components/tabs/themes/shared/tab/tab.fluent.css.js +1 -1
  324. package/components/tabs/themes/shared/tab/tab.fluent.css.js.map +1 -1
  325. package/components/tabs/themes/shared/tab/tab.indigo.css.js +1 -1
  326. package/components/tabs/themes/shared/tab/tab.indigo.css.js.map +1 -1
  327. package/components/tabs/themes/shared/tab/tab.material.css.js +1 -1
  328. package/components/tabs/themes/shared/tab/tab.material.css.js.map +1 -1
  329. package/components/tabs/themes/shared/tabs/tabs.bootstrap.css.js +1 -1
  330. package/components/tabs/themes/shared/tabs/tabs.bootstrap.css.js.map +1 -1
  331. package/components/tabs/themes/shared/tabs/tabs.common.css.js +1 -1
  332. package/components/tabs/themes/shared/tabs/tabs.common.css.js.map +1 -1
  333. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js +1 -1
  334. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js.map +1 -1
  335. package/components/tabs/themes/shared/tabs/tabs.material.css.js +1 -1
  336. package/components/tabs/themes/shared/tabs/tabs.material.css.js.map +1 -1
  337. package/components/tabs/themes/tabs.base.css.js +1 -1
  338. package/components/tabs/themes/tabs.base.css.js.map +1 -1
  339. package/components/textarea/themes/dark/textarea.indigo.css.js +1 -1
  340. package/components/textarea/themes/dark/textarea.indigo.css.js.map +1 -1
  341. package/components/textarea/themes/light/textarea.indigo.css.js +1 -1
  342. package/components/textarea/themes/light/textarea.indigo.css.js.map +1 -1
  343. package/components/textarea/themes/light/textarea.shared.css.js +1 -1
  344. package/components/textarea/themes/light/textarea.shared.css.js.map +1 -1
  345. package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
  346. package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
  347. package/components/textarea/themes/shared/textarea.common.css.js +1 -1
  348. package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
  349. package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
  350. package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
  351. package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
  352. package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
  353. package/components/textarea/themes/shared/textarea.material.css.js +1 -1
  354. package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
  355. package/components/theme-provider/theme-provider.d.ts +65 -0
  356. package/components/theme-provider/theme-provider.js +58 -0
  357. package/components/theme-provider/theme-provider.js.map +1 -0
  358. package/components/tile-manager/tile.js +6 -3
  359. package/components/tile-manager/tile.js.map +1 -1
  360. package/components/tree/themes/dark/container.bootstrap.css.js +1 -1
  361. package/components/tree/themes/dark/container.bootstrap.css.js.map +1 -1
  362. package/components/tree/themes/light/container.bootstrap.css.js +1 -1
  363. package/components/tree/themes/light/container.bootstrap.css.js.map +1 -1
  364. package/components/tree/tree-item.js +4 -0
  365. package/components/tree/tree-item.js.map +1 -1
  366. package/components/tree/tree.d.ts +14 -0
  367. package/components/tree/tree.js +23 -0
  368. package/components/tree/tree.js.map +1 -1
  369. package/components/validation-container/validation-container.d.ts +0 -1
  370. package/components/validation-container/validation-container.js +6 -9
  371. package/components/validation-container/validation-container.js.map +1 -1
  372. package/custom-elements.json +3176 -2986
  373. package/extras/chat-markdown-renderer.d.ts +72 -4
  374. package/extras/chat-markdown-renderer.js +19 -7
  375. package/extras/chat-markdown-renderer.js.map +1 -1
  376. package/igniteui-webcomponents.html-data.json +1 -1
  377. package/index.d.ts +5 -1
  378. package/index.js +4 -1
  379. package/index.js.map +1 -1
  380. package/package.json +9 -4
  381. package/themes/dark/bootstrap.css +1 -1
  382. package/themes/dark/fluent.css +1 -1
  383. package/themes/dark/indigo.css +1 -1
  384. package/themes/dark/material.css +1 -1
  385. package/themes/light/bootstrap.css +1 -1
  386. package/themes/light/fluent.css +1 -1
  387. package/themes/light/indigo.css +1 -1
  388. package/themes/light/material.css +1 -1
  389. package/theming/context.d.ts +36 -0
  390. package/theming/context.js +3 -0
  391. package/theming/context.js.map +1 -0
  392. package/theming/theming-controller.d.ts +7 -1
  393. package/theming/theming-controller.js +48 -12
  394. package/theming/theming-controller.js.map +1 -1
  395. package/theming/utils.d.ts +10 -0
  396. package/theming/utils.js +8 -42
  397. package/theming/utils.js.map +1 -1
  398. package/web-types.json +1 -1
  399. package/components/common/localization/intl-formatters.d.ts +0 -17
  400. package/components/common/localization/intl-formatters.js +0 -46
  401. package/components/common/localization/intl-formatters.js.map +0 -1
  402. package/components/validation-container/themes/dark/validator.bootstrap.css.d.ts +0 -1
  403. package/components/validation-container/themes/dark/validator.bootstrap.css.js +0 -3
  404. package/components/validation-container/themes/dark/validator.bootstrap.css.js.map +0 -1
  405. package/components/validation-container/themes/dark/validator.fluent.css.d.ts +0 -1
  406. package/components/validation-container/themes/dark/validator.fluent.css.js +0 -3
  407. package/components/validation-container/themes/dark/validator.fluent.css.js.map +0 -1
  408. package/components/validation-container/themes/dark/validator.indigo.css.d.ts +0 -1
  409. package/components/validation-container/themes/dark/validator.indigo.css.js +0 -3
  410. package/components/validation-container/themes/dark/validator.indigo.css.js.map +0 -1
  411. package/components/validation-container/themes/dark/validator.material.css.d.ts +0 -1
  412. package/components/validation-container/themes/dark/validator.material.css.js +0 -3
  413. package/components/validation-container/themes/dark/validator.material.css.js.map +0 -1
  414. package/components/validation-container/themes/light/validator.bootstrap.css.d.ts +0 -1
  415. package/components/validation-container/themes/light/validator.bootstrap.css.js +0 -3
  416. package/components/validation-container/themes/light/validator.bootstrap.css.js.map +0 -1
  417. package/components/validation-container/themes/light/validator.fluent.css.d.ts +0 -1
  418. package/components/validation-container/themes/light/validator.fluent.css.js +0 -3
  419. package/components/validation-container/themes/light/validator.fluent.css.js.map +0 -1
  420. package/components/validation-container/themes/light/validator.indigo.css.d.ts +0 -1
  421. package/components/validation-container/themes/light/validator.indigo.css.js +0 -3
  422. package/components/validation-container/themes/light/validator.indigo.css.js.map +0 -1
  423. package/components/validation-container/themes/light/validator.material.css.d.ts +0 -1
  424. package/components/validation-container/themes/light/validator.material.css.js +0 -3
  425. package/components/validation-container/themes/light/validator.material.css.js.map +0 -1
  426. package/components/validation-container/themes/light/validator.shared.css.d.ts +0 -1
  427. package/components/validation-container/themes/light/validator.shared.css.js +0 -3
  428. package/components/validation-container/themes/light/validator.shared.css.js.map +0 -1
  429. package/components/validation-container/themes/themes.d.ts +0 -2
  430. package/components/validation-container/themes/themes.js +0 -46
  431. package/components/validation-container/themes/themes.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { getDateFormatter } from 'igniteui-i18n-core';
1
2
  import { parseISODate } from '../calendar/helpers.js';
2
3
  import { clamp } from '../common/util.js';
3
4
  export var FormatDesc;
@@ -33,8 +34,6 @@ function isDate(value) {
33
34
  export class DateTimeUtil {
34
35
  static { this.DEFAULT_INPUT_FORMAT = 'MM/dd/yyyy'; }
35
36
  static { this.DEFAULT_TIME_INPUT_FORMAT = 'hh:mm tt'; }
36
- static { this.SEPARATOR = 'literal'; }
37
- static { this.DEFAULT_LOCALE = 'en'; }
38
37
  static { this.PREDEFINED_FORMATS = new Set([
39
38
  'short',
40
39
  'medium',
@@ -78,20 +77,11 @@ export class DateTimeUtil {
78
77
  }
79
78
  return new Date(parts[DateParts.Year] || 2000, parts[DateParts.Month] || 0, parts[DateParts.Date] || 1, parts[DateParts.Hours] || 0, parts[DateParts.Minutes] || 0, parts[DateParts.Seconds] || 0);
80
79
  }
81
- static getDefaultMask(locale) {
82
- const parts = DateTimeUtil.getDefaultLocaleMask(locale || DateTimeUtil.DEFAULT_LOCALE);
83
- if (parts !== undefined) {
84
- parts.forEach((p) => {
85
- if (p.type !== DateParts.Year && p.type !== DateTimeUtil.SEPARATOR) {
86
- p.formatType = FormatDesc.TwoDigits;
87
- }
88
- });
89
- return DateTimeUtil.getMask(parts);
90
- }
91
- return '';
80
+ static getDefaultInputMask(locale) {
81
+ return getDateFormatter().getLocaleDateTimeFormat(locale, true);
92
82
  }
93
- static parseDateTimeFormat(mask, locale = DateTimeUtil.DEFAULT_LOCALE, noLeadingZero = false) {
94
- const format = mask || DateTimeUtil.getDefaultMask(locale);
83
+ static parseDateTimeFormat(mask, locale, leadingZero = false) {
84
+ const format = mask || DateTimeUtil.getDefaultInputMask(locale);
95
85
  const dateTimeParts = [];
96
86
  const formatArray = Array.from(format);
97
87
  let currentPart = null;
@@ -105,7 +95,7 @@ export class DateTimeUtil {
105
95
  continue;
106
96
  }
107
97
  }
108
- DateTimeUtil.addCurrentPart(currentPart, dateTimeParts, noLeadingZero);
98
+ DateTimeUtil.addCurrentPart(currentPart, dateTimeParts, leadingZero);
109
99
  position = currentPart.end;
110
100
  }
111
101
  currentPart = {
@@ -117,7 +107,7 @@ export class DateTimeUtil {
117
107
  }
118
108
  if (!dateTimeParts.filter((p) => p.format.includes(currentPart.format))
119
109
  .length) {
120
- DateTimeUtil.addCurrentPart(currentPart, dateTimeParts, noLeadingZero);
110
+ DateTimeUtil.addCurrentPart(currentPart, dateTimeParts, leadingZero);
121
111
  }
122
112
  const yearPart = dateTimeParts.filter((p) => p.type === DateParts.Year)[0];
123
113
  if (yearPart && yearPart.format !== 'yy') {
@@ -135,41 +125,34 @@ export class DateTimeUtil {
135
125
  }
136
126
  return false;
137
127
  }
138
- static formatDate(value, locale, format, noLeadingZero = false) {
128
+ static formatDisplayDate(value, locale, displayFormat) {
139
129
  const options = {};
140
- let formattedDate = '';
141
- switch (format) {
130
+ switch (displayFormat) {
142
131
  case 'short':
143
132
  case 'long':
144
133
  case 'medium':
145
134
  case 'full':
146
- options.dateStyle = format;
147
- options.timeStyle = format;
135
+ options.dateStyle = displayFormat;
136
+ options.timeStyle = displayFormat;
148
137
  break;
149
138
  case 'shortDate':
150
139
  case 'longDate':
151
140
  case 'mediumDate':
152
141
  case 'fullDate':
153
- options.dateStyle = format.toLowerCase().split('date')[0];
142
+ options.dateStyle = displayFormat.toLowerCase().split('date')[0];
154
143
  break;
155
144
  case 'shortTime':
156
145
  case 'longTime':
157
146
  case 'mediumTime':
158
147
  case 'fullTime':
159
- options.timeStyle = format.toLowerCase().split('time')[0];
148
+ options.timeStyle = displayFormat.toLowerCase().split('time')[0];
160
149
  break;
161
150
  default:
162
- return DateTimeUtil.setDisplayFormatOptions(value, format, locale, noLeadingZero);
163
- }
164
- let formatter;
165
- try {
166
- formatter = new Intl.DateTimeFormat(locale, options);
167
- }
168
- catch {
169
- formatter = new Intl.DateTimeFormat(DateTimeUtil.DEFAULT_LOCALE, options);
151
+ if (displayFormat) {
152
+ return getDateFormatter().formatDateCustomFormat(value, displayFormat, { locale });
153
+ }
170
154
  }
171
- formattedDate = formatter.format(value);
172
- return formattedDate;
155
+ return getDateFormatter().formatDateTime(value, locale, options);
173
156
  }
174
157
  static getPartValue(datePartInfo, partLength, _dateValue) {
175
158
  let maskedValue;
@@ -270,9 +253,11 @@ export class DateTimeUtil {
270
253
  static spinAmPm(newDate, currentDate, amPmFromMask) {
271
254
  let date = new Date(newDate);
272
255
  switch (amPmFromMask) {
256
+ case 'am':
273
257
  case 'AM':
274
258
  date = new Date(newDate.setHours(newDate.getHours() + 12));
275
259
  break;
260
+ case 'pm':
276
261
  case 'PM':
277
262
  date = new Date(newDate.setHours(newDate.getHours() - 12));
278
263
  break;
@@ -339,130 +324,19 @@ export class DateTimeUtil {
339
324
  ? `${format}Date`
340
325
  : format;
341
326
  }
342
- static setDisplayFormatOptions(value, format, locale, noLeadingZero = false) {
343
- const options = {};
344
- const parts = DateTimeUtil.parseDateTimeFormat(format, locale, noLeadingZero);
345
- const datePartFormatOptionMap = new Map([
346
- [DateParts.Date, 'day'],
347
- [DateParts.Month, 'month'],
348
- [DateParts.Year, 'year'],
349
- [DateParts.Hours, 'hour'],
350
- [DateParts.Minutes, 'minute'],
351
- [DateParts.Seconds, 'second'],
352
- [DateParts.AmPm, 'dayPeriod'],
353
- ]);
354
- const dateFormatMap = new Map([
355
- ['d', 'numeric'],
356
- ['dd', '2-digit'],
357
- ['M', 'numeric'],
358
- ['MM', '2-digit'],
359
- ['MMM', 'short'],
360
- ['MMMM', 'long'],
361
- ['MMMMM', 'narrow'],
362
- ['y', 'numeric'],
363
- ['yy', '2-digit'],
364
- ['yyy', 'numeric'],
365
- ['yyyy', 'numeric'],
366
- ['h', 'numeric'],
367
- ['hh', '2-digit'],
368
- ['H', 'numeric'],
369
- ['HH', '2-digit'],
370
- ['m', 'numeric'],
371
- ['mm', '2-digit'],
372
- ['s', 'numeric'],
373
- ['ss', '2-digit'],
374
- ['ttt', 'short'],
375
- ['tttt', 'long'],
376
- ['ttttt', 'narrow'],
377
- ]);
378
- for (const part of parts) {
379
- if (part.type !== DateParts.Literal) {
380
- const option = datePartFormatOptionMap.get(part.type);
381
- const format = dateFormatMap.get(part.format) ||
382
- dateFormatMap.get(part.format.substring(0, 2));
383
- if (option && format) {
384
- options[option] = format;
385
- if (part.type === DateParts.Hours) {
386
- if (part.format.charAt(0) === 'h') {
387
- options.hourCycle = 'h12';
388
- }
389
- else {
390
- options.hourCycle = 'h23';
391
- }
392
- }
393
- }
394
- if (part.type === DateParts.AmPm && part.format.length <= 2) {
395
- options.hour = '2-digit';
396
- options.hourCycle = 'h12';
397
- }
398
- }
399
- }
400
- let formatter;
401
- try {
402
- formatter = new Intl.DateTimeFormat(locale, options);
403
- }
404
- catch {
405
- formatter = new Intl.DateTimeFormat(DateTimeUtil.DEFAULT_LOCALE, options);
406
- }
407
- const formattedParts = formatter.formatToParts(value);
408
- let result = '';
409
- for (const part of parts) {
410
- if (part.type === DateParts.Literal) {
411
- result += part.format;
412
- continue;
413
- }
414
- const option = datePartFormatOptionMap.get(part.type);
415
- result += formattedParts.filter((p) => p.type === option)[0]?.value || '';
416
- }
417
- return result;
418
- }
419
- static getMask(dateStruct) {
420
- const mask = [];
421
- for (const part of dateStruct) {
422
- switch (part.formatType) {
423
- case FormatDesc.Numeric: {
424
- if (part.type === DateParts.Day) {
425
- mask.push('d');
426
- }
427
- else if (part.type === DateParts.Month) {
428
- mask.push('M');
429
- }
430
- else {
431
- mask.push('yyyy');
432
- }
433
- break;
434
- }
435
- case FormatDesc.TwoDigits: {
436
- if (part.type === DateParts.Day) {
437
- mask.push('dd');
438
- }
439
- else if (part.type === DateParts.Month) {
440
- mask.push('MM');
441
- }
442
- else {
443
- mask.push('yy');
444
- }
445
- }
446
- }
447
- if (part.type === DateTimeUtil.SEPARATOR) {
448
- mask.push(part.value);
449
- }
450
- }
451
- return mask.join('');
452
- }
453
- static addCurrentPart(currentPart, dateTimeParts, noLeadingZero = false) {
454
- DateTimeUtil.ensureLeadingZero(currentPart, noLeadingZero);
327
+ static addCurrentPart(currentPart, dateTimeParts, leadingZero = false) {
328
+ DateTimeUtil.ensureLeadingZero(currentPart, leadingZero);
455
329
  currentPart.end = currentPart.start + currentPart.format.length;
456
330
  dateTimeParts.push(currentPart);
457
331
  }
458
- static ensureLeadingZero(part, noLeadingZero = false) {
332
+ static ensureLeadingZero(part, leadingZero = false) {
459
333
  switch (part.type) {
460
334
  case DateParts.Date:
461
335
  case DateParts.Month:
462
336
  case DateParts.Hours:
463
337
  case DateParts.Minutes:
464
338
  case DateParts.Seconds:
465
- if (part.format.length === 1 && !noLeadingZero) {
339
+ if (part.format.length === 1 && leadingZero) {
466
340
  part.format = part.format.repeat(2);
467
341
  }
468
342
  break;
@@ -493,76 +367,6 @@ export class DateTimeUtil {
493
367
  return DateParts.Literal;
494
368
  }
495
369
  }
496
- static getDefaultLocaleMask(locale) {
497
- const dateStruct = [];
498
- let formatter;
499
- try {
500
- formatter = new Intl.DateTimeFormat(locale);
501
- }
502
- catch {
503
- return;
504
- }
505
- const formatToParts = formatter.formatToParts(new Date());
506
- for (const part of formatToParts) {
507
- if (part.type === DateTimeUtil.SEPARATOR) {
508
- dateStruct.push({
509
- type: DateTimeUtil.SEPARATOR,
510
- value: part.value,
511
- });
512
- }
513
- else {
514
- dateStruct.push({
515
- type: part.type,
516
- });
517
- }
518
- }
519
- const formatterOptions = formatter.resolvedOptions();
520
- for (const part of dateStruct) {
521
- switch (part.type) {
522
- case DateParts.Day: {
523
- part.formatType = formatterOptions.day;
524
- break;
525
- }
526
- case DateParts.Month: {
527
- part.formatType = formatterOptions.month;
528
- break;
529
- }
530
- case DateParts.Year: {
531
- part.formatType = formatterOptions.year;
532
- break;
533
- }
534
- }
535
- }
536
- DateTimeUtil.fillDatePartsPositions(dateStruct);
537
- return dateStruct;
538
- }
539
- static fillDatePartsPositions(dateArray) {
540
- let currentPos = 0;
541
- for (const part of dateArray) {
542
- if (part.type === DateParts.Day || part.type === DateParts.Month) {
543
- part.position = [currentPos, currentPos + 2];
544
- currentPos += 2;
545
- }
546
- else if (part.type === DateParts.Year) {
547
- switch (part.formatType) {
548
- case FormatDesc.Numeric: {
549
- part.position = [currentPos, currentPos + 4];
550
- currentPos += 4;
551
- break;
552
- }
553
- case FormatDesc.TwoDigits: {
554
- part.position = [currentPos, currentPos + 2];
555
- currentPos += 2;
556
- break;
557
- }
558
- }
559
- }
560
- else if (part.type === DateTimeUtil.SEPARATOR) {
561
- part.position = [currentPos, currentPos + 1];
562
- currentPos++;
563
- }
564
- }
565
- }
566
370
  static getCleanVal(inputData, datePart, prompt) {
567
371
  return DateTimeUtil.trimEmptyPlaceholders(inputData.substring(datePart.start, datePart.end), prompt);
568
372
  }
@@ -1 +1 @@
1
- {"version":3,"file":"date-util.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-util.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseISODate } from '../calendar/helpers.js';\nimport { clamp } from '../common/util.js';\n\nexport enum FormatDesc {\n Numeric = 'numeric',\n TwoDigits = '2-digit',\n}\n\nexport enum DateParts {\n Day = 'day',\n Month = 'month',\n Year = 'year',\n Date = 'date',\n Hours = 'hours',\n Minutes = 'minutes',\n Seconds = 'seconds',\n AmPm = 'amPm',\n Literal = 'literal',\n}\n\nexport enum DatePart {\n Month = 'month',\n Year = 'year',\n Date = 'date',\n Hours = 'hours',\n Minutes = 'minutes',\n Seconds = 'seconds',\n AmPm = 'amPm',\n}\n\n/** @ignore */\nexport interface DatePartInfo {\n type: DateParts;\n start: number;\n end: number;\n format: string;\n}\n\nexport interface DatePartDeltas {\n date?: number;\n month?: number;\n year?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n}\n\nfunction isDate(value: unknown): value is Date {\n return value instanceof Date;\n}\n\nexport abstract class DateTimeUtil {\n public static readonly DEFAULT_INPUT_FORMAT = 'MM/dd/yyyy';\n public static readonly DEFAULT_TIME_INPUT_FORMAT = 'hh:mm tt';\n private static readonly SEPARATOR = 'literal';\n private static readonly DEFAULT_LOCALE = 'en';\n private static readonly PREDEFINED_FORMATS = new Set([\n 'short',\n 'medium',\n 'long',\n 'full',\n ]);\n\n public static parseValueFromMask(\n inputData: string,\n dateTimeParts: DatePartInfo[],\n promptChar?: string\n ): Date | null {\n const parts: { [key in DateParts]: number } = {} as any;\n dateTimeParts.forEach((dp) => {\n let value = Number.parseInt(\n DateTimeUtil.getCleanVal(inputData, dp, promptChar),\n 10\n );\n if (!value) {\n value =\n dp.type === DateParts.Date || dp.type === DateParts.Month ? 1 : 0;\n }\n parts[dp.type] = value;\n });\n parts[DateParts.Month] -= 1;\n\n if (parts[DateParts.Month] < 0 || 11 < parts[DateParts.Month]) {\n return null;\n }\n\n // TODO: Century threshold\n if (parts[DateParts.Year] < 50) {\n parts[DateParts.Year] += 2000;\n }\n\n if (\n parts[DateParts.Date] >\n DateTimeUtil.daysInMonth(parts[DateParts.Year], parts[DateParts.Month])\n ) {\n return null;\n }\n\n if (\n parts[DateParts.Hours] > 23 ||\n parts[DateParts.Minutes] > 59 ||\n parts[DateParts.Seconds] > 59\n ) {\n return null;\n }\n\n const amPm = dateTimeParts.find((p) => p.type === DateParts.AmPm);\n if (amPm) {\n parts[DateParts.Hours] %= 12;\n }\n\n if (\n amPm &&\n DateTimeUtil.getCleanVal(inputData, amPm, promptChar).toLowerCase() ===\n 'pm'\n ) {\n parts[DateParts.Hours] += 12;\n }\n\n return new Date(\n parts[DateParts.Year] || 2000,\n parts[DateParts.Month] || 0,\n parts[DateParts.Date] || 1,\n parts[DateParts.Hours] || 0,\n parts[DateParts.Minutes] || 0,\n parts[DateParts.Seconds] || 0\n );\n }\n\n public static getDefaultMask(locale: string): string {\n const parts = DateTimeUtil.getDefaultLocaleMask(\n locale || DateTimeUtil.DEFAULT_LOCALE\n );\n\n if (parts !== undefined) {\n parts.forEach((p: any) => {\n if (p.type !== DateParts.Year && p.type !== DateTimeUtil.SEPARATOR) {\n p.formatType = FormatDesc.TwoDigits;\n }\n });\n\n return DateTimeUtil.getMask(parts);\n }\n\n return '';\n }\n\n public static parseDateTimeFormat(\n mask: string,\n locale: string = DateTimeUtil.DEFAULT_LOCALE,\n noLeadingZero = false\n ): DatePartInfo[] {\n const format = mask || DateTimeUtil.getDefaultMask(locale);\n const dateTimeParts: DatePartInfo[] = [];\n const formatArray = Array.from(format);\n let currentPart: DatePartInfo | null = null;\n let position = 0;\n\n for (let i = 0; i < formatArray.length; i++, position++) {\n const type = DateTimeUtil.determineDatePart(formatArray[i]);\n if (currentPart) {\n if (currentPart.type === type) {\n currentPart.format += formatArray[i];\n if (i < formatArray.length - 1) {\n continue;\n }\n }\n\n DateTimeUtil.addCurrentPart(currentPart, dateTimeParts, noLeadingZero);\n position = currentPart.end;\n }\n\n currentPart = {\n start: position,\n end: position + formatArray[i].length,\n type,\n format: formatArray[i],\n };\n }\n\n // make sure the last member of a format like H:m:s is not omitted\n if (\n !dateTimeParts.filter((p) => p.format.includes(currentPart!.format))\n .length\n ) {\n DateTimeUtil.addCurrentPart(currentPart!, dateTimeParts, noLeadingZero);\n }\n // formats like \"y\" or \"yyy\" are treated like \"yyyy\" while editing\n const yearPart = dateTimeParts.filter((p) => p.type === DateParts.Year)[0];\n if (yearPart && yearPart.format !== 'yy') {\n yearPart.end += 4 - yearPart.format.length;\n yearPart.format = 'yyyy';\n }\n\n return dateTimeParts;\n }\n\n public static parseIsoDate(value: string): Date | null {\n return parseISODate(value);\n }\n\n public static isValidDate(value: any): value is Date {\n if (isDate(value)) {\n return !Number.isNaN(value.getTime());\n }\n\n return false;\n }\n\n public static formatDate(\n value: Date,\n locale: string,\n format: string,\n noLeadingZero = false\n ): string {\n const options: any = {};\n let formattedDate = '';\n\n switch (format) {\n case 'short':\n case 'long':\n case 'medium':\n case 'full':\n options.dateStyle = format;\n options.timeStyle = format;\n break;\n case 'shortDate':\n case 'longDate':\n case 'mediumDate':\n case 'fullDate':\n options.dateStyle = format.toLowerCase().split('date')[0];\n break;\n case 'shortTime':\n case 'longTime':\n case 'mediumTime':\n case 'fullTime':\n options.timeStyle = format.toLowerCase().split('time')[0];\n break;\n default:\n return DateTimeUtil.setDisplayFormatOptions(\n value,\n format,\n locale,\n noLeadingZero\n );\n }\n\n let formatter: Intl.DateTimeFormat;\n try {\n formatter = new Intl.DateTimeFormat(locale, options);\n } catch {\n formatter = new Intl.DateTimeFormat(DateTimeUtil.DEFAULT_LOCALE, options);\n }\n\n formattedDate = formatter.format(value);\n\n return formattedDate;\n }\n\n public static getPartValue(\n datePartInfo: DatePartInfo,\n partLength: number,\n _dateValue: Date | null\n ): string {\n let maskedValue: any;\n const datePart = datePartInfo.type;\n\n switch (datePart) {\n case DateParts.Date:\n maskedValue = _dateValue!.getDate();\n break;\n case DateParts.Month:\n // months are zero based\n maskedValue = _dateValue!.getMonth() + 1;\n break;\n case DateParts.Year:\n if (partLength === 2) {\n maskedValue = DateTimeUtil.prependValue(\n Number.parseInt(_dateValue!.getFullYear().toString().slice(-2), 10),\n partLength,\n '0'\n );\n } else {\n maskedValue = _dateValue!.getFullYear();\n }\n break;\n case DateParts.Hours:\n if (datePartInfo.format.indexOf('h') !== -1) {\n maskedValue = DateTimeUtil.prependValue(\n DateTimeUtil.toTwelveHourFormat(_dateValue!.getHours()),\n partLength,\n '0'\n );\n } else {\n maskedValue = _dateValue!.getHours();\n }\n break;\n case DateParts.Minutes:\n maskedValue = _dateValue!.getMinutes();\n break;\n case DateParts.Seconds:\n maskedValue = _dateValue!.getSeconds();\n break;\n case DateParts.AmPm:\n maskedValue = _dateValue!.getHours() >= 12 ? 'PM' : 'AM';\n break;\n }\n\n if (datePartInfo.type !== DateParts.AmPm) {\n return DateTimeUtil.prependValue(maskedValue, partLength, '0');\n }\n\n return maskedValue;\n }\n\n private static _spinTimePart(\n newDate: Date,\n delta: number,\n max: number,\n min: number,\n setter: (value: number) => number,\n getter: () => number,\n spinLoop: boolean\n ): void {\n const range = max - min + 1;\n let newValue = getter.call(newDate) + delta;\n\n if (spinLoop) {\n newValue = min + ((((newValue - min) % range) + range) % range);\n } else {\n newValue = clamp(newValue, min, max);\n }\n\n setter.call(newDate, newValue);\n }\n\n public static spinYear(delta: number, newDate: Date): Date {\n const maxDate = DateTimeUtil.daysInMonth(\n newDate.getFullYear() + delta,\n newDate.getMonth()\n );\n if (newDate.getDate() > maxDate) {\n // clip to max to avoid leap year change shifting the entire value\n newDate.setDate(maxDate);\n }\n newDate.setFullYear(newDate.getFullYear() + delta);\n\n return newDate;\n }\n\n public static spinMonth(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n const maxDate = DateTimeUtil.daysInMonth(\n newDate.getFullYear(),\n newDate.getMonth() + delta\n );\n if (newDate.getDate() > maxDate) {\n newDate.setDate(maxDate);\n }\n\n const maxMonth = 11;\n const minMonth = 0;\n let month = newDate.getMonth() + delta;\n if (month > maxMonth) {\n month = spinLoop ? (month % maxMonth) - 1 : maxMonth;\n } else if (month < minMonth) {\n month = spinLoop ? maxMonth + (month % maxMonth) + 1 : minMonth;\n }\n\n newDate.setMonth(month);\n }\n\n public static spinDate(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n const maxDate = DateTimeUtil.daysInMonth(\n newDate.getFullYear(),\n newDate.getMonth()\n );\n let date = newDate.getDate() + delta;\n if (date > maxDate) {\n date = spinLoop ? date % maxDate : maxDate;\n } else if (date < 1) {\n date = spinLoop ? maxDate + (date % maxDate) : 1;\n }\n\n newDate.setDate(date);\n }\n\n public static spinHours(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n DateTimeUtil._spinTimePart(\n newDate,\n delta,\n 23,\n 0,\n newDate.setHours,\n newDate.getHours,\n spinLoop\n );\n }\n\n public static spinMinutes(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n DateTimeUtil._spinTimePart(\n newDate,\n delta,\n 59,\n 0,\n newDate.setMinutes,\n newDate.getMinutes,\n spinLoop\n );\n }\n\n public static spinSeconds(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n DateTimeUtil._spinTimePart(\n newDate,\n delta,\n 59,\n 0,\n newDate.setSeconds,\n newDate.getSeconds,\n spinLoop\n );\n }\n\n public static spinAmPm(\n newDate: Date,\n currentDate: Date,\n amPmFromMask: string\n ): Date {\n let date = new Date(newDate);\n\n switch (amPmFromMask) {\n case 'AM':\n date = new Date(newDate.setHours(newDate.getHours() + 12));\n break;\n case 'PM':\n date = new Date(newDate.setHours(newDate.getHours() - 12));\n break;\n }\n if (date.getDate() !== currentDate.getDate()) {\n return currentDate;\n }\n\n return date;\n }\n\n public static greaterThanMaxValue(\n value: Date,\n maxValue: Date,\n includeTime = true,\n includeDate = true\n ): boolean {\n if (includeTime && includeDate) {\n return value.getTime() > maxValue.getTime();\n }\n\n const _value = new Date(value.getTime());\n const _maxValue = new Date(maxValue.getTime());\n if (!includeTime) {\n _value.setHours(0, 0, 0, 0);\n _maxValue.setHours(0, 0, 0, 0);\n }\n if (!includeDate) {\n _value.setFullYear(0, 0, 0);\n _maxValue.setFullYear(0, 0, 0);\n }\n\n return _value.getTime() > _maxValue.getTime();\n }\n\n /**\n * Determines whether the provided value is less than the provided min value.\n *\n * @param includeTime set to false if you want to exclude time portion of the two dates\n * @param includeDate set to false if you want to exclude the date portion of the two dates\n * @returns true if provided value is less than provided minValue\n */\n public static lessThanMinValue(\n value: Date,\n minValue: Date,\n includeTime = true,\n includeDate = true\n ): boolean {\n if (includeTime && includeDate) {\n return value.getTime() < minValue.getTime();\n }\n\n const _value = new Date(value.getTime());\n const _minValue = new Date(minValue.getTime());\n if (!includeTime) {\n _value.setHours(0, 0, 0, 0);\n _minValue.setHours(0, 0, 0, 0);\n }\n if (!includeDate) {\n _value.setFullYear(0, 0, 0);\n _minValue.setFullYear(0, 0, 0);\n }\n\n return _value.getTime() < _minValue.getTime();\n }\n\n /**\n * Validates a value within a given min and max value range.\n *\n * @param value The value to validate\n * @param minValue The lowest possible value that `value` can take\n * @param maxValue The largest possible value that `value` can take\n */\n public static validateMinMax(\n value: Date,\n minValue: Date | string,\n maxValue: Date | string,\n includeTime = true,\n includeDate = true\n ) {\n // if (!value) {\n // return null;\n // }\n const errors = {};\n const min = DateTimeUtil.isValidDate(minValue)\n ? minValue\n : DateTimeUtil.parseIsoDate(minValue);\n const max = DateTimeUtil.isValidDate(maxValue)\n ? maxValue\n : DateTimeUtil.parseIsoDate(maxValue);\n if (\n min &&\n value &&\n DateTimeUtil.lessThanMinValue(value, min, includeTime, includeDate)\n ) {\n Object.assign(errors, { minValue: true });\n }\n if (\n max &&\n value &&\n DateTimeUtil.greaterThanMaxValue(value, max, includeTime, includeDate)\n ) {\n Object.assign(errors, { maxValue: true });\n }\n\n return errors;\n }\n\n /**\n * Transforms the predefined format to a display format containing only date parts.\n *\n * @param format The format to check and transform\n */\n public static predefinedToDateDisplayFormat(format?: string) {\n return format && DateTimeUtil.PREDEFINED_FORMATS.has(format)\n ? `${format}Date`\n : format;\n }\n\n private static setDisplayFormatOptions(\n value: Date,\n format: string,\n locale: string,\n noLeadingZero = false\n ) {\n const options: any = {};\n const parts = DateTimeUtil.parseDateTimeFormat(\n format,\n locale,\n noLeadingZero\n );\n\n const datePartFormatOptionMap = new Map([\n [DateParts.Date, 'day'],\n [DateParts.Month, 'month'],\n [DateParts.Year, 'year'],\n [DateParts.Hours, 'hour'],\n [DateParts.Minutes, 'minute'],\n [DateParts.Seconds, 'second'],\n [DateParts.AmPm, 'dayPeriod'],\n ]);\n\n const dateFormatMap = new Map([\n ['d', 'numeric'],\n ['dd', '2-digit'],\n ['M', 'numeric'],\n ['MM', '2-digit'],\n ['MMM', 'short'],\n ['MMMM', 'long'],\n ['MMMMM', 'narrow'],\n ['y', 'numeric'],\n ['yy', '2-digit'],\n ['yyy', 'numeric'],\n ['yyyy', 'numeric'],\n ['h', 'numeric'],\n ['hh', '2-digit'],\n ['H', 'numeric'],\n ['HH', '2-digit'],\n ['m', 'numeric'],\n ['mm', '2-digit'],\n ['s', 'numeric'],\n ['ss', '2-digit'],\n ['ttt', 'short'],\n ['tttt', 'long'],\n ['ttttt', 'narrow'],\n ]);\n\n for (const part of parts) {\n if (part.type !== DateParts.Literal) {\n const option = datePartFormatOptionMap.get(part.type);\n const format =\n dateFormatMap.get(part.format) ||\n dateFormatMap.get(part.format.substring(0, 2));\n\n if (option && format) {\n options[option] = format;\n\n if (part.type === DateParts.Hours) {\n if (part.format.charAt(0) === 'h') {\n options.hourCycle = 'h12';\n } else {\n options.hourCycle = 'h23';\n }\n }\n }\n\n // Need to be set if we have 't' or 'tt'.\n if (part.type === DateParts.AmPm && part.format.length <= 2) {\n options.hour = '2-digit';\n options.hourCycle = 'h12';\n }\n }\n }\n\n let formatter: Intl.DateTimeFormat;\n try {\n formatter = new Intl.DateTimeFormat(\n locale,\n options as Intl.DateTimeFormatOptions\n );\n } catch {\n formatter = new Intl.DateTimeFormat(DateTimeUtil.DEFAULT_LOCALE, options);\n }\n\n const formattedParts = formatter.formatToParts(value);\n\n let result = '';\n\n for (const part of parts) {\n if (part.type === DateParts.Literal) {\n result += part.format;\n continue;\n }\n\n const option = datePartFormatOptionMap.get(part.type)!;\n result += formattedParts.filter((p) => p.type === option)[0]?.value || '';\n }\n\n return result;\n }\n\n private static getMask(dateStruct: any[]): string {\n const mask = [];\n\n for (const part of dateStruct) {\n switch (part.formatType) {\n case FormatDesc.Numeric: {\n if (part.type === DateParts.Day) {\n mask.push('d');\n } else if (part.type === DateParts.Month) {\n mask.push('M');\n } else {\n mask.push('yyyy');\n }\n break;\n }\n case FormatDesc.TwoDigits: {\n if (part.type === DateParts.Day) {\n mask.push('dd');\n } else if (part.type === DateParts.Month) {\n mask.push('MM');\n } else {\n mask.push('yy');\n }\n }\n }\n\n if (part.type === DateTimeUtil.SEPARATOR) {\n mask.push(part.value);\n }\n }\n\n return mask.join('');\n }\n\n private static addCurrentPart(\n currentPart: DatePartInfo,\n dateTimeParts: DatePartInfo[],\n noLeadingZero = false\n ): void {\n DateTimeUtil.ensureLeadingZero(currentPart, noLeadingZero);\n currentPart.end = currentPart.start + currentPart.format.length;\n dateTimeParts.push(currentPart);\n }\n\n private static ensureLeadingZero(part: DatePartInfo, noLeadingZero = false) {\n switch (part.type) {\n case DateParts.Date:\n case DateParts.Month:\n case DateParts.Hours:\n case DateParts.Minutes:\n case DateParts.Seconds:\n if (part.format.length === 1 && !noLeadingZero) {\n part.format = part.format.repeat(2);\n }\n break;\n }\n }\n\n private static determineDatePart(char: string): DateParts {\n switch (char) {\n case 'd':\n case 'D':\n return DateParts.Date;\n case 'M':\n return DateParts.Month;\n case 'y':\n case 'Y':\n return DateParts.Year;\n case 'h':\n case 'H':\n return DateParts.Hours;\n case 'm':\n return DateParts.Minutes;\n case 's':\n case 'S':\n return DateParts.Seconds;\n case 't':\n case 'T':\n return DateParts.AmPm;\n default:\n return DateParts.Literal;\n }\n }\n\n private static getDefaultLocaleMask(locale: string) {\n const dateStruct: any = [];\n let formatter: Intl.DateTimeFormat;\n try {\n formatter = new Intl.DateTimeFormat(locale);\n } catch {\n return;\n }\n\n const formatToParts = formatter.formatToParts(new Date());\n\n for (const part of formatToParts) {\n if (part.type === DateTimeUtil.SEPARATOR) {\n dateStruct.push({\n type: DateTimeUtil.SEPARATOR,\n value: part.value,\n });\n } else {\n dateStruct.push({\n type: part.type,\n });\n }\n }\n\n const formatterOptions = formatter.resolvedOptions();\n\n for (const part of dateStruct) {\n switch (part.type) {\n case DateParts.Day: {\n part.formatType = formatterOptions.day;\n break;\n }\n case DateParts.Month: {\n part.formatType = formatterOptions.month;\n break;\n }\n case DateParts.Year: {\n part.formatType = formatterOptions.year;\n break;\n }\n }\n }\n\n DateTimeUtil.fillDatePartsPositions(dateStruct);\n return dateStruct;\n }\n\n private static fillDatePartsPositions(dateArray: any[]): void {\n let currentPos = 0;\n\n for (const part of dateArray) {\n // Day|Month part positions\n if (part.type === DateParts.Day || part.type === DateParts.Month) {\n // Offset 2 positions for number\n part.position = [currentPos, currentPos + 2];\n currentPos += 2;\n } else if (part.type === DateParts.Year) {\n // Year part positions\n switch (part.formatType) {\n case FormatDesc.Numeric: {\n // Offset 4 positions for full year\n part.position = [currentPos, currentPos + 4];\n currentPos += 4;\n break;\n }\n case FormatDesc.TwoDigits: {\n // Offset 2 positions for short year\n part.position = [currentPos, currentPos + 2];\n currentPos += 2;\n break;\n }\n }\n } else if (part.type === DateTimeUtil.SEPARATOR) {\n // Separator positions\n part.position = [currentPos, currentPos + 1];\n currentPos++;\n }\n }\n }\n\n private static getCleanVal(\n inputData: string,\n datePart: DatePartInfo,\n prompt?: string\n ): string {\n return DateTimeUtil.trimEmptyPlaceholders(\n inputData.substring(datePart.start, datePart.end),\n prompt\n );\n }\n\n private static escapeRegExp(string: string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n private static trimEmptyPlaceholders(value: string, prompt?: string): string {\n const result = value.replace(\n new RegExp(DateTimeUtil.escapeRegExp(prompt ?? '_'), 'g'),\n ''\n );\n return result;\n }\n\n private static daysInMonth(fullYear: number, month: number): number {\n return new Date(fullYear, month + 1, 0).getDate();\n }\n\n private static prependValue(\n value: number,\n partLength: number,\n prependChar: string\n ): string {\n return (prependChar + value.toString()).slice(-partLength);\n }\n\n private static toTwelveHourFormat(value: number): number {\n const hour12 = value % 12;\n return hour12 === 0 ? 12 : hour12;\n }\n}\n"]}
1
+ {"version":3,"file":"date-util.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-util.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDateFormatter } from 'igniteui-i18n-core';\nimport { parseISODate } from '../calendar/helpers.js';\nimport { clamp } from '../common/util.js';\n\nexport enum FormatDesc {\n Numeric = 'numeric',\n TwoDigits = '2-digit',\n}\n\nexport enum DateParts {\n Day = 'day',\n Month = 'month',\n Year = 'year',\n Date = 'date',\n Hours = 'hours',\n Minutes = 'minutes',\n Seconds = 'seconds',\n AmPm = 'amPm',\n Literal = 'literal',\n}\n\nexport enum DatePart {\n Month = 'month',\n Year = 'year',\n Date = 'date',\n Hours = 'hours',\n Minutes = 'minutes',\n Seconds = 'seconds',\n AmPm = 'amPm',\n}\n\n/** @ignore */\nexport interface DatePartInfo {\n type: DateParts;\n start: number;\n end: number;\n format: string;\n}\n\nexport interface DatePartDeltas {\n date?: number;\n month?: number;\n year?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n}\n\nfunction isDate(value: unknown): value is Date {\n return value instanceof Date;\n}\n\nexport abstract class DateTimeUtil {\n public static readonly DEFAULT_INPUT_FORMAT = 'MM/dd/yyyy';\n public static readonly DEFAULT_TIME_INPUT_FORMAT = 'hh:mm tt';\n private static readonly PREDEFINED_FORMATS = new Set([\n 'short',\n 'medium',\n 'long',\n 'full',\n ]);\n\n public static parseValueFromMask(\n inputData: string,\n dateTimeParts: DatePartInfo[],\n promptChar?: string\n ): Date | null {\n const parts: { [key in DateParts]: number } = {} as any;\n dateTimeParts.forEach((dp) => {\n let value = Number.parseInt(\n DateTimeUtil.getCleanVal(inputData, dp, promptChar),\n 10\n );\n if (!value) {\n value =\n dp.type === DateParts.Date || dp.type === DateParts.Month ? 1 : 0;\n }\n parts[dp.type] = value;\n });\n parts[DateParts.Month] -= 1;\n\n if (parts[DateParts.Month] < 0 || 11 < parts[DateParts.Month]) {\n return null;\n }\n\n // TODO: Century threshold\n if (parts[DateParts.Year] < 50) {\n parts[DateParts.Year] += 2000;\n }\n\n if (\n parts[DateParts.Date] >\n DateTimeUtil.daysInMonth(parts[DateParts.Year], parts[DateParts.Month])\n ) {\n return null;\n }\n\n if (\n parts[DateParts.Hours] > 23 ||\n parts[DateParts.Minutes] > 59 ||\n parts[DateParts.Seconds] > 59\n ) {\n return null;\n }\n\n const amPm = dateTimeParts.find((p) => p.type === DateParts.AmPm);\n if (amPm) {\n parts[DateParts.Hours] %= 12;\n }\n\n if (\n amPm &&\n DateTimeUtil.getCleanVal(inputData, amPm, promptChar).toLowerCase() ===\n 'pm'\n ) {\n parts[DateParts.Hours] += 12;\n }\n\n return new Date(\n parts[DateParts.Year] || 2000,\n parts[DateParts.Month] || 0,\n parts[DateParts.Date] || 1,\n parts[DateParts.Hours] || 0,\n parts[DateParts.Minutes] || 0,\n parts[DateParts.Seconds] || 0\n );\n }\n\n public static getDefaultInputMask(locale: string): string {\n return getDateFormatter().getLocaleDateTimeFormat(locale, true);\n }\n\n public static parseDateTimeFormat(\n mask: string,\n locale: string,\n leadingZero = false\n ): DatePartInfo[] {\n const format = mask || DateTimeUtil.getDefaultInputMask(locale);\n const dateTimeParts: DatePartInfo[] = [];\n const formatArray = Array.from(format);\n let currentPart: DatePartInfo | null = null;\n let position = 0;\n\n for (let i = 0; i < formatArray.length; i++, position++) {\n const type = DateTimeUtil.determineDatePart(formatArray[i]);\n if (currentPart) {\n if (currentPart.type === type) {\n currentPart.format += formatArray[i];\n if (i < formatArray.length - 1) {\n continue;\n }\n }\n\n DateTimeUtil.addCurrentPart(currentPart, dateTimeParts, leadingZero);\n position = currentPart.end;\n }\n\n currentPart = {\n start: position,\n end: position + formatArray[i].length,\n type,\n format: formatArray[i],\n };\n }\n\n // make sure the last member of a format like H:m:s is not omitted\n if (\n !dateTimeParts.filter((p) => p.format.includes(currentPart!.format))\n .length\n ) {\n DateTimeUtil.addCurrentPart(currentPart!, dateTimeParts, leadingZero);\n }\n // formats like \"y\" or \"yyy\" are treated like \"yyyy\" while editing\n const yearPart = dateTimeParts.filter((p) => p.type === DateParts.Year)[0];\n if (yearPart && yearPart.format !== 'yy') {\n yearPart.end += 4 - yearPart.format.length;\n yearPart.format = 'yyyy';\n }\n\n return dateTimeParts;\n }\n\n public static parseIsoDate(value: string): Date | null {\n return parseISODate(value);\n }\n\n public static isValidDate(value: any): value is Date {\n if (isDate(value)) {\n return !Number.isNaN(value.getTime());\n }\n\n return false;\n }\n\n /**\n * Format date for display.\n * @param value Date value\n * @param locale Locale of the component\n * @param displayFormat Display format specified by the user. Can be undefined.\n * @param inputFormat Input format, so it is not calculated again and used for leading zero format.\n * @returns\n */\n public static formatDisplayDate(\n value: Date,\n locale: string,\n displayFormat: string | undefined\n ): string {\n const options: Intl.DateTimeFormatOptions = {};\n switch (displayFormat) {\n case 'short':\n case 'long':\n case 'medium':\n case 'full':\n options.dateStyle = displayFormat;\n options.timeStyle = displayFormat;\n break;\n case 'shortDate':\n case 'longDate':\n case 'mediumDate':\n case 'fullDate':\n options.dateStyle = displayFormat.toLowerCase().split('date')[0] as any;\n break;\n case 'shortTime':\n case 'longTime':\n case 'mediumTime':\n case 'fullTime':\n options.timeStyle = displayFormat.toLowerCase().split('time')[0] as any;\n break;\n default:\n if (displayFormat) {\n return getDateFormatter().formatDateCustomFormat(\n value,\n displayFormat,\n { locale }\n );\n }\n }\n\n return getDateFormatter().formatDateTime(value, locale, options);\n }\n\n public static getPartValue(\n datePartInfo: DatePartInfo,\n partLength: number,\n _dateValue: Date | null\n ): string {\n let maskedValue: any;\n const datePart = datePartInfo.type;\n\n switch (datePart) {\n case DateParts.Date:\n maskedValue = _dateValue!.getDate();\n break;\n case DateParts.Month:\n // months are zero based\n maskedValue = _dateValue!.getMonth() + 1;\n break;\n case DateParts.Year:\n if (partLength === 2) {\n maskedValue = DateTimeUtil.prependValue(\n Number.parseInt(_dateValue!.getFullYear().toString().slice(-2), 10),\n partLength,\n '0'\n );\n } else {\n maskedValue = _dateValue!.getFullYear();\n }\n break;\n case DateParts.Hours:\n if (datePartInfo.format.indexOf('h') !== -1) {\n maskedValue = DateTimeUtil.prependValue(\n DateTimeUtil.toTwelveHourFormat(_dateValue!.getHours()),\n partLength,\n '0'\n );\n } else {\n maskedValue = _dateValue!.getHours();\n }\n break;\n case DateParts.Minutes:\n maskedValue = _dateValue!.getMinutes();\n break;\n case DateParts.Seconds:\n maskedValue = _dateValue!.getSeconds();\n break;\n case DateParts.AmPm:\n maskedValue = _dateValue!.getHours() >= 12 ? 'PM' : 'AM';\n break;\n }\n\n if (datePartInfo.type !== DateParts.AmPm) {\n return DateTimeUtil.prependValue(maskedValue, partLength, '0');\n }\n\n return maskedValue;\n }\n\n private static _spinTimePart(\n newDate: Date,\n delta: number,\n max: number,\n min: number,\n setter: (value: number) => number,\n getter: () => number,\n spinLoop: boolean\n ): void {\n const range = max - min + 1;\n let newValue = getter.call(newDate) + delta;\n\n if (spinLoop) {\n newValue = min + ((((newValue - min) % range) + range) % range);\n } else {\n newValue = clamp(newValue, min, max);\n }\n\n setter.call(newDate, newValue);\n }\n\n public static spinYear(delta: number, newDate: Date): Date {\n const maxDate = DateTimeUtil.daysInMonth(\n newDate.getFullYear() + delta,\n newDate.getMonth()\n );\n if (newDate.getDate() > maxDate) {\n // clip to max to avoid leap year change shifting the entire value\n newDate.setDate(maxDate);\n }\n newDate.setFullYear(newDate.getFullYear() + delta);\n\n return newDate;\n }\n\n public static spinMonth(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n const maxDate = DateTimeUtil.daysInMonth(\n newDate.getFullYear(),\n newDate.getMonth() + delta\n );\n if (newDate.getDate() > maxDate) {\n newDate.setDate(maxDate);\n }\n\n const maxMonth = 11;\n const minMonth = 0;\n let month = newDate.getMonth() + delta;\n if (month > maxMonth) {\n month = spinLoop ? (month % maxMonth) - 1 : maxMonth;\n } else if (month < minMonth) {\n month = spinLoop ? maxMonth + (month % maxMonth) + 1 : minMonth;\n }\n\n newDate.setMonth(month);\n }\n\n public static spinDate(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n const maxDate = DateTimeUtil.daysInMonth(\n newDate.getFullYear(),\n newDate.getMonth()\n );\n let date = newDate.getDate() + delta;\n if (date > maxDate) {\n date = spinLoop ? date % maxDate : maxDate;\n } else if (date < 1) {\n date = spinLoop ? maxDate + (date % maxDate) : 1;\n }\n\n newDate.setDate(date);\n }\n\n public static spinHours(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n DateTimeUtil._spinTimePart(\n newDate,\n delta,\n 23,\n 0,\n newDate.setHours,\n newDate.getHours,\n spinLoop\n );\n }\n\n public static spinMinutes(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n DateTimeUtil._spinTimePart(\n newDate,\n delta,\n 59,\n 0,\n newDate.setMinutes,\n newDate.getMinutes,\n spinLoop\n );\n }\n\n public static spinSeconds(\n delta: number,\n newDate: Date,\n spinLoop: boolean\n ): void {\n DateTimeUtil._spinTimePart(\n newDate,\n delta,\n 59,\n 0,\n newDate.setSeconds,\n newDate.getSeconds,\n spinLoop\n );\n }\n\n public static spinAmPm(\n newDate: Date,\n currentDate: Date,\n amPmFromMask: string\n ): Date {\n let date = new Date(newDate);\n\n switch (amPmFromMask) {\n case 'am':\n case 'AM':\n date = new Date(newDate.setHours(newDate.getHours() + 12));\n break;\n case 'pm':\n case 'PM':\n date = new Date(newDate.setHours(newDate.getHours() - 12));\n break;\n }\n if (date.getDate() !== currentDate.getDate()) {\n return currentDate;\n }\n\n return date;\n }\n\n public static greaterThanMaxValue(\n value: Date,\n maxValue: Date,\n includeTime = true,\n includeDate = true\n ): boolean {\n if (includeTime && includeDate) {\n return value.getTime() > maxValue.getTime();\n }\n\n const _value = new Date(value.getTime());\n const _maxValue = new Date(maxValue.getTime());\n if (!includeTime) {\n _value.setHours(0, 0, 0, 0);\n _maxValue.setHours(0, 0, 0, 0);\n }\n if (!includeDate) {\n _value.setFullYear(0, 0, 0);\n _maxValue.setFullYear(0, 0, 0);\n }\n\n return _value.getTime() > _maxValue.getTime();\n }\n\n /**\n * Determines whether the provided value is less than the provided min value.\n *\n * @param includeTime set to false if you want to exclude time portion of the two dates\n * @param includeDate set to false if you want to exclude the date portion of the two dates\n * @returns true if provided value is less than provided minValue\n */\n public static lessThanMinValue(\n value: Date,\n minValue: Date,\n includeTime = true,\n includeDate = true\n ): boolean {\n if (includeTime && includeDate) {\n return value.getTime() < minValue.getTime();\n }\n\n const _value = new Date(value.getTime());\n const _minValue = new Date(minValue.getTime());\n if (!includeTime) {\n _value.setHours(0, 0, 0, 0);\n _minValue.setHours(0, 0, 0, 0);\n }\n if (!includeDate) {\n _value.setFullYear(0, 0, 0);\n _minValue.setFullYear(0, 0, 0);\n }\n\n return _value.getTime() < _minValue.getTime();\n }\n\n /**\n * Validates a value within a given min and max value range.\n *\n * @param value The value to validate\n * @param minValue The lowest possible value that `value` can take\n * @param maxValue The largest possible value that `value` can take\n */\n public static validateMinMax(\n value: Date,\n minValue: Date | string,\n maxValue: Date | string,\n includeTime = true,\n includeDate = true\n ) {\n // if (!value) {\n // return null;\n // }\n const errors = {};\n const min = DateTimeUtil.isValidDate(minValue)\n ? minValue\n : DateTimeUtil.parseIsoDate(minValue);\n const max = DateTimeUtil.isValidDate(maxValue)\n ? maxValue\n : DateTimeUtil.parseIsoDate(maxValue);\n if (\n min &&\n value &&\n DateTimeUtil.lessThanMinValue(value, min, includeTime, includeDate)\n ) {\n Object.assign(errors, { minValue: true });\n }\n if (\n max &&\n value &&\n DateTimeUtil.greaterThanMaxValue(value, max, includeTime, includeDate)\n ) {\n Object.assign(errors, { maxValue: true });\n }\n\n return errors;\n }\n\n /**\n * Transforms the predefined format to a display format containing only date parts.\n *\n * @param format The format to check and transform\n */\n public static predefinedToDateDisplayFormat(format?: string) {\n return format && DateTimeUtil.PREDEFINED_FORMATS.has(format)\n ? `${format}Date`\n : format;\n }\n\n private static addCurrentPart(\n currentPart: DatePartInfo,\n dateTimeParts: DatePartInfo[],\n leadingZero = false\n ): void {\n DateTimeUtil.ensureLeadingZero(currentPart, leadingZero);\n currentPart.end = currentPart.start + currentPart.format.length;\n dateTimeParts.push(currentPart);\n }\n\n private static ensureLeadingZero(part: DatePartInfo, leadingZero = false) {\n switch (part.type) {\n case DateParts.Date:\n case DateParts.Month:\n case DateParts.Hours:\n case DateParts.Minutes:\n case DateParts.Seconds:\n if (part.format.length === 1 && leadingZero) {\n part.format = part.format.repeat(2);\n }\n break;\n }\n }\n\n private static determineDatePart(char: string): DateParts {\n switch (char) {\n case 'd':\n case 'D':\n return DateParts.Date;\n case 'M':\n return DateParts.Month;\n case 'y':\n case 'Y':\n return DateParts.Year;\n case 'h':\n case 'H':\n return DateParts.Hours;\n case 'm':\n return DateParts.Minutes;\n case 's':\n case 'S':\n return DateParts.Seconds;\n case 't':\n case 'T':\n return DateParts.AmPm;\n default:\n return DateParts.Literal;\n }\n }\n\n private static getCleanVal(\n inputData: string,\n datePart: DatePartInfo,\n prompt?: string\n ): string {\n return DateTimeUtil.trimEmptyPlaceholders(\n inputData.substring(datePart.start, datePart.end),\n prompt\n );\n }\n\n private static escapeRegExp(string: string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n private static trimEmptyPlaceholders(value: string, prompt?: string): string {\n const result = value.replace(\n new RegExp(DateTimeUtil.escapeRegExp(prompt ?? '_'), 'g'),\n ''\n );\n return result;\n }\n\n private static daysInMonth(fullYear: number, month: number): number {\n return new Date(fullYear, month + 1, 0).getDate();\n }\n\n private static prependValue(\n value: number,\n partLength: number,\n prependChar: string\n ): string {\n return (prependChar + value.toString()).slice(-partLength);\n }\n\n private static toTwelveHourFormat(value: number): number {\n const hour12 = value % 12;\n return hour12 === 0 ? 12 : hour12;\n }\n}\n"]}
@@ -71,8 +71,10 @@ export default class IgcDialogComponent extends IgcDialogComponent_base {
71
71
  protected _handleOpenState(): void;
72
72
  private _emitClosing;
73
73
  private _hide;
74
+ private _closeWithEvent;
74
75
  protected _handleFormSubmit(event: SubmitEvent): void;
75
76
  private _handleCancel;
77
+ private _handleClose;
76
78
  private _handleClick;
77
79
  /** Opens the dialog. */
78
80
  show(): Promise<boolean>;
@@ -16,7 +16,7 @@ import { watch } from '../common/decorators/watch.js';
16
16
  import { registerComponent } from '../common/definitions/register.js';
17
17
  import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
18
18
  import { partMap } from '../common/part-map.js';
19
- import { numberInRangeInclusive } from '../common/util.js';
19
+ import { bindIf, numberInRangeInclusive } from '../common/util.js';
20
20
  import { styles } from './themes/dialog.base.css.js';
21
21
  import { styles as shared } from './themes/shared/dialog.common.css.js';
22
22
  import { all } from './themes/themes.js';
@@ -47,11 +47,11 @@ export default class IgcDialogComponent extends EventEmitterMixin(LitElement) {
47
47
  }
48
48
  firstUpdated() {
49
49
  if (this.open) {
50
- this._dialog.showModal();
50
+ this._dialog?.showModal();
51
51
  }
52
52
  }
53
53
  _handleOpenState() {
54
- this.open ? this._dialog.showModal() : this._dialog.close();
54
+ this.open ? this._dialog?.showModal() : this._dialog?.close();
55
55
  }
56
56
  _emitClosing() {
57
57
  return this.emitEvent('igcClosing', { cancelable: true });
@@ -70,6 +70,9 @@ export default class IgcDialogComponent extends EventEmitterMixin(LitElement) {
70
70
  }
71
71
  return true;
72
72
  }
73
+ _closeWithEvent() {
74
+ this._hide(true);
75
+ }
73
76
  _handleFormSubmit(event) {
74
77
  const form = event.target;
75
78
  if (form.method === 'dialog') {
@@ -77,14 +80,19 @@ export default class IgcDialogComponent extends EventEmitterMixin(LitElement) {
77
80
  this.returnValue = event.submitter.value ?? '';
78
81
  }
79
82
  if (!event.defaultPrevented) {
80
- this._hide(true);
83
+ this._closeWithEvent();
81
84
  }
82
85
  }
83
86
  }
84
87
  _handleCancel(event) {
85
88
  event.preventDefault();
86
89
  if (!this.keepOpenOnEscape) {
87
- this._hide(true);
90
+ this._closeWithEvent();
91
+ }
92
+ }
93
+ _handleClose() {
94
+ if (this.open) {
95
+ this._dialog?.showModal();
88
96
  }
89
97
  }
90
98
  _handleClick({ clientX, clientY, target }) {
@@ -93,7 +101,7 @@ export default class IgcDialogComponent extends EventEmitterMixin(LitElement) {
93
101
  const inX = numberInRangeInclusive(clientX, rect.left, rect.right);
94
102
  const inY = numberInRangeInclusive(clientY, rect.top, rect.bottom);
95
103
  if (!(inX && inY)) {
96
- this._hide(true);
104
+ this._closeWithEvent();
97
105
  }
98
106
  }
99
107
  }
@@ -144,7 +152,7 @@ export default class IgcDialogComponent extends EventEmitterMixin(LitElement) {
144
152
  ${this.hideDefaultAction
145
153
  ? nothing
146
154
  : html `
147
- <igc-button variant="flat" @click=${() => this._hide(true)}>
155
+ <igc-button variant="flat" @click=${this._closeWithEvent}>
148
156
  OK
149
157
  </igc-button>
150
158
  `}
@@ -162,10 +170,11 @@ export default class IgcDialogComponent extends EventEmitterMixin(LitElement) {
162
170
  ${ref(this._dialogRef)}
163
171
  part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}
164
172
  role="dialog"
165
- aria-label=${this.ariaLabel || nothing}
166
- aria-labelledby=${labelledBy || nothing}
173
+ aria-label=${bindIf(this.ariaLabel, this.ariaLabel)}
174
+ aria-labelledby=${bindIf(labelledBy, labelledBy)}
167
175
  @click=${this._handleClick}
168
176
  @cancel=${this._handleCancel}
177
+ @close=${bindIf(this.keepOpenOnEscape, this._handleClose)}
169
178
  >
170
179
  ${this._renderHeader()} ${this._renderContent()} ${this._renderFooter()}
171
180
  </dialog>