igniteui-webcomponents 3.2.0 → 3.3.0-beta.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 (245) hide show
  1. package/CHANGELOG.md +30 -8
  2. package/README.md +52 -2
  3. package/components/badge/themes/light/badge.bootstrap.css.js +1 -1
  4. package/components/badge/themes/light/badge.bootstrap.css.js.map +1 -1
  5. package/components/button/button-base.d.ts +1 -1
  6. package/components/button/themes/button/light/button.base.css.js +1 -1
  7. package/components/button/themes/button/light/button.base.css.js.map +1 -1
  8. package/components/button/themes/button/light/button.material.css.js +1 -1
  9. package/components/button/themes/button/light/button.material.css.js.map +1 -1
  10. package/components/calendar/calendar.d.ts +1 -1
  11. package/components/calendar/days-view/days-view.d.ts +1 -1
  12. package/components/calendar/months-view/months-view.d.ts +1 -1
  13. package/components/calendar/themes/bootstrap/calendar.bootstrap.css.js +1 -1
  14. package/components/calendar/themes/bootstrap/calendar.bootstrap.css.js.map +1 -1
  15. package/components/calendar/years-view/years-view.d.ts +1 -1
  16. package/components/card/card.header.js +2 -0
  17. package/components/card/card.header.js.map +1 -1
  18. package/components/card/themes/light/card.header.bootstrap.css.js +1 -1
  19. package/components/card/themes/light/card.header.bootstrap.css.js.map +1 -1
  20. package/components/{nav-drawer/styles/indigo/nav-drawer-header-item.indigo.css.d.ts → card/themes/light/card.header.fluent.css.d.ts} +0 -0
  21. package/components/card/themes/light/card.header.fluent.css.js +3 -0
  22. package/components/card/themes/light/card.header.fluent.css.js.map +1 -0
  23. package/components/checkbox/checkbox-base.d.ts +1 -1
  24. package/components/checkbox/themes/light/checkbox.base.css.js +1 -1
  25. package/components/checkbox/themes/light/checkbox.base.css.js.map +1 -1
  26. package/components/checkbox/themes/light/checkbox.bootstrap.css.js +1 -1
  27. package/components/checkbox/themes/light/checkbox.bootstrap.css.js.map +1 -1
  28. package/components/checkbox/themes/light/checkbox.fluent.css.js +1 -1
  29. package/components/checkbox/themes/light/checkbox.fluent.css.js.map +1 -1
  30. package/components/checkbox/themes/light/checkbox.indigo.css.js +1 -1
  31. package/components/checkbox/themes/light/checkbox.indigo.css.js.map +1 -1
  32. package/components/checkbox/themes/light/checkbox.material.css.js +1 -1
  33. package/components/checkbox/themes/light/checkbox.material.css.js.map +1 -1
  34. package/components/checkbox/themes/light/switch.base.css.js +1 -1
  35. package/components/checkbox/themes/light/switch.base.css.js.map +1 -1
  36. package/components/checkbox/themes/light/switch.fluent.css.js +1 -1
  37. package/components/checkbox/themes/light/switch.fluent.css.js.map +1 -1
  38. package/components/chip/chip.d.ts +1 -1
  39. package/components/chip/themes/chip.base.css.js +1 -1
  40. package/components/chip/themes/chip.base.css.js.map +1 -1
  41. package/components/chip/themes/chip.bootstrap.css.js +1 -1
  42. package/components/chip/themes/chip.bootstrap.css.js.map +1 -1
  43. package/components/chip/themes/chip.fluent.css.js +1 -1
  44. package/components/chip/themes/chip.fluent.css.js.map +1 -1
  45. package/components/chip/themes/chip.indigo.css.js +1 -1
  46. package/components/chip/themes/chip.indigo.css.js.map +1 -1
  47. package/components/chip/themes/chip.material.css.js +1 -1
  48. package/components/chip/themes/chip.material.css.js.map +1 -1
  49. package/components/common/definitions/defineAllComponents.js +8 -0
  50. package/components/common/definitions/defineAllComponents.js.map +1 -1
  51. package/components/common/mixins/constructor.d.ts +1 -0
  52. package/components/common/mixins/constructor.js.map +1 -1
  53. package/components/common/mixins/event-emitter.d.ts +2 -2
  54. package/components/common/mixins/event-emitter.js +2 -2
  55. package/components/common/mixins/event-emitter.js.map +1 -1
  56. package/components/common/util.d.ts +18 -0
  57. package/components/common/util.js +17 -0
  58. package/components/common/util.js.map +1 -1
  59. package/components/date-time-input/date-time-input.d.ts +108 -0
  60. package/components/date-time-input/date-time-input.js +495 -0
  61. package/components/date-time-input/date-time-input.js.map +1 -0
  62. package/components/date-time-input/date-util.d.ts +89 -0
  63. package/components/date-time-input/date-util.js +597 -0
  64. package/components/date-time-input/date-util.js.map +1 -0
  65. package/components/dropdown/dropdown-group.js +2 -0
  66. package/components/dropdown/dropdown-group.js.map +1 -1
  67. package/components/dropdown/dropdown.d.ts +1 -1
  68. package/components/expansion-panel/expansion-panel.d.ts +2 -1
  69. package/components/expansion-panel/expansion-panel.js +1 -0
  70. package/components/expansion-panel/expansion-panel.js.map +1 -1
  71. package/components/form/form.d.ts +1 -1
  72. package/components/form/form.js +3 -1
  73. package/components/form/form.js.map +1 -1
  74. package/components/icon/icon.material.css.js +1 -1
  75. package/components/icon/icon.material.css.js.map +1 -1
  76. package/components/input/input-base.d.ts +6 -3
  77. package/components/input/input-base.js +10 -6
  78. package/components/input/input-base.js.map +1 -1
  79. package/components/input/input.d.ts +1 -4
  80. package/components/input/input.js +8 -4
  81. package/components/input/input.js.map +1 -1
  82. package/components/input/themes/light/input.bootstrap.css.js +1 -1
  83. package/components/input/themes/light/input.bootstrap.css.js.map +1 -1
  84. package/components/list/themes/light/list-item.bootstrap.css.js +1 -1
  85. package/components/list/themes/light/list-item.bootstrap.css.js.map +1 -1
  86. package/components/list/themes/light/list-item.fluent.css.js +1 -1
  87. package/components/list/themes/light/list-item.fluent.css.js.map +1 -1
  88. package/components/list/themes/light/list-item.indigo.css.js +1 -1
  89. package/components/list/themes/light/list-item.indigo.css.js.map +1 -1
  90. package/components/mask-input/mask-input-base.d.ts +38 -0
  91. package/components/mask-input/mask-input-base.js +110 -0
  92. package/components/mask-input/mask-input-base.js.map +1 -0
  93. package/components/mask-input/mask-input.d.ts +5 -36
  94. package/components/mask-input/mask-input.js +11 -89
  95. package/components/mask-input/mask-input.js.map +1 -1
  96. package/components/nav-drawer/nav-drawer-header-item.js +4 -3
  97. package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
  98. package/components/nav-drawer/nav-drawer-item.js +4 -3
  99. package/components/nav-drawer/nav-drawer-item.js.map +1 -1
  100. package/components/nav-drawer/nav-drawer.js +2 -2
  101. package/components/nav-drawer/nav-drawer.js.map +1 -1
  102. package/components/nav-drawer/{styles → themes/dark}/nav-drawer-item.base.css.d.ts +0 -0
  103. package/components/nav-drawer/themes/dark/nav-drawer-item.base.css.js +3 -0
  104. package/components/nav-drawer/themes/dark/nav-drawer-item.base.css.js.map +1 -0
  105. package/components/nav-drawer/{styles/indigo/nav-drawer-item.indigo.css.d.ts → themes/dark/nav-drawer-item.bootstrap.css.d.ts} +0 -0
  106. package/components/nav-drawer/themes/dark/nav-drawer-item.bootstrap.css.js +3 -0
  107. package/components/nav-drawer/themes/dark/nav-drawer-item.bootstrap.css.js.map +1 -0
  108. package/components/nav-drawer/{styles/indigo/nav-drawer.indigo.css.d.ts → themes/dark/nav-drawer-item.fluent.css.d.ts} +0 -0
  109. package/components/nav-drawer/themes/dark/nav-drawer-item.fluent.css.js +3 -0
  110. package/components/nav-drawer/themes/dark/nav-drawer-item.fluent.css.js.map +1 -0
  111. package/components/nav-drawer/{styles/nav-drawer-header-item.base.css.d.ts → themes/dark/nav-drawer-item.indigo.css.d.ts} +0 -0
  112. package/components/nav-drawer/themes/dark/nav-drawer-item.indigo.css.js +3 -0
  113. package/components/nav-drawer/themes/dark/nav-drawer-item.indigo.css.js.map +1 -0
  114. package/components/nav-drawer/{styles/nav-drawer.base.css.d.ts → themes/dark/nav-drawer.indigo.css.d.ts} +0 -0
  115. package/components/nav-drawer/themes/dark/nav-drawer.indigo.css.js +3 -0
  116. package/components/nav-drawer/themes/dark/nav-drawer.indigo.css.js.map +1 -0
  117. package/components/{snackbar/themes/snackbar.base.css.d.ts → nav-drawer/themes/light/fluent/nav-drawer-header-item.fluent.css.d.ts} +0 -0
  118. package/components/nav-drawer/themes/light/fluent/nav-drawer-header-item.fluent.css.js +3 -0
  119. package/components/nav-drawer/themes/light/fluent/nav-drawer-header-item.fluent.css.js.map +1 -0
  120. package/components/{snackbar/themes/snackbar.bootstrap.css.d.ts → nav-drawer/themes/light/fluent/nav-drawer-item.fluent.css.d.ts} +0 -0
  121. package/components/nav-drawer/themes/light/fluent/nav-drawer-item.fluent.css.js +3 -0
  122. package/components/nav-drawer/themes/light/fluent/nav-drawer-item.fluent.css.js.map +1 -0
  123. package/components/{snackbar/themes/snackbar.fluent.css.d.ts → nav-drawer/themes/light/indigo/nav-drawer-header-item.indigo.css.d.ts} +0 -0
  124. package/components/nav-drawer/{styles → themes/light}/indigo/nav-drawer-header-item.indigo.css.js +0 -0
  125. package/components/nav-drawer/themes/light/indigo/nav-drawer-header-item.indigo.css.js.map +1 -0
  126. package/components/{snackbar/themes/snackbar.indigo.css.d.ts → nav-drawer/themes/light/indigo/nav-drawer-item.indigo.css.d.ts} +0 -0
  127. package/components/nav-drawer/themes/light/indigo/nav-drawer-item.indigo.css.js +3 -0
  128. package/components/nav-drawer/themes/light/indigo/nav-drawer-item.indigo.css.js.map +1 -0
  129. package/components/nav-drawer/themes/light/indigo/nav-drawer.indigo.css.d.ts +1 -0
  130. package/components/nav-drawer/themes/light/indigo/nav-drawer.indigo.css.js +3 -0
  131. package/components/nav-drawer/themes/light/indigo/nav-drawer.indigo.css.js.map +1 -0
  132. package/components/nav-drawer/themes/light/nav-drawer-header-item.base.css.d.ts +1 -0
  133. package/components/nav-drawer/{styles → themes/light}/nav-drawer-header-item.base.css.js +1 -1
  134. package/components/nav-drawer/themes/light/nav-drawer-header-item.base.css.js.map +1 -0
  135. package/components/nav-drawer/themes/light/nav-drawer-item.base.css.d.ts +1 -0
  136. package/components/nav-drawer/{styles → themes/light}/nav-drawer-item.base.css.js +1 -1
  137. package/components/nav-drawer/themes/light/nav-drawer-item.base.css.js.map +1 -0
  138. package/components/nav-drawer/themes/light/nav-drawer.base.css.d.ts +1 -0
  139. package/components/nav-drawer/{styles → themes/light}/nav-drawer.base.css.js +0 -0
  140. package/components/nav-drawer/themes/light/nav-drawer.base.css.js.map +1 -0
  141. package/components/radio/radio.d.ts +1 -1
  142. package/components/radio/themes/light/radio.base.css.js +1 -1
  143. package/components/radio/themes/light/radio.base.css.js.map +1 -1
  144. package/components/radio/themes/light/radio.fluent.css.js +1 -1
  145. package/components/radio/themes/light/radio.fluent.css.js.map +1 -1
  146. package/components/rating/rating.d.ts +1 -1
  147. package/components/slider/range-slider.d.ts +1 -1
  148. package/components/slider/slider.d.ts +1 -1
  149. package/components/snackbar/snackbar.d.ts +1 -1
  150. package/components/snackbar/snackbar.js +5 -4
  151. package/components/snackbar/snackbar.js.map +1 -1
  152. package/components/snackbar/themes/dark/snackbar.indigo.css.d.ts +1 -0
  153. package/components/snackbar/themes/dark/snackbar.indigo.css.js +3 -0
  154. package/components/snackbar/themes/dark/snackbar.indigo.css.js.map +1 -0
  155. package/components/snackbar/themes/light/snackbar.base.css.d.ts +1 -0
  156. package/components/snackbar/themes/light/snackbar.base.css.js +3 -0
  157. package/components/snackbar/themes/light/snackbar.base.css.js.map +1 -0
  158. package/components/snackbar/themes/light/snackbar.bootstrap.css.d.ts +1 -0
  159. package/components/snackbar/themes/light/snackbar.bootstrap.css.js +3 -0
  160. package/components/snackbar/themes/light/snackbar.bootstrap.css.js.map +1 -0
  161. package/components/snackbar/themes/light/snackbar.fluent.css.d.ts +1 -0
  162. package/components/snackbar/themes/light/snackbar.fluent.css.js +3 -0
  163. package/components/snackbar/themes/light/snackbar.fluent.css.js.map +1 -0
  164. package/components/snackbar/themes/light/snackbar.indigo.css.d.ts +1 -0
  165. package/components/snackbar/themes/light/snackbar.indigo.css.js +3 -0
  166. package/components/snackbar/themes/light/snackbar.indigo.css.js.map +1 -0
  167. package/components/tabs/tab-panel.d.ts +20 -0
  168. package/components/tabs/tab-panel.js +21 -0
  169. package/components/tabs/tab-panel.js.map +1 -0
  170. package/components/tabs/tab.d.ts +37 -0
  171. package/components/tabs/tab.js +71 -0
  172. package/components/tabs/tab.js.map +1 -0
  173. package/components/tabs/tabs.d.ts +80 -0
  174. package/components/tabs/tabs.js +308 -0
  175. package/components/tabs/tabs.js.map +1 -0
  176. package/components/tabs/themes/dark/tab.dark.base.css.d.ts +1 -0
  177. package/components/tabs/themes/dark/tab.dark.base.css.js +3 -0
  178. package/components/tabs/themes/dark/tab.dark.base.css.js.map +1 -0
  179. package/components/tabs/themes/dark/tab.dark.bootstrap.css.d.ts +1 -0
  180. package/components/tabs/themes/dark/tab.dark.bootstrap.css.js +3 -0
  181. package/components/tabs/themes/dark/tab.dark.bootstrap.css.js.map +1 -0
  182. package/components/tabs/themes/light/tab-panel.base.css.d.ts +1 -0
  183. package/components/tabs/themes/light/tab-panel.base.css.js +3 -0
  184. package/components/tabs/themes/light/tab-panel.base.css.js.map +1 -0
  185. package/components/tabs/themes/light/tab.base.css.d.ts +1 -0
  186. package/components/tabs/themes/light/tab.base.css.js +3 -0
  187. package/components/tabs/themes/light/tab.base.css.js.map +1 -0
  188. package/components/tabs/themes/light/tab.bootstrap.css.d.ts +1 -0
  189. package/components/tabs/themes/light/tab.bootstrap.css.js +3 -0
  190. package/components/tabs/themes/light/tab.bootstrap.css.js.map +1 -0
  191. package/components/tabs/themes/light/tab.fluent.css.d.ts +1 -0
  192. package/components/tabs/themes/light/tab.fluent.css.js +3 -0
  193. package/components/tabs/themes/light/tab.fluent.css.js.map +1 -0
  194. package/components/tabs/themes/light/tab.indigo.css.d.ts +1 -0
  195. package/components/tabs/themes/light/tab.indigo.css.js +3 -0
  196. package/components/tabs/themes/light/tab.indigo.css.js.map +1 -0
  197. package/components/tabs/themes/light/tabs.base.css.d.ts +1 -0
  198. package/components/tabs/themes/light/tabs.base.css.js +3 -0
  199. package/components/tabs/themes/light/tabs.base.css.js.map +1 -0
  200. package/components/tabs/themes/light/tabs.bootstrap.css.d.ts +1 -0
  201. package/components/tabs/themes/light/tabs.bootstrap.css.js +3 -0
  202. package/components/tabs/themes/light/tabs.bootstrap.css.js.map +1 -0
  203. package/components/tabs/themes/light/tabs.fluent.css.d.ts +1 -0
  204. package/components/tabs/themes/light/tabs.fluent.css.js +3 -0
  205. package/components/tabs/themes/light/tabs.fluent.css.js.map +1 -0
  206. package/components/tabs/themes/light/tabs.indigo.css.d.ts +1 -0
  207. package/components/tabs/themes/light/tabs.indigo.css.js +3 -0
  208. package/components/tabs/themes/light/tabs.indigo.css.js.map +1 -0
  209. package/components/tabs/utils.d.ts +14 -0
  210. package/components/tabs/utils.js +32 -0
  211. package/components/tabs/utils.js.map +1 -0
  212. package/components/toast/themes/toast.base.css.js +1 -1
  213. package/components/toast/themes/toast.base.css.js.map +1 -1
  214. package/components/tree/tree-item.d.ts +1 -0
  215. package/components/tree/tree-item.js +14 -3
  216. package/components/tree/tree-item.js.map +1 -1
  217. package/components/tree/tree.d.ts +1 -1
  218. package/components/tree/tree.js +10 -0
  219. package/components/tree/tree.js.map +1 -1
  220. package/custom-elements.json +544 -39
  221. package/index.d.ts +5 -0
  222. package/index.js +5 -0
  223. package/index.js.map +1 -1
  224. package/package.json +3 -3
  225. package/themes/dark/bootstrap.css +1 -1
  226. package/themes/dark/fluent.css +1 -1
  227. package/themes/dark/indigo.css +1 -1
  228. package/themes/dark/material.css +1 -1
  229. package/vscode-html-custom-data.json +216 -37
  230. package/components/nav-drawer/styles/indigo/nav-drawer-header-item.indigo.css.js.map +0 -1
  231. package/components/nav-drawer/styles/indigo/nav-drawer-item.indigo.css.js +0 -3
  232. package/components/nav-drawer/styles/indigo/nav-drawer-item.indigo.css.js.map +0 -1
  233. package/components/nav-drawer/styles/indigo/nav-drawer.indigo.css.js +0 -3
  234. package/components/nav-drawer/styles/indigo/nav-drawer.indigo.css.js.map +0 -1
  235. package/components/nav-drawer/styles/nav-drawer-header-item.base.css.js.map +0 -1
  236. package/components/nav-drawer/styles/nav-drawer-item.base.css.js.map +0 -1
  237. package/components/nav-drawer/styles/nav-drawer.base.css.js.map +0 -1
  238. package/components/snackbar/themes/snackbar.base.css.js +0 -3
  239. package/components/snackbar/themes/snackbar.base.css.js.map +0 -1
  240. package/components/snackbar/themes/snackbar.bootstrap.css.js +0 -3
  241. package/components/snackbar/themes/snackbar.bootstrap.css.js.map +0 -1
  242. package/components/snackbar/themes/snackbar.fluent.css.js +0 -3
  243. package/components/snackbar/themes/snackbar.fluent.css.js.map +0 -1
  244. package/components/snackbar/themes/snackbar.indigo.css.js +0 -3
  245. package/components/snackbar/themes/snackbar.indigo.css.js.map +0 -1
@@ -0,0 +1,495 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html } from 'lit';
8
+ import { property } from 'lit/decorators.js';
9
+ import { live } from 'lit/directives/live.js';
10
+ import { DateParts, DatePart, DateTimeUtil, } from './date-util.js';
11
+ import { blazorTwoWayBind } from '../common/decorators/blazorTwoWayBind.js';
12
+ import { watch } from '../common/decorators/watch.js';
13
+ import { ifDefined } from 'lit/directives/if-defined.js';
14
+ import { IgcMaskInputBaseComponent } from '../mask-input/mask-input-base.js';
15
+ import { partNameMap } from '../common/util.js';
16
+ import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
17
+ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcMaskInputBaseComponent) {
18
+ constructor() {
19
+ super();
20
+ this._datePartDeltas = {
21
+ date: 1,
22
+ month: 1,
23
+ year: 1,
24
+ hours: 1,
25
+ minutes: 1,
26
+ seconds: 1,
27
+ };
28
+ this.spinLoop = true;
29
+ this.locale = 'en';
30
+ this.addEventListener('wheel', this.onWheel);
31
+ }
32
+ get inputFormat() {
33
+ return this._inputFormat || this._defaultMask;
34
+ }
35
+ set inputFormat(val) {
36
+ if (val) {
37
+ this.setMask(val);
38
+ this._inputFormat = val;
39
+ }
40
+ }
41
+ get value() {
42
+ return this._value;
43
+ }
44
+ set value(val) {
45
+ this._value = val
46
+ ? DateTimeUtil.isValidDate(val)
47
+ ? val
48
+ : DateTimeUtil.parseIsoDate(val)
49
+ : null;
50
+ this.updateMask();
51
+ this.validate();
52
+ }
53
+ setDefaultMask() {
54
+ if (!this._inputFormat) {
55
+ this.updateDefaultMask();
56
+ this.setMask(this._defaultMask);
57
+ }
58
+ if (this.value) {
59
+ this.updateMask();
60
+ }
61
+ }
62
+ setDisplayFormat() {
63
+ if (this.displayFormat) {
64
+ if (this.value) {
65
+ this.maskedValue = DateTimeUtil.formatDate(this.value, this.locale, this.displayFormat, true);
66
+ }
67
+ }
68
+ }
69
+ promptChange() {
70
+ if (!this.prompt) {
71
+ this.prompt = this.parser.prompt;
72
+ }
73
+ else {
74
+ this.parser.prompt = this.prompt;
75
+ }
76
+ }
77
+ handleInvalidState() {
78
+ this.updateComplete.then(() => (this.invalid = !this.input.checkValidity()));
79
+ }
80
+ validate() {
81
+ if (!this.value) {
82
+ return null;
83
+ }
84
+ let errors = {};
85
+ if (this.minValue || this.maxValue) {
86
+ errors = DateTimeUtil.validateMinMax(this.value, this.minValue, this.maxValue, this.hasTimeParts, this.hasDateParts);
87
+ if (Object.keys(errors).length > 0) {
88
+ this.invalid = true;
89
+ }
90
+ else {
91
+ this.invalid = false;
92
+ }
93
+ }
94
+ return errors;
95
+ }
96
+ get hasDateParts() {
97
+ const parts = this._inputDateParts ||
98
+ DateTimeUtil.parseDateTimeFormat(this.inputFormat);
99
+ return parts.some((p) => p.type === DateParts.Date ||
100
+ p.type === DateParts.Month ||
101
+ p.type === DateParts.Year);
102
+ }
103
+ get hasTimeParts() {
104
+ const parts = this._inputDateParts ||
105
+ DateTimeUtil.parseDateTimeFormat(this.inputFormat);
106
+ return parts.some((p) => p.type === DateParts.Hours ||
107
+ p.type === DateParts.Minutes ||
108
+ p.type === DateParts.Seconds);
109
+ }
110
+ get targetDatePart() {
111
+ var _a;
112
+ let result;
113
+ if (this.hasFocus) {
114
+ const partType = (_a = this._inputDateParts.find((p) => p.start <= this.inputSelection.start &&
115
+ this.inputSelection.start <= p.end &&
116
+ p.type !== DateParts.Literal)) === null || _a === void 0 ? void 0 : _a.type;
117
+ if (partType) {
118
+ result = partType;
119
+ }
120
+ }
121
+ else {
122
+ if (this._inputDateParts.some((p) => p.type === DateParts.Date)) {
123
+ result = DatePart.Date;
124
+ }
125
+ else if (this._inputDateParts.some((p) => p.type === DateParts.Hours)) {
126
+ result = DatePart.Hours;
127
+ }
128
+ else {
129
+ result = this._inputDateParts[0].type;
130
+ }
131
+ }
132
+ return result;
133
+ }
134
+ get datePartDeltas() {
135
+ return Object.assign({}, this._datePartDeltas, this.spinDelta);
136
+ }
137
+ connectedCallback() {
138
+ super.connectedCallback();
139
+ this.updateDefaultMask();
140
+ this.setMask(this.inputFormat);
141
+ if (this.value) {
142
+ this.updateMask();
143
+ }
144
+ }
145
+ reportValidity() {
146
+ const state = this._value
147
+ ? Object.keys(this.validate()).length === 0
148
+ : this.input.reportValidity();
149
+ this.invalid = !state;
150
+ return state;
151
+ }
152
+ checkValidity() {
153
+ if (this.disabled) {
154
+ return this.input.checkValidity();
155
+ }
156
+ if (!this._value) {
157
+ return !this.required;
158
+ }
159
+ return (this.input.checkValidity() && Object.keys(this.validate()).length === 0);
160
+ }
161
+ stepUp(datePart, delta) {
162
+ const targetPart = datePart || this.targetDatePart;
163
+ if (!targetPart) {
164
+ return;
165
+ }
166
+ const newValue = this.trySpinValue(targetPart, delta);
167
+ this.value = newValue;
168
+ }
169
+ stepDown(datePart, delta) {
170
+ const targetPart = datePart || this.targetDatePart;
171
+ if (!targetPart) {
172
+ return;
173
+ }
174
+ const newValue = this.trySpinValue(targetPart, delta, true);
175
+ this.value = newValue;
176
+ }
177
+ clear() {
178
+ this.maskedValue = '';
179
+ this.value = null;
180
+ }
181
+ updateMask() {
182
+ if (this.hasFocus) {
183
+ this.maskedValue = this.getMaskedValue();
184
+ }
185
+ else {
186
+ if (!this.value || !DateTimeUtil.isValidDate(this.value)) {
187
+ this.maskedValue = '';
188
+ return;
189
+ }
190
+ const format = this.displayFormat || this.inputFormat;
191
+ if (this.displayFormat) {
192
+ this.maskedValue = DateTimeUtil.formatDate(this.value, this.locale, format, true);
193
+ }
194
+ else if (this.inputFormat) {
195
+ this.maskedValue = DateTimeUtil.formatDate(this.value, this.locale, format);
196
+ }
197
+ else {
198
+ this.maskedValue = this.value.toLocaleString();
199
+ }
200
+ }
201
+ }
202
+ handleChange() {
203
+ this.emitEvent('igcChange', { detail: this.value });
204
+ this.invalid = !this.checkValidity();
205
+ }
206
+ handleDragLeave() {
207
+ if (!this.hasFocus) {
208
+ this.updateMask();
209
+ }
210
+ }
211
+ handleDragEnter() {
212
+ if (!this.hasFocus) {
213
+ this.maskedValue = this.getMaskedValue();
214
+ }
215
+ }
216
+ updateInput(part, start, finish) {
217
+ var _a;
218
+ const { value, end } = this.parser.replace(this.maskedValue, part, start, finish);
219
+ this.maskedValue = value;
220
+ this.updateValue();
221
+ this.requestUpdate();
222
+ if (start !== this.inputFormat.length) {
223
+ this.emitEvent('igcInput', { detail: (_a = this.value) === null || _a === void 0 ? void 0 : _a.toString() });
224
+ }
225
+ this.updateComplete.then(() => this.input.setSelectionRange(end, end));
226
+ }
227
+ trySpinValue(datePart, delta, negative = false) {
228
+ if (!delta) {
229
+ delta = this.datePartDeltas[datePart] || 1;
230
+ }
231
+ const spinValue = negative ? -Math.abs(delta) : Math.abs(delta);
232
+ return this.spinValue(datePart, spinValue);
233
+ }
234
+ spinValue(datePart, delta) {
235
+ if (!this.value || !DateTimeUtil.isValidDate(this.value)) {
236
+ return new Date();
237
+ }
238
+ const newDate = new Date(this.value.getTime());
239
+ let formatPart, amPmFromMask;
240
+ switch (datePart) {
241
+ case DatePart.Date:
242
+ DateTimeUtil.spinDate(delta, newDate, this.spinLoop);
243
+ break;
244
+ case DatePart.Month:
245
+ DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);
246
+ break;
247
+ case DatePart.Year:
248
+ DateTimeUtil.spinYear(delta, newDate);
249
+ break;
250
+ case DatePart.Hours:
251
+ DateTimeUtil.spinHours(delta, newDate, this.spinLoop);
252
+ break;
253
+ case DatePart.Minutes:
254
+ DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);
255
+ break;
256
+ case DatePart.Seconds:
257
+ DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);
258
+ break;
259
+ case DatePart.AmPm:
260
+ formatPart = this._inputDateParts.find((dp) => dp.type === DateParts.AmPm);
261
+ if (formatPart !== undefined) {
262
+ amPmFromMask = this.maskedValue.substring(formatPart.start, formatPart.end);
263
+ return DateTimeUtil.spinAmPm(newDate, this.value, amPmFromMask);
264
+ }
265
+ break;
266
+ }
267
+ return newDate;
268
+ }
269
+ onWheel(event) {
270
+ if (!this.hasFocus) {
271
+ return;
272
+ }
273
+ this.selection = this.inputSelection;
274
+ event.preventDefault();
275
+ event.stopPropagation();
276
+ if (event.deltaY > 0) {
277
+ this.stepDown();
278
+ }
279
+ else {
280
+ this.stepUp();
281
+ }
282
+ this.updateComplete.then(() => this.setSelectionRange(this.selection.start, this.selection.end));
283
+ }
284
+ updateDefaultMask() {
285
+ this._defaultMask = DateTimeUtil.getDefaultMask(this.locale);
286
+ }
287
+ setMask(val) {
288
+ var _a;
289
+ const oldFormat = (_a = this._inputDateParts) === null || _a === void 0 ? void 0 : _a.map((p) => p.format).join('');
290
+ this._inputDateParts = DateTimeUtil.parseDateTimeFormat(val);
291
+ val = this._inputDateParts.map((p) => p.format).join('');
292
+ this._defaultMask = val;
293
+ const newMask = (val || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(new RegExp(/(?=[^t])[\w]/, 'g'), '0');
294
+ this._mask =
295
+ newMask.indexOf('tt') !== -1
296
+ ? newMask.replace(new RegExp('tt', 'g'), 'LL')
297
+ : newMask;
298
+ this.parser.mask = this._mask;
299
+ this.parser.prompt = this.prompt;
300
+ if (!this.placeholder || oldFormat === this.placeholder) {
301
+ this.placeholder = val;
302
+ }
303
+ }
304
+ parseDate(val) {
305
+ if (!val) {
306
+ return null;
307
+ }
308
+ return DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.prompt);
309
+ }
310
+ getMaskedValue() {
311
+ let mask = this.emptyMask;
312
+ if (DateTimeUtil.isValidDate(this.value)) {
313
+ for (const part of this._inputDateParts) {
314
+ if (part.type === DateParts.Literal) {
315
+ continue;
316
+ }
317
+ const targetValue = DateTimeUtil.getPartValue(part, part.format.length, this.value);
318
+ mask = this.parser.replace(mask, targetValue, part.start, part.end).value;
319
+ }
320
+ return mask;
321
+ }
322
+ return this.maskedValue === '' ? mask : this.maskedValue;
323
+ }
324
+ isComplete() {
325
+ return this.maskedValue.indexOf(this.prompt) === -1;
326
+ }
327
+ updateValue() {
328
+ if (this.isComplete()) {
329
+ const parsedDate = this.parseDate(this.maskedValue);
330
+ if (DateTimeUtil.isValidDate(parsedDate)) {
331
+ this.value = parsedDate;
332
+ }
333
+ else {
334
+ this.value = null;
335
+ }
336
+ }
337
+ else {
338
+ this.value = null;
339
+ }
340
+ }
341
+ getNewPosition(value, direction = 0) {
342
+ const literals = this._inputDateParts.filter((p) => p.type === DateParts.Literal);
343
+ let cursorPos = this.selection.start;
344
+ if (!direction) {
345
+ do {
346
+ cursorPos = cursorPos > 0 ? --cursorPos : cursorPos;
347
+ } while (!literals.some((l) => l.end === cursorPos) && cursorPos > 0);
348
+ return cursorPos;
349
+ }
350
+ else {
351
+ do {
352
+ cursorPos++;
353
+ } while (!literals.some((l) => l.start === cursorPos) &&
354
+ cursorPos < value.length);
355
+ return cursorPos;
356
+ }
357
+ }
358
+ handleFocus() {
359
+ this.hasFocus = true;
360
+ this.updateMask();
361
+ this.emitEvent('igcFocus');
362
+ }
363
+ handleBlur() {
364
+ this.hasFocus = false;
365
+ if (!this.isComplete() && this.maskedValue !== this.emptyMask) {
366
+ const parse = this.parseDate(this.maskedValue);
367
+ if (parse) {
368
+ this.value = parse;
369
+ }
370
+ else {
371
+ this.value = null;
372
+ this.maskedValue = '';
373
+ }
374
+ }
375
+ else {
376
+ this.updateMask();
377
+ }
378
+ this.emitEvent('igcBlur');
379
+ }
380
+ handleKeydown(e) {
381
+ super.handleKeydown(e);
382
+ const key = e.key;
383
+ switch (key) {
384
+ case 'ArrowLeft':
385
+ case 'ArrowRight':
386
+ if (e.ctrlKey) {
387
+ e.preventDefault();
388
+ const value = e.target.value;
389
+ const dir = key === 'ArrowRight' ? 1 : 0;
390
+ const pos = this.getNewPosition(value, dir);
391
+ this.setSelectionRange(pos, pos);
392
+ }
393
+ break;
394
+ case 'ArrowUp':
395
+ case 'ArrowDown':
396
+ e.preventDefault();
397
+ key === 'ArrowUp' ? this.stepUp() : this.stepDown();
398
+ this.updateComplete.then(() => this.setSelectionRange(this.selection.start, this.selection.end));
399
+ break;
400
+ case ';':
401
+ if (e.ctrlKey) {
402
+ this.value = new Date();
403
+ }
404
+ break;
405
+ }
406
+ }
407
+ renderInput() {
408
+ return html `<div>
409
+ <input
410
+ type="text"
411
+ part=${partNameMap(this.resolvePartNames('input'))}
412
+ name=${ifDefined(this.name)}
413
+ .value=${live(this.maskedValue)}
414
+ .placeholder=${live(this.placeholder || this.emptyMask)}
415
+ ?readonly=${this.readonly}
416
+ ?disabled=${this.disabled}
417
+ ?required=${this.required}
418
+ @invalid="${this.handleInvalid}"
419
+ @blur=${this.handleBlur}
420
+ @focus=${this.handleFocus}
421
+ @change=${this.handleChange}
422
+ @input=${this.handleInput}
423
+ @keydown=${this.handleKeydown}
424
+ @cut=${this.handleCut}
425
+ @compositionstart=${this.handleCompositionStart}
426
+ @compositionend=${this.handleCompositionEnd}
427
+ @dragenter=${this.handleDragEnter}
428
+ @dragleave=${this.handleDragLeave}
429
+ @dragstart=${this.handleDragStart}
430
+ />
431
+ </div>`;
432
+ }
433
+ }
434
+ IgcDateTimeInputComponent.tagName = 'igc-date-time-input';
435
+ __decorate([
436
+ property({ attribute: 'input-format' })
437
+ ], IgcDateTimeInputComponent.prototype, "inputFormat", null);
438
+ __decorate([
439
+ property({
440
+ converter: {
441
+ fromAttribute: (value) => !value ? null : DateTimeUtil.parseIsoDate(value),
442
+ toAttribute: (value) => value.toISOString(),
443
+ },
444
+ }),
445
+ blazorTwoWayBind('igcChange', 'detail')
446
+ ], IgcDateTimeInputComponent.prototype, "value", null);
447
+ __decorate([
448
+ property({
449
+ attribute: 'min-value',
450
+ converter: {
451
+ fromAttribute: (value) => !value ? null : DateTimeUtil.parseIsoDate(value),
452
+ toAttribute: (value) => value.toISOString(),
453
+ },
454
+ })
455
+ ], IgcDateTimeInputComponent.prototype, "minValue", void 0);
456
+ __decorate([
457
+ property({
458
+ attribute: 'max-value',
459
+ converter: {
460
+ fromAttribute: (value) => !value ? null : DateTimeUtil.parseIsoDate(value),
461
+ toAttribute: (value) => value.toISOString(),
462
+ },
463
+ })
464
+ ], IgcDateTimeInputComponent.prototype, "maxValue", void 0);
465
+ __decorate([
466
+ property({ attribute: 'display-format' })
467
+ ], IgcDateTimeInputComponent.prototype, "displayFormat", void 0);
468
+ __decorate([
469
+ property({ attribute: false })
470
+ ], IgcDateTimeInputComponent.prototype, "spinDelta", void 0);
471
+ __decorate([
472
+ property({ type: Boolean, attribute: 'spin-loop' })
473
+ ], IgcDateTimeInputComponent.prototype, "spinLoop", void 0);
474
+ __decorate([
475
+ property()
476
+ ], IgcDateTimeInputComponent.prototype, "locale", void 0);
477
+ __decorate([
478
+ watch('locale', { waitUntilFirstUpdate: true })
479
+ ], IgcDateTimeInputComponent.prototype, "setDefaultMask", null);
480
+ __decorate([
481
+ watch('displayFormat', { waitUntilFirstUpdate: true })
482
+ ], IgcDateTimeInputComponent.prototype, "setDisplayFormat", null);
483
+ __decorate([
484
+ watch('prompt', { waitUntilFirstUpdate: true })
485
+ ], IgcDateTimeInputComponent.prototype, "promptChange", null);
486
+ __decorate([
487
+ watch('required', { waitUntilFirstUpdate: true }),
488
+ watch('disabled', { waitUntilFirstUpdate: true }),
489
+ watch('value', { waitUntilFirstUpdate: true })
490
+ ], IgcDateTimeInputComponent.prototype, "handleInvalidState", null);
491
+ __decorate([
492
+ watch('maxValue'),
493
+ watch('minValue')
494
+ ], IgcDateTimeInputComponent.prototype, "validate", null);
495
+ //# sourceMappingURL=date-time-input.js.map
@@ -0,0 +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 { property } from 'lit/decorators.js';\nimport { live } from 'lit/directives/live.js';\nimport {\n DatePartDeltas,\n DatePartInfo,\n DateParts,\n DatePart,\n DateTimeUtil,\n} from './date-util.js';\nimport { blazorTwoWayBind } from '../common/decorators/blazorTwoWayBind.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { IgcMaskInputBaseComponent } from '../mask-input/mask-input-base.js';\nimport { partNameMap } from '../common/util.js';\nimport { IgcInputEventMap } from '../input/input-base.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { AbstractConstructor } from '../common/mixins/constructor.js';\n\nexport interface IgcDateTimeInputEventMap\n extends Omit<IgcInputEventMap, '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 *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n * @fires igcFocus - Emitted when the control gains focus.\n * @fires igcBlur - Emitted when the control loses focus.\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 IgcDateTimeInputEventMap,\n AbstractConstructor<IgcMaskInputBaseComponent>\n>(IgcMaskInputBaseComponent) {\n public static readonly tagName = 'igc-date-time-input';\n\n protected _defaultMask!: string;\n protected _value!: Date | 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 /** The date format to apply on the input. */\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 }\n }\n\n /** The value of the input. */\n @property({\n converter: {\n fromAttribute: (value: string) =>\n !value ? null : DateTimeUtil.parseIsoDate(value),\n toAttribute: (value: Date) => value.toISOString(),\n },\n })\n @blazorTwoWayBind('igcChange', 'detail')\n public get value(): Date | null {\n return this._value;\n }\n\n public set value(val: Date | null) {\n this._value = val\n ? DateTimeUtil.isValidDate(val)\n ? val\n : DateTimeUtil.parseIsoDate(val)\n : null;\n\n this.updateMask();\n this.validate();\n }\n\n /** The minimum value required for the input to remain valid. */\n @property({\n attribute: 'min-value',\n converter: {\n fromAttribute: (value: string) =>\n !value ? null : DateTimeUtil.parseIsoDate(value),\n toAttribute: (value: Date) => value.toISOString(),\n },\n })\n public minValue!: Date | null;\n\n /** The maximum value required for the input to remain valid. */\n @property({\n attribute: 'max-value',\n converter: {\n fromAttribute: (value: string) =>\n !value ? null : DateTimeUtil.parseIsoDate(value),\n toAttribute: (value: Date) => value.toISOString(),\n },\n })\n public maxValue!: Date | null;\n\n /**\n * Format to display the value in when not editing.\n * Defaults to the input format if not set.\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 /** Sets whether to loop over the currently spun segment. */\n @property({ type: Boolean, attribute: 'spin-loop' })\n public spinLoop = true;\n\n /** The locale settings used to display the value. */\n @property()\n public locale = 'en';\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.displayFormat) {\n if (this.value) {\n this.maskedValue = DateTimeUtil.formatDate(\n this.value!,\n this.locale,\n this.displayFormat,\n true\n );\n }\n }\n }\n\n @watch('prompt', { waitUntilFirstUpdate: true })\n protected promptChange(): void {\n if (!this.prompt) {\n this.prompt = this.parser.prompt;\n } else {\n this.parser.prompt = this.prompt;\n }\n }\n\n @watch('required', { waitUntilFirstUpdate: true })\n @watch('disabled', { waitUntilFirstUpdate: true })\n @watch('value', { waitUntilFirstUpdate: true })\n protected handleInvalidState(): void {\n this.updateComplete.then(\n () => (this.invalid = !this.input.checkValidity())\n );\n }\n\n @watch('maxValue')\n @watch('minValue')\n protected validate() {\n if (!this.value) {\n return null;\n }\n\n let errors = {};\n\n if (this.minValue || this.maxValue) {\n errors = DateTimeUtil.validateMinMax(\n this.value,\n this.minValue!,\n this.maxValue!,\n this.hasTimeParts,\n this.hasDateParts\n );\n\n if (Object.keys(errors).length > 0) {\n this.invalid = true;\n } else {\n this.invalid = false;\n }\n }\n\n return errors;\n }\n\n private 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 private 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;\n\n if (this.hasFocus) {\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 {\n 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\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 this.addEventListener('wheel', this.onWheel);\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 /** Checks for validity of the control and shows the browser message if it's invalid. */\n public reportValidity() {\n const state = this._value\n ? Object.keys(this.validate()!).length === 0\n : this.input.reportValidity();\n\n this.invalid = !state;\n return state;\n }\n\n /** Check for validity of the control */\n public checkValidity() {\n if (this.disabled) {\n return this.input.checkValidity();\n }\n\n if (!this._value) {\n return !this.required;\n }\n\n return (\n this.input.checkValidity() && Object.keys(this.validate()!).length === 0\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 newValue = this.trySpinValue(targetPart, delta);\n this.value = newValue;\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 newValue = this.trySpinValue(targetPart, delta, true);\n this.value = newValue;\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 updateMask() {\n if (this.hasFocus) {\n this.maskedValue = this.getMaskedValue();\n } else {\n if (!this.value || !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 protected handleChange() {\n this.emitEvent('igcChange', { detail: this.value });\n this.invalid = !this.checkValidity();\n }\n\n protected handleDragLeave() {\n if (!this.hasFocus) {\n this.updateMask();\n }\n }\n\n protected handleDragEnter() {\n if (!this.hasFocus) {\n this.maskedValue = this.getMaskedValue();\n }\n }\n\n protected updateInput(part: string, start: number, finish: number) {\n const { value, end } = this.parser.replace(\n this.maskedValue,\n part,\n start,\n finish\n );\n\n this.maskedValue = value;\n\n this.updateValue();\n this.requestUpdate();\n\n if (start !== this.inputFormat.length) {\n this.emitEvent('igcInput', { detail: this.value?.toString() });\n }\n\n this.updateComplete.then(() => this.input.setSelectionRange(end, end));\n }\n\n private trySpinValue(\n datePart: DatePart,\n delta?: number,\n negative = false\n ): Date {\n if (!delta) {\n // default to 1 if a delta is set to 0 or any other falsy value\n delta = this.datePartDeltas[datePart as keyof DatePartDeltas] || 1;\n }\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, amPmFromMask;\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 private onWheel(event: WheelEvent) {\n if (!this.hasFocus) {\n return;\n }\n\n this.selection = this.inputSelection;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (event.deltaY > 0) {\n this.stepDown();\n } else {\n this.stepUp();\n }\n\n this.updateComplete.then(() =>\n this.setSelectionRange(this.selection.start, this.selection.end)\n );\n }\n\n private updateDefaultMask(): void {\n this._defaultMask = DateTimeUtil.getDefaultMask(this.locale);\n }\n\n private setMask(val: string): void {\n const oldFormat = this._inputDateParts?.map((p) => p.format).join('');\n this._inputDateParts = DateTimeUtil.parseDateTimeFormat(val);\n val = this._inputDateParts.map((p) => p.format).join('');\n\n this._defaultMask = val;\n\n const newMask = (val || DateTimeUtil.DEFAULT_INPUT_FORMAT).replace(\n new RegExp(/(?=[^t])[\\w]/, 'g'),\n '0'\n );\n\n this._mask =\n newMask.indexOf('tt') !== -1\n ? newMask.replace(new RegExp('tt', 'g'), 'LL')\n : newMask;\n\n this.parser.mask = this._mask;\n this.parser.prompt = this.prompt;\n\n if (!this.placeholder || oldFormat === this.placeholder) {\n this.placeholder = val;\n }\n }\n\n private parseDate(val: string) {\n if (!val) {\n return null;\n }\n\n return DateTimeUtil.parseValueFromMask(\n val,\n this._inputDateParts,\n this.prompt\n );\n }\n\n private getMaskedValue(): string {\n let mask = this.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 return this.maskedValue === '' ? mask : this.maskedValue;\n }\n\n private isComplete(): boolean {\n return this.maskedValue.indexOf(this.prompt) === -1;\n }\n\n private updateValue(): void {\n if (this.isComplete()) {\n const parsedDate = this.parseDate(this.maskedValue);\n if (DateTimeUtil.isValidDate(parsedDate)) {\n this.value = parsedDate;\n } else {\n this.value = null;\n }\n } else {\n this.value = null;\n }\n }\n\n private getNewPosition(value: string, direction = 0): number {\n const literals = this._inputDateParts.filter(\n (p) => p.type === DateParts.Literal\n );\n let cursorPos = this.selection.start;\n\n if (!direction) {\n do {\n cursorPos = cursorPos > 0 ? --cursorPos : cursorPos;\n } while (!literals.some((l) => l.end === cursorPos) && cursorPos > 0);\n return cursorPos;\n } else {\n do {\n cursorPos++;\n } while (\n !literals.some((l) => l.start === cursorPos) &&\n cursorPos < value.length\n );\n return cursorPos;\n }\n }\n\n protected override handleFocus() {\n this.hasFocus = true;\n this.updateMask();\n this.emitEvent('igcFocus');\n }\n\n protected override handleBlur() {\n this.hasFocus = false;\n\n if (!this.isComplete() && this.maskedValue !== this.emptyMask) {\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 this.emitEvent('igcBlur');\n }\n\n protected override handleKeydown(e: KeyboardEvent) {\n super.handleKeydown(e);\n\n const key = e.key;\n\n switch (key) {\n case 'ArrowLeft':\n case 'ArrowRight':\n if (e.ctrlKey) {\n e.preventDefault();\n const value = (e.target as HTMLInputElement).value;\n const dir = key === 'ArrowRight' ? 1 : 0;\n const pos = this.getNewPosition(value, dir);\n\n this.setSelectionRange(pos, pos);\n }\n break;\n case 'ArrowUp':\n case 'ArrowDown':\n e.preventDefault();\n key === 'ArrowUp' ? this.stepUp() : this.stepDown();\n\n this.updateComplete.then(() =>\n this.setSelectionRange(this.selection.start, this.selection.end)\n );\n break;\n case ';':\n if (e.ctrlKey) {\n this.value = new Date();\n }\n break;\n }\n }\n\n protected override renderInput() {\n return html`<div>\n <input\n type=\"text\"\n part=${partNameMap(this.resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n .value=${live(this.maskedValue)}\n .placeholder=${live(this.placeholder || this.emptyMask)}\n ?readonly=${this.readonly}\n ?disabled=${this.disabled}\n ?required=${this.required}\n @invalid=\"${this.handleInvalid}\"\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @change=${this.handleChange}\n @input=${this.handleInput}\n @keydown=${this.handleKeydown}\n @cut=${this.handleCut}\n @compositionstart=${this.handleCompositionStart}\n @compositionend=${this.handleCompositionEnd}\n @dragenter=${this.handleDragEnter}\n @dragleave=${this.handleDragLeave}\n @dragstart=${this.handleDragStart}\n />\n </div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-time-input': IgcDateTimeInputComponent;\n }\n}\n"]}
@@ -0,0 +1,89 @@
1
+ export declare const enum FormatDesc {
2
+ Numeric = "numeric",
3
+ TwoDigits = "2-digit"
4
+ }
5
+ export declare enum DateParts {
6
+ Day = "day",
7
+ Month = "month",
8
+ Year = "year",
9
+ Date = "date",
10
+ Hours = "hours",
11
+ Minutes = "minutes",
12
+ Seconds = "seconds",
13
+ AmPm = "amPm",
14
+ Literal = "literal"
15
+ }
16
+ export declare enum DatePart {
17
+ Month = "month",
18
+ Year = "year",
19
+ Date = "date",
20
+ Hours = "hours",
21
+ Minutes = "minutes",
22
+ Seconds = "seconds",
23
+ AmPm = "amPm"
24
+ }
25
+ /** @ignore */
26
+ export interface DatePartInfo {
27
+ type: DateParts;
28
+ start: number;
29
+ end: number;
30
+ format: string;
31
+ }
32
+ export interface DatePartDeltas {
33
+ date?: number;
34
+ month?: number;
35
+ year?: number;
36
+ hours?: number;
37
+ minutes?: number;
38
+ seconds?: number;
39
+ }
40
+ export declare abstract class DateTimeUtil {
41
+ static readonly DEFAULT_INPUT_FORMAT = "MM/dd/yyyy";
42
+ static readonly DEFAULT_TIME_INPUT_FORMAT = "hh:mm tt";
43
+ private static readonly SEPARATOR;
44
+ private static readonly DEFAULT_LOCALE;
45
+ private static _parser;
46
+ 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[];
49
+ static parseIsoDate(value: string): Date | null;
50
+ static isValidDate(value: any): value is Date;
51
+ static formatDate(value: Date, locale: string, format: string, noLeadingZero?: boolean): string;
52
+ static getPartValue(datePartInfo: DatePartInfo, partLength: number, _dateValue: Date | null): string;
53
+ static spinYear(delta: number, newDate: Date): Date;
54
+ static spinMonth(delta: number, newDate: Date, spinLoop: boolean): void;
55
+ static spinDate(delta: number, newDate: Date, spinLoop: boolean): void;
56
+ static spinHours(delta: number, newDate: Date, spinLoop: boolean): void;
57
+ static spinMinutes(delta: number, newDate: Date, spinLoop: boolean): void;
58
+ static spinSeconds(delta: number, newDate: Date, spinLoop: boolean): void;
59
+ static spinAmPm(newDate: Date, currentDate: Date, amPmFromMask: string): Date;
60
+ static greaterThanMaxValue(value: Date, maxValue: Date, includeTime?: boolean, includeDate?: boolean): boolean;
61
+ /**
62
+ * Determines whether the provided value is less than the provided min value.
63
+ *
64
+ * @param includeTime set to false if you want to exclude time portion of the two dates
65
+ * @param includeDate set to false if you want to exclude the date portion of the two dates
66
+ * @returns true if provided value is less than provided minValue
67
+ */
68
+ static lessThanMinValue(value: Date, minValue: Date, includeTime?: boolean, includeDate?: boolean): boolean;
69
+ /**
70
+ * Validates a value within a given min and max value range.
71
+ *
72
+ * @param value The value to validate
73
+ * @param minValue The lowest possible value that `value` can take
74
+ * @param maxValue The largest possible value that `value` can take
75
+ */
76
+ static validateMinMax(value: Date, minValue: Date | string, maxValue: Date | string, includeTime?: boolean, includeDate?: boolean): {};
77
+ private static setDisplayFormatOptions;
78
+ private static getMask;
79
+ private static addCurrentPart;
80
+ private static ensureLeadingZero;
81
+ private static determineDatePart;
82
+ private static getDefaultLocaleMask;
83
+ private static fillDatePartsPositions;
84
+ private static getCleanVal;
85
+ private static trimEmptyPlaceholders;
86
+ private static daysInMonth;
87
+ private static prependValue;
88
+ private static toTwelveHourFormat;
89
+ }