New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

vue-currency-input

Package Overview
Dependencies
Maintainers
1
Versions
91
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vue-currency-input - npm Package Compare versions

Comparing version 1.12.1 to 1.13.0

src/utils/equal.js

153

dist/vue-currency-input.esm.js
/**
* Vue Currency Input 1.12.1
* Vue Currency Input 1.13.0
* (c) 2019 Matthias Stiller

@@ -11,7 +11,8 @@ * @license MIT

var ns = numberFormat.format(-1);
var decimalLength = (ps.match(/0/g) || []).length;
var decimalSymbol = decimalLength > 0 ? ps.substr(ps.indexOf('6') + 1, 1) : null;
var minimumFractionDigits = numberFormat.resolvedOptions().minimumFractionDigits || 0;
var maximumFractionDigits = numberFormat.resolvedOptions().maximumFractionDigits || 0;
var decimalSymbol = minimumFractionDigits > 0 ? ps.substr(ps.indexOf('6') + 1, 1) : null;
var prefix = ps.substring(0, ps.indexOf('1'));
var negativePrefix = ns.substring(0, ns.indexOf('1'));
var suffix = ps.substring(ps.lastIndexOf(decimalLength > 0 ? '0' : '6') + 1);
var suffix = ps.substring(ps.lastIndexOf(minimumFractionDigits > 0 ? '0' : '6') + 1);
var groupingSymbol = ps.substr(ps.indexOf('3') + 1, 1);

@@ -24,3 +25,4 @@ return {

decimalSymbol: decimalSymbol,
decimalLength: decimalLength
minimumFractionDigits: minimumFractionDigits,
maximumFractionDigits: maximumFractionDigits
}

@@ -31,11 +33,17 @@ };

var currency = ref.currency;
var decimalLength = ref.decimalLength;
var precision = ref.precision;
var autoDecimalMode = ref.autoDecimalMode;
var valueAsInteger = ref.valueAsInteger;
var minimumFractionDigits = 2;
if (decimalLength !== undefined) {
minimumFractionDigits = decimalLength;
var maximumFractionDigits = 2;
if (typeof precision === 'number') {
minimumFractionDigits = maximumFractionDigits = precision;
} else if (typeof precision === 'object' && !autoDecimalMode && !valueAsInteger) {
minimumFractionDigits = precision.min || 0;
maximumFractionDigits = precision.max !== undefined ? precision.max : 20;
}
if (currency == null) {
return createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits }))
return createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits, maximumFractionDigits: maximumFractionDigits }))
} else if (typeof currency === 'object') {
return Object.assign({}, createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits })),
return Object.assign({}, createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits, maximumFractionDigits: maximumFractionDigits })),
{prefix: currency.prefix || '',

@@ -45,5 +53,10 @@ negativePrefix: ("-" + (currency.prefix || '')),

} else {
var currencyFormat = createCurrencyFormat(new Intl.NumberFormat(locale, { style: 'currency', currency: currency }));
if (currencyFormat.decimalLength > 0 && decimalLength !== undefined) {
currencyFormat.decimalLength = decimalLength;
var currencyFormat = createCurrencyFormat(new Intl.NumberFormat(locale, { currency: currency, style: 'currency' }));
if (precision !== undefined) {
if (currencyFormat.minimumFractionDigits > 0) {
currencyFormat.minimumFractionDigits = minimumFractionDigits;
}
if (currencyFormat.maximumFractionDigits > 0) {
currencyFormat.maximumFractionDigits = maximumFractionDigits;
}
}

@@ -63,14 +76,2 @@ return currencyFormat

};
var removePrefix = function (str, prefix) {
if (prefix && startsWith(str, prefix)) {
return str.substr(prefix.length)
}
return str
};
var removeSuffix = function (str, suffix) {
if (suffix && endsWith(str, suffix)) {
return str.slice(0, suffix.length * -1)
}
return str
};
var stripCurrencySymbolAndMinusSign = function (str, ref) {

@@ -81,3 +82,3 @@ var prefix = ref.prefix;

return {
value: removePrefix(value, '-'),
value: value.replace('-', ''),
negative: startsWith(value, '-')

@@ -88,5 +89,9 @@ }

var getNumber = function (number, valueAsInteger, decimalLength) {
return number != null && valueAsInteger ? Number(number.toFixed(decimalLength).split('.').join('')) : number
var toInteger = function (number, valueAsInteger, fractionDigits) {
return valueAsInteger ? Number(number.toFixed(fractionDigits).split('.').join('')) : number
};
var toFloat = function (number, valueAsInteger, fractionDigits) {
return valueAsInteger ? number / Math.pow(10, fractionDigits) : number
};
function parse (str, currencyFormat, valueAsInteger) {

@@ -96,3 +101,3 @@ if ( valueAsInteger === void 0 ) valueAsInteger = false;

if (isNumber(str)) {
return getNumber(Number(str), valueAsInteger, currencyFormat.decimalLength)
return toInteger(Number(str), valueAsInteger, currencyFormat.minimumFractionDigits)
}

@@ -122,3 +127,3 @@ var ref = stripCurrencySymbolAndMinusSign(str, currencyFormat);

}
return getNumber(Number(number), valueAsInteger, currencyFormat.decimalLength)
return toInteger(Number(number), valueAsInteger, currencyFormat.minimumFractionDigits)
}

@@ -136,3 +141,3 @@ }

distractionFree: true,
decimalLength: undefined,
precision: undefined,
autoDecimalMode: false,

@@ -148,3 +153,3 @@ min: null,

var decimalSymbol = currencyFormat.decimalSymbol;
var decimalLength = currencyFormat.decimalLength;
var maximumFractionDigits = currencyFormat.maximumFractionDigits;
var groupingSymbol = currencyFormat.groupingSymbol;

@@ -159,3 +164,3 @@ var decimalSymbolPosition = inputtedValue.indexOf(decimalSymbol) + 1;

if (!options.autoDecimalMode && decimalSymbolPosition !== 0 && caretPosition > decimalSymbolPosition) {
if (onlyDigits(removeSuffix(inputtedValue.substr(decimalSymbolPosition), suffix)).length - 1 === decimalLength) {
if (onlyDigits(inputtedValue.substr(decimalSymbolPosition)).length - 1 === maximumFractionDigits) {
caretPositionFromLeft -= 1;

@@ -192,10 +197,10 @@ }

var decimalSymbol = formatConfig.decimalSymbol;
var decimalLength = formatConfig.decimalLength;
var maximumFractionDigits = formatConfig.maximumFractionDigits;
if (value === '' && negative && previousConformedValue !== negativePrefix) {
return ("" + negativePrefix + suffix)
} else if (decimalLength > 0) {
} else if (maximumFractionDigits > 0) {
if (isFractionIncomplete(value, formatConfig)) {
return ("" + (negative ? negativePrefix : prefix) + value + suffix)
} else if (startsWith(value, decimalSymbol)) {
return ((negative ? negativePrefix : prefix) + "0" + decimalSymbol + ((onlyDigits(value.substr(1)).substr(0, decimalLength))) + suffix)
return ((negative ? negativePrefix : prefix) + "0" + decimalSymbol + ((onlyDigits(value.substr(1)).substr(0, maximumFractionDigits))) + suffix)
}

@@ -206,3 +211,3 @@ }

var getAutoDecimalModeConformedValue = function (value, previousConformedValue, ref) {
var decimalLength = ref.decimalLength;
var minimumFractionDigits = ref.minimumFractionDigits;
if (value === '') {

@@ -212,6 +217,6 @@ return { conformedValue: '' }

var negative = startsWith(value, '-');
var conformedValue = value === '-' ? Number(-0) : Number(("" + (negative ? '-' : '') + (removeLeadingZeros(onlyDigits(value))))) / Math.pow(10, decimalLength);
var conformedValue = value === '-' ? Number(-0) : Number(("" + (negative ? '-' : '') + (removeLeadingZeros(onlyDigits(value))))) / Math.pow(10, minimumFractionDigits);
return {
conformedValue: conformedValue,
fractionDigits: conformedValue.toFixed(decimalLength).slice(-decimalLength)
fractionDigits: conformedValue.toFixed(minimumFractionDigits).slice(-minimumFractionDigits)
}

@@ -225,3 +230,3 @@ }

str = str.trim();
if (options.autoDecimalMode) {
if (formatConfig.minimumFractionDigits > 0 && options.autoDecimalMode) {
return getAutoDecimalModeConformedValue(str, previousConformedValue, formatConfig)

@@ -240,3 +245,3 @@ }

var integerDigits = removeLeadingZeros(onlyDigits(integer));
var fractionDigits = onlyDigits(fraction.join('')).substr(0, formatConfig.decimalLength);
var fractionDigits = onlyDigits(fraction.join('')).substr(0, formatConfig.maximumFractionDigits);
if (isFractionInvalid(fraction, fractionDigits.length)) {

@@ -269,2 +274,19 @@ return { conformedValue: previousConformedValue }

var equal = function (a, b) {
if (a === b) {
return true
}
if (a.valueOf !== Object.prototype.valueOf) {
return a.valueOf() === b.valueOf()
}
var keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) {
return false
}
if (!keys.every(Object.prototype.hasOwnProperty.bind(b))) {
return false
}
return keys.every(function (key) { return equal(a[key], b[key]); })
};
var init = function (el, optionsFromBinding, defaultOptions) {

@@ -305,11 +327,13 @@ var inputElement = el.tagName.toLowerCase() === 'input' ? el : el.querySelector('input');

var locale = ref_options.locale;
var decimalLength = ref.currencyFormat.decimalLength;
var ref_currencyFormat = ref.currencyFormat;
var minimumFractionDigits = ref_currencyFormat.minimumFractionDigits;
var maximumFractionDigits = ref_currencyFormat.maximumFractionDigits;
if (min != null && (value == null || value < min)) {
value = min;
}
if (max != null && value > max) {
value = max;
}
if (value != null) {
if (min != null && value < min) {
value = min;
}
if (max != null && value > max) {
value = max;
}
value = new Intl.NumberFormat(locale, { minimumFractionDigits: decimalLength, maximumFractionDigits: decimalLength }).format(value);
value = new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits, maximumFractionDigits: maximumFractionDigits }).format(value);
}

@@ -339,3 +363,4 @@ format(el, value);

useGrouping: !hideGroupingSymbolOnFocus(el),
minimumFractionDigits: hideNegligibleDecimalDigitsOnFocus(el) ? fractionDigits.replace(/0+$/, '').length : Math.min(formatConfig.decimalLength, fractionDigits.length)
minimumFractionDigits: hideNegligibleDecimalDigitsOnFocus(el) ? fractionDigits.replace(/0+$/, '').length : Math.min(formatConfig.minimumFractionDigits, fractionDigits.length),
maximumFractionDigits: formatConfig.maximumFractionDigits
}).format(Math.abs(conformedValue));

@@ -347,3 +372,3 @@ var isNegativeZero = conformedValue === 0 && (1 / conformedValue < 0);

el.value = conformedValue;
el.$ci.numberValue = parse(el.value, formatConfig, options.valueAsInteger);
el.$ci.numberValue = parse(el.value, formatConfig, false);
}

@@ -357,11 +382,11 @@ } else {

updateInputValue(el, value);
var numberValue = getNumber(el.$ci.numberValue, el.$ci.options.valueAsInteger, el.$ci.currencyFormat.decimalLength);
var ref = el.$ci;
var numberValue = ref.numberValue;
var currencyFormat = ref.currencyFormat;
var options = ref.options;
if (numberValue != null) {
numberValue = toInteger(numberValue, options.valueAsInteger, currencyFormat.maximumFractionDigits);
}
dispatchEvent(el, 'format-complete', { numberValue: numberValue });
};
var toFloat = function (number, options, currencyFormat) {
if (options.valueAsInteger) {
return number / Math.pow(10, currencyFormat.decimalLength)
}
return number
};
var addEventListener = function (el) {

@@ -386,3 +411,3 @@ el.addEventListener('input', function () {

if (!focus) {
applyFixedFractionFormat(el, toFloat(detail.value, options, currencyFormat));
applyFixedFractionFormat(el, toFloat(detail.value, options.valueAsInteger, currencyFormat.maximumFractionDigits));
}

@@ -421,5 +446,3 @@ });

var options = inputElement_$ci.options;
if (value) {
applyFixedFractionFormat(inputElement, toFloat(parse(value, currencyFormat), options, currencyFormat));
}
applyFixedFractionFormat(inputElement, toFloat(parse(value, currencyFormat), options.valueAsInteger, currencyFormat.maximumFractionDigits));
});

@@ -432,3 +455,3 @@ addEventListener(inputElement);

var context = ref$1.context;
if (!!value && Object.keys(DEFAULT_OPTIONS).some(function (key) { return oldValue[key] !== value[key]; })) {
if (!equal(value, oldValue)) {
var inputElement = init(el, value, context.$CI_DEFAULT_OPTIONS || DEFAULT_OPTIONS);

@@ -475,4 +498,4 @@ applyFixedFractionFormat(inputElement, inputElement.$ci.numberValue);

},
decimalLength: {
type: Number,
precision: {
type: [Number, Object],
default: undefined

@@ -479,0 +502,0 @@ },

/**
* Vue Currency Input 1.12.1
* Vue Currency Input 1.13.0
* (c) 2019 Matthias Stiller

@@ -17,7 +17,8 @@ * @license MIT

var ns = numberFormat.format(-1);
var decimalLength = (ps.match(/0/g) || []).length;
var decimalSymbol = decimalLength > 0 ? ps.substr(ps.indexOf('6') + 1, 1) : null;
var minimumFractionDigits = numberFormat.resolvedOptions().minimumFractionDigits || 0;
var maximumFractionDigits = numberFormat.resolvedOptions().maximumFractionDigits || 0;
var decimalSymbol = minimumFractionDigits > 0 ? ps.substr(ps.indexOf('6') + 1, 1) : null;
var prefix = ps.substring(0, ps.indexOf('1'));
var negativePrefix = ns.substring(0, ns.indexOf('1'));
var suffix = ps.substring(ps.lastIndexOf(decimalLength > 0 ? '0' : '6') + 1);
var suffix = ps.substring(ps.lastIndexOf(minimumFractionDigits > 0 ? '0' : '6') + 1);
var groupingSymbol = ps.substr(ps.indexOf('3') + 1, 1);

@@ -30,3 +31,4 @@ return {

decimalSymbol: decimalSymbol,
decimalLength: decimalLength
minimumFractionDigits: minimumFractionDigits,
maximumFractionDigits: maximumFractionDigits
}

@@ -37,11 +39,17 @@ };

var currency = ref.currency;
var decimalLength = ref.decimalLength;
var precision = ref.precision;
var autoDecimalMode = ref.autoDecimalMode;
var valueAsInteger = ref.valueAsInteger;
var minimumFractionDigits = 2;
if (decimalLength !== undefined) {
minimumFractionDigits = decimalLength;
var maximumFractionDigits = 2;
if (typeof precision === 'number') {
minimumFractionDigits = maximumFractionDigits = precision;
} else if (typeof precision === 'object' && !autoDecimalMode && !valueAsInteger) {
minimumFractionDigits = precision.min || 0;
maximumFractionDigits = precision.max !== undefined ? precision.max : 20;
}
if (currency == null) {
return createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits }))
return createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits, maximumFractionDigits: maximumFractionDigits }))
} else if (typeof currency === 'object') {
return Object.assign({}, createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits })),
return Object.assign({}, createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits, maximumFractionDigits: maximumFractionDigits })),
{prefix: currency.prefix || '',

@@ -51,5 +59,10 @@ negativePrefix: ("-" + (currency.prefix || '')),

} else {
var currencyFormat = createCurrencyFormat(new Intl.NumberFormat(locale, { style: 'currency', currency: currency }));
if (currencyFormat.decimalLength > 0 && decimalLength !== undefined) {
currencyFormat.decimalLength = decimalLength;
var currencyFormat = createCurrencyFormat(new Intl.NumberFormat(locale, { currency: currency, style: 'currency' }));
if (precision !== undefined) {
if (currencyFormat.minimumFractionDigits > 0) {
currencyFormat.minimumFractionDigits = minimumFractionDigits;
}
if (currencyFormat.maximumFractionDigits > 0) {
currencyFormat.maximumFractionDigits = maximumFractionDigits;
}
}

@@ -69,14 +82,2 @@ return currencyFormat

};
var removePrefix = function (str, prefix) {
if (prefix && startsWith(str, prefix)) {
return str.substr(prefix.length)
}
return str
};
var removeSuffix = function (str, suffix) {
if (suffix && endsWith(str, suffix)) {
return str.slice(0, suffix.length * -1)
}
return str
};
var stripCurrencySymbolAndMinusSign = function (str, ref) {

@@ -87,3 +88,3 @@ var prefix = ref.prefix;

return {
value: removePrefix(value, '-'),
value: value.replace('-', ''),
negative: startsWith(value, '-')

@@ -94,5 +95,9 @@ }

var getNumber = function (number, valueAsInteger, decimalLength) {
return number != null && valueAsInteger ? Number(number.toFixed(decimalLength).split('.').join('')) : number
var toInteger = function (number, valueAsInteger, fractionDigits) {
return valueAsInteger ? Number(number.toFixed(fractionDigits).split('.').join('')) : number
};
var toFloat = function (number, valueAsInteger, fractionDigits) {
return valueAsInteger ? number / Math.pow(10, fractionDigits) : number
};
function parse (str, currencyFormat, valueAsInteger) {

@@ -102,3 +107,3 @@ if ( valueAsInteger === void 0 ) valueAsInteger = false;

if (isNumber(str)) {
return getNumber(Number(str), valueAsInteger, currencyFormat.decimalLength)
return toInteger(Number(str), valueAsInteger, currencyFormat.minimumFractionDigits)
}

@@ -128,3 +133,3 @@ var ref = stripCurrencySymbolAndMinusSign(str, currencyFormat);

}
return getNumber(Number(number), valueAsInteger, currencyFormat.decimalLength)
return toInteger(Number(number), valueAsInteger, currencyFormat.minimumFractionDigits)
}

@@ -142,3 +147,3 @@ }

distractionFree: true,
decimalLength: undefined,
precision: undefined,
autoDecimalMode: false,

@@ -154,3 +159,3 @@ min: null,

var decimalSymbol = currencyFormat.decimalSymbol;
var decimalLength = currencyFormat.decimalLength;
var maximumFractionDigits = currencyFormat.maximumFractionDigits;
var groupingSymbol = currencyFormat.groupingSymbol;

@@ -165,3 +170,3 @@ var decimalSymbolPosition = inputtedValue.indexOf(decimalSymbol) + 1;

if (!options.autoDecimalMode && decimalSymbolPosition !== 0 && caretPosition > decimalSymbolPosition) {
if (onlyDigits(removeSuffix(inputtedValue.substr(decimalSymbolPosition), suffix)).length - 1 === decimalLength) {
if (onlyDigits(inputtedValue.substr(decimalSymbolPosition)).length - 1 === maximumFractionDigits) {
caretPositionFromLeft -= 1;

@@ -198,10 +203,10 @@ }

var decimalSymbol = formatConfig.decimalSymbol;
var decimalLength = formatConfig.decimalLength;
var maximumFractionDigits = formatConfig.maximumFractionDigits;
if (value === '' && negative && previousConformedValue !== negativePrefix) {
return ("" + negativePrefix + suffix)
} else if (decimalLength > 0) {
} else if (maximumFractionDigits > 0) {
if (isFractionIncomplete(value, formatConfig)) {
return ("" + (negative ? negativePrefix : prefix) + value + suffix)
} else if (startsWith(value, decimalSymbol)) {
return ((negative ? negativePrefix : prefix) + "0" + decimalSymbol + ((onlyDigits(value.substr(1)).substr(0, decimalLength))) + suffix)
return ((negative ? negativePrefix : prefix) + "0" + decimalSymbol + ((onlyDigits(value.substr(1)).substr(0, maximumFractionDigits))) + suffix)
}

@@ -212,3 +217,3 @@ }

var getAutoDecimalModeConformedValue = function (value, previousConformedValue, ref) {
var decimalLength = ref.decimalLength;
var minimumFractionDigits = ref.minimumFractionDigits;
if (value === '') {

@@ -218,6 +223,6 @@ return { conformedValue: '' }

var negative = startsWith(value, '-');
var conformedValue = value === '-' ? Number(-0) : Number(("" + (negative ? '-' : '') + (removeLeadingZeros(onlyDigits(value))))) / Math.pow(10, decimalLength);
var conformedValue = value === '-' ? Number(-0) : Number(("" + (negative ? '-' : '') + (removeLeadingZeros(onlyDigits(value))))) / Math.pow(10, minimumFractionDigits);
return {
conformedValue: conformedValue,
fractionDigits: conformedValue.toFixed(decimalLength).slice(-decimalLength)
fractionDigits: conformedValue.toFixed(minimumFractionDigits).slice(-minimumFractionDigits)
}

@@ -231,3 +236,3 @@ }

str = str.trim();
if (options.autoDecimalMode) {
if (formatConfig.minimumFractionDigits > 0 && options.autoDecimalMode) {
return getAutoDecimalModeConformedValue(str, previousConformedValue, formatConfig)

@@ -246,3 +251,3 @@ }

var integerDigits = removeLeadingZeros(onlyDigits(integer));
var fractionDigits = onlyDigits(fraction.join('')).substr(0, formatConfig.decimalLength);
var fractionDigits = onlyDigits(fraction.join('')).substr(0, formatConfig.maximumFractionDigits);
if (isFractionInvalid(fraction, fractionDigits.length)) {

@@ -275,2 +280,19 @@ return { conformedValue: previousConformedValue }

var equal = function (a, b) {
if (a === b) {
return true
}
if (a.valueOf !== Object.prototype.valueOf) {
return a.valueOf() === b.valueOf()
}
var keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) {
return false
}
if (!keys.every(Object.prototype.hasOwnProperty.bind(b))) {
return false
}
return keys.every(function (key) { return equal(a[key], b[key]); })
};
var init = function (el, optionsFromBinding, defaultOptions) {

@@ -311,11 +333,13 @@ var inputElement = el.tagName.toLowerCase() === 'input' ? el : el.querySelector('input');

var locale = ref_options.locale;
var decimalLength = ref.currencyFormat.decimalLength;
var ref_currencyFormat = ref.currencyFormat;
var minimumFractionDigits = ref_currencyFormat.minimumFractionDigits;
var maximumFractionDigits = ref_currencyFormat.maximumFractionDigits;
if (min != null && (value == null || value < min)) {
value = min;
}
if (max != null && value > max) {
value = max;
}
if (value != null) {
if (min != null && value < min) {
value = min;
}
if (max != null && value > max) {
value = max;
}
value = new Intl.NumberFormat(locale, { minimumFractionDigits: decimalLength, maximumFractionDigits: decimalLength }).format(value);
value = new Intl.NumberFormat(locale, { minimumFractionDigits: minimumFractionDigits, maximumFractionDigits: maximumFractionDigits }).format(value);
}

@@ -345,3 +369,4 @@ format(el, value);

useGrouping: !hideGroupingSymbolOnFocus(el),
minimumFractionDigits: hideNegligibleDecimalDigitsOnFocus(el) ? fractionDigits.replace(/0+$/, '').length : Math.min(formatConfig.decimalLength, fractionDigits.length)
minimumFractionDigits: hideNegligibleDecimalDigitsOnFocus(el) ? fractionDigits.replace(/0+$/, '').length : Math.min(formatConfig.minimumFractionDigits, fractionDigits.length),
maximumFractionDigits: formatConfig.maximumFractionDigits
}).format(Math.abs(conformedValue));

@@ -353,3 +378,3 @@ var isNegativeZero = conformedValue === 0 && (1 / conformedValue < 0);

el.value = conformedValue;
el.$ci.numberValue = parse(el.value, formatConfig, options.valueAsInteger);
el.$ci.numberValue = parse(el.value, formatConfig, false);
}

@@ -363,11 +388,11 @@ } else {

updateInputValue(el, value);
var numberValue = getNumber(el.$ci.numberValue, el.$ci.options.valueAsInteger, el.$ci.currencyFormat.decimalLength);
var ref = el.$ci;
var numberValue = ref.numberValue;
var currencyFormat = ref.currencyFormat;
var options = ref.options;
if (numberValue != null) {
numberValue = toInteger(numberValue, options.valueAsInteger, currencyFormat.maximumFractionDigits);
}
dispatchEvent(el, 'format-complete', { numberValue: numberValue });
};
var toFloat = function (number, options, currencyFormat) {
if (options.valueAsInteger) {
return number / Math.pow(10, currencyFormat.decimalLength)
}
return number
};
var addEventListener = function (el) {

@@ -392,3 +417,3 @@ el.addEventListener('input', function () {

if (!focus) {
applyFixedFractionFormat(el, toFloat(detail.value, options, currencyFormat));
applyFixedFractionFormat(el, toFloat(detail.value, options.valueAsInteger, currencyFormat.maximumFractionDigits));
}

@@ -427,5 +452,3 @@ });

var options = inputElement_$ci.options;
if (value) {
applyFixedFractionFormat(inputElement, toFloat(parse(value, currencyFormat), options, currencyFormat));
}
applyFixedFractionFormat(inputElement, toFloat(parse(value, currencyFormat), options.valueAsInteger, currencyFormat.maximumFractionDigits));
});

@@ -438,3 +461,3 @@ addEventListener(inputElement);

var context = ref$1.context;
if (!!value && Object.keys(DEFAULT_OPTIONS).some(function (key) { return oldValue[key] !== value[key]; })) {
if (!equal(value, oldValue)) {
var inputElement = init(el, value, context.$CI_DEFAULT_OPTIONS || DEFAULT_OPTIONS);

@@ -481,4 +504,4 @@ applyFixedFractionFormat(inputElement, inputElement.$ci.numberValue);

},
decimalLength: {
type: Number,
precision: {
type: [Number, Object],
default: undefined

@@ -485,0 +508,0 @@ },

{
"name": "vue-currency-input",
"description": "Easy input of currency formatted numbers for Vue.js.",
"version": "1.12.1",
"version": "1.13.0",
"license": "MIT",

@@ -33,3 +33,3 @@ "unpkg": "dist/vue-currency-input.umd.js",

"lint": "vue-cli-service lint",
"test:unit": "vue-cli-service test:unit --silent",
"test:unit": "vue-cli-service test:unit",
"docs:dev": "vuepress dev docs",

@@ -36,0 +36,0 @@ "docs:build": "vuepress build docs"

@@ -39,4 +39,4 @@ import defaultOptions from './defaultOptions'

},
decimalLength: {
type: Number,
precision: {
type: [Number, Object],
default: undefined

@@ -43,0 +43,0 @@ },

@@ -6,3 +6,3 @@ export default {

distractionFree: true,
decimalLength: undefined,
precision: undefined,
autoDecimalMode: false,

@@ -9,0 +9,0 @@ min: null,

@@ -7,3 +7,5 @@ import Vue from 'vue'

import dispatchEvent from './utils/dispatchEvent'
import parse, { getNumber } from './utils/parse'
import parse from './utils/parse'
import equal from './utils/equal'
import { toFloat, toInteger } from './utils/numberUtils'

@@ -40,11 +42,11 @@ const init = (el, optionsFromBinding, defaultOptions) => {

const applyFixedFractionFormat = (el, value) => {
const { options: { min, max, locale }, currencyFormat: { decimalLength } } = el.$ci
const { options: { min, max, locale }, currencyFormat: { minimumFractionDigits, maximumFractionDigits } } = el.$ci
if (min != null && (value == null || value < min)) {
value = min
}
if (max != null && value > max) {
value = max
}
if (value != null) {
if (min != null && value < min) {
value = min
}
if (max != null && value > max) {
value = max
}
value = new Intl.NumberFormat(locale, { minimumFractionDigits: decimalLength, maximumFractionDigits: decimalLength }).format(value)
value = new Intl.NumberFormat(locale, { minimumFractionDigits, maximumFractionDigits }).format(value)
}

@@ -73,3 +75,4 @@ format(el, value)

useGrouping: !hideGroupingSymbolOnFocus(el),
minimumFractionDigits: hideNegligibleDecimalDigitsOnFocus(el) ? fractionDigits.replace(/0+$/, '').length : Math.min(formatConfig.decimalLength, fractionDigits.length)
minimumFractionDigits: hideNegligibleDecimalDigitsOnFocus(el) ? fractionDigits.replace(/0+$/, '').length : Math.min(formatConfig.minimumFractionDigits, fractionDigits.length),
maximumFractionDigits: formatConfig.maximumFractionDigits
}).format(Math.abs(conformedValue))

@@ -81,3 +84,3 @@ const isNegativeZero = conformedValue === 0 && (1 / conformedValue < 0)

el.value = conformedValue
el.$ci.numberValue = parse(el.value, formatConfig, options.valueAsInteger)
el.$ci.numberValue = parse(el.value, formatConfig, false)
}

@@ -92,13 +95,9 @@ } else {

updateInputValue(el, value)
const numberValue = getNumber(el.$ci.numberValue, el.$ci.options.valueAsInteger, el.$ci.currencyFormat.decimalLength)
let { numberValue, currencyFormat, options } = el.$ci
if (numberValue != null) {
numberValue = toInteger(numberValue, options.valueAsInteger, currencyFormat.maximumFractionDigits)
}
dispatchEvent(el, 'format-complete', { numberValue })
}
const toFloat = (number, options, currencyFormat) => {
if (options.valueAsInteger) {
return number / Math.pow(10, currencyFormat.decimalLength)
}
return number
}
const addEventListener = (el) => {

@@ -116,3 +115,3 @@ el.addEventListener('input', () => {

if (!focus) {
applyFixedFractionFormat(el, toFloat(detail.value, options, currencyFormat))
applyFixedFractionFormat(el, toFloat(detail.value, options.valueAsInteger, currencyFormat.maximumFractionDigits))
}

@@ -147,5 +146,3 @@ })

const { value, $ci: { currencyFormat, options } } = inputElement
if (value) {
applyFixedFractionFormat(inputElement, toFloat(parse(value, currencyFormat), options, currencyFormat))
}
applyFixedFractionFormat(inputElement, toFloat(parse(value, currencyFormat), options.valueAsInteger, currencyFormat.maximumFractionDigits))
})

@@ -155,3 +152,3 @@ addEventListener(inputElement)

componentUpdated (el, { value, oldValue }, { context }) {
if (!!value && Object.keys(defaultOptions).some((key) => oldValue[key] !== value[key])) {
if (!equal(value, oldValue)) {
const inputElement = init(el, value, context.$CI_DEFAULT_OPTIONS || defaultOptions)

@@ -158,0 +155,0 @@ applyFixedFractionFormat(inputElement, inputElement.$ci.numberValue)

@@ -14,2 +14,7 @@ import Vue, { Component, DirectiveOptions } from 'vue'

interface PrecisionOptions {
min: number,
max: number
}
interface CurrencyInputOptions {

@@ -20,3 +25,3 @@ locale: string,

distractionFree: boolean | DistractionFreeOptions,
decimalLength: number,
precision: number | PrecisionOptions,
autoDecimalMode: boolean,

@@ -23,0 +28,0 @@ min: number,

@@ -1,2 +0,2 @@

import { count, onlyDigits, removeSuffix } from './formatHelper'
import { count, onlyDigits } from './stringUtils'

@@ -6,3 +6,3 @@ export const setCaretPosition = (el, position) => el.setSelectionRange(position, position)

export const getCaretPositionAfterFormat = (newValue, inputtedValue, caretPosition, currencyFormat, options) => {
const { prefix, suffix, decimalSymbol, decimalLength, groupingSymbol } = currencyFormat
const { prefix, suffix, decimalSymbol, maximumFractionDigits, groupingSymbol } = currencyFormat
const decimalSymbolPosition = inputtedValue.indexOf(decimalSymbol) + 1

@@ -17,3 +17,3 @@ let caretPositionFromLeft = inputtedValue.length - caretPosition

if (!options.autoDecimalMode && decimalSymbolPosition !== 0 && caretPosition > decimalSymbolPosition) {
if (onlyDigits(removeSuffix(inputtedValue.substr(decimalSymbolPosition), suffix)).length - 1 === decimalLength) {
if (onlyDigits(inputtedValue.substr(decimalSymbolPosition)).length - 1 === maximumFractionDigits) {
caretPositionFromLeft -= 1

@@ -20,0 +20,0 @@ }

@@ -1,2 +0,2 @@

import { endsWith, isNumber, onlyDigits, removeLeadingZeros, startsWith, stripCurrencySymbolAndMinusSign } from './formatHelper'
import { endsWith, isNumber, onlyDigits, removeLeadingZeros, startsWith, stripCurrencySymbolAndMinusSign } from './stringUtils'

@@ -11,10 +11,10 @@ const isValidInteger = (integer, groupingSymbol) => integer.match(new RegExp(`^-?(0|[1-9]\\d{0,2}(\\${groupingSymbol}?\\d{3})*)$`))

const checkIncompleteValue = (value, negative, previousConformedValue, formatConfig) => {
const { prefix, negativePrefix, suffix, decimalSymbol, decimalLength } = formatConfig
const { prefix, negativePrefix, suffix, decimalSymbol, maximumFractionDigits } = formatConfig
if (value === '' && negative && previousConformedValue !== negativePrefix) {
return `${negativePrefix}${suffix}`
} else if (decimalLength > 0) {
} else if (maximumFractionDigits > 0) {
if (isFractionIncomplete(value, formatConfig)) {
return `${negative ? negativePrefix : prefix}${value}${suffix}`
} else if (startsWith(value, decimalSymbol)) {
return `${negative ? negativePrefix : prefix}0${decimalSymbol}${(onlyDigits(value.substr(1)).substr(0, decimalLength))}${suffix}`
return `${negative ? negativePrefix : prefix}0${decimalSymbol}${(onlyDigits(value.substr(1)).substr(0, maximumFractionDigits))}${suffix}`
}

@@ -25,3 +25,3 @@ }

const getAutoDecimalModeConformedValue = (value, previousConformedValue, { decimalLength }) => {
const getAutoDecimalModeConformedValue = (value, previousConformedValue, { minimumFractionDigits }) => {
if (value === '') {

@@ -31,6 +31,6 @@ return { conformedValue: '' }

const negative = startsWith(value, '-')
const conformedValue = value === '-' ? Number(-0) : Number(`${negative ? '-' : ''}${removeLeadingZeros(onlyDigits(value))}`) / Math.pow(10, decimalLength)
const conformedValue = value === '-' ? Number(-0) : Number(`${negative ? '-' : ''}${removeLeadingZeros(onlyDigits(value))}`) / Math.pow(10, minimumFractionDigits)
return {
conformedValue,
fractionDigits: conformedValue.toFixed(decimalLength).slice(-decimalLength)
fractionDigits: conformedValue.toFixed(minimumFractionDigits).slice(-minimumFractionDigits)
}

@@ -46,3 +46,3 @@ }

if (options.autoDecimalMode) {
if (formatConfig.minimumFractionDigits > 0 && options.autoDecimalMode) {
return getAutoDecimalModeConformedValue(str, previousConformedValue, formatConfig)

@@ -59,3 +59,3 @@ }

const integerDigits = removeLeadingZeros(onlyDigits(integer))
const fractionDigits = onlyDigits(fraction.join('')).substr(0, formatConfig.decimalLength)
const fractionDigits = onlyDigits(fraction.join('')).substr(0, formatConfig.maximumFractionDigits)

@@ -62,0 +62,0 @@ if (isFractionInvalid(fraction, fractionDigits.length)) {

const createCurrencyFormat = (numberFormat) => {
const ps = numberFormat.format(123456)
const ns = numberFormat.format(-1)
const decimalLength = (ps.match(/0/g) || []).length
const decimalSymbol = decimalLength > 0 ? ps.substr(ps.indexOf('6') + 1, 1) : null
const minimumFractionDigits = numberFormat.resolvedOptions().minimumFractionDigits || 0
const maximumFractionDigits = numberFormat.resolvedOptions().maximumFractionDigits || 0
const decimalSymbol = minimumFractionDigits > 0 ? ps.substr(ps.indexOf('6') + 1, 1) : null
const prefix = ps.substring(0, ps.indexOf('1'))
const negativePrefix = ns.substring(0, ns.indexOf('1'))
const suffix = ps.substring(ps.lastIndexOf(decimalLength > 0 ? '0' : '6') + 1)
const suffix = ps.substring(ps.lastIndexOf(minimumFractionDigits > 0 ? '0' : '6') + 1)
const groupingSymbol = ps.substr(ps.indexOf('3') + 1, 1)

@@ -17,16 +18,21 @@

decimalSymbol,
decimalLength
minimumFractionDigits,
maximumFractionDigits
}
}
export default ({ locale, currency, decimalLength }) => {
export default ({ locale, currency, precision, autoDecimalMode, valueAsInteger }) => {
let minimumFractionDigits = 2
if (decimalLength !== undefined) {
minimumFractionDigits = decimalLength
let maximumFractionDigits = 2
if (typeof precision === 'number') {
minimumFractionDigits = maximumFractionDigits = precision
} else if (typeof precision === 'object' && !autoDecimalMode && !valueAsInteger) {
minimumFractionDigits = precision.min || 0
maximumFractionDigits = precision.max !== undefined ? precision.max : 20
}
if (currency == null) {
return createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits }))
return createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits, maximumFractionDigits }))
} else if (typeof currency === 'object') {
return {
...createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits })),
...createCurrencyFormat(new Intl.NumberFormat(locale, { minimumFractionDigits, maximumFractionDigits })),
prefix: currency.prefix || '',

@@ -37,5 +43,10 @@ negativePrefix: `-${currency.prefix || ''}`,

} else {
const currencyFormat = createCurrencyFormat(new Intl.NumberFormat(locale, { style: 'currency', currency }))
if (currencyFormat.decimalLength > 0 && decimalLength !== undefined) {
currencyFormat.decimalLength = decimalLength
const currencyFormat = createCurrencyFormat(new Intl.NumberFormat(locale, { currency, style: 'currency' }))
if (precision !== undefined) {
if (currencyFormat.minimumFractionDigits > 0) {
currencyFormat.minimumFractionDigits = minimumFractionDigits
}
if (currencyFormat.maximumFractionDigits > 0) {
currencyFormat.maximumFractionDigits = maximumFractionDigits
}
}

@@ -42,0 +53,0 @@ return currencyFormat

@@ -1,11 +0,8 @@

import { isNumber, stripCurrencySymbolAndMinusSign } from './formatHelper'
import { isNumber, stripCurrencySymbolAndMinusSign } from './stringUtils'
import { toInteger } from './numberUtils'
export const getNumber = (number, valueAsInteger, decimalLength) => {
return number != null && valueAsInteger ? Number(number.toFixed(decimalLength).split('.').join('')) : number
}
export default (str, currencyFormat, valueAsInteger = false) => {
if (typeof str === 'string') {
if (isNumber(str)) {
return getNumber(Number(str), valueAsInteger, currencyFormat.decimalLength)
return toInteger(Number(str), valueAsInteger, currencyFormat.minimumFractionDigits)
}

@@ -33,3 +30,3 @@ let { value, negative } = stripCurrencySymbolAndMinusSign(str, currencyFormat)

}
return getNumber(Number(number), valueAsInteger, currencyFormat.decimalLength)
return toInteger(Number(number), valueAsInteger, currencyFormat.minimumFractionDigits)
}

@@ -36,0 +33,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc