{"version":3,"sources":["jsdelivr-header.js","/npm/format-as-currency@3.1.3/dist/format-as-currency.js"],"names":[],"mappings":"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","file":"/npm/format-as-currency@3.1.3/dist/format-as-currency.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/format-as-currency@3.1.3/dist/format-as-currency.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.formatAsCurrency = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n// for usage via require()\nmodule.exports = 'bcherny/formatAsCurrency'\n\nangular\n.module('bcherny/formatAsCurrency', [])\n.service('formatAsCurrencyUtilities', function () {\n\n  // (haystack: String, needles: Array<String>) => Number\n  // eg. ('foo', 'o') => 2\n  this.occurrences = function (haystack, needles) {\n\n    if (!angular.isString(haystack)) {\n      throw new TypeError ('formatAsCurrencyUtilities#occurrences expects its 1st argument to be a String, but was given ' + haystack)\n    }\n\n    if (!angular.isArray(needles)) {\n      throw new TypeError ('formatAsCurrencyUtilities#occurrences expects its 2nd argument to be an Array, but was given ' + needles)\n    }\n\n    needles.forEach(function (needle, n) {\n      if (!angular.isString(needle)) {\n        throw new TypeError ('formatAsCurrencyUtilities#occurrences expects needles to be Strings, but needle #' + n + ' is ' + needle)\n      }\n    })\n\n    return needles\n\n      // get counts\n      .map(function (needle) {\n        var _needle = needle\n          .replace(/\\[/g, '\\\\[')\n          .replace(/\\]/g, '\\\\]')\n        return (\n          haystack.match(new RegExp('[' + _needle + ']', 'g')) || []\n        ).length\n      })\n\n      // sum counts\n      .reduce(function (prev, cur) {\n        return prev + cur\n      }, 0)\n  }\n\n  // (currencyString: String) => Number\n  // eg. \"$123.00\" => 123.00\n  this.toFloat = function (currencyString) {\n\n    if (!angular.isString(currencyString)) {\n      throw new TypeError ('formatAsCurrencyUtilities#toFloat expects its 1st argument to be a String, but was given ' + currencyString)\n    }\n\n    return parseFloat(currencyString.replace(/(\\$|\\,)+/g, ''), 10)\n  }\n\n  // (array: Array) => Array\n  // eg. [1,2,2] => [1,2]\n  this.uniq = function (array) {\n    return array.reduce(function (prev, cur) {\n      return prev.indexOf(cur) > -1 ? prev : prev.concat(cur)\n    }, [])\n  }\n\n  // (a: String, b: String) => Array<String>\n  // eg. 123.00, \"$123.00\" => [\"$\", \",\"]\n  this.uniqueChars = function (a, b) {\n\n    if (!angular.isString(a)) {\n      throw new TypeError ('formatAsCurrencyUtilities#uniqueChars expects its 1st argument to be a String, but was given ' + a)\n    }\n\n    if (!angular.isString(b)) {\n      throw new TypeError ('formatAsCurrencyUtilities#uniqueChars expects its 2nd argument to be a String, but was given ' + b)\n    }\n\n    var chars = a.split('')\n    return this.uniq(\n      b.split('').sort().reduce(function (prev, cur) {\n        return chars.indexOf(cur) < 0 ? prev.concat(cur) : prev\n      }, [])\n    )\n\n  }\n\n})\n.directive('formatAsCurrency', ['$filter', '$locale', 'formatAsCurrencyUtilities', function ($filter, $locale, formatAsCurrencyUtilities) {\n\n  var util = formatAsCurrencyUtilities\n\n  return {\n    require: 'ngModel',\n    restrict: 'A',\n    link: function (scope, element, attrs, ngModel) {\n\n      var filter = $filter('currency')\n\n      scope.$watch(function(){\n        return scope.$eval(attrs.currencyFilter)\n      }, function (f) {\n        filter = f ? $filter(f) : $filter('currency')\n        triggerRender()\n      })\n\n      ngModel.$formatters.push(function (value) {\n        return filter(value)\n      })\n\n      ngModel.$parsers.push(function (value) {\n        // ignore non-numeric characters\n        value = value.replace(/[a-zA-Z!\\?>:;\\|<@#%\\^&\\*\\)\\(\\+\\/\\\\={}\\[\\]_]/g, '')\n\n        var number = (Math.floor(util.toFloat(value) * 100) / 100).toFixed(2)\n\n        if (ngModel.$validators.currency(number)) {\n\n          var formatted = filter(number)\n          var specialCharacters = util.uniqueChars(number, formatted)\n\n          // did we add a comma or currency symbol?\n          var specialCharactersCountChange = [value, formatted]\n            .map(function (string) {\n              return util.occurrences(string, specialCharacters)\n            })\n            .reduce(function (prev, cur) {\n              return cur - prev\n            })\n\n          // compute the new selection range, correcting for\n          // formatting introduced by the currency $filter\n          var selectonRange = [\n            element[0].selectionStart,\n            element[0].selectionEnd\n          ].map(function (position) {\n            return position + specialCharactersCountChange\n          })\n\n          // set the formatted value in the view\n          ngModel.$setViewValue(formatted)\n          ngModel.$render()\n\n          // set the cursor back to its expected position\n          // (since $render resets the cursor the the end)\n          element[0].setSelectionRange(selectonRange[0], selectonRange[1])\n        }\n\n        return number\n\n      })\n\n      ngModel.$validators.currency = function (modelValue) {\n        return !isNaN(modelValue)\n      }\n\n      // manually trigger the $formatters pipeline\n      function triggerRender() {\n        ngModel.$setViewValue(ngModel.$formatters.reduce(function (value, fn) {\n          return fn(value)\n        }, ngModel.$modelValue))\n      }\n\n    }\n  }\n\n}])\n},{}]},{},[1])(1)\n});"]}