{"version":3,"file":"statistic_entry_controller-DC3LKWvR.js","sources":["../../../node_modules/cleave.js/dist/cleave-esm.js","../../../app/javascript/entrypoints/controllers/statistic_entry_controller.js"],"sourcesContent":["var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar NumeralFormatter = function (numeralDecimalMark,\n numeralIntegerScale,\n numeralDecimalScale,\n numeralThousandsGroupStyle,\n numeralPositiveOnly,\n stripLeadingZeroes,\n prefix,\n signBeforePrefix,\n tailPrefix,\n delimiter) {\n var owner = this;\n\n owner.numeralDecimalMark = numeralDecimalMark || '.';\n owner.numeralIntegerScale = numeralIntegerScale > 0 ? numeralIntegerScale : 0;\n owner.numeralDecimalScale = numeralDecimalScale >= 0 ? numeralDecimalScale : 2;\n owner.numeralThousandsGroupStyle = numeralThousandsGroupStyle || NumeralFormatter.groupStyle.thousand;\n owner.numeralPositiveOnly = !!numeralPositiveOnly;\n owner.stripLeadingZeroes = stripLeadingZeroes !== false;\n owner.prefix = (prefix || prefix === '') ? prefix : '';\n owner.signBeforePrefix = !!signBeforePrefix;\n owner.tailPrefix = !!tailPrefix;\n owner.delimiter = (delimiter || delimiter === '') ? delimiter : ',';\n owner.delimiterRE = delimiter ? new RegExp('\\\\' + delimiter, 'g') : '';\n};\n\nNumeralFormatter.groupStyle = {\n thousand: 'thousand',\n lakh: 'lakh',\n wan: 'wan',\n none: 'none' \n};\n\nNumeralFormatter.prototype = {\n getRawValue: function (value) {\n return value.replace(this.delimiterRE, '').replace(this.numeralDecimalMark, '.');\n },\n\n format: function (value) {\n var owner = this, parts, partSign, partSignAndPrefix, partInteger, partDecimal = '';\n\n // strip alphabet letters\n value = value.replace(/[A-Za-z]/g, '')\n // replace the first decimal mark with reserved placeholder\n .replace(owner.numeralDecimalMark, 'M')\n\n // strip non numeric letters except minus and \"M\"\n // this is to ensure prefix has been stripped\n .replace(/[^\\dM-]/g, '')\n\n // replace the leading minus with reserved placeholder\n .replace(/^\\-/, 'N')\n\n // strip the other minus sign (if present)\n .replace(/\\-/g, '')\n\n // replace the minus sign (if present)\n .replace('N', owner.numeralPositiveOnly ? '' : '-')\n\n // replace decimal mark\n .replace('M', owner.numeralDecimalMark);\n\n // strip any leading zeros\n if (owner.stripLeadingZeroes) {\n value = value.replace(/^(-)?0+(?=\\d)/, '$1');\n }\n\n partSign = value.slice(0, 1) === '-' ? '-' : '';\n if (typeof owner.prefix != 'undefined') {\n if (owner.signBeforePrefix) {\n partSignAndPrefix = partSign + owner.prefix;\n } else {\n partSignAndPrefix = owner.prefix + partSign;\n }\n } else {\n partSignAndPrefix = partSign;\n }\n \n partInteger = value;\n\n if (value.indexOf(owner.numeralDecimalMark) >= 0) {\n parts = value.split(owner.numeralDecimalMark);\n partInteger = parts[0];\n partDecimal = owner.numeralDecimalMark + parts[1].slice(0, owner.numeralDecimalScale);\n }\n\n if(partSign === '-') {\n partInteger = partInteger.slice(1);\n }\n\n if (owner.numeralIntegerScale > 0) {\n partInteger = partInteger.slice(0, owner.numeralIntegerScale);\n }\n\n switch (owner.numeralThousandsGroupStyle) {\n case NumeralFormatter.groupStyle.lakh:\n partInteger = partInteger.replace(/(\\d)(?=(\\d\\d)+\\d$)/g, '$1' + owner.delimiter);\n\n break;\n\n case NumeralFormatter.groupStyle.wan:\n partInteger = partInteger.replace(/(\\d)(?=(\\d{4})+$)/g, '$1' + owner.delimiter);\n\n break;\n\n case NumeralFormatter.groupStyle.thousand:\n partInteger = partInteger.replace(/(\\d)(?=(\\d{3})+$)/g, '$1' + owner.delimiter);\n\n break;\n }\n\n if (owner.tailPrefix) {\n return partSign + partInteger.toString() + (owner.numeralDecimalScale > 0 ? partDecimal.toString() : '') + owner.prefix;\n }\n\n return partSignAndPrefix + partInteger.toString() + (owner.numeralDecimalScale > 0 ? partDecimal.toString() : '');\n }\n};\n\nvar NumeralFormatter_1 = NumeralFormatter;\n\nvar DateFormatter = function (datePattern, dateMin, dateMax) {\n var owner = this;\n\n owner.date = [];\n owner.blocks = [];\n owner.datePattern = datePattern;\n owner.dateMin = dateMin\n .split('-')\n .reverse()\n .map(function(x) {\n return parseInt(x, 10);\n });\n if (owner.dateMin.length === 2) owner.dateMin.unshift(0);\n\n owner.dateMax = dateMax\n .split('-')\n .reverse()\n .map(function(x) {\n return parseInt(x, 10);\n });\n if (owner.dateMax.length === 2) owner.dateMax.unshift(0);\n \n owner.initBlocks();\n};\n\nDateFormatter.prototype = {\n initBlocks: function () {\n var owner = this;\n owner.datePattern.forEach(function (value) {\n if (value === 'Y') {\n owner.blocks.push(4);\n } else {\n owner.blocks.push(2);\n }\n });\n },\n\n getISOFormatDate: function () {\n var owner = this,\n date = owner.date;\n\n return date[2] ? (\n date[2] + '-' + owner.addLeadingZero(date[1]) + '-' + owner.addLeadingZero(date[0])\n ) : '';\n },\n\n getBlocks: function () {\n return this.blocks;\n },\n\n getValidatedDate: function (value) {\n var owner = this, result = '';\n\n value = value.replace(/[^\\d]/g, '');\n\n owner.blocks.forEach(function (length, index) {\n if (value.length > 0) {\n var sub = value.slice(0, length),\n sub0 = sub.slice(0, 1),\n rest = value.slice(length);\n\n switch (owner.datePattern[index]) {\n case 'd':\n if (sub === '00') {\n sub = '01';\n } else if (parseInt(sub0, 10) > 3) {\n sub = '0' + sub0;\n } else if (parseInt(sub, 10) > 31) {\n sub = '31';\n }\n\n break;\n\n case 'm':\n if (sub === '00') {\n sub = '01';\n } else if (parseInt(sub0, 10) > 1) {\n sub = '0' + sub0;\n } else if (parseInt(sub, 10) > 12) {\n sub = '12';\n }\n\n break;\n }\n\n result += sub;\n\n // update remaining string\n value = rest;\n }\n });\n\n return this.getFixedDateString(result);\n },\n\n getFixedDateString: function (value) {\n var owner = this, datePattern = owner.datePattern, date = [],\n dayIndex = 0, monthIndex = 0, yearIndex = 0,\n dayStartIndex = 0, monthStartIndex = 0, yearStartIndex = 0,\n day, month, year, fullYearDone = false;\n\n // mm-dd || dd-mm\n if (value.length === 4 && datePattern[0].toLowerCase() !== 'y' && datePattern[1].toLowerCase() !== 'y') {\n dayStartIndex = datePattern[0] === 'd' ? 0 : 2;\n monthStartIndex = 2 - dayStartIndex;\n day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);\n month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);\n\n date = this.getFixedDate(day, month, 0);\n }\n\n // yyyy-mm-dd || yyyy-dd-mm || mm-dd-yyyy || dd-mm-yyyy || dd-yyyy-mm || mm-yyyy-dd\n if (value.length === 8) {\n datePattern.forEach(function (type, index) {\n switch (type) {\n case 'd':\n dayIndex = index;\n break;\n case 'm':\n monthIndex = index;\n break;\n default:\n yearIndex = index;\n break;\n }\n });\n\n yearStartIndex = yearIndex * 2;\n dayStartIndex = (dayIndex <= yearIndex) ? dayIndex * 2 : (dayIndex * 2 + 2);\n monthStartIndex = (monthIndex <= yearIndex) ? monthIndex * 2 : (monthIndex * 2 + 2);\n\n day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);\n month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);\n year = parseInt(value.slice(yearStartIndex, yearStartIndex + 4), 10);\n\n fullYearDone = value.slice(yearStartIndex, yearStartIndex + 4).length === 4;\n\n date = this.getFixedDate(day, month, year);\n }\n\n // mm-yy || yy-mm\n if (value.length === 4 && (datePattern[0] === 'y' || datePattern[1] === 'y')) {\n monthStartIndex = datePattern[0] === 'm' ? 0 : 2;\n yearStartIndex = 2 - monthStartIndex;\n month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);\n year = parseInt(value.slice(yearStartIndex, yearStartIndex + 2), 10);\n\n fullYearDone = value.slice(yearStartIndex, yearStartIndex + 2).length === 2;\n\n date = [0, month, year];\n }\n\n // mm-yyyy || yyyy-mm\n if (value.length === 6 && (datePattern[0] === 'Y' || datePattern[1] === 'Y')) {\n monthStartIndex = datePattern[0] === 'm' ? 0 : 4;\n yearStartIndex = 2 - 0.5 * monthStartIndex;\n month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);\n year = parseInt(value.slice(yearStartIndex, yearStartIndex + 4), 10);\n\n fullYearDone = value.slice(yearStartIndex, yearStartIndex + 4).length === 4;\n\n date = [0, month, year];\n }\n\n date = owner.getRangeFixedDate(date);\n owner.date = date;\n\n var result = date.length === 0 ? value : datePattern.reduce(function (previous, current) {\n switch (current) {\n case 'd':\n return previous + (date[0] === 0 ? '' : owner.addLeadingZero(date[0]));\n case 'm':\n return previous + (date[1] === 0 ? '' : owner.addLeadingZero(date[1]));\n case 'y':\n return previous + (fullYearDone ? owner.addLeadingZeroForYear(date[2], false) : '');\n case 'Y':\n return previous + (fullYearDone ? owner.addLeadingZeroForYear(date[2], true) : '');\n }\n }, '');\n\n return result;\n },\n\n getRangeFixedDate: function (date) {\n var owner = this,\n datePattern = owner.datePattern,\n dateMin = owner.dateMin || [],\n dateMax = owner.dateMax || [];\n\n if (!date.length || (dateMin.length < 3 && dateMax.length < 3)) return date;\n\n if (\n datePattern.find(function(x) {\n return x.toLowerCase() === 'y';\n }) &&\n date[2] === 0\n ) return date;\n\n if (dateMax.length && (dateMax[2] < date[2] || (\n dateMax[2] === date[2] && (dateMax[1] < date[1] || (\n dateMax[1] === date[1] && dateMax[0] < date[0]\n ))\n ))) return dateMax;\n\n if (dateMin.length && (dateMin[2] > date[2] || (\n dateMin[2] === date[2] && (dateMin[1] > date[1] || (\n dateMin[1] === date[1] && dateMin[0] > date[0]\n ))\n ))) return dateMin;\n\n return date;\n },\n\n getFixedDate: function (day, month, year) {\n day = Math.min(day, 31);\n month = Math.min(month, 12);\n year = parseInt((year || 0), 10);\n\n if ((month < 7 && month % 2 === 0) || (month > 8 && month % 2 === 1)) {\n day = Math.min(day, month === 2 ? (this.isLeapYear(year) ? 29 : 28) : 30);\n }\n\n return [day, month, year];\n },\n\n isLeapYear: function (year) {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n },\n\n addLeadingZero: function (number) {\n return (number < 10 ? '0' : '') + number;\n },\n\n addLeadingZeroForYear: function (number, fullYearMode) {\n if (fullYearMode) {\n return (number < 10 ? '000' : (number < 100 ? '00' : (number < 1000 ? '0' : ''))) + number;\n }\n\n return (number < 10 ? '0' : '') + number;\n }\n};\n\nvar DateFormatter_1 = DateFormatter;\n\nvar TimeFormatter = function (timePattern, timeFormat) {\n var owner = this;\n\n owner.time = [];\n owner.blocks = [];\n owner.timePattern = timePattern;\n owner.timeFormat = timeFormat;\n owner.initBlocks();\n};\n\nTimeFormatter.prototype = {\n initBlocks: function () {\n var owner = this;\n owner.timePattern.forEach(function () {\n owner.blocks.push(2);\n });\n },\n\n getISOFormatTime: function () {\n var owner = this,\n time = owner.time;\n\n return time[2] ? (\n owner.addLeadingZero(time[0]) + ':' + owner.addLeadingZero(time[1]) + ':' + owner.addLeadingZero(time[2])\n ) : '';\n },\n\n getBlocks: function () {\n return this.blocks;\n },\n\n getTimeFormatOptions: function () {\n var owner = this;\n if (String(owner.timeFormat) === '12') {\n return {\n maxHourFirstDigit: 1,\n maxHours: 12,\n maxMinutesFirstDigit: 5,\n maxMinutes: 60\n };\n }\n\n return {\n maxHourFirstDigit: 2,\n maxHours: 23,\n maxMinutesFirstDigit: 5,\n maxMinutes: 60\n };\n },\n\n getValidatedTime: function (value) {\n var owner = this, result = '';\n\n value = value.replace(/[^\\d]/g, '');\n\n var timeFormatOptions = owner.getTimeFormatOptions();\n\n owner.blocks.forEach(function (length, index) {\n if (value.length > 0) {\n var sub = value.slice(0, length),\n sub0 = sub.slice(0, 1),\n rest = value.slice(length);\n\n switch (owner.timePattern[index]) {\n\n case 'h':\n if (parseInt(sub0, 10) > timeFormatOptions.maxHourFirstDigit) {\n sub = '0' + sub0;\n } else if (parseInt(sub, 10) > timeFormatOptions.maxHours) {\n sub = timeFormatOptions.maxHours + '';\n }\n\n break;\n\n case 'm':\n case 's':\n if (parseInt(sub0, 10) > timeFormatOptions.maxMinutesFirstDigit) {\n sub = '0' + sub0;\n } else if (parseInt(sub, 10) > timeFormatOptions.maxMinutes) {\n sub = timeFormatOptions.maxMinutes + '';\n }\n break;\n }\n\n result += sub;\n\n // update remaining string\n value = rest;\n }\n });\n\n return this.getFixedTimeString(result);\n },\n\n getFixedTimeString: function (value) {\n var owner = this, timePattern = owner.timePattern, time = [],\n secondIndex = 0, minuteIndex = 0, hourIndex = 0,\n secondStartIndex = 0, minuteStartIndex = 0, hourStartIndex = 0,\n second, minute, hour;\n\n if (value.length === 6) {\n timePattern.forEach(function (type, index) {\n switch (type) {\n case 's':\n secondIndex = index * 2;\n break;\n case 'm':\n minuteIndex = index * 2;\n break;\n case 'h':\n hourIndex = index * 2;\n break;\n }\n });\n\n hourStartIndex = hourIndex;\n minuteStartIndex = minuteIndex;\n secondStartIndex = secondIndex;\n\n second = parseInt(value.slice(secondStartIndex, secondStartIndex + 2), 10);\n minute = parseInt(value.slice(minuteStartIndex, minuteStartIndex + 2), 10);\n hour = parseInt(value.slice(hourStartIndex, hourStartIndex + 2), 10);\n\n time = this.getFixedTime(hour, minute, second);\n }\n\n if (value.length === 4 && owner.timePattern.indexOf('s') < 0) {\n timePattern.forEach(function (type, index) {\n switch (type) {\n case 'm':\n minuteIndex = index * 2;\n break;\n case 'h':\n hourIndex = index * 2;\n break;\n }\n });\n\n hourStartIndex = hourIndex;\n minuteStartIndex = minuteIndex;\n\n second = 0;\n minute = parseInt(value.slice(minuteStartIndex, minuteStartIndex + 2), 10);\n hour = parseInt(value.slice(hourStartIndex, hourStartIndex + 2), 10);\n\n time = this.getFixedTime(hour, minute, second);\n }\n\n owner.time = time;\n\n return time.length === 0 ? value : timePattern.reduce(function (previous, current) {\n switch (current) {\n case 's':\n return previous + owner.addLeadingZero(time[2]);\n case 'm':\n return previous + owner.addLeadingZero(time[1]);\n case 'h':\n return previous + owner.addLeadingZero(time[0]);\n }\n }, '');\n },\n\n getFixedTime: function (hour, minute, second) {\n second = Math.min(parseInt(second || 0, 10), 60);\n minute = Math.min(minute, 60);\n hour = Math.min(hour, 60);\n\n return [hour, minute, second];\n },\n\n addLeadingZero: function (number) {\n return (number < 10 ? '0' : '') + number;\n }\n};\n\nvar TimeFormatter_1 = TimeFormatter;\n\nvar PhoneFormatter = function (formatter, delimiter) {\n var owner = this;\n\n owner.delimiter = (delimiter || delimiter === '') ? delimiter : ' ';\n owner.delimiterRE = delimiter ? new RegExp('\\\\' + delimiter, 'g') : '';\n\n owner.formatter = formatter;\n};\n\nPhoneFormatter.prototype = {\n setFormatter: function (formatter) {\n this.formatter = formatter;\n },\n\n format: function (phoneNumber) {\n var owner = this;\n\n owner.formatter.clear();\n\n // only keep number and +\n phoneNumber = phoneNumber.replace(/[^\\d+]/g, '');\n\n // strip non-leading +\n phoneNumber = phoneNumber.replace(/^\\+/, 'B').replace(/\\+/g, '').replace('B', '+');\n\n // strip delimiter\n phoneNumber = phoneNumber.replace(owner.delimiterRE, '');\n\n var result = '', current, validated = false;\n\n for (var i = 0, iMax = phoneNumber.length; i < iMax; i++) {\n current = owner.formatter.inputDigit(phoneNumber.charAt(i));\n\n // has ()- or space inside\n if (/[\\s()-]/g.test(current)) {\n result = current;\n\n validated = true;\n } else {\n if (!validated) {\n result = current;\n }\n // else: over length input\n // it turns to invalid number again\n }\n }\n\n // strip ()\n // e.g. US: 7161234567 returns (716) 123-4567\n result = result.replace(/[()]/g, '');\n // replace library delimiter with user customized delimiter\n result = result.replace(/[\\s-]/g, owner.delimiter);\n\n return result;\n }\n};\n\nvar PhoneFormatter_1 = PhoneFormatter;\n\nvar CreditCardDetector = {\n blocks: {\n uatp: [4, 5, 6],\n amex: [4, 6, 5],\n diners: [4, 6, 4],\n discover: [4, 4, 4, 4],\n mastercard: [4, 4, 4, 4],\n dankort: [4, 4, 4, 4],\n instapayment: [4, 4, 4, 4],\n jcb15: [4, 6, 5],\n jcb: [4, 4, 4, 4],\n maestro: [4, 4, 4, 4],\n visa: [4, 4, 4, 4],\n mir: [4, 4, 4, 4],\n unionPay: [4, 4, 4, 4],\n general: [4, 4, 4, 4]\n },\n\n re: {\n // starts with 1; 15 digits, not starts with 1800 (jcb card)\n uatp: /^(?!1800)1\\d{0,14}/,\n\n // starts with 34/37; 15 digits\n amex: /^3[47]\\d{0,13}/,\n\n // starts with 6011/65/644-649; 16 digits\n discover: /^(?:6011|65\\d{0,2}|64[4-9]\\d?)\\d{0,12}/,\n\n // starts with 300-305/309 or 36/38/39; 14 digits\n diners: /^3(?:0([0-5]|9)|[689]\\d?)\\d{0,11}/,\n\n // starts with 51-55/2221–2720; 16 digits\n mastercard: /^(5[1-5]\\d{0,2}|22[2-9]\\d{0,1}|2[3-7]\\d{0,2})\\d{0,12}/,\n\n // starts with 5019/4175/4571; 16 digits\n dankort: /^(5019|4175|4571)\\d{0,12}/,\n\n // starts with 637-639; 16 digits\n instapayment: /^63[7-9]\\d{0,13}/,\n\n // starts with 2131/1800; 15 digits\n jcb15: /^(?:2131|1800)\\d{0,11}/,\n\n // starts with 2131/1800/35; 16 digits\n jcb: /^(?:35\\d{0,2})\\d{0,12}/,\n\n // starts with 50/56-58/6304/67; 16 digits\n maestro: /^(?:5[0678]\\d{0,2}|6304|67\\d{0,2})\\d{0,12}/,\n\n // starts with 22; 16 digits\n mir: /^220[0-4]\\d{0,12}/,\n\n // starts with 4; 16 digits\n visa: /^4\\d{0,15}/,\n\n // starts with 62/81; 16 digits\n unionPay: /^(62|81)\\d{0,14}/\n },\n\n getStrictBlocks: function (block) {\n var total = block.reduce(function (prev, current) {\n return prev + current;\n }, 0);\n\n return block.concat(19 - total);\n },\n\n getInfo: function (value, strictMode) {\n var blocks = CreditCardDetector.blocks,\n re = CreditCardDetector.re;\n\n // Some credit card can have up to 19 digits number.\n // Set strictMode to true will remove the 16 max-length restrain,\n // however, I never found any website validate card number like\n // this, hence probably you don't want to enable this option.\n strictMode = !!strictMode;\n\n for (var key in re) {\n if (re[key].test(value)) {\n var matchedBlocks = blocks[key];\n return {\n type: key,\n blocks: strictMode ? this.getStrictBlocks(matchedBlocks) : matchedBlocks\n };\n }\n }\n\n return {\n type: 'unknown',\n blocks: strictMode ? this.getStrictBlocks(blocks.general) : blocks.general\n };\n }\n};\n\nvar CreditCardDetector_1 = CreditCardDetector;\n\nvar Util = {\n noop: function () {\n },\n\n strip: function (value, re) {\n return value.replace(re, '');\n },\n\n getPostDelimiter: function (value, delimiter, delimiters) {\n // single delimiter\n if (delimiters.length === 0) {\n return value.slice(-delimiter.length) === delimiter ? delimiter : '';\n }\n\n // multiple delimiters\n var matchedDelimiter = '';\n delimiters.forEach(function (current) {\n if (value.slice(-current.length) === current) {\n matchedDelimiter = current;\n }\n });\n\n return matchedDelimiter;\n },\n\n getDelimiterREByDelimiter: function (delimiter) {\n return new RegExp(delimiter.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1'), 'g');\n },\n\n getNextCursorPosition: function (prevPos, oldValue, newValue, delimiter, delimiters) {\n // If cursor was at the end of value, just place it back.\n // Because new value could contain additional chars.\n if (oldValue.length === prevPos) {\n return newValue.length;\n }\n\n return prevPos + this.getPositionOffset(prevPos, oldValue, newValue, delimiter ,delimiters);\n },\n\n getPositionOffset: function (prevPos, oldValue, newValue, delimiter, delimiters) {\n var oldRawValue, newRawValue, lengthOffset;\n\n oldRawValue = this.stripDelimiters(oldValue.slice(0, prevPos), delimiter, delimiters);\n newRawValue = this.stripDelimiters(newValue.slice(0, prevPos), delimiter, delimiters);\n lengthOffset = oldRawValue.length - newRawValue.length;\n\n return (lengthOffset !== 0) ? (lengthOffset / Math.abs(lengthOffset)) : 0;\n },\n\n stripDelimiters: function (value, delimiter, delimiters) {\n var owner = this;\n\n // single delimiter\n if (delimiters.length === 0) {\n var delimiterRE = delimiter ? owner.getDelimiterREByDelimiter(delimiter) : '';\n\n return value.replace(delimiterRE, '');\n }\n\n // multiple delimiters\n delimiters.forEach(function (current) {\n current.split('').forEach(function (letter) {\n value = value.replace(owner.getDelimiterREByDelimiter(letter), '');\n });\n });\n\n return value;\n },\n\n headStr: function (str, length) {\n return str.slice(0, length);\n },\n\n getMaxLength: function (blocks) {\n return blocks.reduce(function (previous, current) {\n return previous + current;\n }, 0);\n },\n\n // strip prefix\n // Before type | After type | Return value\n // PEFIX-... | PEFIX-... | ''\n // PREFIX-123 | PEFIX-123 | 123\n // PREFIX-123 | PREFIX-23 | 23\n // PREFIX-123 | PREFIX-1234 | 1234\n getPrefixStrippedValue: function (value, prefix, prefixLength, prevResult, delimiter, delimiters, noImmediatePrefix, tailPrefix, signBeforePrefix) {\n // No prefix\n if (prefixLength === 0) {\n return value;\n }\n\n // Value is prefix\n if (value === prefix && value !== '') {\n return '';\n }\n\n if (signBeforePrefix && (value.slice(0, 1) == '-')) {\n var prev = (prevResult.slice(0, 1) == '-') ? prevResult.slice(1) : prevResult;\n return '-' + this.getPrefixStrippedValue(value.slice(1), prefix, prefixLength, prev, delimiter, delimiters, noImmediatePrefix, tailPrefix, signBeforePrefix);\n }\n\n // Pre result prefix string does not match pre-defined prefix\n if (prevResult.slice(0, prefixLength) !== prefix && !tailPrefix) {\n // Check if the first time user entered something\n if (noImmediatePrefix && !prevResult && value) return value;\n return '';\n } else if (prevResult.slice(-prefixLength) !== prefix && tailPrefix) {\n // Check if the first time user entered something\n if (noImmediatePrefix && !prevResult && value) return value;\n return '';\n }\n\n var prevValue = this.stripDelimiters(prevResult, delimiter, delimiters);\n\n // New value has issue, someone typed in between prefix letters\n // Revert to pre value\n if (value.slice(0, prefixLength) !== prefix && !tailPrefix) {\n return prevValue.slice(prefixLength);\n } else if (value.slice(-prefixLength) !== prefix && tailPrefix) {\n return prevValue.slice(0, -prefixLength - 1);\n }\n\n // No issue, strip prefix for new value\n return tailPrefix ? value.slice(0, -prefixLength) : value.slice(prefixLength);\n },\n\n getFirstDiffIndex: function (prev, current) {\n var index = 0;\n\n while (prev.charAt(index) === current.charAt(index)) {\n if (prev.charAt(index++) === '') {\n return -1;\n }\n }\n\n return index;\n },\n\n getFormattedValue: function (value, blocks, blocksLength, delimiter, delimiters, delimiterLazyShow) {\n var result = '',\n multipleDelimiters = delimiters.length > 0,\n currentDelimiter = '';\n\n // no options, normal input\n if (blocksLength === 0) {\n return value;\n }\n\n blocks.forEach(function (length, index) {\n if (value.length > 0) {\n var sub = value.slice(0, length),\n rest = value.slice(length);\n\n if (multipleDelimiters) {\n currentDelimiter = delimiters[delimiterLazyShow ? (index - 1) : index] || currentDelimiter;\n } else {\n currentDelimiter = delimiter;\n }\n\n if (delimiterLazyShow) {\n if (index > 0) {\n result += currentDelimiter;\n }\n\n result += sub;\n } else {\n result += sub;\n\n if (sub.length === length && index < blocksLength - 1) {\n result += currentDelimiter;\n }\n }\n\n // update remaining string\n value = rest;\n }\n });\n\n return result;\n },\n\n // move cursor to the end\n // the first time user focuses on an input with prefix\n fixPrefixCursor: function (el, prefix, delimiter, delimiters) {\n if (!el) {\n return;\n }\n\n var val = el.value,\n appendix = delimiter || (delimiters[0] || ' ');\n\n if (!el.setSelectionRange || !prefix || (prefix.length + appendix.length) <= val.length) {\n return;\n }\n\n var len = val.length * 2;\n\n // set timeout to avoid blink\n setTimeout(function () {\n el.setSelectionRange(len, len);\n }, 1);\n },\n\n // Check if input field is fully selected\n checkFullSelection: function(value) {\n try {\n var selection = window.getSelection() || document.getSelection() || {};\n return selection.toString().length === value.length;\n } catch (ex) {\n // Ignore\n }\n\n return false;\n },\n\n setSelection: function (element, position, doc) {\n if (element !== this.getActiveElement(doc)) {\n return;\n }\n\n // cursor is already in the end\n if (element && element.value.length <= position) {\n return;\n }\n\n if (element.createTextRange) {\n var range = element.createTextRange();\n\n range.move('character', position);\n range.select();\n } else {\n try {\n element.setSelectionRange(position, position);\n } catch (e) {\n // eslint-disable-next-line\n console.warn('The input element type does not support selection');\n }\n }\n },\n\n getActiveElement: function(parent) {\n var activeElement = parent.activeElement;\n if (activeElement && activeElement.shadowRoot) {\n return this.getActiveElement(activeElement.shadowRoot);\n }\n return activeElement;\n },\n\n isAndroid: function () {\n return navigator && /android/i.test(navigator.userAgent);\n },\n\n // On Android chrome, the keyup and keydown events\n // always return key code 229 as a composition that\n // buffers the user’s keystrokes\n // see https://github.com/nosir/cleave.js/issues/147\n isAndroidBackspaceKeydown: function (lastInputValue, currentInputValue) {\n if (!this.isAndroid() || !lastInputValue || !currentInputValue) {\n return false;\n }\n\n return currentInputValue === lastInputValue.slice(0, -1);\n }\n};\n\nvar Util_1 = Util;\n\n/**\n * Props Assignment\n *\n * Separate this, so react module can share the usage\n */\nvar DefaultProperties = {\n // Maybe change to object-assign\n // for now just keep it as simple\n assign: function (target, opts) {\n target = target || {};\n opts = opts || {};\n\n // credit card\n target.creditCard = !!opts.creditCard;\n target.creditCardStrictMode = !!opts.creditCardStrictMode;\n target.creditCardType = '';\n target.onCreditCardTypeChanged = opts.onCreditCardTypeChanged || (function () {});\n\n // phone\n target.phone = !!opts.phone;\n target.phoneRegionCode = opts.phoneRegionCode || 'AU';\n target.phoneFormatter = {};\n\n // time\n target.time = !!opts.time;\n target.timePattern = opts.timePattern || ['h', 'm', 's'];\n target.timeFormat = opts.timeFormat || '24';\n target.timeFormatter = {};\n\n // date\n target.date = !!opts.date;\n target.datePattern = opts.datePattern || ['d', 'm', 'Y'];\n target.dateMin = opts.dateMin || '';\n target.dateMax = opts.dateMax || '';\n target.dateFormatter = {};\n\n // numeral\n target.numeral = !!opts.numeral;\n target.numeralIntegerScale = opts.numeralIntegerScale > 0 ? opts.numeralIntegerScale : 0;\n target.numeralDecimalScale = opts.numeralDecimalScale >= 0 ? opts.numeralDecimalScale : 2;\n target.numeralDecimalMark = opts.numeralDecimalMark || '.';\n target.numeralThousandsGroupStyle = opts.numeralThousandsGroupStyle || 'thousand';\n target.numeralPositiveOnly = !!opts.numeralPositiveOnly;\n target.stripLeadingZeroes = opts.stripLeadingZeroes !== false;\n target.signBeforePrefix = !!opts.signBeforePrefix;\n target.tailPrefix = !!opts.tailPrefix;\n\n // others\n target.swapHiddenInput = !!opts.swapHiddenInput;\n \n target.numericOnly = target.creditCard || target.date || !!opts.numericOnly;\n\n target.uppercase = !!opts.uppercase;\n target.lowercase = !!opts.lowercase;\n\n target.prefix = (target.creditCard || target.date) ? '' : (opts.prefix || '');\n target.noImmediatePrefix = !!opts.noImmediatePrefix;\n target.prefixLength = target.prefix.length;\n target.rawValueTrimPrefix = !!opts.rawValueTrimPrefix;\n target.copyDelimiter = !!opts.copyDelimiter;\n\n target.initValue = (opts.initValue !== undefined && opts.initValue !== null) ? opts.initValue.toString() : '';\n\n target.delimiter =\n (opts.delimiter || opts.delimiter === '') ? opts.delimiter :\n (opts.date ? '/' :\n (opts.time ? ':' :\n (opts.numeral ? ',' :\n (opts.phone ? ' ' :\n ' '))));\n target.delimiterLength = target.delimiter.length;\n target.delimiterLazyShow = !!opts.delimiterLazyShow;\n target.delimiters = opts.delimiters || [];\n\n target.blocks = opts.blocks || [];\n target.blocksLength = target.blocks.length;\n\n target.root = (typeof commonjsGlobal === 'object' && commonjsGlobal) ? commonjsGlobal : window;\n target.document = opts.document || target.root.document;\n\n target.maxLength = 0;\n\n target.backspace = false;\n target.result = '';\n\n target.onValueChanged = opts.onValueChanged || (function () {});\n\n return target;\n }\n};\n\nvar DefaultProperties_1 = DefaultProperties;\n\n/**\n * Construct a new Cleave instance by passing the configuration object\n *\n * @param {String | HTMLElement} element\n * @param {Object} opts\n */\nvar Cleave = function (element, opts) {\n var owner = this;\n var hasMultipleElements = false;\n\n if (typeof element === 'string') {\n owner.element = document.querySelector(element);\n hasMultipleElements = document.querySelectorAll(element).length > 1;\n } else {\n if (typeof element.length !== 'undefined' && element.length > 0) {\n owner.element = element[0];\n hasMultipleElements = element.length > 1;\n } else {\n owner.element = element;\n }\n }\n\n if (!owner.element) {\n throw new Error('[cleave.js] Please check the element');\n }\n\n if (hasMultipleElements) {\n try {\n // eslint-disable-next-line\n console.warn('[cleave.js] Multiple input fields matched, cleave.js will only take the first one.');\n } catch (e) {\n // Old IE\n }\n }\n\n opts.initValue = owner.element.value;\n\n owner.properties = Cleave.DefaultProperties.assign({}, opts);\n\n owner.init();\n};\n\nCleave.prototype = {\n init: function () {\n var owner = this, pps = owner.properties;\n\n // no need to use this lib\n if (!pps.numeral && !pps.phone && !pps.creditCard && !pps.time && !pps.date && (pps.blocksLength === 0 && !pps.prefix)) {\n owner.onInput(pps.initValue);\n\n return;\n }\n\n pps.maxLength = Cleave.Util.getMaxLength(pps.blocks);\n\n owner.isAndroid = Cleave.Util.isAndroid();\n owner.lastInputValue = '';\n owner.isBackward = '';\n\n owner.onChangeListener = owner.onChange.bind(owner);\n owner.onKeyDownListener = owner.onKeyDown.bind(owner);\n owner.onFocusListener = owner.onFocus.bind(owner);\n owner.onCutListener = owner.onCut.bind(owner);\n owner.onCopyListener = owner.onCopy.bind(owner);\n\n owner.initSwapHiddenInput();\n\n owner.element.addEventListener('input', owner.onChangeListener);\n owner.element.addEventListener('keydown', owner.onKeyDownListener);\n owner.element.addEventListener('focus', owner.onFocusListener);\n owner.element.addEventListener('cut', owner.onCutListener);\n owner.element.addEventListener('copy', owner.onCopyListener);\n\n\n owner.initPhoneFormatter();\n owner.initDateFormatter();\n owner.initTimeFormatter();\n owner.initNumeralFormatter();\n\n // avoid touch input field if value is null\n // otherwise Firefox will add red box-shadow for \n if (pps.initValue || (pps.prefix && !pps.noImmediatePrefix)) {\n owner.onInput(pps.initValue);\n }\n },\n\n initSwapHiddenInput: function () {\n var owner = this, pps = owner.properties;\n if (!pps.swapHiddenInput) return;\n\n var inputFormatter = owner.element.cloneNode(true);\n owner.element.parentNode.insertBefore(inputFormatter, owner.element);\n\n owner.elementSwapHidden = owner.element;\n owner.elementSwapHidden.type = 'hidden';\n\n owner.element = inputFormatter;\n owner.element.id = '';\n },\n\n initNumeralFormatter: function () {\n var owner = this, pps = owner.properties;\n\n if (!pps.numeral) {\n return;\n }\n\n pps.numeralFormatter = new Cleave.NumeralFormatter(\n pps.numeralDecimalMark,\n pps.numeralIntegerScale,\n pps.numeralDecimalScale,\n pps.numeralThousandsGroupStyle,\n pps.numeralPositiveOnly,\n pps.stripLeadingZeroes,\n pps.prefix,\n pps.signBeforePrefix,\n pps.tailPrefix,\n pps.delimiter\n );\n },\n\n initTimeFormatter: function() {\n var owner = this, pps = owner.properties;\n\n if (!pps.time) {\n return;\n }\n\n pps.timeFormatter = new Cleave.TimeFormatter(pps.timePattern, pps.timeFormat);\n pps.blocks = pps.timeFormatter.getBlocks();\n pps.blocksLength = pps.blocks.length;\n pps.maxLength = Cleave.Util.getMaxLength(pps.blocks);\n },\n\n initDateFormatter: function () {\n var owner = this, pps = owner.properties;\n\n if (!pps.date) {\n return;\n }\n\n pps.dateFormatter = new Cleave.DateFormatter(pps.datePattern, pps.dateMin, pps.dateMax);\n pps.blocks = pps.dateFormatter.getBlocks();\n pps.blocksLength = pps.blocks.length;\n pps.maxLength = Cleave.Util.getMaxLength(pps.blocks);\n },\n\n initPhoneFormatter: function () {\n var owner = this, pps = owner.properties;\n\n if (!pps.phone) {\n return;\n }\n\n // Cleave.AsYouTypeFormatter should be provided by\n // external google closure lib\n try {\n pps.phoneFormatter = new Cleave.PhoneFormatter(\n new pps.root.Cleave.AsYouTypeFormatter(pps.phoneRegionCode),\n pps.delimiter\n );\n } catch (ex) {\n throw new Error('[cleave.js] Please include phone-type-formatter.{country}.js lib');\n }\n },\n\n onKeyDown: function (event) {\n var owner = this,\n charCode = event.which || event.keyCode;\n\n owner.lastInputValue = owner.element.value;\n owner.isBackward = charCode === 8;\n },\n\n onChange: function (event) {\n var owner = this, pps = owner.properties,\n Util = Cleave.Util;\n\n owner.isBackward = owner.isBackward || event.inputType === 'deleteContentBackward';\n\n var postDelimiter = Util.getPostDelimiter(owner.lastInputValue, pps.delimiter, pps.delimiters);\n\n if (owner.isBackward && postDelimiter) {\n pps.postDelimiterBackspace = postDelimiter;\n } else {\n pps.postDelimiterBackspace = false;\n }\n\n this.onInput(this.element.value);\n },\n\n onFocus: function () {\n var owner = this,\n pps = owner.properties;\n owner.lastInputValue = owner.element.value;\n\n if (pps.prefix && pps.noImmediatePrefix && !owner.element.value) {\n this.onInput(pps.prefix);\n }\n\n Cleave.Util.fixPrefixCursor(owner.element, pps.prefix, pps.delimiter, pps.delimiters);\n },\n\n onCut: function (e) {\n if (!Cleave.Util.checkFullSelection(this.element.value)) return;\n this.copyClipboardData(e);\n this.onInput('');\n },\n\n onCopy: function (e) {\n if (!Cleave.Util.checkFullSelection(this.element.value)) return;\n this.copyClipboardData(e);\n },\n\n copyClipboardData: function (e) {\n var owner = this,\n pps = owner.properties,\n Util = Cleave.Util,\n inputValue = owner.element.value,\n textToCopy = '';\n\n if (!pps.copyDelimiter) {\n textToCopy = Util.stripDelimiters(inputValue, pps.delimiter, pps.delimiters);\n } else {\n textToCopy = inputValue;\n }\n\n try {\n if (e.clipboardData) {\n e.clipboardData.setData('Text', textToCopy);\n } else {\n window.clipboardData.setData('Text', textToCopy);\n }\n\n e.preventDefault();\n } catch (ex) {\n // empty\n }\n },\n\n onInput: function (value) {\n var owner = this, pps = owner.properties,\n Util = Cleave.Util;\n\n // case 1: delete one more character \"4\"\n // 1234*| -> hit backspace -> 123|\n // case 2: last character is not delimiter which is:\n // 12|34* -> hit backspace -> 1|34*\n // note: no need to apply this for numeral mode\n var postDelimiterAfter = Util.getPostDelimiter(value, pps.delimiter, pps.delimiters);\n if (!pps.numeral && pps.postDelimiterBackspace && !postDelimiterAfter) {\n value = Util.headStr(value, value.length - pps.postDelimiterBackspace.length);\n }\n\n // phone formatter\n if (pps.phone) {\n if (pps.prefix && (!pps.noImmediatePrefix || value.length)) {\n pps.result = pps.prefix + pps.phoneFormatter.format(value).slice(pps.prefix.length);\n } else {\n pps.result = pps.phoneFormatter.format(value);\n }\n owner.updateValueState();\n\n return;\n }\n\n // numeral formatter\n if (pps.numeral) {\n // Do not show prefix when noImmediatePrefix is specified\n // This mostly because we need to show user the native input placeholder\n if (pps.prefix && pps.noImmediatePrefix && value.length === 0) {\n pps.result = '';\n } else {\n pps.result = pps.numeralFormatter.format(value);\n }\n owner.updateValueState();\n\n return;\n }\n\n // date\n if (pps.date) {\n value = pps.dateFormatter.getValidatedDate(value);\n }\n\n // time\n if (pps.time) {\n value = pps.timeFormatter.getValidatedTime(value);\n }\n\n // strip delimiters\n value = Util.stripDelimiters(value, pps.delimiter, pps.delimiters);\n\n // strip prefix\n value = Util.getPrefixStrippedValue(value, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix);\n\n // strip non-numeric characters\n value = pps.numericOnly ? Util.strip(value, /[^\\d]/g) : value;\n\n // convert case\n value = pps.uppercase ? value.toUpperCase() : value;\n value = pps.lowercase ? value.toLowerCase() : value;\n\n // prevent from showing prefix when no immediate option enabled with empty input value\n if (pps.prefix) {\n if (pps.tailPrefix) {\n value = value + pps.prefix;\n } else {\n value = pps.prefix + value;\n }\n\n\n // no blocks specified, no need to do formatting\n if (pps.blocksLength === 0) {\n pps.result = value;\n owner.updateValueState();\n\n return;\n }\n }\n\n // update credit card props\n if (pps.creditCard) {\n owner.updateCreditCardPropsByValue(value);\n }\n\n // strip over length characters\n value = Util.headStr(value, pps.maxLength);\n\n // apply blocks\n pps.result = Util.getFormattedValue(\n value,\n pps.blocks, pps.blocksLength,\n pps.delimiter, pps.delimiters, pps.delimiterLazyShow\n );\n\n owner.updateValueState();\n },\n\n updateCreditCardPropsByValue: function (value) {\n var owner = this, pps = owner.properties,\n Util = Cleave.Util,\n creditCardInfo;\n\n // At least one of the first 4 characters has changed\n if (Util.headStr(pps.result, 4) === Util.headStr(value, 4)) {\n return;\n }\n\n creditCardInfo = Cleave.CreditCardDetector.getInfo(value, pps.creditCardStrictMode);\n\n pps.blocks = creditCardInfo.blocks;\n pps.blocksLength = pps.blocks.length;\n pps.maxLength = Util.getMaxLength(pps.blocks);\n\n // credit card type changed\n if (pps.creditCardType !== creditCardInfo.type) {\n pps.creditCardType = creditCardInfo.type;\n\n pps.onCreditCardTypeChanged.call(owner, pps.creditCardType);\n }\n },\n\n updateValueState: function () {\n var owner = this,\n Util = Cleave.Util,\n pps = owner.properties;\n\n if (!owner.element) {\n return;\n }\n\n var endPos = owner.element.selectionEnd;\n var oldValue = owner.element.value;\n var newValue = pps.result;\n\n endPos = Util.getNextCursorPosition(endPos, oldValue, newValue, pps.delimiter, pps.delimiters);\n\n // fix Android browser type=\"text\" input field\n // cursor not jumping issue\n if (owner.isAndroid) {\n window.setTimeout(function () {\n owner.element.value = newValue;\n Util.setSelection(owner.element, endPos, pps.document, false);\n owner.callOnValueChanged();\n }, 1);\n\n return;\n }\n\n owner.element.value = newValue;\n if (pps.swapHiddenInput) owner.elementSwapHidden.value = owner.getRawValue();\n\n Util.setSelection(owner.element, endPos, pps.document, false);\n owner.callOnValueChanged();\n },\n\n callOnValueChanged: function () {\n var owner = this,\n pps = owner.properties;\n\n pps.onValueChanged.call(owner, {\n target: {\n name: owner.element.name,\n value: pps.result,\n rawValue: owner.getRawValue()\n }\n });\n },\n\n setPhoneRegionCode: function (phoneRegionCode) {\n var owner = this, pps = owner.properties;\n\n pps.phoneRegionCode = phoneRegionCode;\n owner.initPhoneFormatter();\n owner.onChange();\n },\n\n setRawValue: function (value) {\n var owner = this, pps = owner.properties;\n\n value = value !== undefined && value !== null ? value.toString() : '';\n\n if (pps.numeral) {\n value = value.replace('.', pps.numeralDecimalMark);\n }\n\n pps.postDelimiterBackspace = false;\n\n owner.element.value = value;\n owner.onInput(value);\n },\n\n getRawValue: function () {\n var owner = this,\n pps = owner.properties,\n Util = Cleave.Util,\n rawValue = owner.element.value;\n\n if (pps.rawValueTrimPrefix) {\n rawValue = Util.getPrefixStrippedValue(rawValue, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix);\n }\n\n if (pps.numeral) {\n rawValue = pps.numeralFormatter.getRawValue(rawValue);\n } else {\n rawValue = Util.stripDelimiters(rawValue, pps.delimiter, pps.delimiters);\n }\n\n return rawValue;\n },\n\n getISOFormatDate: function () {\n var owner = this,\n pps = owner.properties;\n\n return pps.date ? pps.dateFormatter.getISOFormatDate() : '';\n },\n\n getISOFormatTime: function () {\n var owner = this,\n pps = owner.properties;\n\n return pps.time ? pps.timeFormatter.getISOFormatTime() : '';\n },\n\n getFormattedValue: function () {\n return this.element.value;\n },\n\n destroy: function () {\n var owner = this;\n\n owner.element.removeEventListener('input', owner.onChangeListener);\n owner.element.removeEventListener('keydown', owner.onKeyDownListener);\n owner.element.removeEventListener('focus', owner.onFocusListener);\n owner.element.removeEventListener('cut', owner.onCutListener);\n owner.element.removeEventListener('copy', owner.onCopyListener);\n },\n\n toString: function () {\n return '[Cleave Object]';\n }\n};\n\nCleave.NumeralFormatter = NumeralFormatter_1;\nCleave.DateFormatter = DateFormatter_1;\nCleave.TimeFormatter = TimeFormatter_1;\nCleave.PhoneFormatter = PhoneFormatter_1;\nCleave.CreditCardDetector = CreditCardDetector_1;\nCleave.Util = Util_1;\nCleave.DefaultProperties = DefaultProperties_1;\n\n// for angular directive\n((typeof commonjsGlobal === 'object' && commonjsGlobal) ? commonjsGlobal : window)['Cleave'] = Cleave;\n\n// CommonJS\nvar Cleave_1 = Cleave;\n\nexport default Cleave_1;\n","import { Controller } from \"@hotwired/stimulus\";\nimport { get, put } from \"@rails/request.js\";\n\nimport Cleave from \"cleave.js\";\n\nexport default class extends Controller {\n timer = null;\n previousDates = [];\n values = {};\n\n static targets = [\"bottom\", \"input\"];\n static params = {\n tracking: String,\n statisticEntryDataTypeParam: String,\n statisticEntryDecimalPlacesParam: Number,\n numOfValues: Number,\n startDate: String,\n endDate: String,\n };\n\n currencyOptions = (target) => {\n return {\n prefix: \"$\",\n noImmediatePrefix: true,\n numericOnly: true,\n };\n };\n\n percentageOptions = (target) => {\n return {\n numeral: true,\n numeralThousandsGroupStyle: \"thousand\",\n prefix: \"%\",\n tailPrefix: true,\n noImmediatePrefix: true,\n };\n };\n\n inputTargetConnected(target) {\n target.addEventListener(\"focus\", this.onFocus);\n target.addEventListener(\"blur\", this.onBlur);\n }\n\n onFocus = (event) => {\n this.cleave = this.createCleave(event.target);\n };\n\n onBlur = (event) => {\n this.cleave?.destroy();\n };\n\n disconnect() {\n this.cleave?.destroy();\n\n this.inputTargets.forEach((target) => {\n target.removeEventListener(\"focus\", this.onFocus);\n target.removeEventListener(\"blur\", this.onBlur);\n });\n }\n\n createCleave = (target) => {\n let dataType = target.dataset.statisticEntryDataTypeParam;\n return new Cleave(target, {\n numeral: true,\n numeralThousandsGroupStyle: \"thousand\",\n numeralDecimalScale: target.dataset.statisticEntryDecimalPlaces,\n rawValueTrimPrefix: true,\n ...(dataType == \"currency\" && this.currencyOptions()),\n ...(dataType == \"percentage\" && this.percentageOptions()),\n });\n };\n\n bottomTargetConnected() {\n this.setupObserver();\n }\n\n setupObserver = () => {\n var observer = new IntersectionObserver(\n (entries, observer) => {\n if (entries[0].isIntersecting === true) {\n this.fetchEntries();\n observer.unobserve(entries[0].target);\n }\n },\n {\n root: document.querySelector(\"#stat-entries\"),\n threshold: 0.1,\n }\n );\n\n observer.observe(document.querySelector(\"#bottom\"));\n };\n\n fetchEntries = () => {\n const bottomElement = document.querySelector(\"#bottom\");\n const lastDate = bottomElement.dataset.lastEntry;\n\n if (this.previousDates.includes(lastDate)) {\n return;\n }\n\n this.previousDates.push(lastDate);\n\n get(\n `/statistic_entries/${bottomElement.dataset.statisticId}?tracking=${bottomElement.dataset.tracking}&startDate=${lastDate}`,\n {\n responseKind: \"turbo_stream\",\n }\n );\n };\n\n toggle() {\n const statsEdit = document.getElementById(\"stats-edit\");\n\n if (statsEdit.classList.contains(\"zero-width\")) {\n document.getElementById(\"stats-edit\").classList.remove(\"zero-width\");\n } else {\n document.getElementById(\"stats-edit\").classList.add(\"zero-width\");\n }\n }\n\n validate(event) {\n if (\n event?.target &&\n (event.target.value == \"$\" || event.target.value == \"%\")\n ) {\n event.target.value = \"\";\n }\n }\n\n setIntervalValue(event) {\n this.values[event.target.name] = event.target.value;\n }\n\n keydownHandler = (event) => {\n if (event.key === \"ArrowUp\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n\n const currentInput = event.currentTarget;\n\n const parent = currentInput.closest(\".input-parent\");\n const inputs = Array.from(parent.querySelectorAll(\"input\"));\n const currentIndex = inputs.indexOf(currentInput);\n\n let targetParent;\n if (event.key === \"ArrowUp\") {\n targetParent = parent.previousElementSibling;\n } else if (event.key === \"ArrowDown\") {\n targetParent = parent.nextElementSibling;\n }\n\n if (targetParent && targetParent.classList.contains(\"input-parent\")) {\n const targetInputs = Array.from(targetParent.querySelectorAll(\"input\"));\n if (targetInputs[currentIndex]) {\n targetInputs[currentIndex].focus();\n }\n }\n\n return;\n }\n };\n\n keyupHandler(event) {\n clearTimeout(this.timer);\n\n this.timer = setTimeout(() => {\n if (event.target.value == \"$\" || event.target.value == \"%\") {\n event.target.value = \"\";\n }\n this.validate(event);\n this.update(event);\n }, 500);\n }\n\n update(event) {\n if (event.target.value == this.values[event.target.name]) {\n return;\n }\n\n this.values[event.target.name] = event.target.value;\n\n put(`/statistic_entries`, {\n body: JSON.stringify({\n statistic_entry: {\n entry_at: event.target.name,\n entry: event.target.value,\n statistic_id: event.target.dataset.statisticId,\n tracking: event.params.tracking,\n num_of_values: event.params.numOfValues,\n start_date: event.params.startDate,\n end_date: event.params.endDate,\n },\n }),\n responseKind: \"turbo_stream\",\n });\n }\n}\n"],"names":["commonjsGlobal","NumeralFormatter","numeralDecimalMark","numeralIntegerScale","numeralDecimalScale","numeralThousandsGroupStyle","numeralPositiveOnly","stripLeadingZeroes","prefix","signBeforePrefix","tailPrefix","delimiter","owner","value","parts","partSign","partSignAndPrefix","partInteger","partDecimal","NumeralFormatter_1","DateFormatter","datePattern","dateMin","dateMax","x","date","result","length","index","sub","sub0","rest","dayIndex","monthIndex","yearIndex","dayStartIndex","monthStartIndex","yearStartIndex","day","month","year","fullYearDone","type","previous","current","number","fullYearMode","DateFormatter_1","TimeFormatter","timePattern","timeFormat","time","timeFormatOptions","secondIndex","minuteIndex","hourIndex","secondStartIndex","minuteStartIndex","hourStartIndex","second","minute","hour","TimeFormatter_1","PhoneFormatter","formatter","phoneNumber","validated","i","iMax","PhoneFormatter_1","CreditCardDetector","block","total","prev","strictMode","blocks","re","key","matchedBlocks","CreditCardDetector_1","Util","delimiters","matchedDelimiter","prevPos","oldValue","newValue","oldRawValue","newRawValue","lengthOffset","delimiterRE","letter","str","prefixLength","prevResult","noImmediatePrefix","prevValue","blocksLength","delimiterLazyShow","multipleDelimiters","currentDelimiter","el","val","appendix","len","selection","element","position","doc","range","parent","activeElement","lastInputValue","currentInputValue","Util_1","DefaultProperties","target","opts","DefaultProperties_1","Cleave","hasMultipleElements","pps","inputFormatter","event","charCode","postDelimiter","inputValue","textToCopy","postDelimiterAfter","creditCardInfo","endPos","phoneRegionCode","rawValue","Cleave_1","statistic_entry_controller","Controller","__publicField","_a","dataType","observer","entries","bottomElement","lastDate","get","currentInput","currentIndex","targetParent","targetInputs","put"],"mappings":"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","x_google_ignoreList":[0]}