@tabler/core 1.0.0-beta6 → 1.0.0-beta8

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 (59) hide show
  1. package/dist/css/demo.css +10 -11
  2. package/dist/css/demo.min.css +3 -3
  3. package/dist/css/demo.rtl.css +10 -11
  4. package/dist/css/demo.rtl.min.css +3 -3
  5. package/dist/css/tabler-flags.css +2 -2
  6. package/dist/css/tabler-flags.min.css +2 -2
  7. package/dist/css/tabler-flags.rtl.css +2 -2
  8. package/dist/css/tabler-flags.rtl.min.css +2 -2
  9. package/dist/css/tabler-payments.css +2 -2
  10. package/dist/css/tabler-payments.min.css +2 -2
  11. package/dist/css/tabler-payments.rtl.css +2 -2
  12. package/dist/css/tabler-payments.rtl.min.css +2 -2
  13. package/dist/css/tabler-vendors.css +12 -5
  14. package/dist/css/tabler-vendors.min.css +3 -3
  15. package/dist/css/tabler-vendors.rtl.css +12 -5
  16. package/dist/css/tabler-vendors.rtl.min.css +3 -3
  17. package/dist/css/tabler.css +480 -287
  18. package/dist/css/tabler.min.css +4 -4
  19. package/dist/css/tabler.rtl.css +480 -287
  20. package/dist/css/tabler.rtl.min.css +14 -0
  21. package/dist/fonts/inter-v7-latin-ext_latin-300.woff +0 -0
  22. package/dist/fonts/inter-v7-latin-ext_latin-300.woff2 +0 -0
  23. package/dist/fonts/inter-v7-latin-ext_latin-500.woff +0 -0
  24. package/dist/fonts/inter-v7-latin-ext_latin-500.woff2 +0 -0
  25. package/dist/fonts/inter-v7-latin-ext_latin-600.woff +0 -0
  26. package/dist/fonts/inter-v7-latin-ext_latin-600.woff2 +0 -0
  27. package/dist/fonts/inter-v7-latin-ext_latin-700.woff +0 -0
  28. package/dist/fonts/inter-v7-latin-ext_latin-700.woff2 +0 -0
  29. package/dist/fonts/inter-v7-latin-ext_latin-regular.woff +0 -0
  30. package/dist/fonts/inter-v7-latin-ext_latin-regular.woff2 +0 -0
  31. package/dist/js/demo.js +5 -5
  32. package/dist/js/demo.min.js +3 -3
  33. package/dist/js/tabler.esm.js +476 -233
  34. package/dist/js/tabler.esm.min.js +3 -3
  35. package/dist/js/tabler.js +476 -233
  36. package/dist/js/tabler.min.js +3 -3
  37. package/dist/libs/jsvectormap/dist/js/jsvectormap.min.js +1 -1
  38. package/dist/libs/jsvectormap/dist/maps/world.js +1 -1
  39. package/dist/libs/nouislider/dist/nouislider.min.js +1 -1
  40. package/package.json +16 -15
  41. package/src/js/demo.js +4 -5
  42. package/src/scss/_variables.scss +16 -15
  43. package/src/scss/demo/_highlight.scss +0 -1
  44. package/src/scss/demo.scss +2 -2
  45. package/src/scss/fonts/_webfonts.scss +51 -6
  46. package/src/scss/layout/_dark.scss +10 -1
  47. package/src/scss/layout/_navbar.scss +3 -1
  48. package/src/scss/mixins/_functions.scss +2 -2
  49. package/src/scss/ui/_avatars.scss +1 -5
  50. package/src/scss/ui/_badges.scss +7 -1
  51. package/src/scss/ui/_buttons.scss +46 -0
  52. package/src/scss/ui/_cards.scss +152 -60
  53. package/src/scss/ui/_dropdowns.scss +1 -0
  54. package/src/scss/ui/_forms.scss +2 -2
  55. package/src/scss/ui/_grid.scss +14 -0
  56. package/src/scss/ui/_markdown.scss +1 -0
  57. package/src/scss/ui/_nav.scss +0 -4
  58. package/src/scss/ui/_type.scss +1 -1
  59. package/src/scss/vendor/_jsvectormap.scss +7 -6
package/dist/js/tabler.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Tabler v1.0.0-beta6 (https://tabler.io)
3
- * @version 1.0.0-beta6
2
+ * Tabler v1.0.0-beta8 (https://tabler.io)
3
+ * @version 1.0.0-beta8
4
4
  * @link https://tabler.io
5
5
  * Copyright 2018-2022 The Tabler Authors
6
6
  * Copyright 2018-2022 codecalm.net Paweł Kuna
@@ -22,16 +22,11 @@
22
22
 
23
23
  function _typeof(obj) {
24
24
  "@babel/helpers - typeof";
25
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
26
- _typeof = function (obj) {
27
- return typeof obj;
28
- };
29
- } else {
30
- _typeof = function (obj) {
31
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
32
- };
33
- }
34
- return _typeof(obj);
25
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
26
+ return typeof obj;
27
+ } : function (obj) {
28
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
29
+ }, _typeof(obj);
35
30
  }
36
31
  function _classCallCheck(instance, Constructor) {
37
32
  if (!(instance instanceof Constructor)) {
@@ -50,6 +45,9 @@
50
45
  function _createClass(Constructor, protoProps, staticProps) {
51
46
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
52
47
  if (staticProps) _defineProperties(Constructor, staticProps);
48
+ Object.defineProperty(Constructor, "prototype", {
49
+ writable: false
50
+ });
53
51
  return Constructor;
54
52
  }
55
53
  function _defineProperty(obj, key, value) {
@@ -76,6 +74,9 @@
76
74
  configurable: true
77
75
  }
78
76
  });
77
+ Object.defineProperty(subClass, "prototype", {
78
+ writable: false
79
+ });
79
80
  if (superClass) _setPrototypeOf(subClass, superClass);
80
81
  }
81
82
  function _getPrototypeOf(o) {
@@ -164,7 +165,7 @@
164
165
  }
165
166
  return object;
166
167
  }
167
- function _get(target, property, receiver) {
168
+ function _get() {
168
169
  if (typeof Reflect !== "undefined" && Reflect.get) {
169
170
  _get = Reflect.get;
170
171
  } else {
@@ -173,12 +174,12 @@
173
174
  if (!base) return;
174
175
  var desc = Object.getOwnPropertyDescriptor(base, property);
175
176
  if (desc.get) {
176
- return desc.get.call(receiver);
177
+ return desc.get.call(arguments.length < 3 ? target : receiver);
177
178
  }
178
179
  return desc.value;
179
180
  };
180
181
  }
181
- return _get(target, property, receiver || target);
182
+ return _get.apply(this, arguments);
182
183
  }
183
184
  function set(target, property, value, receiver) {
184
185
  if (typeof Reflect !== "undefined" && Reflect.set) {
@@ -265,6 +266,34 @@
265
266
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
266
267
  }
267
268
 
269
+ var ChangeDetails = function () {
270
+ function ChangeDetails(details) {
271
+ _classCallCheck(this, ChangeDetails);
272
+ Object.assign(this, {
273
+ inserted: '',
274
+ rawInserted: '',
275
+ skip: false,
276
+ tailShift: 0
277
+ }, details);
278
+ }
279
+ _createClass(ChangeDetails, [{
280
+ key: "aggregate",
281
+ value: function aggregate(details) {
282
+ this.rawInserted += details.rawInserted;
283
+ this.skip = this.skip || details.skip;
284
+ this.inserted += details.inserted;
285
+ this.tailShift += details.tailShift;
286
+ return this;
287
+ }
288
+ }, {
289
+ key: "offset",
290
+ get: function get() {
291
+ return this.tailShift + this.inserted.length;
292
+ }
293
+ }]);
294
+ return ChangeDetails;
295
+ }();
296
+
268
297
  function isString(str) {
269
298
  return typeof str === 'string' || str instanceof String;
270
299
  }
@@ -288,6 +317,9 @@
288
317
  function escapeRegExp(str) {
289
318
  return str.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
290
319
  }
320
+ function normalizePrepare(prep) {
321
+ return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];
322
+ }
291
323
  function objectIncludes(b, a) {
292
324
  if (a === b) return true;
293
325
  var arrA = Array.isArray(a),
@@ -375,40 +407,13 @@
375
407
  key: "removeDirection",
376
408
  get: function get() {
377
409
  if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;
378
- return this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos ? DIRECTION.RIGHT : DIRECTION.LEFT;
410
+ return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&
411
+ this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;
379
412
  }
380
413
  }]);
381
414
  return ActionDetails;
382
415
  }();
383
416
 
384
- var ChangeDetails = function () {
385
- function ChangeDetails(details) {
386
- _classCallCheck(this, ChangeDetails);
387
- Object.assign(this, {
388
- inserted: '',
389
- rawInserted: '',
390
- skip: false,
391
- tailShift: 0
392
- }, details);
393
- }
394
- _createClass(ChangeDetails, [{
395
- key: "aggregate",
396
- value: function aggregate(details) {
397
- this.rawInserted += details.rawInserted;
398
- this.skip = this.skip || details.skip;
399
- this.inserted += details.inserted;
400
- this.tailShift += details.tailShift;
401
- return this;
402
- }
403
- }, {
404
- key: "offset",
405
- get: function get() {
406
- return this.tailShift + this.inserted.length;
407
- }
408
- }]);
409
- return ChangeDetails;
410
- }();
411
-
412
417
  var ContinuousTailDetails = function () {
413
418
  function ContinuousTailDetails() {
414
419
  var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
@@ -449,13 +454,21 @@
449
454
  Object.assign(this, state);
450
455
  }
451
456
  }, {
452
- key: "shiftBefore",
453
- value: function shiftBefore(pos) {
454
- if (this.from >= pos || !this.value.length) return '';
457
+ key: "unshift",
458
+ value: function unshift(beforePos) {
459
+ if (!this.value.length || beforePos != null && this.from >= beforePos) return '';
455
460
  var shiftChar = this.value[0];
456
461
  this.value = this.value.slice(1);
457
462
  return shiftChar;
458
463
  }
464
+ }, {
465
+ key: "shift",
466
+ value: function shift() {
467
+ if (!this.value.length) return '';
468
+ var shiftChar = this.value[this.value.length - 1];
469
+ this.value = this.value.slice(0, -1);
470
+ return shiftChar;
471
+ }
459
472
  }]);
460
473
  return ContinuousTailDetails;
461
474
  }();
@@ -553,6 +566,11 @@
553
566
  get: function get() {
554
567
  return true;
555
568
  }
569
+ }, {
570
+ key: "isFilled",
571
+ get: function get() {
572
+ return this.isComplete;
573
+ }
556
574
  }, {
557
575
  key: "nearestInputPos",
558
576
  value: function nearestInputPos(cursorPos, direction) {
@@ -594,18 +612,30 @@
594
612
  var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
595
613
  var checkTail = arguments.length > 2 ? arguments[2] : undefined;
596
614
  var consistentState = this.state;
597
- var details = this._appendCharRaw(this.doPrepare(ch, flags), flags);
615
+ var details;
616
+ var _normalizePrepare = normalizePrepare(this.doPrepare(ch, flags));
617
+ var _normalizePrepare2 = _slicedToArray(_normalizePrepare, 2);
618
+ ch = _normalizePrepare2[0];
619
+ details = _normalizePrepare2[1];
620
+ details = details.aggregate(this._appendCharRaw(ch, flags));
598
621
  if (details.inserted) {
599
622
  var consistentTail;
600
623
  var appended = this.doValidate(flags) !== false;
601
624
  if (appended && checkTail != null) {
602
625
  var beforeTailState = this.state;
603
- if (this.overwrite) {
626
+ if (this.overwrite === true) {
604
627
  consistentTail = checkTail.state;
605
- checkTail.shiftBefore(this.value.length);
628
+ checkTail.unshift(this.value.length);
606
629
  }
607
630
  var tailDetails = this.appendTail(checkTail);
608
631
  appended = tailDetails.rawInserted === checkTail.toString();
632
+ if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {
633
+ this.state = beforeTailState;
634
+ consistentTail = checkTail.state;
635
+ checkTail.shift();
636
+ tailDetails = this.appendTail(checkTail);
637
+ appended = tailDetails.rawInserted === checkTail.toString();
638
+ }
609
639
  if (appended && tailDetails.inserted) this.state = beforeTailState;
610
640
  }
611
641
  if (!appended) {
@@ -621,6 +651,11 @@
621
651
  value: function _appendPlaceholder() {
622
652
  return new ChangeDetails();
623
653
  }
654
+ }, {
655
+ key: "_appendEager",
656
+ value: function _appendEager() {
657
+ return new ChangeDetails();
658
+ }
624
659
  }, {
625
660
  key: "append",
626
661
  value: function append(str, flags, tail) {
@@ -634,6 +669,9 @@
634
669
  if (checkTail != null) {
635
670
  details.tailShift += this.appendTail(checkTail).tailShift;
636
671
  }
672
+ if (this.eager && flags !== null && flags !== void 0 && flags.input && str) {
673
+ details.aggregate(this._appendEager());
674
+ }
637
675
  return details;
638
676
  }
639
677
  }, {
@@ -701,13 +739,37 @@
701
739
  value: function splice(start, deleteCount, inserted, removeDirection) {
702
740
  var tailPos = start + deleteCount;
703
741
  var tail = this.extractTail(tailPos);
704
- var startChangePos = this.nearestInputPos(start, removeDirection);
705
- var changeDetails = new ChangeDetails({
742
+ var oldRawValue;
743
+ if (this.eager) {
744
+ removeDirection = forceDirection(removeDirection);
745
+ oldRawValue = this.extractInput(0, tailPos, {
746
+ raw: true
747
+ });
748
+ }
749
+ var startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !this.eager ? DIRECTION.NONE : removeDirection);
750
+ var details = new ChangeDetails({
706
751
  tailShift: startChangePos - start
707
- }).aggregate(this.remove(startChangePos)).aggregate(this.append(inserted, {
752
+ }).aggregate(this.remove(startChangePos));
753
+ if (this.eager && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {
754
+ if (removeDirection === DIRECTION.FORCE_LEFT) {
755
+ var valLength;
756
+ while (oldRawValue === this.rawInputValue && (valLength = this.value.length)) {
757
+ details.aggregate(new ChangeDetails({
758
+ tailShift: -1
759
+ })).aggregate(this.remove(valLength - 1));
760
+ }
761
+ } else if (removeDirection === DIRECTION.FORCE_RIGHT) {
762
+ tail.unshift();
763
+ }
764
+ }
765
+ return details.aggregate(this.append(inserted, {
708
766
  input: true
709
767
  }, tail));
710
- return changeDetails;
768
+ }
769
+ }, {
770
+ key: "maskEquals",
771
+ value: function maskEquals(mask) {
772
+ return this.mask === mask;
711
773
  }
712
774
  }]);
713
775
  return Masked;
@@ -732,8 +794,8 @@
732
794
  if (mask instanceof Number || typeof mask === 'number' || mask === Number) return IMask.MaskedNumber;
733
795
  if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;
734
796
  if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;
735
- if (mask instanceof Function) return IMask.MaskedFunction;
736
797
  if (mask instanceof IMask.Masked) return mask.constructor;
798
+ if (mask instanceof Function) return IMask.MaskedFunction;
737
799
  console.warn('Mask not found for mask', mask);
738
800
  return IMask.Masked;
739
801
  }
@@ -767,7 +829,7 @@
767
829
  _createClass(PatternInputDefinition, [{
768
830
  key: "reset",
769
831
  value: function reset() {
770
- this._isFilled = false;
832
+ this.isFilled = false;
771
833
  this.masked.reset();
772
834
  }
773
835
  }, {
@@ -776,7 +838,7 @@
776
838
  var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
777
839
  var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;
778
840
  if (fromPos === 0 && toPos >= 1) {
779
- this._isFilled = false;
841
+ this.isFilled = false;
780
842
  return this.masked.remove(fromPos, toPos);
781
843
  }
782
844
  return new ChangeDetails();
@@ -784,7 +846,7 @@
784
846
  }, {
785
847
  key: "value",
786
848
  get: function get() {
787
- return this.masked.value || (this._isFilled && !this.isOptional ? this.placeholderChar : '');
849
+ return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');
788
850
  }
789
851
  }, {
790
852
  key: "unmaskedValue",
@@ -798,11 +860,11 @@
798
860
  }
799
861
  }, {
800
862
  key: "_appendChar",
801
- value: function _appendChar(str) {
863
+ value: function _appendChar(ch) {
802
864
  var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
803
- if (this._isFilled) return new ChangeDetails();
865
+ if (this.isFilled) return new ChangeDetails();
804
866
  var state = this.masked.state;
805
- var details = this.masked._appendChar(str, flags);
867
+ var details = this.masked._appendChar(ch, flags);
806
868
  if (details.inserted && this.doValidate(flags) === false) {
807
869
  details.inserted = details.rawInserted = '';
808
870
  this.masked.state = state;
@@ -811,7 +873,7 @@
811
873
  details.inserted = this.placeholderChar;
812
874
  }
813
875
  details.skip = !details.inserted && !this.isOptional;
814
- this._isFilled = Boolean(details.inserted);
876
+ this.isFilled = Boolean(details.inserted);
815
877
  return details;
816
878
  }
817
879
  }, {
@@ -824,11 +886,16 @@
824
886
  key: "_appendPlaceholder",
825
887
  value: function _appendPlaceholder() {
826
888
  var details = new ChangeDetails();
827
- if (this._isFilled || this.isOptional) return details;
828
- this._isFilled = true;
889
+ if (this.isFilled || this.isOptional) return details;
890
+ this.isFilled = true;
829
891
  details.inserted = this.placeholderChar;
830
892
  return details;
831
893
  }
894
+ }, {
895
+ key: "_appendEager",
896
+ value: function _appendEager() {
897
+ return new ChangeDetails();
898
+ }
832
899
  }, {
833
900
  key: "extractTail",
834
901
  value: function extractTail() {
@@ -884,12 +951,12 @@
884
951
  get: function get() {
885
952
  return {
886
953
  masked: this.masked.state,
887
- _isFilled: this._isFilled
954
+ isFilled: this.isFilled
888
955
  };
889
956
  },
890
957
  set: function set(state) {
891
958
  this.masked.state = state.masked;
892
- this._isFilled = state._isFilled;
959
+ this.isFilled = state.isFilled;
893
960
  }
894
961
  }]);
895
962
  return PatternInputDefinition;
@@ -900,6 +967,7 @@
900
967
  _classCallCheck(this, PatternFixedDefinition);
901
968
  Object.assign(this, opts);
902
969
  this._value = '';
970
+ this.isFixed = true;
903
971
  }
904
972
  _createClass(PatternFixedDefinition, [{
905
973
  key: "value",
@@ -956,19 +1024,29 @@
956
1024
  get: function get() {
957
1025
  return true;
958
1026
  }
1027
+ }, {
1028
+ key: "isFilled",
1029
+ get: function get() {
1030
+ return Boolean(this._value);
1031
+ }
959
1032
  }, {
960
1033
  key: "_appendChar",
961
- value: function _appendChar(str) {
1034
+ value: function _appendChar(ch) {
962
1035
  var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
963
1036
  var details = new ChangeDetails();
964
1037
  if (this._value) return details;
965
- var appended = this.char === str[0];
966
- var isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && !flags.tail;
1038
+ var appended = this.char === ch;
1039
+ var isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && !this.eager && !flags.tail;
967
1040
  if (isResolved) details.rawInserted = this.char;
968
1041
  this._value = details.inserted = this.char;
969
1042
  this._isRawInput = isResolved && (flags.raw || flags.input);
970
1043
  return details;
971
1044
  }
1045
+ }, {
1046
+ key: "_appendEager",
1047
+ value: function _appendEager() {
1048
+ return this._appendChar(this.char);
1049
+ }
972
1050
  }, {
973
1051
  key: "_appendPlaceholder",
974
1052
  value: function _appendPlaceholder() {
@@ -992,7 +1070,7 @@
992
1070
  }, {
993
1071
  key: "append",
994
1072
  value: function append(str, flags, tail) {
995
- var details = this._appendChar(str, flags);
1073
+ var details = this._appendChar(str[0], flags);
996
1074
  if (tail != null) {
997
1075
  details.tailShift += this.appendTail(tail).tailShift;
998
1076
  }
@@ -1036,7 +1114,8 @@
1036
1114
  if (!String(tailChunk)) return;
1037
1115
  if (isString(tailChunk)) tailChunk = new ContinuousTailDetails(String(tailChunk));
1038
1116
  var lastChunk = this.chunks[this.chunks.length - 1];
1039
- var extendLast = lastChunk && (lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&
1117
+ var extendLast = lastChunk && (
1118
+ lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&
1040
1119
  tailChunk.from === lastChunk.from + lastChunk.toString().length;
1041
1120
  if (tailChunk instanceof ContinuousTailDetails) {
1042
1121
  if (extendLast) {
@@ -1072,7 +1151,8 @@
1072
1151
  var lastBlockIter = masked._mapPosToBlock(masked.value.length);
1073
1152
  var stop = chunk.stop;
1074
1153
  var chunkBlock = void 0;
1075
- if (stop != null && (!lastBlockIter || lastBlockIter.index <= stop)) {
1154
+ if (stop != null && (
1155
+ !lastBlockIter || lastBlockIter.index <= stop)) {
1076
1156
  if (chunk instanceof ChunksTailDetails ||
1077
1157
  masked._stops.indexOf(stop) >= 0) {
1078
1158
  details.aggregate(masked._appendPlaceholder(stop));
@@ -1119,14 +1199,14 @@
1119
1199
  });
1120
1200
  }
1121
1201
  }, {
1122
- key: "shiftBefore",
1123
- value: function shiftBefore(pos) {
1124
- if (this.from >= pos || !this.chunks.length) return '';
1125
- var chunkShiftPos = pos - this.from;
1202
+ key: "unshift",
1203
+ value: function unshift(beforePos) {
1204
+ if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';
1205
+ var chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;
1126
1206
  var ci = 0;
1127
1207
  while (ci < this.chunks.length) {
1128
1208
  var chunk = this.chunks[ci];
1129
- var shiftChar = chunk.shiftBefore(chunkShiftPos);
1209
+ var shiftChar = chunk.unshift(chunkShiftPos);
1130
1210
  if (chunk.toString()) {
1131
1211
  if (!shiftChar) break;
1132
1212
  ++ci;
@@ -1137,10 +1217,178 @@
1137
1217
  }
1138
1218
  return '';
1139
1219
  }
1220
+ }, {
1221
+ key: "shift",
1222
+ value: function shift() {
1223
+ if (!this.chunks.length) return '';
1224
+ var ci = this.chunks.length - 1;
1225
+ while (0 <= ci) {
1226
+ var chunk = this.chunks[ci];
1227
+ var shiftChar = chunk.shift();
1228
+ if (chunk.toString()) {
1229
+ if (!shiftChar) break;
1230
+ --ci;
1231
+ } else {
1232
+ this.chunks.splice(ci, 1);
1233
+ }
1234
+ if (shiftChar) return shiftChar;
1235
+ }
1236
+ return '';
1237
+ }
1140
1238
  }]);
1141
1239
  return ChunksTailDetails;
1142
1240
  }();
1143
1241
 
1242
+ var PatternCursor = function () {
1243
+ function PatternCursor(masked, pos) {
1244
+ _classCallCheck(this, PatternCursor);
1245
+ this.masked = masked;
1246
+ this._log = [];
1247
+ var _ref = masked._mapPosToBlock(pos) || (pos < 0 ?
1248
+ {
1249
+ index: 0,
1250
+ offset: 0
1251
+ } :
1252
+ {
1253
+ index: this.masked._blocks.length,
1254
+ offset: 0
1255
+ }),
1256
+ offset = _ref.offset,
1257
+ index = _ref.index;
1258
+ this.offset = offset;
1259
+ this.index = index;
1260
+ this.ok = false;
1261
+ }
1262
+ _createClass(PatternCursor, [{
1263
+ key: "block",
1264
+ get: function get() {
1265
+ return this.masked._blocks[this.index];
1266
+ }
1267
+ }, {
1268
+ key: "pos",
1269
+ get: function get() {
1270
+ return this.masked._blockStartPos(this.index) + this.offset;
1271
+ }
1272
+ }, {
1273
+ key: "state",
1274
+ get: function get() {
1275
+ return {
1276
+ index: this.index,
1277
+ offset: this.offset,
1278
+ ok: this.ok
1279
+ };
1280
+ },
1281
+ set: function set(s) {
1282
+ Object.assign(this, s);
1283
+ }
1284
+ }, {
1285
+ key: "pushState",
1286
+ value: function pushState() {
1287
+ this._log.push(this.state);
1288
+ }
1289
+ }, {
1290
+ key: "popState",
1291
+ value: function popState() {
1292
+ var s = this._log.pop();
1293
+ this.state = s;
1294
+ return s;
1295
+ }
1296
+ }, {
1297
+ key: "bindBlock",
1298
+ value: function bindBlock() {
1299
+ if (this.block) return;
1300
+ if (this.index < 0) {
1301
+ this.index = 0;
1302
+ this.offset = 0;
1303
+ }
1304
+ if (this.index >= this.masked._blocks.length) {
1305
+ this.index = this.masked._blocks.length - 1;
1306
+ this.offset = this.block.value.length;
1307
+ }
1308
+ }
1309
+ }, {
1310
+ key: "_pushLeft",
1311
+ value: function _pushLeft(fn) {
1312
+ this.pushState();
1313
+ for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) === null || _this$block === void 0 ? void 0 : _this$block.value.length) || 0) {
1314
+ var _this$block;
1315
+ if (fn()) return this.ok = true;
1316
+ }
1317
+ return this.ok = false;
1318
+ }
1319
+ }, {
1320
+ key: "_pushRight",
1321
+ value: function _pushRight(fn) {
1322
+ this.pushState();
1323
+ for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {
1324
+ if (fn()) return this.ok = true;
1325
+ }
1326
+ return this.ok = false;
1327
+ }
1328
+ }, {
1329
+ key: "pushLeftBeforeFilled",
1330
+ value: function pushLeftBeforeFilled() {
1331
+ var _this = this;
1332
+ return this._pushLeft(function () {
1333
+ if (_this.block.isFixed || !_this.block.value) return;
1334
+ _this.offset = _this.block.nearestInputPos(_this.offset, DIRECTION.FORCE_LEFT);
1335
+ if (_this.offset !== 0) return true;
1336
+ });
1337
+ }
1338
+ }, {
1339
+ key: "pushLeftBeforeInput",
1340
+ value: function pushLeftBeforeInput() {
1341
+ var _this2 = this;
1342
+ return this._pushLeft(function () {
1343
+ if (_this2.block.isFixed) return;
1344
+ _this2.offset = _this2.block.nearestInputPos(_this2.offset, DIRECTION.LEFT);
1345
+ return true;
1346
+ });
1347
+ }
1348
+ }, {
1349
+ key: "pushLeftBeforeRequired",
1350
+ value: function pushLeftBeforeRequired() {
1351
+ var _this3 = this;
1352
+ return this._pushLeft(function () {
1353
+ if (_this3.block.isFixed || _this3.block.isOptional && !_this3.block.value) return;
1354
+ _this3.offset = _this3.block.nearestInputPos(_this3.offset, DIRECTION.LEFT);
1355
+ return true;
1356
+ });
1357
+ }
1358
+ }, {
1359
+ key: "pushRightBeforeFilled",
1360
+ value: function pushRightBeforeFilled() {
1361
+ var _this4 = this;
1362
+ return this._pushRight(function () {
1363
+ if (_this4.block.isFixed || !_this4.block.value) return;
1364
+ _this4.offset = _this4.block.nearestInputPos(_this4.offset, DIRECTION.FORCE_RIGHT);
1365
+ if (_this4.offset !== _this4.block.value.length) return true;
1366
+ });
1367
+ }
1368
+ }, {
1369
+ key: "pushRightBeforeInput",
1370
+ value: function pushRightBeforeInput() {
1371
+ var _this5 = this;
1372
+ return this._pushRight(function () {
1373
+ if (_this5.block.isFixed) return;
1374
+ _this5.offset = _this5.block.nearestInputPos(_this5.offset, DIRECTION.NONE);
1375
+ return true;
1376
+ });
1377
+ }
1378
+ }, {
1379
+ key: "pushRightBeforeRequired",
1380
+ value: function pushRightBeforeRequired() {
1381
+ var _this6 = this;
1382
+ return this._pushRight(function () {
1383
+ if (_this6.block.isFixed || _this6.block.isOptional && !_this6.block.value) return;
1384
+ _this6.offset = _this6.block.nearestInputPos(_this6.offset, DIRECTION.NONE);
1385
+ return true;
1386
+ });
1387
+ }
1388
+ }]);
1389
+ return PatternCursor;
1390
+ }();
1391
+
1144
1392
  var MaskedRegExp = function (_Masked) {
1145
1393
  _inherits(MaskedRegExp, _Masked);
1146
1394
  var _super = _createSuper(MaskedRegExp);
@@ -1207,6 +1455,7 @@
1207
1455
  var maskedBlock = createMask(Object.assign({
1208
1456
  parent: _this,
1209
1457
  lazy: _this.lazy,
1458
+ eager: _this.eager,
1210
1459
  placeholderChar: _this.placeholderChar,
1211
1460
  overwrite: _this.overwrite
1212
1461
  }, _this.blocks[bName]));
@@ -1222,7 +1471,7 @@
1222
1471
  if (_ret === "continue") continue;
1223
1472
  }
1224
1473
  var char = pattern[i];
1225
- var _isInput = (char in defs);
1474
+ var isInput = (char in defs);
1226
1475
  if (char === MaskedPattern.STOP_CHAR) {
1227
1476
  this._stops.push(this._blocks.length);
1228
1477
  continue;
@@ -1239,16 +1488,18 @@
1239
1488
  ++i;
1240
1489
  char = pattern[i];
1241
1490
  if (!char) break;
1242
- _isInput = false;
1491
+ isInput = false;
1243
1492
  }
1244
- var def = _isInput ? new PatternInputDefinition({
1493
+ var def = isInput ? new PatternInputDefinition({
1245
1494
  parent: this,
1246
1495
  lazy: this.lazy,
1496
+ eager: this.eager,
1247
1497
  placeholderChar: this.placeholderChar,
1248
1498
  mask: defs[char],
1249
1499
  isOptional: optionalBlock
1250
1500
  }) : new PatternFixedDefinition({
1251
1501
  char: char,
1502
+ eager: this.eager,
1252
1503
  isUnmasking: unmaskingBlock
1253
1504
  });
1254
1505
  this._blocks.push(def);
@@ -1286,6 +1537,27 @@
1286
1537
  return b.isComplete;
1287
1538
  });
1288
1539
  }
1540
+ }, {
1541
+ key: "isFilled",
1542
+ get: function get() {
1543
+ return this._blocks.every(function (b) {
1544
+ return b.isFilled;
1545
+ });
1546
+ }
1547
+ }, {
1548
+ key: "isFixed",
1549
+ get: function get() {
1550
+ return this._blocks.every(function (b) {
1551
+ return b.isFixed;
1552
+ });
1553
+ }
1554
+ }, {
1555
+ key: "isOptional",
1556
+ get: function get() {
1557
+ return this._blocks.every(function (b) {
1558
+ return b.isOptional;
1559
+ });
1560
+ }
1289
1561
  }, {
1290
1562
  key: "doCommit",
1291
1563
  value: function doCommit() {
@@ -1319,6 +1591,21 @@
1319
1591
  value: function appendTail(tail) {
1320
1592
  return _get(_getPrototypeOf(MaskedPattern.prototype), "appendTail", this).call(this, tail).aggregate(this._appendPlaceholder());
1321
1593
  }
1594
+ }, {
1595
+ key: "_appendEager",
1596
+ value: function _appendEager() {
1597
+ var _this$_mapPosToBlock;
1598
+ var details = new ChangeDetails();
1599
+ var startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.value.length)) === null || _this$_mapPosToBlock === void 0 ? void 0 : _this$_mapPosToBlock.index;
1600
+ if (startBlockIndex == null) return details;
1601
+ if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;
1602
+ for (var bi = startBlockIndex; bi < this._blocks.length; ++bi) {
1603
+ var d = this._blocks[bi]._appendEager();
1604
+ if (!d.inserted) break;
1605
+ details.aggregate(d);
1606
+ }
1607
+ return details;
1608
+ }
1322
1609
  }, {
1323
1610
  key: "_appendCharRaw",
1324
1611
  value: function _appendCharRaw(ch) {
@@ -1327,9 +1614,12 @@
1327
1614
  var details = new ChangeDetails();
1328
1615
  if (!blockIter) return details;
1329
1616
  for (var bi = blockIter.index;; ++bi) {
1617
+ var _flags$_beforeTailSta;
1330
1618
  var _block = this._blocks[bi];
1331
1619
  if (!_block) break;
1332
- var blockDetails = _block._appendChar(ch, flags);
1620
+ var blockDetails = _block._appendChar(ch, Object.assign({}, flags, {
1621
+ _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) === null || _flags$_beforeTailSta === void 0 ? void 0 : _flags$_beforeTailSta._blocks[bi]
1622
+ }));
1333
1623
  var skip = blockDetails.skip;
1334
1624
  details.aggregate(blockDetails);
1335
1625
  if (skip || blockDetails.rawInserted) break;
@@ -1454,136 +1744,49 @@
1454
1744
  key: "nearestInputPos",
1455
1745
  value: function nearestInputPos(cursorPos) {
1456
1746
  var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;
1457
- var beginBlockData = this._mapPosToBlock(cursorPos) || {
1458
- index: 0,
1459
- offset: 0
1460
- };
1461
- var beginBlockOffset = beginBlockData.offset,
1462
- beginBlockIndex = beginBlockData.index;
1463
- var beginBlock = this._blocks[beginBlockIndex];
1464
- if (!beginBlock) return cursorPos;
1465
- var beginBlockCursorPos = beginBlockOffset;
1466
- if (beginBlockCursorPos !== 0 && beginBlockCursorPos < beginBlock.value.length) {
1467
- beginBlockCursorPos = beginBlock.nearestInputPos(beginBlockOffset, forceDirection(direction));
1468
- }
1469
- var cursorAtRight = beginBlockCursorPos === beginBlock.value.length;
1470
- var cursorAtLeft = beginBlockCursorPos === 0;
1471
- if (!cursorAtLeft && !cursorAtRight) return this._blockStartPos(beginBlockIndex) + beginBlockCursorPos;
1472
- var searchBlockIndex = cursorAtRight ? beginBlockIndex + 1 : beginBlockIndex;
1747
+ if (!this._blocks.length) return 0;
1748
+ var cursor = new PatternCursor(this, cursorPos);
1473
1749
  if (direction === DIRECTION.NONE) {
1474
- if (searchBlockIndex > 0) {
1475
- var blockIndexAtLeft = searchBlockIndex - 1;
1476
- var blockAtLeft = this._blocks[blockIndexAtLeft];
1477
- var blockInputPos = blockAtLeft.nearestInputPos(0, DIRECTION.NONE);
1478
- if (!blockAtLeft.value.length || blockInputPos !== blockAtLeft.value.length) {
1479
- return this._blockStartPos(searchBlockIndex);
1480
- }
1481
- }
1482
- var firstInputAtRight = searchBlockIndex;
1483
- for (var bi = firstInputAtRight; bi < this._blocks.length; ++bi) {
1484
- var blockAtRight = this._blocks[bi];
1485
- var _blockInputPos = blockAtRight.nearestInputPos(0, DIRECTION.NONE);
1486
- if (!blockAtRight.value.length || _blockInputPos !== blockAtRight.value.length) {
1487
- return this._blockStartPos(bi) + _blockInputPos;
1488
- }
1489
- }
1490
- for (var _bi = searchBlockIndex - 1; _bi >= 0; --_bi) {
1491
- var _block3 = this._blocks[_bi];
1492
- var _blockInputPos2 = _block3.nearestInputPos(0, DIRECTION.NONE);
1493
- if (!_block3.value.length || _blockInputPos2 !== _block3.value.length) {
1494
- return this._blockStartPos(_bi) + _block3.value.length;
1495
- }
1496
- }
1497
- return cursorPos;
1750
+ if (cursor.pushRightBeforeInput()) return cursor.pos;
1751
+ cursor.popState();
1752
+ if (cursor.pushLeftBeforeInput()) return cursor.pos;
1753
+ return this.value.length;
1498
1754
  }
1499
1755
  if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {
1500
- var firstFilledBlockIndexAtRight;
1501
- for (var _bi2 = searchBlockIndex; _bi2 < this._blocks.length; ++_bi2) {
1502
- if (this._blocks[_bi2].value) {
1503
- firstFilledBlockIndexAtRight = _bi2;
1504
- break;
1505
- }
1506
- }
1507
- if (firstFilledBlockIndexAtRight != null) {
1508
- var filledBlock = this._blocks[firstFilledBlockIndexAtRight];
1509
- var _blockInputPos3 = filledBlock.nearestInputPos(0, DIRECTION.RIGHT);
1510
- if (_blockInputPos3 === 0 && filledBlock.unmaskedValue.length) {
1511
- return this._blockStartPos(firstFilledBlockIndexAtRight) + _blockInputPos3;
1512
- }
1513
- }
1514
- var firstFilledInputBlockIndex = -1;
1515
- var firstEmptyInputBlockIndex;
1516
- for (var _bi3 = searchBlockIndex - 1; _bi3 >= 0; --_bi3) {
1517
- var _block4 = this._blocks[_bi3];
1518
- var _blockInputPos4 = _block4.nearestInputPos(_block4.value.length, DIRECTION.FORCE_LEFT);
1519
- if (!_block4.value || _blockInputPos4 !== 0) firstEmptyInputBlockIndex = _bi3;
1520
- if (_blockInputPos4 !== 0) {
1521
- if (_blockInputPos4 !== _block4.value.length) {
1522
- return this._blockStartPos(_bi3) + _blockInputPos4;
1523
- } else {
1524
- firstFilledInputBlockIndex = _bi3;
1525
- break;
1526
- }
1527
- }
1528
- }
1529
1756
  if (direction === DIRECTION.LEFT) {
1530
- for (var _bi4 = firstFilledInputBlockIndex + 1; _bi4 <= Math.min(searchBlockIndex, this._blocks.length - 1); ++_bi4) {
1531
- var _block5 = this._blocks[_bi4];
1532
- var _blockInputPos5 = _block5.nearestInputPos(0, DIRECTION.NONE);
1533
- var blockAlignedPos = this._blockStartPos(_bi4) + _blockInputPos5;
1534
- if (blockAlignedPos > cursorPos) break;
1535
- if (_blockInputPos5 !== _block5.value.length) return blockAlignedPos;
1536
- }
1537
- }
1538
- if (firstFilledInputBlockIndex >= 0) {
1539
- return this._blockStartPos(firstFilledInputBlockIndex) + this._blocks[firstFilledInputBlockIndex].value.length;
1540
- }
1541
- if (direction === DIRECTION.FORCE_LEFT || this.lazy && !this.extractInput() && !isInput(this._blocks[searchBlockIndex])) {
1542
- return 0;
1543
- }
1544
- if (firstEmptyInputBlockIndex != null) {
1545
- return this._blockStartPos(firstEmptyInputBlockIndex);
1757
+ cursor.pushRightBeforeFilled();
1758
+ if (cursor.ok && cursor.pos === cursorPos) return cursorPos;
1759
+ cursor.popState();
1546
1760
  }
1547
- for (var _bi5 = searchBlockIndex; _bi5 < this._blocks.length; ++_bi5) {
1548
- var _block6 = this._blocks[_bi5];
1549
- var _blockInputPos6 = _block6.nearestInputPos(0, DIRECTION.NONE);
1550
- if (!_block6.value.length || _blockInputPos6 !== _block6.value.length) {
1551
- return this._blockStartPos(_bi5) + _blockInputPos6;
1552
- }
1761
+ cursor.pushLeftBeforeInput();
1762
+ cursor.pushLeftBeforeRequired();
1763
+ cursor.pushLeftBeforeFilled();
1764
+ if (direction === DIRECTION.LEFT) {
1765
+ cursor.pushRightBeforeInput();
1766
+ cursor.pushRightBeforeRequired();
1767
+ if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;
1768
+ cursor.popState();
1769
+ if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;
1770
+ cursor.popState();
1553
1771
  }
1772
+ if (cursor.ok) return cursor.pos;
1773
+ if (direction === DIRECTION.FORCE_LEFT) return 0;
1774
+ cursor.popState();
1775
+ if (cursor.ok) return cursor.pos;
1776
+ cursor.popState();
1777
+ if (cursor.ok) return cursor.pos;
1554
1778
  return 0;
1555
1779
  }
1556
1780
  if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {
1557
- var firstInputBlockAlignedIndex;
1558
- var firstInputBlockAlignedPos;
1559
- for (var _bi6 = searchBlockIndex; _bi6 < this._blocks.length; ++_bi6) {
1560
- var _block7 = this._blocks[_bi6];
1561
- var _blockInputPos7 = _block7.nearestInputPos(0, DIRECTION.NONE);
1562
- if (_blockInputPos7 !== _block7.value.length) {
1563
- firstInputBlockAlignedPos = this._blockStartPos(_bi6) + _blockInputPos7;
1564
- firstInputBlockAlignedIndex = _bi6;
1565
- break;
1566
- }
1567
- }
1568
- if (firstInputBlockAlignedIndex != null && firstInputBlockAlignedPos != null) {
1569
- for (var _bi7 = firstInputBlockAlignedIndex; _bi7 < this._blocks.length; ++_bi7) {
1570
- var _block8 = this._blocks[_bi7];
1571
- var _blockInputPos8 = _block8.nearestInputPos(0, DIRECTION.FORCE_RIGHT);
1572
- if (_blockInputPos8 !== _block8.value.length) {
1573
- return this._blockStartPos(_bi7) + _blockInputPos8;
1574
- }
1575
- }
1576
- return direction === DIRECTION.FORCE_RIGHT ? this.value.length : firstInputBlockAlignedPos;
1577
- }
1578
- for (var _bi8 = Math.min(searchBlockIndex, this._blocks.length - 1); _bi8 >= 0; --_bi8) {
1579
- var _block9 = this._blocks[_bi8];
1580
- var _blockInputPos9 = _block9.nearestInputPos(_block9.value.length, DIRECTION.LEFT);
1581
- if (_blockInputPos9 !== 0) {
1582
- var alignedPos = this._blockStartPos(_bi8) + _blockInputPos9;
1583
- if (alignedPos >= cursorPos) return alignedPos;
1584
- break;
1585
- }
1586
- }
1781
+ cursor.pushRightBeforeInput();
1782
+ cursor.pushRightBeforeRequired();
1783
+ if (cursor.pushRightBeforeFilled()) return cursor.pos;
1784
+ if (direction === DIRECTION.FORCE_RIGHT) return this.value.length;
1785
+ cursor.popState();
1786
+ if (cursor.ok) return cursor.pos;
1787
+ cursor.popState();
1788
+ if (cursor.ok) return cursor.pos;
1789
+ return this.nearestInputPos(cursorPos, DIRECTION.LEFT);
1587
1790
  }
1588
1791
  return cursorPos;
1589
1792
  }
@@ -1613,11 +1816,6 @@
1613
1816
  MaskedPattern.ESCAPE_CHAR = '\\';
1614
1817
  MaskedPattern.InputDefinition = PatternInputDefinition;
1615
1818
  MaskedPattern.FixedDefinition = PatternFixedDefinition;
1616
- function isInput(block) {
1617
- if (!block) return false;
1618
- var value = block.value;
1619
- return !value || block.nearestInputPos(0, DIRECTION.NONE) !== value.length;
1620
- }
1621
1819
  IMask.MaskedPattern = MaskedPattern;
1622
1820
 
1623
1821
  var MaskedRange = function (_MaskedPattern) {
@@ -1638,7 +1836,8 @@
1638
1836
  value: function _update(opts) {
1639
1837
  opts = Object.assign({
1640
1838
  to: this.to || 0,
1641
- from: this.from || 0
1839
+ from: this.from || 0,
1840
+ maxLength: this.maxLength || 0
1642
1841
  }, opts);
1643
1842
  var maxLength = String(opts.to).length;
1644
1843
  if (opts.maxLength != null) maxLength = Math.max(maxLength, opts.maxLength);
@@ -1676,23 +1875,30 @@
1676
1875
  }
1677
1876
  }, {
1678
1877
  key: "doPrepare",
1679
- value: function doPrepare(str) {
1878
+ value: function doPrepare(ch) {
1680
1879
  var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1681
- str = _get(_getPrototypeOf(MaskedRange.prototype), "doPrepare", this).call(this, str, flags).replace(/\D/g, '');
1682
- if (!this.autofix) return str;
1880
+ var details;
1881
+ var _normalizePrepare = normalizePrepare(_get(_getPrototypeOf(MaskedRange.prototype), "doPrepare", this).call(this, ch.replace(/\D/g, ''), flags));
1882
+ var _normalizePrepare2 = _slicedToArray(_normalizePrepare, 2);
1883
+ ch = _normalizePrepare2[0];
1884
+ details = _normalizePrepare2[1];
1885
+ if (!this.autofix || !ch) return ch;
1683
1886
  var fromStr = String(this.from).padStart(this.maxLength, '0');
1684
1887
  var toStr = String(this.to).padStart(this.maxLength, '0');
1685
- var val = this.value;
1686
- var prepStr = '';
1687
- for (var ci = 0; ci < str.length; ++ci) {
1688
- var nextVal = val + prepStr + str[ci];
1689
- var _this$boundaries = this.boundaries(nextVal),
1690
- _this$boundaries2 = _slicedToArray(_this$boundaries, 2),
1691
- minstr = _this$boundaries2[0],
1692
- maxstr = _this$boundaries2[1];
1693
- if (Number(maxstr) < this.from) prepStr += fromStr[nextVal.length - 1];else if (Number(minstr) > this.to) prepStr += toStr[nextVal.length - 1];else prepStr += str[ci];
1888
+ var nextVal = this.value + ch;
1889
+ if (nextVal.length > this.maxLength) return '';
1890
+ var _this$boundaries = this.boundaries(nextVal),
1891
+ _this$boundaries2 = _slicedToArray(_this$boundaries, 2),
1892
+ minstr = _this$boundaries2[0],
1893
+ maxstr = _this$boundaries2[1];
1894
+ if (Number(maxstr) < this.from) return fromStr[nextVal.length - 1];
1895
+ if (Number(minstr) > this.to) {
1896
+ if (this.autofix === 'pad' && nextVal.length < this.maxLength) {
1897
+ return ['', details.aggregate(this.append(fromStr[nextVal.length - 1] + ch, flags))];
1898
+ }
1899
+ return toStr[nextVal.length - 1];
1694
1900
  }
1695
- return prepStr;
1901
+ return ch;
1696
1902
  }
1697
1903
  }, {
1698
1904
  key: "doValidate",
@@ -1739,10 +1945,10 @@
1739
1945
  opts.blocks.d.to = opts.max.getDate();
1740
1946
  }
1741
1947
  }
1742
- Object.assign(opts.blocks, blocks);
1948
+ Object.assign(opts.blocks, this.blocks, blocks);
1743
1949
  Object.keys(opts.blocks).forEach(function (bk) {
1744
1950
  var b = opts.blocks[bk];
1745
- if (!('autofix' in b)) b.autofix = opts.autofix;
1951
+ if (!('autofix' in b) && 'autofix' in opts) b.autofix = opts.autofix;
1746
1952
  });
1747
1953
  _get(_getPrototypeOf(MaskedDate.prototype), "_update", this).call(this, opts);
1748
1954
  }
@@ -1777,12 +1983,18 @@
1777
1983
  set: function set(value) {
1778
1984
  _set(_getPrototypeOf(MaskedDate.prototype), "typedValue", value, this, true);
1779
1985
  }
1986
+ }, {
1987
+ key: "maskEquals",
1988
+ value: function maskEquals(mask) {
1989
+ return mask === Date || _get(_getPrototypeOf(MaskedDate.prototype), "maskEquals", this).call(this, mask);
1990
+ }
1780
1991
  }]);
1781
1992
  return MaskedDate;
1782
1993
  }(MaskedPattern);
1783
1994
  MaskedDate.DEFAULTS = {
1784
1995
  pattern: 'd{.}`m{.}`Y',
1785
1996
  format: function format(date) {
1997
+ if (!date) return '';
1786
1998
  var day = String(date.getDate()).padStart(2, '0');
1787
1999
  var month = String(date.getMonth() + 1).padStart(2, '0');
1788
2000
  var year = date.getFullYear();
@@ -1884,7 +2096,8 @@
1884
2096
  _createClass(HTMLMaskElement, [{
1885
2097
  key: "rootElement",
1886
2098
  get: function get() {
1887
- return this.input.getRootNode ? this.input.getRootNode() : document;
2099
+ var _this$input$getRootNo, _this$input$getRootNo2, _this$input;
2100
+ return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) === null || _this$input$getRootNo2 === void 0 ? void 0 : _this$input$getRootNo2.call(_this$input)) !== null && _this$input$getRootNo !== void 0 ? _this$input$getRootNo : document;
1888
2101
  }
1889
2102
  }, {
1890
2103
  key: "isActive",
@@ -1968,14 +2181,24 @@
1968
2181
  function get() {
1969
2182
  var root = this.rootElement;
1970
2183
  var selection = root.getSelection && root.getSelection();
1971
- return selection && selection.anchorOffset;
2184
+ var anchorOffset = selection && selection.anchorOffset;
2185
+ var focusOffset = selection && selection.focusOffset;
2186
+ if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {
2187
+ return anchorOffset;
2188
+ }
2189
+ return focusOffset;
1972
2190
  }
1973
2191
  }, {
1974
2192
  key: "_unsafeSelectionEnd",
1975
2193
  get: function get() {
1976
2194
  var root = this.rootElement;
1977
2195
  var selection = root.getSelection && root.getSelection();
1978
- return selection && this._unsafeSelectionStart + String(selection).length;
2196
+ var anchorOffset = selection && selection.anchorOffset;
2197
+ var focusOffset = selection && selection.focusOffset;
2198
+ if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {
2199
+ return anchorOffset;
2200
+ }
2201
+ return focusOffset;
1979
2202
  }
1980
2203
  }, {
1981
2204
  key: "_unsafeSelect",
@@ -2047,7 +2270,8 @@
2047
2270
  }, {
2048
2271
  key: "maskEquals",
2049
2272
  value: function maskEquals(mask) {
2050
- return mask == null || mask === this.masked.mask || mask === Date && this.masked instanceof MaskedDate;
2273
+ var _this$masked;
2274
+ return mask == null || ((_this$masked = this.masked) === null || _this$masked === void 0 ? void 0 : _this$masked.maskEquals(mask));
2051
2275
  }
2052
2276
  }, {
2053
2277
  key: "value",
@@ -2125,7 +2349,8 @@
2125
2349
  }
2126
2350
  }, {
2127
2351
  key: "_saveSelection",
2128
- value: function _saveSelection() {
2352
+ value: function
2353
+ _saveSelection() {
2129
2354
  if (this.value !== this.el.value) {
2130
2355
  console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.');
2131
2356
  }
@@ -2198,7 +2423,7 @@
2198
2423
  }, {
2199
2424
  key: "alignCursor",
2200
2425
  value: function alignCursor() {
2201
- this.cursorPos = this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT);
2426
+ this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));
2202
2427
  }
2203
2428
  }, {
2204
2429
  key: "alignCursorFriendly",
@@ -2238,6 +2463,7 @@
2238
2463
  var offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection).offset;
2239
2464
  var removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;
2240
2465
  var cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);
2466
+ if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);
2241
2467
  this.updateControl();
2242
2468
  this.updateCursor(cursorPos);
2243
2469
  delete this._inputEvent;
@@ -2350,12 +2576,19 @@
2350
2576
  }
2351
2577
  }, {
2352
2578
  key: "doPrepare",
2353
- value: function doPrepare(str) {
2579
+ value: function doPrepare(ch) {
2354
2580
  var _get2;
2581
+ ch = ch.replace(this._mapToRadixRegExp, this.radix);
2582
+ var noSepCh = this._removeThousandsSeparators(ch);
2355
2583
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
2356
2584
  args[_key - 1] = arguments[_key];
2357
2585
  }
2358
- return (_get2 = _get(_getPrototypeOf(MaskedNumber.prototype), "doPrepare", this)).call.apply(_get2, [this, this._removeThousandsSeparators(str.replace(this._mapToRadixRegExp, this.radix))].concat(args));
2586
+ var _normalizePrepare = normalizePrepare((_get2 = _get(_getPrototypeOf(MaskedNumber.prototype), "doPrepare", this)).call.apply(_get2, [this, noSepCh].concat(args))),
2587
+ _normalizePrepare2 = _slicedToArray(_normalizePrepare, 2),
2588
+ prepCh = _normalizePrepare2[0],
2589
+ details = _normalizePrepare2[1];
2590
+ if (ch && !noSepCh) details.skip = true;
2591
+ return [prepCh, details];
2359
2592
  }
2360
2593
  }, {
2361
2594
  key: "_separatorsCount",
@@ -2477,7 +2710,9 @@
2477
2710
  var valid = regexp.test(this._removeThousandsSeparators(this.value));
2478
2711
  if (valid) {
2479
2712
  var number = this.number;
2480
- valid = valid && !isNaN(number) && (this.min == null || this.min >= 0 || this.min <= this.number) && (this.max == null || this.max <= 0 || this.number <= this.max);
2713
+ valid = valid && !isNaN(number) && (
2714
+ this.min == null || this.min >= 0 || this.min <= this.number) && (
2715
+ this.max == null || this.max <= 0 || this.number <= this.max);
2481
2716
  }
2482
2717
  return valid && _get(_getPrototypeOf(MaskedNumber.prototype), "doValidate", this).call(this, flags);
2483
2718
  }
@@ -2492,7 +2727,7 @@
2492
2727
  if (validnum !== number) this.unmaskedValue = String(validnum);
2493
2728
  var formatted = this.value;
2494
2729
  if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);
2495
- if (this.padFractionalZeros) formatted = this._padFractionalZeros(formatted);
2730
+ if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);
2496
2731
  this._value = formatted;
2497
2732
  }
2498
2733
  _get(_getPrototypeOf(MaskedNumber.prototype), "doCommit", this).call(this);
@@ -2790,6 +3025,14 @@
2790
3025
  set: function set(overwrite) {
2791
3026
  console.warn('"overwrite" option is not available in dynamic mask, use this option in siblings');
2792
3027
  }
3028
+ }, {
3029
+ key: "maskEquals",
3030
+ value: function maskEquals(mask) {
3031
+ return Array.isArray(mask) && this.compiledMasks.every(function (m, mi) {
3032
+ var _mask$mi;
3033
+ return m.maskEquals((_mask$mi = mask[mi]) === null || _mask$mi === void 0 ? void 0 : _mask$mi.mask);
3034
+ });
3035
+ }
2793
3036
  }]);
2794
3037
  return MaskedDynamic;
2795
3038
  }(Masked);