{"version":3,"file":"slx.numericinput.min.js","sources":["dist/js/slx.numericinput.js"],"sourcesContent":["/**\r\n * SlxControls 1.2.36 ({@link https://www.selerix.com})\r\n * This is unpublished proprietary source code of Selerix Systems, Inc. The\r\n * copyright notice above is not evidence any actual or intended\r\n * publication of such source code.\r\n * @copyright Copyright 2024 Selerix Systems, Inc. All Rights Reserved.\r\n */\r\nvar SlxNumericInput = (function (global) {\r\n\t'use strict';\r\n\tvar x = global.SlxControl;\r\n\r\n\t// data types\r\n\tvar SlxNumberType = {\r\n\t\tinteger: 0,\r\n\t\tdecimal: 1,\r\n\t\tmoney: 2,\r\n\t\tpercent: 3\r\n\t};\r\n\r\n\t/*\r\n\t * slx.numericInput\r\n\t * Dependencies: slx.core\r\n\t */\r\n\tx.slx.numericInput = function () {\r\n\t\tvar that = this;\r\n\t\tx.slx.base.apply(that, arguments);\r\n\r\n\t\t// reference current element\r\n\t\tvar el = that._element;\r\n\t\tif (el === void 0) { return this; }\r\n\t\telse if (el.length === 0) { return el; }\r\n\r\n\t\t// set custom settings from data props and attributes\r\n\t\tthat.id = that.id || el.slxUniqueId();\r\n\t\tthat.selector = '#' + that.id;\r\n\t\tthat.onChange = that.onChange || el.attr('onchange') !== void 0 ? x.eval.call(el[0], el.attr('onchange'), 'event') : void 0;\r\n\t\tthat.required = el.prop('required');\r\n\t\tthat.readonly = el.prop('readonly');\r\n\t\tthat.disabled = el.prop('disabled');\r\n\t\tthat.removeDelimeters = el.data('remove-delimeters') || false;\r\n\t\tthat.decimalPlaces = that.decimalPlaces || el.data('decimal-places') || 0;\r\n\t\tthat.min = that.min || (el.data('min') === void 0 ? null : el.data('min'));\r\n\t\tthat.max = that.max || (el.data('max') === void 0 ? null : el.data('max'));\r\n\t\tthat.step = that.step || (el.data('step') === void 0 ? 1 : el.data('step'));\r\n\t\tthat.step = typeof that.step === 'number' ? that.step : Number.parseFloat(that.step);\r\n\t\tif (Number.isNaN(that.step)) {\r\n\t\t\tthat.step = 1;\r\n\t\t}\r\n\t\tthat.defaultValue = that.defaultValue || (el.data('default-value') === void 0 ? null : el.data('default-value'));\r\n\t\tthat.emptyIf = that.emptyIf || (el.data('empty-if') === void 0 ? null : el.data('empty-if'));\r\n\t\tthat.prefix = that.prefix || (el.data('prefix') === void 0 ? null : el.data('prefix'));\r\n\t\tthat.suffix = that.suffix || (el.data('suffix') === void 0 ? null : el.data('suffix'));\r\n\r\n\t\t// set default value when not allowing empty values\r\n\t\tif (that.emptyIf === 'never' && !that.defaultValue) {\r\n\t\t\tthat.defaultValue = that.min > 0 ? that.min : 0;\r\n\t\t}\r\n\r\n\t\tvar t = that.type || el.data('type') || SlxNumberType.integer;\r\n\t\tthat.type = typeof t === 'string' ? SlxNumberType[t] || SlxNumberType.integer : t\r\n\t\tif (that.type === SlxNumberType.integer && that.decimalPlaces > 0) {\r\n\t\t\tthat.type = SlxNumberType.decimal;\r\n\t\t} else if (that.type === SlxNumberType.money && el.data('decimal-places') === void 0) {\r\n\t\t\tthat.decimalPlaces = 2;\r\n\t\t}\r\n\r\n\t\t// determine prefix or suffix by number type\r\n\t\tif (that.prefix === null && that.suffix === null) {\r\n\t\t\tswitch (that.type) {\r\n\t\t\t\tcase SlxNumberType.money:\r\n\t\t\t\t\tthat.prefix = '$';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SlxNumberType.percent:\r\n\t\t\t\t\tthat.suffix = '%';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// convert to number\r\n\t\tvar _convert = function(value) {\r\n\t\t\tvar v = value;\r\n\r\n\t\t\t// return if already a number\r\n\t\t\tif (typeof v === 'number') {}\r\n\t\t\t// convert to number\r\n\t\t\telse if (typeof v === 'string') {\r\n\t\t\t\tv = v.replace(/[^\\d.\\-(]/g, '').replace(/[(]/g, '-');\r\n\t\t\t\tv = v.indexOf('.') >= 0 ? Number.parseFloat(v) : Number.parseInt(v, 10);\r\n\t\t\t} else {\r\n\t\t\t\tv = NaN;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn Number.isNaN(v) ? null : v;\r\n\t\t};\r\n\r\n\t\t// format value\r\n\t\tvar _formatValue = function(value, withCommas) {\r\n\t\t\tvar commas = withCommas !== void 0 ? withCommas : true;\r\n\t\t\tvar v = _convert(value);\r\n\r\n\t\t\t// validate max range\r\n\t\t\tif (that.max !== null && v > that.max) {\r\n\t\t\t\tv = that.max;\r\n\t\t\t}\r\n\t\t\t// validate min range\r\n\t\t\telse if (that.min !== null && v < that.min) {\r\n\t\t\t\tv = that.min;\r\n\t\t\t}\r\n\r\n\t\t\t// money\r\n\t\t\tvar options = null;\r\n\t\t\tvar isCurrency = false;\r\n\t\t\tswitch (that.type) {\r\n\t\t\t\t// format as integer\r\n\t\t\t\tcase SlxNumberType.integer:\r\n\t\t\t\t\toptions = { maximumFractionDigits: 0 };\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// format as decimal\r\n\t\t\t\tcase SlxNumberType.decimal:\r\n\t\t\t\t\toptions = { style: 'decimal', maximumFractionDigits: that.decimalPlaces };\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// format as currency\r\n\t\t\t\tcase SlxNumberType.money:\r\n\t\t\t\t\toptions = { style: 'currency', currency: 'USD', maximumFractionDigits: that.decimalPlaces };\r\n\t\t\t\t\tisCurrency = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// format as percentage\r\n\t\t\t\tcase SlxNumberType.percent:\r\n\t\t\t\t\tv /= 100;\r\n\t\t\t\t\toptions = { style: 'percent', maximumFractionDigits: that.decimalPlaces };\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// default format\r\n\t\t\t\tdefault:\r\n\t\t\t\t\toptions = { maximumFractionDigits: that.decimalPlaces };\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// use localized number format\r\n\t\t\tvar f;\r\n\t\t\ttry {\r\n\t\t\t\tf = new Intl.NumberFormat('en-US', options).format(v);\r\n\t\t\t} catch (ex) {\r\n\t\t\t\tif (isCurrency && that.decimalPlaces < 2) {\r\n\t\t\t\t\toptions.maximumFractionDigits = 2;\r\n\t\t\t\t\tf = new Intl.NumberFormat('en-US', options).format(v);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow ex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn commas ? f : f.replace(/[,]/g, '');\r\n\t\t};\r\n\r\n\t\t// set disabled prop\r\n\t\tthat.setDisabled = function (v) {\r\n\t\t\tthat.disabled = v === true;\r\n\t\t\tel.prop('disabled', that.disabled);\r\n\t\t};\r\n\t\t// set readonly prop\r\n\t\tthat.setReadonly = function (v) {\r\n\t\t\tthat.readonly = v === true;\r\n\t\t\tel.prop('readonly', that.readonly);\r\n\t\t};\r\n\t\t// set required prop\r\n\t\tthat.setRequired = function (v) {\r\n\t\t\tthat.required = v === true;\r\n\t\t\tel.prop('required', that.required);\r\n\t\t};\r\n\t\t// get and set value of control\r\n\t\tthat.value = function (v) {\r\n\t\t\tif (v === void 0) {\r\n\t\t\t\t// get value without delimeters\r\n\t\t\t\tif (that.removeDelimeters) {\r\n\t\t\t\t\treturn el.slxVal().replace(/[^\\d.]/g, '');\r\n\t\t\t\t}\r\n\t\t\t\t// get value\r\n\t\t\t\treturn el.slxVal();\r\n\t\t\t} else {\r\n\t\t\t\t// set value\r\n\t\t\t\tvar newval = that.emptyIf === 'never' && (v === '' || v === null) ? that.defaultValue : v;\r\n\t\t\t\tvar ischange = newval !== el.slxVal();\r\n\t\t\t\tvar h = el.slxVal(_formatValue(newval));\r\n\t\t\t\tif (ischange) { el.trigger('change'); }\r\n\t\t\t\treturn h;\r\n\t\t\t}\r\n\t\t};\r\n\t\t// get and set text value\r\n\t\tthat.text = function (v) {\r\n\t\t\tif (v === void 0) {\r\n\t\t\t\t// get text\r\n\t\t\t\treturn el.slxVal();\r\n\t\t\t} else {\r\n\t\t\t\t// set text\r\n\t\t\t\tif (v === '') { that.value(''); }\r\n\t\t\t\treturn el.slxVal(v);\r\n\t\t\t}\r\n\t\t};\r\n\t\t// set min value\r\n\t\tthat.setMin = function (v) {\r\n\t\t\tthat.min = typeof v === 'number' ? v : that.min;\r\n\t\t};\r\n\t\t// set max value\r\n\t\tthat.setMax = function (v) {\r\n\t\t\tthat.max = typeof v === 'number' ? v : that.max;\r\n\t\t};\r\n\t\t// set min/max range\r\n\t\tthat.setRange = function (min, max) {\r\n\t\t\tthat.setMin(min);\r\n\t\t\tthat.setMax(max);\r\n\t\t};\r\n\t\t// set max value\r\n\t\tthat.setStep = function (v) {\r\n\t\t\tthat.step = typeof v === 'number' ? v : that.step;\r\n\t\t};\r\n\r\n\t\t// get number value\r\n\t\tthat.numberValue = function() {\r\n\t\t\treturn _convert(that.value());\r\n\t\t};\r\n\r\n\t\t/* initialization */\r\n\t\t(function () {\r\n\t\t\tel.prop('type', 'text');\r\n\r\n\t\t\t// empty out onchange attribute since this handler was already extracted and locally stored\r\n\t\t\tel.attr({ onchange: null, autocomplete: 'none' });\r\n\r\n\t\t\t// set props from settings\r\n\t\t\tel.prop({\r\n\t\t\t\trequired: that.required,\r\n\t\t\t\treadonly: that.readonly,\r\n\t\t\t\tdisabled: that.disabled\r\n\t\t\t});\r\n\r\n\t\t\t// add css class if needed and original val\r\n\t\t\tif (!el.hasClass('slx-numericinput')) { el.addClass('slx-numericinput'); }\r\n\t\t\tif (!el.data('original-val')) el.data('original-val', el.slxVal());\r\n\r\n\t\t\t// fill initial value with mask\r\n\t\t\tvar v = el.slxVal();\r\n\t\t\tif (v === '' && (that.defaultValue || that.defaultValue === 0)) {\r\n\t\t\t\tv = that.defaultValue;\r\n\t\t\t}\r\n\r\n\t\t\t// format value\r\n\t\t\tvar n = _convert(v);\r\n\t\t\tif (n !== null && n !== that.emptyIf) {\r\n\t\t\t\tv = _formatValue(n);\r\n\t\t\t}\r\n\r\n\t\t\t// html encode value and trigger render event\r\n\t\t\tel.slxVal(x.htmlEncode(v));\r\n\t\t\tsetTimeout(function () { el.trigger('render'); });\r\n\t\t})();\r\n\r\n\t\t/* events */\r\n\t\t(function () {\r\n\t\t\t// element change event\r\n\t\t\tel.off('change.slx.numericinput').on('change.slx.numericinput', function (event) {\r\n\t\t\t\tif (typeof that.onChange === 'function') {\r\n\t\t\t\t\tthat.onChange.call(el[0], event);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// element on focus event\r\n\t\t\tel.off('focusin.slx.numericinput').on('focusin.slx.numericinput', function (event) {\r\n\t\t\t\t// set initial value and set cursor\r\n\t\t\t\tif (!el.slxVal()) {\r\n\t\t\t\t\tel.slxVal(_formatValue(0));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.slxVal(_formatValue(_convert(el.slxVal()), false));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// move cursor to first numeric character\r\n\t\t\t\tvar p;\r\n\t\t\t\tif (that.prefix) {\r\n\t\t\t\t\tp = that.prefix.toString().length;\r\n\t\t\t\t\tel.setSelectionRange(p, el.slxVal().length);\r\n\t\t\t\t} else if (that.suffix) {\r\n\t\t\t\t\tp = el.slxVal().indexOf(that.suffix.toString());\r\n\t\t\t\t\tel.setSelectionRange(0, p);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.setSelectionRange(0, el.slxVal().length);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// element on leaving focus event\r\n\t\t\tel.off('focusout.slx.numericinput').on('focusout.slx.numericinput', function (event) {\r\n\t\t\t\t// convert value to number\r\n\t\t\t\tvar v = _convert(el.val());\r\n\t\t\t\t\r\n\t\t\t\t// set to default if never empty\r\n\t\t\t\tif (v === null && that.emptyIf === 'never') {\r\n\t\t\t\t\tthat.value(that.defaultValue);\r\n\t\t\t\t}\r\n\t\t\t\t// clear value if treated as empty\r\n\t\t\t\telse if (v === that.emptyIf || (v === null && that.emptyIf !== 'never')) {\r\n\t\t\t\t\tel.slxVal('');\r\n\t\t\t\t}\r\n\t\t\t\t// format value on unfocus\r\n\t\t\t\telse {\r\n\t\t\t\t\tthat.value(_formatValue(v));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// trigger change event\r\n\t\t\t\tif (el.data('original-val') !== that.value()) {\r\n\t\t\t\t\tel.data('original-val', that.value());\r\n\t\t\t\t\tel.trigger('change');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// element key press event\r\n\t\t\tel.off('keydown.slx.numericinput').on('keydown.slx.numericinput', function (event) {\r\n\t\t\t\t// determine key pressed\r\n\t\t\t\tvar k = event.keyCode || event.which, char = String.fromCharCode(k);\r\n\t\t\t\tvar v = that.numberValue() || 0, val, enter = k === 13;\r\n\r\n\t\t\t\t// set cursor\r\n\t\t\t\tvar cursor = el.getSelectionRange(), p = 0;\r\n\r\n\t\t\t\t// handle incrementation and decrementation\r\n\t\t\t\tif (k === 38 || k === 40) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t\t// up arrow incrementation\r\n\t\t\t\t\tif (k === 38) {\r\n\t\t\t\t\t\tv = that.max !== null && v + that.step > that.max ? that.max : v + that.step;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// down arrow decrementation\r\n\t\t\t\t\telse if (k === 40) {\r\n\t\t\t\t\t\tv = that.min !== null && v - that.step < that.min ? that.min : v - that.step;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// set updated value\r\n\t\t\t\t\tel.slxVal(_formatValue(v).replace(/[,]/g, ''));\r\n\r\n\t\t\t\t\t// move cursor to first numeric character\r\n\t\t\t\t\tif (that.prefix) {\r\n\t\t\t\t\t\tp = that.prefix.toString().length;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// move cursor to last numeric character\r\n\t\t\t\t\telse if (that.suffix) {\r\n\t\t\t\t\t\tp = that.value().indexOf(that.suffix);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// keep same cursor position\r\n\t\t\t\t\telse if (cursor !== null) {\r\n\t\t\t\t\t\tp = cursor.start;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tel.setSelectionRange(p, p);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// ignore certain keys\r\n\t\t\t\tvar ignore = [8, 9, 16, 17, 35, 36, 37, 38, 39, 40, 46];\r\n\t\t\t\tif (ignore.contains(k)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// validate character\r\n\t\t\t\tif (k >= 96 && k <= 105) { k -= 48; char = String.fromCharCode(k); }\r\n\t\t\t\t\r\n\t\t\t\t// dot/decimal character\r\n\t\t\t\tvar dot = k === 110 || (k === 190 && !event.shiftKey);\r\n\r\n\t\t\t\t// check for dot already existing and move cursor\r\n\t\t\t\tvar dotIndex = el.slxVal().indexOf('.');\r\n\t\t\t\tif (dot && dotIndex > -1) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tp = el.slxVal().indexOf('.') + 1;\r\n\t\t\t\t\tel.setSelectionRange(p, p);\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\t// enter new dot if not already existing\r\n\t\t\t\telse if (dot && that.decimalPlaces > 0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// validate numeric entry\r\n\t\t\t\tvar minus = k === 109 || (!event.shiftKey && k === 189);\r\n\t\t\t\tif (!minus && !/\\d/g.test(char) || event.shiftKey) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// insert numeric character\r\n\t\t\t\tif (cursor !== null) {\r\n\t\t\t\t\tp = cursor.start;\r\n\t\t\t\t\tvar end = cursor.end;\r\n\t\t\t\t\tif ((minus && p !== 0) || (minus && el.slxVal().indexOf('-') > -1)) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tval = el.slxVal();\r\n\r\n\t\t\t\t\t// fix cursor position\r\n\t\t\t\t\tvar prefixIndex = val.indexOf(that.prefix);\r\n\t\t\t\t\tvar suffixIndex = val.indexOf(that.suffix);\r\n\t\t\t\t\t// fix cursor at prefix\r\n\t\t\t\t\tif (!minus && that.prefix && prefixIndex > -1 && p <= prefixIndex) {\r\n\t\t\t\t\t\tp = prefixIndex + that.prefix.length;\r\n\t\t\t\t\t\tend = end < p ? p : end;\r\n\t\t\t\t\t\tel.setSelectionRange(p, end);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// fix cursor at suffix\r\n\t\t\t\t\telse if (that.suffix && suffixIndex > -1 && p >= suffixIndex) {\r\n\t\t\t\t\t\tif (p > suffixIndex || (p === suffixIndex && that.decimalPlaces > 0 && val.indexOf('.') > -1 && val.substring(0, suffixIndex).split('.')[1].length === that.decimalPlaces)) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tp = suffixIndex;\r\n\t\t\t\t\t\tend = end < p ? p : end;\r\n\t\t\t\t\t\tel.setSelectionRange(p, end);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (that.decimalPlaces > 0) {\r\n\t\t\t\t\t\tif (dotIndex > -1 && p > dotIndex) {\r\n\t\t\t\t\t\t\t// don't allow decimal places beyond the maximum\r\n\t\t\t\t\t\t\tif (p === val.length && val.split('.')[1].length === that.decimalPlaces) {\r\n\t\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\t\tval = el.slxVal().splice(p, 1, char);\r\n\t\t\t\t\t\t\t\tel.slxVal(val);\r\n\t\t\t\t\t\t\t\tp++;\r\n\t\t\t\t\t\t\t\tel.setSelectionRange(p, p);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t})();\r\n\r\n\t\t// register control w/ element\r\n\t\tel[0].slxNumericInput = this;\r\n\t\tel[0].isSlxControl = true;\r\n\r\n\t\treturn el;\r\n\t};\r\n\t// update constructor\r\n\tx.slx.numericInput.prototype = Object.create(x.slx.base.prototype);\r\n\tx.slx.numericInput.prototype.constructor = x.slx.numericInput;\r\n\r\n\t/* extenders */\r\n\tx.slx.extend({\r\n\t\t// add control init extension\r\n\t\tslxNumericInput: function () {\r\n\t\t\tvar slx = this.slxControl('slxNumericInput', arguments) || new x.slx.numericInput(this, arguments);\r\n\t\t\tif (arguments.length > 0) {\r\n\t\t\t\tvar arg = arguments[0], args = Array.prototype.slice.call(arguments, 1);\r\n\t\t\t\tif (typeof arg === 'string' && slx.hasOwnProperty(arg)) { return typeof (slx[arg]) === 'function' ? slx[arg].apply(slx, args) : slx[arg]; }\r\n\t\t\t\telse if (typeof arg !== 'string') { x.extend(slx, arg); }\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t});\r\n\t\r\n\t// register control\r\n\tx.slx.register('slxNumericInput', x.slx.slxNumericInput);\r\n\r\n\t// initialize all controls by CSS class\r\n\tx(function () { x('.slx-numericinput').each(function () { x(this).slxNumericInput(); }); });\r\n\r\n\treturn x;\r\n})(window || this);"],"names":["SlxNumericInput","global","x","SlxControl","SlxNumberType","integer","decimal","money","percent","slx","numericInput","that","this","el","base","apply","arguments","_element","length","id","slxUniqueId","selector","onChange","attr","eval","call","required","prop","readonly","disabled","removeDelimeters","data","decimalPlaces","min","max","step","Number","parseFloat","isNaN","defaultValue","emptyIf","prefix","suffix","t","type","n","_convert","value","v","replace","indexOf","parseInt","NaN","_formatValue","withCommas","f","commas","options","isCurrency","maximumFractionDigits","style","currency","Intl","NumberFormat","format","ex","setDisabled","setReadonly","setRequired","ischange","slxVal","newval","h","trigger","text","setMin","setMax","setRange","setStep","numberValue","onchange","autocomplete","hasClass","addClass","htmlEncode","setTimeout","off","on","event","p","toString","setSelectionRange","val","k","keyCode","which","char","String","fromCharCode","cursor","getSelectionRange","preventDefault","start","ignore","contains","dot","shiftKey","dotIndex","minus","test","end","prefixIndex","suffixIndex","substring","split","splice","slxNumericInput","isSlxControl","prototype","Object","create","constructor","extend","slxControl","arg","args","Array","slice","hasOwnProperty","register","each","window"],"mappings":"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"}