diff --git a/README.md b/README.md
index 4ff35520..56db4310 100644
--- a/README.md
+++ b/README.md
@@ -129,7 +129,7 @@ As you can see, here you simply use `` as a normal `` field
- Pass in the custom `options` prop
- Add ReactJS `onChange` event listener
-See more in documentation: [ReactJS component usage](https://github.com/nosir/cleave.js/blob/master/doc/reactjs-component-usage.md) section
+Usage for `Webpack`, `Browserify` and more in documentation: [ReactJS component usage](https://github.com/nosir/cleave.js/blob/master/doc/reactjs-component-usage.md)
## Playground
diff --git a/bower.json b/bower.json
index 749b9fde..73e152ad 100644
--- a/bower.json
+++ b/bower.json
@@ -8,7 +8,7 @@
"form",
"input"
],
- "version": "0.5.1",
+ "version": "0.5.2",
"author": {
"name": "Max Huang",
"email": "risonhuang@gmail.com",
diff --git a/dist/cleave-react.js b/dist/cleave-react.js
index 7b87b2a2..446ca324 100644
--- a/dist/cleave-react.js
+++ b/dist/cleave-react.js
@@ -1,777 +1,862 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
+
+ var React = __webpack_require__(1);
+
+ var NumeralFormatter = __webpack_require__(2);
+ var DateFormatter = __webpack_require__(4);
+ var PhoneFormatter = __webpack_require__(5);
+ var CreditCardDetector = __webpack_require__(6);
+ var Util = __webpack_require__(7);
+ var DefaultProperties = __webpack_require__(8);
+
+ var Cleave = React.createClass({
+ displayName: 'Cleave',
+
+ componentDidMount: function componentDidMount() {
+ this.init();
+ },
+
+ componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
+ var owner = this,
+ phoneRegionCode = nextProps.options.phoneRegionCode,
+ newValue = nextProps.value;
+
+ if (newValue) {
+ owner.onInput(newValue);
+ }
+
+ // update phone region code
+ if (phoneRegionCode && phoneRegionCode !== owner.properties.phoneRegionCode) {
+ owner.properties.phoneRegionCode = phoneRegionCode;
+ owner.initPhoneFormatter();
+ owner.onInput(owner.properties.result);
+ }
+ },
+
+ getInitialState: function getInitialState() {
+ var owner = this;
+ var _owner$props = owner.props;
+ var value = _owner$props.value;
+ var options = _owner$props.options;
+ var onKeyDown = _owner$props.onKeyDown;
+ var onChange = _owner$props.onChange;
+
+ var other = _objectWithoutProperties(_owner$props, ['value', 'options', 'onKeyDown', 'onChange']);
+
+ owner.registeredEvents = {
+ onChange: onChange || Util.noop,
+ onKeyDown: onKeyDown || Util.noop
+ };
+
+ options.initValue = value;
+
+ owner.properties = DefaultProperties.assign({}, options);
+
+ return {
+ other: other,
+ value: owner.properties.result
+ };
+ },
+
+ init: function init() {
+ var owner = this,
+ pps = owner.properties;
+
+ // so no need for this lib at all
+ if (!pps.numeral && !pps.phone && !pps.creditCard && !pps.date && pps.blocksLength === 0 && !pps.prefix) {
+ return;
+ }
+
+ pps.maxLength = Util.getMaxLength(pps.blocks);
+
+ owner.initPhoneFormatter();
+ owner.initDateFormatter();
+ owner.initNumeralFormatter();
+
+ owner.onInput(pps.initValue);
+ },
+
+ initNumeralFormatter: function initNumeralFormatter() {
+ var owner = this,
+ pps = owner.properties;
+
+ if (!pps.numeral) {
+ return;
+ }
+
+ pps.numeralFormatter = new NumeralFormatter(pps.numeralDecimalMark, pps.numeralDecimalScale, pps.numeralThousandsGroupStyle, pps.delimiter);
+ },
+
+ initDateFormatter: function initDateFormatter() {
+ var owner = this,
+ pps = owner.properties;
+
+ if (!pps.date) {
+ return;
+ }
+
+ pps.dateFormatter = new DateFormatter(pps.datePattern);
+ pps.blocks = pps.dateFormatter.getBlocks();
+ pps.blocksLength = pps.blocks.length;
+ pps.maxLength = Util.getMaxLength(pps.blocks);
+ },
+
+ initPhoneFormatter: function initPhoneFormatter() {
+ var owner = this,
+ pps = owner.properties;
+
+ if (!pps.phone) {
+ return;
+ }
+
+ // Cleave.AsYouTypeFormatter should be provided by
+ // external google closure lib
+ try {
+ pps.phoneFormatter = new PhoneFormatter(new window.Cleave.AsYouTypeFormatter(pps.phoneRegionCode), pps.delimiter);
+ } catch (ex) {
+ throw new Error('Please include phone-type-formatter.{country}.js lib');
+ }
+ },
+
+ onKeyDown: function onKeyDown(event) {
+ var owner = this,
+ pps = owner.properties,
+ charCode = event.which || event.keyCode;
+
+ // hit backspace when last character is delimiter
+ if (charCode === 8 && pps.result.slice(-1) === pps.delimiter) {
+ pps.backspace = true;
+ } else {
+ pps.backspace = false;
+ }
+
+ owner.registeredEvents.onKeyDown(event);
+ },
+
+ onChange: function onChange(event) {
+ var owner = this,
+ pps = owner.properties;
+
+ owner.onInput(event.target.value);
+
+ if (pps.numeral) {
+ event.target.rawValue = pps.numeralFormatter.getRawValue(pps.result);
+ } else {
+ event.target.rawValue = Util.strip(pps.result, pps.delimiterRE);
+ }
+
+ owner.registeredEvents.onChange(event);
+ },
+
+ onInput: function onInput(value) {
+ var owner = this,
+ pps = owner.properties,
+ prev = pps.result;
+
+ // case 1: delete one more character "4"
+ // 1234*| -> hit backspace -> 123|
+ // case 2: last character is not delimiter which is:
+ // 12|34* -> hit backspace -> 1|34*
+
+ if (!pps.numeral && pps.backspace && value.slice(-1) !== pps.delimiter) {
+ value = Util.headStr(value, value.length - 1);
+ }
+
+ // phone formatter
+ if (pps.phone) {
+ pps.result = pps.phoneFormatter.format(value);
+ owner.updateValueState();
+
+ return;
+ }
+
+ // numeral formatter
+ if (pps.numeral) {
+ pps.result = pps.prefix + pps.numeralFormatter.format(value);
+ owner.updateValueState();
+
+ return;
+ }
+
+ // date
+ if (pps.date) {
+ value = pps.dateFormatter.getValidatedDate(value);
+ }
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _Cleave = require('./src/Cleave.react');
-
-var _Cleave2 = _interopRequireDefault(_Cleave);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-exports.default = _Cleave2.default;
-
-},{"./src/Cleave.react":2}],2:[function(require,module,exports){
-(function (global){
-'use strict';
-
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
-
-var React = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null);
-
-var NumeralFormatter = require('./shortcuts/NumeralFormatter');
-var DateFormatter = require('./shortcuts/DateFormatter');
-var PhoneFormatter = require('./shortcuts/PhoneFormatter');
-var CreditCardDetector = require('./shortcuts/CreditCardDetector');
-var Util = require('./utils/Util');
-var DefaultProperties = require('./common/DefaultProperties');
-
-var Cleave = React.createClass({
- displayName: 'Cleave',
-
- componentDidMount: function componentDidMount() {
- this.init();
- },
-
- componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
- var owner = this,
- phoneRegionCode = nextProps.options.phoneRegionCode,
- newValue = nextProps.value;
-
- if (newValue) {
- owner.onInput(newValue);
- }
-
- // update phone region code
- if (phoneRegionCode && phoneRegionCode !== owner.properties.phoneRegionCode) {
- owner.properties.phoneRegionCode = phoneRegionCode;
- owner.initPhoneFormatter();
- owner.onInput(owner.properties.result);
- }
- },
-
- getInitialState: function getInitialState() {
- var owner = this;
- var _owner$props = owner.props;
- var value = _owner$props.value;
- var options = _owner$props.options;
- var onKeyDown = _owner$props.onKeyDown;
- var onChange = _owner$props.onChange;
-
- var other = _objectWithoutProperties(_owner$props, ['value', 'options', 'onKeyDown', 'onChange']);
-
- owner.registeredEvents = {
- onChange: onChange || Util.noop,
- onKeyDown: onKeyDown || Util.noop
- };
-
- options.initValue = value;
-
- owner.properties = DefaultProperties.assign({}, options);
-
- return {
- other: other,
- value: owner.properties.result
- };
- },
-
- init: function init() {
- var owner = this,
- pps = owner.properties;
-
- // so no need for this lib at all
- if (!pps.numeral && !pps.phone && !pps.creditCard && !pps.date && pps.blocksLength === 0 && !pps.prefix) {
- return;
- }
-
- pps.maxLength = Util.getMaxLength(pps.blocks);
-
- owner.initPhoneFormatter();
- owner.initDateFormatter();
- owner.initNumeralFormatter();
+ // strip delimiters
+ value = Util.strip(value, pps.delimiterRE);
- owner.onInput(pps.initValue);
- },
+ // strip prefix
+ value = Util.getPrefixStrippedValue(value, pps.prefixLength);
+
+ // strip non-numeric characters
+ value = pps.numericOnly ? Util.strip(value, /[^\d]/g) : value;
+
+ // convert case
+ value = pps.uppercase ? value.toUpperCase() : value;
+ value = pps.lowercase ? value.toLowerCase() : value;
+
+ // prefix
+ if (pps.prefix) {
+ value = pps.prefix + value;
+
+ // no blocks specified, no need to do formatting
+ if (pps.blocksLength === 0) {
+ pps.result = value;
+ owner.updateValueState();
+
+ return;
+ }
+ }
+
+ // update credit card props
+ if (pps.creditCard) {
+ owner.updateCreditCardPropsByValue(value);
+ }
+
+ // strip over length characters
+ value = Util.headStr(value, pps.maxLength);
- initNumeralFormatter: function initNumeralFormatter() {
- var owner = this,
- pps = owner.properties;
+ // apply blocks
+ pps.result = Util.getFormattedValue(value, pps.blocks, pps.blocksLength, pps.delimiter);
- if (!pps.numeral) {
- return;
- }
+ // nothing changed
+ // prevent update value to avoid caret position change
+ if (prev === pps.result && prev !== pps.prefix) {
+ return;
+ }
- pps.numeralFormatter = new NumeralFormatter(pps.numeralDecimalMark, pps.numeralDecimalScale, pps.numeralThousandsGroupStyle, pps.delimiter);
- },
-
- initDateFormatter: function initDateFormatter() {
- var owner = this,
- pps = owner.properties;
-
- if (!pps.date) {
- return;
- }
-
- pps.dateFormatter = new DateFormatter(pps.datePattern);
- pps.blocks = pps.dateFormatter.getBlocks();
- pps.blocksLength = pps.blocks.length;
- pps.maxLength = Util.getMaxLength(pps.blocks);
- },
-
- initPhoneFormatter: function initPhoneFormatter() {
- var owner = this,
- pps = owner.properties;
-
- if (!pps.phone) {
- return;
- }
-
- // Cleave.AsYouTypeFormatter should be provided by
- // external google closure lib
- try {
- pps.phoneFormatter = new PhoneFormatter(new window.Cleave.AsYouTypeFormatter(pps.phoneRegionCode), pps.delimiter);
- } catch (ex) {
- throw new Error('Please include phone-type-formatter.{country}.js lib');
- }
- },
-
- onKeyDown: function onKeyDown(event) {
- var owner = this,
- pps = owner.properties,
- charCode = event.which || event.keyCode;
-
- // hit backspace when last character is delimiter
- if (charCode === 8 && pps.result.slice(-1) === pps.delimiter) {
- pps.backspace = true;
- } else {
- pps.backspace = false;
- }
-
- owner.registeredEvents.onKeyDown(event);
- },
-
- onChange: function onChange(event) {
- var owner = this,
- pps = owner.properties;
-
- owner.onInput(event.target.value);
-
- if (pps.numeral) {
- event.target.rawValue = pps.numeralFormatter.getRawValue(pps.result);
- } else {
- event.target.rawValue = Util.strip(pps.result, pps.delimiterRE);
- }
-
- owner.registeredEvents.onChange(event);
- },
-
- onInput: function onInput(value) {
- var owner = this,
- pps = owner.properties,
- prev = pps.result;
-
- // case 1: delete one more character "4"
- // 1234*| -> hit backspace -> 123|
- // case 2: last character is not delimiter which is:
- // 12|34* -> hit backspace -> 1|34*
-
- if (!pps.numeral && pps.backspace && value.slice(-1) !== pps.delimiter) {
- value = Util.headStr(value, value.length - 1);
- }
-
- // phone formatter
- if (pps.phone) {
- pps.result = pps.phoneFormatter.format(value);
- owner.updateValueState();
-
- return;
- }
-
- // numeral formatter
- if (pps.numeral) {
- pps.result = pps.prefix + pps.numeralFormatter.format(value);
- owner.updateValueState();
-
- return;
- }
-
- // date
- if (pps.date) {
- value = pps.dateFormatter.getValidatedDate(value);
- }
-
- // strip delimiters
- value = Util.strip(value, pps.delimiterRE);
-
- // strip prefix
- value = Util.getPrefixStrippedValue(value, pps.prefixLength);
-
- // strip non-numeric characters
- value = pps.numericOnly ? Util.strip(value, /[^\d]/g) : value;
-
- // convert case
- value = pps.uppercase ? value.toUpperCase() : value;
- value = pps.lowercase ? value.toLowerCase() : value;
-
- // prefix
- if (pps.prefix) {
- value = pps.prefix + value;
-
- // no blocks specified, no need to do formatting
- if (pps.blocksLength === 0) {
- pps.result = value;
- owner.updateValueState();
-
- return;
- }
- }
-
- // update credit card props
- if (pps.creditCard) {
- owner.updateCreditCardPropsByValue(value);
- }
-
- // strip over length characters
- value = Util.headStr(value, pps.maxLength);
-
- // apply blocks
- pps.result = Util.getFormattedValue(value, pps.blocks, pps.blocksLength, pps.delimiter);
-
- // nothing changed
- // prevent update value to avoid caret position change
- if (prev === pps.result && prev !== pps.prefix) {
- return;
- }
-
- owner.updateValueState();
- },
+ owner.updateValueState();
+ },
- updateCreditCardPropsByValue: function updateCreditCardPropsByValue(value) {
- var owner = this,
- pps = owner.properties,
- creditCardInfo;
-
- // At least one of the first 4 characters has changed
- if (Util.headStr(pps.result, 4) === Util.headStr(value, 4)) {
- return;
- }
+ updateCreditCardPropsByValue: function updateCreditCardPropsByValue(value) {
+ var owner = this,
+ pps = owner.properties,
+ creditCardInfo;
- creditCardInfo = CreditCardDetector.getInfo(value, pps.creditCardStrictMode);
-
- pps.blocks = creditCardInfo.blocks;
- pps.blocksLength = pps.blocks.length;
- pps.maxLength = Util.getMaxLength(pps.blocks);
+ // At least one of the first 4 characters has changed
+ if (Util.headStr(pps.result, 4) === Util.headStr(value, 4)) {
+ return;
+ }
- // credit card type changed
- if (pps.creditCardType !== creditCardInfo.type) {
- pps.creditCardType = creditCardInfo.type;
-
- pps.onCreditCardTypeChanged.call(owner, pps.creditCardType);
- }
- },
+ creditCardInfo = CreditCardDetector.getInfo(value, pps.creditCardStrictMode);
- updateValueState: function updateValueState() {
- this.setState({ value: this.properties.result });
- },
+ pps.blocks = creditCardInfo.blocks;
+ pps.blocksLength = pps.blocks.length;
+ pps.maxLength = Util.getMaxLength(pps.blocks);
- render: function render() {
- var owner = this;
+ // credit card type changed
+ if (pps.creditCardType !== creditCardInfo.type) {
+ pps.creditCardType = creditCardInfo.type;
- return React.createElement('input', _extends({ type: 'text' }, owner.state.other, {
- value: owner.state.value,
- onKeyDown: owner.onKeyDown,
- onChange: owner.onChange }));
- }
-});
-
-module.exports = window.Cleave = Cleave;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-
-},{"./common/DefaultProperties":3,"./shortcuts/CreditCardDetector":4,"./shortcuts/DateFormatter":5,"./shortcuts/NumeralFormatter":6,"./shortcuts/PhoneFormatter":7,"./utils/Util":8}],3:[function(require,module,exports){
-'use strict';
-
-/**
- * Props Assignment
- *
- * Separate this, so react module can share the usage
- */
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
-var DefaultProperties = {
- // Maybe change to object-assign
- // for now just keep it as simple
- assign: function assign(target, opts) {
- target = target || {};
- opts = opts || {};
-
- // credit card
- target.creditCard = !!opts.creditCard;
- target.creditCardStrictMode = !!opts.creditCardStrictMode;
- target.creditCardType = '';
- target.onCreditCardTypeChanged = opts.onCreditCardTypeChanged || function () {};
-
- // phone
- target.phone = !!opts.phone;
- target.phoneRegionCode = opts.phoneRegionCode || 'AU';
- target.phoneFormatter = {};
-
- // date
- target.date = !!opts.date;
- target.datePattern = opts.datePattern || ['d', 'm', 'Y'];
- target.dateFormatter = {};
-
- // numeral
- target.numeral = !!opts.numeral;
- target.numeralDecimalScale = opts.numeralDecimalScale >= 0 ? opts.numeralDecimalScale : 2;
- target.numeralDecimalMark = opts.numeralDecimalMark || '.';
- target.numeralThousandsGroupStyle = opts.numeralThousandsGroupStyle || 'thousand';
-
- // others
- target.numericOnly = target.creditCard || target.date || !!opts.numericOnly;
-
- target.uppercase = !!opts.uppercase;
- target.lowercase = !!opts.lowercase;
-
- target.prefix = target.creditCard || target.phone || target.date ? '' : opts.prefix || '';
- target.prefixLength = target.prefix.length;
-
- target.initValue = opts.initValue || '';
-
- target.delimiter = opts.delimiter || opts.delimiter === '' ? opts.delimiter : opts.date ? '/' : opts.numeral ? ',' : opts.phone ? ' ' : ' ';
- target.delimiterRE = new RegExp('\\' + (target.delimiter || ' '), 'g');
-
- target.blocks = opts.blocks || [];
- target.blocksLength = target.blocks.length;
-
- target.maxLength = 0;
-
- target.backspace = false;
- target.result = '';
-
- return target;
- }
-};
-
-if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = DefaultProperties;
-}
-
-},{}],4:[function(require,module,exports){
-'use strict';
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
-var CreditCardDetector = {
- blocks: {
- uatp: [4, 5, 6],
- amex: [4, 6, 5],
- diners: [4, 6, 4],
- discover: [4, 4, 4, 4],
- mastercard: [4, 4, 4, 4],
- dankort: [4, 4, 4, 4],
- instapayment: [4, 4, 4, 4],
- jcb: [4, 4, 4, 4],
- maestro: [4, 4, 4, 4],
- visa: [4, 4, 4, 4],
- generalLoose: [4, 4, 4, 4],
- generalStrict: [4, 4, 4, 7]
- },
-
- re: {
- // starts with 1; 15 digits, not starts with 1800 (jcb card)
- uatp: /^(?!1800)1\d{0,14}/,
-
- // starts with 34/37; 15 digits
- amex: /^3[47]\d{0,13}/,
-
- // starts with 6011/65/644-649; 16 digits
- discover: /^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,
-
- // starts with 300-305/309 or 36/38/39; 14 digits
- diners: /^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,
-
- // starts with 51-55/22-27; 16 digits
- mastercard: /^(5[1-5]|2[2-7])\d{0,14}/,
-
- // starts with 5019/4175/4571; 16 digits
- dankort: /^(5019|4175|4571)\d{0,12}/,
-
- // starts with 637-639; 16 digits
- instapayment: /^63[7-9]\d{0,13}/,
-
- // starts with 2131/1800/35; 16 digits
- jcb: /^(?:2131|1800|35\d{0,2})\d{0,12}/,
-
- // starts with 50/56-58/6304/67; 16 digits
- maestro: /^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,
-
- // starts with 4; 16 digits
- visa: /^4\d{0,15}/
- },
-
- getInfo: function getInfo(value, strictMode) {
- var blocks = CreditCardDetector.blocks,
- re = CreditCardDetector.re;
-
- // In theory, visa credit card can have up to 19 digits number.
- // Set strictMode to true will remove the 16 max-length restrain,
- // however, I never found any website validate card number like
- // this, hence probably you don't need to enable this option.
- strictMode = !!strictMode;
-
- if (re.amex.test(value)) {
- return {
- type: 'amex',
- blocks: blocks.amex
- };
- } else if (re.uatp.test(value)) {
- return {
- type: 'uatp',
- blocks: blocks.uatp
- };
- } else if (re.diners.test(value)) {
- return {
- type: 'diners',
- blocks: blocks.diners
- };
- } else if (re.discover.test(value)) {
- return {
- type: 'discover',
- blocks: blocks.discover
- };
- } else if (re.mastercard.test(value)) {
- return {
- type: 'mastercard',
- blocks: blocks.mastercard
- };
- } else if (re.dankort.test(value)) {
- return {
- type: 'dankort',
- blocks: blocks.dankort
- };
- } else if (re.instapayment.test(value)) {
- return {
- type: 'instapayment',
- blocks: blocks.instapayment
- };
- } else if (re.jcb.test(value)) {
- return {
- type: 'jcb',
- blocks: blocks.jcb
- };
- } else if (re.maestro.test(value)) {
- return {
- type: 'maestro',
- blocks: blocks.maestro
- };
- } else if (re.visa.test(value)) {
- return {
- type: 'visa',
- blocks: blocks.visa
- };
- } else if (strictMode) {
- return {
- type: 'unknown',
- blocks: blocks.generalStrict
- };
- } else {
- return {
- type: 'unknown',
- blocks: blocks.generalLoose
- };
- }
- }
-};
-
-if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = CreditCardDetector;
-}
-
-},{}],5:[function(require,module,exports){
-'use strict';
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
-var DateFormatter = function DateFormatter(datePattern) {
- var owner = this;
-
- owner.blocks = [];
- owner.datePattern = datePattern;
- owner.initBlocks();
-};
-
-DateFormatter.prototype = {
- initBlocks: function initBlocks() {
- var owner = this;
- owner.datePattern.forEach(function (value) {
- if (value === 'Y') {
- owner.blocks.push(4);
- } else {
- owner.blocks.push(2);
- }
- });
- },
-
- getBlocks: function getBlocks() {
- return this.blocks;
- },
-
- getValidatedDate: function getValidatedDate(value) {
- var owner = this,
- result = '';
-
- value = value.replace(/[^\d]/g, '');
-
- owner.blocks.forEach(function (length, index) {
- if (value.length > 0) {
- var sub = value.slice(0, length),
- sub0 = sub.slice(0, 1),
- rest = value.slice(length);
-
- switch (owner.datePattern[index]) {
- case 'd':
- if (sub === '00') {
- sub = '01';
- } else if (parseInt(sub0, 10) > 3) {
- sub = '0' + sub0;
- } else if (parseInt(sub, 10) > 31) {
- sub = '31';
- }
-
- break;
-
- case 'm':
- if (sub === '00') {
- sub = '01';
- } else if (parseInt(sub0, 10) > 1) {
- sub = '0' + sub0;
- } else if (parseInt(sub, 10) > 12) {
- sub = '12';
- }
-
- break;
- }
-
- result += sub;
-
- // update remaining string
- value = rest;
- }
- });
-
- return result;
- }
-};
-
-if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = DateFormatter;
-}
-
-},{}],6:[function(require,module,exports){
-'use strict';
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
-var NumeralFormatter = function NumeralFormatter(numeralDecimalMark, numeralDecimalScale, numeralThousandsGroupStyle, delimiter) {
- var owner = this;
-
- owner.numeralDecimalMark = numeralDecimalMark || '.';
- owner.numeralDecimalScale = numeralDecimalScale >= 0 ? numeralDecimalScale : 2;
- owner.numeralThousandsGroupStyle = numeralThousandsGroupStyle || NumeralFormatter.groupStyle.thousand;
- owner.delimiter = delimiter || delimiter === '' ? delimiter : ',';
- owner.delimiterRE = delimiter ? new RegExp('\\' + delimiter, 'g') : '';
-};
+ pps.onCreditCardTypeChanged.call(owner, pps.creditCardType);
+ }
+ },
-NumeralFormatter.groupStyle = {
- thousand: 'thousand',
- lakh: 'lakh',
- wan: 'wan'
-};
+ updateValueState: function updateValueState() {
+ this.setState({ value: this.properties.result });
+ },
-NumeralFormatter.prototype = {
- getRawValue: function getRawValue(value) {
- return value.replace(this.delimiterRE, '').replace(this.numeralDecimalMark, '.');
- },
-
- format: function format(value) {
- var owner = this,
- parts,
- partInteger,
- partDecimal = '';
-
- // strip alphabet letters
- value = value.replace(/[A-Za-z]/g, '')
-
- // replace the first decimal mark with reserved placeholder
- .replace(owner.numeralDecimalMark, 'M')
-
- // strip the non numeric letters except M
- .replace(/[^\dM]/g, '')
+ render: function render() {
+ var owner = this;
- // replace mark
- .replace('M', owner.numeralDecimalMark)
+ return React.createElement('input', _extends({ type: 'text' }, owner.state.other, {
+ value: owner.state.value,
+ onKeyDown: owner.onKeyDown,
+ onChange: owner.onChange }));
+ }
+ });
- // strip leading 0
- .replace(/^(-)?0+(?=\d)/, '$1');
+ module.exports = window.Cleave = Cleave;
- partInteger = value;
+/***/ },
+/* 1 */
+/***/ function(module, exports) {
- if (value.indexOf(owner.numeralDecimalMark) >= 0) {
- parts = value.split(owner.numeralDecimalMark);
- partInteger = parts[0];
- partDecimal = owner.numeralDecimalMark + parts[1].slice(0, owner.numeralDecimalScale);
- }
+ module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
- switch (owner.numeralThousandsGroupStyle) {
- case NumeralFormatter.groupStyle.lakh:
- partInteger = partInteger.replace(/(\d)(?=(\d\d)+\d$)/g, '$1' + owner.delimiter);
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
- break;
+ /* WEBPACK VAR INJECTION */(function(module) {'use strict';
- case NumeralFormatter.groupStyle.wan:
- partInteger = partInteger.replace(/(\d)(?=(\d{4})+$)/g, '$1' + owner.delimiter);
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
- break;
+ var NumeralFormatter = function NumeralFormatter(numeralDecimalMark, numeralDecimalScale, numeralThousandsGroupStyle, delimiter) {
+ var owner = this;
- default:
- partInteger = partInteger.replace(/(\d)(?=(\d{3})+$)/g, '$1' + owner.delimiter);
- }
+ owner.numeralDecimalMark = numeralDecimalMark || '.';
+ owner.numeralDecimalScale = numeralDecimalScale >= 0 ? numeralDecimalScale : 2;
+ owner.numeralThousandsGroupStyle = numeralThousandsGroupStyle || NumeralFormatter.groupStyle.thousand;
+ owner.delimiter = delimiter || delimiter === '' ? delimiter : ',';
+ owner.delimiterRE = delimiter ? new RegExp('\\' + delimiter, 'g') : '';
+ };
- return partInteger.toString() + (owner.numeralDecimalScale > 0 ? partDecimal.toString() : '');
- }
-};
+ NumeralFormatter.groupStyle = {
+ thousand: 'thousand',
+ lakh: 'lakh',
+ wan: 'wan'
+ };
-if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = NumeralFormatter;
-}
+ NumeralFormatter.prototype = {
+ getRawValue: function getRawValue(value) {
+ return value.replace(this.delimiterRE, '').replace(this.numeralDecimalMark, '.');
+ },
-},{}],7:[function(require,module,exports){
-'use strict';
+ format: function format(value) {
+ var owner = this,
+ parts,
+ partInteger,
+ partDecimal = '';
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+ // strip alphabet letters
+ value = value.replace(/[A-Za-z]/g, '')
-var PhoneFormatter = function PhoneFormatter(formatter, delimiter) {
- var owner = this;
+ // replace the first decimal mark with reserved placeholder
+ .replace(owner.numeralDecimalMark, 'M')
- owner.delimiter = delimiter || delimiter === '' ? delimiter : ' ';
- owner.delimiterRE = delimiter ? new RegExp('\\' + delimiter, 'g') : '';
+ // strip the non numeric letters except M
+ .replace(/[^\dM]/g, '')
- owner.formatter = formatter;
-};
+ // replace mark
+ .replace('M', owner.numeralDecimalMark)
+
+ // strip leading 0
+ .replace(/^(-)?0+(?=\d)/, '$1');
+
+ partInteger = value;
+
+ if (value.indexOf(owner.numeralDecimalMark) >= 0) {
+ parts = value.split(owner.numeralDecimalMark);
+ partInteger = parts[0];
+ partDecimal = owner.numeralDecimalMark + parts[1].slice(0, owner.numeralDecimalScale);
+ }
+
+ switch (owner.numeralThousandsGroupStyle) {
+ case NumeralFormatter.groupStyle.lakh:
+ partInteger = partInteger.replace(/(\d)(?=(\d\d)+\d$)/g, '$1' + owner.delimiter);
+
+ break;
+
+ case NumeralFormatter.groupStyle.wan:
+ partInteger = partInteger.replace(/(\d)(?=(\d{4})+$)/g, '$1' + owner.delimiter);
+
+ break;
+
+ default:
+ partInteger = partInteger.replace(/(\d)(?=(\d{3})+$)/g, '$1' + owner.delimiter);
+ }
+
+ return partInteger.toString() + (owner.numeralDecimalScale > 0 ? partDecimal.toString() : '');
+ }
+ };
+
+ if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
+ module.exports = exports = NumeralFormatter;
+ }
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
+
+/***/ },
+/* 3 */
+/***/ function(module, exports) {
+
+ module.exports = function(module) {
+ if(!module.webpackPolyfill) {
+ module.deprecate = function() {};
+ module.paths = [];
+ // module.parent = undefined by default
+ module.children = [];
+ module.webpackPolyfill = 1;
+ }
+ return module;
+ }
-PhoneFormatter.prototype = {
- setFormatter: function setFormatter(formatter) {
- this.formatter = formatter;
- },
- format: function format(phoneNumber) {
- var owner = this;
+/***/ },
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(module) {'use strict';
- owner.formatter.clear();
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+ var DateFormatter = function DateFormatter(datePattern) {
+ var owner = this;
+
+ owner.blocks = [];
+ owner.datePattern = datePattern;
+ owner.initBlocks();
+ };
+
+ DateFormatter.prototype = {
+ initBlocks: function initBlocks() {
+ var owner = this;
+ owner.datePattern.forEach(function (value) {
+ if (value === 'Y') {
+ owner.blocks.push(4);
+ } else {
+ owner.blocks.push(2);
+ }
+ });
+ },
- // only keep number and +
- phoneNumber = phoneNumber.replace(/[^\d+]/g, '');
+ getBlocks: function getBlocks() {
+ return this.blocks;
+ },
- // strip delimiter
- phoneNumber = phoneNumber.replace(owner.delimiterRE, '');
+ getValidatedDate: function getValidatedDate(value) {
+ var owner = this,
+ result = '';
- var result = '',
- current,
- validated = false;
+ value = value.replace(/[^\d]/g, '');
- for (var i = 0, iMax = phoneNumber.length; i < iMax; i++) {
- current = owner.formatter.inputDigit(phoneNumber.charAt(i));
+ owner.blocks.forEach(function (length, index) {
+ if (value.length > 0) {
+ var sub = value.slice(0, length),
+ sub0 = sub.slice(0, 1),
+ rest = value.slice(length);
+
+ switch (owner.datePattern[index]) {
+ case 'd':
+ if (sub === '00') {
+ sub = '01';
+ } else if (parseInt(sub0, 10) > 3) {
+ sub = '0' + sub0;
+ } else if (parseInt(sub, 10) > 31) {
+ sub = '31';
+ }
+
+ break;
+
+ case 'm':
+ if (sub === '00') {
+ sub = '01';
+ } else if (parseInt(sub0, 10) > 1) {
+ sub = '0' + sub0;
+ } else if (parseInt(sub, 10) > 12) {
+ sub = '12';
+ }
+
+ break;
+ }
+
+ result += sub;
+
+ // update remaining string
+ value = rest;
+ }
+ });
+
+ return result;
+ }
+ };
+
+ if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
+ module.exports = exports = DateFormatter;
+ }
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(module) {'use strict';
+
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+ var PhoneFormatter = function PhoneFormatter(formatter, delimiter) {
+ var owner = this;
+
+ owner.delimiter = delimiter || delimiter === '' ? delimiter : ' ';
+ owner.delimiterRE = delimiter ? new RegExp('\\' + delimiter, 'g') : '';
+
+ owner.formatter = formatter;
+ };
+
+ PhoneFormatter.prototype = {
+ setFormatter: function setFormatter(formatter) {
+ this.formatter = formatter;
+ },
+
+ format: function format(phoneNumber) {
+ var owner = this;
+
+ owner.formatter.clear();
+
+ // only keep number and +
+ phoneNumber = phoneNumber.replace(/[^\d+]/g, '');
+
+ // strip delimiter
+ phoneNumber = phoneNumber.replace(owner.delimiterRE, '');
+
+ var result = '',
+ current,
+ validated = false;
+
+ for (var i = 0, iMax = phoneNumber.length; i < iMax; i++) {
+ current = owner.formatter.inputDigit(phoneNumber.charAt(i));
+
+ // has ()- or space inside
+ if (/[\s()-]/g.test(current)) {
+ result = current;
+
+ validated = true;
+ } else {
+ if (!validated) {
+ result = current;
+ }
+ // else: over length input
+ // it turns to invalid number again
+ }
+ }
+
+ // strip ()
+ // e.g. US: 7161234567 returns (716) 123-4567
+ result = result.replace(/[()]/g, '');
+ // replace library delimiter with user customized delimiter
+ result = result.replace(/[\s-]/g, owner.delimiter);
+
+ return result;
+ }
+ };
+
+ if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
+ module.exports = exports = PhoneFormatter;
+ }
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
+
+/***/ },
+/* 6 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(module) {'use strict';
+
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+ var CreditCardDetector = {
+ blocks: {
+ uatp: [4, 5, 6],
+ amex: [4, 6, 5],
+ diners: [4, 6, 4],
+ discover: [4, 4, 4, 4],
+ mastercard: [4, 4, 4, 4],
+ dankort: [4, 4, 4, 4],
+ instapayment: [4, 4, 4, 4],
+ jcb: [4, 4, 4, 4],
+ maestro: [4, 4, 4, 4],
+ visa: [4, 4, 4, 4],
+ generalLoose: [4, 4, 4, 4],
+ generalStrict: [4, 4, 4, 7]
+ },
+
+ re: {
+ // starts with 1; 15 digits, not starts with 1800 (jcb card)
+ uatp: /^(?!1800)1\d{0,14}/,
+
+ // starts with 34/37; 15 digits
+ amex: /^3[47]\d{0,13}/,
+
+ // starts with 6011/65/644-649; 16 digits
+ discover: /^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,
+
+ // starts with 300-305/309 or 36/38/39; 14 digits
+ diners: /^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,
+
+ // starts with 51-55/22-27; 16 digits
+ mastercard: /^(5[1-5]|2[2-7])\d{0,14}/,
+
+ // starts with 5019/4175/4571; 16 digits
+ dankort: /^(5019|4175|4571)\d{0,12}/,
+
+ // starts with 637-639; 16 digits
+ instapayment: /^63[7-9]\d{0,13}/,
+
+ // starts with 2131/1800/35; 16 digits
+ jcb: /^(?:2131|1800|35\d{0,2})\d{0,12}/,
+
+ // starts with 50/56-58/6304/67; 16 digits
+ maestro: /^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,
+
+ // starts with 4; 16 digits
+ visa: /^4\d{0,15}/
+ },
+
+ getInfo: function getInfo(value, strictMode) {
+ var blocks = CreditCardDetector.blocks,
+ re = CreditCardDetector.re;
+
+ // In theory, visa credit card can have up to 19 digits number.
+ // Set strictMode to true will remove the 16 max-length restrain,
+ // however, I never found any website validate card number like
+ // this, hence probably you don't need to enable this option.
+ strictMode = !!strictMode;
+
+ if (re.amex.test(value)) {
+ return {
+ type: 'amex',
+ blocks: blocks.amex
+ };
+ } else if (re.uatp.test(value)) {
+ return {
+ type: 'uatp',
+ blocks: blocks.uatp
+ };
+ } else if (re.diners.test(value)) {
+ return {
+ type: 'diners',
+ blocks: blocks.diners
+ };
+ } else if (re.discover.test(value)) {
+ return {
+ type: 'discover',
+ blocks: blocks.discover
+ };
+ } else if (re.mastercard.test(value)) {
+ return {
+ type: 'mastercard',
+ blocks: blocks.mastercard
+ };
+ } else if (re.dankort.test(value)) {
+ return {
+ type: 'dankort',
+ blocks: blocks.dankort
+ };
+ } else if (re.instapayment.test(value)) {
+ return {
+ type: 'instapayment',
+ blocks: blocks.instapayment
+ };
+ } else if (re.jcb.test(value)) {
+ return {
+ type: 'jcb',
+ blocks: blocks.jcb
+ };
+ } else if (re.maestro.test(value)) {
+ return {
+ type: 'maestro',
+ blocks: blocks.maestro
+ };
+ } else if (re.visa.test(value)) {
+ return {
+ type: 'visa',
+ blocks: blocks.visa
+ };
+ } else if (strictMode) {
+ return {
+ type: 'unknown',
+ blocks: blocks.generalStrict
+ };
+ } else {
+ return {
+ type: 'unknown',
+ blocks: blocks.generalLoose
+ };
+ }
+ }
+ };
+
+ if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
+ module.exports = exports = CreditCardDetector;
+ }
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(module) {'use strict';
+
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+ var Util = {
+ noop: function noop() {},
+
+ strip: function strip(value, re) {
+ return value.replace(re, '');
+ },
+
+ headStr: function headStr(str, length) {
+ return str.slice(0, length);
+ },
+
+ getMaxLength: function getMaxLength(blocks) {
+ return blocks.reduce(function (previous, current) {
+ return previous + current;
+ }, 0);
+ },
+
+ // strip value by prefix length
+ // for prefix: PRE
+ // (PRE123, 3) -> 123
+ // (PR123, 3) -> 23 this happens when user hits backspace in front of "PRE"
+ getPrefixStrippedValue: function getPrefixStrippedValue(value, prefixLength) {
+ return value.slice(prefixLength);
+ },
+
+ getFormattedValue: function getFormattedValue(value, blocks, blocksLength, delimiter) {
+ var result = '';
+
+ blocks.forEach(function (length, index) {
+ if (value.length > 0) {
+ var sub = value.slice(0, length),
+ rest = value.slice(length);
+
+ result += sub;
+
+ if (sub.length === length && index < blocksLength - 1) {
+ result += delimiter;
+ }
+
+ // update remaining string
+ value = rest;
+ }
+ });
+
+ return result;
+ }
+ };
+
+ if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
+ module.exports = exports = Util;
+ }
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
+
+/***/ },
+/* 8 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(module) {'use strict';
+
+ /**
+ * Props Assignment
+ *
+ * Separate this, so react module can share the usage
+ */
+
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+ var DefaultProperties = {
+ // Maybe change to object-assign
+ // for now just keep it as simple
+ assign: function assign(target, opts) {
+ target = target || {};
+ opts = opts || {};
+
+ // credit card
+ target.creditCard = !!opts.creditCard;
+ target.creditCardStrictMode = !!opts.creditCardStrictMode;
+ target.creditCardType = '';
+ target.onCreditCardTypeChanged = opts.onCreditCardTypeChanged || function () {};
+
+ // phone
+ target.phone = !!opts.phone;
+ target.phoneRegionCode = opts.phoneRegionCode || 'AU';
+ target.phoneFormatter = {};
- // has ()- or space inside
- if (/[\s()-]/g.test(current)) {
- result = current;
+ // date
+ target.date = !!opts.date;
+ target.datePattern = opts.datePattern || ['d', 'm', 'Y'];
+ target.dateFormatter = {};
- validated = true;
- } else {
- if (!validated) {
- result = current;
- }
- // else: over length input
- // it turns to invalid number again
- }
- }
+ // numeral
+ target.numeral = !!opts.numeral;
+ target.numeralDecimalScale = opts.numeralDecimalScale >= 0 ? opts.numeralDecimalScale : 2;
+ target.numeralDecimalMark = opts.numeralDecimalMark || '.';
+ target.numeralThousandsGroupStyle = opts.numeralThousandsGroupStyle || 'thousand';
- // strip ()
- // e.g. US: 7161234567 returns (716) 123-4567
- result = result.replace(/[()]/g, '');
- // replace library delimiter with user customized delimiter
- result = result.replace(/[\s-]/g, owner.delimiter);
+ // others
+ target.numericOnly = target.creditCard || target.date || !!opts.numericOnly;
- return result;
- }
-};
+ target.uppercase = !!opts.uppercase;
+ target.lowercase = !!opts.lowercase;
+
+ target.prefix = target.creditCard || target.phone || target.date ? '' : opts.prefix || '';
+ target.prefixLength = target.prefix.length;
+
+ target.initValue = opts.initValue || '';
-if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = PhoneFormatter;
-}
+ target.delimiter = opts.delimiter || opts.delimiter === '' ? opts.delimiter : opts.date ? '/' : opts.numeral ? ',' : opts.phone ? ' ' : ' ';
+ target.delimiterRE = new RegExp('\\' + (target.delimiter || ' '), 'g');
+
+ target.blocks = opts.blocks || [];
+ target.blocksLength = target.blocks.length;
+
+ target.maxLength = 0;
-},{}],8:[function(require,module,exports){
-'use strict';
+ target.backspace = false;
+ target.result = '';
+
+ return target;
+ }
+ };
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+ if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
+ module.exports = exports = DefaultProperties;
+ }
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
-var Util = {
- noop: function noop() {},
-
- strip: function strip(value, re) {
- return value.replace(re, '');
- },
-
- headStr: function headStr(str, length) {
- return str.slice(0, length);
- },
-
- getMaxLength: function getMaxLength(blocks) {
- return blocks.reduce(function (previous, current) {
- return previous + current;
- }, 0);
- },
-
- // strip value by prefix length
- // for prefix: PRE
- // (PRE123, 3) -> 123
- // (PR123, 3) -> 23 this happens when user hits backspace in front of "PRE"
- getPrefixStrippedValue: function getPrefixStrippedValue(value, prefixLength) {
- return value.slice(prefixLength);
- },
-
- getFormattedValue: function getFormattedValue(value, blocks, blocksLength, delimiter) {
- var result = '';
-
- blocks.forEach(function (length, index) {
- if (value.length > 0) {
- var sub = value.slice(0, length),
- rest = value.slice(length);
-
- result += sub;
-
- if (sub.length === length && index < blocksLength - 1) {
- result += delimiter;
- }
-
- // update remaining string
- value = rest;
- }
- });
-
- return result;
- }
-};
-
-if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = Util;
-}
-
-},{}]},{},[1])
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJyZWFjdC5qcyIsInNyYy9DbGVhdmUucmVhY3QuanMiLCJzcmMvY29tbW9uL0RlZmF1bHRQcm9wZXJ0aWVzLmpzIiwic3JjL3Nob3J0Y3V0cy9DcmVkaXRDYXJkRGV0ZWN0b3IuanMiLCJzcmMvc2hvcnRjdXRzL0RhdGVGb3JtYXR0ZXIuanMiLCJzcmMvc2hvcnRjdXRzL051bWVyYWxGb3JtYXR0ZXIuanMiLCJzcmMvc2hvcnRjdXRzL1Bob25lRm9ybWF0dGVyLmpzIiwic3JjL3V0aWxzL1V0aWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7QUFFQSxJQUFJLFFBQVEsUUFBUSxPQUFSLENBQVo7O0FBRUEsSUFBSSxtQkFBbUIsUUFBUSw4QkFBUixDQUF2QjtBQUNBLElBQUksZ0JBQWdCLFFBQVEsMkJBQVIsQ0FBcEI7QUFDQSxJQUFJLGlCQUFpQixRQUFRLDRCQUFSLENBQXJCO0FBQ0EsSUFBSSxxQkFBcUIsUUFBUSxnQ0FBUixDQUF6QjtBQUNBLElBQUksT0FBTyxRQUFRLGNBQVIsQ0FBWDtBQUNBLElBQUksb0JBQW9CLFFBQVEsNEJBQVIsQ0FBeEI7O0FBRUEsSUFBSSxTQUFTLE1BQU0sV0FBTixDQUFrQjtBQUFBOztBQUMzQix1QkFBbUIsNkJBQVk7QUFDM0IsYUFBSyxJQUFMO0FBQ0gsS0FIMEI7O0FBSzNCLCtCQUEyQixtQ0FBVSxTQUFWLEVBQXFCO0FBQzVDLFlBQUksUUFBUSxJQUFaO0FBQUEsWUFDSSxrQkFBa0IsVUFBVSxPQUFWLENBQWtCLGVBRHhDO0FBQUEsWUFFSSxXQUFXLFVBQVUsS0FGekI7O0FBSUEsWUFBSSxRQUFKLEVBQWM7QUFDVixrQkFBTSxPQUFOLENBQWMsUUFBZDtBQUNIOzs7QUFHRCxZQUFJLG1CQUFtQixvQkFBb0IsTUFBTSxVQUFOLENBQWlC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NUQsRUFBc0U7QUFDbEUsV0FBTyxPQUFQLEdBQWlCLFVBQVUsSUFBM0I7QUFDSCIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJpbXBvcnQgQ2xlYXZlIGZyb20gJy4vc3JjL0NsZWF2ZS5yZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IENsZWF2ZTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIE51bWVyYWxGb3JtYXR0ZXIgPSByZXF1aXJlKCcuL3Nob3J0Y3V0cy9OdW1lcmFsRm9ybWF0dGVyJyk7XG52YXIgRGF0ZUZvcm1hdHRlciA9IHJlcXVpcmUoJy4vc2hvcnRjdXRzL0RhdGVGb3JtYXR0ZXInKTtcbnZhciBQaG9uZUZvcm1hdHRlciA9IHJlcXVpcmUoJy4vc2hvcnRjdXRzL1Bob25lRm9ybWF0dGVyJyk7XG52YXIgQ3JlZGl0Q2FyZERldGVjdG9yID0gcmVxdWlyZSgnLi9zaG9ydGN1dHMvQ3JlZGl0Q2FyZERldGVjdG9yJyk7XG52YXIgVXRpbCA9IHJlcXVpcmUoJy4vdXRpbHMvVXRpbCcpO1xudmFyIERlZmF1bHRQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9jb21tb24vRGVmYXVsdFByb3BlcnRpZXMnKTtcblxudmFyIENsZWF2ZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24gKG5leHRQcm9wcykge1xuICAgICAgICB2YXIgb3duZXIgPSB0aGlzLFxuICAgICAgICAgICAgcGhvbmVSZWdpb25Db2RlID0gbmV4dFByb3BzLm9wdGlvbnMucGhvbmVSZWdpb25Db2RlLFxuICAgICAgICAgICAgbmV3VmFsdWUgPSBuZXh0UHJvcHMudmFsdWU7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBvd25lci5vbklucHV0KG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBwaG9uZSByZWdpb24gY29kZVxuICAgICAgICBpZiAocGhvbmVSZWdpb25Db2RlICYmIHBob25lUmVnaW9uQ29kZSAhPT0gb3duZXIucHJvcGVydGllcy5waG9uZVJlZ2lvbkNvZGUpIHtcbiAgICAgICAgICAgIG93bmVyLnByb3BlcnRpZXMucGhvbmVSZWdpb25Db2RlID0gcGhvbmVSZWdpb25Db2RlO1xuICAgICAgICAgICAgb3duZXIuaW5pdFBob25lRm9ybWF0dGVyKCk7XG4gICAgICAgICAgICBvd25lci5vbklucHV0KG93bmVyLnByb3BlcnRpZXMucmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG93bmVyID0gdGhpcyxcbiAgICAgICAgICAgIHsgdmFsdWUsIG9wdGlvbnMsIG9uS2V5RG93biwgb25DaGFuZ2UsIC4uLm90aGVyIH0gPSBvd25lci5wcm9wcztcblxuICAgICAgICBvd25lci5yZWdpc3RlcmVkRXZlbnRzID0ge1xuICAgICAgICAgICAgb25DaGFuZ2U6ICBvbkNoYW5nZSB8fCBVdGlsLm5vb3AsXG4gICAgICAgICAgICBvbktleURvd246IG9uS2V5RG93biB8fCBVdGlsLm5vb3BcbiAgICAgICAgfTtcblxuICAgICAgICBvcHRpb25zLmluaXRWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIG93bmVyLnByb3BlcnRpZXMgPSBEZWZhdWx0UHJvcGVydGllcy5hc3NpZ24oe30sIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvdGhlcjogb3RoZXIsXG4gICAgICAgICAgICB2YWx1ZTogb3duZXIucHJvcGVydGllcy5yZXN1bHRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3duZXIgPSB0aGlzLFxuICAgICAgICAgICAgcHBzID0gb3duZXIucHJvcGVydGllcztcblxuICAgICAgICAvLyBzbyBubyBuZWVkIGZvciB0aGlzIGxpYiBhdCBhbGxcbiAgICAgICAgaWYgKCFwcHMubnVtZXJhbCAmJiAhcHBzLnBob25lICYmICFwcHMuY3JlZGl0Q2FyZCAmJiAhcHBzLmRhdGUgJiYgKHBwcy5ibG9ja3NMZW5ndGggPT09IDAgJiYgIXBwcy5wcmVmaXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcHMubWF4TGVuZ3RoID0gVXRpbC5nZXRNYXhMZW5ndGgocHBzLmJsb2Nrcyk7XG5cbiAgICAgICAgb3duZXIuaW5pdFBob25lRm9ybWF0dGVyKCk7XG4gICAgICAgIG93bmVyLmluaXREYXRlRm9ybWF0dGVyKCk7XG4gICAgICAgIG93bmVyLmluaXROdW1lcmFsRm9ybWF0dGVyKCk7XG5cbiAgICAgICAgb3duZXIub25JbnB1dChwcHMuaW5pdFZhbHVlKTtcbiAgICB9LFxuXG4gICAgaW5pdE51bWVyYWxGb3JtYXR0ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG93bmVyID0gdGhpcyxcbiAgICAgICAgICAgIHBwcyA9IG93bmVyLnByb3BlcnRpZXM7XG5cbiAgICAgICAgaWYgKCFwcHMubnVtZXJhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHBzLm51bWVyYWxGb3JtYXR0ZXIgPSBuZXcgTnVtZXJhbEZvcm1hdHRlcihcbiAgICAgICAgICAgIHBwcy5udW1lcmFsRGVjaW1hbE1hcmssXG4gICAgICAgICAgICBwcHMubnVtZXJhbERlY2ltYWxTY2FsZSxcbiAgICAgICAgICAgIHBwcy5udW1lcmFsVGhvdXNhbmRzR3JvdXBTdHlsZSxcbiAgICAgICAgICAgIHBwcy5kZWxpbWl0ZXJcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgaW5pdERhdGVGb3JtYXR0ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG93bmVyID0gdGhpcyxcbiAgICAgICAgICAgIHBwcyA9IG93bmVyLnByb3BlcnRpZXM7XG5cbiAgICAgICAgaWYgKCFwcHMuZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHBzLmRhdGVGb3JtYXR0ZXIgPSBuZXcgRGF0ZUZvcm1hdHRlcihwcHMuZGF0ZVBhdHRlcm4pO1xuICAgICAgICBwcHMuYmxvY2tzID0gcHBzLmRhdGVGb3JtYXR0ZXIuZ2V0QmxvY2tzKCk7XG4gICAgICAgIHBwcy5ibG9ja3NMZW5ndGggPSBwcHMuYmxvY2tzLmxlbmd0aDtcbiAgICAgICAgcHBzLm1heExlbmd0aCA9IFV0aWwuZ2V0TWF4TGVuZ3RoKHBwcy5ibG9ja3MpO1xuICAgIH0sXG5cbiAgICBpbml0UGhvbmVGb3JtYXR0ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG93bmVyID0gdGhpcyxcbiAgICAgICAgICAgIHBwcyA9IG93bmVyLnByb3BlcnRpZXM7XG5cbiAgICAgICAgaWYgKCFwcHMucGhvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWF2ZS5Bc1lvdVR5cGVGb3JtYXR0ZXIgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5XG4gICAgICAgIC8vIGV4dGVybmFsIGdvb2dsZSBjbG9zdXJlIGxpYlxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHBzLnBob25lRm9ybWF0dGVyID0gbmV3IFBob25lRm9ybWF0dGVyKFxuICAgICAgICAgICAgICAgIG5ldyB3aW5kb3cuQ2xlYXZlLkFzWW91VHlwZUZvcm1hdHRlcihwcHMucGhvbmVSZWdpb25Db2RlKSxcbiAgICAgICAgICAgICAgICBwcHMuZGVsaW1pdGVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgaW5jbHVkZSBwaG9uZS10eXBlLWZvcm1hdHRlci57Y291bnRyeX0uanMgbGliJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgb25LZXlEb3duOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIG93bmVyID0gdGhpcyxcbiAgICAgICAgICAgIHBwcyA9IG93bmVyLnByb3BlcnRpZXMsXG4gICAgICAgICAgICBjaGFyQ29kZSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGU7XG5cbiAgICAgICAgLy8gaGl0IGJhY2tzcGFjZSB3aGVuIGxhc3QgY2hhcmFjdGVyIGlzIGRlbGltaXRlclxuICAgICAgICBpZiAoY2hhckNvZGUgPT09IDggJiYgcHBzLnJlc3VsdC5zbGljZSgtMSkgPT09IHBwcy5kZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgIHBwcy5iYWNrc3BhY2UgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHBzLmJhY2tzcGFjZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3duZXIucmVnaXN0ZXJlZEV2ZW50cy5vbktleURvd24oZXZlbnQpO1xuICAgIH0sXG5cbiAgICBvbkNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBvd25lciA9IHRoaXMsIHBwcyA9IG93bmVyLnByb3BlcnRpZXM7XG5cbiAgICAgICAgb3duZXIub25JbnB1dChldmVudC50YXJnZXQudmFsdWUpO1xuXG4gICAgICAgIGlmIChwcHMubnVtZXJhbCkge1xuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnJhd1ZhbHVlID0gcHBzLm51bWVyYWxGb3JtYXR0ZXIuZ2V0UmF3VmFsdWUocHBzLnJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQucmF3VmFsdWUgPSBVdGlsLnN0cmlwKHBwcy5yZXN1bHQsIHBwcy5kZWxpbWl0ZXJSRSk7XG4gICAgICAgIH1cblxuICAgICAgICBvd25lci5yZWdpc3RlcmVkRXZlbnRzLm9uQ2hhbmdlKGV2ZW50KTtcbiAgICB9LFxuXG4gICAgb25JbnB1dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBvd25lciA9IHRoaXMsIHBwcyA9IG93bmVyLnByb3BlcnRpZXMsXG4gICAgICAgICAgICBwcmV2ID0gcHBzLnJlc3VsdDtcblxuICAgICAgICAvLyBjYXNlIDE6IGRlbGV0ZSBvbmUgbW9yZSBjaGFyYWN0ZXIgXCI0XCJcbiAgICAgICAgLy8gMTIzNCp8IC0+IGhpdCBiYWNrc3BhY2UgLT4gMTIzfFxuICAgICAgICAvLyBjYXNlIDI6IGxhc3QgY2hhcmFjdGVyIGlzIG5vdCBkZWxpbWl0ZXIgd2hpY2ggaXM6XG4gICAgICAgIC8vIDEyfDM0KiAtPiBoaXQgYmFja3NwYWNlIC0+IDF8MzQqXG5cbiAgICAgICAgaWYgKCFwcHMubnVtZXJhbCAmJiBwcHMuYmFja3NwYWNlICYmIHZhbHVlLnNsaWNlKC0xKSAhPT0gcHBzLmRlbGltaXRlcikge1xuICAgICAgICAgICAgdmFsdWUgPSBVdGlsLmhlYWRTdHIodmFsdWUsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGhvbmUgZm9ybWF0dGVyXG4gICAgICAgIGlmIChwcHMucGhvbmUpIHtcbiAgICAgICAgICAgIHBwcy5yZXN1bHQgPSBwcHMucGhvbmVGb3JtYXR0ZXIuZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICAgIG93bmVyLnVwZGF0ZVZhbHVlU3RhdGUoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbnVtZXJhbCBmb3JtYXR0ZXJcbiAgICAgICAgaWYgKHBwcy5udW1lcmFsKSB7XG4gICAgICAgICAgICBwcHMucmVzdWx0ID0gcHBzLnByZWZpeCArIHBwcy5udW1lcmFsRm9ybWF0dGVyLmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgICBvd25lci51cGRhdGVWYWx1ZVN0YXRlKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRhdGVcbiAgICAgICAgaWYgKHBwcy5kYXRlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHBwcy5kYXRlRm9ybWF0dGVyLmdldFZhbGlkYXRlZERhdGUodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RyaXAgZGVsaW1pdGVyc1xuICAgICAgICB2YWx1ZSA9IFV0aWwuc3RyaXAodmFsdWUsIHBwcy5kZWxpbWl0ZXJSRSk7XG5cbiAgICAgICAgLy8gc3RyaXAgcHJlZml4XG4gICAgICAgIHZhbHVlID0gVXRpbC5nZXRQcmVmaXhTdHJpcHBlZFZhbHVlKHZhbHVlLCBwcHMucHJlZml4TGVuZ3RoKTtcblxuICAgICAgICAvLyBzdHJpcCBub24tbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIHZhbHVlID0gcHBzLm51bWVyaWNPbmx5ID8gVXRpbC5zdHJpcCh2YWx1ZSwgL1teXFxkXS9nKSA6IHZhbHVlO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgY2FzZVxuICAgICAgICB2YWx1ZSA9IHBwcy51cHBlcmNhc2UgPyB2YWx1ZS50b1VwcGVyQ2FzZSgpIDogdmFsdWU7XG4gICAgICAgIHZhbHVlID0gcHBzLmxvd2VyY2FzZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcblxuICAgICAgICAvLyBwcmVmaXhcbiAgICAgICAgaWYgKHBwcy5wcmVmaXgpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcHBzLnByZWZpeCArIHZhbHVlO1xuXG4gICAgICAgICAgICAvLyBubyBibG9ja3Mgc3BlY2lmaWVkLCBubyBuZWVkIHRvIGRvIGZvcm1hdHRpbmdcbiAgICAgICAgICAgIGlmIChwcHMuYmxvY2tzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcHBzLnJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIG93bmVyLnVwZGF0ZVZhbHVlU3RhdGUoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBjcmVkaXQgY2FyZCBwcm9wc1xuICAgICAgICBpZiAocHBzLmNyZWRpdENhcmQpIHtcbiAgICAgICAgICAgIG93bmVyLnVwZGF0ZUNyZWRpdENhcmRQcm9wc0J5VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RyaXAgb3ZlciBsZW5ndGggY2hhcmFjdGVyc1xuICAgICAgICB2YWx1ZSA9IFV0aWwuaGVhZFN0cih2YWx1ZSwgcHBzLm1heExlbmd0aCk7XG5cbiAgICAgICAgLy8gYXBwbHkgYmxvY2tzXG4gICAgICAgIHBwcy5yZXN1bHQgPSBVdGlsLmdldEZvcm1hdHRlZFZhbHVlKHZhbHVlLCBwcHMuYmxvY2tzLCBwcHMuYmxvY2tzTGVuZ3RoLCBwcHMuZGVsaW1pdGVyKTtcblxuICAgICAgICAvLyBub3RoaW5nIGNoYW5nZWRcbiAgICAgICAgLy8gcHJldmVudCB1cGRhdGUgdmFsdWUgdG8gYXZvaWQgY2FyZXQgcG9zaXRpb24gY2hhbmdlXG4gICAgICAgIGlmIChwcmV2ID09PSBwcHMucmVzdWx0ICYmIHByZXYgIT09IHBwcy5wcmVmaXgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG93bmVyLnVwZGF0ZVZhbHVlU3RhdGUoKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlQ3JlZGl0Q2FyZFByb3BzQnlWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBvd25lciA9IHRoaXMsIHBwcyA9IG93bmVyLnByb3BlcnRpZXMsXG4gICAgICAgICAgICBjcmVkaXRDYXJkSW5mbztcblxuICAgICAgICAvLyBBdCBsZWFzdCBvbmUgb2YgdGhlIGZpcnN0IDQgY2hhcmFjdGVycyBoYXMgY2hhbmdlZFxuICAgICAgICBpZiAoVXRpbC5oZWFkU3RyKHBwcy5yZXN1bHQsIDQpID09PSBVdGlsLmhlYWRTdHIodmFsdWUsIDQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjcmVkaXRDYXJkSW5mbyA9IENyZWRpdENhcmREZXRlY3Rvci5nZXRJbmZvKHZhbHVlLCBwcHMuY3JlZGl0Q2FyZFN0cmljdE1vZGUpO1xuXG4gICAgICAgIHBwcy5ibG9ja3MgPSBjcmVkaXRDYXJkSW5mby5ibG9ja3M7XG4gICAgICAgIHBwcy5ibG9ja3NMZW5ndGggPSBwcHMuYmxvY2tzLmxlbmd0aDtcbiAgICAgICAgcHBzLm1heExlbmd0aCA9IFV0aWwuZ2V0TWF4TGVuZ3RoKHBwcy5ibG9ja3MpO1xuXG4gICAgICAgIC8vIGNyZWRpdCBjYXJkIHR5cGUgY2hhbmdlZFxuICAgICAgICBpZiAocHBzLmNyZWRpdENhcmRUeXBlICE9PSBjcmVkaXRDYXJkSW5mby50eXBlKSB7XG4gICAgICAgICAgICBwcHMuY3JlZGl0Q2FyZFR5cGUgPSBjcmVkaXRDYXJkSW5mby50eXBlO1xuXG4gICAgICAgICAgICBwcHMub25DcmVkaXRDYXJkVHlwZUNoYW5nZWQuY2FsbChvd25lciwgcHBzLmNyZWRpdENhcmRUeXBlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVWYWx1ZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB0aGlzLnByb3BlcnRpZXMucmVzdWx0fSk7XG4gICAgfSxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3duZXIgPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiB7Li4ub3duZXIuc3RhdGUub3RoZXJ9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e293bmVyLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17b3duZXIub25LZXlEb3dufVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvd25lci5vbkNoYW5nZX0vPlxuICAgICAgICApO1xuICAgIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5DbGVhdmUgPSBDbGVhdmU7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUHJvcHMgQXNzaWdubWVudFxuICpcbiAqIFNlcGFyYXRlIHRoaXMsIHNvIHJlYWN0IG1vZHVsZSBjYW4gc2hhcmUgdGhlIHVzYWdlXG4gKi9cbnZhciBEZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICAvLyBNYXliZSBjaGFuZ2UgdG8gb2JqZWN0LWFzc2lnblxuICAgIC8vIGZvciBub3cganVzdCBrZWVwIGl0IGFzIHNpbXBsZVxuICAgIGFzc2lnbjogZnVuY3Rpb24gKHRhcmdldCwgb3B0cykge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQgfHwge307XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIC8vIGNyZWRpdCBjYXJkXG4gICAgICAgIHRhcmdldC5jcmVkaXRDYXJkID0gISFvcHRzLmNyZWRpdENhcmQ7XG4gICAgICAgIHRhcmdldC5jcmVkaXRDYXJkU3RyaWN0TW9kZSA9ICEhb3B0cy5jcmVkaXRDYXJkU3RyaWN0TW9kZTtcbiAgICAgICAgdGFyZ2V0LmNyZWRpdENhcmRUeXBlID0gJyc7XG4gICAgICAgIHRhcmdldC5vbkNyZWRpdENhcmRUeXBlQ2hhbmdlZCA9IG9wdHMub25DcmVkaXRDYXJkVHlwZUNoYW5nZWQgfHwgKGZ1bmN0aW9uICgpIHt9KTtcblxuICAgICAgICAvLyBwaG9uZVxuICAgICAgICB0YXJnZXQucGhvbmUgPSAhIW9wdHMucGhvbmU7XG4gICAgICAgIHRhcmdldC5waG9uZVJlZ2lvbkNvZGUgPSBvcHRzLnBob25lUmVnaW9uQ29kZSB8fCAnQVUnO1xuICAgICAgICB0YXJnZXQucGhvbmVGb3JtYXR0ZXIgPSB7fTtcblxuICAgICAgICAvLyBkYXRlXG4gICAgICAgIHRhcmdldC5kYXRlID0gISFvcHRzLmRhdGU7XG4gICAgICAgIHRhcmdldC5kYXRlUGF0dGVybiA9IG9wdHMuZGF0ZVBhdHRlcm4gfHwgWydkJywgJ20nLCAnWSddO1xuICAgICAgICB0YXJnZXQuZGF0ZUZvcm1hdHRlciA9IHt9O1xuXG4gICAgICAgIC8vIG51bWVyYWxcbiAgICAgICAgdGFyZ2V0Lm51bWVyYWwgPSAhIW9wdHMubnVtZXJhbDtcbiAgICAgICAgdGFyZ2V0Lm51bWVyYWxEZWNpbWFsU2NhbGUgPSBvcHRzLm51bWVyYWxEZWNpbWFsU2NhbGUgPj0gMCA/IG9wdHMubnVtZXJhbERlY2ltYWxTY2FsZSA6IDI7XG4gICAgICAgIHRhcmdldC5udW1lcmFsRGVjaW1hbE1hcmsgPSBvcHRzLm51bWVyYWxEZWNpbWFsTWFyayB8fCAnLic7XG4gICAgICAgIHRhcmdldC5udW1lcmFsVGhvdXNhbmRzR3JvdXBTdHlsZSA9IG9wdHMubnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGUgfHwgJ3Rob3VzYW5kJztcblxuICAgICAgICAvLyBvdGhlcnNcbiAgICAgICAgdGFyZ2V0Lm51bWVyaWNPbmx5ID0gdGFyZ2V0LmNyZWRpdENhcmQgfHwgdGFyZ2V0LmRhdGUgfHwgISFvcHRzLm51bWVyaWNPbmx5O1xuXG4gICAgICAgIHRhcmdldC51cHBlcmNhc2UgPSAhIW9wdHMudXBwZXJjYXNlO1xuICAgICAgICB0YXJnZXQubG93ZXJjYXNlID0gISFvcHRzLmxvd2VyY2FzZTtcblxuICAgICAgICB0YXJnZXQucHJlZml4ID0gKHRhcmdldC5jcmVkaXRDYXJkIHx8IHRhcmdldC5waG9uZSB8fCB0YXJnZXQuZGF0ZSkgPyAnJyA6IChvcHRzLnByZWZpeCB8fCAnJyk7XG4gICAgICAgIHRhcmdldC5wcmVmaXhMZW5ndGggPSB0YXJnZXQucHJlZml4Lmxlbmd0aDtcblxuICAgICAgICB0YXJnZXQuaW5pdFZhbHVlID0gb3B0cy5pbml0VmFsdWUgfHwgJyc7XG5cbiAgICAgICAgdGFyZ2V0LmRlbGltaXRlciA9XG4gICAgICAgICAgICAob3B0cy5kZWxpbWl0ZXIgfHwgb3B0cy5kZWxpbWl0ZXIgPT09ICcnKSA/IG9wdHMuZGVsaW1pdGVyIDpcbiAgICAgICAgICAgICAgICAob3B0cy5kYXRlID8gJy8nIDpcbiAgICAgICAgICAgICAgICAgICAgKG9wdHMubnVtZXJhbCA/ICcsJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5waG9uZSA/ICcgJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnKSkpO1xuICAgICAgICB0YXJnZXQuZGVsaW1pdGVyUkUgPSBuZXcgUmVnRXhwKCdcXFxcJyArICh0YXJnZXQuZGVsaW1pdGVyIHx8ICcgJyksICdnJyk7XG5cbiAgICAgICAgdGFyZ2V0LmJsb2NrcyA9IG9wdHMuYmxvY2tzIHx8IFtdO1xuICAgICAgICB0YXJnZXQuYmxvY2tzTGVuZ3RoID0gdGFyZ2V0LmJsb2Nrcy5sZW5ndGg7XG5cbiAgICAgICAgdGFyZ2V0Lm1heExlbmd0aCA9IDA7XG5cbiAgICAgICAgdGFyZ2V0LmJhY2tzcGFjZSA9IGZhbHNlO1xuICAgICAgICB0YXJnZXQucmVzdWx0ID0gJyc7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG59O1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IERlZmF1bHRQcm9wZXJ0aWVzO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ3JlZGl0Q2FyZERldGVjdG9yID0ge1xuICAgIGJsb2Nrczoge1xuICAgICAgICB1YXRwOiAgICAgICAgICBbNCwgNSwgNl0sXG4gICAgICAgIGFtZXg6ICAgICAgICAgIFs0LCA2LCA1XSxcbiAgICAgICAgZGluZXJzOiAgICAgICAgWzQsIDYsIDRdLFxuICAgICAgICBkaXNjb3ZlcjogICAgICBbNCwgNCwgNCwgNF0sXG4gICAgICAgIG1hc3RlcmNhcmQ6ICAgIFs0LCA0LCA0LCA0XSxcbiAgICAgICAgZGFua29ydDogICAgICAgWzQsIDQsIDQsIDRdLFxuICAgICAgICBpbnN0YXBheW1lbnQ6ICBbNCwgNCwgNCwgNF0sXG4gICAgICAgIGpjYjogICAgICAgICAgIFs0LCA0LCA0LCA0XSxcbiAgICAgICAgbWFlc3RybzogICAgICAgWzQsIDQsIDQsIDRdLFxuICAgICAgICB2aXNhOiAgICAgICAgICBbNCwgNCwgNCwgNF0sXG4gICAgICAgIGdlbmVyYWxMb29zZTogIFs0LCA0LCA0LCA0XSxcbiAgICAgICAgZ2VuZXJhbFN0cmljdDogWzQsIDQsIDQsIDddXG4gICAgfSxcblxuICAgIHJlOiB7XG4gICAgICAgIC8vIHN0YXJ0cyB3aXRoIDE7IDE1IGRpZ2l0cywgbm90IHN0YXJ0cyB3aXRoIDE4MDAgKGpjYiBjYXJkKVxuICAgICAgICB1YXRwOiAvXig/ITE4MDApMVxcZHswLDE0fS8sXG5cbiAgICAgICAgLy8gc3RhcnRzIHdpdGggMzQvMzc7IDE1IGRpZ2l0c1xuICAgICAgICBhbWV4OiAvXjNbNDddXFxkezAsMTN9LyxcblxuICAgICAgICAvLyBzdGFydHMgd2l0aCA2MDExLzY1LzY0NC02NDk7IDE2IGRpZ2l0c1xuICAgICAgICBkaXNjb3ZlcjogL14oPzo2MDExfDY1XFxkezAsMn18NjRbNC05XVxcZD8pXFxkezAsMTJ9LyxcblxuICAgICAgICAvLyBzdGFydHMgd2l0aCAzMDAtMzA1LzMwOSBvciAzNi8zOC8zOTsgMTQgZGlnaXRzXG4gICAgICAgIGRpbmVyczogL14zKD86MChbMC01XXw5KXxbNjg5XVxcZD8pXFxkezAsMTF9LyxcblxuICAgICAgICAvLyBzdGFydHMgd2l0aCA1MS01NS8yMi0yNzsgMTYgZGlnaXRzXG4gICAgICAgIG1hc3RlcmNhcmQ6IC9eKDVbMS01XXwyWzItN10pXFxkezAsMTR9LyxcblxuICAgICAgICAvLyBzdGFydHMgd2l0aCA1MDE5LzQxNzUvNDU3MTsgMTYgZGlnaXRzXG4gICAgICAgIGRhbmtvcnQ6IC9eKDUwMTl8NDE3NXw0NTcxKVxcZHswLDEyfS8sXG5cbiAgICAgICAgLy8gc3RhcnRzIHdpdGggNjM3LTYzOTsgMTYgZGlnaXRzXG4gICAgICAgIGluc3RhcGF5bWVudDogL142M1s3LTldXFxkezAsMTN9LyxcblxuICAgICAgICAvLyBzdGFydHMgd2l0aCAyMTMxLzE4MDAvMzU7IDE2IGRpZ2l0c1xuICAgICAgICBqY2I6IC9eKD86MjEzMXwxODAwfDM1XFxkezAsMn0pXFxkezAsMTJ9LyxcblxuICAgICAgICAvLyBzdGFydHMgd2l0aCA1MC81Ni01OC82MzA0LzY3OyAxNiBkaWdpdHNcbiAgICAgICAgbWFlc3RybzogL14oPzo1WzA2NzhdXFxkezAsMn18NjMwNHw2N1xcZHswLDJ9KVxcZHswLDEyfS8sXG5cbiAgICAgICAgLy8gc3RhcnRzIHdpdGggNDsgMTYgZGlnaXRzXG4gICAgICAgIHZpc2E6IC9eNFxcZHswLDE1fS9cbiAgICB9LFxuXG4gICAgZ2V0SW5mbzogZnVuY3Rpb24gKHZhbHVlLCBzdHJpY3RNb2RlKSB7XG4gICAgICAgIHZhciBibG9ja3MgPSBDcmVkaXRDYXJkRGV0ZWN0b3IuYmxvY2tzLFxuICAgICAgICAgICAgcmUgPSBDcmVkaXRDYXJkRGV0ZWN0b3IucmU7XG5cbiAgICAgICAgLy8gSW4gdGhlb3J5LCB2aXNhIGNyZWRpdCBjYXJkIGNhbiBoYXZlIHVwIHRvIDE5IGRpZ2l0cyBudW1iZXIuXG4gICAgICAgIC8vIFNldCBzdHJpY3RNb2RlIHRvIHRydWUgd2lsbCByZW1vdmUgdGhlIDE2IG1heC1sZW5ndGggcmVzdHJhaW4sXG4gICAgICAgIC8vIGhvd2V2ZXIsIEkgbmV2ZXIgZm91bmQgYW55IHdlYnNpdGUgdmFsaWRhdGUgY2FyZCBudW1iZXIgbGlrZVxuICAgICAgICAvLyB0aGlzLCBoZW5jZSBwcm9iYWJseSB5b3UgZG9uJ3QgbmVlZCB0byBlbmFibGUgdGhpcyBvcHRpb24uXG4gICAgICAgIHN0cmljdE1vZGUgPSAhIXN0cmljdE1vZGU7XG5cbiAgICAgICAgaWYgKHJlLmFtZXgudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogICAnYW1leCcsXG4gICAgICAgICAgICAgICAgYmxvY2tzOiBibG9ja3MuYW1leFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChyZS51YXRwLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICAgJ3VhdHAnLFxuICAgICAgICAgICAgICAgIGJsb2NrczogYmxvY2tzLnVhdHBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAocmUuZGluZXJzLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICAgJ2RpbmVycycsXG4gICAgICAgICAgICAgICAgYmxvY2tzOiBibG9ja3MuZGluZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHJlLmRpc2NvdmVyLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICAgJ2Rpc2NvdmVyJyxcbiAgICAgICAgICAgICAgICBibG9ja3M6IGJsb2Nrcy5kaXNjb3ZlclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChyZS5tYXN0ZXJjYXJkLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICAgJ21hc3RlcmNhcmQnLFxuICAgICAgICAgICAgICAgIGJsb2NrczogYmxvY2tzLm1hc3RlcmNhcmRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAocmUuZGFua29ydC50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAgICdkYW5rb3J0JyxcbiAgICAgICAgICAgICAgICBibG9ja3M6IGJsb2Nrcy5kYW5rb3J0XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHJlLmluc3RhcGF5bWVudC50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAgICdpbnN0YXBheW1lbnQnLFxuICAgICAgICAgICAgICAgIGJsb2NrczogYmxvY2tzLmluc3RhcGF5bWVudFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChyZS5qY2IudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogICAnamNiJyxcbiAgICAgICAgICAgICAgICBibG9ja3M6IGJsb2Nrcy5qY2JcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAocmUubWFlc3Ryby50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAgICdtYWVzdHJvJyxcbiAgICAgICAgICAgICAgICBibG9ja3M6IGJsb2Nrcy5tYWVzdHJvXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHJlLnZpc2EudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogICAndmlzYScsXG4gICAgICAgICAgICAgICAgYmxvY2tzOiBibG9ja3MudmlzYVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICAgJ3Vua25vd24nLFxuICAgICAgICAgICAgICAgIGJsb2NrczogYmxvY2tzLmdlbmVyYWxTdHJpY3RcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICAgJ3Vua25vd24nLFxuICAgICAgICAgICAgICAgIGJsb2NrczogYmxvY2tzLmdlbmVyYWxMb29zZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gQ3JlZGl0Q2FyZERldGVjdG9yO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRGF0ZUZvcm1hdHRlciA9IGZ1bmN0aW9uIChkYXRlUGF0dGVybikge1xuICAgIHZhciBvd25lciA9IHRoaXM7XG5cbiAgICBvd25lci5ibG9ja3MgPSBbXTtcbiAgICBvd25lci5kYXRlUGF0dGVybiA9IGRhdGVQYXR0ZXJuO1xuICAgIG93bmVyLmluaXRCbG9ja3MoKTtcbn07XG5cbkRhdGVGb3JtYXR0ZXIucHJvdG90eXBlID0ge1xuICAgIGluaXRCbG9ja3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG93bmVyID0gdGhpcztcbiAgICAgICAgb3duZXIuZGF0ZVBhdHRlcm4uZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ1knKSB7XG4gICAgICAgICAgICAgICAgb3duZXIuYmxvY2tzLnB1c2goNCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG93bmVyLmJsb2Nrcy5wdXNoKDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgZ2V0QmxvY2tzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2NrcztcbiAgICB9LFxuXG4gICAgZ2V0VmFsaWRhdGVkRGF0ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBvd25lciA9IHRoaXMsIHJlc3VsdCA9ICcnO1xuXG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXGRdL2csICcnKTtcblxuICAgICAgICBvd25lci5ibG9ja3MuZm9yRWFjaChmdW5jdGlvbiAobGVuZ3RoLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3ViID0gdmFsdWUuc2xpY2UoMCwgbGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgc3ViMCA9IHN1Yi5zbGljZSgwLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdCA9IHZhbHVlLnNsaWNlKGxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG93bmVyLmRhdGVQYXR0ZXJuW2luZGV4XSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoc3ViID09PSAnMDAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWIgPSAnMDEnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KHN1YjAsIDEwKSA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YiA9ICcwJyArIHN1YjA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoc3ViLCAxMCkgPiAzMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ViID0gJzMxJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWIgPT09ICcwMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YiA9ICcwMSc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoc3ViMCwgMTApID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ViID0gJzAnICsgc3ViMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzZUludChzdWIsIDEwKSA+IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWIgPSAnMTInO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN1YjtcblxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSByZW1haW5pbmcgc3RyaW5nXG4gICAgICAgICAgICAgICAgdmFsdWUgPSByZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn07XG5cbmlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gRGF0ZUZvcm1hdHRlcjtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIE51bWVyYWxGb3JtYXR0ZXIgPSBmdW5jdGlvbiAobnVtZXJhbERlY2ltYWxNYXJrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhbERlY2ltYWxTY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYWxUaG91c2FuZHNHcm91cFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyKSB7XG4gICAgdmFyIG93bmVyID0gdGhpcztcblxuICAgIG93bmVyLm51bWVyYWxEZWNpbWFsTWFyayA9IG51bWVyYWxEZWNpbWFsTWFyayB8fCAnLic7XG4gICAgb3duZXIubnVtZXJhbERlY2ltYWxTY2FsZSA9IG51bWVyYWxEZWNpbWFsU2NhbGUgPj0gMCA/IG51bWVyYWxEZWNpbWFsU2NhbGUgOiAyO1xuICAgIG93bmVyLm51bWVyYWxUaG91c2FuZHNHcm91cFN0eWxlID0gbnVtZXJhbFRob3VzYW5kc0dyb3VwU3R5bGUgfHwgTnVtZXJhbEZvcm1hdHRlci5ncm91cFN0eWxlLnRob3VzYW5kO1xuICAgIG93bmVyLmRlbGltaXRlciA9IChkZWxpbWl0ZXIgfHwgZGVsaW1pdGVyID09PSAnJykgPyBkZWxpbWl0ZXIgOiAnLCc7XG4gICAgb3duZXIuZGVsaW1pdGVyUkUgPSBkZWxpbWl0ZXIgPyBuZXcgUmVnRXhwKCdcXFxcJyArIGRlbGltaXRlciwgJ2cnKSA6ICcnO1xufTtcblxuTnVtZXJhbEZvcm1hdHRlci5ncm91cFN0eWxlID0ge1xuICAgIHRob3VzYW5kOiAndGhvdXNhbmQnLFxuICAgIGxha2g6ICAgICAnbGFraCcsXG4gICAgd2FuOiAgICAgICd3YW4nXG59O1xuXG5OdW1lcmFsRm9ybWF0dGVyLnByb3RvdHlwZSA9IHtcbiAgICBnZXRSYXdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHRoaXMuZGVsaW1pdGVyUkUsICcnKS5yZXBsYWNlKHRoaXMubnVtZXJhbERlY2ltYWxNYXJrLCAnLicpO1xuICAgIH0sXG5cbiAgICBmb3JtYXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgb3duZXIgPSB0aGlzLCBwYXJ0cywgcGFydEludGVnZXIsIHBhcnREZWNpbWFsID0gJyc7XG5cbiAgICAgICAgLy8gc3RyaXAgYWxwaGFiZXQgbGV0dGVyc1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1tBLVphLXpdL2csICcnKVxuXG4gICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBmaXJzdCBkZWNpbWFsIG1hcmsgd2l0aCByZXNlcnZlZCBwbGFjZWhvbGRlclxuICAgICAgICAgICAgLnJlcGxhY2Uob3duZXIubnVtZXJhbERlY2ltYWxNYXJrLCAnTScpXG5cbiAgICAgICAgICAgIC8vIHN0cmlwIHRoZSBub24gbnVtZXJpYyBsZXR0ZXJzIGV4Y2VwdCBNXG4gICAgICAgICAgICAucmVwbGFjZSgvW15cXGRNXS9nLCAnJylcblxuICAgICAgICAgICAgLy8gcmVwbGFjZSBtYXJrXG4gICAgICAgICAgICAucmVwbGFjZSgnTScsIG93bmVyLm51bWVyYWxEZWNpbWFsTWFyaylcblxuICAgICAgICAgICAgLy8gc3RyaXAgbGVhZGluZyAwXG4gICAgICAgICAgICAucmVwbGFjZSgvXigtKT8wKyg/PVxcZCkvLCAnJDEnKTtcblxuICAgICAgICBwYXJ0SW50ZWdlciA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKG93bmVyLm51bWVyYWxEZWNpbWFsTWFyaykgPj0gMCkge1xuICAgICAgICAgICAgcGFydHMgPSB2YWx1ZS5zcGxpdChvd25lci5udW1lcmFsRGVjaW1hbE1hcmspO1xuICAgICAgICAgICAgcGFydEludGVnZXIgPSBwYXJ0c1swXTtcbiAgICAgICAgICAgIHBhcnREZWNpbWFsID0gb3duZXIubnVtZXJhbERlY2ltYWxNYXJrICsgcGFydHNbMV0uc2xpY2UoMCwgb3duZXIubnVtZXJhbERlY2ltYWxTY2FsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG93bmVyLm51bWVyYWxUaG91c2FuZHNHcm91cFN0eWxlKSB7XG4gICAgICAgIGNhc2UgTnVtZXJhbEZvcm1hdHRlci5ncm91cFN0eWxlLmxha2g6XG4gICAgICAgICAgICBwYXJ0SW50ZWdlciA9IHBhcnRJbnRlZ2VyLnJlcGxhY2UoLyhcXGQpKD89KFxcZFxcZCkrXFxkJCkvZywgJyQxJyArIG93bmVyLmRlbGltaXRlcik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgTnVtZXJhbEZvcm1hdHRlci5ncm91cFN0eWxlLndhbjpcbiAgICAgICAgICAgIHBhcnRJbnRlZ2VyID0gcGFydEludGVnZXIucmVwbGFjZSgvKFxcZCkoPz0oXFxkezR9KSskKS9nLCAnJDEnICsgb3duZXIuZGVsaW1pdGVyKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHBhcnRJbnRlZ2VyID0gcGFydEludGVnZXIucmVwbGFjZSgvKFxcZCkoPz0oXFxkezN9KSskKS9nLCAnJDEnICsgb3duZXIuZGVsaW1pdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJ0SW50ZWdlci50b1N0cmluZygpICsgKG93bmVyLm51bWVyYWxEZWNpbWFsU2NhbGUgPiAwID8gcGFydERlY2ltYWwudG9TdHJpbmcoKSA6ICcnKTtcbiAgICB9XG59O1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IE51bWVyYWxGb3JtYXR0ZXI7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBQaG9uZUZvcm1hdHRlciA9IGZ1bmN0aW9uIChmb3JtYXR0ZXIsIGRlbGltaXRlcikge1xuICAgIHZhciBvd25lciA9IHRoaXM7XG5cbiAgICBvd25lci5kZWxpbWl0ZXIgPSAoZGVsaW1pdGVyIHx8IGRlbGltaXRlciA9PT0gJycpID8gZGVsaW1pdGVyIDogJyAnO1xuICAgIG93bmVyLmRlbGltaXRlclJFID0gZGVsaW1pdGVyID8gbmV3IFJlZ0V4cCgnXFxcXCcgKyBkZWxpbWl0ZXIsICdnJykgOiAnJztcblxuICAgIG93bmVyLmZvcm1hdHRlciA9IGZvcm1hdHRlcjtcbn07XG5cblBob25lRm9ybWF0dGVyLnByb3RvdHlwZSA9IHtcbiAgICBzZXRGb3JtYXR0ZXI6IGZ1bmN0aW9uIChmb3JtYXR0ZXIpIHtcbiAgICAgICAgdGhpcy5mb3JtYXR0ZXIgPSBmb3JtYXR0ZXI7XG4gICAgfSxcblxuICAgIGZvcm1hdDogZnVuY3Rpb24gKHBob25lTnVtYmVyKSB7XG4gICAgICAgIHZhciBvd25lciA9IHRoaXM7XG5cbiAgICAgICAgb3duZXIuZm9ybWF0dGVyLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gb25seSBrZWVwIG51bWJlciBhbmQgK1xuICAgICAgICBwaG9uZU51bWJlciA9IHBob25lTnVtYmVyLnJlcGxhY2UoL1teXFxkK10vZywgJycpO1xuXG4gICAgICAgIC8vIHN0cmlwIGRlbGltaXRlclxuICAgICAgICBwaG9uZU51bWJlciA9IHBob25lTnVtYmVyLnJlcGxhY2Uob3duZXIuZGVsaW1pdGVyUkUsICcnKTtcblxuICAgICAgICB2YXIgcmVzdWx0ID0gJycsIGN1cnJlbnQsIHZhbGlkYXRlZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpTWF4ID0gcGhvbmVOdW1iZXIubGVuZ3RoOyBpIDwgaU1heDsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gb3duZXIuZm9ybWF0dGVyLmlucHV0RGlnaXQocGhvbmVOdW1iZXIuY2hhckF0KGkpKTtcblxuICAgICAgICAgICAgLy8gaGFzICgpLSBvciBzcGFjZSBpbnNpZGVcbiAgICAgICAgICAgIGlmICgvW1xccygpLV0vZy50ZXN0KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudDtcblxuICAgICAgICAgICAgICAgIHZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVsc2U6IG92ZXIgbGVuZ3RoIGlucHV0XG4gICAgICAgICAgICAgICAgLy8gaXQgdHVybnMgdG8gaW52YWxpZCBudW1iZXIgYWdhaW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN0cmlwICgpXG4gICAgICAgIC8vIGUuZy4gVVM6IDcxNjEyMzQ1NjcgcmV0dXJucyAoNzE2KSAxMjMtNDU2N1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWygpXS9nLCAnJyk7XG4gICAgICAgIC8vIHJlcGxhY2UgbGlicmFyeSBkZWxpbWl0ZXIgd2l0aCB1c2VyIGN1c3RvbWl6ZWQgZGVsaW1pdGVyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bXFxzLV0vZywgb3duZXIuZGVsaW1pdGVyKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn07XG5cbmlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gUGhvbmVGb3JtYXR0ZXI7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBVdGlsID0ge1xuICAgIG5vb3A6IGZ1bmN0aW9uICgpIHtcbiAgICB9LFxuXG4gICAgc3RyaXA6IGZ1bmN0aW9uICh2YWx1ZSwgcmUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmUsICcnKTtcbiAgICB9LFxuXG4gICAgaGVhZFN0cjogZnVuY3Rpb24gKHN0ciwgbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdHIuc2xpY2UoMCwgbGVuZ3RoKTtcbiAgICB9LFxuXG4gICAgZ2V0TWF4TGVuZ3RoOiBmdW5jdGlvbiAoYmxvY2tzKSB7XG4gICAgICAgIHJldHVybiBibG9ja3MucmVkdWNlKGZ1bmN0aW9uIChwcmV2aW91cywgY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzICsgY3VycmVudDtcbiAgICAgICAgfSwgMCk7XG4gICAgfSxcblxuICAgIC8vIHN0cmlwIHZhbHVlIGJ5IHByZWZpeCBsZW5ndGhcbiAgICAvLyBmb3IgcHJlZml4OiBQUkVcbiAgICAvLyAoUFJFMTIzLCAzKSAtPiAxMjNcbiAgICAvLyAoUFIxMjMsIDMpIC0+IDIzIHRoaXMgaGFwcGVucyB3aGVuIHVzZXIgaGl0cyBiYWNrc3BhY2UgaW4gZnJvbnQgb2YgXCJQUkVcIlxuICAgIGdldFByZWZpeFN0cmlwcGVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgcHJlZml4TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zbGljZShwcmVmaXhMZW5ndGgpO1xuICAgIH0sXG5cbiAgICBnZXRGb3JtYXR0ZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBibG9ja3MsIGJsb2Nrc0xlbmd0aCwgZGVsaW1pdGVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcblxuICAgICAgICBibG9ja3MuZm9yRWFjaChmdW5jdGlvbiAobGVuZ3RoLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3ViID0gdmFsdWUuc2xpY2UoMCwgbGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdCA9IHZhbHVlLnNsaWNlKGxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3ViO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1Yi5sZW5ndGggPT09IGxlbmd0aCAmJiBpbmRleCA8IGJsb2Nrc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGRlbGltaXRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcmVtYWluaW5nIHN0cmluZ1xuICAgICAgICAgICAgICAgIHZhbHVlID0gcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59O1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IFV0aWw7XG59XG4iXX0=
+/***/ }
+/******/ ])
+});
+;
\ No newline at end of file
diff --git a/dist/cleave-react.min.js b/dist/cleave-react.min.js
index e4929734..552652fe 100644
--- a/dist/cleave-react.min.js
+++ b/dist/cleave-react.min.js
@@ -1,8 +1,8 @@
/*!
- * cleave.js - 0.5.0
+ * cleave.js - 0.5.2
* https://github.com/nosir/cleave.js
* Apache License Version 2.0
*
* Copyright (C) 2012-2016 Max Huang https://github.com/nosir/
*/
-!function e(t,r,o){function n(i,l){if(!r[i]){if(!t[i]){var s="function"==typeof require&&require;if(!l&&s)return s(i,!0);if(a)return a(i,!0);var c=new Error("Cannot find module '"+i+"'");throw c.code="MODULE_NOT_FOUND",c}var u=r[i]={exports:{}};t[i][0].call(u.exports,function(e){var r=t[i][1][e];return n(r?r:e)},u,u.exports,e,t,r,o)}return r[i].exports}for(var a="function"==typeof require&&require,i=0;i=0||Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o]);return r}var n=Object.assign||function(e){for(var t=1;t=0?t.numeralDecimalScale:2,e.numeralDecimalMark=t.numeralDecimalMark||".",e.numeralThousandsGroupStyle=t.numeralThousandsGroupStyle||"thousand",e.numericOnly=e.creditCard||e.date||!!t.numericOnly,e.uppercase=!!t.uppercase,e.lowercase=!!t.lowercase,e.prefix=e.creditCard||e.phone||e.date?"":t.prefix||"",e.prefixLength=e.prefix.length,e.initValue=t.initValue||"",e.delimiter=t.delimiter||""===t.delimiter?t.delimiter:t.date?"/":t.numeral?",":(t.phone," "),e.delimiterRE=new RegExp("\\"+(e.delimiter||" "),"g"),e.blocks=t.blocks||[],e.blocksLength=e.blocks.length,e.maxLength=0,e.backspace=!1,e.result="",e}};"object"===("undefined"==typeof t?"undefined":o(t))&&"object"===o(t.exports)&&(t.exports=r=n)},{}],4:[function(e,t,r){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n={blocks:{uatp:[4,5,6],amex:[4,6,5],diners:[4,6,4],discover:[4,4,4,4],mastercard:[4,4,4,4],dankort:[4,4,4,4],instapayment:[4,4,4,4],jcb:[4,4,4,4],maestro:[4,4,4,4],visa:[4,4,4,4],generalLoose:[4,4,4,4],generalStrict:[4,4,4,7]},re:{uatp:/^(?!1800)1\d{0,14}/,amex:/^3[47]\d{0,13}/,discover:/^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,diners:/^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,mastercard:/^(5[1-5]|2[2-7])\d{0,14}/,dankort:/^(5019|4175|4571)\d{0,12}/,instapayment:/^63[7-9]\d{0,13}/,jcb:/^(?:2131|1800|35\d{0,2})\d{0,12}/,maestro:/^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,visa:/^4\d{0,15}/},getInfo:function(e,t){var r=n.blocks,o=n.re;return t=!!t,o.amex.test(e)?{type:"amex",blocks:r.amex}:o.uatp.test(e)?{type:"uatp",blocks:r.uatp}:o.diners.test(e)?{type:"diners",blocks:r.diners}:o.discover.test(e)?{type:"discover",blocks:r.discover}:o.mastercard.test(e)?{type:"mastercard",blocks:r.mastercard}:o.dankort.test(e)?{type:"dankort",blocks:r.dankort}:o.instapayment.test(e)?{type:"instapayment",blocks:r.instapayment}:o.jcb.test(e)?{type:"jcb",blocks:r.jcb}:o.maestro.test(e)?{type:"maestro",blocks:r.maestro}:o.visa.test(e)?{type:"visa",blocks:r.visa}:t?{type:"unknown",blocks:r.generalStrict}:{type:"unknown",blocks:r.generalLoose}}};"object"===("undefined"==typeof t?"undefined":o(t))&&"object"===o(t.exports)&&(t.exports=r=n)},{}],5:[function(e,t,r){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n=function(e){var t=this;t.blocks=[],t.datePattern=e,t.initBlocks()};n.prototype={initBlocks:function(){var e=this;e.datePattern.forEach(function(t){"Y"===t?e.blocks.push(4):e.blocks.push(2)})},getBlocks:function(){return this.blocks},getValidatedDate:function(e){var t=this,r="";return e=e.replace(/[^\d]/g,""),t.blocks.forEach(function(o,n){if(e.length>0){var a=e.slice(0,o),i=a.slice(0,1),l=e.slice(o);switch(t.datePattern[n]){case"d":"00"===a?a="01":parseInt(i,10)>3?a="0"+i:parseInt(a,10)>31&&(a="31");break;case"m":"00"===a?a="01":parseInt(i,10)>1?a="0"+i:parseInt(a,10)>12&&(a="12")}r+=a,e=l}}),r}},"object"===("undefined"==typeof t?"undefined":o(t))&&"object"===o(t.exports)&&(t.exports=r=n)},{}],6:[function(e,t,r){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n=function a(e,t,r,o){var n=this;n.numeralDecimalMark=e||".",n.numeralDecimalScale=t>=0?t:2,n.numeralThousandsGroupStyle=r||a.groupStyle.thousand,n.delimiter=o||""===o?o:",",n.delimiterRE=o?new RegExp("\\"+o,"g"):""};n.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan"},n.prototype={getRawValue:function(e){return e.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(e){var t,r,o=this,a="";switch(e=e.replace(/[A-Za-z]/g,"").replace(o.numeralDecimalMark,"M").replace(/[^\dM]/g,"").replace("M",o.numeralDecimalMark).replace(/^(-)?0+(?=\d)/,"$1"),r=e,e.indexOf(o.numeralDecimalMark)>=0&&(t=e.split(o.numeralDecimalMark),r=t[0],a=o.numeralDecimalMark+t[1].slice(0,o.numeralDecimalScale)),o.numeralThousandsGroupStyle){case n.groupStyle.lakh:r=r.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+o.delimiter);break;case n.groupStyle.wan:r=r.replace(/(\d)(?=(\d{4})+$)/g,"$1"+o.delimiter);break;default:r=r.replace(/(\d)(?=(\d{3})+$)/g,"$1"+o.delimiter)}return r.toString()+(o.numeralDecimalScale>0?a.toString():"")}},"object"===("undefined"==typeof t?"undefined":o(t))&&"object"===o(t.exports)&&(t.exports=r=n)},{}],7:[function(e,t,r){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n=function(e,t){var r=this;r.delimiter=t||""===t?t:" ",r.delimiterRE=t?new RegExp("\\"+t,"g"):"",r.formatter=e};n.prototype={setFormatter:function(e){this.formatter=e},format:function(e){var t=this;t.formatter.clear(),e=e.replace(/[^\d+]/g,""),e=e.replace(t.delimiterRE,"");for(var r,o="",n=!1,a=0,i=e.length;i>a;a++)r=t.formatter.inputDigit(e.charAt(a)),/[\s()-]/g.test(r)?(o=r,n=!0):n||(o=r);return o=o.replace(/[()]/g,""),o=o.replace(/[\s-]/g,t.delimiter)}},"object"===("undefined"==typeof t?"undefined":o(t))&&"object"===o(t.exports)&&(t.exports=r=n)},{}],8:[function(e,t,r){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},n={noop:function(){},strip:function(e,t){return e.replace(t,"")},headStr:function(e,t){return e.slice(0,t)},getMaxLength:function(e){return e.reduce(function(e,t){return e+t},0)},getPrefixStrippedValue:function(e,t){return e.slice(t)},getFormattedValue:function(e,t,r,o){var n="";return t.forEach(function(t,a){if(e.length>0){var i=e.slice(0,t),l=e.slice(t);n+=i,i.length===t&&r-1>a&&(n+=o),e=l}}),n}};"object"===("undefined"==typeof t?"undefined":o(t))&&"object"===o(t.exports)&&(t.exports=r=n)},{}]},{},[1]);
\ No newline at end of file
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.Cleave=t(require("react")):e.Cleave=t(e.React)}(this,function(e){return function(e){function t(o){if(r[o])return r[o].exports;var n=r[o]={exports:{},id:o,loaded:!1};return e[o].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function o(e,t){var r={};for(var o in e)t.indexOf(o)>=0||Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o]);return r}var n=Object.assign||function(e){for(var t=1;t=0?t:2,a.numeralThousandsGroupStyle=r||n.groupStyle.thousand,a.delimiter=o||""===o?o:",",a.delimiterRE=o?new RegExp("\\"+o,"g"):""};o.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan"},o.prototype={getRawValue:function(e){return e.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(e){var t,r,n=this,a="";switch(e=e.replace(/[A-Za-z]/g,"").replace(n.numeralDecimalMark,"M").replace(/[^\dM]/g,"").replace("M",n.numeralDecimalMark).replace(/^(-)?0+(?=\d)/,"$1"),r=e,e.indexOf(n.numeralDecimalMark)>=0&&(t=e.split(n.numeralDecimalMark),r=t[0],a=n.numeralDecimalMark+t[1].slice(0,n.numeralDecimalScale)),n.numeralThousandsGroupStyle){case o.groupStyle.lakh:r=r.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+n.delimiter);break;case o.groupStyle.wan:r=r.replace(/(\d)(?=(\d{4})+$)/g,"$1"+n.delimiter);break;default:r=r.replace(/(\d)(?=(\d{3})+$)/g,"$1"+n.delimiter)}return r.toString()+(n.numeralDecimalScale>0?a.toString():"")}},"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=o)}).call(t,r(3)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o=function(e){var t=this;t.blocks=[],t.datePattern=e,t.initBlocks()};o.prototype={initBlocks:function(){var e=this;e.datePattern.forEach(function(t){"Y"===t?e.blocks.push(4):e.blocks.push(2)})},getBlocks:function(){return this.blocks},getValidatedDate:function(e){var t=this,r="";return e=e.replace(/[^\d]/g,""),t.blocks.forEach(function(o,n){if(e.length>0){var a=e.slice(0,o),i=a.slice(0,1),l=e.slice(o);switch(t.datePattern[n]){case"d":"00"===a?a="01":parseInt(i,10)>3?a="0"+i:parseInt(a,10)>31&&(a="31");break;case"m":"00"===a?a="01":parseInt(i,10)>1?a="0"+i:parseInt(a,10)>12&&(a="12")}r+=a,e=l}}),r}},"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=o)}).call(t,r(3)(e))},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o=function(e,t){var r=this;r.delimiter=t||""===t?t:" ",r.delimiterRE=t?new RegExp("\\"+t,"g"):"",r.formatter=e};o.prototype={setFormatter:function(e){this.formatter=e},format:function(e){var t=this;t.formatter.clear(),e=e.replace(/[^\d+]/g,""),e=e.replace(t.delimiterRE,"");for(var r,o="",n=!1,a=0,i=e.length;i>a;a++)r=t.formatter.inputDigit(e.charAt(a)),/[\s()-]/g.test(r)?(o=r,n=!0):n||(o=r);return o=o.replace(/[()]/g,""),o=o.replace(/[\s-]/g,t.delimiter)}},"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=o)}).call(t,r(3)(e))},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o={blocks:{uatp:[4,5,6],amex:[4,6,5],diners:[4,6,4],discover:[4,4,4,4],mastercard:[4,4,4,4],dankort:[4,4,4,4],instapayment:[4,4,4,4],jcb:[4,4,4,4],maestro:[4,4,4,4],visa:[4,4,4,4],generalLoose:[4,4,4,4],generalStrict:[4,4,4,7]},re:{uatp:/^(?!1800)1\d{0,14}/,amex:/^3[47]\d{0,13}/,discover:/^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,diners:/^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,mastercard:/^(5[1-5]|2[2-7])\d{0,14}/,dankort:/^(5019|4175|4571)\d{0,12}/,instapayment:/^63[7-9]\d{0,13}/,jcb:/^(?:2131|1800|35\d{0,2})\d{0,12}/,maestro:/^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,visa:/^4\d{0,15}/},getInfo:function(e,t){var r=o.blocks,n=o.re;return t=!!t,n.amex.test(e)?{type:"amex",blocks:r.amex}:n.uatp.test(e)?{type:"uatp",blocks:r.uatp}:n.diners.test(e)?{type:"diners",blocks:r.diners}:n.discover.test(e)?{type:"discover",blocks:r.discover}:n.mastercard.test(e)?{type:"mastercard",blocks:r.mastercard}:n.dankort.test(e)?{type:"dankort",blocks:r.dankort}:n.instapayment.test(e)?{type:"instapayment",blocks:r.instapayment}:n.jcb.test(e)?{type:"jcb",blocks:r.jcb}:n.maestro.test(e)?{type:"maestro",blocks:r.maestro}:n.visa.test(e)?{type:"visa",blocks:r.visa}:t?{type:"unknown",blocks:r.generalStrict}:{type:"unknown",blocks:r.generalLoose}}};"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=o)}).call(t,r(3)(e))},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o={noop:function(){},strip:function(e,t){return e.replace(t,"")},headStr:function(e,t){return e.slice(0,t)},getMaxLength:function(e){return e.reduce(function(e,t){return e+t},0)},getPrefixStrippedValue:function(e,t){return e.slice(t)},getFormattedValue:function(e,t,r,o){var n="";return t.forEach(function(t,a){if(e.length>0){var i=e.slice(0,t),l=e.slice(t);n+=i,i.length===t&&r-1>a&&(n+=o),e=l}}),n}};"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=o)}).call(t,r(3)(e))},function(e,t,r){(function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o={assign:function(e,t){return e=e||{},t=t||{},e.creditCard=!!t.creditCard,e.creditCardStrictMode=!!t.creditCardStrictMode,e.creditCardType="",e.onCreditCardTypeChanged=t.onCreditCardTypeChanged||function(){},e.phone=!!t.phone,e.phoneRegionCode=t.phoneRegionCode||"AU",e.phoneFormatter={},e.date=!!t.date,e.datePattern=t.datePattern||["d","m","Y"],e.dateFormatter={},e.numeral=!!t.numeral,e.numeralDecimalScale=t.numeralDecimalScale>=0?t.numeralDecimalScale:2,e.numeralDecimalMark=t.numeralDecimalMark||".",e.numeralThousandsGroupStyle=t.numeralThousandsGroupStyle||"thousand",e.numericOnly=e.creditCard||e.date||!!t.numericOnly,e.uppercase=!!t.uppercase,e.lowercase=!!t.lowercase,e.prefix=e.creditCard||e.phone||e.date?"":t.prefix||"",e.prefixLength=e.prefix.length,e.initValue=t.initValue||"",e.delimiter=t.delimiter||""===t.delimiter?t.delimiter:t.date?"/":t.numeral?",":(t.phone," "),e.delimiterRE=new RegExp("\\"+(e.delimiter||" "),"g"),e.blocks=t.blocks||[],e.blocksLength=e.blocks.length,e.maxLength=0,e.backspace=!1,e.result="",e}};"object"===r(e)&&"object"===r(e.exports)&&(e.exports=t=o)}).call(t,r(3)(e))}])});
\ No newline at end of file
diff --git a/dist/cleave-react.webpack.js b/dist/cleave-react.webpack.js
deleted file mode 100644
index 446ca324..00000000
--- a/dist/cleave-react.webpack.js
+++ /dev/null
@@ -1,862 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory(require("react"));
- else if(typeof define === 'function' && define.amd)
- define(["react"], factory);
- else if(typeof exports === 'object')
- exports["Cleave"] = factory(require("react"));
- else
- root["Cleave"] = factory(root["React"]);
-})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ function(module, exports, __webpack_require__) {
-
- 'use strict';
-
- var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
- function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
-
- var React = __webpack_require__(1);
-
- var NumeralFormatter = __webpack_require__(2);
- var DateFormatter = __webpack_require__(4);
- var PhoneFormatter = __webpack_require__(5);
- var CreditCardDetector = __webpack_require__(6);
- var Util = __webpack_require__(7);
- var DefaultProperties = __webpack_require__(8);
-
- var Cleave = React.createClass({
- displayName: 'Cleave',
-
- componentDidMount: function componentDidMount() {
- this.init();
- },
-
- componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
- var owner = this,
- phoneRegionCode = nextProps.options.phoneRegionCode,
- newValue = nextProps.value;
-
- if (newValue) {
- owner.onInput(newValue);
- }
-
- // update phone region code
- if (phoneRegionCode && phoneRegionCode !== owner.properties.phoneRegionCode) {
- owner.properties.phoneRegionCode = phoneRegionCode;
- owner.initPhoneFormatter();
- owner.onInput(owner.properties.result);
- }
- },
-
- getInitialState: function getInitialState() {
- var owner = this;
- var _owner$props = owner.props;
- var value = _owner$props.value;
- var options = _owner$props.options;
- var onKeyDown = _owner$props.onKeyDown;
- var onChange = _owner$props.onChange;
-
- var other = _objectWithoutProperties(_owner$props, ['value', 'options', 'onKeyDown', 'onChange']);
-
- owner.registeredEvents = {
- onChange: onChange || Util.noop,
- onKeyDown: onKeyDown || Util.noop
- };
-
- options.initValue = value;
-
- owner.properties = DefaultProperties.assign({}, options);
-
- return {
- other: other,
- value: owner.properties.result
- };
- },
-
- init: function init() {
- var owner = this,
- pps = owner.properties;
-
- // so no need for this lib at all
- if (!pps.numeral && !pps.phone && !pps.creditCard && !pps.date && pps.blocksLength === 0 && !pps.prefix) {
- return;
- }
-
- pps.maxLength = Util.getMaxLength(pps.blocks);
-
- owner.initPhoneFormatter();
- owner.initDateFormatter();
- owner.initNumeralFormatter();
-
- owner.onInput(pps.initValue);
- },
-
- initNumeralFormatter: function initNumeralFormatter() {
- var owner = this,
- pps = owner.properties;
-
- if (!pps.numeral) {
- return;
- }
-
- pps.numeralFormatter = new NumeralFormatter(pps.numeralDecimalMark, pps.numeralDecimalScale, pps.numeralThousandsGroupStyle, pps.delimiter);
- },
-
- initDateFormatter: function initDateFormatter() {
- var owner = this,
- pps = owner.properties;
-
- if (!pps.date) {
- return;
- }
-
- pps.dateFormatter = new DateFormatter(pps.datePattern);
- pps.blocks = pps.dateFormatter.getBlocks();
- pps.blocksLength = pps.blocks.length;
- pps.maxLength = Util.getMaxLength(pps.blocks);
- },
-
- initPhoneFormatter: function initPhoneFormatter() {
- var owner = this,
- pps = owner.properties;
-
- if (!pps.phone) {
- return;
- }
-
- // Cleave.AsYouTypeFormatter should be provided by
- // external google closure lib
- try {
- pps.phoneFormatter = new PhoneFormatter(new window.Cleave.AsYouTypeFormatter(pps.phoneRegionCode), pps.delimiter);
- } catch (ex) {
- throw new Error('Please include phone-type-formatter.{country}.js lib');
- }
- },
-
- onKeyDown: function onKeyDown(event) {
- var owner = this,
- pps = owner.properties,
- charCode = event.which || event.keyCode;
-
- // hit backspace when last character is delimiter
- if (charCode === 8 && pps.result.slice(-1) === pps.delimiter) {
- pps.backspace = true;
- } else {
- pps.backspace = false;
- }
-
- owner.registeredEvents.onKeyDown(event);
- },
-
- onChange: function onChange(event) {
- var owner = this,
- pps = owner.properties;
-
- owner.onInput(event.target.value);
-
- if (pps.numeral) {
- event.target.rawValue = pps.numeralFormatter.getRawValue(pps.result);
- } else {
- event.target.rawValue = Util.strip(pps.result, pps.delimiterRE);
- }
-
- owner.registeredEvents.onChange(event);
- },
-
- onInput: function onInput(value) {
- var owner = this,
- pps = owner.properties,
- prev = pps.result;
-
- // case 1: delete one more character "4"
- // 1234*| -> hit backspace -> 123|
- // case 2: last character is not delimiter which is:
- // 12|34* -> hit backspace -> 1|34*
-
- if (!pps.numeral && pps.backspace && value.slice(-1) !== pps.delimiter) {
- value = Util.headStr(value, value.length - 1);
- }
-
- // phone formatter
- if (pps.phone) {
- pps.result = pps.phoneFormatter.format(value);
- owner.updateValueState();
-
- return;
- }
-
- // numeral formatter
- if (pps.numeral) {
- pps.result = pps.prefix + pps.numeralFormatter.format(value);
- owner.updateValueState();
-
- return;
- }
-
- // date
- if (pps.date) {
- value = pps.dateFormatter.getValidatedDate(value);
- }
-
- // strip delimiters
- value = Util.strip(value, pps.delimiterRE);
-
- // strip prefix
- value = Util.getPrefixStrippedValue(value, pps.prefixLength);
-
- // strip non-numeric characters
- value = pps.numericOnly ? Util.strip(value, /[^\d]/g) : value;
-
- // convert case
- value = pps.uppercase ? value.toUpperCase() : value;
- value = pps.lowercase ? value.toLowerCase() : value;
-
- // prefix
- if (pps.prefix) {
- value = pps.prefix + value;
-
- // no blocks specified, no need to do formatting
- if (pps.blocksLength === 0) {
- pps.result = value;
- owner.updateValueState();
-
- return;
- }
- }
-
- // update credit card props
- if (pps.creditCard) {
- owner.updateCreditCardPropsByValue(value);
- }
-
- // strip over length characters
- value = Util.headStr(value, pps.maxLength);
-
- // apply blocks
- pps.result = Util.getFormattedValue(value, pps.blocks, pps.blocksLength, pps.delimiter);
-
- // nothing changed
- // prevent update value to avoid caret position change
- if (prev === pps.result && prev !== pps.prefix) {
- return;
- }
-
- owner.updateValueState();
- },
-
- updateCreditCardPropsByValue: function updateCreditCardPropsByValue(value) {
- var owner = this,
- pps = owner.properties,
- creditCardInfo;
-
- // At least one of the first 4 characters has changed
- if (Util.headStr(pps.result, 4) === Util.headStr(value, 4)) {
- return;
- }
-
- creditCardInfo = CreditCardDetector.getInfo(value, pps.creditCardStrictMode);
-
- pps.blocks = creditCardInfo.blocks;
- pps.blocksLength = pps.blocks.length;
- pps.maxLength = Util.getMaxLength(pps.blocks);
-
- // credit card type changed
- if (pps.creditCardType !== creditCardInfo.type) {
- pps.creditCardType = creditCardInfo.type;
-
- pps.onCreditCardTypeChanged.call(owner, pps.creditCardType);
- }
- },
-
- updateValueState: function updateValueState() {
- this.setState({ value: this.properties.result });
- },
-
- render: function render() {
- var owner = this;
-
- return React.createElement('input', _extends({ type: 'text' }, owner.state.other, {
- value: owner.state.value,
- onKeyDown: owner.onKeyDown,
- onChange: owner.onChange }));
- }
- });
-
- module.exports = window.Cleave = Cleave;
-
-/***/ },
-/* 1 */
-/***/ function(module, exports) {
-
- module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
-
-/***/ },
-/* 2 */
-/***/ function(module, exports, __webpack_require__) {
-
- /* WEBPACK VAR INJECTION */(function(module) {'use strict';
-
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
- var NumeralFormatter = function NumeralFormatter(numeralDecimalMark, numeralDecimalScale, numeralThousandsGroupStyle, delimiter) {
- var owner = this;
-
- owner.numeralDecimalMark = numeralDecimalMark || '.';
- owner.numeralDecimalScale = numeralDecimalScale >= 0 ? numeralDecimalScale : 2;
- owner.numeralThousandsGroupStyle = numeralThousandsGroupStyle || NumeralFormatter.groupStyle.thousand;
- owner.delimiter = delimiter || delimiter === '' ? delimiter : ',';
- owner.delimiterRE = delimiter ? new RegExp('\\' + delimiter, 'g') : '';
- };
-
- NumeralFormatter.groupStyle = {
- thousand: 'thousand',
- lakh: 'lakh',
- wan: 'wan'
- };
-
- NumeralFormatter.prototype = {
- getRawValue: function getRawValue(value) {
- return value.replace(this.delimiterRE, '').replace(this.numeralDecimalMark, '.');
- },
-
- format: function format(value) {
- var owner = this,
- parts,
- partInteger,
- partDecimal = '';
-
- // strip alphabet letters
- value = value.replace(/[A-Za-z]/g, '')
-
- // replace the first decimal mark with reserved placeholder
- .replace(owner.numeralDecimalMark, 'M')
-
- // strip the non numeric letters except M
- .replace(/[^\dM]/g, '')
-
- // replace mark
- .replace('M', owner.numeralDecimalMark)
-
- // strip leading 0
- .replace(/^(-)?0+(?=\d)/, '$1');
-
- partInteger = value;
-
- if (value.indexOf(owner.numeralDecimalMark) >= 0) {
- parts = value.split(owner.numeralDecimalMark);
- partInteger = parts[0];
- partDecimal = owner.numeralDecimalMark + parts[1].slice(0, owner.numeralDecimalScale);
- }
-
- switch (owner.numeralThousandsGroupStyle) {
- case NumeralFormatter.groupStyle.lakh:
- partInteger = partInteger.replace(/(\d)(?=(\d\d)+\d$)/g, '$1' + owner.delimiter);
-
- break;
-
- case NumeralFormatter.groupStyle.wan:
- partInteger = partInteger.replace(/(\d)(?=(\d{4})+$)/g, '$1' + owner.delimiter);
-
- break;
-
- default:
- partInteger = partInteger.replace(/(\d)(?=(\d{3})+$)/g, '$1' + owner.delimiter);
- }
-
- return partInteger.toString() + (owner.numeralDecimalScale > 0 ? partDecimal.toString() : '');
- }
- };
-
- if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = NumeralFormatter;
- }
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
-
-/***/ },
-/* 3 */
-/***/ function(module, exports) {
-
- module.exports = function(module) {
- if(!module.webpackPolyfill) {
- module.deprecate = function() {};
- module.paths = [];
- // module.parent = undefined by default
- module.children = [];
- module.webpackPolyfill = 1;
- }
- return module;
- }
-
-
-/***/ },
-/* 4 */
-/***/ function(module, exports, __webpack_require__) {
-
- /* WEBPACK VAR INJECTION */(function(module) {'use strict';
-
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
- var DateFormatter = function DateFormatter(datePattern) {
- var owner = this;
-
- owner.blocks = [];
- owner.datePattern = datePattern;
- owner.initBlocks();
- };
-
- DateFormatter.prototype = {
- initBlocks: function initBlocks() {
- var owner = this;
- owner.datePattern.forEach(function (value) {
- if (value === 'Y') {
- owner.blocks.push(4);
- } else {
- owner.blocks.push(2);
- }
- });
- },
-
- getBlocks: function getBlocks() {
- return this.blocks;
- },
-
- getValidatedDate: function getValidatedDate(value) {
- var owner = this,
- result = '';
-
- value = value.replace(/[^\d]/g, '');
-
- owner.blocks.forEach(function (length, index) {
- if (value.length > 0) {
- var sub = value.slice(0, length),
- sub0 = sub.slice(0, 1),
- rest = value.slice(length);
-
- switch (owner.datePattern[index]) {
- case 'd':
- if (sub === '00') {
- sub = '01';
- } else if (parseInt(sub0, 10) > 3) {
- sub = '0' + sub0;
- } else if (parseInt(sub, 10) > 31) {
- sub = '31';
- }
-
- break;
-
- case 'm':
- if (sub === '00') {
- sub = '01';
- } else if (parseInt(sub0, 10) > 1) {
- sub = '0' + sub0;
- } else if (parseInt(sub, 10) > 12) {
- sub = '12';
- }
-
- break;
- }
-
- result += sub;
-
- // update remaining string
- value = rest;
- }
- });
-
- return result;
- }
- };
-
- if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = DateFormatter;
- }
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
-
-/***/ },
-/* 5 */
-/***/ function(module, exports, __webpack_require__) {
-
- /* WEBPACK VAR INJECTION */(function(module) {'use strict';
-
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
- var PhoneFormatter = function PhoneFormatter(formatter, delimiter) {
- var owner = this;
-
- owner.delimiter = delimiter || delimiter === '' ? delimiter : ' ';
- owner.delimiterRE = delimiter ? new RegExp('\\' + delimiter, 'g') : '';
-
- owner.formatter = formatter;
- };
-
- PhoneFormatter.prototype = {
- setFormatter: function setFormatter(formatter) {
- this.formatter = formatter;
- },
-
- format: function format(phoneNumber) {
- var owner = this;
-
- owner.formatter.clear();
-
- // only keep number and +
- phoneNumber = phoneNumber.replace(/[^\d+]/g, '');
-
- // strip delimiter
- phoneNumber = phoneNumber.replace(owner.delimiterRE, '');
-
- var result = '',
- current,
- validated = false;
-
- for (var i = 0, iMax = phoneNumber.length; i < iMax; i++) {
- current = owner.formatter.inputDigit(phoneNumber.charAt(i));
-
- // has ()- or space inside
- if (/[\s()-]/g.test(current)) {
- result = current;
-
- validated = true;
- } else {
- if (!validated) {
- result = current;
- }
- // else: over length input
- // it turns to invalid number again
- }
- }
-
- // strip ()
- // e.g. US: 7161234567 returns (716) 123-4567
- result = result.replace(/[()]/g, '');
- // replace library delimiter with user customized delimiter
- result = result.replace(/[\s-]/g, owner.delimiter);
-
- return result;
- }
- };
-
- if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = PhoneFormatter;
- }
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
-
-/***/ },
-/* 6 */
-/***/ function(module, exports, __webpack_require__) {
-
- /* WEBPACK VAR INJECTION */(function(module) {'use strict';
-
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
- var CreditCardDetector = {
- blocks: {
- uatp: [4, 5, 6],
- amex: [4, 6, 5],
- diners: [4, 6, 4],
- discover: [4, 4, 4, 4],
- mastercard: [4, 4, 4, 4],
- dankort: [4, 4, 4, 4],
- instapayment: [4, 4, 4, 4],
- jcb: [4, 4, 4, 4],
- maestro: [4, 4, 4, 4],
- visa: [4, 4, 4, 4],
- generalLoose: [4, 4, 4, 4],
- generalStrict: [4, 4, 4, 7]
- },
-
- re: {
- // starts with 1; 15 digits, not starts with 1800 (jcb card)
- uatp: /^(?!1800)1\d{0,14}/,
-
- // starts with 34/37; 15 digits
- amex: /^3[47]\d{0,13}/,
-
- // starts with 6011/65/644-649; 16 digits
- discover: /^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,
-
- // starts with 300-305/309 or 36/38/39; 14 digits
- diners: /^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,
-
- // starts with 51-55/22-27; 16 digits
- mastercard: /^(5[1-5]|2[2-7])\d{0,14}/,
-
- // starts with 5019/4175/4571; 16 digits
- dankort: /^(5019|4175|4571)\d{0,12}/,
-
- // starts with 637-639; 16 digits
- instapayment: /^63[7-9]\d{0,13}/,
-
- // starts with 2131/1800/35; 16 digits
- jcb: /^(?:2131|1800|35\d{0,2})\d{0,12}/,
-
- // starts with 50/56-58/6304/67; 16 digits
- maestro: /^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,
-
- // starts with 4; 16 digits
- visa: /^4\d{0,15}/
- },
-
- getInfo: function getInfo(value, strictMode) {
- var blocks = CreditCardDetector.blocks,
- re = CreditCardDetector.re;
-
- // In theory, visa credit card can have up to 19 digits number.
- // Set strictMode to true will remove the 16 max-length restrain,
- // however, I never found any website validate card number like
- // this, hence probably you don't need to enable this option.
- strictMode = !!strictMode;
-
- if (re.amex.test(value)) {
- return {
- type: 'amex',
- blocks: blocks.amex
- };
- } else if (re.uatp.test(value)) {
- return {
- type: 'uatp',
- blocks: blocks.uatp
- };
- } else if (re.diners.test(value)) {
- return {
- type: 'diners',
- blocks: blocks.diners
- };
- } else if (re.discover.test(value)) {
- return {
- type: 'discover',
- blocks: blocks.discover
- };
- } else if (re.mastercard.test(value)) {
- return {
- type: 'mastercard',
- blocks: blocks.mastercard
- };
- } else if (re.dankort.test(value)) {
- return {
- type: 'dankort',
- blocks: blocks.dankort
- };
- } else if (re.instapayment.test(value)) {
- return {
- type: 'instapayment',
- blocks: blocks.instapayment
- };
- } else if (re.jcb.test(value)) {
- return {
- type: 'jcb',
- blocks: blocks.jcb
- };
- } else if (re.maestro.test(value)) {
- return {
- type: 'maestro',
- blocks: blocks.maestro
- };
- } else if (re.visa.test(value)) {
- return {
- type: 'visa',
- blocks: blocks.visa
- };
- } else if (strictMode) {
- return {
- type: 'unknown',
- blocks: blocks.generalStrict
- };
- } else {
- return {
- type: 'unknown',
- blocks: blocks.generalLoose
- };
- }
- }
- };
-
- if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = CreditCardDetector;
- }
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
-
-/***/ },
-/* 7 */
-/***/ function(module, exports, __webpack_require__) {
-
- /* WEBPACK VAR INJECTION */(function(module) {'use strict';
-
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
- var Util = {
- noop: function noop() {},
-
- strip: function strip(value, re) {
- return value.replace(re, '');
- },
-
- headStr: function headStr(str, length) {
- return str.slice(0, length);
- },
-
- getMaxLength: function getMaxLength(blocks) {
- return blocks.reduce(function (previous, current) {
- return previous + current;
- }, 0);
- },
-
- // strip value by prefix length
- // for prefix: PRE
- // (PRE123, 3) -> 123
- // (PR123, 3) -> 23 this happens when user hits backspace in front of "PRE"
- getPrefixStrippedValue: function getPrefixStrippedValue(value, prefixLength) {
- return value.slice(prefixLength);
- },
-
- getFormattedValue: function getFormattedValue(value, blocks, blocksLength, delimiter) {
- var result = '';
-
- blocks.forEach(function (length, index) {
- if (value.length > 0) {
- var sub = value.slice(0, length),
- rest = value.slice(length);
-
- result += sub;
-
- if (sub.length === length && index < blocksLength - 1) {
- result += delimiter;
- }
-
- // update remaining string
- value = rest;
- }
- });
-
- return result;
- }
- };
-
- if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = Util;
- }
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
-
-/***/ },
-/* 8 */
-/***/ function(module, exports, __webpack_require__) {
-
- /* WEBPACK VAR INJECTION */(function(module) {'use strict';
-
- /**
- * Props Assignment
- *
- * Separate this, so react module can share the usage
- */
-
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
-
- var DefaultProperties = {
- // Maybe change to object-assign
- // for now just keep it as simple
- assign: function assign(target, opts) {
- target = target || {};
- opts = opts || {};
-
- // credit card
- target.creditCard = !!opts.creditCard;
- target.creditCardStrictMode = !!opts.creditCardStrictMode;
- target.creditCardType = '';
- target.onCreditCardTypeChanged = opts.onCreditCardTypeChanged || function () {};
-
- // phone
- target.phone = !!opts.phone;
- target.phoneRegionCode = opts.phoneRegionCode || 'AU';
- target.phoneFormatter = {};
-
- // date
- target.date = !!opts.date;
- target.datePattern = opts.datePattern || ['d', 'm', 'Y'];
- target.dateFormatter = {};
-
- // numeral
- target.numeral = !!opts.numeral;
- target.numeralDecimalScale = opts.numeralDecimalScale >= 0 ? opts.numeralDecimalScale : 2;
- target.numeralDecimalMark = opts.numeralDecimalMark || '.';
- target.numeralThousandsGroupStyle = opts.numeralThousandsGroupStyle || 'thousand';
-
- // others
- target.numericOnly = target.creditCard || target.date || !!opts.numericOnly;
-
- target.uppercase = !!opts.uppercase;
- target.lowercase = !!opts.lowercase;
-
- target.prefix = target.creditCard || target.phone || target.date ? '' : opts.prefix || '';
- target.prefixLength = target.prefix.length;
-
- target.initValue = opts.initValue || '';
-
- target.delimiter = opts.delimiter || opts.delimiter === '' ? opts.delimiter : opts.date ? '/' : opts.numeral ? ',' : opts.phone ? ' ' : ' ';
- target.delimiterRE = new RegExp('\\' + (target.delimiter || ' '), 'g');
-
- target.blocks = opts.blocks || [];
- target.blocksLength = target.blocks.length;
-
- target.maxLength = 0;
-
- target.backspace = false;
- target.result = '';
-
- return target;
- }
- };
-
- if (( false ? 'undefined' : _typeof(module)) === 'object' && _typeof(module.exports) === 'object') {
- module.exports = exports = DefaultProperties;
- }
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)(module)))
-
-/***/ }
-/******/ ])
-});
-;
\ No newline at end of file
diff --git a/dist/cleave.min.js b/dist/cleave.min.js
index ff151fae..0ed68a00 100644
--- a/dist/cleave.min.js
+++ b/dist/cleave.min.js
@@ -1,5 +1,5 @@
/*!
- * cleave.js - 0.5.0
+ * cleave.js - 0.5.2
* https://github.com/nosir/cleave.js
* Apache License Version 2.0
*
diff --git a/doc/reactjs-component-usage.md b/doc/reactjs-component-usage.md
index 0e2a33ea..d62f799b 100644
--- a/doc/reactjs-component-usage.md
+++ b/doc/reactjs-component-usage.md
@@ -6,21 +6,31 @@
- [React JSFiddle](https://jsfiddle.net/nosir/gLLsrxxf/)
-## Usage
-
-### Babel compiler
+## Babel usage
Cleave.js uses ES6 spread / rest feature, and we recommend using Babel compiler to transfer ES6 code.
-However, if your project doesn't support it, you can still refer to the [legacy way](#legacy-way).
+However, if for some reason you would like to just refer to the final bundled script, check the [legacy way](#legacy-way).
-First install babel presets:
+First, install babel presets:
```bash
npm install --save babel-preset-es2015 babel-preset-react babel-preset-stage-0
```
-And in `.babelrc`:
+For `Browserify`, also do:
+
+```bash
+npm install --save babelify
+```
+
+For `Webpack`, also do:
+
+```bask
+npm install --save babel-core babel-loader
+```
+
+Second, add `.babelrc` to your project root:
```json
{
@@ -93,15 +103,45 @@ class MyComponent extends React.Component {
ReactDOM.render(, document.getElementById('content'));
```
-### Legacy way
+### Webpack and Browserify config
-If your project doesn't support ES6 compiling, just include cleave.js like this. It will expose `Cleave` variable to global:
+#### Webpack
```js
-var React = require('...');
+loaders: [
+ {
+ test: ...,
+ exclude: /node_modules\/(?!cleave.js)/,
+ loader: 'babel',
+ query: {
+ presets: ['es2015', 'react', 'stage-0']
+ }
+ }
+]
+```
+
+#### Browserify
-require('cleave.js/dist/cleave-react');
-require('cleave.js/dist/addons/cleave-phone.{country}.js');
+```js
+browserify(...).transform('babelify', {presets: ['es2015', 'react', 'stage-0']})...
+```
+
+## Legacy way
+
+If for some reason you would like to just refer to the final bundled script (e.g. your project doesn't support ES6 compiling), you can include cleave.js like this.
+
+It will also expose `Cleave` variable to global:
+
+```js
+import Cleave from 'cleave.js/dist/cleave-react';
+import CleavePhone from 'cleave.js/dist/addons/cleave-phone.{country}';
+```
+
+or
+
+```js
+var Cleave = require('cleave.js/dist/cleave-react');
+var CleavePhone = require('cleave.js/dist/addons/cleave-phone.{country}');
```
And define the component:
@@ -126,7 +166,7 @@ var MyComponent = React.createClass({
});
```
-### Shim
+## Shim
Alternatively you can shim `Cleave.js` module. In your html:
diff --git a/gulp-tasks/browserify.js b/gulp-tasks/browserify.js
index 404e7ad4..d68d3b29 100644
--- a/gulp-tasks/browserify.js
+++ b/gulp-tasks/browserify.js
@@ -50,9 +50,22 @@ gulp.task('js:react:watch', function () {
return w;
});
-gulp.task('js:react', function () {
- options.entries = [path.join(paths.root, entry)];
- options.plugin = [errorify];
-
- return bundle(browserify(options), entry);
-});
+/**
+ * This task is replaced by webpack
+ *
+ * I like browserify but sadly webpack doesn't
+ * support loading the bundled file
+ * generated by browserify in bundling :(
+ *
+ * https://github.com/webpack/webpack/issues/1617
+ *
+ * The other way around, browserify supports webpack bundled file,
+ * hence we will use the webpack bundled script
+ *
+ */
+//gulp.task('js:react', function () {
+// options.entries = [path.join(paths.root, entry)];
+// options.plugin = [errorify];
+//
+// return bundle(browserify(options), entry);
+//});
diff --git a/gulp-tasks/build.js b/gulp-tasks/build.js
index 833297fe..8da10d4d 100644
--- a/gulp-tasks/build.js
+++ b/gulp-tasks/build.js
@@ -50,4 +50,4 @@ gulp.task('js', function () {
.pipe(gulp.dest(paths.dist));
});
-gulp.task('build', gulpsync.sync(['js', 'js:react', 'js:react:webpack', 'min']));
+gulp.task('build', gulpsync.sync(['js', 'js:react', 'min']));
diff --git a/gulp-tasks/webpack.js b/gulp-tasks/webpack.js
index 38423d7a..13e81a47 100644
--- a/gulp-tasks/webpack.js
+++ b/gulp-tasks/webpack.js
@@ -10,14 +10,14 @@ var paths = {
var entry = 'react.js';
-gulp.task('js:react:webpack', function () {
+gulp.task('js:react', function () {
return gulp.src(path.join(paths.root, entry))
.pipe(webpack({
entry: './src/Cleave.react.js',
output: {
library: 'Cleave',
libraryTarget: 'umd',
- filename: 'cleave-react.webpack.js'
+ filename: 'cleave-react.js'
},
module: {
loaders: [
diff --git a/package.json b/package.json
index 93fc160c..cd420563 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
"form",
"input"
],
- "version": "0.5.1",
+ "version": "0.5.2",
"author": {
"name": "Max Huang",
"url": "http://github.com/nosir",