You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
validator/public/js/index.js

1 line
196 KiB

(()=>{var __webpack_modules__={"./src/fieldError.riot"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n css: null,\n\n exports: {\n state: {\n errors: [\n\n ],\n\n // css class for\n closest: '.field-group',\n },\n\n /**\n *\n *\n * @param {Object} props\n * @param {Object} state\n *\n */\n onBeforeMounted(props, state)\n {\n if (props.closest) {\n state.closest = props.closest\n }\n },\n\n /**\n *\n *\n * @param {Object} props\n * @param {Object} state\n *\n */\n onMounted(props, state)\n {\n // getting parent element for entire field\n const parent = this.root.closest(state.closest)\n\n // getting current element by name\n const element = parent.querySelector('[name=\"' + props.name + '\"]')\n\n // getting form\n const form = element.closest('form')\n\n // element, form are exists and nofieldupdate is not set\n // each change of the element dispatch a event to form validation\n if (element && form && !props.nofieldupdate) {\n element.addEventListener('input', (event) => {\n this.dispatchCustomEvent(event, form, props.name)\n })\n }\n\n // add custom event to listen to form-validation\n this.root.addEventListener('form-validation', (event) => {\n this.onFormValidation(event, parent)\n })\n },\n\n /**\n * process form validation triggered by form\n *\n * @param {Event} event\n * @param {Element} parent\n *\n */\n onFormValidation(event, parent)\n {\n // if detail is a value, set to errors\n if (event.detail) {\n this.state.errors = event.detail\n\n parent.classList.add('field--error')\n parent.classList.remove('field--valid')\n } else {\n this.state.errors = []\n\n parent.classList.remove('field--error')\n parent.classList.add('field--valid')\n }\n\n this.update()\n },\n\n /**\n * create event to send to form validation\n *\n * @param {Event} event\n * @param {Element} form\n * @param {string} name\n *\n */\n dispatchCustomEvent(event, form, name)\n {\n const fieldUpdateEvent = new CustomEvent('field-update', {\n 'detail': {\n 'name': name,\n 'value': event.target.value\n }\n })\n\n form.dispatchEvent(fieldUpdateEvent)\n }\n },\n\n template: (\n template,\n expressionTypes,\n bindingTypes,\n getComponent\n ) => template(\n '<div expr0=\"expr0\" class=\"field-error\"></div>',\n [\n {\n type: bindingTypes.IF,\n evaluate: _scope => _scope.state.errors.length > 0,\n redundantAttribute: 'expr0',\n selector: '[expr0]',\n\n template: template(\n '<ul><li expr1=\"expr1\"></li></ul>',\n [\n {\n type: bindingTypes.EACH,\n getKey: null,\n condition: null,\n\n template: template(\n ' ',\n [\n {\n expressions: [\n {\n type: expressionTypes.TEXT,\n childNodeIndex: 0,\n\n evaluate: _scope => [\n _scope.error\n ].join(\n ''\n )\n }\n ]\n }\n ]\n ),\n\n redundantAttribute: 'expr1',\n selector: '[expr1]',\n itemName: 'error',\n indexName: null,\n evaluate: _scope => _scope.state.errors\n }\n ]\n )\n }\n ]\n ),\n\n name: 'field-error'\n});\n\n//# sourceURL=webpack://@tiny-components/validator/./src/fieldError.riot?\n}")},"./src/formComponent.riot"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _formValidator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formValidator.js */ \"./src/formValidator.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n css: null,\n\n exports: {\n state:\n {\n result: undefined,\n validator: undefined,\n class: undefined\n },\n\n onMounted()\n {\n // creating formValidator\n this.state.validator = new _formValidator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.$('.form'), {\n 'email': {\n 'presence': true,\n 'email': true\n },\n 'password': {\n 'presence': true\n }\n })\n\n // adding on success\n this.state.validator.onSuccess((event, data) => {\n this.handleSuccess(event, data)\n })\n\n // adding on error\n this.state.validator.onError((event, errors, data) => {\n this.handleError(event, errors, data)\n })\n },\n\n /**\n *\n * @param {object} event\n * @param {array} data\n *\n */\n handleSuccess(event, data)\n {\n event.preventDefault()\n\n this.state.class = 'background-color-success'\n this.state.result = JSON.stringify(data)\n this.update()\n },\n\n /**\n *\n *\n * @param {object} event\n * @param {array} errors\n * @param {array} data\n *\n */\n handleError(event, errors, data)\n {\n this.state.class = 'background-color-danger'\n this.state.result = JSON.stringify(errors)\n this.update()\n }\n },\n\n template: (\n template,\n expressionTypes,\n bindingTypes,\n getComponent\n ) => template(\n '<div><form expr2=\"expr2\" class=\"form\" novalidate method=\"post\"><div class=\"field-group\"><label class=\"field-label\">\\n email\\n <input type=\"email\" class=\"field-text\" name=\"email\"/></label><field-error expr3=\"expr3\"></field-error></div><div class=\"field-group\"><label class=\"field-label\">\\n password\\n <input type=\"password\" class=\"field-text\" name=\"password\"/></label><field-error expr4=\"expr4\"></field-error></div><button class=\"button\" type=\"submit\">\\n Send\\n </button></form><div expr5=\"expr5\" class=\"loading\"></div><div expr6=\"expr6\"></div></div>',\n [\n {\n redundantAttribute: 'expr2',\n selector: '[expr2]',\n\n expressions: [\n {\n type: expressionTypes.EVENT,\n name: 'onsubmit',\n\n evaluate: _scope => event => (_scope.state.validator.submit(\n event\n ))\n }\n ]\n },\n {\n type: bindingTypes.TAG,\n getComponent: getComponent,\n evaluate: _scope => 'field-error',\n slots: [],\n\n attributes: [\n {\n type: expressionTypes.ATTRIBUTE,\n isBoolean: false,\n name: 'name',\n evaluate: _scope => 'email'\n }\n ],\n\n redundantAttribute: 'expr3',\n selector: '[expr3]'\n },\n {\n type: bindingTypes.TAG,\n getComponent: getComponent,\n evaluate: _scope => 'field-error',\n slots: [],\n\n attributes: [\n {\n type: expressionTypes.ATTRIBUTE,\n isBoolean: false,\n name: 'name',\n evaluate: _scope => 'password'\n }\n ],\n\n redundantAttribute: 'expr4',\n selector: '[expr4]'\n },\n {\n type: bindingTypes.IF,\n evaluate: _scope => _scope.state.isLoading,\n redundantAttribute: 'expr5',\n selector: '[expr5]',\n\n template: template(\n '<span></span><span></span><span></span>',\n []\n )\n },\n {\n type: bindingTypes.IF,\n evaluate: _scope => _scope.state.result,\n redundantAttribute: 'expr6',\n selector: '[expr6]',\n\n template: template(\n '<div class=\"panel__body\"><div expr7=\"expr7\" class=\"content m-bottom-last-child-0\"> </div></div>',\n [\n {\n expressions: [\n {\n type: expressionTypes.ATTRIBUTE,\n isBoolean: false,\n name: 'class',\n\n evaluate: _scope => [\n 'panel color-text-contrast ',\n _scope.state.class\n ].join(\n ''\n )\n }\n ]\n },\n {\n redundantAttribute: 'expr7',\n selector: '[expr7]',\n\n expressions: [\n {\n type: expressionTypes.TEXT,\n childNodeIndex: 0,\n\n evaluate: _scope => [\n _scope.state.result\n ].join(\n ''\n )\n }\n ]\n }\n ]\n )\n }\n ]\n ),\n\n name: 'form-component'\n});\n\n//# sourceURL=webpack://@tiny-components/validator/./src/formComponent.riot?\n}")},"./node_modules/form-serialize/index.js"(module){eval("{// get successful control from form and assemble into object\n// http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2\n\n// types which indicate a submit action and are not successful controls\n// these will be ignored\nvar k_r_submitter = /^(?:submit|button|image|reset|file)$/i;\n\n// node names which could be successful controls\nvar k_r_success_contrls = /^(?:input|select|textarea|keygen)/i;\n\n// Matches bracket notation.\nvar brackets = /(\\[[^\\[\\]]*\\])/g;\n\n// serializes form fields\n// @param form MUST be an HTMLForm element\n// @param options is an optional argument to configure the serialization. Default output\n// with no options specified is a url encoded string\n// - hash: [true | false] Configure the output type. If true, the output will\n// be a js object.\n// - serializer: [function] Optional serializer function to override the default one.\n// The function takes 3 arguments (result, key, value) and should return new result\n// hash and url encoded str serializers are provided with this module\n// - disabled: [true | false]. If true serialize disabled fields.\n// - empty: [true | false]. If true serialize empty fields\nfunction serialize(form, options) {\n if (typeof options != 'object') {\n options = { hash: !!options };\n }\n else if (options.hash === undefined) {\n options.hash = true;\n }\n\n var result = (options.hash) ? {} : '';\n var serializer = options.serializer || ((options.hash) ? hash_serializer : str_serialize);\n\n var elements = form && form.elements ? form.elements : [];\n\n //Object store each radio and set if it's empty or not\n var radio_store = Object.create(null);\n\n for (var i=0 ; i<elements.length ; ++i) {\n var element = elements[i];\n\n // ingore disabled fields\n if ((!options.disabled && element.disabled) || !element.name) {\n continue;\n }\n // ignore anyhting that is not considered a success field\n if (!k_r_success_contrls.test(element.nodeName) ||\n k_r_submitter.test(element.type)) {\n continue;\n }\n\n var key = element.name;\n var val = element.value;\n\n // we can't just use element.value for checkboxes cause some browsers lie to us\n // they say \"on\" for value when the box isn't checked\n if ((element.type === 'checkbox' || element.type === 'radio') && !element.checked) {\n val = undefined;\n }\n\n // If we want empty elements\n if (options.empty) {\n // for checkbox\n if (element.type === 'checkbox' && !element.checked) {\n val = '';\n }\n\n // for radio\n if (element.type === 'radio') {\n if (!radio_store[element.name] && !element.checked) {\n radio_store[element.name] = false;\n }\n else if (element.checked) {\n radio_store[element.name] = true;\n }\n }\n\n // if options empty is true, continue only if its radio\n if (val == undefined && element.type == 'radio') {\n continue;\n }\n }\n else {\n // value-less fields are ignored unless options.empty is true\n if (!val) {\n continue;\n }\n }\n\n // multi select boxes\n if (element.type === 'select-multiple') {\n val = [];\n\n var selectOptions = element.options;\n var isSelectedOptions = false;\n for (var j=0 ; j<selectOptions.length ; ++j) {\n var option = selectOptions[j];\n var allowedEmpty = options.empty && !option.value;\n var hasValue = (option.value || allowedEmpty);\n if (option.selected && hasValue) {\n isSelectedOptions = true;\n\n // If using a hash serializer be sure to add the\n // correct notation for an array in the multi-select\n // context. Here the name attribute on the select element\n // might be missing the trailing bracket pair. Both names\n // \"foo\" and \"foo[]\" should be arrays.\n if (options.hash && key.slice(key.length - 2) !== '[]') {\n result = serializer(result, key + '[]', option.value);\n }\n else {\n result = serializer(result, key, option.value);\n }\n }\n }\n\n // Serialize if no selected options and options.empty is true\n if (!isSelectedOptions && options.empty) {\n result = serializer(result, key, '');\n }\n\n continue;\n }\n\n result = serializer(result, key, val);\n }\n\n // Check for all empty radio buttons and serialize them with key=\"\"\n if (options.empty) {\n for (var key in radio_store) {\n if (!radio_store[key]) {\n result = serializer(result, key, '');\n }\n }\n }\n\n return result;\n}\n\nfunction parse_keys(string) {\n var keys = [];\n var prefix = /^([^\\[\\]]*)/;\n var children = new RegExp(brackets);\n var match = prefix.exec(string);\n\n if (match[1]) {\n keys.push(match[1]);\n }\n\n while ((match = children.exec(string)) !== null) {\n keys.push(match[1]);\n }\n\n return keys;\n}\n\nfunction hash_assign(result, keys, value) {\n if (keys.length === 0) {\n result = value;\n return result;\n }\n\n var key = keys.shift();\n var between = key.match(/^\\[(.+?)\\]$/);\n\n if (key === '[]') {\n result = result || [];\n\n if (Array.isArray(result)) {\n result.push(hash_assign(null, keys, value));\n }\n else {\n // This might be the result of bad name attributes like \"[][foo]\",\n // in this case the original `result` object will already be\n // assigned to an object literal. Rather than coerce the object to\n // an array, or cause an exception the attribute \"_values\" is\n // assigned as an array.\n result._values = result._values || [];\n result._values.push(hash_assign(null, keys, value));\n }\n\n return result;\n }\n\n // Key is an attribute name and can be assigned directly.\n if (!between) {\n result[key] = hash_assign(result[key], keys, value);\n }\n else {\n var string = between[1];\n // +var converts the variable into a number\n // better than parseInt because it doesn't truncate away trailing\n // letters and actually fails if whole thing is not a number\n var index = +string;\n\n // If the characters between the brackets is not a number it is an\n // attribute name and can be assigned directly.\n if (isNaN(index)) {\n result = result || {};\n result[string] = hash_assign(result[string], keys, value);\n }\n else {\n result = result || [];\n result[index] = hash_assign(result[index], keys, value);\n }\n }\n\n return result;\n}\n\n// Object/hash encoding serializer.\nfunction hash_serializer(result, key, value) {\n var matches = key.match(brackets);\n\n // Has brackets? Use the recursive assignment function to walk the keys,\n // construct any missing objects in the result tree and make the assignment\n // at the end of the chain.\n if (matches) {\n var keys = parse_keys(key);\n hash_assign(result, keys, value);\n }\n else {\n // Non bracket notation can make assignments directly.\n var existing = result[key];\n\n // If the value has been assigned already (for instance when a radio and\n // a checkbox have the same name attribute) convert the previous value\n // into an array before pushing into it.\n //\n // NOTE: If this requirement were removed all hash creation and\n // assignment could go through `hash_assign`.\n if (existing) {\n if (!Array.isArray(existing)) {\n result[key] = [ existing ];\n }\n\n result[key].push(value);\n }\n else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n// urlform encoding serializer\nfunction str_serialize(result, key, value) {\n // encode newlines as \\r\\n cause the html spec says so\n value = value.replace(/(\\r)?\\n/g, '\\r\\n');\n value = encodeURIComponent(value);\n\n // spaces should be '+' rather than '%20'.\n value = value.replace(/%20/g, '+');\n return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + value;\n}\n\nmodule.exports = serialize;\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/form-serialize/index.js?\n}")},"./node_modules/validate.js/validate.js"(module,exports,__webpack_require__){eval('{/* module decorator */ module = __webpack_require__.nmd(module);\n/*!\n * validate.js 0.13.1\n *\n * (c) 2013-2019 Nicklas Ansman, 2013 Wrapp\n * Validate.js may be freely distributed under the MIT license.\n * For all details and documentation:\n * http://validatejs.org/\n */\n\n(function(exports, module, define) {\n "use strict";\n\n // The main function that calls the validators specified by the constraints.\n // The options are the following:\n // - format (string) - An option that controls how the returned value is formatted\n // * flat - Returns a flat array of just the error messages\n // * grouped - Returns the messages grouped by attribute (default)\n // * detailed - Returns an array of the raw validation data\n // - fullMessages (boolean) - If `true` (default) the attribute name is prepended to the error.\n //\n // Please note that the options are also passed to each validator.\n var validate = function(attributes, constraints, options) {\n options = v.extend({}, v.options, options);\n\n var results = v.runValidations(attributes, constraints, options)\n , attr\n , validator;\n\n if (results.some(function(r) { return v.isPromise(r.error); })) {\n throw new Error("Use validate.async if you want support for promises");\n }\n return validate.processValidationResults(results, options);\n };\n\n var v = validate;\n\n // Copies over attributes from one or more sources to a single destination.\n // Very much similar to underscore\'s extend.\n // The first argument is the target object and the remaining arguments will be\n // used as sources.\n v.extend = function(obj) {\n [].slice.call(arguments, 1).forEach(function(source) {\n for (var attr in source) {\n obj[attr] = source[attr];\n }\n });\n return obj;\n };\n\n v.extend(validate, {\n // This is the version of the library as a semver.\n // The toString function will allow it to be coerced into a string\n version: {\n major: 0,\n minor: 13,\n patch: 1,\n metadata: null,\n toString: function() {\n var version = v.format("%{major}.%{minor}.%{patch}", v.version);\n if (!v.isEmpty(v.version.metadata)) {\n version += "+" + v.version.metadata;\n }\n return version;\n }\n },\n\n // Below is the dependencies that are used in validate.js\n\n // The constructor of the Promise implementation.\n // If you are using Q.js, RSVP or any other A+ compatible implementation\n // override this attribute to be the constructor of that promise.\n // Since jQuery promises aren\'t A+ compatible they won\'t work.\n Promise: typeof Promise !== "undefined" ? Promise : /* istanbul ignore next */ null,\n\n EMPTY_STRING_REGEXP: /^\\s*$/,\n\n // Runs the validators specified by the constraints object.\n // Will return an array of the format:\n // [{attribute: "<attribute name>", error: "<validation result>"}, ...]\n runValidations: function(attributes, constraints, options) {\n var results = []\n , attr\n , validatorName\n , value\n , validators\n , validator\n , validatorOptions\n , error;\n\n if (v.isDomElement(attributes) || v.isJqueryElement(attributes)) {\n attributes = v.collectFormValues(attributes);\n }\n\n // Loops through each constraints, finds the correct validator and run it.\n for (attr in constraints) {\n value = v.getDeepObjectValue(attributes, attr);\n // This allows the constraints for an attribute to be a function.\n // The function will be called with the value, attribute name, the complete dict of\n // attributes as well as the options and constraints passed in.\n // This is useful when you want to have different\n // validations depending on the attribute value.\n validators = v.result(constraints[attr], value, attributes, attr, options, constraints);\n\n for (validatorName in validators) {\n validator = v.validators[validatorName];\n\n if (!validator) {\n error = v.format("Unknown validator %{name}", {name: validatorName});\n throw new Error(error);\n }\n\n validatorOptions = validators[validatorName];\n // This allows the options to be a function. The function will be\n // called with the value, attribute name, the complete dict of\n // attributes as well as the options and constraints passed in.\n // This is useful when you want to have different\n // validations depending on the attribute value.\n validatorOptions = v.result(validatorOptions, value, attributes, attr, options, constraints);\n if (!validatorOptions) {\n continue;\n }\n results.push({\n attribute: attr,\n value: value,\n validator: validatorName,\n globalOptions: options,\n attributes: attributes,\n options: validatorOptions,\n error: validator.call(validator,\n value,\n validatorOptions,\n attr,\n attributes,\n options)\n });\n }\n }\n\n return results;\n },\n\n // Takes the output from runValidations and converts it to the correct\n // output format.\n processValidationResults: function(errors, options) {\n errors = v.pruneEmptyErrors(errors, options);\n errors = v.expandMultipleErrors(errors, options);\n errors = v.convertErrorMessages(errors, options);\n\n var format = options.format || "grouped";\n\n if (typeof v.formatters[format] === \'function\') {\n errors = v.formatters[format](errors);\n } else {\n throw new Error(v.format("Unknown format %{format}", options));\n }\n\n return v.isEmpty(errors) ? undefined : errors;\n },\n\n // Runs the validations with support for promises.\n // This function will return a promise that is settled when all the\n // validation promises have been completed.\n // It can be called even if no validations returned a promise.\n async: function(attributes, constraints, options) {\n options = v.extend({}, v.async.options, options);\n\n var WrapErrors = options.wrapErrors || function(errors) {\n return errors;\n };\n\n // Removes unknown attributes\n if (options.cleanAttributes !== false) {\n attributes = v.cleanAttributes(attributes, constraints);\n }\n\n var results = v.runValidations(attributes, constraints, options);\n\n return new v.Promise(function(resolve, reject) {\n v.waitForResults(results).then(function() {\n var errors = v.processValidationResults(results, options);\n if (errors) {\n reject(new WrapErrors(errors, options, attributes, constraints));\n } else {\n resolve(attributes);\n }\n }, function(err) {\n reject(err);\n });\n });\n },\n\n single: function(value, constraints, options) {\n options = v.extend({}, v.single.options, options, {\n format: "flat",\n fullMessages: false\n });\n return v({single: value}, {single: constraints}, options);\n },\n\n // Returns a promise that is resolved when all promises in the results array\n // are settled. The promise returned from this function is always resolved,\n // never rejected.\n // This function modifies the input argument, it replaces the promises\n // with the value returned from the promise.\n waitForResults: function(results) {\n // Create a sequence of all the results starting with a resolved promise.\n return results.reduce(function(memo, result) {\n // If this result isn\'t a promise skip it in the sequence.\n if (!v.isPromise(result.error)) {\n return memo;\n }\n\n return memo.then(function() {\n return result.error.then(function(error) {\n result.error = error || null;\n });\n });\n }, new v.Promise(function(r) { r(); })); // A resolved promise\n },\n\n // If the given argument is a call: function the and: function return the value\n // otherwise just return the value. Additional arguments will be passed as\n // arguments to the function.\n // Example:\n // ```\n // result(\'foo\') // \'foo\'\n // result(Math.max, 1, 2) // 2\n // ```\n result: function(value) {\n var args = [].slice.call(arguments, 1);\n if (typeof value === \'function\') {\n value = value.apply(null, args);\n }\n return value;\n },\n\n // Checks if the value is a number. This function does not consider NaN a\n // number like many other `isNumber` functions do.\n isNumber: function(value) {\n return typeof value === \'number\' && !isNaN(value);\n },\n\n // Returns false if the object is not a function\n isFunction: function(value) {\n return typeof value === \'function\';\n },\n\n // A simple check to verify that the value is an integer. Uses `isNumber`\n // and a simple modulo check.\n isInteger: function(value) {\n return v.isNumber(value) && value % 1 === 0;\n },\n\n // Checks if the value is a boolean\n isBoolean: function(value) {\n return typeof value === \'boolean\';\n },\n\n // Uses the `Object` function to check if the given argument is an object.\n isObject: function(obj) {\n return obj === Object(obj);\n },\n\n // Simply checks if the object is an instance of a date\n isDate: function(obj) {\n return obj instanceof Date;\n },\n\n // Returns false if the object is `null` of `undefined`\n isDefined: function(obj) {\n return obj !== null && obj !== undefined;\n },\n\n // Checks if the given argument is a promise. Anything with a `then`\n // function is considered a promise.\n isPromise: function(p) {\n return !!p && v.isFunction(p.then);\n },\n\n isJqueryElement: function(o) {\n return o && v.isString(o.jquery);\n },\n\n isDomElement: function(o) {\n if (!o) {\n return false;\n }\n\n if (!o.querySelectorAll || !o.querySelector) {\n return false;\n }\n\n if (v.isObject(document) && o === document) {\n return true;\n }\n\n // http://stackoverflow.com/a/384380/699304\n /* istanbul ignore else */\n if (typeof HTMLElement === "object") {\n return o instanceof HTMLElement;\n } else {\n return o &&\n typeof o === "object" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === "string";\n }\n },\n\n isEmpty: function(value) {\n var attr;\n\n // Null and undefined are empty\n if (!v.isDefined(value)) {\n return true;\n }\n\n // functions are non empty\n if (v.isFunction(value)) {\n return false;\n }\n\n // Whitespace only strings are empty\n if (v.isString(value)) {\n return v.EMPTY_STRING_REGEXP.test(value);\n }\n\n // For arrays we use the length property\n if (v.isArray(value)) {\n return value.length === 0;\n }\n\n // Dates have no attributes but aren\'t empty\n if (v.isDate(value)) {\n return false;\n }\n\n // If we find at least one property we consider it non empty\n if (v.isObject(value)) {\n for (attr in value) {\n return false;\n }\n return true;\n }\n\n return false;\n },\n\n // Formats the specified strings with the given values like so:\n // ```\n // format("Foo: %{foo}", {foo: "bar"}) // "Foo bar"\n // ```\n // If you want to write %{...} without having it replaced simply\n // prefix it with % like this `Foo: %%{foo}` and it will be returned\n // as `"Foo: %{foo}"`\n format: v.extend(function(str, vals) {\n if (!v.isString(str)) {\n return str;\n }\n return str.replace(v.format.FORMAT_REGEXP, function(m0, m1, m2) {\n if (m1 === \'%\') {\n return "%{" + m2 + "}";\n } else {\n return String(vals[m2]);\n }\n });\n }, {\n // Finds %{key} style patterns in the given string\n FORMAT_REGEXP: /(%?)%\\{([^\\}]+)\\}/g\n }),\n\n // "Prettifies" the given string.\n // Prettifying means replacing [.\\_-] with spaces as well as splitting\n // camel case words.\n prettify: function(str) {\n if (v.isNumber(str)) {\n // If there are more than 2 decimals round it to two\n if ((str * 100) % 1 === 0) {\n return "" + str;\n } else {\n return parseFloat(Math.round(str * 100) / 100).toFixed(2);\n }\n }\n\n if (v.isArray(str)) {\n return str.map(function(s) { return v.prettify(s); }).join(", ");\n }\n\n if (v.isObject(str)) {\n if (!v.isDefined(str.toString)) {\n return JSON.stringify(str);\n }\n\n return str.toString();\n }\n\n // Ensure the string is actually a string\n str = "" + str;\n\n return str\n // Splits keys separated by periods\n .replace(/([^\\s])\\.([^\\s])/g, \'$1 $2\')\n // Removes backslashes\n .replace(/\\\\+/g, \'\')\n // Replaces - and - with space\n .replace(/[_-]/g, \' \')\n // Splits camel cased words\n .replace(/([a-z])([A-Z])/g, function(m0, m1, m2) {\n return "" + m1 + " " + m2.toLowerCase();\n })\n .toLowerCase();\n },\n\n stringifyValue: function(value, options) {\n var prettify = options && options.prettify || v.prettify;\n return prettify(value);\n },\n\n isString: function(value) {\n return typeof value === \'string\';\n },\n\n isArray: function(value) {\n return {}.toString.call(value) === \'[object Array]\';\n },\n\n // Checks if the object is a hash, which is equivalent to an object that\n // is neither an array nor a function.\n isHash: function(value) {\n return v.isObject(value) && !v.isArray(value) && !v.isFunction(value);\n },\n\n contains: function(obj, value) {\n if (!v.isDefined(obj)) {\n return false;\n }\n if (v.isArray(obj)) {\n return obj.indexOf(value) !== -1;\n }\n return value in obj;\n },\n\n unique: function(array) {\n if (!v.isArray(array)) {\n return array;\n }\n return array.filter(function(el, index, array) {\n return array.indexOf(el) == index;\n });\n },\n\n forEachKeyInKeypath: function(object, keypath, callback) {\n if (!v.isString(keypath)) {\n return undefined;\n }\n\n var key = ""\n , i\n , escape = false;\n\n for (i = 0; i < keypath.length; ++i) {\n switch (keypath[i]) {\n case \'.\':\n if (escape) {\n escape = false;\n key += \'.\';\n } else {\n object = callback(object, key, false);\n key = "";\n }\n break;\n\n case \'\\\\\':\n if (escape) {\n escape = false;\n key += \'\\\\\';\n } else {\n escape = true;\n }\n break;\n\n default:\n escape = false;\n key += keypath[i];\n break;\n }\n }\n\n return callback(object, key, true);\n },\n\n getDeepObjectValue: function(obj, keypath) {\n if (!v.isObject(obj)) {\n return undefined;\n }\n\n return v.forEachKeyInKeypath(obj, keypath, function(obj, key) {\n if (v.isObject(obj)) {\n return obj[key];\n }\n });\n },\n\n // This returns an object with all the values of the form.\n // It uses the input name as key and the value as value\n // So for example this:\n // <input type="text" name="email" value="foo@bar.com" />\n // would return:\n // {email: "foo@bar.com"}\n collectFormValues: function(form, options) {\n var values = {}\n , i\n , j\n , input\n , inputs\n , option\n , value;\n\n if (v.isJqueryElement(form)) {\n form = form[0];\n }\n\n if (!form) {\n return values;\n }\n\n options = options || {};\n\n inputs = form.querySelectorAll("input[name], textarea[name]");\n for (i = 0; i < inputs.length; ++i) {\n input = inputs.item(i);\n\n if (v.isDefined(input.getAttribute("data-ignored"))) {\n continue;\n }\n\n var name = input.name.replace(/\\./g, "\\\\\\\\.");\n value = v.sanitizeFormValue(input.value, options);\n if (input.type === "number") {\n value = value ? +value : null;\n } else if (input.type === "checkbox") {\n if (input.attributes.value) {\n if (!input.checked) {\n value = values[name] || null;\n }\n } else {\n value = input.checked;\n }\n } else if (input.type === "radio") {\n if (!input.checked) {\n value = values[name] || null;\n }\n }\n values[name] = value;\n }\n\n inputs = form.querySelectorAll("select[name]");\n for (i = 0; i < inputs.length; ++i) {\n input = inputs.item(i);\n if (v.isDefined(input.getAttribute("data-ignored"))) {\n continue;\n }\n\n if (input.multiple) {\n value = [];\n for (j in input.options) {\n option = input.options[j];\n if (option && option.selected) {\n value.push(v.sanitizeFormValue(option.value, options));\n }\n }\n } else {\n var _val = typeof input.options[input.selectedIndex] !== \'undefined\' ? input.options[input.selectedIndex].value : /* istanbul ignore next */ \'\';\n value = v.sanitizeFormValue(_val, options);\n }\n values[input.name] = value;\n }\n\n return values;\n },\n\n sanitizeFormValue: function(value, options) {\n if (options.trim && v.isString(value)) {\n value = value.trim();\n }\n\n if (options.nullify !== false && value === "") {\n return null;\n }\n return value;\n },\n\n capitalize: function(str) {\n if (!v.isString(str)) {\n return str;\n }\n return str[0].toUpperCase() + str.slice(1);\n },\n\n // Remove all errors who\'s error attribute is empty (null or undefined)\n pruneEmptyErrors: function(errors) {\n return errors.filter(function(error) {\n return !v.isEmpty(error.error);\n });\n },\n\n // In\n // [{error: ["err1", "err2"], ...}]\n // Out\n // [{error: "err1", ...}, {error: "err2", ...}]\n //\n // All attributes in an error with multiple messages are duplicated\n // when expanding the errors.\n expandMultipleErrors: function(errors) {\n var ret = [];\n errors.forEach(function(error) {\n // Removes errors without a message\n if (v.isArray(error.error)) {\n error.error.forEach(function(msg) {\n ret.push(v.extend({}, error, {error: msg}));\n });\n } else {\n ret.push(error);\n }\n });\n return ret;\n },\n\n // Converts the error mesages by prepending the attribute name unless the\n // message is prefixed by ^\n convertErrorMessages: function(errors, options) {\n options = options || {};\n\n var ret = []\n , prettify = options.prettify || v.prettify;\n errors.forEach(function(errorInfo) {\n var error = v.result(errorInfo.error,\n errorInfo.value,\n errorInfo.attribute,\n errorInfo.options,\n errorInfo.attributes,\n errorInfo.globalOptions);\n\n if (!v.isString(error)) {\n ret.push(errorInfo);\n return;\n }\n\n if (error[0] === \'^\') {\n error = error.slice(1);\n } else if (options.fullMessages !== false) {\n error = v.capitalize(prettify(errorInfo.attribute)) + " " + error;\n }\n error = error.replace(/\\\\\\^/g, "^");\n error = v.format(error, {\n value: v.stringifyValue(errorInfo.value, options)\n });\n ret.push(v.extend({}, errorInfo, {error: error}));\n });\n return ret;\n },\n\n // In:\n // [{attribute: "<attributeName>", ...}]\n // Out:\n // {"<attributeName>": [{attribute: "<attributeName>", ...}]}\n groupErrorsByAttribute: function(errors) {\n var ret = {};\n errors.forEach(function(error) {\n var list = ret[error.attribute];\n if (list) {\n list.push(error);\n } else {\n ret[error.attribute] = [error];\n }\n });\n return ret;\n },\n\n // In:\n // [{error: "<message 1>", ...}, {error: "<message 2>", ...}]\n // Out:\n // ["<message 1>", "<message 2>"]\n flattenErrorsToArray: function(errors) {\n return errors\n .map(function(error) { return error.error; })\n .filter(function(value, index, self) {\n return self.indexOf(value) === index;\n });\n },\n\n cleanAttributes: function(attributes, whitelist) {\n function whitelistCreator(obj, key, last) {\n if (v.isObject(obj[key])) {\n return obj[key];\n }\n return (obj[key] = last ? true : {});\n }\n\n function buildObjectWhitelist(whitelist) {\n var ow = {}\n , lastObject\n , attr;\n for (attr in whitelist) {\n if (!whitelist[attr]) {\n continue;\n }\n v.forEachKeyInKeypath(ow, attr, whitelistCreator);\n }\n return ow;\n }\n\n function cleanRecursive(attributes, whitelist) {\n if (!v.isObject(attributes)) {\n return attributes;\n }\n\n var ret = v.extend({}, attributes)\n , w\n , attribute;\n\n for (attribute in attributes) {\n w = whitelist[attribute];\n\n if (v.isObject(w)) {\n ret[attribute] = cleanRecursive(ret[attribute], w);\n } else if (!w) {\n delete ret[attribute];\n }\n }\n return ret;\n }\n\n if (!v.isObject(whitelist) || !v.isObject(attributes)) {\n return {};\n }\n\n whitelist = buildObjectWhitelist(whitelist);\n return cleanRecursive(attributes, whitelist);\n },\n\n exposeModule: function(validate, root, exports, module, define) {\n if (exports) {\n if (module && module.exports) {\n exports = module.exports = validate;\n }\n exports.validate = validate;\n } else {\n root.validate = validate;\n if (validate.isFunction(define) && define.amd) {\n define([], function () { return validate; });\n }\n }\n },\n\n warn: function(msg) {\n if (typeof console !== "undefined" && console.warn) {\n console.warn("[validate.js] " + msg);\n }\n },\n\n error: function(msg) {\n if (typeof console !== "undefined" && console.error) {\n console.error("[validate.js] " + msg);\n }\n }\n });\n\n validate.validators = {\n // Presence validates that the value isn\'t empty\n presence: function(value, options) {\n options = v.extend({}, this.options, options);\n if (options.allowEmpty !== false ? !v.isDefined(value) : v.isEmpty(value)) {\n return options.message || this.message || "can\'t be blank";\n }\n },\n length: function(value, options, attribute) {\n // Empty values are allowed\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var is = options.is\n , maximum = options.maximum\n , minimum = options.minimum\n , tokenizer = options.tokenizer || function(val) { return val; }\n , err\n , errors = [];\n\n value = tokenizer(value);\n var length = value.length;\n if(!v.isNumber(length)) {\n return options.message || this.notValid || "has an incorrect length";\n }\n\n // Is checks\n if (v.isNumber(is) && length !== is) {\n err = options.wrongLength ||\n this.wrongLength ||\n "is the wrong length (should be %{count} characters)";\n errors.push(v.format(err, {count: is}));\n }\n\n if (v.isNumber(minimum) && length < minimum) {\n err = options.tooShort ||\n this.tooShort ||\n "is too short (minimum is %{count} characters)";\n errors.push(v.format(err, {count: minimum}));\n }\n\n if (v.isNumber(maximum) && length > maximum) {\n err = options.tooLong ||\n this.tooLong ||\n "is too long (maximum is %{count} characters)";\n errors.push(v.format(err, {count: maximum}));\n }\n\n if (errors.length > 0) {\n return options.message || errors;\n }\n },\n numericality: function(value, options, attribute, attributes, globalOptions) {\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var errors = []\n , name\n , count\n , checks = {\n greaterThan: function(v, c) { return v > c; },\n greaterThanOrEqualTo: function(v, c) { return v >= c; },\n equalTo: function(v, c) { return v === c; },\n lessThan: function(v, c) { return v < c; },\n lessThanOrEqualTo: function(v, c) { return v <= c; },\n divisibleBy: function(v, c) { return v % c === 0; }\n }\n , prettify = options.prettify ||\n (globalOptions && globalOptions.prettify) ||\n v.prettify;\n\n // Strict will check that it is a valid looking number\n if (v.isString(value) && options.strict) {\n var pattern = "^-?(0|[1-9]\\\\d*)";\n if (!options.onlyInteger) {\n pattern += "(\\\\.\\\\d+)?";\n }\n pattern += "$";\n\n if (!(new RegExp(pattern).test(value))) {\n return options.message ||\n options.notValid ||\n this.notValid ||\n this.message ||\n "must be a valid number";\n }\n }\n\n // Coerce the value to a number unless we\'re being strict.\n if (options.noStrings !== true && v.isString(value) && !v.isEmpty(value)) {\n value = +value;\n }\n\n // If it\'s not a number we shouldn\'t continue since it will compare it.\n if (!v.isNumber(value)) {\n return options.message ||\n options.notValid ||\n this.notValid ||\n this.message ||\n "is not a number";\n }\n\n // Same logic as above, sort of. Don\'t bother with comparisons if this\n // doesn\'t pass.\n if (options.onlyInteger && !v.isInteger(value)) {\n return options.message ||\n options.notInteger ||\n this.notInteger ||\n this.message ||\n "must be an integer";\n }\n\n for (name in checks) {\n count = options[name];\n if (v.isNumber(count) && !checks[name](value, count)) {\n // This picks the default message if specified\n // For example the greaterThan check uses the message from\n // this.notGreaterThan so we capitalize the name and prepend "not"\n var key = "not" + v.capitalize(name);\n var msg = options[key] ||\n this[key] ||\n this.message ||\n "must be %{type} %{count}";\n\n errors.push(v.format(msg, {\n count: count,\n type: prettify(name)\n }));\n }\n }\n\n if (options.odd && value % 2 !== 1) {\n errors.push(options.notOdd ||\n this.notOdd ||\n this.message ||\n "must be odd");\n }\n if (options.even && value % 2 !== 0) {\n errors.push(options.notEven ||\n this.notEven ||\n this.message ||\n "must be even");\n }\n\n if (errors.length) {\n return options.message || errors;\n }\n },\n datetime: v.extend(function(value, options) {\n if (!v.isFunction(this.parse) || !v.isFunction(this.format)) {\n throw new Error("Both the parse and format functions needs to be set to use the datetime/date validator");\n }\n\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var err\n , errors = []\n , earliest = options.earliest ? this.parse(options.earliest, options) : NaN\n , latest = options.latest ? this.parse(options.latest, options) : NaN;\n\n value = this.parse(value, options);\n\n // 86400000 is the number of milliseconds in a day, this is used to remove\n // the time from the date\n if (isNaN(value) || options.dateOnly && value % 86400000 !== 0) {\n err = options.notValid ||\n options.message ||\n this.notValid ||\n "must be a valid date";\n return v.format(err, {value: arguments[0]});\n }\n\n if (!isNaN(earliest) && value < earliest) {\n err = options.tooEarly ||\n options.message ||\n this.tooEarly ||\n "must be no earlier than %{date}";\n err = v.format(err, {\n value: this.format(value, options),\n date: this.format(earliest, options)\n });\n errors.push(err);\n }\n\n if (!isNaN(latest) && value > latest) {\n err = options.tooLate ||\n options.message ||\n this.tooLate ||\n "must be no later than %{date}";\n err = v.format(err, {\n date: this.format(latest, options),\n value: this.format(value, options)\n });\n errors.push(err);\n }\n\n if (errors.length) {\n return v.unique(errors);\n }\n }, {\n parse: null,\n format: null\n }),\n date: function(value, options) {\n options = v.extend({}, options, {dateOnly: true});\n return v.validators.datetime.call(v.validators.datetime, value, options);\n },\n format: function(value, options) {\n if (v.isString(options) || (options instanceof RegExp)) {\n options = {pattern: options};\n }\n\n options = v.extend({}, this.options, options);\n\n var message = options.message || this.message || "is invalid"\n , pattern = options.pattern\n , match;\n\n // Empty values are allowed\n if (!v.isDefined(value)) {\n return;\n }\n if (!v.isString(value)) {\n return message;\n }\n\n if (v.isString(pattern)) {\n pattern = new RegExp(options.pattern, options.flags);\n }\n match = pattern.exec(value);\n if (!match || match[0].length != value.length) {\n return message;\n }\n },\n inclusion: function(value, options) {\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n if (v.isArray(options)) {\n options = {within: options};\n }\n options = v.extend({}, this.options, options);\n if (v.contains(options.within, value)) {\n return;\n }\n var message = options.message ||\n this.message ||\n "^%{value} is not included in the list";\n return v.format(message, {value: value});\n },\n exclusion: function(value, options) {\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n if (v.isArray(options)) {\n options = {within: options};\n }\n options = v.extend({}, this.options, options);\n if (!v.contains(options.within, value)) {\n return;\n }\n var message = options.message || this.message || "^%{value} is restricted";\n if (v.isString(options.within[value])) {\n value = options.within[value];\n }\n return v.format(message, {value: value});\n },\n email: v.extend(function(value, options) {\n options = v.extend({}, this.options, options);\n var message = options.message || this.message || "is not a valid email";\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n if (!v.isString(value)) {\n return message;\n }\n if (!this.PATTERN.exec(value)) {\n return message;\n }\n }, {\n PATTERN: /^(?:[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*|"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i\n }),\n equality: function(value, options, attribute, attributes, globalOptions) {\n if (!v.isDefined(value)) {\n return;\n }\n\n if (v.isString(options)) {\n options = {attribute: options};\n }\n options = v.extend({}, this.options, options);\n var message = options.message ||\n this.message ||\n "is not equal to %{attribute}";\n\n if (v.isEmpty(options.attribute) || !v.isString(options.attribute)) {\n throw new Error("The attribute must be a non empty string");\n }\n\n var otherValue = v.getDeepObjectValue(attributes, options.attribute)\n , comparator = options.comparator || function(v1, v2) {\n return v1 === v2;\n }\n , prettify = options.prettify ||\n (globalOptions && globalOptions.prettify) ||\n v.prettify;\n\n if (!comparator(value, otherValue, options, attribute, attributes)) {\n return v.format(message, {attribute: prettify(options.attribute)});\n }\n },\n // A URL validator that is used to validate URLs with the ability to\n // restrict schemes and some domains.\n url: function(value, options) {\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var message = options.message || this.message || "is not a valid url"\n , schemes = options.schemes || this.schemes || [\'http\', \'https\']\n , allowLocal = options.allowLocal || this.allowLocal || false\n , allowDataUrl = options.allowDataUrl || this.allowDataUrl || false;\n if (!v.isString(value)) {\n return message;\n }\n\n // https://gist.github.com/dperini/729294\n var regex =\n "^" +\n // protocol identifier\n "(?:(?:" + schemes.join("|") + ")://)" +\n // user:pass authentication\n "(?:\\\\S+(?::\\\\S*)?@)?" +\n "(?:";\n\n var tld = "(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))";\n\n if (allowLocal) {\n tld += "?";\n } else {\n regex +=\n // IP address exclusion\n // private & local networks\n "(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})" +\n "(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})" +\n "(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})";\n }\n\n regex +=\n // IP address dotted notation octets\n // excludes loopback network 0.0.0.0\n // excludes reserved space >= 224.0.0.0\n // excludes network & broacast addresses\n // (first & last IP address of each class)\n "(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])" +\n "(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}" +\n "(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))" +\n "|" +\n // host name\n "(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)" +\n // domain name\n "(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*" +\n tld +\n ")" +\n // port number\n "(?::\\\\d{2,5})?" +\n // resource path\n "(?:[/?#]\\\\S*)?" +\n "$";\n\n if (allowDataUrl) {\n // RFC 2397\n var mediaType = "\\\\w+\\\\/[-+.\\\\w]+(?:;[\\\\w=]+)*";\n var urlchar = "[A-Za-z0-9-_.!~\\\\*\'();\\\\/?:@&=+$,%]*";\n var dataurl = "data:(?:"+mediaType+")?(?:;base64)?,"+urlchar;\n regex = "(?:"+regex+")|(?:^"+dataurl+"$)";\n }\n\n var PATTERN = new RegExp(regex, \'i\');\n if (!PATTERN.exec(value)) {\n return message;\n }\n },\n type: v.extend(function(value, originalOptions, attribute, attributes, globalOptions) {\n if (v.isString(originalOptions)) {\n originalOptions = {type: originalOptions};\n }\n\n if (!v.isDefined(value)) {\n return;\n }\n\n var options = v.extend({}, this.options, originalOptions);\n\n var type = options.type;\n if (!v.isDefined(type)) {\n throw new Error("No type was specified");\n }\n\n var check;\n if (v.isFunction(type)) {\n check = type;\n } else {\n check = this.types[type];\n }\n\n if (!v.isFunction(check)) {\n throw new Error("validate.validators.type.types." + type + " must be a function.");\n }\n\n if (!check(value, options, attribute, attributes, globalOptions)) {\n var message = originalOptions.message ||\n this.messages[type] ||\n this.message ||\n options.message ||\n (v.isFunction(type) ? "must be of the correct type" : "must be of type %{type}");\n\n if (v.isFunction(message)) {\n message = message(value, originalOptions, attribute, attributes, globalOptions);\n }\n\n return v.format(message, {attribute: v.prettify(attribute), type: type});\n }\n }, {\n types: {\n object: function(value) {\n return v.isObject(value) && !v.isArray(value);\n },\n array: v.isArray,\n integer: v.isInteger,\n number: v.isNumber,\n string: v.isString,\n date: v.isDate,\n boolean: v.isBoolean\n },\n messages: {}\n })\n };\n\n validate.formatters = {\n detailed: function(errors) {return errors;},\n flat: v.flattenErrorsToArray,\n grouped: function(errors) {\n var attr;\n\n errors = v.groupErrorsByAttribute(errors);\n for (attr in errors) {\n errors[attr] = v.flattenErrorsToArray(errors[attr]);\n }\n return errors;\n },\n constraint: function(errors) {\n var attr;\n errors = v.groupErrorsByAttribute(errors);\n for (attr in errors) {\n errors[attr] = errors[attr].map(function(result) {\n return result.validator;\n }).sort();\n }\n return errors;\n }\n };\n\n validate.exposeModule(validate, this, exports, module, __webpack_require__.amdD);\n}).call(this,\n true ? /* istanbul ignore next */ exports : 0,\n true ? /* istanbul ignore next */ module : 0,\n __webpack_require__.amdD);\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/validate.js/validate.js?\n}')},"./src/example.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var riot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! riot */ \"./node_modules/riot/esm/api/register.js\");\n/* harmony import */ var riot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! riot */ \"./node_modules/riot/esm/api/mount.js\");\n/* harmony import */ var _formValidator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formValidator */ \"./src/formValidator.js\");\n/* harmony import */ var _fieldError_riot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fieldError.riot */ \"./src/fieldError.riot\");\n/* harmony import */ var _formComponent_riot__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./formComponent.riot */ \"./src/formComponent.riot\");\n\n\n\n\n\n\n// register & mount riot component\nriot__WEBPACK_IMPORTED_MODULE_0__.register('field-error', _fieldError_riot__WEBPACK_IMPORTED_MODULE_3__[\"default\"])\nriot__WEBPACK_IMPORTED_MODULE_1__.mount('field-error')\n\n// creating formValidation\nconst formValidation = new _formValidator__WEBPACK_IMPORTED_MODULE_2__[\"default\"](document.querySelector('.form-html'), {\n 'email': {\n 'presence': true,\n 'email': true\n },\n 'password': {\n 'presence': true\n }\n}, true)\n\nformValidation.onSuccess((event, data) => {\n event.preventDefault()\n\n // show message and content of data from form\n document.querySelector('#result .content').innerHTML = '<p>' + JSON.stringify(data) + '</p>'\n document.querySelector('#result').classList.remove('hidden')\n})\n\nriot__WEBPACK_IMPORTED_MODULE_0__.register('form-component', _formComponent_riot__WEBPACK_IMPORTED_MODULE_4__[\"default\"])\nriot__WEBPACK_IMPORTED_MODULE_1__.mount('form-component')\n\n//# sourceURL=webpack://@tiny-components/validator/./src/example.js?\n}")},"./src/formValidator.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var validate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! validate.js */ \"./node_modules/validate.js/validate.js\");\n/* harmony import */ var validate_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(validate_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var form_serialize__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! form-serialize */ \"./node_modules/form-serialize/index.js\");\n/* harmony import */ var form_serialize__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(form_serialize__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\n/**\n * Form Validator with RiotJS Components\n *\n *\n * @author HerrHase\n *\n */\n\nclass FormValidator\n{\n /**\n *\n * @param {[type]} formSelector [description]\n * @param {[type]} constraits [description]\n */\n constructor(formElement, constraits, addSubmitEvent = false)\n {\n // constraits for validate.js\n this.constraits = constraits\n\n // get form and elements\n this.formElement = formElement\n\n // if form not found\n if (!this.formElement) {\n console.error('FormValidator: form not found!')\n }\n\n this.elements = this.formElement.querySelectorAll('field-error')\n\n // adding event if a element is updated\n this.formElement.addEventListener('field-update', (event) => {\n this._onFieldUpdate(event)\n })\n\n // adding submit event\n if (addSubmitEvent) {\n this.formElement.addEventListener('submit', (event) => {\n this._onSubmit(event)\n })\n }\n }\n\n /**\n * trigger submit\n *\n * @param {object} event\n *\n */\n submit(event)\n {\n this._onSubmit(event)\n }\n\n /**\n *\n * @param {function} onError\n *\n */\n onError(onError)\n {\n this._onError = onError\n }\n\n /**\n * settin onSuccess callback and add submit-event on form\n *\n * @param {function} onSuccess\n *\n */\n onSuccess(onSuccess)\n {\n // adding onSuccess\n this._onSuccess = onSuccess\n }\n\n /**\n *\n * @param {function} onError\n *\n */\n onBeforeSubmit(onBeforeSubmit)\n {\n this._onBeforeSubmit = onBeforeSubmit\n }\n\n /**\n *\n */\n setConstraits(rules) \n {\n this.rules = rules\n }\n\n /**\n * handle submit\n *\n *\n * @param {Event} event\n *\n */\n _onSubmit(event)\n {\n // getting data from target of submit event\n const data = form_serialize__WEBPACK_IMPORTED_MODULE_1___default()(event.target, {\n hash: true\n })\n\n // options for validate.js\n const options = {\n fullMessages: false\n }\n\n if (this._onBeforeSubmit) {\n this._onBeforeSubmit()\n }\n\n // check form and getting errors\n validate_js__WEBPACK_IMPORTED_MODULE_0___default().async(data, this.constraits, options).then(\n () => {\n this._onSuccess(event, data)\n },\n\n (errors) => {\n event.preventDefault()\n\n // if onError is set, tha\n if (this._onError) {\n this._onError(event, errors, data)\n }\n\n // send each element a event\n this.elements.forEach((element) => {\n let elementErrors = false\n\n // check for errors by name\n if (errors[element.attributes.name.nodeValue]) {\n elementErrors = errors[element.attributes.name.nodeValue]\n }\n\n this._dispatchCustomEvent(elementErrors, element)\n })\n }\n )\n }\n\n /**\n * send update to fields\n *\n *\n * @param {Event} event\n *\n */\n _onFieldUpdate(event)\n {\n // workaround, make sure that value for single is undefined if it is empty\n if (event.detail.value == '') {\n event.detail.value = undefined\n }\n\n let errors = validate_js__WEBPACK_IMPORTED_MODULE_0___default().single(event.detail.value, this.constraits[event.detail.name])\n\n // search for element by name and dispatch event\n this.elements.forEach((element) => {\n if (element.attributes.name.nodeValue == event.detail.name) {\n this._dispatchCustomEvent(errors, element)\n }\n })\n }\n\n /**\n * dispatch event to single element\n *\n * @param {Array} errors\n * @param {Element} element\n *\n */\n _dispatchCustomEvent(errors, element)\n {\n let detail = false\n\n if (errors) {\n detail = errors\n }\n\n const formValidationEvent = new CustomEvent('form-validation', {\n 'detail': detail\n })\n\n element.dispatchEvent(formValidationEvent)\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FormValidator);\n\n\n//# sourceURL=webpack://@tiny-components/validator/./src/formValidator.js?\n}")},"./node_modules/riot/esm/api/mount.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ mount: () => (/* binding */ mount)\n/* harmony export */ });\n/* harmony import */ var _dependencies_bianco_query_index_next_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/bianco.query/index.next.js */ "./node_modules/riot/esm/dependencies/bianco.query/index.next.js");\n/* harmony import */ var _core_mount_component_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/mount-component.js */ "./node_modules/riot/esm/core/mount-component.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n/**\n * Mounting function that will work only for the components that were globally registered\n * @param {string|HTMLElement} selector - query for the selection or a DOM element\n * @param {object} initialProps - the initial component properties\n * @param {string} name - optional component name\n * @returns {Array} list of riot components\n */\nfunction mount(selector, initialProps, name) {\n return (0,_dependencies_bianco_query_index_next_js__WEBPACK_IMPORTED_MODULE_0__["default"])(selector).map((element) =>\n (0,_core_mount_component_js__WEBPACK_IMPORTED_MODULE_1__.mountComponent)(element, initialProps, name),\n )\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/api/mount.js?\n}')},"./node_modules/riot/esm/api/register.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: () => (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/misc.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/misc.js");\n/* harmony import */ var _core_create_component_from_wrapper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/create-component-from-wrapper.js */ "./node_modules/riot/esm/core/create-component-from-wrapper.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n/**\n * Register a custom tag by name\n * @param {string} name - component name\n * @param {object} implementation - tag implementation\n * @param {string} implementation.css - component css as string\n * @param {TemplateChunk} implementation.template - component template chunk rendering function\n * @param {object} implementation.exports - component default export\n * @returns {Map} map containing all the components implementations\n */\nfunction register(name, { css, template, exports }) {\n if (_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.COMPONENTS_IMPLEMENTATION_MAP.has(name))\n (0,_dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_1__.panic)(`The component "${name}" was already registered`);\n\n _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.COMPONENTS_IMPLEMENTATION_MAP.set(\n name,\n (0,_core_create_component_from_wrapper_js__WEBPACK_IMPORTED_MODULE_2__.createComponentFromWrapper)({ name, css, template, exports }),\n );\n\n return _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.COMPONENTS_IMPLEMENTATION_MAP\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/api/register.js?\n}')},"./node_modules/riot/esm/core/add-css-hook.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addCssHook: () => (/* binding */ addCssHook)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _utils_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/dom.js */ "./node_modules/riot/esm/utils/dom.js");\n/* harmony import */ var _dependencies_bianco_attr_index_next_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dependencies/bianco.attr/index.next.js */ "./node_modules/riot/esm/dependencies/bianco.attr/index.next.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n/**\n * Add eventually the "is" attribute to link this DOM node to its css\n * @param {HTMLElement} element - target root node\n * @param {string} name - name of the component mounted\n * @returns {undefined} it\'s a void function\n */\n\nfunction addCssHook(element, name) {\n if ((0,_utils_dom_js__WEBPACK_IMPORTED_MODULE_1__.getName)(element) !== name) {\n (0,_dependencies_bianco_attr_index_next_js__WEBPACK_IMPORTED_MODULE_2__.set)(element, _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_DIRECTIVE, name);\n }\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/add-css-hook.js?\n}')},"./node_modules/riot/esm/core/bind-dom-node-to-component-instance.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ bindDOMNodeToComponentInstance: () => (/* binding */ bindDOMNodeToComponentInstance)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* Riot v10.1.4, @license MIT */\n\n\n/**\n * Bind a DOM node to its component object\n * @param {HTMLElement} node - html node mounted\n * @param {object} component - Riot.js component object\n * @returns {object} the component object received as second argument\n */\nconst bindDOMNodeToComponentInstance = (node, component) =>\n (node[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.DOM_COMPONENT_INSTANCE_PROPERTY] = component);\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/bind-dom-node-to-component-instance.js?\n}')},"./node_modules/riot/esm/core/component-dom-selectors.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COMPONENT_DOM_SELECTORS: () => (/* binding */ COMPONENT_DOM_SELECTORS)\n/* harmony export */ });\n/* harmony import */ var _dependencies_bianco_query_index_next_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/bianco.query/index.next.js */ "./node_modules/riot/esm/dependencies/bianco.query/index.next.js");\n/* Riot v10.1.4, @license MIT */\n\n\nconst COMPONENT_DOM_SELECTORS = Object.freeze({\n // component helpers\n $(selector) {\n return (0,_dependencies_bianco_query_index_next_js__WEBPACK_IMPORTED_MODULE_0__["default"])(selector, this.root)[0]\n },\n $$(selector) {\n return (0,_dependencies_bianco_query_index_next_js__WEBPACK_IMPORTED_MODULE_0__["default"])(selector, this.root)\n },\n});\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/component-dom-selectors.js?\n}')},"./node_modules/riot/esm/core/component-lifecycle-methods.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COMPONENT_LIFECYCLE_METHODS: () => (/* binding */ COMPONENT_LIFECYCLE_METHODS)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/functions.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/functions.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\nconst COMPONENT_LIFECYCLE_METHODS = Object.freeze({\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.SHOULD_UPDATE_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.ON_BEFORE_MOUNT_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.ON_MOUNTED_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.ON_BEFORE_UPDATE_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.ON_UPDATED_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.ON_BEFORE_UNMOUNT_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.ON_UNMOUNTED_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n});\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/component-lifecycle-methods.js?\n}')},"./node_modules/riot/esm/core/component-template-factory.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ componentTemplateFactory: () => (/* binding */ componentTemplateFactory)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_dom_bindings_dist_dom_bindings_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/dom-bindings/dist/dom-bindings.js */ "./node_modules/riot/esm/dependencies/@riotjs/dom-bindings/dist/dom-bindings.js");\n/* harmony import */ var _dependencies_riotjs_util_expression_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/expression-types.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/expression-types.js");\n/* harmony import */ var _dependencies_riotjs_util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dependencies/@riotjs/util/binding-types.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/binding-types.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n/**\n * Factory function to create the component templates only once\n * @param {Function} template - component template creation function\n * @param {RiotComponentWrapper} componentWrapper - riot compiler generated object\n * @param {Function} getChildComponent - getter function to return the children components\n * @returns {TemplateChunk} template chunk object\n */\nfunction componentTemplateFactory(\n template,\n componentWrapper,\n getChildComponent,\n) {\n return template(\n _dependencies_riotjs_dom_bindings_dist_dom_bindings_js__WEBPACK_IMPORTED_MODULE_0__.template,\n _dependencies_riotjs_util_expression_types_js__WEBPACK_IMPORTED_MODULE_1__["default"],\n _dependencies_riotjs_util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__["default"],\n getChildComponent,\n )\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/component-template-factory.js?\n}')},"./node_modules/riot/esm/core/compute-component-state.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ computeComponentState: () => (/* binding */ computeComponentState)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/functions.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/functions.js");\n/* Riot v10.1.4, @license MIT */\n\n\n/**\n * Compute the component current state merging it with its previous state\n * @param {object} oldState - previous state object\n * @param {object} newState - new state given to the `update` call\n * @returns {object} new object state\n */\nfunction computeComponentState(oldState, newState) {\n return {\n ...oldState,\n ...(0,_dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_0__.callOrAssign)(newState),\n }\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/compute-component-state.js?\n}')},"./node_modules/riot/esm/core/compute-initial-props.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ computeInitialProps: () => (/* binding */ computeInitialProps)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/dom.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/dom.js");\n/* harmony import */ var _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/functions.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/functions.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n/**\n * Evaluate the component properties either from its real attributes or from its initial user properties\n * @param {HTMLElement} element - component root\n * @param {object} initialProps - initial props\n * @returns {object} component props key value pairs\n */\nfunction computeInitialProps(element, initialProps = {}) {\n return {\n ...(0,_dependencies_riotjs_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.DOMattributesToObject)(element),\n ...(0,_dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.callOrAssign)(initialProps),\n }\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/compute-initial-props.js?\n}')},"./node_modules/riot/esm/core/create-component-from-wrapper.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createComponentFromWrapper: () => (/* binding */ createComponentFromWrapper)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_riotjs_util_strings_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/strings.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/strings.js");\n/* harmony import */ var _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dependencies/@riotjs/util/functions.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/functions.js");\n/* harmony import */ var _dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dependencies/@riotjs/util/misc.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/misc.js");\n/* harmony import */ var _mocked_template_interface_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mocked-template-interface.js */ "./node_modules/riot/esm/core/mocked-template-interface.js");\n/* harmony import */ var _component_template_factory_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./component-template-factory.js */ "./node_modules/riot/esm/core/component-template-factory.js");\n/* harmony import */ var _create_pure_component_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./create-pure-component.js */ "./node_modules/riot/esm/core/create-pure-component.js");\n/* harmony import */ var _instantiate_component_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./instantiate-component.js */ "./node_modules/riot/esm/core/instantiate-component.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n\n\n\n\n\n/**\n * Create the subcomponents that can be included inside a tag in runtime\n * @param {object} components - components imported in runtime\n * @returns {object} all the components transformed into Riot.Component factory functions\n */\nfunction createChildrenComponentsObject(components = {}) {\n return Object.entries((0,_dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_2__.callOrAssign)(components)).reduce(\n (acc, [key, value]) => {\n acc[(0,_dependencies_riotjs_util_strings_js__WEBPACK_IMPORTED_MODULE_1__.camelToDashCase)(key)] = createComponentFromWrapper(value);\n return acc\n },\n {},\n )\n}\n\n/**\n * Create the getter function to render the child components\n * @param {RiotComponentWrapper} componentWrapper - riot compiler generated object\n * @returns {Function} function returning the component factory function\n */\nconst createChildComponentGetter = (componentWrapper) => {\n const childrenComponents = createChildrenComponentsObject(\n componentWrapper.exports ? componentWrapper.exports.components : {},\n );\n\n return (name) => {\n // improve support for recursive components\n if (name === componentWrapper.name)\n return memoizedCreateComponentFromWrapper(componentWrapper)\n // return the registered components\n return childrenComponents[name] || _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.COMPONENTS_IMPLEMENTATION_MAP.get(name)\n }\n};\n\n/**\n * Performance optimization for the recursive components\n * @param {RiotComponentWrapper} componentWrapper - riot compiler generated object\n * @returns {object} component like interface\n */\nconst memoizedCreateComponentFromWrapper = (0,_dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_3__.memoize)(createComponentFromWrapper);\n\n/**\n * Create the component interface needed for the @riotjs/dom-bindings tag bindings\n * @param {RiotComponentWrapper} componentWrapper - riot compiler generated object\n * @param {string} componentWrapper.css - component css\n * @param {Function} componentWrapper.template - function that will return the dom-bindings template function\n * @param {object} componentWrapper.exports - component interface\n * @param {string} componentWrapper.name - component name\n * @returns {object} component like interface\n */\nfunction createComponentFromWrapper(componentWrapper) {\n const { css, template, exports, name } = componentWrapper;\n const templateFn = template\n ? (0,_component_template_factory_js__WEBPACK_IMPORTED_MODULE_5__.componentTemplateFactory)(\n template,\n componentWrapper,\n createChildComponentGetter(componentWrapper),\n )\n : _mocked_template_interface_js__WEBPACK_IMPORTED_MODULE_4__.MOCKED_TEMPLATE_INTERFACE;\n\n return ({ slots, attributes, props }) => {\n // pure components rendering will be managed by the end user\n if (exports && exports[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_PURE_SYMBOL])\n return (0,_create_pure_component_js__WEBPACK_IMPORTED_MODULE_6__.createPureComponent)(exports, {\n slots,\n attributes,\n props,\n css,\n template,\n })\n\n const componentAPI = (0,_dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_2__.callOrAssign)(exports) || {};\n\n const component = (0,_instantiate_component_js__WEBPACK_IMPORTED_MODULE_7__.instantiateComponent)({\n css,\n template: templateFn,\n componentAPI,\n name,\n })({ slots, attributes, props });\n\n // notice that for the components created via tag binding\n // we need to invert the mount (state/parentScope) arguments\n // the template bindings will only forward the parentScope updates\n // and never deal with the component state\n return {\n mount(element, parentScope, state) {\n return component.mount(element, state, parentScope)\n },\n update(parentScope, state) {\n return component.update(state, parentScope)\n },\n unmount(preserveRoot) {\n return component.unmount(preserveRoot)\n },\n }\n }\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/create-component-from-wrapper.js?\n}')},"./node_modules/riot/esm/core/create-core-api-methods.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createCoreAPIMethods: () => (/* binding */ createCoreAPIMethods)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* Riot v10.1.4, @license MIT */\n\n\n/**\n * Wrap the Riot.js core API methods using a mapping function\n * @param {Function} mapFunction - lifting function\n * @returns {object} an object having the { mount, update, unmount } functions\n */\nfunction createCoreAPIMethods(mapFunction) {\n return [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.MOUNT_METHOD_KEY, _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.UPDATE_METHOD_KEY, _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.UNMOUNT_METHOD_KEY].reduce(\n (acc, method) => {\n acc[method] = mapFunction(method);\n\n return acc\n },\n {},\n )\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/create-core-api-methods.js?\n}')},"./node_modules/riot/esm/core/create-pure-component.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPureComponent: () => (/* binding */ createPureComponent)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/misc.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/misc.js");\n/* harmony import */ var _dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dependencies/@riotjs/util/objects.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/objects.js");\n/* harmony import */ var _pure_component_api_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pure-component-api.js */ "./node_modules/riot/esm/core/pure-component-api.js");\n/* harmony import */ var _bind_dom_node_to_component_instance_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./bind-dom-node-to-component-instance.js */ "./node_modules/riot/esm/core/bind-dom-node-to-component-instance.js");\n/* harmony import */ var _create_core_api_methods_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./create-core-api-methods.js */ "./node_modules/riot/esm/core/create-core-api-methods.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n\n\n\n/**\n * Create a pure component\n * @param {Function} pureFactoryFunction - pure component factory function\n * @param {object} options - pure component options\n * @param {string} options.css - pure component can\'t have css\n * @param {Array} options.slots - component slots\n * @param {Array} options.attributes - component attributes\n * @param {Array} options.template - template factory function\n * @param {any} options.props - initial component properties\n * @returns {object} pure component object\n */\nfunction createPureComponent(\n pureFactoryFunction,\n { slots, attributes, props, css, template },\n) {\n if (template) (0,_dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_1__.panic)(\'Pure components can not have html\');\n if (css) (0,_dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_1__.panic)(\'Pure components do not have css\');\n\n const component = (0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_2__.defineDefaults)(\n pureFactoryFunction({ slots, attributes, props }),\n _pure_component_api_js__WEBPACK_IMPORTED_MODULE_3__.PURE_COMPONENT_API,\n );\n\n return (0,_create_core_api_methods_js__WEBPACK_IMPORTED_MODULE_5__.createCoreAPIMethods)((method) => (...args) => {\n // intercept the mount calls to bind the DOM node to the pure object created\n // see also https://github.com/riot/riot/issues/2806\n if (method === _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.MOUNT_METHOD_KEY) {\n const [element] = args;\n // mark this node as pure element\n (0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_2__.defineProperty)(element, _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_PURE_SYMBOL, true);\n (0,_bind_dom_node_to_component_instance_js__WEBPACK_IMPORTED_MODULE_4__.bindDOMNodeToComponentInstance)(element, component);\n }\n\n component[method](...args);\n\n return component\n })\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/create-pure-component.js?\n}')},"./node_modules/riot/esm/core/css-manager.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CSS_BY_NAME: () => (/* binding */ CSS_BY_NAME),\n/* harmony export */ STYLE_NODE_SELECTOR: () => (/* binding */ STYLE_NODE_SELECTOR),\n/* harmony export */ \"default\": () => (/* binding */ cssManager)\n/* harmony export */ });\n/* harmony import */ var _dependencies_bianco_query_index_next_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/bianco.query/index.next.js */ \"./node_modules/riot/esm/dependencies/bianco.query/index.next.js\");\n/* harmony import */ var _dependencies_bianco_attr_index_next_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/bianco.attr/index.next.js */ \"./node_modules/riot/esm/dependencies/bianco.attr/index.next.js\");\n/* Riot v10.1.4, @license MIT */\n\n\n\nconst CSS_BY_NAME = new Map();\nconst STYLE_NODE_SELECTOR = 'style[riot]';\n\n// memoized curried function\nconst getStyleNode = ((style) => {\n return () => {\n // lazy evaluation:\n // if this function was already called before\n // we return its cached result\n if (style) return style\n\n // create a new style element or use an existing one\n // and cache it internally\n style = (0,_dependencies_bianco_query_index_next_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(STYLE_NODE_SELECTOR)[0] || document.createElement('style');\n (0,_dependencies_bianco_attr_index_next_js__WEBPACK_IMPORTED_MODULE_1__.set)(style, 'type', 'text/css');\n\n /* istanbul ignore next */\n if (!style.parentNode) document.head.appendChild(style);\n\n return style\n }\n})();\n\n/**\n * Object that will be used to inject and manage the css of every tag instance\n */\nconst cssManager = {\n CSS_BY_NAME,\n /**\n * Save a tag style to be later injected into DOM\n * @param { string } name - if it's passed we will map the css to a tagname\n * @param { string } css - css string\n * @returns {object} self\n */\n add(name, css) {\n if (!CSS_BY_NAME.has(name)) {\n CSS_BY_NAME.set(name, css);\n this.inject();\n }\n\n return this\n },\n /**\n * Inject all previously saved tag styles into DOM\n * innerHTML seems slow: http://jsperf.com/riot-insert-style\n * @returns {object} self\n */\n inject() {\n getStyleNode().innerHTML = [...CSS_BY_NAME.values()].join('\\n');\n return this\n },\n\n /**\n * Remove a tag style from the DOM\n * @param {string} name a registered tagname\n * @returns {object} self\n */\n remove(name) {\n if (CSS_BY_NAME.has(name)) {\n CSS_BY_NAME.delete(name);\n this.inject();\n }\n\n return this\n },\n};\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/css-manager.js?\n}")},"./node_modules/riot/esm/core/instantiate-component.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ instantiateComponent: () => (/* binding */ instantiateComponent)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/objects.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/objects.js");\n/* harmony import */ var _component_dom_selectors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./component-dom-selectors.js */ "./node_modules/riot/esm/core/component-dom-selectors.js");\n/* harmony import */ var _component_lifecycle_methods_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./component-lifecycle-methods.js */ "./node_modules/riot/esm/core/component-lifecycle-methods.js");\n/* harmony import */ var _css_manager_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./css-manager.js */ "./node_modules/riot/esm/core/css-manager.js");\n/* harmony import */ var _dependencies_curri_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dependencies/curri/index.js */ "./node_modules/riot/esm/dependencies/curri/index.js");\n/* harmony import */ var _manage_component_lifecycle_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./manage-component-lifecycle.js */ "./node_modules/riot/esm/core/manage-component-lifecycle.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n\n\n\n\n/**\n * Component definition function\n * @param {object} component - the component initial properties\n * @param {string} component.css - component css string\n * @param {TemplateChunk} component.template - component template rendering\n * @param {object} component.componentAPI - component export default value\n * @param {string} component.name - component name\n * @returns {object} a new component implementation object\n */\nfunction instantiateComponent({ css, template, componentAPI, name }) {\n // add the component css into the DOM\n if (css && name) _css_manager_js__WEBPACK_IMPORTED_MODULE_4__["default"].add(name, css);\n\n return (0,_dependencies_curri_index_js__WEBPACK_IMPORTED_MODULE_5__["default"])(_manage_component_lifecycle_js__WEBPACK_IMPORTED_MODULE_6__.manageComponentLifecycle)(\n (0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_1__.defineProperties)(\n // set the component defaults without overriding the original component API\n (0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_1__.defineDefaults)(componentAPI, {\n ..._component_lifecycle_methods_js__WEBPACK_IMPORTED_MODULE_3__.COMPONENT_LIFECYCLE_METHODS,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.PROPS_KEY]: {},\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.STATE_KEY]: {},\n }),\n {\n // defined during the component creation\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.SLOTS_KEY]: null,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.ROOT_KEY]: null,\n // these properties should not be overriden\n ..._component_dom_selectors_js__WEBPACK_IMPORTED_MODULE_2__.COMPONENT_DOM_SELECTORS,\n name,\n css,\n template,\n },\n ),\n )\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/instantiate-component.js?\n}')},"./node_modules/riot/esm/core/manage-component-lifecycle.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ manageComponentLifecycle: () => (/* binding */ manageComponentLifecycle)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_checks_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/checks.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/checks.js");\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_riotjs_util_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dependencies/@riotjs/util/dom.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/dom.js");\n/* harmony import */ var _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dependencies/@riotjs/util/functions.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/functions.js");\n/* harmony import */ var _dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dependencies/@riotjs/util/misc.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/misc.js");\n/* harmony import */ var _dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dependencies/@riotjs/util/objects.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/objects.js");\n/* harmony import */ var _utils_get_root_computed_attribute_names_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/get-root-computed-attribute-names.js */ "./node_modules/riot/esm/utils/get-root-computed-attribute-names.js");\n/* harmony import */ var _add_css_hook_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./add-css-hook.js */ "./node_modules/riot/esm/core/add-css-hook.js");\n/* harmony import */ var _bind_dom_node_to_component_instance_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./bind-dom-node-to-component-instance.js */ "./node_modules/riot/esm/core/bind-dom-node-to-component-instance.js");\n/* harmony import */ var _compute_component_state_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./compute-component-state.js */ "./node_modules/riot/esm/core/compute-component-state.js");\n/* harmony import */ var _compute_initial_props_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./compute-initial-props.js */ "./node_modules/riot/esm/core/compute-initial-props.js");\n/* harmony import */ var _run_plugins_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./run-plugins.js */ "./node_modules/riot/esm/core/run-plugins.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Component creation factory function that will enhance the user provided API\n * @param {object} component - a component implementation previously defined\n * @param {object} options - component options\n * @param {Array} options.slots - component slots generated via riot compiler\n * @param {Array} options.attributes - attribute expressions generated via riot compiler\n * @param {object} options.props - component initial props\n * @returns {Riot.Component} a riot component instance\n */\nfunction manageComponentLifecycle(\n component,\n { slots, attributes = [], props },\n) {\n return (0,_dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_3__.autobindMethods)(\n (0,_run_plugins_js__WEBPACK_IMPORTED_MODULE_11__.runPlugins)(\n (0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_5__.defineProperties)(\n (0,_dependencies_riotjs_util_checks_js__WEBPACK_IMPORTED_MODULE_0__.isObject)(component) ? Object.create(component) : component,\n {\n mount(element, state = {}, parentScope) {\n // any element mounted passing through this function can\'t be a pure component\n (0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_5__.defineProperty)(element, _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.IS_PURE_SYMBOL, false);\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PARENT_KEY_SYMBOL] = parentScope;\n\n (0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_5__.defineProperty)(\n this,\n _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY,\n Object.freeze({\n ...(0,_compute_initial_props_js__WEBPACK_IMPORTED_MODULE_10__.computeInitialProps)(element, props),\n ...(0,_dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_4__.generatePropsFromAttributes)(attributes, parentScope),\n }),\n );\n\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY] = (0,_compute_component_state_js__WEBPACK_IMPORTED_MODULE_9__.computeComponentState)(this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY], state);\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.TEMPLATE_KEY_SYMBOL] = this.template.createDOM(element).clone();\n // get the attribute names that don\'t belong to the props object\n // this will avoid recursive props rendering https://github.com/riot/riot/issues/2994\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ROOT_ATTRIBUTES_KEY_SYMBOL] = (0,_utils_get_root_computed_attribute_names_js__WEBPACK_IMPORTED_MODULE_6__.getRootComputedAttributeNames)(\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.TEMPLATE_KEY_SYMBOL],\n );\n\n // link this object to the DOM node\n (0,_bind_dom_node_to_component_instance_js__WEBPACK_IMPORTED_MODULE_8__.bindDOMNodeToComponentInstance)(element, this);\n // add eventually the \'is\' attribute\n component.name && (0,_add_css_hook_js__WEBPACK_IMPORTED_MODULE_7__.addCssHook)(element, component.name);\n\n // define the root element\n (0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_5__.defineProperty)(this, _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ROOT_KEY, element);\n // define the slots array\n (0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_5__.defineProperty)(this, _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.SLOTS_KEY, slots);\n\n // before mount lifecycle event\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ON_BEFORE_MOUNT_KEY](this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY], this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY]);\n // mount the template\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.TEMPLATE_KEY_SYMBOL].mount(element, this, parentScope);\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ON_MOUNTED_KEY](this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY], this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY]);\n\n return this\n },\n update(state = {}, parentScope) {\n if (parentScope) {\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PARENT_KEY_SYMBOL] = parentScope;\n }\n\n // filter out the computed attributes from the root node\n const staticRootAttributes = Array.from(\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ROOT_KEY].attributes,\n ).filter(\n ({ name }) => !this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ROOT_ATTRIBUTES_KEY_SYMBOL].includes(name),\n );\n\n // evaluate the value of the static dom attributes\n const domNodeAttributes = (0,_dependencies_riotjs_util_dom_js__WEBPACK_IMPORTED_MODULE_2__.DOMattributesToObject)({\n attributes: staticRootAttributes,\n });\n\n // Avoid adding the riot "is" directives to the component props\n // eslint-disable-next-line no-unused-vars\n const { [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.IS_DIRECTIVE]: _, ...newProps } = {\n ...domNodeAttributes,\n ...(0,_dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_4__.generatePropsFromAttributes)(\n attributes,\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PARENT_KEY_SYMBOL],\n ),\n };\n if (this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.SHOULD_UPDATE_KEY](newProps, this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY]) === false)\n return\n\n ;(0,_dependencies_riotjs_util_objects_js__WEBPACK_IMPORTED_MODULE_5__.defineProperty)(\n this,\n _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY,\n Object.freeze({\n // only root components will merge their initial props with the new ones\n // children components will just get them overridden see also https://github.com/riot/riot/issues/2978\n ...(parentScope ? null : this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY]),\n ...newProps,\n }),\n );\n\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY] = (0,_compute_component_state_js__WEBPACK_IMPORTED_MODULE_9__.computeComponentState)(this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY], state);\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ON_BEFORE_UPDATE_KEY](this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY], this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY]);\n\n // avoiding recursive updates\n // see also https://github.com/riot/riot/issues/2895\n if (!this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.IS_COMPONENT_UPDATING]) {\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.IS_COMPONENT_UPDATING] = true;\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.TEMPLATE_KEY_SYMBOL].update(this, this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PARENT_KEY_SYMBOL]);\n }\n\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ON_UPDATED_KEY](this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY], this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY]);\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.IS_COMPONENT_UPDATING] = false;\n\n return this\n },\n unmount(preserveRoot) {\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ON_BEFORE_UNMOUNT_KEY](this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY], this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY]);\n\n // make sure that computed root attributes get removed if the root is preserved\n // https://github.com/riot/riot/issues/3051\n if (preserveRoot)\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ROOT_ATTRIBUTES_KEY_SYMBOL].forEach((attribute) =>\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ROOT_KEY].removeAttribute(attribute),\n );\n // if the preserveRoot is null the template html will be left untouched\n // in that case the DOM cleanup will happen differently from a parent node\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.TEMPLATE_KEY_SYMBOL].unmount(\n this,\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PARENT_KEY_SYMBOL],\n preserveRoot === null ? null : !preserveRoot,\n );\n this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.ON_UNMOUNTED_KEY](this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PROPS_KEY], this[_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.STATE_KEY]);\n\n return this\n },\n },\n ),\n ),\n Object.keys(component).filter((prop) => (0,_dependencies_riotjs_util_checks_js__WEBPACK_IMPORTED_MODULE_0__.isFunction)(component[prop])),\n )\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/manage-component-lifecycle.js?\n}')},"./node_modules/riot/esm/core/mocked-template-interface.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MOCKED_TEMPLATE_INTERFACE: () => (/* binding */ MOCKED_TEMPLATE_INTERFACE)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_riotjs_util_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/dom.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/dom.js");\n/* harmony import */ var _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dependencies/@riotjs/util/functions.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/functions.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n// Components without template use a mocked template interface with some basic functionalities to\n// guarantee consistent rendering behaviour see https://github.com/riot/riot/issues/2984\nconst MOCKED_TEMPLATE_INTERFACE = {\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.MOUNT_METHOD_KEY](el) {\n this.el = el;\n },\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.UPDATE_METHOD_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_2__.noop,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.UNMOUNT_METHOD_KEY](_, __, mustRemoveRoot = false) {\n if (mustRemoveRoot) (0,_dependencies_riotjs_util_dom_js__WEBPACK_IMPORTED_MODULE_1__.removeChild)(this.el);\n else if (!mustRemoveRoot) (0,_dependencies_riotjs_util_dom_js__WEBPACK_IMPORTED_MODULE_1__.cleanNode)(this.el);\n },\n clone() {\n return { ...this }\n },\n createDOM: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_2__.noop,\n};\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/mocked-template-interface.js?\n}')},"./node_modules/riot/esm/core/mount-component.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ mountComponent: () => (/* binding */ mountComponent)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/misc.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/misc.js");\n/* harmony import */ var _utils_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/dom.js */ "./node_modules/riot/esm/utils/dom.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n/**\n * Component initialization function starting from a DOM node\n * @param {HTMLElement} element - element to upgrade\n * @param {object} initialProps - initial component properties\n * @param {string} componentName - component id\n * @param {Array} slots - component slots\n * @returns {object} a new component instance bound to a DOM node\n */\nfunction mountComponent(element, initialProps, componentName, slots) {\n const name = componentName || (0,_utils_dom_js__WEBPACK_IMPORTED_MODULE_2__.getName)(element);\n if (!_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.COMPONENTS_IMPLEMENTATION_MAP.has(name))\n (0,_dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_1__.panic)(`The component named "${name}" was never registered`);\n\n const component = _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.COMPONENTS_IMPLEMENTATION_MAP.get(name)({\n props: initialProps,\n slots,\n });\n\n return component.mount(element)\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/mount-component.js?\n}')},"./node_modules/riot/esm/core/pure-component-api.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PURE_COMPONENT_API: () => (/* binding */ PURE_COMPONENT_API)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/functions.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/functions.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\nconst PURE_COMPONENT_API = Object.freeze({\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.MOUNT_METHOD_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.UPDATE_METHOD_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n [_dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.UNMOUNT_METHOD_KEY]: _dependencies_riotjs_util_functions_js__WEBPACK_IMPORTED_MODULE_1__.noop,\n});\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/pure-component-api.js?\n}')},"./node_modules/riot/esm/core/run-plugins.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ runPlugins: () => (/* binding */ runPlugins)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* Riot v10.1.4, @license MIT */\n\n\n/**\n * Run the component instance through all the plugins set by the user\n * @param {object} component - component instance\n * @returns {object} the component enhanced by the plugins\n */\nfunction runPlugins(component) {\n return [..._dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUGINS_SET].reduce((c, fn) => fn(c) || c, component)\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/core/run-plugins.js?\n}')},"./node_modules/riot/esm/dependencies/@riotjs/dom-bindings/dist/dom-bindings.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ bindingTypes: () => (/* reexport safe */ _util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ createBinding: () => (/* binding */ create$1),\n/* harmony export */ createExpression: () => (/* binding */ create$4),\n/* harmony export */ expressionTypes: () => (/* reexport safe */ _util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ template: () => (/* binding */ create)\n/* harmony export */ });\n/* harmony import */ var _util_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/dom.js */ \"./node_modules/riot/esm/dependencies/@riotjs/util/dom.js\");\n/* harmony import */ var _util_constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/constants.js */ \"./node_modules/riot/esm/dependencies/@riotjs/util/constants.js\");\n/* harmony import */ var _util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/binding-types.js */ \"./node_modules/riot/esm/dependencies/@riotjs/util/binding-types.js\");\n/* harmony import */ var _util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/expression-types.js */ \"./node_modules/riot/esm/dependencies/@riotjs/util/expression-types.js\");\n/* harmony import */ var _util_objects_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/objects.js */ \"./node_modules/riot/esm/dependencies/@riotjs/util/objects.js\");\n/* harmony import */ var _util_checks_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/checks.js */ \"./node_modules/riot/esm/dependencies/@riotjs/util/checks.js\");\n/* harmony import */ var _util_misc_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/misc.js */ \"./node_modules/riot/esm/dependencies/@riotjs/util/misc.js\");\n/* Riot WIP, @license MIT */\n\n\n\n\n\n\n\n\n\n\nconst HEAD_SYMBOL = Symbol();\nconst TAIL_SYMBOL = Symbol();\n\n/**\n * Create the <template> fragments text nodes\n * @returns {object} {{head: Text, tail: Text}}\n */\nfunction createHeadTailPlaceholders() {\n const head = document.createTextNode('');\n const tail = document.createTextNode('');\n\n head[HEAD_SYMBOL] = true;\n tail[TAIL_SYMBOL] = true;\n\n return { head, tail }\n}\n\n/**\n * Create the template meta object in case of <template> fragments\n * @param {TemplateChunk} componentTemplate - template chunk object\n * @returns {object} the meta property that will be passed to the mount function of the TemplateChunk\n */\nfunction createTemplateMeta(componentTemplate) {\n const fragment = componentTemplate.dom.cloneNode(true);\n const { head, tail } = createHeadTailPlaceholders();\n\n return {\n avoidDOMInjection: true,\n fragment,\n head,\n tail,\n children: [head, ...Array.from(fragment.childNodes), tail],\n }\n}\n\n/* c8 ignore start */\n/**\n * ISC License\n *\n * Copyright (c) 2020, Andrea Giammarchi, @WebReflection\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE\n * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n// fork of https://github.com/WebReflection/udomdiff version 1.1.0\n// due to https://github.com/WebReflection/udomdiff/pull/2\n/* eslint-disable */\n\n/**\n * @param {Node[]} a The list of current/live children\n * @param {Node[]} b The list of future children\n * @param {(entry: Node, action: number) => Node} get\n * The callback invoked per each entry related DOM operation.\n * @param {Node} [before] The optional node used as anchor to insert before.\n * @returns {Node[]} The same list of future children.\n */\nconst udomdiff = (a, b, get, before) => {\n const bLength = b.length;\n let aEnd = a.length;\n let bEnd = bLength;\n let aStart = 0;\n let bStart = 0;\n let map = null;\n while (aStart < aEnd || bStart < bEnd) {\n // append head, tail, or nodes in between: fast path\n if (aEnd === aStart) {\n // we could be in a situation where the rest of nodes that\n // need to be added are not at the end, and in such case\n // the node to `insertBefore`, if the index is more than 0\n // must be retrieved, otherwise it's gonna be the first item.\n const node =\n bEnd < bLength\n ? bStart\n ? get(b[bStart - 1], -0).nextSibling\n : get(b[bEnd - bStart], 0)\n : before;\n while (bStart < bEnd) (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.insertBefore)(get(b[bStart++], 1), node);\n }\n // remove head or tail: fast path\n else if (bEnd === bStart) {\n while (aStart < aEnd) {\n // remove the node only if it's unknown or not live\n if (!map || !map.has(a[aStart])) (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.removeChild)(get(a[aStart], -1));\n aStart++;\n }\n }\n // same node: fast path\n else if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n }\n // same tail: fast path\n else if (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n // The once here single last swap \"fast path\" has been removed in v1.1.0\n // https://github.com/WebReflection/udomdiff/blob/single-final-swap/esm/index.js#L69-L85\n // reverse swap: also fast path\n else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n // this is a \"shrink\" operation that could happen in these cases:\n // [1, 2, 3, 4, 5]\n // [1, 4, 3, 2, 5]\n // or asymmetric too\n // [1, 2, 3, 4, 5]\n // [1, 2, 3, 5, 6, 4]\n const node = get(a[--aEnd], -1).nextSibling;\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.moveBefore)(get(b[bStart++], 1), get(a[aStart++], -1).nextSibling);\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.moveBefore)(get(b[--bEnd], 1), node);\n // mark the future index as identical (yeah, it's dirty, but cheap 👍)\n // The main reason to do this, is that when a[aEnd] will be reached,\n // the loop will likely be on the fast path, as identical to b[bEnd].\n // In the best case scenario, the next loop will skip the tail,\n // but in the worst one, this node will be considered as already\n // processed, bailing out pretty quickly from the map index check\n a[aEnd] = b[bEnd];\n }\n // map based fallback, \"slow\" path\n else {\n // the map requires an O(bEnd - bStart) operation once\n // to store all future nodes indexes for later purposes.\n // In the worst case scenario, this is a full O(N) cost,\n // and such scenario happens at least when all nodes are different,\n // but also if both first and last items of the lists are different\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n // if it's a future node, hence it needs some handling\n if (map.has(a[aStart])) {\n // grab the index of such node, 'cause it might have been processed\n const index = map.get(a[aStart]);\n // if it's not already processed, look on demand for the next LCS\n if (bStart < index && index < bEnd) {\n let i = aStart;\n // counts the amount of nodes that are the same in the future\n let sequence = 1;\n while (++i < aEnd && i < bEnd && map.get(a[i]) === index + sequence)\n sequence++;\n // effort decision here: if the sequence is longer than replaces\n // needed to reach such sequence, which would brings again this loop\n // to the fast path, prepend the difference before a sequence,\n // and move only the future list index forward, so that aStart\n // and bStart will be aligned again, hence on the fast path.\n // An example considering aStart and bStart are both 0:\n // a: [1, 2, 3, 4]\n // b: [7, 1, 2, 3, 6]\n // this would place 7 before 1 and, from that time on, 1, 2, and 3\n // will be processed at zero cost\n if (sequence > index - bStart) {\n const node = get(a[aStart], 0);\n while (bStart < index) {\n // if the node is already in the DOM, move it\n // to preserve its state (focus, animations, iframes, etc.)\n // otherwise insert it as a new node\n const newNode = get(b[bStart++], 1);\n if (newNode.parentNode) (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.moveBefore)(newNode, node);\n else (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.insertBefore)(newNode, node);\n }\n }\n // if the effort wasn't good enough, fallback to a replace,\n // moving both source and target indexes forward, hoping that some\n // similar node will be found later on, to go back to the fast path\n else {\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.replaceChild)(get(b[bStart++], 1), get(a[aStart++], -1));\n }\n }\n // otherwise move the source forward, 'cause there's nothing to do\n else aStart++;\n }\n // this node has no meaning in the future list, so it's more than safe\n // to remove it, and check the next live node out instead, meaning\n // that only the live list index should be forwarded\n else (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.removeChild)(get(a[aStart++], -1));\n }\n }\n return b\n};\n\nconst UNMOUNT_SCOPE = Symbol('unmount');\n\nconst EachBinding = {\n // dynamic binding properties\n // childrenMap: null,\n // node: null,\n // root: null,\n // condition: null,\n // evaluate: null,\n // template: null,\n // isTemplateTag: false,\n nodes: [],\n // getKey: null,\n // indexName: null,\n // itemName: null,\n // afterPlaceholder: null,\n // placeholder: null,\n\n // API methods\n mount(scope, parentScope) {\n return this.update(scope, parentScope)\n },\n update(scope, parentScope) {\n const { placeholder, nodes, childrenMap } = this;\n const collection = scope === UNMOUNT_SCOPE ? null : this.evaluate(scope);\n const items = collection ? Array.from(collection) : [];\n\n // prepare the diffing\n const { newChildrenMap, batches, futureNodes } = createPatch(\n items,\n scope,\n parentScope,\n this,\n );\n\n // patch the DOM only if there are new nodes\n udomdiff(\n nodes,\n futureNodes,\n patch(Array.from(childrenMap.values()), parentScope),\n placeholder,\n );\n\n // trigger the mounts and the updates\n batches.forEach((fn) => fn());\n\n // update the children map\n this.childrenMap = newChildrenMap;\n this.nodes = futureNodes;\n\n return this\n },\n unmount(scope, parentScope) {\n this.update(UNMOUNT_SCOPE, parentScope);\n\n return this\n },\n};\n\n/**\n * Patch the DOM while diffing\n * @param {any[]} redundant - list of all the children (template, nodes, context) added via each\n * @param {*} parentScope - scope of the parent template\n * @returns {Function} patch function used by domdiff\n */\nfunction patch(redundant, parentScope) {\n return (item, info) => {\n if (info < 0) {\n // get the last element added to the childrenMap saved previously\n const element = redundant[redundant.length - 1];\n\n if (element) {\n // get the nodes and the template in stored in the last child of the childrenMap\n const { template, nodes, context } = element;\n // remove the last node (notice <template> tags might have more children nodes)\n nodes.pop();\n\n // notice that we pass null as last argument because\n // the root node and its children will be removed by domdiff\n if (!nodes.length) {\n // we have cleared all the children nodes and we can unmount this template\n redundant.pop();\n template.unmount(context, parentScope, null);\n }\n }\n }\n\n return item\n }\n}\n\n/**\n * Check whether a template must be filtered from a loop\n * @param {Function} condition - filter function\n * @param {object} context - argument passed to the filter function\n * @returns {boolean} true if this item should be skipped\n */\nfunction mustFilterItem(condition, context) {\n return condition ? !condition(context) : false\n}\n\n/**\n * Extend the scope of the looped template\n * @param {object} scope - current template scope\n * @param {object} options - options\n * @param {string} options.itemName - key to identify the looped item in the new context\n * @param {string} options.indexName - key to identify the index of the looped item\n * @param {number} options.index - current index\n * @param {*} options.item - collection item looped\n * @returns {object} enhanced scope object\n */\nfunction extendScope(scope, { itemName, indexName, index, item }) {\n (0,_util_objects_js__WEBPACK_IMPORTED_MODULE_4__.defineProperty)(scope, itemName, item);\n if (indexName) (0,_util_objects_js__WEBPACK_IMPORTED_MODULE_4__.defineProperty)(scope, indexName, index);\n\n return scope\n}\n\n/**\n * Loop the current template items\n * @param {Array} items - expression collection value\n * @param {*} scope - template scope\n * @param {*} parentScope - scope of the parent template\n * @param {EachBinding} binding - each binding object instance\n * @returns {object} data - An object containing:\n * @property {Map} newChildrenMap - a Map containing the new children template structure\n * @property {Array} batches - array containing the template lifecycle functions to trigger\n * @property {Array} futureNodes - array containing the nodes we need to diff\n */\nfunction createPatch(items, scope, parentScope, binding) {\n const {\n condition,\n template,\n childrenMap,\n itemName,\n getKey,\n indexName,\n root,\n isTemplateTag,\n } = binding;\n const newChildrenMap = new Map();\n const batches = [];\n const futureNodes = [];\n\n items.forEach((item, index) => {\n const context = extendScope(Object.create(scope), {\n itemName,\n indexName,\n index,\n item,\n });\n const key = getKey ? getKey(context) : index;\n const oldItem = childrenMap.get(key);\n const nodes = [];\n\n if (mustFilterItem(condition, context)) {\n return\n }\n\n const mustMount = !oldItem;\n const componentTemplate = oldItem ? oldItem.template : template.clone();\n const el = componentTemplate.el || root.cloneNode();\n const meta =\n isTemplateTag && mustMount\n ? createTemplateMeta(componentTemplate)\n : componentTemplate.meta;\n\n if (mustMount) {\n batches.push(() =>\n componentTemplate.mount(el, context, parentScope, meta),\n );\n } else {\n batches.push(() => componentTemplate.update(context, parentScope));\n }\n\n // create the collection of nodes to update or to add\n // in case of template tags we need to add all its children nodes\n if (isTemplateTag) {\n nodes.push(...meta.children);\n } else {\n nodes.push(el);\n }\n\n // delete the old item from the children map\n childrenMap.delete(key);\n futureNodes.push(...nodes);\n\n // update the children map\n newChildrenMap.set(key, {\n nodes,\n template: componentTemplate,\n context,\n index,\n });\n });\n\n return {\n newChildrenMap,\n batches,\n futureNodes,\n }\n}\n\nfunction create$6(\n node,\n { evaluate, condition, itemName, indexName, getKey, template },\n) {\n const placeholder = document.createTextNode('');\n const root = node.cloneNode();\n\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.insertBefore)(placeholder, node);\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.removeChild)(node);\n\n return {\n ...EachBinding,\n childrenMap: new Map(),\n node,\n root,\n condition,\n evaluate,\n isTemplateTag: (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isTemplate)(root),\n template: template.createDOM(node),\n getKey,\n indexName,\n itemName,\n placeholder,\n }\n}\n\n/**\n * Binding responsible for the `if` directive\n */\nconst IfBinding = {\n // dynamic binding properties\n // node: null,\n // evaluate: null,\n // isTemplateTag: false,\n // placeholder: null,\n // template: null,\n\n // API methods\n mount(scope, parentScope) {\n return this.update(scope, parentScope)\n },\n update(scope, parentScope) {\n const value = !!this.evaluate(scope);\n const mustMount = !this.value && value;\n const mustUnmount = this.value && !value;\n const mount = () => {\n const pristine = this.node.cloneNode();\n\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.insertBefore)(pristine, this.placeholder);\n this.template = this.template.clone();\n this.template.mount(pristine, scope, parentScope);\n };\n\n switch (true) {\n case mustMount:\n mount();\n break\n case mustUnmount:\n this.unmount(scope);\n break\n default:\n if (value) this.template.update(scope, parentScope);\n }\n\n this.value = value;\n\n return this\n },\n unmount(scope, parentScope) {\n this.template.unmount(scope, parentScope, true);\n\n return this\n },\n};\n\nfunction create$5(node, { evaluate, template }) {\n const placeholder = document.createTextNode('');\n\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.insertBefore)(placeholder, node);\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.removeChild)(node);\n\n return {\n ...IfBinding,\n node,\n evaluate,\n placeholder,\n template: template.createDOM(node),\n }\n}\n\n/**\n * This method handles the REF attribute expressions\n * @param {object} expression - expression data\n * @param {HTMLElement} expression.node - target node\n * @param {*} expression.value - the old expression cached value\n * @param {*} value - new expression value\n * @returns {undefined}\n */\nfunction refExpression({ node, value: oldValue }, value) {\n // called on mount and update\n if (value) value(node);\n // called on unmount\n // in this case the node value is null\n else oldValue(null);\n}\n\n/**\n * Normalize the user value in order to render a empty string in case of falsy values\n * @param {*} value - user input value\n * @returns {string} hopefully a string\n */\nfunction normalizeStringValue(value) {\n return (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isNil)(value) ? '' : value\n}\n\n/**\n * This methods handles the input fields value updates\n * @param {object} expression - expression data\n * @param {HTMLElement} expression.node - target node\n * @param {*} value - new expression value\n * @returns {undefined}\n */\nfunction valueExpression({ node }, value) {\n node.value = normalizeStringValue(value);\n}\n\nconst RE_EVENTS_PREFIX = /^on/;\n\nconst getCallbackAndOptions = (value) =>\n Array.isArray(value) ? value : [value, false];\n\n// see also https://medium.com/@WebReflection/dom-handleevent-a-cross-platform-standard-since-year-2000-5bf17287fd38\nconst EventListener = {\n handleEvent(event) {\n this[event.type](event);\n },\n};\nconst ListenersWeakMap = new WeakMap();\n\nconst createListener = (node) => {\n const listener = Object.create(EventListener);\n ListenersWeakMap.set(node, listener);\n return listener\n};\n\n/**\n * Set a new event listener\n * @param {object} expression - event expression data\n * @param {HTMLElement} expression.node - target node\n * @param {string} expression.name - event name\n * @param {*} value - new expression value\n * @returns {undefined}\n */\nfunction eventExpression({ node, name }, value) {\n const normalizedEventName = name.replace(RE_EVENTS_PREFIX, '');\n const eventListener = ListenersWeakMap.get(node) || createListener(node);\n const [callback, options] = getCallbackAndOptions(value);\n const handler = eventListener[normalizedEventName];\n const mustRemoveEvent = handler && !callback;\n const mustAddEvent = callback && !handler;\n\n if (mustRemoveEvent) {\n node.removeEventListener(normalizedEventName, eventListener);\n }\n\n if (mustAddEvent) {\n node.addEventListener(normalizedEventName, eventListener, options);\n }\n\n eventListener[normalizedEventName] = callback;\n}\n\n/* c8 ignore next */\nconst ElementProto = typeof Element === 'undefined' ? {} : Element.prototype;\nconst isNativeHtmlProperty = (0,_util_misc_js__WEBPACK_IMPORTED_MODULE_6__.memoize)(\n (name) => ElementProto.hasOwnProperty(name), // eslint-disable-line\n);\n\n/**\n * Add all the attributes provided\n * @param {HTMLElement} node - target node\n * @param {object} attributes - object containing the attributes names and values\n * @param {*} oldAttributes - the old expression cached value\n * @returns {undefined} sorry it's a void function :(\n */\nfunction setAllAttributes(node, attributes, oldAttributes) {\n Object.entries(attributes)\n // filter out the attributes that didn't change their value\n .filter(([name, value]) => value !== oldAttributes?.[name])\n .forEach(([name, value]) => {\n switch (true) {\n case name === _util_constants_js__WEBPACK_IMPORTED_MODULE_1__.REF_ATTRIBUTE:\n return refExpression({ node }, value)\n case name === _util_constants_js__WEBPACK_IMPORTED_MODULE_1__.VALUE_ATTRIBUTE:\n return valueExpression({ node }, value)\n case (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isEventAttribute)(name):\n return eventExpression({ node, name }, value)\n default:\n return attributeExpression({ node, name }, value)\n }\n });\n}\n\n/**\n * Remove all the attributes provided\n * @param {HTMLElement} node - target node\n * @param {object} newAttributes - object containing all the new attribute names\n * @param {object} oldAttributes - object containing all the old attribute names\n * @returns {undefined} sorry it's a void function :(\n */\nfunction removeAllAttributes(node, newAttributes, oldAttributes) {\n const newKeys = newAttributes ? Object.keys(newAttributes) : [];\n\n Object.entries(oldAttributes)\n .filter(([name]) => !newKeys.includes(name))\n .forEach(([name, value]) => {\n switch (true) {\n case name === _util_constants_js__WEBPACK_IMPORTED_MODULE_1__.REF_ATTRIBUTE:\n return refExpression({ node, value })\n case name === _util_constants_js__WEBPACK_IMPORTED_MODULE_1__.VALUE_ATTRIBUTE:\n node.removeAttribute('value');\n node.value = '';\n return\n case (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isEventAttribute)(name):\n return eventExpression({ node, name }, null)\n default:\n return node.removeAttribute(name)\n }\n });\n}\n\n/**\n * Check whether the attribute value can be rendered\n * @param {*} value - expression value\n * @returns {boolean} true if we can render this attribute value\n */\nfunction canRenderAttribute(value) {\n return ['string', 'number', 'boolean'].includes(typeof value)\n}\n\n/**\n * Check whether the attribute should be removed\n * @param {*} value - expression value\n * @param {boolean} isBoolean - flag to handle boolean attributes\n * @returns {boolean} boolean - true if the attribute can be removed\n */\nfunction shouldRemoveAttribute(value, isBoolean) {\n // boolean attributes should be removed if the value is falsy\n if (isBoolean) return !value\n\n // null and undefined values will remove the attribute as well\n return (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isNil)(value)\n}\n\n/**\n * This methods handles the DOM attributes updates\n * @param {object} expression - attribute expression data\n * @param {HTMLElement} expression.node - target node\n * @param {string} expression.name - attribute name\n * @param {boolean} expression.isBoolean - flag to handle boolean attributes\n * @param {*} expression.value - the old expression cached value\n * @param {*} value - new expression value\n * @returns {undefined}\n */\nfunction attributeExpression(\n { node, name, isBoolean: isBoolean$1, value: oldValue },\n value,\n) {\n // is it a spread operator? {...attributes}\n if (!name) {\n if (oldValue) {\n // remove all the old attributes\n removeAllAttributes(node, value, oldValue);\n }\n\n // is the value still truthy?\n if (value) {\n setAllAttributes(node, value, oldValue);\n }\n\n return\n }\n\n // store the attribute on the node to make it compatible with native custom elements\n if (\n !isNativeHtmlProperty(name) &&\n ((0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isBoolean)(value) || (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isObject)(value) || (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isFunction)(value))\n ) {\n node[name] = value;\n }\n\n if (shouldRemoveAttribute(value, isBoolean$1)) {\n node.removeAttribute(name);\n } else if (canRenderAttribute(value)) {\n node.setAttribute(name, normalizeValue(name, value, isBoolean$1));\n }\n}\n\n/**\n * Get the value as string\n * @param {string} name - attribute name\n * @param {*} value - user input value\n * @param {boolean} isBoolean - boolean attributes flag\n * @returns {string} input value as string\n */\nfunction normalizeValue(name, value, isBoolean) {\n // be sure that expressions like selected={ true } will always be rendered as selected='selected'\n // fix https://github.com/riot/riot/issues/2975\n return !!value && isBoolean ? name : value\n}\n\n/**\n * Get the the target text node to update or create one from of a comment node\n * @param {HTMLElement} node - any html element containing childNodes\n * @param {number} childNodeIndex - index of the text node in the childNodes list\n * @returns {Text} the text node to update\n */\nconst getTextNode = (node, childNodeIndex) => {\n return node.childNodes[childNodeIndex]\n};\n\n/**\n * This methods handles a simple text expression update\n * @param {object} expression - expression data\n * @param {HTMLElement} expression.node - target node\n * @param {*} value - new expression value\n * @returns {undefined}\n */\nfunction textExpression({ node }, value) {\n node.data = normalizeStringValue(value);\n}\n\nconst expressions = {\n [_util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.ATTRIBUTE]: attributeExpression,\n [_util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.EVENT]: eventExpression,\n [_util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.TEXT]: textExpression,\n [_util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.VALUE]: valueExpression,\n [_util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.REF]: refExpression,\n};\n\nconst Expression = {\n // Static props\n // node: null,\n // value: null,\n\n // API methods\n /**\n * Mount the expression evaluating its initial value\n * @param {*} scope - argument passed to the expression to evaluate its current values\n * @returns {Expression} self\n */\n mount(scope) {\n // hopefully a pure function\n const value = this.evaluate(scope);\n\n // IO() DOM updates\n expressions[this.type](this, value);\n\n // store the computed value for the update calls\n this.value = value;\n\n return this\n },\n /**\n * Update the expression if its value changed\n * @param {*} scope - argument passed to the expression to evaluate its current values\n * @returns {Expression} self\n */\n update(scope) {\n // pure function\n const value = this.evaluate(scope);\n\n if (this.value !== value) {\n // IO() DOM updates\n expressions[this.type](this, value);\n this.value = value;\n }\n\n return this\n },\n /**\n * Expression teardown method\n * @returns {Expression} self\n */\n unmount() {\n // unmount event and ref expressions\n if (\n [_util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.EVENT, _util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.REF].includes(this.type) ||\n // spread attributes might contain events or refs that must be unmounted\n (this.type === _util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.ATTRIBUTE && !this.name)\n )\n expressions[this.type](this, null);\n\n return this\n },\n};\n\nfunction create$4(node, data) {\n return {\n ...Expression,\n ...data,\n node: data.type === _util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.TEXT ? getTextNode(node, data.childNodeIndex) : node,\n }\n}\n\n/**\n * Create a flat object having as keys a list of methods that if dispatched will propagate\n * on the whole collection\n * @param {Array} collection - collection to iterate\n * @param {Array<string>} methods - methods to execute on each item of the collection\n * @param {*} context - context returned by the new methods created\n * @returns {object} a new object to simplify the the nested methods dispatching\n */\nfunction flattenCollectionMethods(collection, methods, context) {\n return methods.reduce((acc, method) => {\n return {\n ...acc,\n [method]: (scope) => {\n return collection.map((item) => item[method](scope)) && context\n },\n }\n }, {})\n}\n\nfunction create$3(node, { expressions }) {\n return flattenCollectionMethods(\n expressions.map((expression) => create$4(node, expression)),\n ['mount', 'update', 'unmount'],\n )\n}\n\nconst extendParentScope = (attributes, scope, parentScope) => {\n if (!attributes || !attributes.length) return parentScope\n\n return Object.assign(\n Object.create(parentScope || null),\n (0,_util_misc_js__WEBPACK_IMPORTED_MODULE_6__.generatePropsFromAttributes)(attributes, scope),\n )\n};\n\nconst findSlotById = (id, slots) => slots?.find((slot) => slot.id === id);\n\n// this function is only meant to fix an edge case\n// https://github.com/riot/riot/issues/2842\nconst getRealParent = (scope, parentScope) =>\n scope[_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.PARENT_KEY_SYMBOL] || parentScope;\n\nconst SlotBinding = {\n // dynamic binding properties\n // node: null,\n // name: null,\n attributes: [],\n // templateData: null,\n // template: null,\n\n getTemplateScope(scope, parentScope) {\n return extendParentScope(this.attributes, scope, parentScope)\n },\n\n // API methods\n mount(scope, parentScope) {\n const templateData = scope.slots\n ? findSlotById(this.name, scope.slots)\n : false;\n const { parentNode } = this.node;\n\n // if the slot did not pass any content, we will use the self slot for optional fallback content (https://github.com/riot/riot/issues/3024)\n const realParent = templateData ? getRealParent(scope, parentScope) : scope;\n\n // if there is no html for the current slot detected we rely on the parent slots (https://github.com/riot/riot/issues/3055)\n this.templateData = templateData?.html\n ? templateData\n : findSlotById(this.name, realParent.slots);\n\n // override the template property if the slot needs to be replaced\n this.template =\n (this.templateData &&\n create(this.templateData.html, this.templateData.bindings).createDOM(\n parentNode,\n )) ||\n // otherwise use the optional template fallback if provided by the compiler see also https://github.com/riot/riot/issues/3014\n this.template?.clone();\n\n if (this.template) {\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.cleanNode)(this.node);\n this.template.mount(\n this.node,\n this.getTemplateScope(scope, realParent),\n realParent,\n );\n this.template.children = Array.from(this.node.childNodes);\n }\n\n moveSlotInnerContent(this.node);\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.removeChild)(this.node);\n\n return this\n },\n update(scope, parentScope) {\n if (this.template) {\n const realParent = this.templateData\n ? getRealParent(scope, parentScope)\n : scope;\n\n this.template.update(this.getTemplateScope(scope, realParent), realParent);\n }\n\n return this\n },\n unmount(scope, parentScope, mustRemoveRoot) {\n if (this.template) {\n this.template.unmount(\n this.getTemplateScope(scope, parentScope),\n null,\n mustRemoveRoot,\n );\n }\n\n return this\n },\n};\n\n/**\n * Move the inner content of the slots outside of them\n * @param {HTMLElement} slot - slot node\n * @returns {undefined} it's a void method ¯\\_(ツ)_/¯\n */\nfunction moveSlotInnerContent(slot) {\n const child = slot && slot.firstChild;\n\n if (!child) return\n\n ;(0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.insertBefore)(child, slot);\n moveSlotInnerContent(slot);\n}\n\n/**\n * Create a single slot binding\n * @param {HTMLElement} node - slot node\n * @param {object} data - slot binding data\n * @param {string} data.name - slot id\n * @param {AttributeExpressionData[]} data.attributes - slot attributes\n * @param {TemplateChunk} data.template - slot fallback template\n * @returns {object} Slot binding object\n */\nfunction createSlot(node, { name, attributes, template }) {\n return {\n ...SlotBinding,\n attributes,\n template,\n node,\n name,\n }\n}\n\n/**\n * Create a new tag object if it was registered before, otherwise fallback to the simple\n * template chunk\n * @param {Function} component - component factory function\n * @param {Array<object>} slots - array containing the slots markup\n * @param {Array} attributes - dynamic attributes that will be received by the tag element\n * @returns {TagImplementation|TemplateChunk} a tag implementation or a template chunk as fallback\n */\nfunction getTag(component, slots = [], attributes = []) {\n // if this tag was registered before we will return its implementation\n if (component) {\n return component({ slots, attributes })\n }\n\n // otherwise we return a template chunk\n return create(slotsToMarkup(slots), [\n ...slotBindings(slots),\n {\n // the attributes should be registered as binding\n // if we fallback to a normal template chunk\n expressions: attributes.map((attr) => {\n return {\n type: _util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.ATTRIBUTE,\n ...attr,\n }\n }),\n },\n ])\n}\n\n/**\n * Merge all the slots bindings into a single array\n * @param {Array<object>} slots - slots collection\n * @returns {Array<Bindings>} flatten bindings array\n */\nfunction slotBindings(slots) {\n return slots.reduce((acc, { bindings }) => acc.concat(bindings), [])\n}\n\n/**\n * Merge all the slots together in a single markup string\n * @param {Array<object>} slots - slots collection\n * @returns {string} markup of all the slots in a single string\n */\nfunction slotsToMarkup(slots) {\n return slots.reduce((acc, slot) => {\n return acc + slot.html\n }, '')\n}\n\nconst TagBinding = {\n // dynamic binding properties\n // node: null,\n // evaluate: null,\n // name: null,\n // slots: null,\n // tag: null,\n // attributes: null,\n // getComponent: null,\n\n mount(scope) {\n return this.update(scope)\n },\n update(scope, parentScope) {\n const name = this.evaluate(scope);\n\n // simple update\n if (name && name === this.name) {\n this.tag.update(scope);\n } else {\n // unmount the old tag if it exists\n this.unmount(scope, parentScope, true);\n\n // mount the new tag\n this.name = name;\n this.tag = getTag(this.getComponent(name), this.slots, this.attributes);\n this.tag.mount(this.node, scope);\n }\n\n return this\n },\n unmount(scope, parentScope, keepRootTag) {\n if (this.tag) {\n // keep the root tag\n this.tag.unmount(keepRootTag);\n }\n\n return this\n },\n};\n\nfunction create$2(\n node,\n { evaluate, getComponent, slots, attributes },\n) {\n return {\n ...TagBinding,\n node,\n evaluate,\n slots,\n attributes,\n getComponent,\n }\n}\n\nconst bindings = {\n [_util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__.IF]: create$5,\n [_util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__.SIMPLE]: create$3,\n [_util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__.EACH]: create$6,\n [_util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__.TAG]: create$2,\n [_util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__.SLOT]: createSlot,\n};\n\n/**\n * Text expressions in a template tag will get childNodeIndex value normalized\n * depending on the position of the <template> tag offset\n * @param {Expression[]} expressions - riot expressions array\n * @param {number} textExpressionsOffset - offset of the <template> tag\n * @returns {Expression[]} expressions containing the text expressions normalized\n */\nfunction fixTextExpressionsOffset(expressions, textExpressionsOffset) {\n return expressions.map((e) =>\n e.type === _util_expression_types_js__WEBPACK_IMPORTED_MODULE_3__.TEXT\n ? {\n ...e,\n childNodeIndex: e.childNodeIndex + textExpressionsOffset,\n }\n : e,\n )\n}\n\n/**\n * Bind a new expression object to a DOM node\n * @param {HTMLElement} root - DOM node where to bind the expression\n * @param {TagBindingData} binding - binding data\n * @param {number|null} templateTagOffset - if it's defined we need to fix the text expressions childNodeIndex offset\n * @returns {Binding} Binding object\n */\nfunction create$1(root, binding, templateTagOffset) {\n const { selector, type, redundantAttribute, expressions } = binding;\n // find the node to apply the bindings\n const node = selector ? root.querySelector(selector) : root;\n\n // remove eventually additional attributes created only to select this node\n if (redundantAttribute) node.removeAttribute(redundantAttribute);\n const bindingExpressions = expressions || [];\n\n // init the binding\n return (bindings[type] || bindings[_util_binding_types_js__WEBPACK_IMPORTED_MODULE_2__.SIMPLE])(node, {\n ...binding,\n expressions:\n templateTagOffset && !selector\n ? fixTextExpressionsOffset(bindingExpressions, templateTagOffset)\n : bindingExpressions,\n })\n}\n\n// in this case a simple innerHTML is enough\nfunction createHTMLTree(html, root) {\n const template = (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isTemplate)(root) ? root : document.createElement('template');\n template.innerHTML = html;\n return template.content\n}\n\n// for svg nodes we need a bit more work\n/* c8 ignore start */\nfunction createSVGTree(html, container) {\n // create the SVGNode\n const svgNode = container.ownerDocument.importNode(\n new window.DOMParser().parseFromString(\n `<svg xmlns=\"http://www.w3.org/2000/svg\">${html}</svg>`,\n 'application/xml',\n ).documentElement,\n true,\n );\n\n return svgNode\n}\n/* c8 ignore end */\n\n/**\n * Create the DOM that will be injected\n * @param {object} root - DOM node to find out the context where the fragment will be created\n * @param {string} html - DOM to create as string\n * @returns {HTMLDocumentFragment|HTMLElement} a new html fragment\n */\nfunction createDOMTree(root, html) {\n /* c8 ignore next */\n if ((0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isSvg)(root)) return createSVGTree(html, root)\n\n return createHTMLTree(html, root)\n}\n\n/**\n * Inject the DOM tree into a target node\n * @param {HTMLElement} el - target element\n * @param {DocumentFragment|SVGElement} dom - dom tree to inject\n * @returns {undefined}\n */\nfunction injectDOM(el, dom) {\n switch (true) {\n case (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isSvg)(el):\n (0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.moveChildren)(dom, el);\n break\n case (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isTemplate)(el):\n el.parentNode.replaceChild(dom, el);\n break\n default:\n el.appendChild(dom);\n }\n}\n\n/**\n * Create the Template DOM skeleton\n * @param {HTMLElement} el - root node where the DOM will be injected\n * @param {string|HTMLElement} html - HTML markup or HTMLElement that will be injected into the root node\n * @returns {?DocumentFragment} fragment that will be injected into the root node\n */\nfunction createTemplateDOM(el, html) {\n return html && (typeof html === 'string' ? createDOMTree(el, html) : html)\n}\n\n/**\n * Get the offset of the <template> tag\n * @param {HTMLElement} parentNode - template tag parent node\n * @param {HTMLElement} el - the template tag we want to render\n * @param {object} meta - meta properties needed to handle the <template> tags in loops\n * @returns {number} offset of the <template> tag calculated from its siblings DOM nodes\n */\nfunction getTemplateTagOffset(parentNode, el, meta) {\n const siblings = Array.from(parentNode.childNodes);\n\n return Math.max(siblings.indexOf(el), siblings.indexOf(meta.head) + 1, 0)\n}\n\n/**\n * Template Chunk model\n * @type {object}\n */\nconst TemplateChunk = {\n // Static props\n // bindings: null,\n // bindingsData: null,\n // html: null,\n // isTemplateTag: false,\n // fragment: null,\n // children: null,\n // dom: null,\n // el: null,\n\n /**\n * Create the template DOM structure that will be cloned on each mount\n * @param {HTMLElement} el - the root node\n * @returns {TemplateChunk} self\n */\n createDOM(el) {\n // make sure that the DOM gets created before cloning the template\n this.dom =\n this.dom ||\n createTemplateDOM(el, this.html) ||\n document.createDocumentFragment();\n\n return this\n },\n\n // API methods\n /**\n * Attach the template to a DOM node\n * @param {HTMLElement} el - target DOM node\n * @param {*} scope - template data\n * @param {*} parentScope - scope of the parent template tag\n * @param {object} meta - meta properties needed to handle the <template> tags in loops\n * @returns {TemplateChunk} self\n */\n mount(el, scope, parentScope, meta = {}) {\n if (!el) (0,_util_misc_js__WEBPACK_IMPORTED_MODULE_6__.panic)('Please provide DOM node to mount properly your template');\n\n if (this.el) this.unmount(scope);\n\n // <template> tags require a bit more work\n // the template fragment might be already created via meta outside of this call\n const { fragment, children, avoidDOMInjection } = meta;\n // <template> bindings of course can not have a root element\n // so we check the parent node to set the query selector bindings\n const { parentNode } = children ? children[0] : el;\n const isTemplateTag = (0,_util_checks_js__WEBPACK_IMPORTED_MODULE_5__.isTemplate)(el);\n const templateTagOffset = isTemplateTag\n ? getTemplateTagOffset(parentNode, el, meta)\n : null;\n\n // create the DOM if it wasn't created before\n this.createDOM(el);\n\n // create the DOM of this template cloning the original DOM structure stored in this instance\n // notice that if a documentFragment was passed (via meta) we will use it instead\n const cloneNode = fragment || this.dom.cloneNode(true);\n\n // store root node\n // notice that for template tags the root note will be the parent tag\n this.el = isTemplateTag ? parentNode : el;\n\n // create the children array only for the <template> fragments\n this.children = isTemplateTag\n ? children || Array.from(cloneNode.childNodes)\n : null;\n\n // inject the DOM into the el only if a fragment is available\n if (!avoidDOMInjection && cloneNode) injectDOM(el, cloneNode);\n\n // create the bindings\n this.bindings = this.bindingsData.map((binding) =>\n create$1(this.el, binding, templateTagOffset),\n );\n this.bindings.forEach((b) => b.mount(scope, parentScope));\n\n // store the template meta properties\n this.meta = meta;\n\n return this\n },\n\n /**\n * Update the template with fresh data\n * @param {*} scope - template data\n * @param {*} parentScope - scope of the parent template tag\n * @returns {TemplateChunk} self\n */\n update(scope, parentScope) {\n this.bindings.forEach((b) => b.update(scope, parentScope));\n\n return this\n },\n\n /**\n * Remove the template from the node where it was initially mounted\n * @param {*} scope - template data\n * @param {*} parentScope - scope of the parent template tag\n * @param {boolean|null} mustRemoveRoot - if true remove the root element,\n * if false or undefined clean the root tag content, if null don't touch the DOM\n * @returns {TemplateChunk} self\n */\n unmount(scope, parentScope, mustRemoveRoot = false) {\n const el = this.el;\n\n if (!el) {\n return this\n }\n\n this.bindings.forEach((b) => b.unmount(scope, parentScope, mustRemoveRoot));\n\n switch (true) {\n // pure components should handle the DOM unmount updates by themselves\n // for mustRemoveRoot === null don't touch the DOM\n case el[_util_constants_js__WEBPACK_IMPORTED_MODULE_1__.IS_PURE_SYMBOL] || mustRemoveRoot === null:\n break\n\n // if children are declared, clear them\n // applicable for <template> and <slot/> bindings\n case Array.isArray(this.children):\n ;(0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.clearChildren)(this.children);\n break\n\n // clean the node children only\n case !mustRemoveRoot:\n ;(0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.cleanNode)(el);\n break\n\n // remove the root node only if the mustRemoveRoot is truly\n case !!mustRemoveRoot:\n ;(0,_util_dom_js__WEBPACK_IMPORTED_MODULE_0__.removeChild)(el);\n break\n }\n\n this.el = null;\n\n return this\n },\n\n /**\n * Clone the template chunk\n * @returns {TemplateChunk} a clone of this object resetting the this.el property\n */\n clone() {\n return {\n ...this,\n meta: {},\n el: null,\n }\n },\n};\n\n/**\n * Create a template chunk wiring also the bindings\n * @param {string|HTMLElement} html - template string\n * @param {BindingData[]} bindings - bindings collection\n * @returns {TemplateChunk} a new TemplateChunk copy\n */\nfunction create(html, bindings = []) {\n return {\n ...TemplateChunk,\n html,\n bindingsData: bindings,\n }\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/dom-bindings/dist/dom-bindings.js?\n}")},"./node_modules/riot/esm/dependencies/@riotjs/util/binding-types.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EACH: () => (/* binding */ EACH),\n/* harmony export */ IF: () => (/* binding */ IF),\n/* harmony export */ SIMPLE: () => (/* binding */ SIMPLE),\n/* harmony export */ SLOT: () => (/* binding */ SLOT),\n/* harmony export */ TAG: () => (/* binding */ TAG),\n/* harmony export */ "default": () => (/* binding */ bindingTypes)\n/* harmony export */ });\n/* Riot WIP, @license MIT */\nconst EACH = 0;\nconst IF = 1;\nconst SIMPLE = 2;\nconst TAG = 3;\nconst SLOT = 4;\n\nconst bindingTypes = {\n EACH,\n IF,\n SIMPLE,\n TAG,\n SLOT,\n};\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/util/binding-types.js?\n}')},"./node_modules/riot/esm/dependencies/@riotjs/util/checks.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ checkType: () => (/* binding */ checkType),\n/* harmony export */ isBoolean: () => (/* binding */ isBoolean),\n/* harmony export */ isEventAttribute: () => (/* binding */ isEventAttribute),\n/* harmony export */ isFunction: () => (/* binding */ isFunction),\n/* harmony export */ isNil: () => (/* binding */ isNil),\n/* harmony export */ isNode: () => (/* binding */ isNode),\n/* harmony export */ isObject: () => (/* binding */ isObject),\n/* harmony export */ isSvg: () => (/* binding */ isSvg),\n/* harmony export */ isTemplate: () => (/* binding */ isTemplate)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"./node_modules/riot/esm/dependencies/@riotjs/util/constants.js\");\n/* Riot WIP, @license MIT */\n\n\n/**\n * Quick type checking\n * @param {*} element - anything\n * @param {string} type - type definition\n * @returns {boolean} true if the type corresponds\n */\nfunction checkType(element, type) {\n return typeof element === type\n}\n\n/**\n * Check if an element is part of an svg\n * @param {HTMLElement} el - element to check\n * @returns {boolean} true if we are in an svg context\n */\nfunction isSvg(el) {\n const owner = el.ownerSVGElement;\n\n return !!owner || owner === null\n}\n\n/**\n * Check if an element is a template tag\n * @param {HTMLElement} el - element to check\n * @returns {boolean} true if it's a <template>\n */\nfunction isTemplate(el) {\n return el.tagName.toLowerCase() === 'template'\n}\n\n/**\n * Check that will be passed if its argument is a function\n * @param {*} value - value to check\n * @returns {boolean} - true if the value is a function\n */\nfunction isFunction(value) {\n return checkType(value, 'function')\n}\n\n/**\n * Check if a value is a Boolean\n * @param {*} value - anything\n * @returns {boolean} true only for the value is a boolean\n */\nfunction isBoolean(value) {\n return checkType(value, 'boolean')\n}\n\n/**\n * Check if a value is an Object\n * @param {*} value - anything\n * @returns {boolean} true only for the value is an object\n */\nfunction isObject(value) {\n return !isNil(value) && value.constructor === Object\n}\n\n/**\n * Check if a value is null or undefined\n * @param {*} value - anything\n * @returns {boolean} true only for the 'undefined' and 'null' types\n */\nfunction isNil(value) {\n return value === null || value === undefined\n}\n\n/**\n * Detect node js environment\n * @returns {boolean} true if the runtime is node\n */\nfunction isNode() {\n return typeof globalThis.process !== 'undefined'\n}\n\n/**\n * Check if an attribute is a DOM handler\n * @param {string} attribute - attribute string\n * @returns {boolean} true only for dom listener attribute nodes\n */\nfunction isEventAttribute(attribute) {\n return _constants_js__WEBPACK_IMPORTED_MODULE_0__.EVENT_ATTRIBUTE_RE.test(attribute)\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/util/checks.js?\n}")},"./node_modules/riot/esm/dependencies/@riotjs/util/constants.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COMPONENTS_IMPLEMENTATION_MAP: () => (/* binding */ COMPONENTS_IMPLEMENTATION_MAP),\n/* harmony export */ DOM_COMPONENT_INSTANCE_PROPERTY: () => (/* binding */ DOM_COMPONENT_INSTANCE_PROPERTY),\n/* harmony export */ EVENT_ATTRIBUTE_RE: () => (/* binding */ EVENT_ATTRIBUTE_RE),\n/* harmony export */ IS_COMPONENT_UPDATING: () => (/* binding */ IS_COMPONENT_UPDATING),\n/* harmony export */ IS_DIRECTIVE: () => (/* binding */ IS_DIRECTIVE),\n/* harmony export */ IS_PURE_SYMBOL: () => (/* binding */ IS_PURE_SYMBOL),\n/* harmony export */ MOUNT_METHOD_KEY: () => (/* binding */ MOUNT_METHOD_KEY),\n/* harmony export */ ON_BEFORE_MOUNT_KEY: () => (/* binding */ ON_BEFORE_MOUNT_KEY),\n/* harmony export */ ON_BEFORE_UNMOUNT_KEY: () => (/* binding */ ON_BEFORE_UNMOUNT_KEY),\n/* harmony export */ ON_BEFORE_UPDATE_KEY: () => (/* binding */ ON_BEFORE_UPDATE_KEY),\n/* harmony export */ ON_MOUNTED_KEY: () => (/* binding */ ON_MOUNTED_KEY),\n/* harmony export */ ON_UNMOUNTED_KEY: () => (/* binding */ ON_UNMOUNTED_KEY),\n/* harmony export */ ON_UPDATED_KEY: () => (/* binding */ ON_UPDATED_KEY),\n/* harmony export */ PARENT_KEY_SYMBOL: () => (/* binding */ PARENT_KEY_SYMBOL),\n/* harmony export */ PLUGINS_SET: () => (/* binding */ PLUGINS_SET),\n/* harmony export */ PROPS_KEY: () => (/* binding */ PROPS_KEY),\n/* harmony export */ REF_ATTRIBUTE: () => (/* binding */ REF_ATTRIBUTE),\n/* harmony export */ ROOT_ATTRIBUTES_KEY_SYMBOL: () => (/* binding */ ROOT_ATTRIBUTES_KEY_SYMBOL),\n/* harmony export */ ROOT_KEY: () => (/* binding */ ROOT_KEY),\n/* harmony export */ SHOULD_UPDATE_KEY: () => (/* binding */ SHOULD_UPDATE_KEY),\n/* harmony export */ SLOTS_KEY: () => (/* binding */ SLOTS_KEY),\n/* harmony export */ STATE_KEY: () => (/* binding */ STATE_KEY),\n/* harmony export */ TEMPLATE_KEY_SYMBOL: () => (/* binding */ TEMPLATE_KEY_SYMBOL),\n/* harmony export */ UNMOUNT_METHOD_KEY: () => (/* binding */ UNMOUNT_METHOD_KEY),\n/* harmony export */ UPDATE_METHOD_KEY: () => (/* binding */ UPDATE_METHOD_KEY),\n/* harmony export */ VALUE_ATTRIBUTE: () => (/* binding */ VALUE_ATTRIBUTE)\n/* harmony export */ });\n/* Riot WIP, @license MIT */\n// Riot.js constants that can be used across more modules\n\nconst COMPONENTS_IMPLEMENTATION_MAP = new Map(),\n DOM_COMPONENT_INSTANCE_PROPERTY = Symbol('riot-component'),\n PLUGINS_SET = new Set(),\n IS_DIRECTIVE = 'is',\n VALUE_ATTRIBUTE = 'value',\n REF_ATTRIBUTE = 'ref',\n EVENT_ATTRIBUTE_RE = /^on/,\n MOUNT_METHOD_KEY = 'mount',\n UPDATE_METHOD_KEY = 'update',\n UNMOUNT_METHOD_KEY = 'unmount',\n SHOULD_UPDATE_KEY = 'shouldUpdate',\n ON_BEFORE_MOUNT_KEY = 'onBeforeMount',\n ON_MOUNTED_KEY = 'onMounted',\n ON_BEFORE_UPDATE_KEY = 'onBeforeUpdate',\n ON_UPDATED_KEY = 'onUpdated',\n ON_BEFORE_UNMOUNT_KEY = 'onBeforeUnmount',\n ON_UNMOUNTED_KEY = 'onUnmounted',\n PROPS_KEY = 'props',\n STATE_KEY = 'state',\n SLOTS_KEY = 'slots',\n ROOT_KEY = 'root',\n IS_PURE_SYMBOL = Symbol('pure'),\n IS_COMPONENT_UPDATING = Symbol('is_updating'),\n PARENT_KEY_SYMBOL = Symbol('parent'),\n TEMPLATE_KEY_SYMBOL = Symbol('template'),\n ROOT_ATTRIBUTES_KEY_SYMBOL = Symbol('root-attributes');\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/util/constants.js?\n}")},"./node_modules/riot/esm/dependencies/@riotjs/util/dom.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DOMattributesToObject: () => (/* binding */ DOMattributesToObject),\n/* harmony export */ cleanNode: () => (/* binding */ cleanNode),\n/* harmony export */ clearChildren: () => (/* binding */ clearChildren),\n/* harmony export */ insertBefore: () => (/* binding */ insertBefore),\n/* harmony export */ moveBefore: () => (/* binding */ moveBefore),\n/* harmony export */ moveChildren: () => (/* binding */ moveChildren),\n/* harmony export */ removeChild: () => (/* binding */ removeChild),\n/* harmony export */ replaceChild: () => (/* binding */ replaceChild)\n/* harmony export */ });\n/* harmony import */ var _strings_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./strings.js */ \"./node_modules/riot/esm/dependencies/@riotjs/util/strings.js\");\n/* Riot WIP, @license MIT */\n\n\n/**\n * Get all the element attributes as object\n * @param {HTMLElement} element - DOM node we want to parse\n * @returns {object} all the attributes found as a key value pairs\n */\nfunction DOMattributesToObject(element) {\n return Array.from(element.attributes).reduce((acc, attribute) => {\n acc[(0,_strings_js__WEBPACK_IMPORTED_MODULE_0__.dashToCamelCase)(attribute.name)] = attribute.value;\n return acc\n }, {})\n}\n\n/**\n * Move all the child nodes from a source tag to another\n * @param {HTMLElement} source - source node\n * @param {HTMLElement} target - target node\n * @returns {undefined} it's a void method ¯\\_(ツ)_/¯\n */\n\n// Ignore this helper because it's needed only for svg tags\nfunction moveChildren(source, target) {\n // eslint-disable-next-line fp/no-loops\n while (source.firstChild) target.appendChild(source.firstChild);\n}\n\n/**\n * Remove the child nodes from any DOM node\n * @param {HTMLElement} node - target node\n * @returns {undefined}\n */\nfunction cleanNode(node) {\n // eslint-disable-next-line fp/no-loops\n while (node.firstChild) node.removeChild(node.firstChild);\n}\n\n/**\n * Clear multiple children in a node\n * @param {HTMLElement[]} children - direct children nodes\n * @returns {undefined}\n */\nfunction clearChildren(children) {\n // eslint-disable-next-line fp/no-loops,fp/no-let\n for (let i = 0; i < children.length; i++) removeChild(children[i]);\n}\n\n/**\n * Remove a node\n * @param {HTMLElement}node - node to remove\n * @returns {undefined}\n */\nconst removeChild = (node) => node.remove();\n\n/**\n * Insert before a node\n * @param {HTMLElement} newNode - node to insert\n * @param {HTMLElement} refNode - ref child\n * @returns {undefined}\n */\nconst insertBefore = (newNode, refNode) =>\n refNode?.parentNode?.insertBefore(newNode, refNode);\n\n/**\n * Move a node into its new position. Use the moveBefore method if it's available\n * @param {HTMLElement} existingNode - node to move\n * @param {HTMLElement} refNode - ref child\n * @returns {undefined}\n */\nconst moveBefore = ((hasMoveBefore) => (existingNode, refNode) =>\n hasMoveBefore\n ? refNode?.parentNode?.moveBefore(existingNode, refNode)\n : insertBefore(existingNode, refNode))(\n // Rely on the new moveBefore method to move nodes if it's available https://developer.mozilla.org/en-US/docs/Web/API/Element/moveBefore\n // cache the value of the check into a boolean variable\n typeof Element !== 'undefined' && Element.prototype.moveBefore,\n);\n\n/**\n * Replace a node\n * @param {HTMLElement} newNode - new node to add to the DOM\n * @param {HTMLElement} replaced - node to replace\n * @returns {undefined}\n */\nconst replaceChild = (newNode, replaced) =>\n replaced?.parentNode?.replaceChild(newNode, replaced);\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/util/dom.js?\n}")},"./node_modules/riot/esm/dependencies/@riotjs/util/expression-types.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ATTRIBUTE: () => (/* binding */ ATTRIBUTE),\n/* harmony export */ EVENT: () => (/* binding */ EVENT),\n/* harmony export */ REF: () => (/* binding */ REF),\n/* harmony export */ TEXT: () => (/* binding */ TEXT),\n/* harmony export */ VALUE: () => (/* binding */ VALUE),\n/* harmony export */ "default": () => (/* binding */ expressionTypes)\n/* harmony export */ });\n/* Riot WIP, @license MIT */\nconst ATTRIBUTE = 0;\nconst EVENT = 1;\nconst TEXT = 2;\nconst VALUE = 3;\nconst REF = 4;\n\nconst expressionTypes = {\n ATTRIBUTE,\n EVENT,\n TEXT,\n VALUE,\n REF,\n};\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/util/expression-types.js?\n}')},"./node_modules/riot/esm/dependencies/@riotjs/util/functions.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ autobindMethods: () => (/* binding */ autobindMethods),\n/* harmony export */ callOrAssign: () => (/* binding */ callOrAssign),\n/* harmony export */ noop: () => (/* binding */ noop)\n/* harmony export */ });\n/* harmony import */ var _checks_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./checks.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/checks.js");\n/* Riot WIP, @license MIT */\n\n\n// does simply nothing\nfunction noop() {\n return this\n}\n\n/**\n * Autobind the methods of a source object to itself\n * @param {object} source - probably a riot tag instance\n * @param {Array<string>} methods - list of the methods to autobind\n * @returns {object} the original object received\n */\nfunction autobindMethods(source, methods) {\n methods.forEach((method) => {\n source[method] = source[method].bind(source);\n });\n\n return source\n}\n\n/**\n * Call the first argument received only if it\'s a function otherwise return it as it is\n * @param {*} source - anything\n * @returns {*} anything\n */\nfunction callOrAssign(source) {\n return (0,_checks_js__WEBPACK_IMPORTED_MODULE_0__.isFunction)(source)\n ? source.prototype && source.prototype.constructor\n ? new source()\n : source()\n : source\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/util/functions.js?\n}')},"./node_modules/riot/esm/dependencies/@riotjs/util/misc.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ generatePropsFromAttributes: () => (/* binding */ generatePropsFromAttributes),\n/* harmony export */ memoize: () => (/* binding */ memoize),\n/* harmony export */ panic: () => (/* binding */ panic)\n/* harmony export */ });\n/* harmony import */ var _expression_types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./expression-types.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/expression-types.js");\n/* harmony import */ var _strings_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./strings.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/strings.js");\n/* Riot WIP, @license MIT */\n\n\n\n/**\n * Throw an error with a descriptive message\n * @param { string } message - error message\n * @param { string } cause - optional error cause object\n * @returns { undefined } hoppla... at this point the program should stop working\n */\nfunction panic(message, cause) {\n throw new Error(message, { cause })\n}\n/**\n * Returns the memoized (cached) function.\n * // borrowed from https://www.30secondsofcode.org/js/s/memoize\n * @param {Function} fn - function to memoize\n * @returns {Function} memoize function\n */\nfunction memoize(fn) {\n const cache = new Map();\n const cached = (val) => {\n return cache.has(val)\n ? cache.get(val)\n : cache.set(val, fn.call(this, val)) && cache.get(val)\n };\n cached.cache = cache;\n return cached\n}\n\n/**\n * Generate key-value pairs from a list of attributes\n * @param {Array} attributes - list of attributes generated by the riot compiler, each containing type, name, and evaluate function\n * @param {object} scope - the scope in which the attribute values will be evaluated\n * @returns {object} An object containing key-value pairs representing the computed attribute values\n */\nfunction generatePropsFromAttributes(attributes, scope) {\n return attributes.reduce((acc, { type, name, evaluate }) => {\n const value = evaluate(scope);\n\n switch (true) {\n // spread attribute\n case !name && type === _expression_types_js__WEBPACK_IMPORTED_MODULE_0__.ATTRIBUTE:\n return {\n ...acc,\n ...value,\n }\n // ref attribute\n case type === _expression_types_js__WEBPACK_IMPORTED_MODULE_0__.REF:\n acc.ref = value;\n break\n // value attribute\n case type === _expression_types_js__WEBPACK_IMPORTED_MODULE_0__.VALUE:\n acc.value = value;\n break\n // normal attributes\n default:\n acc[(0,_strings_js__WEBPACK_IMPORTED_MODULE_1__.dashToCamelCase)(name)] = value;\n }\n\n return acc\n }, {})\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/util/misc.js?\n}')},"./node_modules/riot/esm/dependencies/@riotjs/util/objects.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ defineDefaults: () => (/* binding */ defineDefaults),\n/* harmony export */ defineProperties: () => (/* binding */ defineProperties),\n/* harmony export */ defineProperty: () => (/* binding */ defineProperty)\n/* harmony export */ });\n/* Riot WIP, @license MIT */\n/**\n * Helper function to set an immutable property\n * @param {object} source - object where the new property will be set\n * @param {string} key - object key where the new property will be stored\n * @param {*} value - value of the new property\n * @param {object} options - set the property overriding the default options\n * @returns {object} - the original object modified\n */\nfunction defineProperty(source, key, value, options = {}) {\n Object.defineProperty(source, key, {\n value,\n enumerable: false,\n writable: false,\n configurable: true,\n ...options,\n });\n\n return source\n}\n\n/**\n * Define multiple properties on a target object\n * @param {object} source - object where the new properties will be set\n * @param {object} properties - object containing as key pair the key + value properties\n * @param {object} options - set the property overriding the default options\n * @returns {object} the original object modified\n */\nfunction defineProperties(source, properties, options) {\n Object.entries(properties).forEach(([key, value]) => {\n defineProperty(source, key, value, options);\n });\n\n return source\n}\n\n/**\n * Define default properties if they don't exist on the source object\n * @param {object} source - object that will receive the default properties\n * @param {object} defaults - object containing additional optional keys\n * @returns {object} the original object received enhanced\n */\nfunction defineDefaults(source, defaults) {\n Object.entries(defaults).forEach(([key, value]) => {\n if (!source[key]) source[key] = value;\n });\n\n return source\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/util/objects.js?\n}")},"./node_modules/riot/esm/dependencies/@riotjs/util/strings.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ camelToDashCase: () => (/* binding */ camelToDashCase),\n/* harmony export */ dashToCamelCase: () => (/* binding */ dashToCamelCase)\n/* harmony export */ });\n/* Riot WIP, @license MIT */\n/**\n * Convert a string from camel case to dash-case\n * @param {string} string - probably a component tag name\n * @returns {string} component name normalized\n */\nfunction camelToDashCase(string) {\n return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n}\n\n/**\n * Convert a string containing dashes to camel case\n * @param {string} string - input string\n * @returns {string} my-string -> myString\n */\nfunction dashToCamelCase(string) {\n return string.replace(/-(\\w)/g, (_, c) => c.toUpperCase())\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/@riotjs/util/strings.js?\n}")},"./node_modules/riot/esm/dependencies/bianco.attr/index.next.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ get: () => (/* binding */ get),\n/* harmony export */ set: () => (/* binding */ set)\n/* harmony export */ });\n/* harmony import */ var _bianco_dom_to_array_index_next_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../bianco.dom-to-array/index.next.js */ \"./node_modules/riot/esm/dependencies/bianco.dom-to-array/index.next.js\");\n/* Riot WIP, @license MIT */\n\n\n/**\n * Normalize the return values, in case of a single value we avoid to return an array\n * @param { Array } values - list of values we want to return\n * @returns { Array|string|boolean } either the whole list of values or the single one found\n * @private\n */\nconst normalize = values => values.length === 1 ? values[0] : values;\n\n/**\n * Parse all the nodes received to get/remove/check their attributes\n * @param { HTMLElement|NodeList|Array } els - DOM node/s to parse\n * @param { string|Array } name - name or list of attributes\n * @param { string } method - method that will be used to parse the attributes\n * @returns { Array|string } result of the parsing in a list or a single value\n * @private\n */\nfunction parseNodes(els, name, method) {\n const names = typeof name === 'string' ? [name] : name;\n return normalize((0,_bianco_dom_to_array_index_next_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(els).map(el => {\n return normalize(names.map(n => el[method](n)))\n }))\n}\n\n/**\n * Set any attribute on a single or a list of DOM nodes\n * @param { HTMLElement|NodeList|Array } els - DOM node/s to parse\n * @param { string|Object } name - either the name of the attribute to set\n * or a list of properties as object key - value\n * @param { string } value - the new value of the attribute (optional)\n * @returns { HTMLElement|NodeList|Array } the original array of elements passed to this function\n *\n * @example\n *\n * import { set } from 'bianco.attr'\n *\n * const img = document.createElement('img')\n *\n * set(img, 'width', 100)\n *\n * // or also\n * set(img, {\n * width: 300,\n * height: 300\n * })\n *\n */\nfunction set(els, name, value) {\n const attrs = typeof name === 'object' ? name : { [name]: value };\n const props = Object.keys(attrs);\n\n (0,_bianco_dom_to_array_index_next_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(els).forEach(el => {\n props.forEach(prop => el.setAttribute(prop, attrs[prop]));\n });\n return els\n}\n\n/**\n * Get any attribute from a single or a list of DOM nodes\n * @param { HTMLElement|NodeList|Array } els - DOM node/s to parse\n * @param { string|Array } name - name or list of attributes to get\n * @returns { Array|string } list of the attributes found\n *\n * @example\n *\n * import { get } from 'bianco.attr'\n *\n * const img = document.createElement('img')\n *\n * get(img, 'width') // => '200'\n *\n * // or also\n * get(img, ['width', 'height']) // => ['200', '300']\n *\n * // or also\n * get([img1, img2], ['width', 'height']) // => [['200', '300'], ['500', '200']]\n */\nfunction get(els, name) {\n return parseNodes(els, name, 'getAttribute')\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/bianco.attr/index.next.js?\n}")},"./node_modules/riot/esm/dependencies/bianco.dom-to-array/index.next.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ domToArray)\n/* harmony export */ });\n/* Riot WIP, @license MIT */\n/**\n * Converts any DOM node/s to a loopable array\n * @param { HTMLElement|NodeList } els - single html element or a node list\n * @returns { Array } always a loopable object\n */\nfunction domToArray(els) {\n // can this object be already looped?\n if (!Array.isArray(els)) {\n // is it a node list?\n if (\n /^\\[object (HTMLCollection|NodeList|Object)\\]$/\n .test(Object.prototype.toString.call(els))\n && typeof els.length === \'number\'\n )\n return Array.from(els)\n else\n // if it\'s a single node\n // it will be returned as "array" with one single entry\n return [els]\n }\n // this object could be looped out of the box\n return els\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/bianco.dom-to-array/index.next.js?\n}')},"./node_modules/riot/esm/dependencies/bianco.query/index.next.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ $)\n/* harmony export */ });\n/* harmony import */ var _bianco_dom_to_array_index_next_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../bianco.dom-to-array/index.next.js */ "./node_modules/riot/esm/dependencies/bianco.dom-to-array/index.next.js");\n/* Riot WIP, @license MIT */\n\n\n/**\n * Simple helper to find DOM nodes returning them as array like loopable object\n * @param { string|DOMNodeList } selector - either the query or the DOM nodes to arraify\n * @param { HTMLElement } scope - context defining where the query will search for the DOM nodes\n * @returns { Array } DOM nodes found as array\n */\nfunction $(selector, scope) {\n return (0,_bianco_dom_to_array_index_next_js__WEBPACK_IMPORTED_MODULE_0__["default"])(typeof selector === \'string\' ?\n (scope || document).querySelectorAll(selector) :\n selector\n )\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/bianco.query/index.next.js?\n}')},"./node_modules/riot/esm/dependencies/curri/index.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ curry)\n/* harmony export */ });\n/* Riot WIP, @license MIT */\n/**\n * Function to curry any javascript method\n * @param {Function} fn - the target function we want to curry\n * @param {...[args]} acc - initial arguments\n * @returns {Function|*} it will return a function until the target function\n * will receive all of its arguments\n */\nfunction curry(fn, ...acc) {\n return (...args) => {\n args = [...acc, ...args];\n\n return args.length < fn.length ?\n curry(fn, ...args) :\n fn(...args)\n }\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/dependencies/curri/index.js?\n}')},"./node_modules/riot/esm/utils/dom.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getName: () => (/* binding */ getName)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/constants.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/constants.js");\n/* harmony import */ var _dependencies_bianco_attr_index_next_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/bianco.attr/index.next.js */ "./node_modules/riot/esm/dependencies/bianco.attr/index.next.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n/**\n * Get the tag name of any DOM node\n * @param {HTMLElement} element - DOM node we want to inspect\n * @returns {string} name to identify this dom node in riot\n */\nfunction getName(element) {\n return (0,_dependencies_bianco_attr_index_next_js__WEBPACK_IMPORTED_MODULE_1__.get)(element, _dependencies_riotjs_util_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_DIRECTIVE) || element.tagName.toLowerCase()\n}\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/utils/dom.js?\n}')},"./node_modules/riot/esm/utils/get-root-computed-attribute-names.js"(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getRootComputedAttributeNames: () => (/* binding */ getRootComputedAttributeNames)\n/* harmony export */ });\n/* harmony import */ var _dependencies_riotjs_util_expression_types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dependencies/@riotjs/util/expression-types.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/expression-types.js");\n/* harmony import */ var _dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dependencies/@riotjs/util/misc.js */ "./node_modules/riot/esm/dependencies/@riotjs/util/misc.js");\n/* Riot v10.1.4, @license MIT */\n\n\n\n\n/**\n * Get the computed attribute names from the template instance\n * Since these attributes will not change we memoize the result of this computation\n * @param {TemplateChunk} template - template instance\n * @returns {[]} list of attribute names that will be computed by the template expressions\n */\nconst getRootComputedAttributeNames = (0,_dependencies_riotjs_util_misc_js__WEBPACK_IMPORTED_MODULE_1__.memoize)((template) => {\n const firstBinding = template?.bindingsData?.[0];\n\n // if the first binding has the selector attribute it means that it doesn\'t belong to the root node\n if (firstBinding?.selector) return []\n\n return (\n firstBinding?.expressions?.reduce(\n (acc, { name, type }) =>\n type === _dependencies_riotjs_util_expression_types_js__WEBPACK_IMPORTED_MODULE_0__["default"].ATTRIBUTE ? acc.concat([name]) : acc,\n [],\n ) ?? []\n )\n});\n\n\n\n\n//# sourceURL=webpack://@tiny-components/validator/./node_modules/riot/esm/utils/get-root-computed-attribute-names.js?\n}')}},__webpack_module_cache__={};function __webpack_require__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};if(!(e in __webpack_modules__)){delete __webpack_module_cache__[e];var o=new Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}return __webpack_modules__[e].call(t.exports,t,t.exports,__webpack_require__),t.loaded=!0,t.exports}__webpack_require__.amdD=function(){throw new Error("define cannot be used indirect")},__webpack_require__.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(n,{a:n}),n},__webpack_require__.d=(e,n)=>{for(var t in n)__webpack_require__.o(n,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},__webpack_require__.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var __webpack_exports__=__webpack_require__("./src/example.js")})();