intelicoreact 0.1.36 → 0.1.39

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.
@@ -23,6 +23,10 @@ var _index = require("../../../Constants/index.constants");
23
23
 
24
24
  var _usePrevious = _interopRequireDefault(require("../../../Functions/useFormTools/functions/usePrevious"));
25
25
 
26
+ var _Hint = _interopRequireDefault(require("../../UI/Hint/Hint"));
27
+
28
+ var _functions = require("./functions");
29
+
26
30
  var _InputCarretPosition = require("./InputCarretPosition");
27
31
 
28
32
  require("./InputMask.scss");
@@ -38,6 +42,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
38
42
  var UPPERCASE_LETTER_MASK_CHAR = 'L';
39
43
  var LOWERCASE_LETTER_MASK_CHAR = 'l';
40
44
  var DIGIT_MASK_CHAR = 'D';
45
+ var SPACE_CHAR = "\xA0";
41
46
  var EXCLUDED_KEYS = ["Tab"];
42
47
  var DEFAULT_ERRORS = {
43
48
  onlyLetter: 'Type letter',
@@ -47,8 +52,9 @@ var DEFAULT_ERRORS = {
47
52
  default: null
48
53
  };
49
54
 
50
- function InputMask(_ref) {
51
- var maskPattern = _ref.maskPattern,
55
+ function InputMask() {
56
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
57
+ maskPattern = _ref.maskPattern,
52
58
  maskPatternPlaceholder = _ref.maskPatternPlaceholder,
53
59
  maskPlaceholder = _ref.maskPlaceholder,
54
60
  maskDigitPlaceholder = _ref.maskDigitPlaceholder,
@@ -70,17 +76,35 @@ function InputMask(_ref) {
70
76
  blinkErrors = _ref$blinkErrors === void 0 ? true : _ref$blinkErrors,
71
77
  _ref$blinkDuration = _ref.blinkDuration,
72
78
  blinkDuration = _ref$blinkDuration === void 0 ? 100 : _ref$blinkDuration,
73
- _ref$showNativeErrors = _ref.showNativeErrors,
74
- showNativeErrors = _ref$showNativeErrors === void 0 ? true : _ref$showNativeErrors,
79
+ _ref$showErrors = _ref.showErrors,
80
+ showErrors = _ref$showErrors === void 0 ? true : _ref$showErrors,
75
81
  _ref$className = _ref.className,
76
82
  className = _ref$className === void 0 ? '' : _ref$className,
77
83
  _ref$errors = _ref.errors,
78
84
  customErrors = _ref$errors === void 0 ? DEFAULT_ERRORS : _ref$errors,
85
+ _ref$error = _ref.error,
86
+ error = _ref$error === void 0 ? '' : _ref$error,
79
87
  ref = _ref.ref,
80
88
  _ref$onFocus = _ref.onFocus,
81
89
  onFocusProp = _ref$onFocus === void 0 ? function () {} : _ref$onFocus,
82
90
  _ref$onBlur = _ref.onBlur,
83
- onBlurProp = _ref$onBlur === void 0 ? function () {} : _ref$onBlur;
91
+ onBlurProp = _ref$onBlur === void 0 ? function () {} : _ref$onBlur,
92
+ _ref$imitateTypingOnP = _ref.imitateTypingOnPaste,
93
+ imitateTypingOnPaste = _ref$imitateTypingOnP === void 0 ? true : _ref$imitateTypingOnP,
94
+ _ref$imitateTypingOnP2 = _ref.imitateTypingOnPasteDelay,
95
+ imitateTypingOnPasteDelay = _ref$imitateTypingOnP2 === void 0 ? 100 : _ref$imitateTypingOnP2,
96
+ _ref$showHint = _ref.showHint,
97
+ showHint = _ref$showHint === void 0 ? false : _ref$showHint,
98
+ _ref$hintText = _ref.hintText,
99
+ hintText = _ref$hintText === void 0 ? '' : _ref$hintText,
100
+ _ref$hintClassName = _ref.hintClassName,
101
+ hintClassName = _ref$hintClassName === void 0 ? '' : _ref$hintClassName,
102
+ _ref$isHintRight = _ref.isHintRight,
103
+ isHintRight = _ref$isHintRight === void 0 ? true : _ref$isHintRight,
104
+ _ref$isHintLeft = _ref.isHintLeft,
105
+ isHintLeft = _ref$isHintLeft === void 0 ? false : _ref$isHintLeft,
106
+ _ref$hintPosition = _ref.hintPosition,
107
+ hintPosition = _ref$hintPosition === void 0 ? 'right' : _ref$hintPosition;
84
108
 
85
109
  var errors = _objectSpread(_objectSpread({}, DEFAULT_ERRORS), customErrors);
86
110
 
@@ -90,42 +114,55 @@ function InputMask(_ref) {
90
114
  setMaskRendered = _useState2[1];
91
115
 
92
116
  var inputRef = (0, _react.useRef)(null);
93
- var inputRefWrapper = (0, _react.useRef)(null);
94
- var wrapperRef = (0, _react.useRef)(null);
95
117
 
96
118
  var _useState3 = (0, _react.useState)(false),
97
119
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
98
- isFocused = _useState4[0],
99
- setFocused = _useState4[1];
120
+ isMouseDown = _useState4[0],
121
+ setIsMouseDown = _useState4[1];
100
122
 
101
123
  var _useState5 = (0, _react.useState)(false),
102
124
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
103
- isError = _useState6[0],
104
- setError = _useState6[1];
125
+ isSelecting = _useState6[0],
126
+ setIsSelecting = _useState6[1];
105
127
 
106
128
  var _useState7 = (0, _react.useState)(false),
107
129
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
108
- blinkError = _useState8[0],
109
- setBlinkError = _useState8[1];
130
+ isFocused = _useState8[0],
131
+ setFocused = _useState8[1];
110
132
 
111
- var _useState9 = (0, _react.useState)(errors.default),
133
+ var _useState9 = (0, _react.useState)(false),
112
134
  _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
113
- errorMessage = _useState10[0],
114
- setErrorMessage = _useState10[1];
135
+ isError = _useState10[0],
136
+ setError = _useState10[1];
137
+
138
+ var _useState11 = (0, _react.useState)(false),
139
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
140
+ blinkError = _useState12[0],
141
+ setBlinkError = _useState12[1];
142
+
143
+ var _useState13 = (0, _react.useState)(errors.default),
144
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
145
+ errorMessage = _useState14[0],
146
+ setErrorMessage = _useState14[1];
115
147
 
116
148
  var clearErrorMessage = function clearErrorMessage() {
117
149
  return setErrorMessage(errors.default);
118
150
  };
119
151
 
120
- var _useState11 = (0, _react.useState)(null),
121
- _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
122
- focusedItemRef = _useState12[0],
123
- setFocusedItemRef = _useState12[1];
152
+ var _useState15 = (0, _react.useState)(null),
153
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
154
+ focusedItemRef = _useState16[0],
155
+ setFocusedItemRef = _useState16[1];
124
156
 
125
- var _useState13 = (0, _react.useState)([]),
126
- _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
127
- innerValue = _useState14[0],
128
- setInnerValue = _useState14[1];
157
+ var _useState17 = (0, _react.useState)([]),
158
+ _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
159
+ innerValue = _useState18[0],
160
+ setInnerValue = _useState18[1];
161
+
162
+ var _useState19 = (0, _react.useState)([]),
163
+ _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
164
+ selectedText = _useState20[0],
165
+ setSelectedText = _useState20[1];
129
166
 
130
167
  var addInnerValueChar = function addInnerValueChar(_ref2) {
131
168
  var char = _ref2.char,
@@ -147,14 +184,31 @@ function InputMask(_ref) {
147
184
  });
148
185
  };
149
186
 
150
- var updateInnerValueChar = function updateInnerValueChar(char, i) {
187
+ var updateInnerValueChar = function updateInnerValueChar() {
188
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
189
+ _ref3$char = _ref3.char,
190
+ char = _ref3$char === void 0 ? null : _ref3$char,
191
+ _ref3$isSelected = _ref3.isSelected,
192
+ isSelected = _ref3$isSelected === void 0 ? null : _ref3$isSelected;
193
+
194
+ var i = arguments.length > 1 ? arguments[1] : undefined;
151
195
  setInnerValue(function (state) {
152
196
  var stateCopy = (0, _toConsumableArray2.default)(state);
153
- if (!stateCopy[i].isSpecialSymbol) stateCopy[i].char = char;
197
+ if (!stateCopy[i].isSpecialSymbol && char !== null) stateCopy[i].char = char;
198
+ if (isSelected !== null) stateCopy[i].isSelected = isSelected;
154
199
  return stateCopy;
155
200
  });
156
201
  };
157
202
 
203
+ var resetInnerValue = function resetInnerValue() {
204
+ innerValue.map(function (v, i) {
205
+ return updateInnerValueChar({
206
+ char: '',
207
+ isSelected: false
208
+ }, i);
209
+ });
210
+ };
211
+
158
212
  var getPlaceholderCharByIndex = function getPlaceholderCharByIndex(i) {
159
213
  var _getCharByIndex = getCharByIndex(i),
160
214
  maskChar = _getCharByIndex.maskChar;
@@ -169,18 +223,22 @@ function InputMask(_ref) {
169
223
  };
170
224
 
171
225
  var getInnerValueAsString = function getInnerValueAsString() {
172
- return innerValue.map(function (_ref3, i) {
173
- var char = _ref3.char,
174
- maskChar = _ref3.maskChar;
226
+ return innerValue.map(function (_ref4, i) {
227
+ var char = _ref4.char,
228
+ maskChar = _ref4.maskChar;
175
229
  return char === '' ? getPlaceholderCharByIndex(i) || maskChar : char;
176
230
  }).join('');
177
231
  };
178
232
 
233
+ var getSelectedValueAsString = function getSelectedValueAsString() {
234
+ return selectedText;
235
+ };
236
+
179
237
  var getClearInnerValueAsString = function getClearInnerValueAsString() {
180
- return innerValue.reduce(function (result, _ref4) {
181
- var char = _ref4.char,
182
- maskChar = _ref4.maskChar,
183
- isSpecialSymbol = _ref4.isSpecialSymbol;
238
+ return innerValue.reduce(function (result, _ref5) {
239
+ var char = _ref5.char,
240
+ maskChar = _ref5.maskChar,
241
+ isSpecialSymbol = _ref5.isSpecialSymbol;
184
242
  if (char !== maskChar && char !== '' || isSpecialSymbol) result += char;
185
243
  return result;
186
244
  }, '');
@@ -210,14 +268,69 @@ function InputMask(_ref) {
210
268
  return char === UPPERCASE_LETTER_MASK_CHAR || char === LOWERCASE_LETTER_MASK_CHAR;
211
269
  };
212
270
 
271
+ var isValidChar = function isValidChar(_ref6) {
272
+ var key = _ref6.char,
273
+ i = _ref6.i,
274
+ _ref6$disableErrors = _ref6.disableErrors,
275
+ disableErrors = _ref6$disableErrors === void 0 ? false : _ref6$disableErrors;
276
+ var maskChar = getMaskCharByIndex(i);
277
+
278
+ switch (maskChar) {
279
+ case DIGIT_MASK_CHAR:
280
+ if (!isDigit(key)) {
281
+ if (!disableErrors) setErrorMessage(errors.onlyDigit);
282
+ return false;
283
+ }
284
+
285
+ break;
286
+
287
+ case UPPERCASE_LETTER_MASK_CHAR:
288
+ if (adaptTextCase) key = key.toUpperCase();
289
+
290
+ if (!isLetter(key) && !isCaseSensitive) {
291
+ if (!disableErrors) setErrorMessage(errors.onlyLetter);
292
+ return false;
293
+ }
294
+
295
+ if (isCaseSensitive && !isUpperCaseLetter(key)) {
296
+ if (!disableErrors) setErrorMessage(errors.onlyUpperCase);
297
+ return false;
298
+ }
299
+
300
+ break;
301
+
302
+ case LOWERCASE_LETTER_MASK_CHAR:
303
+ if (adaptTextCase) key = key.toLowerCase();
304
+
305
+ if (!isLetter(key) && !isCaseSensitive) {
306
+ if (!disableErrors) setErrorMessage(errors.onlyLetter);
307
+ return false;
308
+ }
309
+
310
+ if (isCaseSensitive && !isLowerCaseLetter(key)) {
311
+ if (!disableErrors) setErrorMessage(errors.onlyLowerCase);
312
+ return false;
313
+ }
314
+
315
+ break;
316
+
317
+ default:
318
+ return false;
319
+ break;
320
+ }
321
+
322
+ return true;
323
+ };
324
+
213
325
  var getCharObj = function getCharObj(char) {
214
326
  var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
215
327
  var isSpecialSymbol = !(isDigitMaskChar(char) || isLetterMaskChar(char));
216
- if (char === ' ') char = "\xA0";
328
+ if (char === ' ') char = SPACE_CHAR;
217
329
  return _objectSpread({
218
330
  char: isSpecialSymbol ? char : '',
219
331
  maskChar: char,
220
332
  isSpecialSymbol: isSpecialSymbol,
333
+ isSelected: false,
221
334
  ref: /*#__PURE__*/(0, _react.createRef)()
222
335
  }, data);
223
336
  };
@@ -235,10 +348,20 @@ function InputMask(_ref) {
235
348
  };
236
349
 
237
350
  var getMaskCharByIndex = function getMaskCharByIndex(i) {
238
- return maskPattern[i] || undefined;
351
+ var _innerValue$i;
352
+
353
+ return ((_innerValue$i = innerValue[i]) === null || _innerValue$i === void 0 ? void 0 : _innerValue$i.maskChar) || undefined;
354
+ };
355
+
356
+ var getSelectStartIndex = function getSelectStartIndex() {
357
+ var sel = (0, _functions.getSelectionText)();
358
+ var str = getInnerValueAsString();
359
+ return str.indexOf(sel);
239
360
  };
240
361
 
241
362
  var setFocusOnChar = function setFocusOnChar(i, prevIndex) {
363
+ var _ref$current;
364
+
242
365
  var charObj = getCharByIndex(i);
243
366
  if (!charObj) return false;
244
367
  var char = charObj.char,
@@ -251,7 +374,7 @@ function InputMask(_ref) {
251
374
  return prevIndex > i ? onArrowLeftDown(null, i) : onArrowRightDown(null, i);
252
375
  }
253
376
 
254
- ref.current.focus();
377
+ (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
255
378
  setTimeout(function () {
256
379
  return (0, _InputCarretPosition.setCaretPosition)(ref.current, 0);
257
380
  }, 10);
@@ -266,7 +389,9 @@ function InputMask(_ref) {
266
389
  e.stopPropagation();
267
390
  e.preventDefault();
268
391
  innerValue.map(function (charObj, i) {
269
- updateInnerValueChar('', i);
392
+ updateInnerValueChar({
393
+ char: ''
394
+ }, i);
270
395
  });
271
396
  onHomeDown(null, 0);
272
397
  }; ///--- Event Handlers ---///
@@ -288,7 +413,9 @@ function InputMask(_ref) {
288
413
  isSpecialSymbol = charObj.isSpecialSymbol;
289
414
  if (isSpecialSymbol) return onBackspaceDown(e, prevIndex);
290
415
  setFocusOnChar(prevIndex, i);
291
- updateInnerValueChar('', prevIndex);
416
+ updateInnerValueChar({
417
+ char: ''
418
+ }, prevIndex);
292
419
  return true;
293
420
  };
294
421
 
@@ -300,7 +427,9 @@ function InputMask(_ref) {
300
427
  isSpecialSymbol = charObj.isSpecialSymbol;
301
428
  if (isSpecialSymbol) return onDeleteDown(e, i + 1);
302
429
  setFocusOnChar(nextIndex, i);
303
- updateInnerValueChar('', i);
430
+ updateInnerValueChar({
431
+ char: ''
432
+ }, i);
304
433
  return true;
305
434
  };
306
435
 
@@ -340,10 +469,6 @@ function InputMask(_ref) {
340
469
  return onEndDown(e, i);
341
470
  break;
342
471
 
343
- case 'Tab':
344
- return onTabDown(e, i);
345
- break;
346
-
347
472
  default:
348
473
  return true;
349
474
  break;
@@ -351,68 +476,58 @@ function InputMask(_ref) {
351
476
  };
352
477
 
353
478
  var handleKeyDown = function handleKeyDown(e, i) {
354
- e.stopPropagation();
355
- e.preventDefault();
479
+ var _ref7 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
480
+ _ref7$disableErrors = _ref7.disableErrors,
481
+ disableErrors = _ref7$disableErrors === void 0 ? false : _ref7$disableErrors;
482
+
483
+ try {
484
+ e.stopPropagation();
485
+ e.preventDefault();
486
+ } catch (e) {}
487
+
488
+ ;
356
489
  var key = e.key;
357
490
  var charObj = getCharByIndex(i);
358
491
  if (!charObj) return false;
359
492
  var isSpecialSymbol = charObj.isSpecialSymbol,
360
493
  maskChar = charObj.maskChar; //IF DEFAULT CHAR IS SPACE, SWITCH TO NEXT INPUT
361
494
 
362
- if (maskChar === ' ') return handleKeyDown(e, i + 1);
495
+ if (maskChar === SPACE_CHAR) return handleKeyDown(e, i + 1);
363
496
  if (isSpecialSymbol && maskChar !== key) return false;
497
+ if (!isValidChar({
498
+ char: key,
499
+ i: i,
500
+ disableErrors: disableErrors
501
+ })) return false;
502
+ updateInnerValueChar({
503
+ char: key
504
+ }, i);
505
+ onArrowRightDown(e, i);
506
+ return true;
507
+ };
364
508
 
365
- switch (maskChar) {
366
- case DIGIT_MASK_CHAR:
367
- if (!isDigit(key)) {
368
- setErrorMessage(errors.onlyDigit);
369
- return false;
370
- }
371
-
372
- break;
373
-
374
- case UPPERCASE_LETTER_MASK_CHAR:
375
- if (adaptTextCase) key = key.toUpperCase();
376
-
377
- if (!isLetter(key) && !isCaseSensitive) {
378
- setErrorMessage(errors.onlyLetter);
379
- return false;
380
- }
381
-
382
- if (isCaseSensitive && !isUpperCaseLetter(key)) {
383
- setErrorMessage(errors.onlyUpperCase);
384
- return false;
385
- }
386
-
387
- break;
388
-
389
- case LOWERCASE_LETTER_MASK_CHAR:
390
- if (adaptTextCase) key = key.toLowerCase();
391
-
392
- if (!isLetter(key) && !isCaseSensitive) {
393
- setErrorMessage(errors.onlyLetter);
394
- return false;
395
- }
396
-
397
- if (isCaseSensitive && !isLowerCaseLetter(key)) {
398
- setErrorMessage(errors.onlyLowerCase);
399
- return false;
400
- }
401
-
402
- break;
509
+ var handleKeyCombinations = function handleKeyCombinations(e, i) {
510
+ var key = e.key,
511
+ keyCode = e.keyCode;
403
512
 
404
- default:
405
- return false;
513
+ switch (keyCode) {
514
+ //Ctrl + A
515
+ case 65:
516
+ selectAllText(e);
406
517
  break;
407
518
  }
408
-
409
- updateInnerValueChar(key, i);
410
- onArrowRightDown(e, i);
411
- return true;
412
519
  };
413
520
 
414
521
  var _onKeyDown = function onKeyDown(e, i) {
415
- var key = e.key;
522
+ var key = e.key,
523
+ ctrlKey = e.ctrlKey,
524
+ altKey = e.altKey;
525
+
526
+ if (ctrlKey || altKey) {
527
+ if (!_index.KEYBOARD_SERVICE_KEYS.includes(key)) handleKeyCombinations(e, i);
528
+ return true;
529
+ }
530
+
416
531
  var handleResult = _index.KEYBOARD_SERVICE_KEYS.includes(key) ? handleServiceKeyDown(e, i) : handleKeyDown(e, i);
417
532
 
418
533
  if (blinkErrors && !handleResult) {
@@ -421,11 +536,31 @@ function InputMask(_ref) {
421
536
  };
422
537
 
423
538
  var _onClick = function onClick(e, cb) {
539
+ var _ref8 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
540
+ _ref8$ignoreIsSelecti = _ref8.ignoreIsSelecting,
541
+ ignoreIsSelecting = _ref8$ignoreIsSelecti === void 0 ? false : _ref8$ignoreIsSelecti;
542
+
424
543
  e.stopPropagation();
544
+ e.preventDefault();
545
+ if (isSelecting && !ignoreIsSelecting) return false;
425
546
  setFocused(true);
426
547
  if (typeof cb === 'function') cb(e);
427
548
  };
428
549
 
550
+ var onCharClick = function onCharClick(e, i) {
551
+ e.preventDefault();
552
+ e.stopPropagation();
553
+ setIsSelecting(false);
554
+ (0, _functions.resetSelectionText)();
555
+ setTimeout(function () {
556
+ return _onClick(e, function () {
557
+ return _onFocus(e, i);
558
+ }, {
559
+ ignoreIsSelecting: true
560
+ });
561
+ }, 50);
562
+ };
563
+
429
564
  var onBlur = function onBlur(e) {
430
565
  if (isFocused) onBlurProp();
431
566
  setFocused(false);
@@ -448,6 +583,84 @@ function InputMask(_ref) {
448
583
  setFocused(true);
449
584
  };
450
585
 
586
+ var _onPaste = function onPaste(e, i) {
587
+ setIsSelecting(false);
588
+ (0, _functions.resetSelectionText)();
589
+ e.preventDefault();
590
+ e.stopPropagation();
591
+ var pastedText = e.clipboardData.getData('Text');
592
+ if (!pastedText) return false;
593
+ var replacedIndexes = [];
594
+ var result = pastedText.split('').filter(function (char) {
595
+ return isDigit(char) || isLetter(char);
596
+ }).map(function (pastedChar, offset) {
597
+ var charIndex = i + offset;
598
+ var isReplaced = false;
599
+ var isValid = false;
600
+
601
+ var _loop = function _loop(index) {
602
+ var charObj = getCharByIndex(index);
603
+ if (!charObj) return "continue";
604
+ var char = charObj.char,
605
+ maskChar = charObj.maskChar,
606
+ isSpecialSymbol = charObj.isSpecialSymbol; // If Char Is Valid
607
+
608
+ if (!isValidChar({
609
+ char: pastedChar,
610
+ i: index,
611
+ disableErrors: true
612
+ })) return "continue"; // If Char Already Replaced
613
+
614
+ if (replacedIndexes.includes(index)) return "continue";
615
+ isReplaced = true;
616
+ isValid = true;
617
+ replacedIndexes.push(index);
618
+
619
+ if (imitateTypingOnPaste) {
620
+ setTimeout(function () {
621
+ updateInnerValueChar({
622
+ char: pastedChar
623
+ }, index);
624
+ }, offset * imitateTypingOnPasteDelay);
625
+ } else {
626
+ updateInnerValueChar({
627
+ char: pastedChar
628
+ }, index);
629
+ }
630
+ };
631
+
632
+ for (var index = charIndex; index < innerValue.length && !isReplaced; ++index) {
633
+ var _ret = _loop(index);
634
+
635
+ if (_ret === "continue") continue;
636
+ }
637
+
638
+ return {
639
+ char: pastedChar,
640
+ isValid: isValid
641
+ };
642
+ });
643
+
644
+ var _replacedIndexes$reve = replacedIndexes.reverse(),
645
+ _replacedIndexes$reve2 = (0, _slicedToArray2.default)(_replacedIndexes$reve, 1),
646
+ lastCharIndex = _replacedIndexes$reve2[0];
647
+
648
+ setFocusOnChar(lastCharIndex + 1, i);
649
+ };
650
+
651
+ var _onCopy = function onCopy(e, i) {
652
+ (0, _functions.copyToClipboard)((0, _functions.getSelectionText)());
653
+ setIsSelecting(false);
654
+ setFocusOnChar(i, 0);
655
+ };
656
+
657
+ var _onCut = function onCut(e, i) {
658
+ (0, _functions.copyToClipboard)((0, _functions.getSelectionText)());
659
+ resetInnerValue();
660
+ setIsSelecting(false);
661
+ setFocusOnChar(i, 0);
662
+ };
663
+
451
664
  var cancelDefaultAction = function cancelDefaultAction(e, cb) {
452
665
  var key = e.key;
453
666
 
@@ -458,6 +671,14 @@ function InputMask(_ref) {
458
671
 
459
672
  if (typeof cb === 'function') cb(e);
460
673
  return false;
674
+ };
675
+
676
+ var selectAllText = function selectAllText(e) {
677
+ e.preventDefault();
678
+ e.stopPropagation();
679
+ setIsSelecting(true);
680
+ (0, _functions.selectElementContents)(inputRef.current);
681
+ setSelectedText((0, _functions.getSelectionText)());
461
682
  }; ///--- OBSERVERS ---///
462
683
  //Init InnerValue
463
684
 
@@ -465,15 +686,19 @@ function InputMask(_ref) {
465
686
  (0, _react.useEffect)(function () {
466
687
  if (!maskPattern) maskPattern = '';
467
688
  var maskLength = maskPattern.length;
468
- maskPattern.concat(' ').split('').map(function (char) {
689
+ maskPattern.concat(' ').split('').map(function (char, id) {
469
690
  return addInnerValueChar({
470
691
  char: char
692
+ }, {
693
+ id: id
471
694
  });
472
695
  });
473
696
 
474
697
  if (value !== '' && value.length === maskLength) {
475
698
  value.split('').map(function (char, i) {
476
- return updateInnerValueChar(char, i);
699
+ return updateInnerValueChar({
700
+ char: char
701
+ }, i);
477
702
  });
478
703
  }
479
704
 
@@ -481,7 +706,10 @@ function InputMask(_ref) {
481
706
  }, []); // Focus Observer
482
707
 
483
708
  (0, _react.useEffect)(function () {
484
- if (!isFocused) setFocusedItemRef(null);
709
+ if (!isFocused) {
710
+ setFocusedItemRef(null);
711
+ setSelectedText('');
712
+ }
485
713
  }, [isFocused]); // Default Focused
486
714
 
487
715
  (0, _react.useEffect)(function () {
@@ -501,24 +729,55 @@ function InputMask(_ref) {
501
729
  setTimeout(function () {
502
730
  setBlinkError(false);
503
731
  }, blinkDuration);
504
- }, [blinkError]); ///--- RENDER ---///
732
+ }, [blinkError]);
733
+ (0, _react.useEffect)(function () {
734
+ if (!isSelecting) {
735
+ setSelectedText('');
736
+ (0, _functions.resetSelectionText)();
737
+ }
738
+ }, [isSelecting]);
739
+ (0, _react.useEffect)(function () {
740
+ document.addEventListener('mouseup', function () {
741
+ setIsMouseDown(function (isMouseDown) {
742
+ if (isMouseDown) {
743
+ setSelectedText((0, _functions.getSelectionText)());
744
+ document.addEventListener('click', function () {
745
+ setIsSelecting(false);
746
+ }, {
747
+ once: true
748
+ });
749
+ }
750
+
751
+ return false;
752
+ });
753
+ });
754
+ }, []);
755
+ (0, _react.useEffect)(function () {
756
+ if (isError) return;
757
+ setError(error !== '');
758
+ setErrorMessage(error === '' ? errors.default : error);
759
+ }, [error, isError]); ///--- RENDER ---///
505
760
 
506
761
  var renderChar = function renderChar(obj, i) {
507
762
  var className = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
508
763
  var char = obj.char,
509
764
  ref = obj.ref,
510
765
  maskChar = obj.maskChar,
511
- isSpecialSymbol = obj.isSpecialSymbol;
512
- return /*#__PURE__*/_react.default.createElement("div", {
766
+ isSpecialSymbol = obj.isSpecialSymbol,
767
+ isSelected = obj.isSelected;
768
+ if (i === innerValue.length - 1 && isSelecting) return /*#__PURE__*/_react.default.createElement("span", {
769
+ style: {
770
+ width: '1px'
771
+ }
772
+ });
773
+ return /*#__PURE__*/_react.default.createElement("span", {
513
774
  tabIndex: i === 0 ? 1 : -1,
514
775
  key: i,
515
776
  maxLength: 1,
516
777
  "attr-char-id": i,
517
- className: "input-mask_value_item ".concat(className, " ").concat(isDigitMaskChar(obj.maskChar) ? 'input-mask_value_item--digit' : '', " ").concat(isLetterMaskChar(obj.maskChar) ? 'input-mask_value_item--letter' : '', " ").concat(obj.isSpecialSymbol ? 'input-mask_value_item--spec' : ''),
778
+ className: "\n input-mask_value_item\n ".concat(className, "\n ").concat(isDigitMaskChar(obj.maskChar) ? 'input-mask_value_item--digit' : '', "\n ").concat(isLetterMaskChar(obj.maskChar) ? 'input-mask_value_item--letter' : '', "\n ").concat(obj.isSpecialSymbol ? 'input-mask_value_item--spec' : '', "\n ").concat(isSelected ? 'input-mask_value_item--selected' : '', "\n "),
518
779
  onClick: function onClick(e) {
519
- _onClick(e, function () {
520
- return _onFocus(e, i);
521
- });
780
+ onCharClick(e, i);
522
781
  },
523
782
  onFocus: function onFocus(e) {
524
783
  return _onFocus(e, i);
@@ -529,15 +788,32 @@ function InputMask(_ref) {
529
788
  return _onKeyDown(e, i);
530
789
  },
531
790
  onChange: function onChange() {},
532
- contentEditable: true,
791
+ contentEditable: !isSelecting,
533
792
  inputMode: isDigitMaskChar(maskChar) ? 'numeric' : 'text',
534
793
  suppressContentEditableWarning: true,
535
- unselectable: true,
536
- onSelect: cancelDefaultAction,
537
- onMouseDown: cancelDefaultAction,
538
- onPaste: cancelDefaultAction // TODO IF NEEDED
539
- ,
540
- ref: ref
794
+ onPaste: function onPaste(e) {
795
+ return cancelDefaultAction(e, function () {
796
+ return _onPaste(e, i);
797
+ });
798
+ },
799
+ onCopy: function onCopy(e) {
800
+ return cancelDefaultAction(e, function () {
801
+ return _onCopy(e, i);
802
+ });
803
+ },
804
+ onCut: function onCut(e) {
805
+ return cancelDefaultAction(e, function () {
806
+ return _onCut(e, i);
807
+ });
808
+ },
809
+ on: true,
810
+ ref: ref,
811
+ onDoubleClick: function onDoubleClick(e) {
812
+ setIsSelecting(true);
813
+ setTimeout(function () {
814
+ return selectAllText(e, i);
815
+ }, 50);
816
+ }
541
817
  }, isSpecialSymbol ? maskChar : char === '' ? getPlaceholderCharByIndex(i) : char);
542
818
  };
543
819
 
@@ -571,27 +847,33 @@ function InputMask(_ref) {
571
847
  });
572
848
  };
573
849
 
574
- var renderSingleInputValue = function renderSingleInputValue() {
575
- return /*#__PURE__*/_react.default.createElement("div", {
576
- onClick: function onClick() {
577
- return setFocused(true);
578
- }
579
- }, getInnerValueAsString());
580
- };
581
-
582
850
  var render = function render() {
583
851
  return /*#__PURE__*/_react.default.createElement("div", {
584
- className: "input-mask_wrapper ".concat(className),
585
- onBlur: onBlur,
586
- ref: wrapperRef
852
+ className: "input__wrap ".concat(className),
853
+ onBlur: onBlur
587
854
  }, /*#__PURE__*/_react.default.createElement("div", {
588
855
  className: "input-mask ".concat(isFocused ? 'input-mask_focus' : '', " ").concat(isError ? 'input-mask_error' : '', " ").concat(blinkError ? 'input-mask_blink-error' : ''),
589
- ref: inputRefWrapper,
856
+ onMouseDown: function onMouseDown() {
857
+ return setIsMouseDown(true);
858
+ },
859
+ onMouseMove: function onMouseMove() {
860
+ return isMouseDown ? setIsSelecting(true) : null;
861
+ },
590
862
  onClick: function onClick(e) {
591
- return _onClick(e, onEndDown(e, 0));
863
+ return cancelDefaultAction(e, function () {
864
+ return !isMouseDown ? _onClick(e, function () {
865
+ return onEndDown(e, 0);
866
+ }) : null;
867
+ });
592
868
  },
593
869
  onBlur: onBlur
594
- }, isIconLeft && showIcon && /*#__PURE__*/_react.default.createElement("div", {
870
+ }, showHint && isHintLeft && /*#__PURE__*/_react.default.createElement("div", {
871
+ className: "input-mask_hint input-mask_hint--left"
872
+ }, /*#__PURE__*/_react.default.createElement(_Hint.default, {
873
+ hint: hintText,
874
+ className: hintClassName,
875
+ side: hintPosition
876
+ })), isIconLeft && showIcon && /*#__PURE__*/_react.default.createElement("div", {
595
877
  className: "input-mask_icon input-mask_icon--left"
596
878
  }, icon), /*#__PURE__*/_react.default.createElement("div", {
597
879
  className: "input-mask_value",
@@ -606,7 +888,13 @@ function InputMask(_ref) {
606
888
  onClick: clearValue
607
889
  })), isIconRight && showIcon && /*#__PURE__*/_react.default.createElement("div", {
608
890
  className: "input-mask_icon input-mask_icon--right"
609
- }, icon)), showNativeErrors && errorMessage && /*#__PURE__*/_react.default.createElement("div", {
891
+ }, icon), showHint && isHintRight && /*#__PURE__*/_react.default.createElement("div", {
892
+ className: "input-mask_hint input-mask_hint--right"
893
+ }, /*#__PURE__*/_react.default.createElement(_Hint.default, {
894
+ hint: hintText,
895
+ className: hintClassName,
896
+ side: hintPosition
897
+ }))), showErrors && errorMessage && /*#__PURE__*/_react.default.createElement("div", {
610
898
  className: "input-mask_error-text"
611
899
  }, errorMessage));
612
900
  };
@@ -1,17 +1,8 @@
1
- .unselectable {
2
- -webkit-touch-callout: none; /* iOS Safari */
3
- -webkit-user-select: none; /* Safari */
4
- -khtml-user-select: none; /* Konqueror HTML */
5
- -moz-user-select: none; /* Firefox */
6
- -ms-user-select: none; /* Internet Explorer/Edge */
7
- user-select: none; /* Non-prefixed version, currently
8
- supported by Chrome and Opera */
9
- }
10
-
11
- .input-mask_wrapper {
1
+ .input__wrap {
12
2
  outline: none;
13
3
  display: block;
14
- width: 250px;
4
+ // width: fit-content;
5
+ width: 100%;
15
6
 
16
7
  .input-mask{
17
8
  display: inline-flex;
@@ -28,10 +19,6 @@
28
19
  &_focus{
29
20
  border-color: #6b81dd;
30
21
  filter: drop-shadow(0px 0px 4px rgba(93, 120, 255, 0.5));
31
-
32
- .input-mask_value {
33
- opacity: 1;
34
- }
35
22
  }
36
23
 
37
24
  &_error,
@@ -55,6 +42,43 @@
55
42
  }
56
43
  }
57
44
 
45
+ &_hint{
46
+ display: flex;
47
+ text-align: center;
48
+ align-items: center;
49
+
50
+ & .hint__text_right{
51
+ top: 50%;
52
+ left: 24px;
53
+ transform: translateY(-50%);
54
+
55
+ &::before{
56
+ top: calc(50% - 4px);
57
+ left: -3px;
58
+ }
59
+ }
60
+
61
+ & .hint__text_left{
62
+ top: 50%;
63
+ right: 32px;
64
+ transform: translateY(-50%);
65
+
66
+ &::before{
67
+ top: calc(50% - 4px);
68
+ right: -3px;
69
+ }
70
+ }
71
+
72
+ &--left{
73
+ margin-right: 4px;
74
+ }
75
+
76
+ &--right{
77
+ margin-left: 4px;
78
+ right: 0;
79
+ }
80
+ }
81
+
58
82
  &_clear{
59
83
  height: 16px;
60
84
  width: 16px;
@@ -62,7 +86,6 @@
62
86
  }
63
87
 
64
88
  &_value{
65
- opacity: 0.6;
66
89
  display: flex;
67
90
  align-items: center;
68
91
  outline: none;
@@ -70,7 +93,6 @@
70
93
  width: 100%;
71
94
 
72
95
  &_item{
73
- @extend .unselectable;
74
96
  display: inline-flex;
75
97
  min-width: 0;
76
98
  font-size: 16px;
@@ -97,6 +119,7 @@
97
119
  }
98
120
 
99
121
  &:last-child{
122
+ color: #333333;
100
123
  max-width: 1px;
101
124
  }
102
125
  }
@@ -108,15 +108,20 @@ var _default = {
108
108
  description: 'Duration of <b>Error Blink</b> in <b>ms</b>.',
109
109
  default: 100
110
110
  },
111
- showNativeErrors: {
111
+ showErrors: {
112
112
  type: 'boolean',
113
113
  default: true,
114
- description: 'Turn <b>On/Off</b> Display of Native Event Errors.'
114
+ description: 'Turn <b>On/Off</b> Display of Errors.'
115
115
  },
116
116
  errors: {
117
117
  type: 'object',
118
118
  description: "Errors Descriptions: <br/>\n\n {\n onlyLetter: 'Type letter',\n onlyDigit: 'Type digit',\n onlyUpperCase: 'Type letter in UpperCase',\n onlyLowerCase: 'Type letter in LowerCase',\n default: null\n }\n"
119
119
  },
120
+ error: {
121
+ type: 'string',
122
+ default: '',
123
+ description: 'Custom Error Text. If is not empty, field would be hightlited'
124
+ },
120
125
  onFocus: {
121
126
  type: 'function',
122
127
  description: 'Callback Function for Handle <b>Input Focus</b>'
@@ -134,6 +139,46 @@ var _default = {
134
139
  type: 'boolean',
135
140
  description: 'Set Autofocus On Render',
136
141
  default: false
142
+ },
143
+ imitateTypingOnPaste: {
144
+ type: 'boolean',
145
+ description: '<b>Manual Input Simulation Mode</b> when called <b>Pasting Text Event</b>.',
146
+ default: false
147
+ },
148
+ imitateTypingOnPasteDelay: {
149
+ type: 'number',
150
+ description: '<b>Delay Time</b> for <b>Manual Input Simulation Mode</b> when called <b>Pasting Text Event</b>.',
151
+ default: 100
152
+ },
153
+ showHint: {
154
+ type: 'boolean',
155
+ description: 'Turn <b>On/Off</b> Input Hint.',
156
+ default: false
157
+ },
158
+ hintText: {
159
+ type: 'string',
160
+ description: 'Input Hint Text.',
161
+ default: ''
162
+ },
163
+ hintClassName: {
164
+ type: 'string',
165
+ description: 'ClassName for Input Hint.',
166
+ default: ''
167
+ },
168
+ isHintLeft: {
169
+ type: 'boolean',
170
+ default: false,
171
+ description: 'Display Input Hint on Left Side.'
172
+ },
173
+ isHintRight: {
174
+ type: 'boolean',
175
+ default: true,
176
+ description: 'Display Input Hint on Right Side.'
177
+ },
178
+ hintPosition: {
179
+ type: 'string',
180
+ description: 'Position of <b>Input Hint Text</b>',
181
+ default: 'right'
137
182
  }
138
183
  }
139
184
  };
@@ -173,8 +218,8 @@ var Template = function Template(args) {
173
218
  var InputMaskTemplate = Template.bind({});
174
219
  exports.InputMaskTemplate = InputMaskTemplate;
175
220
  InputMaskTemplate.args = {
176
- maskPattern: 'DDD DDD DDDD | LLL ll',
177
- maskPatternPlaceholder: 'XXX xxx XXXX | AAA aa',
221
+ maskPattern: 'DDDD DDDD DDDD DDDD',
222
+ maskPatternPlaceholder: 'xxxx xxxx xxxx xxxx',
178
223
  usePatternPlaceholder: false,
179
224
  maskPlaceholder: '_',
180
225
  maskDigitPlaceholder: '',
@@ -185,15 +230,24 @@ InputMaskTemplate.args = {
185
230
  showIcon: false,
186
231
  isIconLeft: true,
187
232
  isIconRight: false,
188
- isClearable: false,
233
+ isClearable: true,
189
234
  value: '',
190
235
  onChange: function onChange() {},
191
236
  blinkErrors: false,
192
237
  blinkDuration: 100,
193
- showNativeErrors: true,
238
+ showErrors: true,
194
239
  errors: {},
240
+ error: '',
195
241
  onFocus: function onFocus() {},
196
242
  onBlur: function onBlur() {},
197
243
  className: '',
198
- isFocusedDefault: false
244
+ isFocusedDefault: false,
245
+ imitateTypingOnPaste: false,
246
+ imitateTypingOnPasteDelay: 100,
247
+ showHint: false,
248
+ hintText: 'Hint Text',
249
+ hintClassName: '',
250
+ isHintRight: true,
251
+ isHintLeft: false,
252
+ hintPosition: 'right'
199
253
  };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.selectElementContents = exports.copyToClipboard = exports.resetSelectionText = exports.getSelectionText = void 0;
7
+
8
+ var getSelectionText = function getSelectionText() {
9
+ var text = "";
10
+
11
+ if (window.getSelection) {
12
+ text = window.getSelection().toString();
13
+ } else if (document.selection && document.selection.type != "Control") {
14
+ text = document.selection.createRange().text;
15
+ }
16
+
17
+ return text.replace(/\n/g, '');
18
+ };
19
+
20
+ exports.getSelectionText = getSelectionText;
21
+
22
+ var resetSelectionText = function resetSelectionText() {
23
+ if (window.getSelection) {
24
+ window.getSelection().removeAllRanges();
25
+ }
26
+ };
27
+
28
+ exports.resetSelectionText = resetSelectionText;
29
+
30
+ var copyToClipboard = function copyToClipboard(str) {
31
+ if (navigator && navigator.clipboard && navigator.clipboard.writeText) return navigator.clipboard.writeText(str);
32
+ return Promise.reject('The Clipboard API is not available.');
33
+ };
34
+
35
+ exports.copyToClipboard = copyToClipboard;
36
+
37
+ var selectElementContents = function selectElementContents(el) {
38
+ var range = document.createRange();
39
+ range.selectNodeContents(el);
40
+ var sel = window.getSelection();
41
+ sel.removeAllRanges();
42
+ sel.addRange(range);
43
+ };
44
+
45
+ exports.selectElementContents = selectElementContents;
@@ -48,7 +48,9 @@ var RangeInputs = function RangeInputs(_ref) {
48
48
  onChange = _ref.onChange,
49
49
  _ref$type = _ref.type,
50
50
  type = _ref$type === void 0 ? 'int' : _ref$type,
51
- setInnerError = _ref.setError;
51
+ setInnerError = _ref.setError,
52
+ _ref$label = _ref.label,
53
+ label = _ref$label === void 0 ? "" : _ref$label;
52
54
 
53
55
  var _useState = (0, _react.useState)({
54
56
  from: '',
@@ -98,7 +100,9 @@ var RangeInputs = function RangeInputs(_ref) {
98
100
 
99
101
  return /*#__PURE__*/_react.default.createElement("div", {
100
102
  className: (0, _classnames.default)(RC, className, (0, _defineProperty2.default)({}, "".concat(RC, "_column"), isColumnPosition))
101
- }, /*#__PURE__*/_react.default.createElement("div", {
103
+ }, label && label !== " " && /*#__PURE__*/_react.default.createElement("div", {
104
+ className: "".concat(RC, "__label")
105
+ }, label), /*#__PURE__*/_react.default.createElement("div", {
102
106
  className: "".concat(RC, "__wrapper")
103
107
  }, /*#__PURE__*/_react.default.createElement("div", {
104
108
  className: "".concat(RC, "__input-from")
@@ -2,7 +2,8 @@
2
2
  display: flex;
3
3
  flex-flow: row nowrap;
4
4
  justify-content: flex-start;
5
- align-items: center;
5
+ align-items: flex-start;
6
+ flex-direction: column;
6
7
 
7
8
  &__wrapper {
8
9
  width: 100%;
@@ -47,4 +48,13 @@
47
48
  margin-bottom: 15px;
48
49
  }
49
50
  }
51
+
52
+ .range-inputs__label{
53
+ font-family: 'Roboto';
54
+ font-style: normal;
55
+ font-weight: 500;
56
+ font-size: 12px;
57
+ line-height: 24px;
58
+ margin-bottom: 8px;
59
+ }
50
60
  }
@@ -51,5 +51,6 @@ exports.RangeInputsTemplate = RangeInputsTemplate;
51
51
  RangeInputsTemplate.args = {
52
52
  isColumnPosition: true,
53
53
  className: '',
54
- type: 'int'
54
+ type: 'int',
55
+ label: 'Range Inputs'
55
56
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intelicoreact",
3
- "version": "0.1.36",
3
+ "version": "0.1.39",
4
4
  "description": "fixes",
5
5
  "main": "dist/index.js",
6
6
  "files": ["dist/*", "node_modules/anme/*", "node_modules/moment/*", "node_modules/moment-timezone/*"],