igniteui-webcomponents 6.4.0-alpha.3 → 6.4.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 (398) hide show
  1. package/CHANGELOG.md +90 -2
  2. package/LICENSE +18 -10
  3. package/README.md +65 -56
  4. package/components/button/themes/button/dark/button.indigo.css.js +1 -1
  5. package/components/button/themes/button/dark/button.indigo.css.js.map +1 -1
  6. package/components/button/themes/button/dark/button.material.css.js +1 -1
  7. package/components/button/themes/button/dark/button.material.css.js.map +1 -1
  8. package/components/button/themes/button/light/button.indigo.css.js +1 -1
  9. package/components/button/themes/button/light/button.indigo.css.js.map +1 -1
  10. package/components/button/themes/button/light/button.material.css.js +1 -1
  11. package/components/button/themes/button/light/button.material.css.js.map +1 -1
  12. package/components/button/themes/button/shared/button.bootstrap.css.js +1 -1
  13. package/components/button/themes/button/shared/button.bootstrap.css.js.map +1 -1
  14. package/components/button/themes/button/shared/button.common.css.js +1 -1
  15. package/components/button/themes/button/shared/button.common.css.js.map +1 -1
  16. package/components/button/themes/button/shared/button.fluent.css.js +1 -1
  17. package/components/button/themes/button/shared/button.fluent.css.js.map +1 -1
  18. package/components/button/themes/button/shared/button.indigo.css.js +1 -1
  19. package/components/button/themes/button/shared/button.indigo.css.js.map +1 -1
  20. package/components/button/themes/button/shared/button.material.css.js +1 -1
  21. package/components/button/themes/button/shared/button.material.css.js.map +1 -1
  22. package/components/button-group/themes/dark/button-group.material.css.js +1 -1
  23. package/components/button-group/themes/dark/button-group.material.css.js.map +1 -1
  24. package/components/button-group/themes/light/button-group.material.css.js +1 -1
  25. package/components/button-group/themes/light/button-group.material.css.js.map +1 -1
  26. package/components/button-group/themes/shared/button/button.bootstrap.css.js +1 -1
  27. package/components/button-group/themes/shared/button/button.bootstrap.css.js.map +1 -1
  28. package/components/button-group/themes/shared/button/button.material.css.js +1 -1
  29. package/components/button-group/themes/shared/button/button.material.css.js.map +1 -1
  30. package/components/calendar/calendar.d.ts +5 -3
  31. package/components/calendar/calendar.js +22 -35
  32. package/components/calendar/calendar.js.map +1 -1
  33. package/components/calendar/days-view/days-view.d.ts +3 -3
  34. package/components/calendar/days-view/days-view.js +15 -22
  35. package/components/calendar/days-view/days-view.js.map +1 -1
  36. package/components/calendar/months-view/months-view.d.ts +2 -3
  37. package/components/calendar/months-view/months-view.js +9 -19
  38. package/components/calendar/months-view/months-view.js.map +1 -1
  39. package/components/calendar/themes/dark/calendar.bootstrap.css.js +1 -1
  40. package/components/calendar/themes/dark/calendar.bootstrap.css.js.map +1 -1
  41. package/components/calendar/themes/dark/calendar.fluent.css.js +1 -1
  42. package/components/calendar/themes/dark/calendar.fluent.css.js.map +1 -1
  43. package/components/calendar/themes/dark/calendar.indigo.css.js +1 -1
  44. package/components/calendar/themes/dark/calendar.indigo.css.js.map +1 -1
  45. package/components/calendar/themes/dark/calendar.material.css.js +1 -1
  46. package/components/calendar/themes/dark/calendar.material.css.js.map +1 -1
  47. package/components/calendar/themes/days.js +8 -23
  48. package/components/calendar/themes/days.js.map +1 -1
  49. package/components/calendar/themes/light/calendar.bootstrap.css.js +1 -1
  50. package/components/calendar/themes/light/calendar.bootstrap.css.js.map +1 -1
  51. package/components/calendar/themes/light/calendar.fluent.css.js +1 -1
  52. package/components/calendar/themes/light/calendar.fluent.css.js.map +1 -1
  53. package/components/calendar/themes/light/calendar.indigo.css.js +1 -1
  54. package/components/calendar/themes/light/calendar.indigo.css.js.map +1 -1
  55. package/components/calendar/themes/light/calendar.material.css.js +1 -1
  56. package/components/calendar/themes/light/calendar.material.css.js.map +1 -1
  57. package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js +1 -1
  58. package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js.map +1 -1
  59. package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js +1 -1
  60. package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js.map +1 -1
  61. package/components/calendar/themes/shared/fluent/days-view.fluent.css.js +1 -1
  62. package/components/calendar/themes/shared/fluent/days-view.fluent.css.js.map +1 -1
  63. package/components/calendar/themes/shared/indigo/days-view.indigo.css.js +1 -1
  64. package/components/calendar/themes/shared/indigo/days-view.indigo.css.js.map +1 -1
  65. package/components/calendar/themes/shared/material/days-view.material.css.js +1 -1
  66. package/components/calendar/themes/shared/material/days-view.material.css.js.map +1 -1
  67. package/components/calendar/themes/year-month.js +8 -23
  68. package/components/calendar/themes/year-month.js.map +1 -1
  69. package/components/carousel/carousel.d.ts +2 -1
  70. package/components/carousel/carousel.js.map +1 -1
  71. package/components/chat/themes/chat.base.css.js +1 -1
  72. package/components/chat/themes/chat.base.css.js.map +1 -1
  73. package/components/chat/themes/input.base.css.js +1 -1
  74. package/components/chat/themes/input.base.css.js.map +1 -1
  75. package/components/chat/themes/shared/chat.bootstrap.css.js +1 -1
  76. package/components/chat/themes/shared/chat.bootstrap.css.js.map +1 -1
  77. package/components/chat/themes/shared/chat.fluent.css.js +1 -1
  78. package/components/chat/themes/shared/chat.fluent.css.js.map +1 -1
  79. package/components/chat/themes/shared/chat.indigo.css.js +1 -1
  80. package/components/chat/themes/shared/chat.indigo.css.js.map +1 -1
  81. package/components/checkbox/themes/light/checkbox/checkbox.material.css.js +1 -1
  82. package/components/checkbox/themes/light/checkbox/checkbox.material.css.js.map +1 -1
  83. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js +1 -1
  84. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js.map +1 -1
  85. package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js +1 -1
  86. package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js.map +1 -1
  87. package/components/checkbox/themes/shared/switch/switch.common.css.js +1 -1
  88. package/components/checkbox/themes/shared/switch/switch.common.css.js.map +1 -1
  89. package/components/checkbox/themes/shared/switch/switch.fluent.css.js +1 -1
  90. package/components/checkbox/themes/shared/switch/switch.fluent.css.js.map +1 -1
  91. package/components/checkbox/themes/shared/switch/switch.indigo.css.js +1 -1
  92. package/components/checkbox/themes/shared/switch/switch.indigo.css.js.map +1 -1
  93. package/components/checkbox/themes/shared/switch/switch.material.css.js +1 -1
  94. package/components/checkbox/themes/shared/switch/switch.material.css.js.map +1 -1
  95. package/components/chip/chip.d.ts +2 -1
  96. package/components/chip/chip.js.map +1 -1
  97. package/components/combo/combo.d.ts +3 -2
  98. package/components/combo/combo.js +7 -0
  99. package/components/combo/combo.js.map +1 -1
  100. package/components/combo/controllers/selection.js.map +1 -1
  101. package/components/combo/validators.js +2 -2
  102. package/components/combo/validators.js.map +1 -1
  103. package/components/common/controllers/async-consumer.js.map +1 -1
  104. package/components/common/controllers/focus-ring.js +1 -5
  105. package/components/common/controllers/focus-ring.js.map +1 -1
  106. package/components/common/controllers/root-click.js +46 -21
  107. package/components/common/controllers/root-click.js.map +1 -1
  108. package/components/common/i18n/EN/calendar.resources.js +4 -1
  109. package/components/common/i18n/EN/calendar.resources.js.map +1 -1
  110. package/components/common/i18n/EN/date-range-picker.resources.js.map +1 -1
  111. package/components/common/i18n/i18n-controller.js +6 -9
  112. package/components/common/i18n/i18n-controller.js.map +1 -1
  113. package/components/common/i18n/utils.d.ts +0 -12
  114. package/components/common/i18n/utils.js +0 -12
  115. package/components/common/i18n/utils.js.map +1 -1
  116. package/components/common/mixins/forms/associated.js +3 -23
  117. package/components/common/mixins/forms/associated.js.map +1 -1
  118. package/components/common/util.d.ts +5 -0
  119. package/components/common/util.js +5 -0
  120. package/components/common/util.js.map +1 -1
  121. package/components/common/validators.d.ts +2 -4
  122. package/components/common/validators.js +13 -19
  123. package/components/common/validators.js.map +1 -1
  124. package/components/date-picker/date-picker.d.ts +7 -3
  125. package/components/date-picker/date-picker.js +2 -2
  126. package/components/date-picker/date-picker.js.map +1 -1
  127. package/components/date-picker/themes/dark/date-picker.bootstrap.css.js +1 -1
  128. package/components/date-picker/themes/dark/date-picker.bootstrap.css.js.map +1 -1
  129. package/components/date-picker/themes/dark/date-picker.fluent.css.js +1 -1
  130. package/components/date-picker/themes/dark/date-picker.fluent.css.js.map +1 -1
  131. package/components/date-picker/themes/dark/date-picker.indigo.css.js +1 -1
  132. package/components/date-picker/themes/dark/date-picker.indigo.css.js.map +1 -1
  133. package/components/date-picker/themes/dark/date-picker.material.css.js +1 -1
  134. package/components/date-picker/themes/dark/date-picker.material.css.js.map +1 -1
  135. package/components/date-picker/themes/light/date-picker.bootstrap.css.js +1 -1
  136. package/components/date-picker/themes/light/date-picker.bootstrap.css.js.map +1 -1
  137. package/components/date-picker/themes/light/date-picker.fluent.css.js +1 -1
  138. package/components/date-picker/themes/light/date-picker.fluent.css.js.map +1 -1
  139. package/components/date-picker/themes/light/date-picker.indigo.css.js +1 -1
  140. package/components/date-picker/themes/light/date-picker.indigo.css.js.map +1 -1
  141. package/components/date-picker/themes/light/date-picker.material.css.js +1 -1
  142. package/components/date-picker/themes/light/date-picker.material.css.js.map +1 -1
  143. package/components/date-picker/validators.js +2 -3
  144. package/components/date-picker/validators.js.map +1 -1
  145. package/components/date-range-picker/date-range-picker.d.ts +7 -2
  146. package/components/date-range-picker/date-range-picker.js +12 -9
  147. package/components/date-range-picker/date-range-picker.js.map +1 -1
  148. package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js +1 -1
  149. package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js.map +1 -1
  150. package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js +1 -1
  151. package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js.map +1 -1
  152. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js +1 -1
  153. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js.map +1 -1
  154. package/components/date-range-picker/themes/dark/date-range-picker.material.css.js +1 -1
  155. package/components/date-range-picker/themes/dark/date-range-picker.material.css.js.map +1 -1
  156. package/components/date-range-picker/themes/light/date-range-picker.bootstrap.css.js +1 -1
  157. package/components/date-range-picker/themes/light/date-range-picker.bootstrap.css.js.map +1 -1
  158. package/components/date-range-picker/themes/light/date-range-picker.fluent.css.js +1 -1
  159. package/components/date-range-picker/themes/light/date-range-picker.fluent.css.js.map +1 -1
  160. package/components/date-range-picker/themes/light/date-range-picker.indigo.css.js +1 -1
  161. package/components/date-range-picker/themes/light/date-range-picker.indigo.css.js.map +1 -1
  162. package/components/date-range-picker/themes/light/date-range-picker.material.css.js +1 -1
  163. package/components/date-range-picker/themes/light/date-range-picker.material.css.js.map +1 -1
  164. package/components/date-range-picker/validators.js +5 -8
  165. package/components/date-range-picker/validators.js.map +1 -1
  166. package/components/date-time-input/date-time-input.d.ts +6 -2
  167. package/components/date-time-input/date-time-input.js +22 -15
  168. package/components/date-time-input/date-time-input.js.map +1 -1
  169. package/components/date-time-input/date-util.d.ts +11 -9
  170. package/components/date-time-input/date-util.js +23 -219
  171. package/components/date-time-input/date-util.js.map +1 -1
  172. package/components/dialog/dialog.d.ts +2 -0
  173. package/components/dialog/dialog.js +18 -9
  174. package/components/dialog/dialog.js.map +1 -1
  175. package/components/dialog/themes/dark/dialog.fluent.css.js +1 -1
  176. package/components/dialog/themes/dark/dialog.fluent.css.js.map +1 -1
  177. package/components/dialog/themes/light/dialog.fluent.css.js +1 -1
  178. package/components/dialog/themes/light/dialog.fluent.css.js.map +1 -1
  179. package/components/dialog/themes/shared/dialog.bootstrap.css.js +1 -1
  180. package/components/dialog/themes/shared/dialog.bootstrap.css.js.map +1 -1
  181. package/components/dialog/themes/shared/dialog.indigo.css.js +1 -1
  182. package/components/dialog/themes/shared/dialog.indigo.css.js.map +1 -1
  183. package/components/expansion-panel/themes/light/expansion-panel.bootstrap.css.js +1 -1
  184. package/components/expansion-panel/themes/light/expansion-panel.bootstrap.css.js.map +1 -1
  185. package/components/file-input/file-input.d.ts +13 -0
  186. package/components/file-input/file-input.js +27 -2
  187. package/components/file-input/file-input.js.map +1 -1
  188. package/components/input/themes/dark/input.indigo.css.js +1 -1
  189. package/components/input/themes/dark/input.indigo.css.js.map +1 -1
  190. package/components/input/themes/light/input.indigo.css.js +1 -1
  191. package/components/input/themes/light/input.indigo.css.js.map +1 -1
  192. package/components/input/themes/light/input.shared.css.js +1 -1
  193. package/components/input/themes/light/input.shared.css.js.map +1 -1
  194. package/components/input/themes/shared/input.bootstrap.css.js +1 -1
  195. package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
  196. package/components/input/themes/shared/input.common.css.js +1 -1
  197. package/components/input/themes/shared/input.common.css.js.map +1 -1
  198. package/components/input/themes/shared/input.fluent.css.js +1 -1
  199. package/components/input/themes/shared/input.fluent.css.js.map +1 -1
  200. package/components/input/themes/shared/input.indigo.css.js +1 -1
  201. package/components/input/themes/shared/input.indigo.css.js.map +1 -1
  202. package/components/input/themes/shared/input.material.css.js +1 -1
  203. package/components/input/themes/shared/input.material.css.js.map +1 -1
  204. package/components/input/validators.js +3 -3
  205. package/components/input/validators.js.map +1 -1
  206. package/components/list/themes/dark/container/list.bootstrap.css.js +1 -1
  207. package/components/list/themes/dark/container/list.bootstrap.css.js.map +1 -1
  208. package/components/list/themes/light/container/list.fluent.css.js +1 -1
  209. package/components/list/themes/light/container/list.fluent.css.js.map +1 -1
  210. package/components/list/themes/shared/item/list-item.common.css.js +1 -1
  211. package/components/list/themes/shared/item/list-item.common.css.js.map +1 -1
  212. package/components/list/themes/shared/item/list-item.indigo.css.js +1 -1
  213. package/components/list/themes/shared/item/list-item.indigo.css.js.map +1 -1
  214. package/components/mask-input/mask-input-base.js +3 -2
  215. package/components/mask-input/mask-input-base.js.map +1 -1
  216. package/components/mask-input/mask-parser.d.ts +30 -7
  217. package/components/mask-input/mask-parser.js +70 -42
  218. package/components/mask-input/mask-parser.js.map +1 -1
  219. package/components/mask-input/validators.js +2 -2
  220. package/components/mask-input/validators.js.map +1 -1
  221. package/components/nav-drawer/themes/dark/container/nav-drawer.fluent.css.js +1 -1
  222. package/components/nav-drawer/themes/dark/container/nav-drawer.fluent.css.js.map +1 -1
  223. package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js +1 -1
  224. package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js.map +1 -1
  225. package/components/nav-drawer/themes/light/container/nav-drawer.material.css.js +1 -1
  226. package/components/nav-drawer/themes/light/container/nav-drawer.material.css.js.map +1 -1
  227. package/components/navbar/themes/shared/navbar.common.css.js +1 -1
  228. package/components/navbar/themes/shared/navbar.common.css.js.map +1 -1
  229. package/components/radio/themes/light/radio.material.css.js +1 -1
  230. package/components/radio/themes/light/radio.material.css.js.map +1 -1
  231. package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
  232. package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
  233. package/components/radio/themes/shared/radio.common.css.js +1 -1
  234. package/components/radio/themes/shared/radio.common.css.js.map +1 -1
  235. package/components/radio/themes/shared/radio.fluent.css.js +1 -1
  236. package/components/radio/themes/shared/radio.fluent.css.js.map +1 -1
  237. package/components/radio/themes/shared/radio.indigo.css.js +1 -1
  238. package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
  239. package/components/radio/themes/shared/radio.material.css.js +1 -1
  240. package/components/radio/themes/shared/radio.material.css.js.map +1 -1
  241. package/components/radio/validators.js +2 -2
  242. package/components/radio/validators.js.map +1 -1
  243. package/components/rating/themes/dark/rating.indigo.css.js +1 -1
  244. package/components/rating/themes/dark/rating.indigo.css.js.map +1 -1
  245. package/components/rating/themes/light/rating.indigo.css.js +1 -1
  246. package/components/rating/themes/light/rating.indigo.css.js.map +1 -1
  247. package/components/ripple/ripple.d.ts +3 -3
  248. package/components/ripple/ripple.js +34 -31
  249. package/components/ripple/ripple.js.map +1 -1
  250. package/components/snackbar/themes/shared/snackbar.common.css.js +1 -1
  251. package/components/snackbar/themes/shared/snackbar.common.css.js.map +1 -1
  252. package/components/snackbar/themes/shared/snackbar.fluent.css.js +1 -1
  253. package/components/snackbar/themes/shared/snackbar.fluent.css.js.map +1 -1
  254. package/components/snackbar/themes/shared/snackbar.indigo.css.js +1 -1
  255. package/components/snackbar/themes/shared/snackbar.indigo.css.js.map +1 -1
  256. package/components/snackbar/themes/snackbar.base.css.js +1 -1
  257. package/components/snackbar/themes/snackbar.base.css.js.map +1 -1
  258. package/components/snackbar/themes/themes.js +2 -3
  259. package/components/snackbar/themes/themes.js.map +1 -1
  260. package/components/stepper/step.js +2 -2
  261. package/components/stepper/step.js.map +1 -1
  262. package/components/stepper/themes/step/dark/step.bootstrap.css.js +1 -1
  263. package/components/stepper/themes/step/dark/step.bootstrap.css.js.map +1 -1
  264. package/components/stepper/themes/step/dark/step.fluent.css.js +1 -1
  265. package/components/stepper/themes/step/dark/step.fluent.css.js.map +1 -1
  266. package/components/stepper/themes/step/dark/step.indigo.css.js +1 -1
  267. package/components/stepper/themes/step/dark/step.indigo.css.js.map +1 -1
  268. package/components/stepper/themes/step/dark/step.material.css.js +1 -1
  269. package/components/stepper/themes/step/dark/step.material.css.js.map +1 -1
  270. package/components/stepper/themes/step/light/step.bootstrap.css.js +1 -1
  271. package/components/stepper/themes/step/light/step.bootstrap.css.js.map +1 -1
  272. package/components/stepper/themes/step/light/step.fluent.css.js +1 -1
  273. package/components/stepper/themes/step/light/step.fluent.css.js.map +1 -1
  274. package/components/stepper/themes/step/light/step.indigo.css.js +1 -1
  275. package/components/stepper/themes/step/light/step.indigo.css.js.map +1 -1
  276. package/components/stepper/themes/step/light/step.material.css.js +1 -1
  277. package/components/stepper/themes/step/light/step.material.css.js.map +1 -1
  278. package/components/stepper/themes/step/light/step.shared.css.js +1 -1
  279. package/components/stepper/themes/step/light/step.shared.css.js.map +1 -1
  280. package/components/stepper/themes/step/shared/step.common.css.js +1 -1
  281. package/components/stepper/themes/step/shared/step.common.css.js.map +1 -1
  282. package/components/stepper/themes/step/shared/step.indigo.css.js +1 -1
  283. package/components/stepper/themes/step/shared/step.indigo.css.js.map +1 -1
  284. package/components/tabs/tab-dom.js +8 -9
  285. package/components/tabs/tab-dom.js.map +1 -1
  286. package/components/tabs/themes/dark/tab.bootstrap.css.js +1 -1
  287. package/components/tabs/themes/dark/tab.bootstrap.css.js.map +1 -1
  288. package/components/tabs/themes/dark/tab.fluent.css.js +1 -1
  289. package/components/tabs/themes/dark/tab.fluent.css.js.map +1 -1
  290. package/components/tabs/themes/dark/tab.indigo.css.js +1 -1
  291. package/components/tabs/themes/dark/tab.indigo.css.js.map +1 -1
  292. package/components/tabs/themes/dark/tab.material.css.js +1 -1
  293. package/components/tabs/themes/dark/tab.material.css.js.map +1 -1
  294. package/components/tabs/themes/dark/tab.shared.css.js +1 -1
  295. package/components/tabs/themes/dark/tab.shared.css.js.map +1 -1
  296. package/components/tabs/themes/light/tab.bootstrap.css.js +1 -1
  297. package/components/tabs/themes/light/tab.bootstrap.css.js.map +1 -1
  298. package/components/tabs/themes/light/tab.fluent.css.js +1 -1
  299. package/components/tabs/themes/light/tab.fluent.css.js.map +1 -1
  300. package/components/tabs/themes/light/tab.indigo.css.js +1 -1
  301. package/components/tabs/themes/light/tab.indigo.css.js.map +1 -1
  302. package/components/tabs/themes/light/tab.material.css.js +1 -1
  303. package/components/tabs/themes/light/tab.material.css.js.map +1 -1
  304. package/components/tabs/themes/light/tab.shared.css.js +1 -1
  305. package/components/tabs/themes/light/tab.shared.css.js.map +1 -1
  306. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js +1 -1
  307. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js.map +1 -1
  308. package/components/tabs/themes/shared/tab/tab.common.css.js +1 -1
  309. package/components/tabs/themes/shared/tab/tab.common.css.js.map +1 -1
  310. package/components/tabs/themes/shared/tab/tab.fluent.css.js +1 -1
  311. package/components/tabs/themes/shared/tab/tab.fluent.css.js.map +1 -1
  312. package/components/tabs/themes/shared/tab/tab.indigo.css.js +1 -1
  313. package/components/tabs/themes/shared/tab/tab.indigo.css.js.map +1 -1
  314. package/components/tabs/themes/shared/tab/tab.material.css.js +1 -1
  315. package/components/tabs/themes/shared/tab/tab.material.css.js.map +1 -1
  316. package/components/tabs/themes/shared/tabs/tabs.bootstrap.css.js +1 -1
  317. package/components/tabs/themes/shared/tabs/tabs.bootstrap.css.js.map +1 -1
  318. package/components/tabs/themes/shared/tabs/tabs.common.css.js +1 -1
  319. package/components/tabs/themes/shared/tabs/tabs.common.css.js.map +1 -1
  320. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js +1 -1
  321. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js.map +1 -1
  322. package/components/tabs/themes/shared/tabs/tabs.material.css.js +1 -1
  323. package/components/tabs/themes/shared/tabs/tabs.material.css.js.map +1 -1
  324. package/components/tabs/themes/tabs.base.css.js +1 -1
  325. package/components/tabs/themes/tabs.base.css.js.map +1 -1
  326. package/components/textarea/themes/dark/textarea.indigo.css.js +1 -1
  327. package/components/textarea/themes/dark/textarea.indigo.css.js.map +1 -1
  328. package/components/textarea/themes/light/textarea.indigo.css.js +1 -1
  329. package/components/textarea/themes/light/textarea.indigo.css.js.map +1 -1
  330. package/components/textarea/themes/light/textarea.shared.css.js +1 -1
  331. package/components/textarea/themes/light/textarea.shared.css.js.map +1 -1
  332. package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
  333. package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
  334. package/components/textarea/themes/shared/textarea.common.css.js +1 -1
  335. package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
  336. package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
  337. package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
  338. package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
  339. package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
  340. package/components/textarea/themes/shared/textarea.material.css.js +1 -1
  341. package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
  342. package/components/textarea/themes/textarea.base.css.js +1 -1
  343. package/components/textarea/themes/textarea.base.css.js.map +1 -1
  344. package/components/tree/themes/dark/container.bootstrap.css.js +1 -1
  345. package/components/tree/themes/dark/container.bootstrap.css.js.map +1 -1
  346. package/components/tree/themes/light/container.bootstrap.css.js +1 -1
  347. package/components/tree/themes/light/container.bootstrap.css.js.map +1 -1
  348. package/components/tree/tree-item.js +4 -0
  349. package/components/tree/tree-item.js.map +1 -1
  350. package/components/tree/tree.d.ts +14 -0
  351. package/components/tree/tree.js +23 -0
  352. package/components/tree/tree.js.map +1 -1
  353. package/components/validation-container/validation-container.d.ts +0 -1
  354. package/components/validation-container/validation-container.js +6 -9
  355. package/components/validation-container/validation-container.js.map +1 -1
  356. package/custom-elements.json +706 -1056
  357. package/igniteui-webcomponents.html-data.json +1 -1
  358. package/index.d.ts +2 -1
  359. package/index.js +2 -1
  360. package/index.js.map +1 -1
  361. package/package.json +10 -5
  362. package/web-types.json +1 -1
  363. package/components/common/localization/intl-formatters.d.ts +0 -17
  364. package/components/common/localization/intl-formatters.js +0 -46
  365. package/components/common/localization/intl-formatters.js.map +0 -1
  366. package/components/snackbar/themes/shared/snackbar.bootstrap.css.d.ts +0 -1
  367. package/components/snackbar/themes/shared/snackbar.bootstrap.css.js +0 -3
  368. package/components/snackbar/themes/shared/snackbar.bootstrap.css.js.map +0 -1
  369. package/components/validation-container/themes/dark/validator.bootstrap.css.d.ts +0 -1
  370. package/components/validation-container/themes/dark/validator.bootstrap.css.js +0 -3
  371. package/components/validation-container/themes/dark/validator.bootstrap.css.js.map +0 -1
  372. package/components/validation-container/themes/dark/validator.fluent.css.d.ts +0 -1
  373. package/components/validation-container/themes/dark/validator.fluent.css.js +0 -3
  374. package/components/validation-container/themes/dark/validator.fluent.css.js.map +0 -1
  375. package/components/validation-container/themes/dark/validator.indigo.css.d.ts +0 -1
  376. package/components/validation-container/themes/dark/validator.indigo.css.js +0 -3
  377. package/components/validation-container/themes/dark/validator.indigo.css.js.map +0 -1
  378. package/components/validation-container/themes/dark/validator.material.css.d.ts +0 -1
  379. package/components/validation-container/themes/dark/validator.material.css.js +0 -3
  380. package/components/validation-container/themes/dark/validator.material.css.js.map +0 -1
  381. package/components/validation-container/themes/light/validator.bootstrap.css.d.ts +0 -1
  382. package/components/validation-container/themes/light/validator.bootstrap.css.js +0 -3
  383. package/components/validation-container/themes/light/validator.bootstrap.css.js.map +0 -1
  384. package/components/validation-container/themes/light/validator.fluent.css.d.ts +0 -1
  385. package/components/validation-container/themes/light/validator.fluent.css.js +0 -3
  386. package/components/validation-container/themes/light/validator.fluent.css.js.map +0 -1
  387. package/components/validation-container/themes/light/validator.indigo.css.d.ts +0 -1
  388. package/components/validation-container/themes/light/validator.indigo.css.js +0 -3
  389. package/components/validation-container/themes/light/validator.indigo.css.js.map +0 -1
  390. package/components/validation-container/themes/light/validator.material.css.d.ts +0 -1
  391. package/components/validation-container/themes/light/validator.material.css.js +0 -3
  392. package/components/validation-container/themes/light/validator.material.css.js.map +0 -1
  393. package/components/validation-container/themes/light/validator.shared.css.d.ts +0 -1
  394. package/components/validation-container/themes/light/validator.shared.css.js +0 -3
  395. package/components/validation-container/themes/light/validator.shared.css.js.map +0 -1
  396. package/components/validation-container/themes/themes.d.ts +0 -2
  397. package/components/validation-container/themes/themes.js +0 -46
  398. package/components/validation-container/themes/themes.js.map +0 -1
@@ -4,6 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ import { getDateFormatter } from 'igniteui-i18n-core';
7
8
  import { html } from 'lit';
8
9
  import { eventOptions, property } from 'lit/decorators.js';
9
10
  import { ifDefined } from 'lit/directives/if-defined.js';
@@ -62,6 +63,12 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
62
63
  get max() {
63
64
  return this._max;
64
65
  }
66
+ set displayFormat(value) {
67
+ this._displayFormat = value;
68
+ }
69
+ get displayFormat() {
70
+ return (this._displayFormat ?? this._inputFormat ?? this._defaultDisplayFormat);
71
+ }
65
72
  set locale(value) {
66
73
  this._i18nController.locale = value;
67
74
  }
@@ -69,6 +76,7 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
69
76
  return this._i18nController.locale;
70
77
  }
71
78
  setDefaultMask() {
79
+ this.updateDefaultDisplayFormat();
72
80
  if (!this._inputFormat) {
73
81
  this.updateDefaultMask();
74
82
  this.setMask(this._defaultMask);
@@ -78,20 +86,21 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
78
86
  }
79
87
  }
80
88
  setDisplayFormat() {
89
+ this.updateDefaultDisplayFormat();
81
90
  if (this.value) {
82
91
  this.updateMask();
83
92
  }
84
93
  }
85
94
  get hasDateParts() {
86
95
  const parts = this._inputDateParts ||
87
- DateTimeUtil.parseDateTimeFormat(this.inputFormat);
96
+ DateTimeUtil.parseDateTimeFormat(this.inputFormat, this.locale);
88
97
  return parts.some((p) => p.type === DateParts.Date ||
89
98
  p.type === DateParts.Month ||
90
99
  p.type === DateParts.Year);
91
100
  }
92
101
  get hasTimeParts() {
93
102
  const parts = this._inputDateParts ||
94
- DateTimeUtil.parseDateTimeFormat(this.inputFormat);
103
+ DateTimeUtil.parseDateTimeFormat(this.inputFormat, this.locale);
95
104
  return parts.some((p) => p.type === DateParts.Hours ||
96
105
  p.type === DateParts.Minutes ||
97
106
  p.type === DateParts.Seconds);
@@ -128,6 +137,9 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
128
137
  });
129
138
  this._i18nController = addI18nController(this, {
130
139
  defaultEN: {},
140
+ onResourceChange: () => {
141
+ this.setDefaultMask();
142
+ },
131
143
  });
132
144
  this._oldValue = null;
133
145
  this._min = null;
@@ -154,6 +166,7 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
154
166
  connectedCallback() {
155
167
  super.connectedCallback();
156
168
  this.updateDefaultMask();
169
+ this.updateDefaultDisplayFormat();
157
170
  this.setMask(this.inputFormat);
158
171
  if (this.value) {
159
172
  this.updateMask();
@@ -196,16 +209,7 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
196
209
  this._maskedValue = '';
197
210
  return;
198
211
  }
199
- const format = this.displayFormat || this.inputFormat;
200
- if (this.displayFormat) {
201
- this._maskedValue = DateTimeUtil.formatDate(this.value, this.locale, format, true);
202
- }
203
- else if (this.inputFormat) {
204
- this._maskedValue = DateTimeUtil.formatDate(this.value, this.locale, format);
205
- }
206
- else {
207
- this._maskedValue = this.value.toLocaleString();
208
- }
212
+ this._maskedValue = DateTimeUtil.formatDisplayDate(this.value, this.locale, this.displayFormat);
209
213
  }
210
214
  }
211
215
  _fireInputEvent() {
@@ -287,11 +291,14 @@ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMask
287
291
  this.setSelectionRange(start, end);
288
292
  }
289
293
  updateDefaultMask() {
290
- this._defaultMask = DateTimeUtil.getDefaultMask(this.locale);
294
+ this._defaultMask = DateTimeUtil.getDefaultInputMask(this.locale);
295
+ }
296
+ updateDefaultDisplayFormat() {
297
+ this._defaultDisplayFormat = getDateFormatter().getLocaleDateTimeFormat(this.locale);
291
298
  }
292
299
  setMask(string) {
293
300
  const oldFormat = this._inputDateParts?.map((p) => p.format).join('');
294
- this._inputDateParts = DateTimeUtil.parseDateTimeFormat(string);
301
+ this._inputDateParts = DateTimeUtil.parseDateTimeFormat(string, this.locale, true);
295
302
  const value = this._inputDateParts.map((p) => p.format).join('');
296
303
  this._defaultMask = value;
297
304
  const newMask = (value || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(new RegExp(/(?=[^t])[\w]/, 'g'), '0');
@@ -434,7 +441,7 @@ __decorate([
434
441
  ], IgcDateTimeInputComponent.prototype, "max", null);
435
442
  __decorate([
436
443
  property({ attribute: 'display-format' })
437
- ], IgcDateTimeInputComponent.prototype, "displayFormat", void 0);
444
+ ], IgcDateTimeInputComponent.prototype, "displayFormat", null);
438
445
  __decorate([
439
446
  property({ attribute: false })
440
447
  ], IgcDateTimeInputComponent.prototype, "spinDelta", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit';\nimport { eventOptions, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\n\nimport { convertToDate } from '../calendar/helpers.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n} from '../common/controllers/key-bindings.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { addI18nController } from '../common/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { FormValueDateTimeTransformers } from '../common/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { partMap } from '../common/part-map.js';\nimport type { IgcInputComponentEventMap } from '../input/input-base.js';\nimport {\n IgcMaskInputBaseComponent,\n type MaskSelection,\n} from '../mask-input/mask-input-base.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n DatePart,\n type DatePartDeltas,\n type DatePartInfo,\n DateParts,\n DateTimeUtil,\n} from './date-util.js';\nimport { dateTimeInputValidators } from './validators.js';\n\nexport interface IgcDateTimeInputComponentEventMap\n extends Omit<IgcInputComponentEventMap, 'igcChange'> {\n igcChange: CustomEvent<Date | null>;\n}\n\n/**\n * A date time input is an input field that lets you set and edit the date and time in a chosen input element\n * using customizable display and input formats.\n *\n * @element igc-date-time-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcDateTimeInputComponent extends EventEmitterMixin<\n IgcDateTimeInputComponentEventMap,\n AbstractConstructor<IgcMaskInputBaseComponent>\n>(IgcMaskInputBaseComponent) {\n public static readonly tagName = 'igc-date-time-input';\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcDateTimeInputComponent,\n IgcValidationContainerComponent\n );\n }\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: null,\n transformers: FormValueDateTimeTransformers,\n });\n\n private readonly _i18nController = addI18nController<object>(this, {\n defaultEN: {},\n });\n\n protected _defaultMask!: string;\n private _oldValue: Date | null = null;\n private _min: Date | null = null;\n private _max: Date | null = null;\n\n private _inputDateParts!: DatePartInfo[];\n private _inputFormat!: string;\n private _datePartDeltas: DatePartDeltas = {\n date: 1,\n month: 1,\n year: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n };\n\n /**\n * The date format to apply on the input.\n * @attr input-format\n */\n @property({ attribute: 'input-format' })\n public get inputFormat(): string {\n return this._inputFormat || this._defaultMask;\n }\n\n public set inputFormat(val: string) {\n if (val) {\n this.setMask(val);\n this._inputFormat = val;\n if (this.value) {\n this.updateMask();\n }\n }\n }\n\n public get value(): Date | null {\n return this._formValue.value;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n * @attr\n */\n @property({ converter: convertToDate })\n public set value(value: Date | string | null | undefined) {\n this._formValue.setValueAndFormState(value as Date | null);\n this.updateMask();\n }\n\n /**\n * The minimum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set min(value: Date | string | null | undefined) {\n this._min = convertToDate(value);\n this._validate();\n }\n\n public get min(): Date | null {\n return this._min;\n }\n\n /**\n * The maximum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set max(value: Date | string | null | undefined) {\n this._max = convertToDate(value);\n this._validate();\n }\n\n public get max(): Date | null {\n return this._max;\n }\n\n /**\n * Format to display the value in when not editing.\n * Defaults to the input format if not set.\n * @attr display-format\n */\n @property({ attribute: 'display-format' })\n public displayFormat!: string;\n\n /**\n * Delta values used to increment or decrement each date part on step actions.\n * All values default to `1`.\n */\n @property({ attribute: false })\n public spinDelta!: DatePartDeltas;\n\n /**\n * Sets whether to loop over the currently spun segment.\n * @attr spin-loop\n */\n @property({ type: Boolean, attribute: 'spin-loop' })\n public spinLoop = true;\n\n /**\n * Gets/Sets the locale used for formatting the display value.\n * @attr locale\n */\n @property()\n public set locale(value: string) {\n this._i18nController.locale = value;\n }\n\n public get locale() {\n return this._i18nController.locale;\n }\n\n @watch('locale', { waitUntilFirstUpdate: true })\n protected setDefaultMask(): void {\n if (!this._inputFormat) {\n this.updateDefaultMask();\n this.setMask(this._defaultMask);\n }\n\n if (this.value) {\n this.updateMask();\n }\n }\n\n @watch('displayFormat', { waitUntilFirstUpdate: true })\n protected setDisplayFormat(): void {\n if (this.value) {\n this.updateMask();\n }\n }\n\n protected get hasDateParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat);\n\n return parts.some(\n (p) =>\n p.type === DateParts.Date ||\n p.type === DateParts.Month ||\n p.type === DateParts.Year\n );\n }\n\n protected get hasTimeParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat);\n return parts.some(\n (p) =>\n p.type === DateParts.Hours ||\n p.type === DateParts.Minutes ||\n p.type === DateParts.Seconds\n );\n }\n\n private get targetDatePart(): DatePart | undefined {\n let result: DatePart | undefined;\n\n if (this._focused) {\n const partType = this._inputDateParts.find(\n (p) =>\n p.start <= this._inputSelection.start &&\n this._inputSelection.start <= p.end &&\n p.type !== DateParts.Literal\n )?.type as string as DatePart;\n\n if (partType) {\n result = partType;\n }\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Date)) {\n result = DatePart.Date;\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Hours)) {\n result = DatePart.Hours;\n } else {\n result = this._inputDateParts[0].type as string as DatePart;\n }\n\n return result;\n }\n\n private get datePartDeltas(): DatePartDeltas {\n return Object.assign({}, this._datePartDeltas, this.spinDelta);\n }\n\n constructor() {\n super();\n\n addKeybindings(this, {\n skip: () => this.readOnly,\n bindingDefaults: { triggers: ['keydownRepeat'] },\n })\n .set([ctrlKey, ';'], this.setToday)\n .set(arrowUp, this.keyboardSpin.bind(this, 'up'))\n .set(arrowDown, this.keyboardSpin.bind(this, 'down'))\n .set([ctrlKey, arrowLeft], this.navigateParts.bind(this, 0))\n .set([ctrlKey, arrowRight], this.navigateParts.bind(this, 1));\n }\n\n public override connectedCallback() {\n super.connectedCallback();\n this.updateDefaultMask();\n this.setMask(this.inputFormat);\n if (this.value) {\n this.updateMask();\n }\n }\n\n /** Increments a date/time portion. */\n public stepUp(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this._inputSelection;\n const newValue = this.trySpinValue(targetPart, delta);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Decrements a date/time portion. */\n public stepDown(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this._inputSelection;\n const newValue = this.trySpinValue(targetPart, delta, true);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Clears the input element of user input. */\n public clear(): void {\n this._maskedValue = '';\n this.value = null;\n }\n\n protected setToday() {\n this.value = new Date();\n this._fireInputEvent();\n }\n\n protected updateMask() {\n if (this._focused) {\n this._maskedValue = this.getMaskedValue();\n } else {\n if (!DateTimeUtil.isValidDate(this.value)) {\n this._maskedValue = '';\n return;\n }\n\n const format = this.displayFormat || this.inputFormat;\n\n if (this.displayFormat) {\n this._maskedValue = DateTimeUtil.formatDate(\n this.value,\n this.locale,\n format,\n true\n );\n } else if (this.inputFormat) {\n this._maskedValue = DateTimeUtil.formatDate(\n this.value,\n this.locale,\n format\n );\n } else {\n this._maskedValue = this.value.toLocaleString();\n }\n }\n }\n\n private _fireInputEvent(): void {\n this._setTouchedState();\n this.emitEvent('igcInput', { detail: this.value?.toString() });\n }\n\n protected handleDragLeave() {\n if (!this._focused) {\n this.updateMask();\n }\n }\n\n protected handleDragEnter() {\n if (!this._focused) {\n this._maskedValue = this.getMaskedValue();\n }\n }\n\n protected async _updateInput(\n text: string,\n { start, end }: MaskSelection\n ): Promise<void> {\n const result = this._parser.replace(this._maskedValue, text, start, end);\n\n this._maskedValue = result.value;\n\n this.updateValue();\n this.requestUpdate();\n\n if (start !== this.inputFormat.length) {\n this._fireInputEvent();\n }\n\n await this.updateComplete;\n this.input.setSelectionRange(result.end, result.end);\n }\n\n private trySpinValue(\n datePart: DatePart,\n delta?: number,\n negative = false\n ): Date {\n // default to 1 if a delta is set to 0 or any other falsy value\n const _delta =\n delta || this.datePartDeltas[datePart as keyof DatePartDeltas] || 1;\n\n const spinValue = negative ? -Math.abs(_delta) : Math.abs(_delta);\n return this.spinValue(datePart, spinValue);\n }\n\n private spinValue(datePart: DatePart, delta: number): Date {\n if (!(this.value && DateTimeUtil.isValidDate(this.value))) {\n return new Date();\n }\n\n const newDate = new Date(this.value.getTime());\n let formatPart: DatePartInfo | undefined;\n let amPmFromMask: string;\n\n switch (datePart) {\n case DatePart.Date:\n DateTimeUtil.spinDate(delta, newDate, this.spinLoop);\n break;\n case DatePart.Month:\n DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);\n break;\n case DatePart.Year:\n DateTimeUtil.spinYear(delta, newDate);\n break;\n case DatePart.Hours:\n DateTimeUtil.spinHours(delta, newDate, this.spinLoop);\n break;\n case DatePart.Minutes:\n DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);\n break;\n case DatePart.Seconds:\n DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);\n break;\n case DatePart.AmPm:\n formatPart = this._inputDateParts.find(\n (dp) => dp.type === DateParts.AmPm\n );\n if (formatPart !== undefined) {\n amPmFromMask = this._maskedValue.substring(\n formatPart!.start,\n formatPart!.end\n );\n return DateTimeUtil.spinAmPm(newDate, this.value, amPmFromMask);\n }\n break;\n }\n\n return newDate;\n }\n\n @eventOptions({ passive: false })\n private async onWheel(event: WheelEvent) {\n if (!this._focused || this.readOnly) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { start, end } = this._inputSelection;\n event.deltaY > 0 ? this.stepDown() : this.stepUp();\n this._fireInputEvent();\n\n await this.updateComplete;\n this.setSelectionRange(start, end);\n }\n\n private updateDefaultMask(): void {\n this._defaultMask = DateTimeUtil.getDefaultMask(this.locale);\n }\n\n private setMask(string: string): void {\n const oldFormat = this._inputDateParts?.map((p) => p.format).join('');\n this._inputDateParts = DateTimeUtil.parseDateTimeFormat(string);\n const value = this._inputDateParts.map((p) => p.format).join('');\n\n this._defaultMask = value;\n\n const newMask = (value || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(\n new RegExp(/(?=[^t])[\\w]/, 'g'),\n '0'\n );\n\n this.mask = newMask.includes('tt') ? newMask.replace(/tt/g, 'LL') : newMask;\n\n if (!this.placeholder || oldFormat === this.placeholder) {\n this.placeholder = value;\n }\n }\n\n private parseDate(val: string) {\n return val\n ? DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.prompt)\n : null;\n }\n\n private getMaskedValue(): string {\n let mask = this._parser.emptyMask;\n\n if (DateTimeUtil.isValidDate(this.value)) {\n for (const part of this._inputDateParts) {\n if (part.type === DateParts.Literal) {\n continue;\n }\n\n const targetValue = DateTimeUtil.getPartValue(\n part,\n part.format.length,\n this.value\n );\n\n mask = this._parser.replace(\n mask,\n targetValue,\n part.start,\n part.end\n ).value;\n }\n return mask;\n }\n\n if (this.readOnly) {\n return '';\n }\n\n return this._maskedValue === '' ? mask : this._maskedValue;\n }\n\n private isComplete(): boolean {\n return !this._maskedValue.includes(this.prompt);\n }\n\n private updateValue(): void {\n if (this.isComplete()) {\n const parsedDate = this.parseDate(this._maskedValue);\n this.value = DateTimeUtil.isValidDate(parsedDate) ? parsedDate : null;\n } else {\n this.value = null;\n }\n }\n\n protected override _updateSetRangeTextValue() {\n this.updateValue();\n }\n\n private getNewPosition(value: string, direction = 0): number {\n const cursorPos = this._maskSelection.start;\n\n if (!direction) {\n // Last literal before the current cursor position or start of input value\n const part = this._inputDateParts.findLast(\n (part) => part.type === DateParts.Literal && part.end < cursorPos\n );\n return part?.end ?? 0;\n }\n\n // First literal after the current cursor position or end of input value\n const part = this._inputDateParts.find(\n (part) => part.type === DateParts.Literal && part.start > cursorPos\n );\n return part?.start ?? value.length;\n }\n\n protected async handleFocus() {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n const areFormatsDifferent = this.displayFormat !== this.inputFormat;\n\n if (!this.value) {\n this._maskedValue = this._parser.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (areFormatsDifferent) {\n this.updateMask();\n }\n }\n\n protected handleBlur() {\n const isEmptyMask = this._maskedValue === this._parser.emptyMask;\n\n this._focused = false;\n\n if (!(this.isComplete() || isEmptyMask)) {\n const parse = this.parseDate(this._maskedValue);\n\n if (parse) {\n this.value = parse;\n } else {\n this.value = null;\n this._maskedValue = '';\n }\n } else {\n this.updateMask();\n }\n\n const isSameValue = this._oldValue === this.value;\n\n if (!(this.readOnly || isSameValue)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n super._handleBlur();\n }\n\n protected navigateParts(delta: number) {\n const position = this.getNewPosition(this.input.value, delta);\n this.setSelectionRange(position, position);\n }\n\n protected async keyboardSpin(direction: 'up' | 'down') {\n direction === 'up' ? this.stepUp() : this.stepDown();\n this._fireInputEvent();\n await this.updateComplete;\n this.setSelectionRange(this._maskSelection.start, this._maskSelection.end);\n }\n\n protected override renderInput() {\n return html`\n <input\n type=\"text\"\n part=${partMap(this.resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n .value=${live(this._maskedValue)}\n .placeholder=${this.placeholder || this._parser.emptyMask}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @input=${this._handleInput}\n @wheel=${this.onWheel}\n @keydown=${this._setMaskSelection}\n @click=${this._handleClick}\n @cut=${this._setMaskSelection}\n @compositionstart=${this._handleCompositionStart}\n @compositionend=${this._handleCompositionEnd}\n @dragenter=${this.handleDragEnter}\n @dragleave=${this.handleDragLeave}\n @dragstart=${this._setMaskSelection}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-time-input': IgcDateTimeInputComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDateFormatter } from 'igniteui-i18n-core';\nimport { html } from 'lit';\nimport { eventOptions, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { convertToDate } from '../calendar/helpers.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n} from '../common/controllers/key-bindings.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { addI18nController } from '../common/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { FormValueDateTimeTransformers } from '../common/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { partMap } from '../common/part-map.js';\nimport type { IgcInputComponentEventMap } from '../input/input-base.js';\nimport {\n IgcMaskInputBaseComponent,\n type MaskSelection,\n} from '../mask-input/mask-input-base.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n DatePart,\n type DatePartDeltas,\n type DatePartInfo,\n DateParts,\n DateTimeUtil,\n} from './date-util.js';\nimport { dateTimeInputValidators } from './validators.js';\n\nexport interface IgcDateTimeInputComponentEventMap extends Omit<\n IgcInputComponentEventMap,\n 'igcChange'\n> {\n igcChange: CustomEvent<Date | null>;\n}\n\n/**\n * A date time input is an input field that lets you set and edit the date and time in a chosen input element\n * using customizable display and input formats.\n *\n * @element igc-date-time-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcDateTimeInputComponent extends EventEmitterMixin<\n IgcDateTimeInputComponentEventMap,\n AbstractConstructor<IgcMaskInputBaseComponent>\n>(IgcMaskInputBaseComponent) {\n public static readonly tagName = 'igc-date-time-input';\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcDateTimeInputComponent,\n IgcValidationContainerComponent\n );\n }\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: null,\n transformers: FormValueDateTimeTransformers,\n });\n\n private readonly _i18nController = addI18nController<object>(this, {\n defaultEN: {},\n onResourceChange: () => {\n this.setDefaultMask();\n },\n });\n\n protected _defaultMask!: string;\n private _defaultDisplayFormat!: string;\n private _displayFormat?: string;\n private _oldValue: Date | null = null;\n private _min: Date | null = null;\n private _max: Date | null = null;\n\n private _inputDateParts!: DatePartInfo[];\n private _inputFormat!: string;\n private _datePartDeltas: DatePartDeltas = {\n date: 1,\n month: 1,\n year: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n };\n\n /**\n * The date format to apply on the input.\n * @attr input-format\n */\n @property({ attribute: 'input-format' })\n public get inputFormat(): string {\n return this._inputFormat || this._defaultMask;\n }\n\n public set inputFormat(val: string) {\n if (val) {\n this.setMask(val);\n this._inputFormat = val;\n if (this.value) {\n this.updateMask();\n }\n }\n }\n\n public get value(): Date | null {\n return this._formValue.value;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n * @attr\n */\n @property({ converter: convertToDate })\n public set value(value: Date | string | null | undefined) {\n this._formValue.setValueAndFormState(value as Date | null);\n this.updateMask();\n }\n\n /**\n * The minimum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set min(value: Date | string | null | undefined) {\n this._min = convertToDate(value);\n this._validate();\n }\n\n public get min(): Date | null {\n return this._min;\n }\n\n /**\n * The maximum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set max(value: Date | string | null | undefined) {\n this._max = convertToDate(value);\n this._validate();\n }\n\n public get max(): Date | null {\n return this._max;\n }\n\n /**\n * Format to display the value in when not editing.\n * Defaults to the locale format if not set.\n * @attr display-format\n */\n @property({ attribute: 'display-format' })\n public set displayFormat(value: string) {\n this._displayFormat = value;\n }\n\n public get displayFormat(): string {\n return (\n this._displayFormat ?? this._inputFormat ?? this._defaultDisplayFormat\n );\n }\n\n /**\n * Delta values used to increment or decrement each date part on step actions.\n * All values default to `1`.\n */\n @property({ attribute: false })\n public spinDelta!: DatePartDeltas;\n\n /**\n * Sets whether to loop over the currently spun segment.\n * @attr spin-loop\n */\n @property({ type: Boolean, attribute: 'spin-loop' })\n public spinLoop = true;\n\n /**\n * Gets/Sets the locale used for formatting the display value.\n * @attr locale\n */\n @property()\n public set locale(value: string) {\n this._i18nController.locale = value;\n }\n\n public get locale() {\n return this._i18nController.locale;\n }\n\n @watch('locale', { waitUntilFirstUpdate: true })\n protected setDefaultMask(): void {\n this.updateDefaultDisplayFormat();\n\n if (!this._inputFormat) {\n this.updateDefaultMask();\n this.setMask(this._defaultMask);\n }\n\n if (this.value) {\n this.updateMask();\n }\n }\n\n @watch('displayFormat', { waitUntilFirstUpdate: true })\n protected setDisplayFormat(): void {\n this.updateDefaultDisplayFormat();\n if (this.value) {\n this.updateMask();\n }\n }\n\n protected get hasDateParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat, this.locale);\n\n return parts.some(\n (p) =>\n p.type === DateParts.Date ||\n p.type === DateParts.Month ||\n p.type === DateParts.Year\n );\n }\n\n protected get hasTimeParts(): boolean {\n const parts =\n this._inputDateParts ||\n DateTimeUtil.parseDateTimeFormat(this.inputFormat, this.locale);\n return parts.some(\n (p) =>\n p.type === DateParts.Hours ||\n p.type === DateParts.Minutes ||\n p.type === DateParts.Seconds\n );\n }\n\n private get targetDatePart(): DatePart | undefined {\n let result: DatePart | undefined;\n\n if (this._focused) {\n const partType = this._inputDateParts.find(\n (p) =>\n p.start <= this._inputSelection.start &&\n this._inputSelection.start <= p.end &&\n p.type !== DateParts.Literal\n )?.type as string as DatePart;\n\n if (partType) {\n result = partType;\n }\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Date)) {\n result = DatePart.Date;\n } else if (this._inputDateParts.some((p) => p.type === DateParts.Hours)) {\n result = DatePart.Hours;\n } else {\n result = this._inputDateParts[0].type as string as DatePart;\n }\n\n return result;\n }\n\n private get datePartDeltas(): DatePartDeltas {\n return Object.assign({}, this._datePartDeltas, this.spinDelta);\n }\n\n constructor() {\n super();\n\n addKeybindings(this, {\n skip: () => this.readOnly,\n bindingDefaults: { triggers: ['keydownRepeat'] },\n })\n .set([ctrlKey, ';'], this.setToday)\n .set(arrowUp, this.keyboardSpin.bind(this, 'up'))\n .set(arrowDown, this.keyboardSpin.bind(this, 'down'))\n .set([ctrlKey, arrowLeft], this.navigateParts.bind(this, 0))\n .set([ctrlKey, arrowRight], this.navigateParts.bind(this, 1));\n }\n\n public override connectedCallback() {\n super.connectedCallback();\n this.updateDefaultMask();\n this.updateDefaultDisplayFormat();\n this.setMask(this.inputFormat);\n if (this.value) {\n this.updateMask();\n }\n }\n\n /** Increments a date/time portion. */\n public stepUp(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this._inputSelection;\n const newValue = this.trySpinValue(targetPart, delta);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Decrements a date/time portion. */\n public stepDown(datePart?: DatePart, delta?: number): void {\n const targetPart = datePart || this.targetDatePart;\n\n if (!targetPart) {\n return;\n }\n\n const { start, end } = this._inputSelection;\n const newValue = this.trySpinValue(targetPart, delta, true);\n this.value = newValue;\n this.updateComplete.then(() => this.input.setSelectionRange(start, end));\n }\n\n /** Clears the input element of user input. */\n public clear(): void {\n this._maskedValue = '';\n this.value = null;\n }\n\n protected setToday() {\n this.value = new Date();\n this._fireInputEvent();\n }\n\n protected updateMask() {\n if (this._focused) {\n this._maskedValue = this.getMaskedValue();\n } else {\n if (!DateTimeUtil.isValidDate(this.value)) {\n this._maskedValue = '';\n return;\n }\n\n this._maskedValue = DateTimeUtil.formatDisplayDate(\n this.value,\n this.locale,\n this.displayFormat\n );\n }\n }\n\n private _fireInputEvent(): void {\n this._setTouchedState();\n this.emitEvent('igcInput', { detail: this.value?.toString() });\n }\n\n protected handleDragLeave() {\n if (!this._focused) {\n this.updateMask();\n }\n }\n\n protected handleDragEnter() {\n if (!this._focused) {\n this._maskedValue = this.getMaskedValue();\n }\n }\n\n protected async _updateInput(\n text: string,\n { start, end }: MaskSelection\n ): Promise<void> {\n const result = this._parser.replace(this._maskedValue, text, start, end);\n\n this._maskedValue = result.value;\n\n this.updateValue();\n this.requestUpdate();\n\n if (start !== this.inputFormat.length) {\n this._fireInputEvent();\n }\n\n await this.updateComplete;\n this.input.setSelectionRange(result.end, result.end);\n }\n\n private trySpinValue(\n datePart: DatePart,\n delta?: number,\n negative = false\n ): Date {\n // default to 1 if a delta is set to 0 or any other falsy value\n const _delta =\n delta || this.datePartDeltas[datePart as keyof DatePartDeltas] || 1;\n\n const spinValue = negative ? -Math.abs(_delta) : Math.abs(_delta);\n return this.spinValue(datePart, spinValue);\n }\n\n private spinValue(datePart: DatePart, delta: number): Date {\n if (!(this.value && DateTimeUtil.isValidDate(this.value))) {\n return new Date();\n }\n\n const newDate = new Date(this.value.getTime());\n let formatPart: DatePartInfo | undefined;\n let amPmFromMask: string;\n\n switch (datePart) {\n case DatePart.Date:\n DateTimeUtil.spinDate(delta, newDate, this.spinLoop);\n break;\n case DatePart.Month:\n DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);\n break;\n case DatePart.Year:\n DateTimeUtil.spinYear(delta, newDate);\n break;\n case DatePart.Hours:\n DateTimeUtil.spinHours(delta, newDate, this.spinLoop);\n break;\n case DatePart.Minutes:\n DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);\n break;\n case DatePart.Seconds:\n DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);\n break;\n case DatePart.AmPm:\n formatPart = this._inputDateParts.find(\n (dp) => dp.type === DateParts.AmPm\n );\n if (formatPart !== undefined) {\n amPmFromMask = this._maskedValue.substring(\n formatPart!.start,\n formatPart!.end\n );\n return DateTimeUtil.spinAmPm(newDate, this.value, amPmFromMask);\n }\n break;\n }\n\n return newDate;\n }\n\n @eventOptions({ passive: false })\n private async onWheel(event: WheelEvent) {\n if (!this._focused || this.readOnly) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const { start, end } = this._inputSelection;\n event.deltaY > 0 ? this.stepDown() : this.stepUp();\n this._fireInputEvent();\n\n await this.updateComplete;\n this.setSelectionRange(start, end);\n }\n\n private updateDefaultMask(): void {\n this._defaultMask = DateTimeUtil.getDefaultInputMask(this.locale);\n }\n\n private updateDefaultDisplayFormat(): void {\n this._defaultDisplayFormat = getDateFormatter().getLocaleDateTimeFormat(\n this.locale\n );\n }\n\n private setMask(string: string): void {\n const oldFormat = this._inputDateParts?.map((p) => p.format).join('');\n this._inputDateParts = DateTimeUtil.parseDateTimeFormat(\n string,\n this.locale,\n true\n );\n const value = this._inputDateParts.map((p) => p.format).join('');\n\n this._defaultMask = value;\n\n const newMask = (value || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(\n new RegExp(/(?=[^t])[\\w]/, 'g'),\n '0'\n );\n\n this.mask = newMask.includes('tt') ? newMask.replace(/tt/g, 'LL') : newMask;\n\n if (!this.placeholder || oldFormat === this.placeholder) {\n this.placeholder = value;\n }\n }\n\n private parseDate(val: string) {\n return val\n ? DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.prompt)\n : null;\n }\n\n private getMaskedValue(): string {\n let mask = this._parser.emptyMask;\n\n if (DateTimeUtil.isValidDate(this.value)) {\n for (const part of this._inputDateParts) {\n if (part.type === DateParts.Literal) {\n continue;\n }\n\n const targetValue = DateTimeUtil.getPartValue(\n part,\n part.format.length,\n this.value\n );\n\n mask = this._parser.replace(\n mask,\n targetValue,\n part.start,\n part.end\n ).value;\n }\n return mask;\n }\n\n if (this.readOnly) {\n return '';\n }\n\n return this._maskedValue === '' ? mask : this._maskedValue;\n }\n\n private isComplete(): boolean {\n return !this._maskedValue.includes(this.prompt);\n }\n\n private updateValue(): void {\n if (this.isComplete()) {\n const parsedDate = this.parseDate(this._maskedValue);\n this.value = DateTimeUtil.isValidDate(parsedDate) ? parsedDate : null;\n } else {\n this.value = null;\n }\n }\n\n protected override _updateSetRangeTextValue() {\n this.updateValue();\n }\n\n private getNewPosition(value: string, direction = 0): number {\n const cursorPos = this._maskSelection.start;\n\n if (!direction) {\n // Last literal before the current cursor position or start of input value\n const part = this._inputDateParts.findLast(\n (part) => part.type === DateParts.Literal && part.end < cursorPos\n );\n return part?.end ?? 0;\n }\n\n // First literal after the current cursor position or end of input value\n const part = this._inputDateParts.find(\n (part) => part.type === DateParts.Literal && part.start > cursorPos\n );\n return part?.start ?? value.length;\n }\n\n protected async handleFocus() {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n const areFormatsDifferent = this.displayFormat !== this.inputFormat;\n\n if (!this.value) {\n this._maskedValue = this._parser.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (areFormatsDifferent) {\n this.updateMask();\n }\n }\n\n protected handleBlur() {\n const isEmptyMask = this._maskedValue === this._parser.emptyMask;\n\n this._focused = false;\n\n if (!(this.isComplete() || isEmptyMask)) {\n const parse = this.parseDate(this._maskedValue);\n\n if (parse) {\n this.value = parse;\n } else {\n this.value = null;\n this._maskedValue = '';\n }\n } else {\n this.updateMask();\n }\n\n const isSameValue = this._oldValue === this.value;\n\n if (!(this.readOnly || isSameValue)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n super._handleBlur();\n }\n\n protected navigateParts(delta: number) {\n const position = this.getNewPosition(this.input.value, delta);\n this.setSelectionRange(position, position);\n }\n\n protected async keyboardSpin(direction: 'up' | 'down') {\n direction === 'up' ? this.stepUp() : this.stepDown();\n this._fireInputEvent();\n await this.updateComplete;\n this.setSelectionRange(this._maskSelection.start, this._maskSelection.end);\n }\n\n protected override renderInput() {\n return html`\n <input\n type=\"text\"\n part=${partMap(this.resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n .value=${live(this._maskedValue)}\n .placeholder=${this.placeholder || this._parser.emptyMask}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @input=${this._handleInput}\n @wheel=${this.onWheel}\n @keydown=${this._setMaskSelection}\n @click=${this._handleClick}\n @cut=${this._setMaskSelection}\n @compositionstart=${this._handleCompositionStart}\n @compositionend=${this._handleCompositionEnd}\n @dragenter=${this.handleDragEnter}\n @dragleave=${this.handleDragLeave}\n @dragstart=${this._setMaskSelection}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-time-input': IgcDateTimeInputComponent;\n }\n}\n"]}
@@ -40,15 +40,21 @@ export interface DatePartDeltas {
40
40
  export declare abstract class DateTimeUtil {
41
41
  static readonly DEFAULT_INPUT_FORMAT = "MM/dd/yyyy";
42
42
  static readonly DEFAULT_TIME_INPUT_FORMAT = "hh:mm tt";
43
- private static readonly SEPARATOR;
44
- private static readonly DEFAULT_LOCALE;
45
43
  private static readonly PREDEFINED_FORMATS;
46
44
  static parseValueFromMask(inputData: string, dateTimeParts: DatePartInfo[], promptChar?: string): Date | null;
47
- static getDefaultMask(locale: string): string;
48
- static parseDateTimeFormat(mask: string, locale?: string, noLeadingZero?: boolean): DatePartInfo[];
45
+ static getDefaultInputMask(locale: string): string;
46
+ static parseDateTimeFormat(mask: string, locale: string, leadingZero?: boolean): DatePartInfo[];
49
47
  static parseIsoDate(value: string): Date | null;
50
48
  static isValidDate(value: any): value is Date;
51
- static formatDate(value: Date, locale: string, format: string, noLeadingZero?: boolean): string;
49
+ /**
50
+ * Format date for display.
51
+ * @param value Date value
52
+ * @param locale Locale of the component
53
+ * @param displayFormat Display format specified by the user. Can be undefined.
54
+ * @param inputFormat Input format, so it is not calculated again and used for leading zero format.
55
+ * @returns
56
+ */
57
+ static formatDisplayDate(value: Date, locale: string, displayFormat: string | undefined): string;
52
58
  static getPartValue(datePartInfo: DatePartInfo, partLength: number, _dateValue: Date | null): string;
53
59
  private static _spinTimePart;
54
60
  static spinYear(delta: number, newDate: Date): Date;
@@ -81,13 +87,9 @@ export declare abstract class DateTimeUtil {
81
87
  * @param format The format to check and transform
82
88
  */
83
89
  static predefinedToDateDisplayFormat(format?: string): string | undefined;
84
- private static setDisplayFormatOptions;
85
- private static getMask;
86
90
  private static addCurrentPart;
87
91
  private static ensureLeadingZero;
88
92
  private static determineDatePart;
89
- private static getDefaultLocaleMask;
90
- private static fillDatePartsPositions;
91
93
  private static getCleanVal;
92
94
  private static escapeRegExp;
93
95
  private static trimEmptyPlaceholders;
@@ -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
  }