{"version":3,"file":"myassays-params-value.iife.js","sources":["../MyassaysParamsValue.js","../index.js"],"sourcesContent":["\nconst TYPE_NUMERIC = 'Numeric';\nconst TYPE_STRING = 'String';\nconst COMMA = ',';\nconst POINT = '.';\nconst EVENT_VALUE_CHANGE = 'valuechange';\nconst EVENT_VALUE_CHANGE_VALIDATED = 'valuechangevalidated';\nconst EVENT_VALUE_ERROR = 'valueerror';\n\nexport default class MyassaysParamsValue extends HTMLElement {\n constructor() {\n super();\n\n this._title = '';\n this._value = '';\n this._type = 'String';\n this._validation = '';\n this._decimalSeparator = '.';\n\n this._hasBeenRendered = false;\n\n this.dom = this;\n }\n\n static get observedAttributes() {\n return ['data-title', 'decimal-separator', 'data-value', 'data-validation'];\n }\n\n connectedCallback() {\n this.render();\n\n this.title = this.getAttribute('data-title');\n this.type = this.getAttribute('data-type');\n this.decimalSeparator = this.getAttribute('decimal-separator') || '.';\n this.value = this.getAttribute('data-value') || '';\n this.validation = this.getAttribute('data-validation') || '';\n\n this.configure();\n this._hasBeenRendered = true;\n }\n\n configure() {\n const inputElement = this.dom.querySelector('input');\n inputElement.addEventListener('change', evt => this.onInputChange(evt))\n }\n\n onInputChange(evt) {\n const rawValue = evt.target.value;\n this.dispatchEvent(new CustomEvent(EVENT_VALUE_CHANGE, {detail: rawValue, bubbles: true}));\n let isError = false;\n try {\n this.value = rawValue;\n } catch (error) {\n isError = true;\n this.dispatchEvent(new CustomEvent(EVENT_VALUE_ERROR, {detail: error.message, bubbles: true}));\n }\n if (!isError && this.validation) {\n this.validationFunction(this.value).then(error => {\n if (error) {\n this.dispatchEvent(new CustomEvent(EVENT_VALUE_ERROR, {detail: error, bubbles: true}));\n } else {\n this.dispatchEvent(new CustomEvent(EVENT_VALUE_CHANGE_VALIDATED, {detail: this.value, bubbles: true}));\n }\n });\n }\n }\n\n attributeChangedCallback(attrName, oldVal, newVal) {\n if (this._hasBeenRendered) {\n switch (attrName) {\n case \"data-title\":\n this.title = newVal;\n break;\n case \"decimal-separator\":\n this.decimalSeparator = newVal;\n break;\n case \"data-value\":\n this.value = newVal;\n break;\n case \"data-validation\":\n this.validation = newVal;\n break;\n }\n }\n }\n\n set title(value) {\n if (!value) {\n throw new Error('Please specify a title.');\n }\n if (typeof value !== 'string') {\n throw new Error('Title must be a string.');\n }\n this._title = value;\n this.dom.querySelector('label').innerHTML = this._title + ':';\n }\n\n get title() {\n return this._title;\n }\n\n set type(value) {\n if (value !== TYPE_NUMERIC && value !== TYPE_STRING) {\n throw new Error(`Type must be \"${TYPE_NUMERIC}\" or \"${TYPE_STRING}\".`);\n }\n this._type = value;\n }\n\n get type() {\n return this._type;\n }\n\n set value(value) {\n if (this._type === TYPE_STRING) {\n this._value = String(value || '').trim();\n } else {\n if (typeof value === 'string') {\n const numeric = Number(value.replace(/,/, '.'));\n if (isNaN(numeric)) {\n throw new Error(`Value \"${value}\" is not a valid number.`);\n } else {\n this._value = numeric;\n }\n } else if (typeof value === 'number') {\n this._value = value;\n } else {\n throw new Error(`Invalid value type: ${typeof value}.`);\n }\n }\n this.dom.querySelector('input').value = this.displayValue;\n }\n\n get value() {\n return this._value;\n }\n\n get displayValue() {\n return String(this._value).replace(/\\./, this._decimalSeparator);\n }\n\n set decimalSeparator(value) {\n if (value !== POINT && value !== COMMA) {\n throw new Error('Decimal separator should be comma or point.');\n } else {\n this._decimalSeparator = value;\n }\n }\n\n get decimalSeparator() {\n return this._decimalSeparator;\n }\n\n set validation(value) {\n if (typeof value !== 'string') {\n throw new Error('The validation function name should be a string.');\n } else {\n this._validation = value;\n }\n }\n\n get validation() {\n return this._validation;\n }\n\n get validationFunction() {\n if (this._validation === '') {\n return value => new Promise(resolve => resolve(null));\n } else {\n const fn = window[this._validation];\n if (!fn) {\n throw new Error('The validation function was not found in the global namespace.');\n } else if(typeof fn !== 'function') {\n throw new Error('The validation function is of the wrong type.');\n } else {\n return fn;\n }\n }\n }\n\n render() {\n this.dom.innerHTML = ``;\n }\n}\n","import MyassaysParamsValue from './MyassaysParamsValue';\n\ncustomElements.define('myassays-params-value', MyassaysParamsValue);\n\nif (window.MyAssaysParamsValue !== undefined) {\n if (!(window.MyAssaysParamsValue instanceof Object)) {\n throw new Error('Could not create \"window.MyAssaysParamsValue\" namespace.');\n }\n} else {\n window.MyAssaysParamsValue = {};\n}\nwindow.MyAssaysParamsValue = {\n ...window.MyAssaysParamsValue,\n getById: function (id) {\n const elem = document.getElementById(id);\n if (!elem) {\n throw `An instance of MyassaysParamsValue with the id \"${id}\" could not be found.`;\n } else if (! elem instanceof MyassaysParamsValue) {\n throw `The element with the id \"${id}\" is not a MyassaysParamsValue.`;\n } else {\n return elem;\n }\n },\n getValue: function (id) {\n return this.getById(id).value;\n },\n setValue: function (id, newValue) {\n this.getById(id).value = newValue;\n }\n}\n"],"names":["TYPE_NUMERIC","TYPE_STRING","COMMA","POINT","EVENT_VALUE_CHANGE","EVENT_VALUE_CHANGE_VALIDATED","EVENT_VALUE_ERROR","MyassaysParamsValue","evt","rawValue","isError","error","attrName","oldVal","newVal","value","numeric","resolve","fn","id","elem","newValue"],"mappings":"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"}