UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

195 lines (194 loc) 5.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "ABSENT_VALUE_FORMAT", { enumerable: true, get: function () { return _constants.ABSENT_VALUE_FORMAT; } }); exports.applyDecimalsForPlain = applyDecimalsForPlain; exports.buildReturn = buildReturn; Object.defineProperty(exports, "cleanNumber", { enumerable: true, get: function () { return _cleanNumber.cleanNumber; } }); Object.defineProperty(exports, "enhanceSR", { enumerable: true, get: function () { return _formatNumberCore.enhanceSR; } }); Object.defineProperty(exports, "formatDecimals", { enumerable: true, get: function () { return _decimals.formatDecimals; } }); Object.defineProperty(exports, "formatNumberCore", { enumerable: true, get: function () { return _formatNumberCore.formatNumberCore; } }); exports.formatWith = formatWith; Object.defineProperty(exports, "handleCompactBeforeAria", { enumerable: true, get: function () { return _compact.handleCompactBeforeAria; } }); Object.defineProperty(exports, "handleCompactBeforeDisplay", { enumerable: true, get: function () { return _compact.handleCompactBeforeDisplay; } }); Object.defineProperty(exports, "isAbsent", { enumerable: true, get: function () { return _constants.isAbsent; } }); exports.prepareFormatOptions = prepareFormatOptions; Object.defineProperty(exports, "prepareMinus", { enumerable: true, get: function () { return _formatNumberCore.prepareMinus; } }); exports.resolveLocale = resolveLocale; var _parse = _interopRequireDefault(require("core-js-pure/stable/json/parse.js")); var _defaults = require("../../../shared/defaults.js"); var _componentHelper = require("../../../shared/component-helper.js"); var _constants = require("./constants.js"); var _cleanNumber = require("./cleanNumber.js"); var _decimals = require("./decimals.js"); var _formatNumberCore = require("./formatNumberCore.js"); var _separators = require("./separators.js"); var _compact = require("./compact.js"); var _index = _interopRequireDefault(require("../../../shared/locales/index.js")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function resolveLocale(locale) { if (!locale) { return _defaults.LOCALE; } if (locale === 'auto') { try { return window.navigator.language; } catch (e) { (0, _componentHelper.warn)(e); } } return locale; } function prepareFormatOptions({ options, signDisplay }) { const opts = (typeof options === 'string' && options[0] === '{' ? (0, _parse.default)(options) : options) || {}; if (signDisplay) { opts.signDisplay = signDisplay; } return opts; } function buildReturn({ value, locale, display, aria, type, opts, cleanCopyValue, invalidAriaText }) { let cleanedValue; if (cleanCopyValue) { cleanedValue = (0, _formatNumberCore.formatNumberCore)(opts.style === 'percent' ? Number(value) / 100 : value, locale, opts, item => { switch (item.type) { case 'group': case 'literal': case 'currency': case 'percentSign': item.value = ''; return item; default: return item; } }); } else { const thousandsSeparator = (0, _separators.getThousandsSeparator)(locale); cleanedValue = String(display).replace(new RegExp(`${thousandsSeparator}(?=\\d{3})`, 'g'), ''); } if (value === 'invalid') { var _locales$locale; aria = invalidAriaText || ((_locales$locale = _index.default[locale]) === null || _locales$locale === void 0 ? void 0 : _locales$locale.NumberFormat.notAvailable) || 'N/A'; } return { value, cleanedValue, number: display, aria, locale, type }; } function applyDecimalsForPlain({ value, decimals, rounding, opts }) { if (parseFloat(String(decimals)) >= 0) { return (0, _decimals.formatDecimals)(value, decimals, rounding, opts); } else if (typeof opts.maximumFractionDigits === 'undefined') { opts.maximumFractionDigits = 20; } return value; } function formatWith(type, formatterFn) { function formatter(value, { locale: inputLocale = null, clean = null, options = null, signDisplay = null, returnAria = false, invalidAriaText = null, cleanCopyValue = null } = {}) { value = (0, _constants.isAbsent)(value) ? _constants.ABSENT_VALUE_FORMAT : value; const locale = resolveLocale(inputLocale); const opts = prepareFormatOptions({ options, signDisplay }); if (clean) { value = (0, _cleanNumber.cleanNumber)(value); } const { number: display, aria: initialAria } = formatterFn(value, locale); if (type === 'phone' && clean === null) { value = (0, _cleanNumber.cleanNumber)(value); } if (!returnAria) { return display; } return buildReturn({ value, locale, display, aria: initialAria, type, opts, cleanCopyValue, invalidAriaText }); } return formatter; } //# sourceMappingURL=formatCore.js.map