@syncfusion/ej2-inputs 24.2.7 → 25.1.35

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 (180) hide show
  1. package/CHANGELOG.md +0 -32
  2. package/dist/ej2-inputs.min.js +2 -2
  3. package/dist/ej2-inputs.umd.min.js +2 -2
  4. package/dist/ej2-inputs.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-inputs.es2015.js +1103 -270
  6. package/dist/es6/ej2-inputs.es2015.js.map +1 -1
  7. package/dist/es6/ej2-inputs.es5.js +1129 -275
  8. package/dist/es6/ej2-inputs.es5.js.map +1 -1
  9. package/dist/global/ej2-inputs.min.js +2 -2
  10. package/dist/global/ej2-inputs.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +10 -10
  13. package/src/color-picker/color-picker.js +10 -1
  14. package/src/common/signature-base.d.ts +1 -0
  15. package/src/common/signature-base.js +4 -3
  16. package/src/index.d.ts +1 -0
  17. package/src/index.js +1 -0
  18. package/src/input/input.d.ts +18 -1
  19. package/src/input/input.js +234 -69
  20. package/src/maskedtextbox/base/mask-base.js +1 -0
  21. package/src/maskedtextbox/maskedtextbox/maskedtextbox.d.ts +1 -0
  22. package/src/maskedtextbox/maskedtextbox/maskedtextbox.js +8 -1
  23. package/src/numerictextbox/numerictextbox.d.ts +1 -0
  24. package/src/numerictextbox/numerictextbox.js +8 -1
  25. package/src/rating/rating.js +1 -0
  26. package/src/signature/signature.js +2 -0
  27. package/src/slider/slider-model.d.ts +3 -2
  28. package/src/slider/slider.d.ts +3 -2
  29. package/src/slider/slider.js +1 -1
  30. package/src/textarea/index.d.ts +5 -0
  31. package/src/textarea/index.js +4 -0
  32. package/src/textarea/textarea-model.d.ts +155 -0
  33. package/src/textarea/textarea.d.ts +231 -0
  34. package/src/textarea/textarea.js +696 -0
  35. package/src/textbox/textbox-model.d.ts +1 -1
  36. package/src/textbox/textbox.d.ts +3 -5
  37. package/src/textbox/textbox.js +21 -57
  38. package/styles/bootstrap-dark.css +69 -8
  39. package/styles/bootstrap-dark.scss +1 -0
  40. package/styles/bootstrap.css +69 -8
  41. package/styles/bootstrap.scss +1 -0
  42. package/styles/bootstrap4.css +69 -8
  43. package/styles/bootstrap4.scss +1 -0
  44. package/styles/bootstrap5-dark.css +69 -8
  45. package/styles/bootstrap5-dark.scss +1 -0
  46. package/styles/bootstrap5.css +69 -8
  47. package/styles/bootstrap5.scss +1 -0
  48. package/styles/color-picker/_bds-definition.scss +133 -0
  49. package/styles/color-picker/icons/_bds.scss +9 -0
  50. package/styles/data-form/_bds-definition.scss +41 -0
  51. package/styles/data-form/_layout.scss +3 -3
  52. package/styles/data-form/bootstrap-dark.css +8 -8
  53. package/styles/data-form/bootstrap.css +8 -8
  54. package/styles/data-form/bootstrap4.css +8 -8
  55. package/styles/data-form/bootstrap5-dark.css +8 -8
  56. package/styles/data-form/bootstrap5.css +8 -8
  57. package/styles/data-form/fabric-dark.css +8 -8
  58. package/styles/data-form/fabric.css +8 -8
  59. package/styles/data-form/fluent-dark.css +8 -8
  60. package/styles/data-form/fluent.css +8 -8
  61. package/styles/data-form/highcontrast-light.css +8 -8
  62. package/styles/data-form/highcontrast.css +8 -8
  63. package/styles/data-form/material-dark.css +8 -8
  64. package/styles/data-form/material.css +8 -8
  65. package/styles/data-form/material3-dark.css +8 -8
  66. package/styles/data-form/material3.css +8 -8
  67. package/styles/data-form/tailwind-dark.css +8 -8
  68. package/styles/data-form/tailwind.css +8 -8
  69. package/styles/fabric-dark.css +69 -8
  70. package/styles/fabric-dark.scss +1 -0
  71. package/styles/fabric.css +69 -8
  72. package/styles/fabric.scss +1 -0
  73. package/styles/fluent-dark.css +69 -8
  74. package/styles/fluent-dark.scss +1 -0
  75. package/styles/fluent.css +69 -8
  76. package/styles/fluent.scss +1 -0
  77. package/styles/highcontrast-light.css +69 -8
  78. package/styles/highcontrast-light.scss +1 -0
  79. package/styles/highcontrast.css +69 -8
  80. package/styles/highcontrast.scss +1 -0
  81. package/styles/input/_bds-definition.scss +482 -0
  82. package/styles/input/icons/_bds.scss +17 -0
  83. package/styles/maskedtextbox/_bds-definition.scss +7 -0
  84. package/styles/material-dark.css +75 -8
  85. package/styles/material-dark.scss +1 -0
  86. package/styles/material.css +83 -8
  87. package/styles/material.scss +1 -0
  88. package/styles/material3-dark.css +83 -8
  89. package/styles/material3-dark.scss +1 -0
  90. package/styles/material3.css +83 -8
  91. package/styles/material3.scss +1 -0
  92. package/styles/numerictextbox/_bds-definition.scss +3 -0
  93. package/styles/numerictextbox/icons/_bds.scss +11 -0
  94. package/styles/rating/_bds-definition.scss +47 -0
  95. package/styles/signature/_bds-definition.scss +3 -0
  96. package/styles/slider/_bds-definition.scss +88 -0
  97. package/styles/tailwind-dark.css +69 -8
  98. package/styles/tailwind-dark.scss +1 -0
  99. package/styles/tailwind.css +69 -8
  100. package/styles/tailwind.scss +1 -0
  101. package/styles/textarea/_all.scss +1 -0
  102. package/styles/textarea/_bds-definition.scss +1 -0
  103. package/styles/textarea/_bootstrap-dark-definition.scss +1 -0
  104. package/styles/textarea/_bootstrap-definition.scss +1 -0
  105. package/styles/textarea/_bootstrap4-definition.scss +1 -0
  106. package/styles/textarea/_bootstrap5-dark-definition.scss +1 -0
  107. package/styles/textarea/_bootstrap5-definition.scss +1 -0
  108. package/styles/textarea/_fabric-dark-definition.scss +1 -0
  109. package/styles/textarea/_fabric-definition.scss +1 -0
  110. package/styles/textarea/_fluent-dark-definition.scss +1 -0
  111. package/styles/textarea/_fluent-definition.scss +1 -0
  112. package/styles/textarea/_fusionnew-definition.scss +1 -0
  113. package/styles/textarea/_highcontrast-definition.scss +1 -0
  114. package/styles/textarea/_highcontrast-light-definition.scss +1 -0
  115. package/styles/textarea/_layout.scss +36 -0
  116. package/styles/textarea/_material-dark-definition.scss +1 -0
  117. package/styles/textarea/_material-definition.scss +1 -0
  118. package/styles/textarea/_material3-dark-definition.scss +1 -0
  119. package/styles/textarea/_material3-definition.scss +1 -0
  120. package/styles/textarea/_tailwind-dark-definition.scss +1 -0
  121. package/styles/textarea/_tailwind-definition.scss +1 -0
  122. package/styles/textarea/_theme.scss +1 -0
  123. package/styles/textarea/bootstrap-dark.css +33 -0
  124. package/styles/textarea/bootstrap-dark.scss +5 -0
  125. package/styles/textarea/bootstrap.css +33 -0
  126. package/styles/textarea/bootstrap.scss +5 -0
  127. package/styles/textarea/bootstrap4.css +33 -0
  128. package/styles/textarea/bootstrap4.scss +5 -0
  129. package/styles/textarea/bootstrap5-dark.css +33 -0
  130. package/styles/textarea/bootstrap5-dark.scss +5 -0
  131. package/styles/textarea/bootstrap5.css +33 -0
  132. package/styles/textarea/bootstrap5.scss +5 -0
  133. package/styles/textarea/fabric-dark.css +33 -0
  134. package/styles/textarea/fabric-dark.scss +5 -0
  135. package/styles/textarea/fabric.css +33 -0
  136. package/styles/textarea/fabric.scss +5 -0
  137. package/styles/textarea/fluent-dark.css +33 -0
  138. package/styles/textarea/fluent-dark.scss +5 -0
  139. package/styles/textarea/fluent.css +33 -0
  140. package/styles/textarea/fluent.scss +5 -0
  141. package/styles/textarea/highcontrast-light.css +33 -0
  142. package/styles/textarea/highcontrast-light.scss +5 -0
  143. package/styles/textarea/highcontrast.css +33 -0
  144. package/styles/textarea/highcontrast.scss +5 -0
  145. package/styles/textarea/material-dark.css +39 -0
  146. package/styles/textarea/material-dark.scss +5 -0
  147. package/styles/textarea/material.css +47 -0
  148. package/styles/textarea/material.scss +5 -0
  149. package/styles/textarea/material3-dark.css +102 -0
  150. package/styles/textarea/material3-dark.scss +6 -0
  151. package/styles/textarea/material3.css +158 -0
  152. package/styles/textarea/material3.scss +6 -0
  153. package/styles/textarea/tailwind-dark.css +33 -0
  154. package/styles/textarea/tailwind-dark.scss +5 -0
  155. package/styles/textarea/tailwind.css +33 -0
  156. package/styles/textarea/tailwind.scss +5 -0
  157. package/styles/textbox/_all.scss +1 -1
  158. package/styles/textbox/_bds-definition.scss +4 -0
  159. package/styles/textbox/_layout.scss +0 -11
  160. package/styles/textbox/bootstrap-dark.css +27 -1
  161. package/styles/textbox/bootstrap.css +27 -1
  162. package/styles/textbox/bootstrap4.css +27 -1
  163. package/styles/textbox/bootstrap5-dark.css +27 -1
  164. package/styles/textbox/bootstrap5.css +27 -1
  165. package/styles/textbox/fabric-dark.css +27 -1
  166. package/styles/textbox/fabric.css +27 -1
  167. package/styles/textbox/fluent-dark.css +27 -1
  168. package/styles/textbox/fluent.css +27 -1
  169. package/styles/textbox/highcontrast-light.css +27 -1
  170. package/styles/textbox/highcontrast.css +27 -1
  171. package/styles/textbox/material-dark.css +27 -1
  172. package/styles/textbox/material.css +27 -1
  173. package/styles/textbox/material3-dark.css +27 -1
  174. package/styles/textbox/material3.css +27 -1
  175. package/styles/textbox/tailwind-dark.css +27 -1
  176. package/styles/textbox/tailwind.css +27 -1
  177. package/styles/uploader/_bds-definition.scss +232 -0
  178. package/styles/uploader/icons/_bds.scss +34 -0
  179. package/textarea.d.ts +4 -0
  180. package/textarea.js +4 -0
@@ -21,6 +21,14 @@ const CLASSNAMES = {
21
21
  INPUTCUSTOMTAG: 'e-input-custom-tag',
22
22
  FLOATCUSTOMTAG: 'e-float-custom-tag'
23
23
  };
24
+ /**
25
+ * Defines the constant attributes for the input element container.
26
+ */
27
+ const containerAttributes = ['title', 'style', 'class'];
28
+ /**
29
+ * Defines the constant focus class for the input element.
30
+ */
31
+ const TEXTBOX_FOCUS = 'e-input-focus';
24
32
  /**
25
33
  * Base for Input creation through util methods.
26
34
  */
@@ -37,6 +45,7 @@ var Input;
37
45
  *
38
46
  */
39
47
  function createInput(args, internalCreateElement) {
48
+ args.element.__eventHandlers = {};
40
49
  const makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;
41
50
  let inputObject = { container: null, buttons: [], clearButton: null };
42
51
  floatType = args.floatLabelType;
@@ -74,37 +83,64 @@ var Input;
74
83
  return inputObject;
75
84
  }
76
85
  Input.createInput = createInput;
86
+ function bindFocusEventHandler(args) {
87
+ const parent = getParentNode(args.element);
88
+ if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline') || parent.classList.contains('e-filled')) {
89
+ parent.classList.add('e-input-focus');
90
+ }
91
+ if (args.floatLabelType === 'Auto') {
92
+ setTimeout(() => {
93
+ Input.calculateWidth(args.element, parent);
94
+ }, 80);
95
+ }
96
+ }
97
+ function bindBlurEventHandler(args) {
98
+ const parent = getParentNode(args.element);
99
+ if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline') || parent.classList.contains('e-filled')) {
100
+ parent.classList.remove('e-input-focus');
101
+ }
102
+ if (args.floatLabelType === 'Auto' && args.element.value === '') {
103
+ setTimeout(() => {
104
+ Input.calculateWidth(args.element, parent);
105
+ }, 80);
106
+ }
107
+ }
108
+ function bindInputEventHandler(args) {
109
+ checkInputValue(args.floatLabelType, args.element);
110
+ }
77
111
  function bindInitialEvent(args) {
78
112
  checkInputValue(args.floatLabelType, args.element);
79
- args.element.addEventListener('focus', function () {
80
- const parent = getParentNode(this);
81
- if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')
82
- || parent.classList.contains('e-filled')) {
83
- parent.classList.add('e-input-focus');
84
- }
85
- if (args.floatLabelType === 'Auto') {
86
- setTimeout(() => {
87
- Input.calculateWidth(args.element, parent);
88
- }, 80);
89
- }
90
- });
91
- args.element.addEventListener('blur', function () {
92
- const parent = getParentNode(this);
93
- if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')
94
- || parent.classList.contains('e-filled')) {
95
- parent.classList.remove('e-input-focus');
96
- }
97
- if (args.floatLabelType === 'Auto' && args.element.value === '') {
98
- setTimeout(() => {
99
- Input.calculateWidth(args.element, parent);
100
- }, 80);
101
- }
102
- });
103
- args.element.addEventListener('input', () => {
104
- checkInputValue(floatType, args.element);
105
- });
113
+ const focusHandler = () => bindFocusEventHandler(args);
114
+ const blurHandler = () => bindBlurEventHandler(args);
115
+ const inputHandler = () => bindInputEventHandler(args);
116
+ args.element.addEventListener('focus', focusHandler);
117
+ args.element.addEventListener('blur', blurHandler);
118
+ args.element.addEventListener('input', inputHandler);
119
+ args.element.__eventHandlers["inputFocusHandler"] = { focusHandler };
120
+ args.element.__eventHandlers["inputBlurHandler"] = { blurHandler };
121
+ args.element.__eventHandlers["inputHandler"] = { inputHandler };
106
122
  }
107
123
  Input.bindInitialEvent = bindInitialEvent;
124
+ function unbindInitialEvent(args) {
125
+ if (!isNullOrUndefined(args.element)) {
126
+ if (!isNullOrUndefined(args.element.__eventHandlers)) {
127
+ if (!isNullOrUndefined(args.element.__eventHandlers["inputFocusHandler"])
128
+ && !isNullOrUndefined(args.element.__eventHandlers["inputBlurHandler"])
129
+ && !isNullOrUndefined(args.element.__eventHandlers["inputHandler"])) {
130
+ const focusHandler = args.element.__eventHandlers["inputFocusHandler"].focusHandler;
131
+ const blurHandler = args.element.__eventHandlers["inputBlurHandler"].blurHandler;
132
+ const inputHandler = args.element.__eventHandlers["inputHandler"].inputHandler;
133
+ args.element.removeEventListener('focus', focusHandler);
134
+ args.element.removeEventListener('blur', blurHandler);
135
+ args.element.removeEventListener('input', inputHandler);
136
+ // Clean up stored bound functions
137
+ delete args.element.__eventHandlers["inputFocusHandler"];
138
+ delete args.element.__eventHandlers["inputBlurHandler"];
139
+ delete args.element.__eventHandlers["inputHandler"];
140
+ }
141
+ }
142
+ }
143
+ }
108
144
  function checkInputValue(floatLabelType, inputElement) {
109
145
  const inputValue = inputElement.value;
110
146
  const inputParent = inputElement.parentElement;
@@ -154,8 +190,16 @@ var Input;
154
190
  }
155
191
  Input.wireFloatingEvents = wireFloatingEvents;
156
192
  function unwireFloatingEvents(element) {
157
- element.removeEventListener('focus', _focusFn);
158
- element.removeEventListener('blur', _blurFn);
193
+ if (!isNullOrUndefined(element)) {
194
+ element.removeEventListener('focus', _focusFn);
195
+ element.removeEventListener('blur', _blurFn);
196
+ }
197
+ }
198
+ function inputEventHandler(args) {
199
+ validateLabel(args.element, args.floatLabelType);
200
+ }
201
+ function blurEventHandler(args) {
202
+ validateLabel(args.element, args.floatLabelType);
159
203
  }
160
204
  function createFloatingInput(args, inputObject, internalCreateElement) {
161
205
  const makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;
@@ -211,19 +255,36 @@ var Input;
211
255
  addClass([floatLabelElement], CLASSNAMES.LABELTOP);
212
256
  }
213
257
  if (args.floatLabelType === 'Auto') {
214
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
215
- args.element.addEventListener('input', (event) => {
216
- validateLabel(args.element, args.floatLabelType);
217
- });
218
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
219
- args.element.addEventListener('blur', (event) => {
220
- validateLabel(args.element, args.floatLabelType);
221
- });
258
+ const inputFloatHandler = () => inputEventHandler(args);
259
+ const blurFloatHandler = () => blurEventHandler(args);
260
+ // Add event listeners using the defined functions
261
+ args.element.addEventListener('input', inputFloatHandler);
262
+ args.element.addEventListener('blur', blurFloatHandler);
263
+ // Store the event handler functions to remove them later
264
+ args.element.__eventHandlers["floatInputHandler"] = { inputFloatHandler };
265
+ args.element.__eventHandlers["floatBlurHandler"] = { blurFloatHandler };
266
+ }
267
+ else {
268
+ unWireFloatLabelEvents(args);
222
269
  }
223
270
  if (!isNullOrUndefined(args.element.getAttribute('id'))) {
224
271
  floatLabelElement.setAttribute('for', args.element.getAttribute('id'));
225
272
  }
226
273
  }
274
+ function unWireFloatLabelEvents(args) {
275
+ if (!isNullOrUndefined(args.element) && !isNullOrUndefined(args.element.__eventHandlers)
276
+ && !isNullOrUndefined(args.element.__eventHandlers["floatInputHandler"])
277
+ && !isNullOrUndefined(args.element.__eventHandlers["floatBlurHandler"])) {
278
+ const inputFloatHandler = args.element.__eventHandlers["floatInputHandler"].inputFloatHandler;
279
+ const blurFloatHandler = args.element.__eventHandlers["floatBlurHandler"].blurFloatHandler;
280
+ // Remove the event listeners using the defined functions
281
+ args.element.removeEventListener('input', inputFloatHandler);
282
+ args.element.removeEventListener('blur', blurFloatHandler);
283
+ // Clean up stored event handler functions
284
+ delete args.element.__eventHandlers["floatInputHandler"];
285
+ delete args.element.__eventHandlers["floatBlurHandler"];
286
+ }
287
+ }
227
288
  function checkFloatLabelType(type, container) {
228
289
  if (type === 'Always' && container.classList.contains('e-outline')) {
229
290
  container.classList.add('e-valid-input');
@@ -309,40 +370,88 @@ var Input;
309
370
  button.setAttribute('aria-label', 'close');
310
371
  return button;
311
372
  }
373
+ function clickHandler(event, element, button) {
374
+ if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {
375
+ event.preventDefault();
376
+ if (element !== document.activeElement) {
377
+ element.focus();
378
+ }
379
+ element.value = '';
380
+ addClass([button], CLASSNAMES.CLEARICONHIDE);
381
+ }
382
+ }
383
+ function inputHandler(element, button) {
384
+ updateIconState(element.value, button);
385
+ }
386
+ function focusHandler(element, button) {
387
+ updateIconState(element.value, button, element.readOnly);
388
+ }
389
+ function blurHandler(element, button) {
390
+ setTimeout(() => {
391
+ if (!isNullOrUndefined(button)) {
392
+ addClass([button], CLASSNAMES.CLEARICONHIDE);
393
+ button = !isNullOrUndefined(element) && element.classList.contains('e-combobox') ? null : button;
394
+ }
395
+ }, 200);
396
+ }
312
397
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
313
398
  function wireClearBtnEvents(element, button, container) {
314
399
  if (isBindClearAction === undefined || isBindClearAction) {
315
- button.addEventListener('click', (event) => {
316
- if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {
317
- event.preventDefault();
318
- if (element !== document.activeElement) {
319
- element.focus();
400
+ const clickHandlerEvent = (e) => clickHandler(e, element, button);
401
+ button.addEventListener('click', clickHandlerEvent);
402
+ element.__eventHandlers["clearClickHandler"] = { clickHandlerEvent };
403
+ }
404
+ const inputHandlerEvent = () => inputHandler(element, button);
405
+ const focusHandlerEvent = () => focusHandler(element, button);
406
+ const blurHandlerEvent = () => blurHandler(element, button);
407
+ element.addEventListener('input', inputHandlerEvent);
408
+ element.addEventListener('focus', focusHandlerEvent);
409
+ element.addEventListener('blur', blurHandlerEvent);
410
+ // Store the bound functions to remove them later
411
+ element.__eventHandlers["clearInputHandler"] = { inputHandlerEvent };
412
+ element.__eventHandlers["clearFocusHandler"] = { focusHandlerEvent };
413
+ element.__eventHandlers["clearBlurHandler"] = { blurHandlerEvent };
414
+ }
415
+ Input.wireClearBtnEvents = wireClearBtnEvents;
416
+ function unWireClearBtnEvents(element, button) {
417
+ if (!isNullOrUndefined(element) && !isNullOrUndefined(element.__eventHandlers)) {
418
+ if (!isNullOrUndefined(element.__eventHandlers["clearClickHandler"])) {
419
+ const clickHandlerEvent = element.__eventHandlers["clearClickHandler"].clickHandlerEvent;
420
+ if (isBindClearAction === undefined || isBindClearAction) {
421
+ if (!isNullOrUndefined(button)) {
422
+ button.removeEventListener('click', clickHandlerEvent);
320
423
  }
321
- element.value = '';
322
- addClass([button], CLASSNAMES.CLEARICONHIDE);
323
424
  }
324
- });
425
+ delete element.__eventHandlers["clearClickHandler"];
426
+ }
427
+ if (!isNullOrUndefined(element.__eventHandlers["clearInputHandler"])
428
+ && !isNullOrUndefined(element.__eventHandlers["clearFocusHandler"])
429
+ && !isNullOrUndefined(element.__eventHandlers["clearBlurHandler"])) {
430
+ const inputHandlerEvent = element.__eventHandlers["clearInputHandler"].inputHandlerEvent;
431
+ const focusHandlerEvent = element.__eventHandlers["clearFocusHandler"].focusHandlerEvent;
432
+ const blurHandlerEvent = element.__eventHandlers["clearBlurHandler"].blurHandlerEvent;
433
+ element.removeEventListener('input', inputHandlerEvent);
434
+ element.removeEventListener('focus', focusHandlerEvent);
435
+ element.removeEventListener('blur', blurHandlerEvent);
436
+ // Clean up stored Event functions
437
+ delete element.__eventHandlers["clearInputHandler"];
438
+ delete element.__eventHandlers["clearFocusHandler"];
439
+ delete element.__eventHandlers["clearBlurHandler"];
440
+ }
441
+ }
442
+ }
443
+ function destroy(args, button = null) {
444
+ unbindInitialEvent(args);
445
+ if (args.floatLabelType === 'Auto') {
446
+ unWireFloatLabelEvents(args);
447
+ }
448
+ if (args.properties.showClearButton) {
449
+ unWireClearBtnEvents(args.element, button);
450
+ }
451
+ unwireFloatingEvents(args.element);
452
+ if (!isNullOrUndefined(args.element)) {
453
+ delete args.element.__eventHandlers;
325
454
  }
326
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
327
- element.addEventListener('input', (event) => {
328
- updateIconState(element.value, button);
329
- });
330
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
331
- element.addEventListener('focus', (event) => {
332
- updateIconState(element.value, button, element.readOnly);
333
- });
334
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
335
- element.addEventListener('blur', (event) => {
336
- setTimeout(() => {
337
- if (!isNullOrUndefined(button)) {
338
- addClass([button], CLASSNAMES.CLEARICONHIDE);
339
- button = !isNullOrUndefined(element) && element.classList.contains('e-combobox') ? null : button;
340
- }
341
- }, 200);
342
- });
343
- }
344
- Input.wireClearBtnEvents = wireClearBtnEvents;
345
- function destroy() {
346
455
 
347
456
  }
348
457
  Input.destroy = destroy;
@@ -563,7 +672,7 @@ var Input;
563
672
  * - Element to be enabled or disabled.
564
673
  */
565
674
  function setEnabled(isEnable, element, floatLabelType, inputContainer) {
566
- const disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };
675
+ const disabledAttrs = { 'disabled': '', 'aria-disabled': 'true' };
567
676
  const considerWrapper = isNullOrUndefined(inputContainer) ? false : true;
568
677
  if (isEnable) {
569
678
  element.classList.remove(CLASSNAMES.DISABLE);
@@ -676,11 +785,11 @@ var Input;
676
785
  const makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;
677
786
  const container = closest(input, '.' + CLASSNAMES.INPUTGROUP);
678
787
  floatType = type;
788
+ let customTag = container.tagName;
789
+ customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;
790
+ const args = { element: input, floatLabelType: type,
791
+ customTag: customTag, properties: { placeholder: placeholder } };
679
792
  if (type !== 'Never') {
680
- let customTag = container.tagName;
681
- customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;
682
- const args = { element: input, floatLabelType: type,
683
- customTag: customTag, properties: { placeholder: placeholder } };
684
793
  let iconEle = container.querySelector('.e-clear-icon');
685
794
  const inputObj = { container: container };
686
795
  input.classList.remove(CLASSNAMES.INPUT);
@@ -711,6 +820,9 @@ var Input;
711
820
  wrapper.insertBefore(floatText, iconEle);
712
821
  }
713
822
  }
823
+ else {
824
+ unWireFloatLabelEvents(args);
825
+ }
714
826
  checkFloatLabelType(type, input.parentElement);
715
827
  }
716
828
  Input.addFloating = addFloating;
@@ -892,6 +1004,56 @@ var Input;
892
1004
  }
893
1005
  }
894
1006
  Input.validateInputType = validateInputType;
1007
+ function updateHTMLAttributesToElement(htmlAttributes, element) {
1008
+ if (!isNullOrUndefined(htmlAttributes)) {
1009
+ for (const key of Object.keys(htmlAttributes)) {
1010
+ if (containerAttributes.indexOf(key) < 0) {
1011
+ element.setAttribute(key, htmlAttributes[`${key}`]);
1012
+ }
1013
+ }
1014
+ }
1015
+ }
1016
+ Input.updateHTMLAttributesToElement = updateHTMLAttributesToElement;
1017
+ function updateCssClass(newClass, oldClass, container) {
1018
+ setCssClass(getInputValidClassList(newClass), [container], getInputValidClassList(oldClass));
1019
+ }
1020
+ Input.updateCssClass = updateCssClass;
1021
+ function getInputValidClassList(inputClassName) {
1022
+ let result = inputClassName;
1023
+ if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {
1024
+ result = (inputClassName.replace(/\s+/g, ' ')).trim();
1025
+ }
1026
+ return result;
1027
+ }
1028
+ Input.getInputValidClassList = getInputValidClassList;
1029
+ function updateHTMLAttributesToWrapper(htmlAttributes, container) {
1030
+ if (!isNullOrUndefined(htmlAttributes)) {
1031
+ for (const key of Object.keys(htmlAttributes)) {
1032
+ if (containerAttributes.indexOf(key) > -1) {
1033
+ if (key === 'class') {
1034
+ const updatedClassValues = this.getInputValidClassList(htmlAttributes[`${key}`]);
1035
+ if (updatedClassValues !== '') {
1036
+ addClass([container], updatedClassValues.split(' '));
1037
+ }
1038
+ }
1039
+ else if (key === 'style') {
1040
+ let setStyle = container.getAttribute(key);
1041
+ setStyle = !isNullOrUndefined(setStyle) ? (setStyle + htmlAttributes[`${key}`]) :
1042
+ htmlAttributes[`${key}`];
1043
+ container.setAttribute(key, setStyle);
1044
+ }
1045
+ else {
1046
+ container.setAttribute(key, htmlAttributes[`${key}`]);
1047
+ }
1048
+ }
1049
+ }
1050
+ }
1051
+ }
1052
+ Input.updateHTMLAttributesToWrapper = updateHTMLAttributesToWrapper;
1053
+ function isBlank(inputString) {
1054
+ return (!inputString || /^\s*$/.test(inputString));
1055
+ }
1056
+ Input.isBlank = isBlank;
895
1057
  })(Input || (Input = {}));
896
1058
  /* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */
897
1059
 
@@ -1979,6 +2141,9 @@ let NumericTextBox = class NumericTextBox extends Component {
1979
2141
  */
1980
2142
  destroy() {
1981
2143
  this.unwireEvents();
2144
+ if (this.showClearButton) {
2145
+ this.clearButton = document.getElementsByClassName('e-clear-icon')[0];
2146
+ }
1982
2147
  detach(this.hiddenInput);
1983
2148
  if (this.showSpinButton) {
1984
2149
  this.unwireSpinBtnEvents();
@@ -2002,7 +2167,11 @@ let NumericTextBox = class NumericTextBox extends Component {
2002
2167
  this.blurEventArgs = null;
2003
2168
  this.focusEventArgs = null;
2004
2169
  this.inputWrapper = null;
2005
- Input.destroy();
2170
+ Input.destroy({
2171
+ element: this.element,
2172
+ floatLabelType: this.floatLabelType,
2173
+ properties: this.properties
2174
+ }, this.clearButton);
2006
2175
  super.destroy();
2007
2176
  }
2008
2177
  /* eslint-disable valid-jsdoc, jsdoc/require-returns */
@@ -2426,6 +2595,7 @@ function unwireEvents() {
2426
2595
  EventHandler.remove(this.element, 'focus', maskInputFocusHandler);
2427
2596
  EventHandler.remove(this.element, 'blur', maskInputBlurHandler);
2428
2597
  EventHandler.remove(this.element, 'paste', maskInputPasteHandler);
2598
+ EventHandler.remove(this.element, 'drop', maskInputDropHandler);
2429
2599
  EventHandler.remove(this.element, 'cut', maskInputCutHandler);
2430
2600
  EventHandler.remove(this.element, 'mousedown', maskInputMouseDownHandler);
2431
2601
  EventHandler.remove(this.element, 'mouseup', maskInputMouseUpHandler);
@@ -3841,6 +4011,9 @@ let MaskedTextBox = class MaskedTextBox extends Component {
3841
4011
  */
3842
4012
  destroy() {
3843
4013
  unwireEvents.call(this);
4014
+ if (this.showClearButton) {
4015
+ this.clearButton = document.getElementsByClassName('e-clear-icon')[0];
4016
+ }
3844
4017
  const attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',
3845
4018
  'aria-disabled', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'aria-live', 'aria-invalid'];
3846
4019
  for (let i = 0; i < attrArray.length; i++) {
@@ -3852,7 +4025,11 @@ let MaskedTextBox = class MaskedTextBox extends Component {
3852
4025
  detach(this.inputObj.container);
3853
4026
  }
3854
4027
  this.blurEventArgs = null;
3855
- Input.destroy();
4028
+ Input.destroy({
4029
+ element: this.element,
4030
+ floatLabelType: this.floatLabelType,
4031
+ properties: this.properties
4032
+ }, this.clearButton);
3856
4033
  this.changeEventArgs = null;
3857
4034
  this.inputObj = null;
3858
4035
  super.destroy();
@@ -6858,7 +7035,7 @@ __decorate$2([
6858
7035
  Property('')
6859
7036
  ], Slider.prototype, "cssClass", void 0);
6860
7037
  __decorate$2([
6861
- Property(false)
7038
+ Property(true)
6862
7039
  ], Slider.prototype, "enableHtmlSanitizer", void 0);
6863
7040
  __decorate$2([
6864
7041
  Event()
@@ -11414,7 +11591,7 @@ let ColorPicker = class ColorPicker extends Component {
11414
11591
  if (this.cssClass) {
11415
11592
  addClass([popupEle], this.cssClass.replace(/\s+/g, ' ').trim().split(' '));
11416
11593
  }
11417
- if (Browser.isDevice) {
11594
+ if (Browser.isDevice && !this.createPopupOnClick) {
11418
11595
  const popupInst = this.getPopupInst();
11419
11596
  popupInst.relateTo = document.body;
11420
11597
  popupInst.position = { X: 'center', Y: 'center' };
@@ -11452,6 +11629,15 @@ let ColorPicker = class ColorPicker extends Component {
11452
11629
  this.createWidget();
11453
11630
  popupEle.style.display = '';
11454
11631
  if (Browser.isDevice) {
11632
+ if (this.createPopupOnClick) {
11633
+ const popupInst = this.getPopupInst();
11634
+ popupInst.relateTo = document.body;
11635
+ popupInst.position = { X: 'center', Y: 'center' };
11636
+ popupInst.targetType = 'container';
11637
+ popupInst.collision = { X: 'fit', Y: 'fit' };
11638
+ popupInst.offsetY = 4;
11639
+ popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();
11640
+ }
11455
11641
  this.modal = this.createElement('div');
11456
11642
  this.modal.className = 'e-' + this.getModuleName() + ' e-modal';
11457
11643
  this.modal.style.display = 'none';
@@ -13167,8 +13353,6 @@ var __decorate$6 = (undefined && undefined.__decorate) || function (decorators,
13167
13353
  return c > 3 && r && Object.defineProperty(target, key, r), r;
13168
13354
  };
13169
13355
  const HIDE_CLEAR = 'e-clear-icon-hide';
13170
- const TEXTBOX_FOCUS = 'e-input-focus';
13171
- const containerAttr = ['title', 'style', 'class'];
13172
13356
  /**
13173
13357
  * Represents the TextBox component that allows the user to enter the values based on it's type.
13174
13358
  * ```html
@@ -13224,7 +13408,7 @@ let TextBox = class TextBox extends Component {
13224
13408
  {
13225
13409
  const prevOnChange = this.isProtectedOnChange;
13226
13410
  this.isProtectedOnChange = true;
13227
- if (!this.isBlank(this.value)) {
13411
+ if (!Input.isBlank(this.value)) {
13228
13412
  this.value = this.value.toString();
13229
13413
  }
13230
13414
  this.isProtectedOnChange = prevOnChange;
@@ -13246,8 +13430,8 @@ let TextBox = class TextBox extends Component {
13246
13430
  break;
13247
13431
  case 'htmlAttributes':
13248
13432
  {
13249
- this.updateHTMLAttrToElement();
13250
- this.updateHTMLAttrToWrapper();
13433
+ this.updateHTMLAttributesToElement();
13434
+ this.updateHTMLAttributesToWrapper();
13251
13435
  this.checkAttributes(true);
13252
13436
  this.multiline && !isNullOrUndefined(this.textarea) ? Input.validateInputType(this.textboxWrapper.container, this.textarea) : Input.validateInputType(this.textboxWrapper.container, this.element);
13253
13437
  }
@@ -13282,7 +13466,7 @@ let TextBox = class TextBox extends Component {
13282
13466
  }
13283
13467
  break;
13284
13468
  case 'cssClass':
13285
- this.updateCssClass(newProp.cssClass, oldProp.cssClass);
13469
+ Input.updateCssClass(newProp.cssClass, oldProp.cssClass, this.textboxWrapper.container);
13286
13470
  break;
13287
13471
  case 'locale':
13288
13472
  this.globalize = new Internationalization(this.locale);
@@ -13302,9 +13486,6 @@ let TextBox = class TextBox extends Component {
13302
13486
  getModuleName() {
13303
13487
  return 'textbox';
13304
13488
  }
13305
- isBlank(str) {
13306
- return (!str || /^\s*$/.test(str));
13307
- }
13308
13489
  preRender() {
13309
13490
  this.cloneElement = this.element.cloneNode(true);
13310
13491
  this.formElement = closest(this.element, 'form');
@@ -13335,7 +13516,7 @@ let TextBox = class TextBox extends Component {
13335
13516
  this.element = inputElement;
13336
13517
  setValue('ej2_instances', ejInstance, this.element);
13337
13518
  }
13338
- this.updateHTMLAttrToElement();
13519
+ this.updateHTMLAttributesToElement();
13339
13520
  this.checkAttributes(false);
13340
13521
  if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) && this.element.value !== '') {
13341
13522
  this.setProperties({ value: this.element.value }, true);
@@ -13371,7 +13552,7 @@ let TextBox = class TextBox extends Component {
13371
13552
  const apiAttributes = ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];
13372
13553
  for (let index = 0; index < this.element.attributes.length; index++) {
13373
13554
  const attributeName = this.element.attributes[index].nodeName;
13374
- if (this.element.hasAttribute(attributeName) && containerAttr.indexOf(attributeName) < 0 &&
13555
+ if (this.element.hasAttribute(attributeName) && containerAttributes.indexOf(attributeName) < 0 &&
13375
13556
  !(attributeName === 'id' || attributeName === 'type' || attributeName === 'e-mappinguid')) {
13376
13557
  // e-mappinguid attribute is handled for Grid component.
13377
13558
  this.textarea.setAttribute(attributeName, this.element.attributes[index].nodeValue);
@@ -13437,7 +13618,7 @@ let TextBox = class TextBox extends Component {
13437
13618
  render() {
13438
13619
  let updatedCssClassValue = this.cssClass;
13439
13620
  if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {
13440
- updatedCssClassValue = this.getInputValidClassList(this.cssClass);
13621
+ updatedCssClassValue = Input.getInputValidClassList(this.cssClass);
13441
13622
  }
13442
13623
  this.respectiveElement = (this.isHiddenInput) ? this.textarea : this.element;
13443
13624
  this.textboxWrapper = Input.createInput({
@@ -13452,7 +13633,7 @@ let TextBox = class TextBox extends Component {
13452
13633
  showClearButton: this.showClearButton
13453
13634
  }
13454
13635
  });
13455
- this.updateHTMLAttrToWrapper();
13636
+ this.updateHTMLAttributesToWrapper();
13456
13637
  if (this.isHiddenInput) {
13457
13638
  this.respectiveElement.parentNode.insertBefore(this.element, this.respectiveElement);
13458
13639
  }
@@ -13482,47 +13663,11 @@ let TextBox = class TextBox extends Component {
13482
13663
  }
13483
13664
  this.renderComplete();
13484
13665
  }
13485
- updateHTMLAttrToWrapper() {
13486
- if (!isNullOrUndefined(this.htmlAttributes)) {
13487
- for (const key of Object.keys(this.htmlAttributes)) {
13488
- if (containerAttr.indexOf(key) > -1) {
13489
- if (key === 'class') {
13490
- const updatedClassValues = this.getInputValidClassList(this.htmlAttributes[`${key}`]);
13491
- if (updatedClassValues !== '') {
13492
- addClass([this.textboxWrapper.container], updatedClassValues.split(' '));
13493
- }
13494
- }
13495
- else if (key === 'style') {
13496
- let setStyle = this.textboxWrapper.container.getAttribute(key);
13497
- setStyle = !isNullOrUndefined(setStyle) ? (setStyle + this.htmlAttributes[`${key}`]) :
13498
- this.htmlAttributes[`${key}`];
13499
- this.textboxWrapper.container.setAttribute(key, setStyle);
13500
- }
13501
- else {
13502
- this.textboxWrapper.container.setAttribute(key, this.htmlAttributes[`${key}`]);
13503
- }
13504
- }
13505
- }
13506
- }
13507
- }
13508
- updateHTMLAttrToElement() {
13509
- if (!isNullOrUndefined(this.htmlAttributes)) {
13510
- for (const key of Object.keys(this.htmlAttributes)) {
13511
- if (containerAttr.indexOf(key) < 0) {
13512
- this.multiline && !isNullOrUndefined(this.textarea) ? this.textarea.setAttribute(key, this.htmlAttributes[`${key}`]) : this.element.setAttribute(key, this.htmlAttributes[`${key}`]);
13513
- }
13514
- }
13515
- }
13516
- }
13517
- updateCssClass(newClass, oldClass) {
13518
- Input.setCssClass(this.getInputValidClassList(newClass), [this.textboxWrapper.container], this.getInputValidClassList(oldClass));
13666
+ updateHTMLAttributesToWrapper() {
13667
+ Input.updateHTMLAttributesToWrapper(this.htmlAttributes, this.textboxWrapper.container);
13519
13668
  }
13520
- getInputValidClassList(inputClassName) {
13521
- let result = inputClassName;
13522
- if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {
13523
- result = (inputClassName.replace(/\s+/g, ' ')).trim();
13524
- }
13525
- return result;
13669
+ updateHTMLAttributesToElement() {
13670
+ Input.updateHTMLAttributesToElement(this.htmlAttributes, this.respectiveElement ? this.respectiveElement : (this.multiline && !isNullOrUndefined(this.textarea) ? this.textarea : this.element));
13526
13671
  }
13527
13672
  setInitialValue() {
13528
13673
  if (!this.isAngular) {
@@ -13714,6 +13859,9 @@ let TextBox = class TextBox extends Component {
13714
13859
  */
13715
13860
  destroy() {
13716
13861
  this.unWireEvents();
13862
+ if (this.showClearButton) {
13863
+ this.clearButton = document.getElementsByClassName('e-clear-icon')[0];
13864
+ }
13717
13865
  if (this.element.tagName === 'INPUT' && this.multiline) {
13718
13866
  detach(this.textboxWrapper.container.getElementsByTagName('textarea')[0]);
13719
13867
  this.respectiveElement = this.element;
@@ -13727,7 +13875,11 @@ let TextBox = class TextBox extends Component {
13727
13875
  detach(this.textboxWrapper.container);
13728
13876
  }
13729
13877
  this.textboxWrapper = null;
13730
- Input.destroy();
13878
+ Input.destroy({
13879
+ element: this.respectiveElement,
13880
+ floatLabelType: this.floatLabelType,
13881
+ properties: this.properties
13882
+ }, this.clearButton);
13731
13883
  super.destroy();
13732
13884
  }
13733
13885
  /**
@@ -13903,108 +14055,786 @@ TextBox = __decorate$6([
13903
14055
  * Uploader modules
13904
14056
  */
13905
14057
 
13906
- class SignatureBase extends Component {
13907
- constructor() {
13908
- super(...arguments);
13909
- /* minDistance(distance between the two point) was calaculated for smoothness.*/
13910
- this.minDistance = 5;
13911
- this.previous = 0;
13912
- /* interval handles for the smoothness in the mouse move event.*/
13913
- this.interval = 30;
13914
- this.timeout = null;
13915
- this.isSignatureEmpty = true;
13916
- this.backgroundLoaded = null;
13917
- this.isBlazor = false;
13918
- this.isResponsive = false;
13919
- this.signPointsColl = [];
13920
- this.signRatioPointsColl = [];
14058
+ var __decorate$7 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
14059
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14060
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
14061
+ 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;
14062
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
14063
+ };
14064
+ const HIDE_CLEAR$1 = 'e-clear-icon-hide';
14065
+ const AUTO_WIDTH = 'e-auto-width';
14066
+ const RESIZE_X = 'e-resize-x';
14067
+ const RESIZE_Y = 'e-resize-y';
14068
+ const RESIZE_XY = 'e-resize-xy';
14069
+ const RESIZE_NONE = 'e-resize-none';
14070
+ let TextArea = class TextArea extends Component {
14071
+ constructor(options, element) {
14072
+ super(options, element);
14073
+ this.previousValue = null;
14074
+ this.isForm = false;
14075
+ this.inputPreviousValue = null;
14076
+ this.isAngular = false;
14077
+ this.isVue = false;
14078
+ this.textareaOptions = options;
13921
14079
  }
13922
14080
  /**
13923
- * To Initialize the component rendering
14081
+ * Calls internally if any of the property value is changed.
13924
14082
  *
13925
- * @private
13926
- * @param {HTMLCanvasElement} element - Specifies the canvas element.
13927
- * @param {BlazorDotnetObject} dotnetRef - Specifies for blazor client to server communication.
14083
+ * @param {TextAreaModel} newProp - Returns the dynamic property value of the component.
14084
+ * @param {TextAreaModel} oldProp - Returns the previous property value of the component.
13928
14085
  * @returns {void}
14086
+ * @private
13929
14087
  */
13930
- initialize(element, dotnetRef) {
13931
- this.clearArray = [];
13932
- this.element = element;
13933
- this.canvasContext = this.element.getContext('2d');
13934
- this.canvasContext.canvas.tabIndex = -1;
13935
- if (dotnetRef) {
13936
- this.dotnetRef = dotnetRef;
13937
- this.isBlazor = true;
13938
- if (this.signatureValue) {
13939
- this.loadPersistedSignature();
13940
- }
13941
- }
13942
- this.setHTMLProperties();
13943
- if (isNullOrUndefined(this.signatureValue)) {
13944
- this.updateSnapCollection(true);
13945
- }
13946
- this.wireEvents();
13947
- if (!this.isBlazor) {
13948
- this.trigger('created', null);
13949
- }
13950
- }
13951
- wireEvents() {
13952
- if (isNullOrUndefined(this.pointColl) && !this.isReadOnly && !this.disabled) {
13953
- EventHandler.add(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler, this);
13954
- EventHandler.add(this.canvasContext.canvas, 'keydown', this.keyboardHandler, this);
13955
- window.addEventListener('resize', this.resizeHandler.bind(this));
13956
- }
13957
- else if (this.pointColl) {
13958
- EventHandler.add(this.canvasContext.canvas, 'mousemove touchmove', this.mouseMoveHandler, this);
13959
- EventHandler.add(this.canvasContext.canvas, 'mouseup touchend', this.mouseUpHandler, this);
13960
- EventHandler.add(document, 'mouseup', this.mouseUpHandler, this);
13961
- }
13962
- }
13963
- unwireEvents(type) {
13964
- if (type === 'mouseup' || type === 'touchend') {
13965
- EventHandler.remove(this.canvasContext.canvas, 'mousemove touchmove', this.mouseMoveHandler);
13966
- EventHandler.remove(this.canvasContext.canvas, 'mouseup touchend', this.mouseUpHandler);
13967
- EventHandler.remove(document, 'mouseup', this.mouseUpHandler);
13968
- }
13969
- else {
13970
- EventHandler.remove(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler);
13971
- EventHandler.remove(this.canvasContext.canvas, 'keydown', this.keyboardHandler);
13972
- window.removeEventListener('resize', this.resizeHandler);
13973
- }
13974
- }
13975
- setHTMLProperties() {
13976
- if (this.element.height === 150 && this.element.width === 300 && this.element.offsetHeight !== 0 && this.element.offsetWidth !== 0) {
13977
- this.element.height = this.element.offsetHeight;
13978
- this.element.width = this.element.offsetWidth;
13979
- this.isResponsive = true;
13980
- }
13981
- else if ((this.element.height !== this.element.offsetHeight - 1 || this.element.width !== this.element.offsetWidth - 1)
13982
- && this.element.offsetHeight !== 0 && this.element.offsetWidth !== 0) {
13983
- this.element.height = this.element.offsetHeight;
13984
- this.element.width = this.element.offsetWidth;
13985
- }
13986
- this.canvasContext.fillStyle = this.strokeColor;
13987
- this.tempCanvas = this.createElement('canvas', { className: 'e-' + this.getModuleName() + '-temp' });
13988
- this.tempContext = this.tempCanvas.getContext('2d');
13989
- this.tempCanvas.width = this.element.width;
13990
- this.tempCanvas.height = this.element.height;
13991
- if (this.backgroundImage) {
13992
- this.canvasContext.canvas.style.backgroundImage = 'url(' + this.backgroundImage + ')';
13993
- this.canvasContext.canvas.style.backgroundRepeat = 'no-repeat';
13994
- if (this.saveWithBackground) {
13995
- this.setBackgroundImage(this.backgroundImage, 'temp');
13996
- }
13997
- }
13998
- else if (this.backgroundColor) {
13999
- this.canvasContext.canvas.style.backgroundColor = this.backgroundColor;
14000
- }
14001
- }
14002
- // eslint-disable-next-line
14003
- mouseDownHandler(e) {
14004
- if (e.buttons === 1 || e.buttons === 2 || e.type === 'touchstart') {
14005
- if (e.type === 'touchstart') {
14006
- e.preventDefault();
14007
- e.stopPropagation();
14088
+ onPropertyChanged(newProp, oldProp) {
14089
+ for (const prop of Object.keys(newProp)) {
14090
+ switch (prop) {
14091
+ case 'floatLabelType':
14092
+ Input.removeFloating(this.textareaWrapper);
14093
+ Input.addFloating(this.element, this.floatLabelType, this.placeholder);
14094
+ if (this.floatLabelType === 'Never') {
14095
+ this.element.removeAttribute('aria-labelledby');
14096
+ }
14097
+ break;
14098
+ case 'enabled':
14099
+ Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textareaWrapper.container);
14100
+ this.bindClearEvent();
14101
+ if (!this.enabled && this.resizeMode !== 'None') {
14102
+ this.element.classList.remove(this.getCurrentResizeClass(this.resizeMode));
14103
+ this.element.classList.add(RESIZE_NONE);
14104
+ }
14105
+ else {
14106
+ this.element.classList.add(this.getCurrentResizeClass(this.resizeMode));
14107
+ }
14108
+ break;
14109
+ case 'width':
14110
+ if (this.resizeMode !== 'None' && this.resizeMode !== 'Vertical') {
14111
+ this.setElementWidth(newProp.width);
14112
+ this.textareaWrapper.container.classList.add(AUTO_WIDTH);
14113
+ }
14114
+ else {
14115
+ if (this.textareaWrapper.container.classList.contains(AUTO_WIDTH)) {
14116
+ this.textareaWrapper.container.classList.remove(AUTO_WIDTH);
14117
+ }
14118
+ Input.setWidth(newProp.width, this.textareaWrapper.container);
14119
+ }
14120
+ break;
14121
+ case 'value':
14122
+ {
14123
+ const prevOnChange = this.isProtectedOnChange;
14124
+ this.isProtectedOnChange = true;
14125
+ if (!Input.isBlank(this.value)) {
14126
+ this.value = this.value.toString();
14127
+ }
14128
+ this.isProtectedOnChange = prevOnChange;
14129
+ Input.setValue(this.value, this.element, this.floatLabelType, this.showClearButton);
14130
+ this.inputPreviousValue = this.element.value;
14131
+ /* istanbul ignore next */
14132
+ if ((this.isAngular || this.isVue) && this.preventChange === true) {
14133
+ this.previousValue = this.isAngular ? this.value : this.previousValue;
14134
+ this.preventChange = false;
14135
+ }
14136
+ else if (isNullOrUndefined(this.isAngular) || !this.isAngular
14137
+ || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {
14138
+ this.raiseChangeEvent();
14139
+ }
14140
+ }
14141
+ break;
14142
+ case 'htmlAttributes':
14143
+ {
14144
+ this.updateHTMLAttributesToElement();
14145
+ this.updateHTMLAttributesToWrapper();
14146
+ this.checkAttributes(true);
14147
+ Input.validateInputType(this.textareaWrapper.container, this.element);
14148
+ }
14149
+ break;
14150
+ case 'readonly':
14151
+ Input.setReadonly(this.readonly, this.element);
14152
+ if (this.readonly) {
14153
+ this.element.setAttribute('aria-readonly', 'true');
14154
+ }
14155
+ else {
14156
+ this.element.removeAttribute('aria-readonly');
14157
+ }
14158
+ break;
14159
+ case 'showClearButton':
14160
+ Input.setClearButton(this.showClearButton, this.element, this.textareaWrapper);
14161
+ this.bindClearEvent();
14162
+ break;
14163
+ case 'enableRtl':
14164
+ Input.setEnableRtl(this.enableRtl, [this.textareaWrapper.container]);
14165
+ break;
14166
+ case 'placeholder':
14167
+ Input.setPlaceholder(this.placeholder, this.element);
14168
+ Input.calculateWidth(this.element, this.textareaWrapper.container);
14169
+ break;
14170
+ case 'cssClass':
14171
+ Input.updateCssClass(newProp.cssClass, oldProp.cssClass, this.textareaWrapper.container);
14172
+ break;
14173
+ case 'locale':
14174
+ this.globalize = new Internationalization(this.locale);
14175
+ this.l10n.setLocale(this.locale);
14176
+ this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);
14177
+ Input.setPlaceholder(this.placeholder, this.element);
14178
+ break;
14179
+ case 'rowsCount':
14180
+ if (this.rowsCount) {
14181
+ this.element.setAttribute('rows', this.rowsCount.toString());
14182
+ }
14183
+ break;
14184
+ case 'columnsCount':
14185
+ if (this.columnsCount) {
14186
+ this.element.setAttribute('cols', this.columnsCount.toString());
14187
+ if (this.width == null) {
14188
+ this.textareaWrapper.container.classList.add(AUTO_WIDTH);
14189
+ }
14190
+ }
14191
+ break;
14192
+ case 'maxLength':
14193
+ if (this.maxLength) {
14194
+ this.element.setAttribute('maxlength', this.maxLength.toString());
14195
+ }
14196
+ break;
14197
+ case 'resizeMode':
14198
+ if (this.enabled) {
14199
+ if (this.element.classList.contains(this.getCurrentResizeClass(oldProp.resizeMode))) {
14200
+ this.element.classList.remove(this.getCurrentResizeClass(oldProp.resizeMode));
14201
+ }
14202
+ this.element.classList.add(this.getCurrentResizeClass(this.resizeMode));
14203
+ if (this.element.style.width && (this.resizeMode === 'None' || this.resizeMode === 'Vertical')) {
14204
+ Input.setWidth(this.element.style.width, this.textareaWrapper.container);
14205
+ }
14206
+ else {
14207
+ const currentWidth = this.element.offsetWidth;
14208
+ this.element.style.width = currentWidth + 'px';
14209
+ if (this.textareaWrapper.container.style.width) {
14210
+ this.textareaWrapper.container.style.width = '';
14211
+ }
14212
+ }
14213
+ this.setWrapperWidth();
14214
+ }
14215
+ break;
14216
+ }
14217
+ }
14218
+ }
14219
+ preRender() {
14220
+ this.formElement = closest(this.element, 'form');
14221
+ if (!isNullOrUndefined(this.formElement)) {
14222
+ this.isForm = true;
14223
+ }
14224
+ /* istanbul ignore next */
14225
+ if (this.element.tagName === 'EJS-TEXTAREA') {
14226
+ const ejInstance = getValue('ej2_instances', this.element);
14227
+ const inputElement = this.createElement('textarea');
14228
+ let index = 0;
14229
+ for (index; index < this.element.attributes.length; index++) {
14230
+ const attributeName = this.element.attributes[index].nodeName;
14231
+ if (attributeName !== 'id' && attributeName !== 'class') {
14232
+ inputElement.setAttribute(attributeName, this.element.attributes[index].nodeValue);
14233
+ inputElement.innerHTML = this.element.innerHTML;
14234
+ if (attributeName === 'name') {
14235
+ this.element.removeAttribute('name');
14236
+ }
14237
+ }
14238
+ else if (attributeName === 'class') {
14239
+ inputElement.setAttribute(attributeName, this.element.className.split(' ').filter((item) => item.indexOf('ng-') !== 0).join(' '));
14240
+ }
14241
+ }
14242
+ this.element.appendChild(inputElement);
14243
+ this.element = inputElement;
14244
+ setValue('ej2_instances', ejInstance, this.element);
14245
+ }
14246
+ this.updateHTMLAttributesToElement();
14247
+ this.checkAttributes(false);
14248
+ if ((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['value'] === undefined)) && this.element.value !== '') {
14249
+ this.setProperties({ value: this.element.value }, true);
14250
+ }
14251
+ this.globalize = new Internationalization(this.locale);
14252
+ const localeText = { placeholder: this.placeholder };
14253
+ this.l10n = new L10n('textarea', localeText, this.locale);
14254
+ if (this.l10n.getConstant('placeholder') !== '') {
14255
+ this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);
14256
+ }
14257
+ if (!this.element.hasAttribute('id')) {
14258
+ this.element.setAttribute('id', getUniqueID('textbox'));
14259
+ }
14260
+ if (!this.element.hasAttribute('name')) {
14261
+ this.element.setAttribute('name', this.element.getAttribute('id'));
14262
+ }
14263
+ if (this.rowsCount) {
14264
+ this.element.setAttribute('rows', this.rowsCount.toString());
14265
+ }
14266
+ if (this.columnsCount) {
14267
+ this.element.setAttribute('cols', this.columnsCount.toString());
14268
+ }
14269
+ if (this.maxLength) {
14270
+ this.element.setAttribute('maxlength', this.maxLength.toString());
14271
+ }
14272
+ if (!this.element.style.resize && this.enabled) {
14273
+ this.element.classList.add(this.getCurrentResizeClass(this.resizeMode));
14274
+ }
14275
+ if (this.enabled) {
14276
+ this.element.setAttribute('aria-multiline', 'true');
14277
+ }
14278
+ }
14279
+ /**
14280
+ * To Initialize the control rendering
14281
+ *
14282
+ * @returns {void}
14283
+ * @private
14284
+ */
14285
+ render() {
14286
+ let updatedCssClassValue = this.cssClass;
14287
+ if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {
14288
+ updatedCssClassValue = Input.getInputValidClassList(this.cssClass);
14289
+ }
14290
+ this.textareaWrapper = Input.createInput({
14291
+ element: this.element,
14292
+ floatLabelType: this.floatLabelType,
14293
+ properties: {
14294
+ enabled: this.enabled,
14295
+ enableRtl: this.enableRtl,
14296
+ cssClass: updatedCssClassValue,
14297
+ readonly: this.readonly,
14298
+ placeholder: this.placeholder,
14299
+ showClearButton: this.showClearButton
14300
+ }
14301
+ });
14302
+ this.updateHTMLAttributesToWrapper();
14303
+ this.wireEvents();
14304
+ if (!isNullOrUndefined(this.value)) {
14305
+ Input.setValue(this.value, this.element, this.floatLabelType, this.showClearButton);
14306
+ }
14307
+ if (!isNullOrUndefined(this.value)) {
14308
+ this.initialValue = this.value;
14309
+ if (!this.isAngular) {
14310
+ this.element.setAttribute('value', this.initialValue);
14311
+ }
14312
+ }
14313
+ this.previousValue = this.value;
14314
+ this.inputPreviousValue = this.value;
14315
+ this.element.defaultValue = this.element.value;
14316
+ Input.setWidth(this.width, this.textareaWrapper.container);
14317
+ this.setWrapperWidth();
14318
+ this.renderComplete();
14319
+ }
14320
+ getModuleName() {
14321
+ return 'textarea';
14322
+ }
14323
+ /* eslint-disable valid-jsdoc, jsdoc/require-returns */
14324
+ /**
14325
+ * Gets the properties to be maintained in the persisted state.
14326
+ *
14327
+ */
14328
+ getPersistData() {
14329
+ const keyEntity = ['value'];
14330
+ return this.addOnPersist(keyEntity);
14331
+ }
14332
+ checkAttributes(isDynamic) {
14333
+ const attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :
14334
+ ['placeholder', 'disabled', 'value', 'readonly'];
14335
+ for (const key of attrs) {
14336
+ if (!isNullOrUndefined(this.element.getAttribute(key))) {
14337
+ switch (key) {
14338
+ case 'disabled':
14339
+ if ((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['enabled'] === undefined)) || isDynamic) {
14340
+ const enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||
14341
+ this.element.getAttribute(key) === 'true' ? false : true;
14342
+ this.setProperties({ enabled: enabled }, !isDynamic);
14343
+ }
14344
+ break;
14345
+ case 'readonly':
14346
+ if ((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['readonly'] === undefined)) || isDynamic) {
14347
+ const readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''
14348
+ || this.element.getAttribute(key) === 'true' ? true : false;
14349
+ this.setProperties({ readonly: readonly }, !isDynamic);
14350
+ }
14351
+ break;
14352
+ case 'placeholder':
14353
+ if ((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['placeholder'] === undefined)) || isDynamic) {
14354
+ this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);
14355
+ }
14356
+ break;
14357
+ case 'value':
14358
+ if (((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['value'] === undefined)) || isDynamic) && this.element.value !== '') {
14359
+ this.setProperties({ value: this.element.value }, !isDynamic);
14360
+ }
14361
+ break;
14362
+ }
14363
+ }
14364
+ }
14365
+ }
14366
+ wireEvents() {
14367
+ EventHandler.add(this.element, 'focus', this.focusHandler, this);
14368
+ EventHandler.add(this.element, 'blur', this.focusOutHandler, this);
14369
+ EventHandler.add(this.element, 'keydown', this.keydownHandler, this);
14370
+ EventHandler.add(this.element, 'input', this.inputHandler, this);
14371
+ EventHandler.add(this.element, 'change', this.changeHandler, this);
14372
+ if (this.isForm) {
14373
+ EventHandler.add(this.formElement, 'reset', this.resetForm, this);
14374
+ }
14375
+ this.bindClearEvent();
14376
+ }
14377
+ unWireEvents() {
14378
+ EventHandler.remove(this.element, 'focus', this.focusHandler);
14379
+ EventHandler.remove(this.element, 'blur', this.focusOutHandler);
14380
+ EventHandler.remove(this.element, 'keydown', this.keydownHandler);
14381
+ EventHandler.remove(this.element, 'input', this.inputHandler);
14382
+ EventHandler.remove(this.element, 'change', this.changeHandler);
14383
+ if (this.isForm) {
14384
+ EventHandler.remove(this.formElement, 'reset', this.resetForm);
14385
+ }
14386
+ }
14387
+ /**
14388
+ * Removes the component from the DOM and detaches all its related event handlers.
14389
+ * Also, it maintains the initial TextArea element from the DOM.
14390
+ *
14391
+ * @method destroy
14392
+ * @returns {void}
14393
+ */
14394
+ destroy() {
14395
+ this.unWireEvents();
14396
+ if (this.showClearButton) {
14397
+ this.clearButton = document.getElementsByClassName('e-clear-icon')[0];
14398
+ }
14399
+ this.element.value = this.element.defaultValue;
14400
+ this.element.classList.remove('e-input', RESIZE_X, RESIZE_Y, RESIZE_XY, RESIZE_NONE);
14401
+ this.removeAttributes(['aria-disabled', 'aria-readonly', 'aria-labelledby', 'aria-multiline']);
14402
+ if (!isNullOrUndefined(this.textareaWrapper)) {
14403
+ this.textareaWrapper.container.insertAdjacentElement('afterend', this.element);
14404
+ detach(this.textareaWrapper.container);
14405
+ }
14406
+ this.textareaWrapper = null;
14407
+ this.formElement = null;
14408
+ Input.destroy({
14409
+ element: this.element,
14410
+ floatLabelType: this.floatLabelType,
14411
+ properties: this.properties
14412
+ }, this.clearButton);
14413
+ super.destroy();
14414
+ }
14415
+ focusHandler(args) {
14416
+ const eventArgs = {
14417
+ container: this.textareaWrapper.container,
14418
+ event: args,
14419
+ value: this.value
14420
+ };
14421
+ this.trigger('focus', eventArgs);
14422
+ }
14423
+ focusOutHandler(args) {
14424
+ if (!(this.previousValue === null && this.value === null) &&
14425
+ (this.previousValue !== this.value)) {
14426
+ this.raiseChangeEvent(args, true);
14427
+ }
14428
+ const eventArgs = {
14429
+ container: this.textareaWrapper.container,
14430
+ event: args,
14431
+ value: this.value
14432
+ };
14433
+ this.trigger('blur', eventArgs);
14434
+ }
14435
+ keydownHandler(args) {
14436
+ if ((args.keyCode === 13 || args.keyCode === 9) && !((this.previousValue === null || this.previousValue === '') && (this.value === null || this.value === '') && this.element.value === '')) {
14437
+ this.setProperties({ value: this.element.value }, true);
14438
+ }
14439
+ }
14440
+ inputHandler(args) {
14441
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias
14442
+ const textareaObj = this;
14443
+ const eventArgs = {
14444
+ event: args,
14445
+ value: this.element.value,
14446
+ previousValue: this.inputPreviousValue,
14447
+ container: this.textareaWrapper.container
14448
+ };
14449
+ this.inputPreviousValue = this.element.value;
14450
+ /* istanbul ignore next */
14451
+ if (this.isAngular) {
14452
+ textareaObj.localChange({ value: this.element.value });
14453
+ this.preventChange = true;
14454
+ }
14455
+ if (this.isVue) {
14456
+ this.preventChange = true;
14457
+ }
14458
+ this.trigger('input', eventArgs);
14459
+ args.stopPropagation();
14460
+ }
14461
+ changeHandler(args) {
14462
+ this.setProperties({ value: this.element.value }, true);
14463
+ if (this.previousValue !== this.value) {
14464
+ this.raiseChangeEvent(args, true);
14465
+ }
14466
+ args.stopPropagation();
14467
+ }
14468
+ raiseChangeEvent(event, interaction) {
14469
+ const eventArgs = {
14470
+ event: event,
14471
+ value: this.value,
14472
+ previousValue: this.previousValue,
14473
+ container: this.textareaWrapper.container,
14474
+ isInteraction: interaction ? interaction : false,
14475
+ isInteracted: interaction ? interaction : false
14476
+ };
14477
+ this.preventChange = false;
14478
+ this.trigger('change', eventArgs);
14479
+ this.previousValue = this.value;
14480
+ }
14481
+ updateHTMLAttributesToWrapper() {
14482
+ Input.updateHTMLAttributesToWrapper(this.htmlAttributes, this.textareaWrapper.container);
14483
+ }
14484
+ updateHTMLAttributesToElement() {
14485
+ Input.updateHTMLAttributesToElement(this.htmlAttributes, this.element);
14486
+ }
14487
+ bindClearEvent() {
14488
+ if (this.showClearButton) {
14489
+ if (this.enabled) {
14490
+ EventHandler.add(this.textareaWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);
14491
+ }
14492
+ else {
14493
+ EventHandler.remove(this.textareaWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);
14494
+ }
14495
+ }
14496
+ }
14497
+ resetInputHandler(event) {
14498
+ event.preventDefault();
14499
+ if (!(this.textareaWrapper.clearButton.classList.contains(HIDE_CLEAR$1)) || this.textareaWrapper.container.classList.contains('e-static-clear')) {
14500
+ Input.setValue('', this.element, this.floatLabelType, this.showClearButton);
14501
+ this.setProperties({ value: this.element.value }, true);
14502
+ }
14503
+ const eventArgs = {
14504
+ event: event,
14505
+ value: this.element.value,
14506
+ previousValue: this.inputPreviousValue,
14507
+ container: this.textareaWrapper.container
14508
+ };
14509
+ this.trigger('input', eventArgs);
14510
+ this.inputPreviousValue = this.element.value;
14511
+ this.raiseChangeEvent(event, true);
14512
+ if (closest(this.element, 'form')) {
14513
+ const element = this.element;
14514
+ const keyupEvent = document.createEvent('KeyboardEvent');
14515
+ keyupEvent.initEvent('keyup', false, true);
14516
+ element.dispatchEvent(keyupEvent);
14517
+ }
14518
+ }
14519
+ /* eslint-enable valid-jsdoc, jsdoc/require-returns */
14520
+ /**
14521
+ * Adding the multiple attributes as key-value pair to the TextArea element.
14522
+ *
14523
+ * @param {string} attributes - Specifies the attributes to be add to TextArea element.
14524
+ * @returns {void}
14525
+ */
14526
+ addAttributes(attributes$$1) {
14527
+ for (const key of Object.keys(attributes$$1)) {
14528
+ if (key === 'disabled') {
14529
+ this.setProperties({ enabled: false }, true);
14530
+ Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textareaWrapper.container);
14531
+ }
14532
+ else if (key === 'readonly') {
14533
+ this.setProperties({ readonly: true }, true);
14534
+ Input.setReadonly(this.readonly, this.element);
14535
+ }
14536
+ else if (key === 'class') {
14537
+ this.element.classList.add(attributes$$1[`${key}`]);
14538
+ }
14539
+ else if (key === 'placeholder') {
14540
+ this.setProperties({ placeholder: attributes$$1[`${key}`] }, true);
14541
+ Input.setPlaceholder(this.placeholder, this.element);
14542
+ }
14543
+ else {
14544
+ this.element.setAttribute(key, attributes$$1[`${key}`]);
14545
+ }
14546
+ }
14547
+ }
14548
+ /**
14549
+ * Removing the multiple attributes as key-value pair to the TextArea element.
14550
+ *
14551
+ * @param { string[] } attributes - Specifies the attributes name to be removed from TextArea element.
14552
+ * @returns {void}
14553
+ */
14554
+ removeAttributes(attributes$$1) {
14555
+ for (const key of attributes$$1) {
14556
+ if (key === 'disabled') {
14557
+ this.setProperties({ enabled: true }, true);
14558
+ Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textareaWrapper.container);
14559
+ }
14560
+ else if (key === 'readonly') {
14561
+ this.setProperties({ readonly: false }, true);
14562
+ Input.setReadonly(this.readonly, this.element);
14563
+ }
14564
+ else if (key === 'placeholder') {
14565
+ this.setProperties({ placeholder: null }, true);
14566
+ Input.setPlaceholder(this.placeholder, this.element);
14567
+ }
14568
+ else {
14569
+ this.element.removeAttribute(key);
14570
+ }
14571
+ }
14572
+ }
14573
+ /**
14574
+ * Sets the focus to widget for interaction.
14575
+ *
14576
+ * @returns {void}
14577
+ */
14578
+ focusIn() {
14579
+ if (document.activeElement !== this.element && this.enabled) {
14580
+ this.element.focus();
14581
+ if (this.textareaWrapper.container.classList.contains('e-input-group')
14582
+ || this.textareaWrapper.container.classList.contains('e-outline')
14583
+ || this.textareaWrapper.container.classList.contains('e-filled')) {
14584
+ addClass([this.textareaWrapper.container], [TEXTBOX_FOCUS]);
14585
+ }
14586
+ }
14587
+ }
14588
+ /**
14589
+ * Remove the focus from widget, if the widget is in focus state.
14590
+ *
14591
+ * @returns {void}
14592
+ */
14593
+ focusOut() {
14594
+ if (document.activeElement === this.element && this.enabled) {
14595
+ this.element.blur();
14596
+ if (this.textareaWrapper.container.classList.contains('e-input-group')
14597
+ || this.textareaWrapper.container.classList.contains('e-outline')
14598
+ || this.textareaWrapper.container.classList.contains('e-filled')) {
14599
+ removeClass([this.textareaWrapper.container], [TEXTBOX_FOCUS]);
14600
+ }
14601
+ }
14602
+ }
14603
+ /**
14604
+ * Sets up the width for the textarea wrapper.
14605
+ *
14606
+ * @returns {void}
14607
+ */
14608
+ setWrapperWidth() {
14609
+ if (this.enabled && ((this.resizeMode !== 'None' && this.resizeMode !== 'Vertical') || (this.columnsCount || this.element.getAttribute('cols')))) {
14610
+ if (this.resizeMode !== 'None' && this.resizeMode !== 'Vertical') {
14611
+ if (this.textareaWrapper.container.style.width) {
14612
+ this.setElementWidth(this.textareaWrapper.container.style.width);
14613
+ this.textareaWrapper.container.style.width = '';
14614
+ this.textareaWrapper.container.classList.add(AUTO_WIDTH);
14615
+ }
14616
+ }
14617
+ this.textareaWrapper.container.classList.add(AUTO_WIDTH);
14618
+ }
14619
+ else {
14620
+ if (this.textareaWrapper.container.classList.contains(AUTO_WIDTH)) {
14621
+ this.textareaWrapper.container.classList.remove(AUTO_WIDTH);
14622
+ }
14623
+ }
14624
+ }
14625
+ resetForm() {
14626
+ if (this.isAngular) {
14627
+ this.resetValue('');
14628
+ }
14629
+ else {
14630
+ this.resetValue(this.initialValue);
14631
+ }
14632
+ if (!isNullOrUndefined(this.textareaWrapper)) {
14633
+ const label = this.textareaWrapper.container.querySelector('.e-float-text');
14634
+ if (!isNullOrUndefined(label) && this.floatLabelType !== 'Always') {
14635
+ if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {
14636
+ label.classList.add('e-label-bottom');
14637
+ label.classList.remove('e-label-top');
14638
+ }
14639
+ else if (this.initialValue !== '') {
14640
+ label.classList.add('e-label-top');
14641
+ label.classList.remove('e-label-bottom');
14642
+ }
14643
+ }
14644
+ }
14645
+ }
14646
+ resetValue(value) {
14647
+ const prevOnChange = this.isProtectedOnChange;
14648
+ this.isProtectedOnChange = true;
14649
+ this.value = value;
14650
+ if (value == null && this.textareaWrapper.container.classList.contains('e-valid-input')) {
14651
+ this.textareaWrapper.container.classList.remove('e-valid-input');
14652
+ }
14653
+ this.isProtectedOnChange = prevOnChange;
14654
+ }
14655
+ setElementWidth(width) {
14656
+ if (typeof width === 'number') {
14657
+ this.element.style.width = formatUnit(width);
14658
+ }
14659
+ else if (typeof width === 'string') {
14660
+ this.element.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));
14661
+ }
14662
+ }
14663
+ getCurrentResizeClass(resizeMode) {
14664
+ return resizeMode === 'None' ? RESIZE_NONE : (resizeMode === 'Both' ? RESIZE_XY : resizeMode === 'Horizontal' ? RESIZE_X : RESIZE_Y);
14665
+ }
14666
+ };
14667
+ __decorate$7([
14668
+ Property(false)
14669
+ ], TextArea.prototype, "readonly", void 0);
14670
+ __decorate$7([
14671
+ Property(null)
14672
+ ], TextArea.prototype, "value", void 0);
14673
+ __decorate$7([
14674
+ Property('Never')
14675
+ ], TextArea.prototype, "floatLabelType", void 0);
14676
+ __decorate$7([
14677
+ Property('')
14678
+ ], TextArea.prototype, "cssClass", void 0);
14679
+ __decorate$7([
14680
+ Property(null)
14681
+ ], TextArea.prototype, "placeholder", void 0);
14682
+ __decorate$7([
14683
+ Property({})
14684
+ ], TextArea.prototype, "htmlAttributes", void 0);
14685
+ __decorate$7([
14686
+ Property(true)
14687
+ ], TextArea.prototype, "enabled", void 0);
14688
+ __decorate$7([
14689
+ Property(false)
14690
+ ], TextArea.prototype, "showClearButton", void 0);
14691
+ __decorate$7([
14692
+ Property(false)
14693
+ ], TextArea.prototype, "enablePersistence", void 0);
14694
+ __decorate$7([
14695
+ Property(null)
14696
+ ], TextArea.prototype, "width", void 0);
14697
+ __decorate$7([
14698
+ Property('Vertical')
14699
+ ], TextArea.prototype, "resizeMode", void 0);
14700
+ __decorate$7([
14701
+ Property(null)
14702
+ ], TextArea.prototype, "maxLength", void 0);
14703
+ __decorate$7([
14704
+ Property(null)
14705
+ ], TextArea.prototype, "columnsCount", void 0);
14706
+ __decorate$7([
14707
+ Property(null)
14708
+ ], TextArea.prototype, "rowsCount", void 0);
14709
+ __decorate$7([
14710
+ Event()
14711
+ ], TextArea.prototype, "created", void 0);
14712
+ __decorate$7([
14713
+ Event()
14714
+ ], TextArea.prototype, "destroyed", void 0);
14715
+ __decorate$7([
14716
+ Event()
14717
+ ], TextArea.prototype, "change", void 0);
14718
+ __decorate$7([
14719
+ Event()
14720
+ ], TextArea.prototype, "blur", void 0);
14721
+ __decorate$7([
14722
+ Event()
14723
+ ], TextArea.prototype, "focus", void 0);
14724
+ __decorate$7([
14725
+ Event()
14726
+ ], TextArea.prototype, "input", void 0);
14727
+ TextArea = __decorate$7([
14728
+ NotifyPropertyChanges
14729
+ ], TextArea);
14730
+
14731
+ /**
14732
+ * Uploader modules
14733
+ */
14734
+
14735
+ class SignatureBase extends Component {
14736
+ constructor() {
14737
+ super(...arguments);
14738
+ /* minDistance(distance between the two point) was calaculated for smoothness.*/
14739
+ this.minDistance = 5;
14740
+ this.previous = 0;
14741
+ /* interval handles for the smoothness in the mouse move event.*/
14742
+ this.interval = 30;
14743
+ this.timeout = null;
14744
+ this.isSignatureEmpty = true;
14745
+ this.backgroundLoaded = null;
14746
+ this.isBlazor = false;
14747
+ this.isResponsive = false;
14748
+ this.signPointsColl = [];
14749
+ this.signRatioPointsColl = [];
14750
+ this.canRedraw = true;
14751
+ }
14752
+ /**
14753
+ * To Initialize the component rendering
14754
+ *
14755
+ * @private
14756
+ * @param {HTMLCanvasElement} element - Specifies the canvas element.
14757
+ * @param {BlazorDotnetObject} dotnetRef - Specifies for blazor client to server communication.
14758
+ * @returns {void}
14759
+ */
14760
+ initialize(element, dotnetRef) {
14761
+ this.clearArray = [];
14762
+ this.element = element;
14763
+ this.canvasContext = this.element.getContext('2d');
14764
+ this.canvasContext.canvas.tabIndex = -1;
14765
+ if (dotnetRef) {
14766
+ this.dotnetRef = dotnetRef;
14767
+ this.isBlazor = true;
14768
+ if (this.signatureValue) {
14769
+ this.loadPersistedSignature();
14770
+ }
14771
+ }
14772
+ this.setHTMLProperties();
14773
+ if (isNullOrUndefined(this.signatureValue)) {
14774
+ this.updateSnapCollection(true);
14775
+ }
14776
+ this.wireEvents();
14777
+ if (!this.isBlazor) {
14778
+ this.trigger('created', null);
14779
+ }
14780
+ }
14781
+ wireEvents() {
14782
+ if (isNullOrUndefined(this.pointColl) && !this.isReadOnly && !this.disabled) {
14783
+ EventHandler.add(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler, this);
14784
+ EventHandler.add(this.canvasContext.canvas, 'keydown', this.keyboardHandler, this);
14785
+ window.addEventListener('resize', this.resizeHandler.bind(this));
14786
+ }
14787
+ else if (this.pointColl) {
14788
+ EventHandler.add(this.canvasContext.canvas, 'mousemove touchmove', this.mouseMoveHandler, this);
14789
+ EventHandler.add(this.canvasContext.canvas, 'mouseup touchend', this.mouseUpHandler, this);
14790
+ EventHandler.add(document, 'mouseup', this.mouseUpHandler, this);
14791
+ }
14792
+ }
14793
+ unwireEvents(type) {
14794
+ if (type === 'mouseup' || type === 'touchend') {
14795
+ EventHandler.remove(this.canvasContext.canvas, 'mousemove touchmove', this.mouseMoveHandler);
14796
+ EventHandler.remove(this.canvasContext.canvas, 'mouseup touchend', this.mouseUpHandler);
14797
+ EventHandler.remove(document, 'mouseup', this.mouseUpHandler);
14798
+ }
14799
+ else {
14800
+ EventHandler.remove(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler);
14801
+ EventHandler.remove(this.canvasContext.canvas, 'keydown', this.keyboardHandler);
14802
+ window.removeEventListener('resize', this.resizeHandler);
14803
+ }
14804
+ }
14805
+ setHTMLProperties() {
14806
+ if (this.element.height === 150 && this.element.width === 300 && this.element.offsetHeight !== 0 && this.element.offsetWidth !== 0) {
14807
+ this.element.height = this.element.offsetHeight;
14808
+ this.element.width = this.element.offsetWidth;
14809
+ this.isResponsive = true;
14810
+ }
14811
+ else if ((this.element.height !== this.element.offsetHeight - 1 || this.element.width !== this.element.offsetWidth - 1)
14812
+ && this.element.offsetHeight !== 0 && this.element.offsetWidth !== 0) {
14813
+ this.element.height = this.element.offsetHeight;
14814
+ this.element.width = this.element.offsetWidth;
14815
+ }
14816
+ this.canvasContext.fillStyle = this.strokeColor;
14817
+ this.tempCanvas = this.createElement('canvas', { className: 'e-' + this.getModuleName() + '-temp' });
14818
+ this.tempContext = this.tempCanvas.getContext('2d');
14819
+ this.tempCanvas.width = this.element.width;
14820
+ this.tempCanvas.height = this.element.height;
14821
+ if (this.backgroundImage) {
14822
+ this.canvasContext.canvas.style.backgroundImage = 'url(' + this.backgroundImage + ')';
14823
+ this.canvasContext.canvas.style.backgroundRepeat = 'no-repeat';
14824
+ if (this.saveWithBackground) {
14825
+ this.setBackgroundImage(this.backgroundImage, 'temp');
14826
+ }
14827
+ }
14828
+ else if (this.backgroundColor) {
14829
+ this.canvasContext.canvas.style.backgroundColor = this.backgroundColor;
14830
+ }
14831
+ }
14832
+ // eslint-disable-next-line
14833
+ mouseDownHandler(e) {
14834
+ if (e.buttons === 1 || e.buttons === 2 || e.type === 'touchstart') {
14835
+ if (e.type === 'touchstart') {
14836
+ e.preventDefault();
14837
+ e.stopPropagation();
14008
14838
  }
14009
14839
  this.beginStroke(e);
14010
14840
  this.wireEvents();
@@ -14077,7 +14907,7 @@ class SignatureBase extends Component {
14077
14907
  resizeHandler() {
14078
14908
  // eslint-disable-next-line @typescript-eslint/no-this-alias
14079
14909
  const proxy = this;
14080
- if (this.isResponsive) {
14910
+ if (this.isResponsive && this.canRedraw) {
14081
14911
  this.canvasContext.canvas.width = this.element.offsetWidth;
14082
14912
  this.canvasContext.canvas.height = this.element.offsetHeight;
14083
14913
  this.canvasContext.scale(1, 1);
@@ -14457,7 +15287,7 @@ class SignatureBase extends Component {
14457
15287
  this.internalRefresh();
14458
15288
  this.signRatioPointsColl = [];
14459
15289
  this.updateSnapCollection(true);
14460
- this.isSignatureEmpty = true;
15290
+ this.isSignatureEmpty = this.canRedraw = true;
14461
15291
  if (!this.isBlazor) {
14462
15292
  this.trigger('change', args);
14463
15293
  }
@@ -14621,7 +15451,7 @@ class SignatureBase extends Component {
14621
15451
  proxy.updateSnapCollection();
14622
15452
  });
14623
15453
  };
14624
- this.isSignatureEmpty = false;
15454
+ this.isSignatureEmpty = this.canRedraw = false;
14625
15455
  }
14626
15456
  saveBackground(savebg) {
14627
15457
  let imageSrc;
@@ -14870,7 +15700,7 @@ class SignatureBase extends Component {
14870
15700
  }
14871
15701
  }
14872
15702
 
14873
- var __decorate$7 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
15703
+ var __decorate$8 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
14874
15704
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14875
15705
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
14876
15706
  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;
@@ -14915,6 +15745,8 @@ let Signature = class Signature extends SignatureBase {
14915
15745
  this.initialize();
14916
15746
  }
14917
15747
  initialize() {
15748
+ this.element.setAttribute('role', 'img');
15749
+ this.element.setAttribute('aria-label', 'signature');
14918
15750
  addClass([this.element], 'e-' + this.getModuleName());
14919
15751
  super.initialize(this.element);
14920
15752
  if (this.enablePersistence) {
@@ -14973,52 +15805,52 @@ let Signature = class Signature extends SignatureBase {
14973
15805
  }
14974
15806
  }
14975
15807
  };
14976
- __decorate$7([
15808
+ __decorate$8([
14977
15809
  Property('')
14978
15810
  ], Signature.prototype, "backgroundColor", void 0);
14979
- __decorate$7([
15811
+ __decorate$8([
14980
15812
  Property('')
14981
15813
  ], Signature.prototype, "backgroundImage", void 0);
14982
- __decorate$7([
15814
+ __decorate$8([
14983
15815
  Property(false)
14984
15816
  ], Signature.prototype, "disabled", void 0);
14985
- __decorate$7([
15817
+ __decorate$8([
14986
15818
  Property(false)
14987
15819
  ], Signature.prototype, "isReadOnly", void 0);
14988
- __decorate$7([
15820
+ __decorate$8([
14989
15821
  Property(true)
14990
15822
  ], Signature.prototype, "saveWithBackground", void 0);
14991
- __decorate$7([
15823
+ __decorate$8([
14992
15824
  Property('#000000')
14993
15825
  ], Signature.prototype, "strokeColor", void 0);
14994
- __decorate$7([
15826
+ __decorate$8([
14995
15827
  Property(0.5)
14996
15828
  ], Signature.prototype, "minStrokeWidth", void 0);
14997
- __decorate$7([
15829
+ __decorate$8([
14998
15830
  Property(2)
14999
15831
  ], Signature.prototype, "maxStrokeWidth", void 0);
15000
- __decorate$7([
15832
+ __decorate$8([
15001
15833
  Property(0.7)
15002
15834
  ], Signature.prototype, "velocity", void 0);
15003
- __decorate$7([
15835
+ __decorate$8([
15004
15836
  Property('en-US')
15005
15837
  ], Signature.prototype, "locale", void 0);
15006
- __decorate$7([
15838
+ __decorate$8([
15007
15839
  Property(false)
15008
15840
  ], Signature.prototype, "enableRtl", void 0);
15009
- __decorate$7([
15841
+ __decorate$8([
15010
15842
  Property(false)
15011
15843
  ], Signature.prototype, "enablePersistence", void 0);
15012
- __decorate$7([
15844
+ __decorate$8([
15013
15845
  Event()
15014
15846
  ], Signature.prototype, "beforeSave", void 0);
15015
- __decorate$7([
15847
+ __decorate$8([
15016
15848
  Event()
15017
15849
  ], Signature.prototype, "change", void 0);
15018
- __decorate$7([
15850
+ __decorate$8([
15019
15851
  Event()
15020
15852
  ], Signature.prototype, "created", void 0);
15021
- Signature = __decorate$7([
15853
+ Signature = __decorate$8([
15022
15854
  NotifyPropertyChanges
15023
15855
  ], Signature);
15024
15856
 
@@ -15026,7 +15858,7 @@ Signature = __decorate$7([
15026
15858
  * Signature modules
15027
15859
  */
15028
15860
 
15029
- var __decorate$8 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
15861
+ var __decorate$9 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
15030
15862
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
15031
15863
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15032
15864
  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;
@@ -15589,6 +16421,7 @@ let Rating = class Rating extends Component {
15589
16421
  });
15590
16422
  }
15591
16423
  keyActionHandler(e) {
16424
+ e.preventDefault();
15592
16425
  if (this.disabled || this.readOnly) {
15593
16426
  return;
15594
16427
  }
@@ -15775,73 +16608,73 @@ let Rating = class Rating extends Component {
15775
16608
  }
15776
16609
  }
15777
16610
  };
15778
- __decorate$8([
16611
+ __decorate$9([
15779
16612
  Property(false)
15780
16613
  ], Rating.prototype, "allowReset", void 0);
15781
- __decorate$8([
16614
+ __decorate$9([
15782
16615
  Property('')
15783
16616
  ], Rating.prototype, "cssClass", void 0);
15784
- __decorate$8([
16617
+ __decorate$9([
15785
16618
  Property(false)
15786
16619
  ], Rating.prototype, "disabled", void 0);
15787
- __decorate$8([
16620
+ __decorate$9([
15788
16621
  Property('')
15789
16622
  ], Rating.prototype, "emptyTemplate", void 0);
15790
- __decorate$8([
16623
+ __decorate$9([
15791
16624
  Property(true)
15792
16625
  ], Rating.prototype, "enableAnimation", void 0);
15793
- __decorate$8([
16626
+ __decorate$9([
15794
16627
  Property(false)
15795
16628
  ], Rating.prototype, "enableSingleSelection", void 0);
15796
- __decorate$8([
16629
+ __decorate$9([
15797
16630
  Property('')
15798
16631
  ], Rating.prototype, "fullTemplate", void 0);
15799
- __decorate$8([
16632
+ __decorate$9([
15800
16633
  Property(5)
15801
16634
  ], Rating.prototype, "itemsCount", void 0);
15802
- __decorate$8([
16635
+ __decorate$9([
15803
16636
  Property(LabelPosition.Right)
15804
16637
  ], Rating.prototype, "labelPosition", void 0);
15805
- __decorate$8([
16638
+ __decorate$9([
15806
16639
  Property('')
15807
16640
  ], Rating.prototype, "labelTemplate", void 0);
15808
- __decorate$8([
16641
+ __decorate$9([
15809
16642
  Property(0.0)
15810
16643
  ], Rating.prototype, "min", void 0);
15811
- __decorate$8([
16644
+ __decorate$9([
15812
16645
  Property(PrecisionType.Full)
15813
16646
  ], Rating.prototype, "precision", void 0);
15814
- __decorate$8([
16647
+ __decorate$9([
15815
16648
  Property(false)
15816
16649
  ], Rating.prototype, "readOnly", void 0);
15817
- __decorate$8([
16650
+ __decorate$9([
15818
16651
  Property(false)
15819
16652
  ], Rating.prototype, "showLabel", void 0);
15820
- __decorate$8([
16653
+ __decorate$9([
15821
16654
  Property(true)
15822
16655
  ], Rating.prototype, "showTooltip", void 0);
15823
- __decorate$8([
16656
+ __decorate$9([
15824
16657
  Property('')
15825
16658
  ], Rating.prototype, "tooltipTemplate", void 0);
15826
- __decorate$8([
16659
+ __decorate$9([
15827
16660
  Property(0.0)
15828
16661
  ], Rating.prototype, "value", void 0);
15829
- __decorate$8([
16662
+ __decorate$9([
15830
16663
  Property(true)
15831
16664
  ], Rating.prototype, "visible", void 0);
15832
- __decorate$8([
16665
+ __decorate$9([
15833
16666
  Event()
15834
16667
  ], Rating.prototype, "beforeItemRender", void 0);
15835
- __decorate$8([
16668
+ __decorate$9([
15836
16669
  Event()
15837
16670
  ], Rating.prototype, "created", void 0);
15838
- __decorate$8([
16671
+ __decorate$9([
15839
16672
  Event()
15840
16673
  ], Rating.prototype, "onItemHover", void 0);
15841
- __decorate$8([
16674
+ __decorate$9([
15842
16675
  Event()
15843
16676
  ], Rating.prototype, "valueChanged", void 0);
15844
- Rating = __decorate$8([
16677
+ Rating = __decorate$9([
15845
16678
  NotifyPropertyChanges
15846
16679
  ], Rating);
15847
16680
 
@@ -15857,5 +16690,5 @@ Rating = __decorate$8([
15857
16690
  * NumericTextBox all modules
15858
16691
  */
15859
16692
 
15860
- export { NumericTextBox, regularExpressions, createMask, applyMask, wireEvents, unwireEvents, bindClearEvent, unstrippedValue, strippedValue, maskInputMouseDownHandler, maskInputMouseUpHandler, maskInputFocusHandler, triggerFocus, escapeRegExp, maskInputBlurHandler, maskInputDropHandler, mobileRemoveFunction, setMaskValue, setElementValue, maskInput, getVal, getMaskedVal, MaskUndo, MaskedTextBox, Input, TicksData, ColorRangeData, LimitData, TooltipData, Slider, regex, ErrorOption, FormValidator, FilesProp, ButtonsProps, AsyncSettings, Uploader, ColorPicker, TextBox, Signature, LabelPosition, PrecisionType, Rating, SignatureBase };
16693
+ export { NumericTextBox, regularExpressions, createMask, applyMask, wireEvents, unwireEvents, bindClearEvent, unstrippedValue, strippedValue, maskInputMouseDownHandler, maskInputMouseUpHandler, maskInputFocusHandler, triggerFocus, escapeRegExp, maskInputBlurHandler, maskInputDropHandler, mobileRemoveFunction, setMaskValue, setElementValue, maskInput, getVal, getMaskedVal, MaskUndo, MaskedTextBox, containerAttributes, TEXTBOX_FOCUS, Input, TicksData, ColorRangeData, LimitData, TooltipData, Slider, regex, ErrorOption, FormValidator, FilesProp, ButtonsProps, AsyncSettings, Uploader, ColorPicker, TextBox, TextArea, Signature, LabelPosition, PrecisionType, Rating, SignatureBase };
15861
16694
  //# sourceMappingURL=ej2-inputs.es2015.js.map