intelicoreact 0.1.36 → 0.1.37

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