/*! * All material copyright ESRI, All Rights Reserved, unless otherwise specified. * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details. * v1.0.0-beta.82 */ 'use strict'; const number = require('./number-364babbc.js'); const locales = [ "ar", "bg", "bs", "ca", "cs", "da", "de", "de-CH", "el", "en", "en-AU", "en-CA", "en-GB", "es", "es-MX", "et", "fi", "fr", "fr-CH", "he", "hi", "hr", "hu", "id", "it", "it-CH", "ja", "ko", "lt", "lv", "mk", "nb", "nl", "pl", "pt", "pt-PT", "ro", "ru", "sk", "sl", "sr", "sv", "th", "tr", "uk", "vi", "zh-CN", "zh-HK", "zh-TW" ]; const allDecimalsExceptLast = new RegExp(`[.](?=.*[.])`, "g"); const everythingExceptNumbersDecimalsAndMinusSigns = new RegExp("[^0-9-.]", "g"); const defaultGroupSeparator = new RegExp(",", "g"); function createLocaleNumberFormatter(locale) { return new Intl.NumberFormat(locale, { minimumFractionDigits: 0, maximumFractionDigits: 20 }); } function delocalizeNumberString(numberString, locale) { return number.sanitizeExponentialNumberString(numberString, (nonExpoNumString) => { const delocalizedNumberString = nonExpoNumString .replace(getMinusSign(locale), "-") .replace(getGroupSeparator(locale), "") .replace(getDecimalSeparator(locale), ".") .replace(allDecimalsExceptLast, "") .replace(everythingExceptNumbersDecimalsAndMinusSigns, ""); return number.isValidNumber(delocalizedNumberString) ? delocalizedNumberString : nonExpoNumString; }); } function getGroupSeparator(locale) { const formatter = createLocaleNumberFormatter(locale); const parts = formatter.formatToParts(1234567); const value = parts.find((part) => part.type === "group").value; // change whitespace group characters that don't render correctly return value.trim().length === 0 ? " " : value; } function getDecimalSeparator(locale) { const formatter = createLocaleNumberFormatter(locale); const parts = formatter.formatToParts(1.1); return parts.find((part) => part.type === "decimal").value; } function getMinusSign(locale) { const formatter = createLocaleNumberFormatter(locale); const parts = formatter.formatToParts(-9); return parts.find((part) => part.type === "minusSign").value; } function localizeNumberString(numberString, locale, displayGroupSeparator = false) { return number.sanitizeExponentialNumberString(numberString, (nonExpoNumString) => { if (nonExpoNumString) { const number$1 = Number(number.sanitizeDecimalString(nonExpoNumString.replace(defaultGroupSeparator, ""))); if (!isNaN(number$1)) { const formatter = createLocaleNumberFormatter(locale); const parts = formatter.formatToParts(number$1); const localizedNumberString = parts .map(({ type, value }) => { switch (type) { case "group": return displayGroupSeparator ? getGroupSeparator(locale) : ""; case "decimal": return getDecimalSeparator(locale); case "minusSign": return getMinusSign(locale); default: return value; } }) .reduce((string, part) => string + part); return localizedNumberString; } } return nonExpoNumString; }); } exports.delocalizeNumberString = delocalizeNumberString; exports.getDecimalSeparator = getDecimalSeparator; exports.locales = locales; exports.localizeNumberString = localizeNumberString;