{"version":3,"sources":["jsdelivr-header.js","/npm/bootstrap-input-spinner@1.14.0/src/bootstrap-input-spinner.js"],"names":[],"mappings":"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","file":"/npm/bootstrap-input-spinner@1.14.0/src/bootstrap-input-spinner.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/bootstrap-input-spinner@1.14.0/src/bootstrap-input-spinner.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\n * Author and copyright: Stefan Haack (https://shaack.com)\n * Repository: https://github.com/shaack/bootstrap-input-spinner\n * License: MIT, see file 'LICENSE'\n */\n\n;(function ($) {\n    \"use strict\"\n\n    var triggerKeyPressed = false\n    var originalVal = $.fn.val\n    $.fn.val = function (value) {\n        if (arguments.length >= 1) {\n            if (this[0] && this[0][\"bootstrap-input-spinner\"] && this[0].setValue) {\n                var element = this[0]\n                setTimeout(function () {\n                    element.setValue(value)\n                })\n            }\n        }\n        return originalVal.apply(this, arguments)\n    }\n\n    $.fn.inputSpinner = function (methodOrOptions) {\n\n        if (methodOrOptions === \"destroy\") {\n            this.each(function () {\n                this.destroyInputSpinner()\n            })\n            return this\n        }\n\n        var config = {\n            decrementButton: \"<strong>&minus;</strong>\", // button text\n            incrementButton: \"<strong>&plus;</strong>\", // ..\n            groupClass: \"\", // css class of the resulting input-group\n            buttonsClass: \"btn-outline-secondary\",\n            buttonsWidth: \"2.5rem\",\n            textAlign: \"center\",\n            autoDelay: 500, // ms holding before auto value change\n            autoInterval: 100, // speed of auto value change\n            boostThreshold: 10, // boost after these steps\n            boostMultiplier: \"auto\", // you can also set a constant number as multiplier\n            template: // the template of the input\n                '<div class=\"input-group ${groupClass}\">' +\n                '<div class=\"input-group-prepend\"><button style=\"min-width: ${buttonsWidth}\" class=\"btn btn-decrement ${buttonsClass}\" type=\"button\">${decrementButton}</button></div>' +\n                '<input type=\"text\" inputmode=\"decimal\" style=\"text-align: ${textAlign}\" class=\"form-control\"/>' +\n                '<div class=\"input-group-append\"><button style=\"min-width: ${buttonsWidth}\" class=\"btn btn-increment ${buttonsClass}\" type=\"button\">${incrementButton}</button></div>' +\n                '</div>'\n        }\n        for (var option in methodOrOptions) {\n            // noinspection JSUnfilteredForInLoop\n            config[option] = methodOrOptions[option]\n        }\n\n        var html = config.template\n            .replace(/\\${groupClass}/g, config.groupClass)\n            .replace(/\\${buttonsWidth}/g, config.buttonsWidth)\n            .replace(/\\${buttonsClass}/g, config.buttonsClass)\n            .replace(/\\${decrementButton}/g, config.decrementButton)\n            .replace(/\\${incrementButton}/g, config.incrementButton)\n            .replace(/\\${textAlign}/g, config.textAlign)\n\n        var locale = navigator.language || \"en-US\"\n\n        this.each(function () {\n\n            var $original = $(this)\n            $original[0][\"bootstrap-input-spinner\"] = true\n            $original.hide()\n\n            var autoDelayHandler = null\n            var autoIntervalHandler = null\n            var autoMultiplier = config.boostMultiplier === \"auto\"\n            var boostMultiplier = autoMultiplier ? 1 : config.boostMultiplier\n\n            var $inputGroup = $(html)\n            var $buttonDecrement = $inputGroup.find(\".btn-decrement\")\n            var $buttonIncrement = $inputGroup.find(\".btn-increment\")\n            var $input = $inputGroup.find(\"input\")\n\n            var min = null\n            var max = null\n            var step = null\n            var stepMax = null\n            var decimals = null\n            var digitGrouping = null\n            var numberFormat = null\n\n            updateAttributes()\n\n            var value = parseFloat($original[0].value)\n            var boostStepsCount = 0\n\n            var prefix = $original.attr(\"data-prefix\") || \"\"\n            var suffix = $original.attr(\"data-suffix\") || \"\"\n\n            if (prefix) {\n                var prefixElement = $('<span class=\"input-group-text\">' + prefix + '</span>')\n                $inputGroup.find(\".input-group-prepend\").append(prefixElement)\n            }\n            if (suffix) {\n                var suffixElement = $('<span class=\"input-group-text\">' + suffix + '</span>')\n                $inputGroup.find(\".input-group-append\").prepend(suffixElement)\n            }\n\n            $original[0].setValue = function (newValue) {\n                setValue(newValue)\n            }\n            $original[0].destroyInputSpinner = function () {\n                destroy()\n            }\n\n            var observer = new MutationObserver(function () {\n                updateAttributes()\n                setValue(value, true)\n            })\n            observer.observe($original[0], {attributes: true})\n\n            $original.after($inputGroup)\n\n            setValue(value)\n\n            $input.on(\"paste input change focusout\", function (event) {\n                var newValue = $input[0].value\n                var focusOut = event.type === \"focusout\"\n                newValue = parseLocaleNumber(newValue)\n                setValue(newValue, focusOut)\n                dispatchEvent($original, event.type)\n            })\n\n            onPointerDown($buttonDecrement[0], function () {\n                stepHandling(-step)\n            })\n            onPointerDown($buttonIncrement[0], function () {\n                stepHandling(step)\n            })\n            onPointerUp(document.body, function () {\n                resetTimer()\n            })\n\n            function setValue(newValue, updateInput) {\n                if (updateInput === undefined) {\n                    updateInput = true\n                }\n                if (isNaN(newValue) || newValue === \"\") {\n                    $original[0].value = \"\"\n                    if (updateInput) {\n                        $input[0].value = \"\"\n                    }\n                    value = NaN\n                } else {\n                    newValue = parseFloat(newValue)\n                    newValue = Math.min(Math.max(newValue, min), max)\n                    newValue = Math.round(newValue * Math.pow(10, decimals)) / Math.pow(10, decimals)\n                    $original[0].value = newValue\n                    if (updateInput) {\n                        $input[0].value = numberFormat.format(newValue)\n                    }\n                    value = newValue\n                }\n            }\n\n            function destroy() {\n                $original.prop(\"required\", $input.prop(\"required\"))\n                observer.disconnect()\n                resetTimer()\n                $input.off(\"paste input change focusout\")\n                $inputGroup.remove()\n                $original.show()\n            }\n\n            function dispatchEvent($element, type) {\n                if (type) {\n                    setTimeout(function () {\n                        var event\n                        if (typeof (Event) === 'function') {\n                            event = new Event(type, {bubbles: true})\n                        } else { // IE\n                            event = document.createEvent('Event')\n                            event.initEvent(type, true, true)\n                        }\n                        $element[0].dispatchEvent(event)\n                    })\n                }\n            }\n\n            function stepHandling(step) {\n                if (!$input[0].disabled && !$input[0].readOnly) {\n                    calcStep(step)\n                    resetTimer()\n                    autoDelayHandler = setTimeout(function () {\n                        autoIntervalHandler = setInterval(function () {\n                            if (boostStepsCount > config.boostThreshold) {\n                                if (autoMultiplier) {\n                                    calcStep(step * parseInt(boostMultiplier, 10))\n                                    if (boostMultiplier < 100000000) {\n                                        boostMultiplier = boostMultiplier * 1.1\n                                    }\n                                    if (stepMax) {\n                                        boostMultiplier = Math.min(stepMax, boostMultiplier)\n                                    }\n                                } else {\n                                    calcStep(step * boostMultiplier)\n                                }\n                            } else {\n                                calcStep(step)\n                            }\n                            boostStepsCount++\n                        }, config.autoInterval)\n                    }, config.autoDelay)\n                }\n            }\n\n            function calcStep(step) {\n                if (isNaN(value)) {\n                    value = 0\n                }\n                setValue(Math.round(value / step) * step + step)\n                dispatchEvent($original, \"input\")\n                dispatchEvent($original, \"change\")\n            }\n\n            function resetTimer() {\n                boostStepsCount = 0\n                boostMultiplier = boostMultiplier = autoMultiplier ? 1 : config.boostMultiplier\n                clearTimeout(autoDelayHandler)\n                clearTimeout(autoIntervalHandler)\n            }\n\n            function updateAttributes() {\n                // copy properties from original to the new input\n                if ($original.prop(\"required\")) {\n                    $input.prop(\"required\", $original.prop(\"required\"))\n                    $original.removeAttr('required')\n                }\n                $input.prop(\"placeholder\", $original.prop(\"placeholder\"))\n                $input.attr(\"inputmode\", $original.attr(\"inputmode\") || \"decimal\")\n                var disabled = $original.prop(\"disabled\")\n                var readonly = $original.prop(\"readonly\")\n                $input.prop(\"disabled\", disabled)\n                $input.prop(\"readonly\", readonly)\n                $buttonIncrement.prop(\"disabled\", disabled || readonly)\n                $buttonDecrement.prop(\"disabled\", disabled || readonly)\n                if (disabled || readonly) {\n                    resetTimer()\n                }\n                var originalClass = $original.prop(\"class\")\n                var groupClass = \"\"\n                // sizing\n                if (/form-control-sm/g.test(originalClass)) {\n                    groupClass = \"input-group-sm\"\n                } else if (/form-control-lg/g.test(originalClass)) {\n                    groupClass = \"input-group-lg\"\n                }\n                var inputClass = originalClass.replace(/form-control(-(sm|lg))?/g, \"\")\n                $inputGroup.prop(\"class\", \"input-group \" + groupClass + \" \" + config.groupClass)\n                $input.prop(\"class\", \"form-control \" + inputClass)\n\n                // update the main attributes\n                min = parseFloat($original.prop(\"min\")) || 0\n                max = isNaN($original.prop(\"max\")) || $original.prop(\"max\") === \"\" ? Infinity : parseFloat($original.prop(\"max\"))\n                step = parseFloat($original.prop(\"step\")) || 1\n                stepMax = parseInt($original.attr(\"data-step-max\")) || 0\n                var newDecimals = parseInt($original.attr(\"data-decimals\")) || 0\n                var newDigitGrouping = !($original.attr(\"data-digit-grouping\") === \"false\")\n                if (decimals !== newDecimals || digitGrouping !== newDigitGrouping) {\n                    decimals = newDecimals\n                    digitGrouping = newDigitGrouping\n                    numberFormat = new Intl.NumberFormat(locale, {\n                        minimumFractionDigits: decimals,\n                        maximumFractionDigits: decimals,\n                        useGrouping: digitGrouping\n                    })\n                }\n                if ($original.attr(\"hidden\")) {\n                    $inputGroup.attr(\"hidden\", $original.attr(\"hidden\"))\n                } else {\n                    $inputGroup.removeAttr(\"hidden\")\n                }\n            }\n\n            function parseLocaleNumber(stringNumber) {\n                var numberFormat = new Intl.NumberFormat(locale)\n                var thousandSeparator = numberFormat.format(11111).replace(/1/g, '') || '.'\n                var decimalSeparator = numberFormat.format(1.1).replace(/1/g, '')\n                return parseFloat(stringNumber\n                    .replace(new RegExp(' ', 'g'), '')\n                    .replace(new RegExp('\\\\' + thousandSeparator, 'g'), '')\n                    .replace(new RegExp('\\\\' + decimalSeparator), '.')\n                )\n            }\n        })\n\n        return this\n    }\n\n    function onPointerUp(element, callback) {\n        element.addEventListener(\"mouseup\", function (e) {\n            callback(e)\n        })\n        element.addEventListener(\"touchend\", function (e) {\n            callback(e)\n        })\n        element.addEventListener(\"keyup\", function (e) {\n            if ((e.keyCode === 32 || e.keyCode === 13)) {\n                triggerKeyPressed = false\n                callback(e)\n            }\n        })\n    }\n\n    function onPointerDown(element, callback) {\n        element.addEventListener(\"mousedown\", function (e) {\n            e.preventDefault()\n            callback(e)\n        })\n        element.addEventListener(\"touchstart\", function (e) {\n            if (e.cancelable) {\n                e.preventDefault()\n            }\n            callback(e)\n        })\n        element.addEventListener(\"keydown\", function (e) {\n            if ((e.keyCode === 32 || e.keyCode === 13) && !triggerKeyPressed) {\n                triggerKeyPressed = true\n                callback(e)\n            }\n        })\n    }\n\n}(jQuery))\n"]}