From cb9349a6cf69ba6210a3f58510227f931dcde996 Mon Sep 17 00:00:00 2001 From: Justin Schroeder Date: Thu, 14 Nov 2019 01:00:56 -0500 Subject: [PATCH] Adds new date format capability and associated tests --- dist/formulate.esm.js | 273 +++++++++++++++++++++++--- dist/formulate.min.js | 273 +++++++++++++++++++++++--- dist/formulate.umd.js | 273 +++++++++++++++++++++++--- dist/snow.css | 39 ++++ dist/snow.min.css | 4 +- src/Formulate.js | 4 + src/inputs/FormulateInputBox.vue | 2 +- src/inputs/FormulateInputSelect.vue | 3 +- src/inputs/FormulateInputSlider.vue | 22 +++ src/inputs/FormulateInputText.vue | 3 +- src/inputs/FormulateInputTextArea.vue | 1 + src/libs/library.js | 10 +- src/libs/rules.js | 14 +- src/libs/utils.js | 27 +++ src/locales/en.js | 14 +- test/Formulate.test.js | 1 + test/FormulateInputSlider.test.js | 18 ++ test/FormulateInputText.test.js | 5 - test/rules.test.js | 5 + test/utils.test.js | 43 +++- themes/snow/_inputs.scss | 51 +++++ 21 files changed, 981 insertions(+), 104 deletions(-) create mode 100644 src/inputs/FormulateInputSlider.vue create mode 100644 test/FormulateInputSlider.test.js diff --git a/dist/formulate.esm.js b/dist/formulate.esm.js index a31749e..51d2372 100644 --- a/dist/formulate.esm.js +++ b/dist/formulate.esm.js @@ -36,10 +36,6 @@ var library = { classification: 'text', component: 'FormulateInputText' }, - range: { - classification: 'text', - component: 'FormulateInputText' - }, search: { classification: 'text', component: 'FormulateInputText' @@ -65,6 +61,12 @@ var library = { component: 'FormulateInputText' }, + // === SLIDER INPUTS + range: { + classification: 'slider', + component: 'FormulateInputSlider' + }, + // === MULTI LINE TEXT INPUTS textarea: { classification: 'textarea', @@ -218,6 +220,33 @@ function parseRule (rule, rules) { return false } +/** + * Escape a string for use in regular expressions. + * @param {string} string + */ +function escapeRegExp (string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string +} + +/** + * Given a string format (date) return a regex to match against. + * @param {string} format + */ +function regexForFormat (format) { + var escaped = "^" + (escapeRegExp(format)) + "$"; + var formats = { + MM: '(0[1-9]|1[012])', + M: '([1-9]|1[012])', + DD: '([012][1-9]|3[01])', + D: '([012]?[1-9]|3[01])', + YYYY: '\\d{4}', + YY: '\\d{2}' + }; + return new RegExp(Object.keys(formats).reduce(function (regex, format) { + return regex.replace(format, formats[format]) + }, escaped)) +} + /** * Library of rules */ @@ -304,10 +333,18 @@ var rules = { }, /** - * Rule: ensures the value is a date according to Date.parse() + * Rule: ensures the value is a date according to Date.parse(), or a format + * regex. */ - date: function (value) { - return Promise.resolve(!isNaN(Date.parse(value))) + date: function (value, format) { + if ( format === void 0 ) format = false; + + return Promise.resolve((function () { + if (format && typeof format === 'string') { + return regexForFormat(format).test(value) + } + return !isNaN(Date.parse(value)) + })()) }, /** @@ -542,7 +579,11 @@ var en = { */ date: function (ref) { var name = ref.name; + var args = ref.args; + if (Array.isArray(args) && args.length) { + return ((sentence(name)) + " is not a valid, please use the format " + (args[0])) + } return ((sentence(name)) + " is not a valid date.") }, @@ -562,7 +603,10 @@ var en = { var name = ref.name; var value = ref.value; - return (value + " is not a valid email address.") + if (!value) { + return 'Please enter a valid email address.' + } + return ("“" + value + "” is not a valid email address.") }, /** @@ -572,10 +616,10 @@ var en = { var name = ref.name; var value = ref.value; - if (typeof value === 'string') { + if (typeof value === 'string' && value) { return ("“" + (sentence(value)) + "” is not an allowed " + name + ".") } - return ((sentence(name)) + " is not an allowed value.") + return ("This is not an allowed " + name + ".") }, /** @@ -1620,7 +1664,8 @@ var __vue_render__$4 = function() { return _c( "div", { - staticClass: "formulate-input-element formulate-input-element--box", + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, attrs: { "data-type": _vm.context.type } }, [ @@ -1795,7 +1840,9 @@ var __vue_render__$5 = function() { return _c( "div", { - staticClass: "formulate-input-element formulate-input-element--textarea" + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, + attrs: { "data-type": _vm.context.type } }, [ _vm.type === "checkbox" @@ -1967,7 +2014,11 @@ var __vue_render__$6 = function() { var _c = _vm._self._c || _h; return _c( "div", - { staticClass: "formulate-input-element formulate-input-element--select" }, + { + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, + attrs: { "data-type": _vm.context.type } + }, [ _c( "select", @@ -2104,7 +2155,7 @@ __vue_render__$6._withStripped = true; // var script$7 = { - name: 'FormulateInputTextArea', + name: 'FormulateInputText', mixins: [FormulateInputMixin] }; @@ -2119,7 +2170,172 @@ var __vue_render__$7 = function() { return _c( "div", { - staticClass: "formulate-input-element formulate-input-element--textarea" + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, + attrs: { "data-type": _vm.context.type } + }, + [ + _vm.type === "checkbox" + ? _c( + "input", + _vm._b( + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.context.model, + expression: "context.model" + } + ], + attrs: { type: "checkbox" }, + domProps: { + checked: Array.isArray(_vm.context.model) + ? _vm._i(_vm.context.model, null) > -1 + : _vm.context.model + }, + on: { + blur: _vm.context.blurHandler, + change: function($event) { + var $$a = _vm.context.model, + $$el = $event.target, + $$c = $$el.checked ? true : false; + if (Array.isArray($$a)) { + var $$v = null, + $$i = _vm._i($$a, $$v); + if ($$el.checked) { + $$i < 0 && + _vm.$set(_vm.context, "model", $$a.concat([$$v])); + } else { + $$i > -1 && + _vm.$set( + _vm.context, + "model", + $$a.slice(0, $$i).concat($$a.slice($$i + 1)) + ); + } + } else { + _vm.$set(_vm.context, "model", $$c); + } + } + } + }, + "input", + _vm.attributes, + false + ) + ) + : _vm.type === "radio" + ? _c( + "input", + _vm._b( + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.context.model, + expression: "context.model" + } + ], + attrs: { type: "radio" }, + domProps: { checked: _vm._q(_vm.context.model, null) }, + on: { + blur: _vm.context.blurHandler, + change: function($event) { + return _vm.$set(_vm.context, "model", null) + } + } + }, + "input", + _vm.attributes, + false + ) + ) + : _c( + "input", + _vm._b( + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.context.model, + expression: "context.model" + } + ], + attrs: { type: _vm.type }, + domProps: { value: _vm.context.model }, + on: { + blur: _vm.context.blurHandler, + input: function($event) { + if ($event.target.composing) { + return + } + _vm.$set(_vm.context, "model", $event.target.value); + } + } + }, + "input", + _vm.attributes, + false + ) + ) + ] + ) +}; +var __vue_staticRenderFns__$7 = []; +__vue_render__$7._withStripped = true; + + /* style */ + var __vue_inject_styles__$7 = undefined; + /* scoped */ + var __vue_scope_id__$7 = undefined; + /* module identifier */ + var __vue_module_identifier__$7 = undefined; + /* functional template */ + var __vue_is_functional_template__$7 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + var FormulateInputSlider = normalizeComponent( + { render: __vue_render__$7, staticRenderFns: __vue_staticRenderFns__$7 }, + __vue_inject_styles__$7, + __vue_script__$7, + __vue_scope_id__$7, + __vue_is_functional_template__$7, + __vue_module_identifier__$7, + false, + undefined, + undefined, + undefined + ); + +// + +var script$8 = { + name: 'FormulateInputTextArea', + mixins: [FormulateInputMixin] +}; + +/* script */ +var __vue_script__$8 = script$8; + +/* template */ +var __vue_render__$8 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + { + staticClass: "formulate-input-element formulate-input-element--textarea", + attrs: { "data-type": "textarea" } }, [ _c( @@ -2153,17 +2369,17 @@ var __vue_render__$7 = function() { ] ) }; -var __vue_staticRenderFns__$7 = []; -__vue_render__$7._withStripped = true; +var __vue_staticRenderFns__$8 = []; +__vue_render__$8._withStripped = true; /* style */ - var __vue_inject_styles__$7 = undefined; + var __vue_inject_styles__$8 = undefined; /* scoped */ - var __vue_scope_id__$7 = undefined; + var __vue_scope_id__$8 = undefined; /* module identifier */ - var __vue_module_identifier__$7 = undefined; + var __vue_module_identifier__$8 = undefined; /* functional template */ - var __vue_is_functional_template__$7 = false; + var __vue_is_functional_template__$8 = false; /* style inject */ /* style inject SSR */ @@ -2173,12 +2389,12 @@ __vue_render__$7._withStripped = true; var FormulateInputTextArea = normalizeComponent( - { render: __vue_render__$7, staticRenderFns: __vue_staticRenderFns__$7 }, - __vue_inject_styles__$7, - __vue_script__$7, - __vue_scope_id__$7, - __vue_is_functional_template__$7, - __vue_module_identifier__$7, + { render: __vue_render__$8, staticRenderFns: __vue_staticRenderFns__$8 }, + __vue_inject_styles__$8, + __vue_script__$8, + __vue_scope_id__$8, + __vue_is_functional_template__$8, + __vue_module_identifier__$8, false, undefined, undefined, @@ -2198,6 +2414,7 @@ var Formulate = function Formulate () { FormulateInputText: FormulateInputText, FormulateInputGroup: FormulateInputGroup, FormulateInputSelect: FormulateInputSelect, + FormulateInputSlider: FormulateInputSlider, FormulateInputTextArea: FormulateInputTextArea }, library: library, @@ -2282,6 +2499,8 @@ Formulate.prototype.validationMessage = function validationMessage (rule, valida var generators = this.options.locales[this.options.locale]; if (generators.hasOwnProperty(rule)) { return generators[rule](validationContext) + } else if (rule[0] === '_' && generators.hasOwnProperty(rule.substr(1))) { + return generators[rule.substr(1)](validationContext) } if (generators.hasOwnProperty('default')) { return generators.default(validationContext) diff --git a/dist/formulate.min.js b/dist/formulate.min.js index a99741d..d32166f 100644 --- a/dist/formulate.min.js +++ b/dist/formulate.min.js @@ -39,10 +39,6 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { classification: 'text', component: 'FormulateInputText' }, - range: { - classification: 'text', - component: 'FormulateInputText' - }, search: { classification: 'text', component: 'FormulateInputText' @@ -68,6 +64,12 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { component: 'FormulateInputText' }, + // === SLIDER INPUTS + range: { + classification: 'slider', + component: 'FormulateInputSlider' + }, + // === MULTI LINE TEXT INPUTS textarea: { classification: 'textarea', @@ -221,6 +223,33 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { return false } + /** + * Escape a string for use in regular expressions. + * @param {string} string + */ + function escapeRegExp (string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string + } + + /** + * Given a string format (date) return a regex to match against. + * @param {string} format + */ + function regexForFormat (format) { + var escaped = "^" + (escapeRegExp(format)) + "$"; + var formats = { + MM: '(0[1-9]|1[012])', + M: '([1-9]|1[012])', + DD: '([012][1-9]|3[01])', + D: '([012]?[1-9]|3[01])', + YYYY: '\\d{4}', + YY: '\\d{2}' + }; + return new RegExp(Object.keys(formats).reduce(function (regex, format) { + return regex.replace(format, formats[format]) + }, escaped)) + } + /** * Library of rules */ @@ -307,10 +336,18 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { }, /** - * Rule: ensures the value is a date according to Date.parse() + * Rule: ensures the value is a date according to Date.parse(), or a format + * regex. */ - date: function (value) { - return Promise.resolve(!isNaN(Date.parse(value))) + date: function (value, format) { + if ( format === void 0 ) format = false; + + return Promise.resolve((function () { + if (format && typeof format === 'string') { + return regexForFormat(format).test(value) + } + return !isNaN(Date.parse(value)) + })()) }, /** @@ -545,7 +582,11 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { */ date: function (ref) { var name = ref.name; + var args = ref.args; + if (Array.isArray(args) && args.length) { + return ((sentence(name)) + " is not a valid, please use the format " + (args[0])) + } return ((sentence(name)) + " is not a valid date.") }, @@ -565,7 +606,10 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { var name = ref.name; var value = ref.value; - return (value + " is not a valid email address.") + if (!value) { + return 'Please enter a valid email address.' + } + return ("“" + value + "” is not a valid email address.") }, /** @@ -575,10 +619,10 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { var name = ref.name; var value = ref.value; - if (typeof value === 'string') { + if (typeof value === 'string' && value) { return ("“" + (sentence(value)) + "” is not an allowed " + name + ".") } - return ((sentence(name)) + " is not an allowed value.") + return ("This is not an allowed " + name + ".") }, /** @@ -1623,7 +1667,8 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { return _c( "div", { - staticClass: "formulate-input-element formulate-input-element--box", + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, attrs: { "data-type": _vm.context.type } }, [ @@ -1798,7 +1843,9 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { return _c( "div", { - staticClass: "formulate-input-element formulate-input-element--textarea" + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, + attrs: { "data-type": _vm.context.type } }, [ _vm.type === "checkbox" @@ -1970,7 +2017,11 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { var _c = _vm._self._c || _h; return _c( "div", - { staticClass: "formulate-input-element formulate-input-element--select" }, + { + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, + attrs: { "data-type": _vm.context.type } + }, [ _c( "select", @@ -2107,7 +2158,7 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { // var script$7 = { - name: 'FormulateInputTextArea', + name: 'FormulateInputText', mixins: [FormulateInputMixin] }; @@ -2122,7 +2173,172 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { return _c( "div", { - staticClass: "formulate-input-element formulate-input-element--textarea" + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, + attrs: { "data-type": _vm.context.type } + }, + [ + _vm.type === "checkbox" + ? _c( + "input", + _vm._b( + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.context.model, + expression: "context.model" + } + ], + attrs: { type: "checkbox" }, + domProps: { + checked: Array.isArray(_vm.context.model) + ? _vm._i(_vm.context.model, null) > -1 + : _vm.context.model + }, + on: { + blur: _vm.context.blurHandler, + change: function($event) { + var $$a = _vm.context.model, + $$el = $event.target, + $$c = $$el.checked ? true : false; + if (Array.isArray($$a)) { + var $$v = null, + $$i = _vm._i($$a, $$v); + if ($$el.checked) { + $$i < 0 && + _vm.$set(_vm.context, "model", $$a.concat([$$v])); + } else { + $$i > -1 && + _vm.$set( + _vm.context, + "model", + $$a.slice(0, $$i).concat($$a.slice($$i + 1)) + ); + } + } else { + _vm.$set(_vm.context, "model", $$c); + } + } + } + }, + "input", + _vm.attributes, + false + ) + ) + : _vm.type === "radio" + ? _c( + "input", + _vm._b( + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.context.model, + expression: "context.model" + } + ], + attrs: { type: "radio" }, + domProps: { checked: _vm._q(_vm.context.model, null) }, + on: { + blur: _vm.context.blurHandler, + change: function($event) { + return _vm.$set(_vm.context, "model", null) + } + } + }, + "input", + _vm.attributes, + false + ) + ) + : _c( + "input", + _vm._b( + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.context.model, + expression: "context.model" + } + ], + attrs: { type: _vm.type }, + domProps: { value: _vm.context.model }, + on: { + blur: _vm.context.blurHandler, + input: function($event) { + if ($event.target.composing) { + return + } + _vm.$set(_vm.context, "model", $event.target.value); + } + } + }, + "input", + _vm.attributes, + false + ) + ) + ] + ) + }; + var __vue_staticRenderFns__$7 = []; + __vue_render__$7._withStripped = true; + + /* style */ + var __vue_inject_styles__$7 = undefined; + /* scoped */ + var __vue_scope_id__$7 = undefined; + /* module identifier */ + var __vue_module_identifier__$7 = undefined; + /* functional template */ + var __vue_is_functional_template__$7 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + var FormulateInputSlider = normalizeComponent( + { render: __vue_render__$7, staticRenderFns: __vue_staticRenderFns__$7 }, + __vue_inject_styles__$7, + __vue_script__$7, + __vue_scope_id__$7, + __vue_is_functional_template__$7, + __vue_module_identifier__$7, + false, + undefined, + undefined, + undefined + ); + + // + + var script$8 = { + name: 'FormulateInputTextArea', + mixins: [FormulateInputMixin] + }; + + /* script */ + var __vue_script__$8 = script$8; + + /* template */ + var __vue_render__$8 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + { + staticClass: "formulate-input-element formulate-input-element--textarea", + attrs: { "data-type": "textarea" } }, [ _c( @@ -2156,17 +2372,17 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { ] ) }; - var __vue_staticRenderFns__$7 = []; - __vue_render__$7._withStripped = true; + var __vue_staticRenderFns__$8 = []; + __vue_render__$8._withStripped = true; /* style */ - var __vue_inject_styles__$7 = undefined; + var __vue_inject_styles__$8 = undefined; /* scoped */ - var __vue_scope_id__$7 = undefined; + var __vue_scope_id__$8 = undefined; /* module identifier */ - var __vue_module_identifier__$7 = undefined; + var __vue_module_identifier__$8 = undefined; /* functional template */ - var __vue_is_functional_template__$7 = false; + var __vue_is_functional_template__$8 = false; /* style inject */ /* style inject SSR */ @@ -2176,12 +2392,12 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { var FormulateInputTextArea = normalizeComponent( - { render: __vue_render__$7, staticRenderFns: __vue_staticRenderFns__$7 }, - __vue_inject_styles__$7, - __vue_script__$7, - __vue_scope_id__$7, - __vue_is_functional_template__$7, - __vue_module_identifier__$7, + { render: __vue_render__$8, staticRenderFns: __vue_staticRenderFns__$8 }, + __vue_inject_styles__$8, + __vue_script__$8, + __vue_scope_id__$8, + __vue_is_functional_template__$8, + __vue_module_identifier__$8, false, undefined, undefined, @@ -2201,6 +2417,7 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { FormulateInputText: FormulateInputText, FormulateInputGroup: FormulateInputGroup, FormulateInputSelect: FormulateInputSelect, + FormulateInputSlider: FormulateInputSlider, FormulateInputTextArea: FormulateInputTextArea }, library: library, @@ -2285,6 +2502,8 @@ var Formulate = (function (exports, isUrl, isPlainObject, nanoid) { var generators = this.options.locales[this.options.locale]; if (generators.hasOwnProperty(rule)) { return generators[rule](validationContext) + } else if (rule[0] === '_' && generators.hasOwnProperty(rule.substr(1))) { + return generators[rule.substr(1)](validationContext) } if (generators.hasOwnProperty('default')) { return generators.default(validationContext) diff --git a/dist/formulate.umd.js b/dist/formulate.umd.js index 033a5d0..bc698c8 100644 --- a/dist/formulate.umd.js +++ b/dist/formulate.umd.js @@ -42,10 +42,6 @@ classification: 'text', component: 'FormulateInputText' }, - range: { - classification: 'text', - component: 'FormulateInputText' - }, search: { classification: 'text', component: 'FormulateInputText' @@ -71,6 +67,12 @@ component: 'FormulateInputText' }, + // === SLIDER INPUTS + range: { + classification: 'slider', + component: 'FormulateInputSlider' + }, + // === MULTI LINE TEXT INPUTS textarea: { classification: 'textarea', @@ -224,6 +226,33 @@ return false } + /** + * Escape a string for use in regular expressions. + * @param {string} string + */ + function escapeRegExp (string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string + } + + /** + * Given a string format (date) return a regex to match against. + * @param {string} format + */ + function regexForFormat (format) { + var escaped = "^" + (escapeRegExp(format)) + "$"; + var formats = { + MM: '(0[1-9]|1[012])', + M: '([1-9]|1[012])', + DD: '([012][1-9]|3[01])', + D: '([012]?[1-9]|3[01])', + YYYY: '\\d{4}', + YY: '\\d{2}' + }; + return new RegExp(Object.keys(formats).reduce(function (regex, format) { + return regex.replace(format, formats[format]) + }, escaped)) + } + /** * Library of rules */ @@ -310,10 +339,18 @@ }, /** - * Rule: ensures the value is a date according to Date.parse() + * Rule: ensures the value is a date according to Date.parse(), or a format + * regex. */ - date: function (value) { - return Promise.resolve(!isNaN(Date.parse(value))) + date: function (value, format) { + if ( format === void 0 ) format = false; + + return Promise.resolve((function () { + if (format && typeof format === 'string') { + return regexForFormat(format).test(value) + } + return !isNaN(Date.parse(value)) + })()) }, /** @@ -548,7 +585,11 @@ */ date: function (ref) { var name = ref.name; + var args = ref.args; + if (Array.isArray(args) && args.length) { + return ((sentence(name)) + " is not a valid, please use the format " + (args[0])) + } return ((sentence(name)) + " is not a valid date.") }, @@ -568,7 +609,10 @@ var name = ref.name; var value = ref.value; - return (value + " is not a valid email address.") + if (!value) { + return 'Please enter a valid email address.' + } + return ("“" + value + "” is not a valid email address.") }, /** @@ -578,10 +622,10 @@ var name = ref.name; var value = ref.value; - if (typeof value === 'string') { + if (typeof value === 'string' && value) { return ("“" + (sentence(value)) + "” is not an allowed " + name + ".") } - return ((sentence(name)) + " is not an allowed value.") + return ("This is not an allowed " + name + ".") }, /** @@ -1626,7 +1670,8 @@ return _c( "div", { - staticClass: "formulate-input-element formulate-input-element--box", + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, attrs: { "data-type": _vm.context.type } }, [ @@ -1801,7 +1846,9 @@ return _c( "div", { - staticClass: "formulate-input-element formulate-input-element--textarea" + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, + attrs: { "data-type": _vm.context.type } }, [ _vm.type === "checkbox" @@ -1973,7 +2020,11 @@ var _c = _vm._self._c || _h; return _c( "div", - { staticClass: "formulate-input-element formulate-input-element--select" }, + { + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, + attrs: { "data-type": _vm.context.type } + }, [ _c( "select", @@ -2110,7 +2161,7 @@ // var script$7 = { - name: 'FormulateInputTextArea', + name: 'FormulateInputText', mixins: [FormulateInputMixin] }; @@ -2125,7 +2176,172 @@ return _c( "div", { - staticClass: "formulate-input-element formulate-input-element--textarea" + class: + "formulate-input-element formulate-input-element--" + _vm.context.type, + attrs: { "data-type": _vm.context.type } + }, + [ + _vm.type === "checkbox" + ? _c( + "input", + _vm._b( + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.context.model, + expression: "context.model" + } + ], + attrs: { type: "checkbox" }, + domProps: { + checked: Array.isArray(_vm.context.model) + ? _vm._i(_vm.context.model, null) > -1 + : _vm.context.model + }, + on: { + blur: _vm.context.blurHandler, + change: function($event) { + var $$a = _vm.context.model, + $$el = $event.target, + $$c = $$el.checked ? true : false; + if (Array.isArray($$a)) { + var $$v = null, + $$i = _vm._i($$a, $$v); + if ($$el.checked) { + $$i < 0 && + _vm.$set(_vm.context, "model", $$a.concat([$$v])); + } else { + $$i > -1 && + _vm.$set( + _vm.context, + "model", + $$a.slice(0, $$i).concat($$a.slice($$i + 1)) + ); + } + } else { + _vm.$set(_vm.context, "model", $$c); + } + } + } + }, + "input", + _vm.attributes, + false + ) + ) + : _vm.type === "radio" + ? _c( + "input", + _vm._b( + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.context.model, + expression: "context.model" + } + ], + attrs: { type: "radio" }, + domProps: { checked: _vm._q(_vm.context.model, null) }, + on: { + blur: _vm.context.blurHandler, + change: function($event) { + return _vm.$set(_vm.context, "model", null) + } + } + }, + "input", + _vm.attributes, + false + ) + ) + : _c( + "input", + _vm._b( + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.context.model, + expression: "context.model" + } + ], + attrs: { type: _vm.type }, + domProps: { value: _vm.context.model }, + on: { + blur: _vm.context.blurHandler, + input: function($event) { + if ($event.target.composing) { + return + } + _vm.$set(_vm.context, "model", $event.target.value); + } + } + }, + "input", + _vm.attributes, + false + ) + ) + ] + ) + }; + var __vue_staticRenderFns__$7 = []; + __vue_render__$7._withStripped = true; + + /* style */ + var __vue_inject_styles__$7 = undefined; + /* scoped */ + var __vue_scope_id__$7 = undefined; + /* module identifier */ + var __vue_module_identifier__$7 = undefined; + /* functional template */ + var __vue_is_functional_template__$7 = false; + /* style inject */ + + /* style inject SSR */ + + /* style inject shadow dom */ + + + + var FormulateInputSlider = normalizeComponent( + { render: __vue_render__$7, staticRenderFns: __vue_staticRenderFns__$7 }, + __vue_inject_styles__$7, + __vue_script__$7, + __vue_scope_id__$7, + __vue_is_functional_template__$7, + __vue_module_identifier__$7, + false, + undefined, + undefined, + undefined + ); + + // + + var script$8 = { + name: 'FormulateInputTextArea', + mixins: [FormulateInputMixin] + }; + + /* script */ + var __vue_script__$8 = script$8; + + /* template */ + var __vue_render__$8 = function() { + var _vm = this; + var _h = _vm.$createElement; + var _c = _vm._self._c || _h; + return _c( + "div", + { + staticClass: "formulate-input-element formulate-input-element--textarea", + attrs: { "data-type": "textarea" } }, [ _c( @@ -2159,17 +2375,17 @@ ] ) }; - var __vue_staticRenderFns__$7 = []; - __vue_render__$7._withStripped = true; + var __vue_staticRenderFns__$8 = []; + __vue_render__$8._withStripped = true; /* style */ - var __vue_inject_styles__$7 = undefined; + var __vue_inject_styles__$8 = undefined; /* scoped */ - var __vue_scope_id__$7 = undefined; + var __vue_scope_id__$8 = undefined; /* module identifier */ - var __vue_module_identifier__$7 = undefined; + var __vue_module_identifier__$8 = undefined; /* functional template */ - var __vue_is_functional_template__$7 = false; + var __vue_is_functional_template__$8 = false; /* style inject */ /* style inject SSR */ @@ -2179,12 +2395,12 @@ var FormulateInputTextArea = normalizeComponent( - { render: __vue_render__$7, staticRenderFns: __vue_staticRenderFns__$7 }, - __vue_inject_styles__$7, - __vue_script__$7, - __vue_scope_id__$7, - __vue_is_functional_template__$7, - __vue_module_identifier__$7, + { render: __vue_render__$8, staticRenderFns: __vue_staticRenderFns__$8 }, + __vue_inject_styles__$8, + __vue_script__$8, + __vue_scope_id__$8, + __vue_is_functional_template__$8, + __vue_module_identifier__$8, false, undefined, undefined, @@ -2204,6 +2420,7 @@ FormulateInputText: FormulateInputText, FormulateInputGroup: FormulateInputGroup, FormulateInputSelect: FormulateInputSelect, + FormulateInputSlider: FormulateInputSlider, FormulateInputTextArea: FormulateInputTextArea }, library: library, @@ -2288,6 +2505,8 @@ var generators = this.options.locales[this.options.locale]; if (generators.hasOwnProperty(rule)) { return generators[rule](validationContext) + } else if (rule[0] === '_' && generators.hasOwnProperty(rule.substr(1))) { + return generators[rule.substr(1)](validationContext) } if (generators.hasOwnProperty('default')) { return generators.default(validationContext) diff --git a/dist/snow.css b/dist/snow.css index ca42800..5d1f918 100644 --- a/dist/snow.css +++ b/dist/snow.css @@ -46,6 +46,45 @@ .formulate-input[data-classification='text'] input:focus { outline: 0; border: 1px solid #41b883; } + .formulate-input[data-classification='slider'] input { + appearance: none; + width: 100%; + font-size: 1em; + padding: .5em 0; } + .formulate-input[data-classification='slider'] input:focus { + outline: 0; } + .formulate-input[data-classification='slider'] input::-webkit-slider-thumb { + cursor: pointer; + appearance: none; + width: 1em; + height: 1em; + border-radius: 1em; + background-color: #41b883; + margin-top: calc(-.5em + 2px); } + .formulate-input[data-classification='slider'] input::-moz-range-thumb { + cursor: pointer; + appearance: none; + width: 1em; + height: 1em; + border-radius: 1em; + background-color: #41b883; + margin-top: calc(-.5em + 2px); } + .formulate-input[data-classification='slider'] input::-ms-thumb { + cursor: pointer; + appearance: none; + width: 1em; + height: 1em; + border-radius: 1em; + background-color: #41b883; + margin-top: calc(-.5em + 2px); } + .formulate-input[data-classification='slider'] input::-webkit-slider-runnable-track { + appearance: none; + width: 100%; + height: 4px; + background-color: #efefef; + border-radius: 3px; + margin: 0; + padding: 0; } .formulate-input[data-classification='textarea'] textarea { appearance: none; border-radius: .3em; diff --git a/dist/snow.min.css b/dist/snow.min.css index 3aaa52e..b8e8664 100644 --- a/dist/snow.min.css +++ b/dist/snow.min.css @@ -1,2 +1,2 @@ -.formulate-input{margin-bottom:2em}.formulate-input .formulate-input-label{display:block;line-height:1.5;font-size:.9em;font-weight:600;margin-bottom:.1em}.formulate-input .formulate-input-element{max-width:20em;margin-bottom:.1em}.formulate-input .formulate-input-help{color:#6d6d6d;font-size:.7em;font-weight:400;line-height:1.5;margin-bottom:.25em}.formulate-input .formulate-input-errors{list-style-type:none;padding:0;margin:0}.formulate-input .formulate-input-error{color:#960505;font-size:.8em;font-weight:300;line-height:1.5;margin-bottom:.25em}.formulate-input .formulate-input-group-item{margin-bottom:.5em}.formulate-input:last-child{margin-bottom:0}.formulate-input[data-classification=text] input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.3em;border:1px solid #cecece;box-sizing:border-box;background-color:transparent;font-size:.9em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:.75em;display:block;width:100%;font-weight:400}.formulate-input[data-classification=text] input::-webkit-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input::-moz-placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input:-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input::-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input::placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input:focus{outline:0;border:1px solid #41b883}.formulate-input[data-classification=textarea] textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.3em;border:1px solid #cecece;box-sizing:border-box;background-color:transparent;font-size:.9em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:.75em;display:block;width:100%;font-weight:400}.formulate-input[data-classification=textarea] textarea::-webkit-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea::-moz-placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea:-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea::-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea::placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea:focus{outline:0;border:1px solid #41b883}.formulate-input[data-classification=select] .formulate-input-element{position:relative}.formulate-input[data-classification=select] .formulate-input-element:before{content:"";width:0;height:0;border-color:#cecece transparent transparent;border-style:solid;border-width:.3em .3em 0;top:50%;margin-top:-.1em;right:1em;position:absolute}.formulate-input[data-classification=select] select{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.3em;border:1px solid #cecece;box-sizing:border-box;background-color:transparent;font-size:.9em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;display:block;width:100%;font-weight:400;padding:.75em 2em .75em .75em}.formulate-input[data-classification=select] select::-webkit-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select::-moz-placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select:-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select::-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select::placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select:focus{outline:0;border:1px solid #41b883}.formulate-input[data-classification=select] select[data-placeholder-selected]{color:#a8a8a8}.formulate-input[data-classification=box] .formulate-input-element,.formulate-input[data-classification=box] .formulate-input-wrapper{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.formulate-input[data-classification=box] .formulate-input-element{overflow:hidden}.formulate-input[data-classification=box] .formulate-input-element input{position:absolute;left:-999px}.formulate-input[data-classification=box] .formulate-input-element-decorator{display:block;width:1em;height:1em;border-radius:.25em;border:1px solid #cecece;position:relative}.formulate-input[data-classification=box] .formulate-input-element-decorator:before{content:"";display:block;background-size:contain;background-position:100%;width:calc(100% - .125em);height:calc(100% - .125em);box-sizing:border-box;position:absolute;top:.0625em;left:.0625em}.formulate-input[data-classification=box] .formulate-input-element[data-type=radio] .formulate-input-element-decorator{border-radius:1em}.formulate-input[data-classification=box] .formulate-input-element[data-type=radio] .formulate-input-element-decorator:before{border-radius:1em;width:calc(100% - .5em);height:calc(100% - .5em);top:.25em;left:.25em}.formulate-input[data-classification=box] .formulate-input-element input[type=checkbox]:checked~.formulate-input-element-decorator{border-color:#41b883}.formulate-input[data-classification=box] .formulate-input-element input[type=checkbox]:checked~.formulate-input-element-decorator:before{background-image:url('data:image/svg+xml;utf8,')}.formulate-input[data-classification=box] .formulate-input-element input[type=radio]:checked~.formulate-input-element-decorator{border-color:#41b883}.formulate-input[data-classification=box] .formulate-input-element input[type=radio]:checked~.formulate-input-element-decorator:before{background-color:#41b883}.formulate-input[data-classification=box] .formulate-input-element input:focus~.formulate-input-element-decorator{border-color:#41b883}.formulate-input[data-classification=box] .formulate-input-label--after{margin-left:.5em}.formulate-input[data-classification=box] .formulate-input-label--before{margin-right:.5em}.formulate-input[data-classification=group]>.formulate-input-wrapper>.formulate-input-label{margin-bottom:.5em} -/*# sourceMappingURL=data:application/json;base64,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SUFDRSxvQkFBdUIsQ0FDdkIsdUlBQ0Usd0JBQTJCLENBQy9CLGtIQUNFLG9CQUF1QixDQUMzQix3RUFDRSxnQkFBbUIsQ0FDckIseUVBQ0UsaUJBQW9CLENBQ3RCLDRGQUNFLGtCQUFxQiIsImZpbGUiOiJzdGRpbiIsInNvdXJjZXNDb250ZW50IjpbIi5mb3JtdWxhdGUtaW5wdXQge1xuICBtYXJnaW4tYm90dG9tOiAyZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dCAuZm9ybXVsYXRlLWlucHV0LWxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIGZvbnQtc2l6ZTogLjllbTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbi1ib3R0b206IC4xZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dCAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQge1xuICAgIG1heC13aWR0aDogMjBlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAuMWVtOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXQgLmZvcm11bGF0ZS1pbnB1dC1oZWxwIHtcbiAgICBjb2xvcjogIzZkNmQ2ZDtcbiAgICBmb250LXNpemU6IC43ZW07XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIG1hcmdpbi1ib3R0b206IC4yNWVtOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXQgLmZvcm11bGF0ZS1pbnB1dC1lcnJvcnMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMDsgfVxuICAuZm9ybXVsYXRlLWlucHV0IC5mb3JtdWxhdGUtaW5wdXQtZXJyb3Ige1xuICAgIGNvbG9yOiAjOTYwNTA1O1xuICAgIGZvbnQtc2l6ZTogLjhlbTtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgbWFyZ2luLWJvdHRvbTogLjI1ZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dCAuZm9ybXVsYXRlLWlucHV0LWdyb3VwLWl0ZW0ge1xuICAgIG1hcmdpbi1ib3R0b206IC41ZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0ndGV4dCddIGlucHV0IHtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IC4zZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2NlY2VjZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGZvbnQtc2l6ZTogLjllbTtcbiAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgXCJBcHBsZSBDb2xvciBFbW9qaVwiLCBcIlNlZ29lIFVJIEVtb2ppXCIsIFwiU2Vnb2UgVUkgU3ltYm9sXCI7XG4gICAgcGFkZGluZzogLjc1ZW07XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0ndGV4dCddIGlucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogI2E4YThhODsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0ndGV4dCddIGlucHV0OmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IDA7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDFiODgzOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0ndGV4dGFyZWEnXSB0ZXh0YXJlYSB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAuM2VtO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjZWNlY2U7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBmb250LXNpemU6IC45ZW07XG4gICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiO1xuICAgIHBhZGRpbmc6IC43NWVtO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J3RleHRhcmVhJ10gdGV4dGFyZWE6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAjYThhOGE4OyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSd0ZXh0YXJlYSddIHRleHRhcmVhOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IDA7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDFiODgzOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nc2VsZWN0J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J3NlbGVjdCddIC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudDo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICBib3JkZXI6IC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAjY2VjZWNlO1xuICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbWFyZ2luLXRvcDogLS4xZW07XG4gICAgICByaWdodDogMWVtO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nc2VsZWN0J10gc2VsZWN0IHtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IC4zZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2NlY2VjZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGZvbnQtc2l6ZTogLjllbTtcbiAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgXCJBcHBsZSBDb2xvciBFbW9qaVwiLCBcIlNlZ29lIFVJIEVtb2ppXCIsIFwiU2Vnb2UgVUkgU3ltYm9sXCI7XG4gICAgcGFkZGluZzogLjc1ZW07XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyZW07IH1cbiAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J3NlbGVjdCddIHNlbGVjdDo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICNhOGE4YTg7IH1cbiAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J3NlbGVjdCddIHNlbGVjdDpmb2N1cyB7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQxYjg4MzsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nc2VsZWN0J10gc2VsZWN0W2RhdGEtcGxhY2Vob2xkZXItc2VsZWN0ZWRdIHtcbiAgICAgIGNvbG9yOiAjYThhOGE4OyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQgaW5wdXQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogLTk5OXB4OyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQtZGVjb3JhdG9yIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDFlbTtcbiAgICAgIGhlaWdodDogMWVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogLjI1ZW07XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2VjZWNlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J2JveCddIC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudC1kZWNvcmF0b3I6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodDtcbiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIC4xMjVlbSk7XG4gICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gLjEyNWVtKTtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IC4wNjI1ZW07XG4gICAgICAgIGxlZnQ6IC4wNjI1ZW07IH1cbiAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J2JveCddIC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudFtkYXRhLXR5cGU9XCJyYWRpb1wiXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQtZGVjb3JhdG9yIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTsgfVxuICAgICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnRbZGF0YS10eXBlPVwicmFkaW9cIl0gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50LWRlY29yYXRvcjo6YmVmb3JlIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gLjVlbSk7XG4gICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gLjVlbSk7XG4gICAgICAgIHRvcDogLjI1ZW07XG4gICAgICAgIGxlZnQ6IC4yNWVtOyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQgfiAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQtZGVjb3JhdG9yIHtcbiAgICAgIGJvcmRlci1jb2xvcjogIzQxYjg4MzsgfVxuICAgICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQgfiAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQtZGVjb3JhdG9yOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTAwIDEwMFwiIGZpbGw9XCIlMjM0MWI4ODNcIj48cGF0aCBkPVwiTTguNzYsNTYuMmMtNi4zOC02LjM0LDMuMjYtMTYsOS42NC05LjY5TDM4LDY1Ljg4LDgwLjU2LDIzLjI5YzYuMzgtNi4zOCwxNi4wNywzLjMyLDkuNjksOS42OUw0Mi44NCw4MC4zN2E2LjgzLDYuODMsMCwwLDEtOS42NSwwWlwiLz48L3N2Zz4nKTsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50IGlucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkIH4gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50LWRlY29yYXRvciB7XG4gICAgICBib3JkZXItY29sb3I6ICM0MWI4ODM7IH1cbiAgICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50IGlucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkIH4gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50LWRlY29yYXRvcjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQxYjg4MzsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50IGlucHV0OmZvY3VzIH4gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50LWRlY29yYXRvciB7XG4gICAgICBib3JkZXItY29sb3I6ICM0MWI4ODM7IH1cbiAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWxhYmVsLS1hZnRlciB7XG4gICAgbWFyZ2luLWxlZnQ6IC41ZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWxhYmVsLS1iZWZvcmUge1xuICAgIG1hcmdpbi1yaWdodDogLjVlbTsgfVxuICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249XCJncm91cFwiXSA+IC5mb3JtdWxhdGUtaW5wdXQtd3JhcHBlciA+IC5mb3JtdWxhdGUtaW5wdXQtbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IC41ZW07IH1cbiJdfQ== */ \ No newline at end of file +.formulate-input{margin-bottom:2em}.formulate-input .formulate-input-label{display:block;line-height:1.5;font-size:.9em;font-weight:600;margin-bottom:.1em}.formulate-input .formulate-input-element{max-width:20em;margin-bottom:.1em}.formulate-input .formulate-input-help{color:#6d6d6d;font-size:.7em;font-weight:400;line-height:1.5;margin-bottom:.25em}.formulate-input .formulate-input-errors{list-style-type:none;padding:0;margin:0}.formulate-input .formulate-input-error{color:#960505;font-size:.8em;font-weight:300;line-height:1.5;margin-bottom:.25em}.formulate-input .formulate-input-group-item{margin-bottom:.5em}.formulate-input:last-child{margin-bottom:0}.formulate-input[data-classification=text] input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.3em;border:1px solid #cecece;box-sizing:border-box;background-color:transparent;font-size:.9em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:.75em;display:block;width:100%;font-weight:400}.formulate-input[data-classification=text] input::-webkit-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input::-moz-placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input:-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input::-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input::placeholder{color:#a8a8a8}.formulate-input[data-classification=text] input:focus{outline:0;border:1px solid #41b883}.formulate-input[data-classification=slider] input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;font-size:1em;padding:.5em 0}.formulate-input[data-classification=slider] input:focus{outline:0}.formulate-input[data-classification=slider] input::-webkit-slider-thumb{cursor:pointer;-webkit-appearance:none;appearance:none;width:1em;height:1em;border-radius:1em;background-color:#41b883;margin-top:calc(-.5em + 2px)}.formulate-input[data-classification=slider] input::-moz-range-thumb{cursor:pointer;-moz-appearance:none;appearance:none;width:1em;height:1em;border-radius:1em;background-color:#41b883;margin-top:calc(-.5em + 2px)}.formulate-input[data-classification=slider] input::-ms-thumb{cursor:pointer;appearance:none;width:1em;height:1em;border-radius:1em;background-color:#41b883;margin-top:calc(-.5em + 2px)}.formulate-input[data-classification=slider] input::-webkit-slider-runnable-track{-webkit-appearance:none;appearance:none;width:100%;height:4px;background-color:#efefef;border-radius:3px;margin:0;padding:0}.formulate-input[data-classification=textarea] textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.3em;border:1px solid #cecece;box-sizing:border-box;background-color:transparent;font-size:.9em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:.75em;display:block;width:100%;font-weight:400}.formulate-input[data-classification=textarea] textarea::-webkit-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea::-moz-placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea:-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea::-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea::placeholder{color:#a8a8a8}.formulate-input[data-classification=textarea] textarea:focus{outline:0;border:1px solid #41b883}.formulate-input[data-classification=select] .formulate-input-element{position:relative}.formulate-input[data-classification=select] .formulate-input-element:before{content:"";width:0;height:0;border-color:#cecece transparent transparent;border-style:solid;border-width:.3em .3em 0;top:50%;margin-top:-.1em;right:1em;position:absolute}.formulate-input[data-classification=select] select{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.3em;border:1px solid #cecece;box-sizing:border-box;background-color:transparent;font-size:.9em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;display:block;width:100%;font-weight:400;padding:.75em 2em .75em .75em}.formulate-input[data-classification=select] select::-webkit-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select::-moz-placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select:-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select::-ms-input-placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select::placeholder{color:#a8a8a8}.formulate-input[data-classification=select] select:focus{outline:0;border:1px solid #41b883}.formulate-input[data-classification=select] select[data-placeholder-selected]{color:#a8a8a8}.formulate-input[data-classification=box] .formulate-input-element,.formulate-input[data-classification=box] .formulate-input-wrapper{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.formulate-input[data-classification=box] .formulate-input-element{overflow:hidden}.formulate-input[data-classification=box] .formulate-input-element input{position:absolute;left:-999px}.formulate-input[data-classification=box] .formulate-input-element-decorator{display:block;width:1em;height:1em;border-radius:.25em;border:1px solid #cecece;position:relative}.formulate-input[data-classification=box] .formulate-input-element-decorator:before{content:"";display:block;background-size:contain;background-position:100%;width:calc(100% - .125em);height:calc(100% - .125em);box-sizing:border-box;position:absolute;top:.0625em;left:.0625em}.formulate-input[data-classification=box] .formulate-input-element[data-type=radio] .formulate-input-element-decorator{border-radius:1em}.formulate-input[data-classification=box] .formulate-input-element[data-type=radio] .formulate-input-element-decorator:before{border-radius:1em;width:calc(100% - .5em);height:calc(100% - .5em);top:.25em;left:.25em}.formulate-input[data-classification=box] .formulate-input-element input[type=checkbox]:checked~.formulate-input-element-decorator{border-color:#41b883}.formulate-input[data-classification=box] .formulate-input-element input[type=checkbox]:checked~.formulate-input-element-decorator:before{background-image:url('data:image/svg+xml;utf8,')}.formulate-input[data-classification=box] .formulate-input-element input[type=radio]:checked~.formulate-input-element-decorator{border-color:#41b883}.formulate-input[data-classification=box] .formulate-input-element input[type=radio]:checked~.formulate-input-element-decorator:before{background-color:#41b883}.formulate-input[data-classification=box] .formulate-input-element input:focus~.formulate-input-element-decorator{border-color:#41b883}.formulate-input[data-classification=box] .formulate-input-label--after{margin-left:.5em}.formulate-input[data-classification=box] .formulate-input-label--before{margin-right:.5em}.formulate-input[data-classification=group]>.formulate-input-wrapper>.formulate-input-label{margin-bottom:.5em} +/*# sourceMappingURL=data:application/json;base64,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QUNsQiwwREFDRSxTQUFVLENBQ1Ysd0JBQTJCLENBQzdCLCtFQUNFLGFBQWdCLENBSXBCLHNJQUZFLG1CQUFhLENBQWIsWUFBYSxDQUNiLHdCQUFtQixDQUFuQixrQkFJcUIsQ0FIdkIsbUVBQ0UsZUFFcUIsQ0FDckIseUVBQ0UsaUJBQWtCLENBQ2xCLFdBQWMsQ0FDaEIsNkVBQ0UsYUFBYyxDQUNkLFNBQVUsQ0FDVixVQUFXLENBQ1gsbUJBQW9CLENBQ3BCLHdCQUF5QixDQUN6QixpQkFBb0IsQ0FDcEIsb0ZBQ0UsVUFBVyxDQUNYLGFBQWMsQ0FDZCx1QkFBd0IsQ0FDeEIsd0JBQTBCLENBQzFCLHlCQUEwQixDQUMxQiwwQkFBMkIsQ0FDM0IscUJBQXNCLENBQ3RCLGlCQUFrQixDQUNsQixXQUFZLENBQ1osWUFBZSxDQUNuQix1SEFDRSxpQkFBb0IsQ0FDcEIsOEhBQ0UsaUJBQWtCLENBQ2xCLHVCQUF3QixDQUN4Qix3QkFBeUIsQ0FDekIsU0FBVSxDQUNWLFVBQWEsQ0FDakIsbUlBQ0Usb0JBQXVCLENBQ3ZCLDBJQUNFLGdSQUFtUixDQUN2UixnSUFDRSxvQkFBdUIsQ0FDdkIsdUlBQ0Usd0JBQTJCLENBQy9CLGtIQUNFLG9CQUF1QixDQUMzQix3RUFDRSxnQkFBbUIsQ0FDckIseUVBQ0UsaUJBQW9CLENBQ3RCLDRGQUNFLGtCQUFxQiIsImZpbGUiOiJzdGRpbiIsInNvdXJjZXNDb250ZW50IjpbIi5mb3JtdWxhdGUtaW5wdXQge1xuICBtYXJnaW4tYm90dG9tOiAyZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dCAuZm9ybXVsYXRlLWlucHV0LWxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIGZvbnQtc2l6ZTogLjllbTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbi1ib3R0b206IC4xZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dCAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQge1xuICAgIG1heC13aWR0aDogMjBlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAuMWVtOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXQgLmZvcm11bGF0ZS1pbnB1dC1oZWxwIHtcbiAgICBjb2xvcjogIzZkNmQ2ZDtcbiAgICBmb250LXNpemU6IC43ZW07XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIG1hcmdpbi1ib3R0b206IC4yNWVtOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXQgLmZvcm11bGF0ZS1pbnB1dC1lcnJvcnMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMDsgfVxuICAuZm9ybXVsYXRlLWlucHV0IC5mb3JtdWxhdGUtaW5wdXQtZXJyb3Ige1xuICAgIGNvbG9yOiAjOTYwNTA1O1xuICAgIGZvbnQtc2l6ZTogLjhlbTtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgbWFyZ2luLWJvdHRvbTogLjI1ZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dCAuZm9ybXVsYXRlLWlucHV0LWdyb3VwLWl0ZW0ge1xuICAgIG1hcmdpbi1ib3R0b206IC41ZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0ndGV4dCddIGlucHV0IHtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IC4zZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2NlY2VjZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGZvbnQtc2l6ZTogLjllbTtcbiAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgXCJBcHBsZSBDb2xvciBFbW9qaVwiLCBcIlNlZ29lIFVJIEVtb2ppXCIsIFwiU2Vnb2UgVUkgU3ltYm9sXCI7XG4gICAgcGFkZGluZzogLjc1ZW07XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0ndGV4dCddIGlucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogI2E4YThhODsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0ndGV4dCddIGlucHV0OmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IDA7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDFiODgzOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nc2xpZGVyJ10gaW5wdXQge1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgcGFkZGluZzogLjVlbSAwOyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdzbGlkZXInXSBpbnB1dDpmb2N1cyB7XG4gICAgICBvdXRsaW5lOiAwOyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdzbGlkZXInXSBpbnB1dDo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIHdpZHRoOiAxZW07XG4gICAgICBoZWlnaHQ6IDFlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0MWI4ODM7XG4gICAgICBtYXJnaW4tdG9wOiBjYWxjKC0uNWVtICsgMnB4KTsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nc2xpZGVyJ10gaW5wdXQ6Oi1tb3otcmFuZ2UtdGh1bWIge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIHdpZHRoOiAxZW07XG4gICAgICBoZWlnaHQ6IDFlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0MWI4ODM7XG4gICAgICBtYXJnaW4tdG9wOiBjYWxjKC0uNWVtICsgMnB4KTsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nc2xpZGVyJ10gaW5wdXQ6Oi1tcy10aHVtYiB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgd2lkdGg6IDFlbTtcbiAgICAgIGhlaWdodDogMWVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQxYjg4MztcbiAgICAgIG1hcmdpbi10b3A6IGNhbGMoLS41ZW0gKyAycHgpOyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdzbGlkZXInXSBpbnB1dDo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2sge1xuICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiA0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZlZmVmO1xuICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZzogMDsgfVxuICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J3RleHRhcmVhJ10gdGV4dGFyZWEge1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogLjNlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2VjZWNlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZm9udC1zaXplOiAuOWVtO1xuICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCBcIkFwcGxlIENvbG9yIEVtb2ppXCIsIFwiU2Vnb2UgVUkgRW1vamlcIiwgXCJTZWdvZSBVSSBTeW1ib2xcIjtcbiAgICBwYWRkaW5nOiAuNzVlbTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmb250LXdlaWdodDogNDAwOyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSd0ZXh0YXJlYSddIHRleHRhcmVhOjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogI2E4YThhODsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0ndGV4dGFyZWEnXSB0ZXh0YXJlYTpmb2N1cyB7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQxYjg4MzsgfVxuICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J3NlbGVjdCddIC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdzZWxlY3QnXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQ6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgYm9yZGVyOiAuM2VtIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogI2NlY2VjZTtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIG1hcmdpbi10b3A6IC0uMWVtO1xuICAgICAgcmlnaHQ6IDFlbTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxuICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J3NlbGVjdCddIHNlbGVjdCB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAuM2VtO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjZWNlY2U7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBmb250LXNpemU6IC45ZW07XG4gICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiO1xuICAgIHBhZGRpbmc6IC43NWVtO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgcGFkZGluZy1yaWdodDogMmVtOyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdzZWxlY3QnXSBzZWxlY3Q6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAjYThhOGE4OyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdzZWxlY3QnXSBzZWxlY3Q6Zm9jdXMge1xuICAgICAgb3V0bGluZTogMDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MWI4ODM7IH1cbiAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J3NlbGVjdCddIHNlbGVjdFtkYXRhLXBsYWNlaG9sZGVyLXNlbGVjdGVkXSB7XG4gICAgICBjb2xvcjogI2E4YThhODsgfVxuICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J2JveCddIC5mb3JtdWxhdGUtaW5wdXQtd3JhcHBlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50IHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50IGlucHV0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IC05OTlweDsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50LWRlY29yYXRvciB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxZW07XG4gICAgICBoZWlnaHQ6IDFlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IC4yNWVtO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NlY2VjZTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnQtZGVjb3JhdG9yOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQ7XG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAuMTI1ZW0pO1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIC4xMjVlbSk7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAuMDYyNWVtO1xuICAgICAgICBsZWZ0OiAuMDYyNWVtOyB9XG4gICAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPSdib3gnXSAuZm9ybXVsYXRlLWlucHV0LWVsZW1lbnRbZGF0YS10eXBlPVwicmFkaW9cIl0gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50LWRlY29yYXRvciB7XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07IH1cbiAgICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50W2RhdGEtdHlwZT1cInJhZGlvXCJdIC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudC1kZWNvcmF0b3I6OmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIC41ZW0pO1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIC41ZW0pO1xuICAgICAgICB0b3A6IC4yNWVtO1xuICAgICAgICBsZWZ0OiAuMjVlbTsgfVxuICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkIH4gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50LWRlY29yYXRvciB7XG4gICAgICBib3JkZXItY29sb3I6ICM0MWI4ODM7IH1cbiAgICAgIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkIH4gLmZvcm11bGF0ZS1pbnB1dC1lbGVtZW50LWRlY29yYXRvcjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDEwMCAxMDBcIiBmaWxsPVwiJTIzNDFiODgzXCI+PHBhdGggZD1cIk04Ljc2LDU2LjJjLTYuMzgtNi4zNCwzLjI2LTE2LDkuNjQtOS42OUwzOCw2NS44OCw4MC41NiwyMy4yOWM2LjM4LTYuMzgsMTYuMDcsMy4zMiw5LjY5LDkuNjlMNDIuODQsODAuMzdhNi44Myw2LjgzLDAsMCwxLTkuNjUsMFpcIi8+PC9zdmc+Jyk7IH1cbiAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J2JveCddIC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudCBpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCB+IC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudC1kZWNvcmF0b3Ige1xuICAgICAgYm9yZGVyLWNvbG9yOiAjNDFiODgzOyB9XG4gICAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J2JveCddIC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudCBpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCB+IC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudC1kZWNvcmF0b3I6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0MWI4ODM7IH1cbiAgICAuZm9ybXVsYXRlLWlucHV0W2RhdGEtY2xhc3NpZmljYXRpb249J2JveCddIC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudCBpbnB1dDpmb2N1cyB+IC5mb3JtdWxhdGUtaW5wdXQtZWxlbWVudC1kZWNvcmF0b3Ige1xuICAgICAgYm9yZGVyLWNvbG9yOiAjNDFiODgzOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1sYWJlbC0tYWZ0ZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAuNWVtOyB9XG4gIC5mb3JtdWxhdGUtaW5wdXRbZGF0YS1jbGFzc2lmaWNhdGlvbj0nYm94J10gLmZvcm11bGF0ZS1pbnB1dC1sYWJlbC0tYmVmb3JlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IC41ZW07IH1cbiAgLmZvcm11bGF0ZS1pbnB1dFtkYXRhLWNsYXNzaWZpY2F0aW9uPVwiZ3JvdXBcIl0gPiAuZm9ybXVsYXRlLWlucHV0LXdyYXBwZXIgPiAuZm9ybXVsYXRlLWlucHV0LWxhYmVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAuNWVtOyB9XG4iXX0= */ \ No newline at end of file diff --git a/src/Formulate.js b/src/Formulate.js index 6d09776..91f03e0 100644 --- a/src/Formulate.js +++ b/src/Formulate.js @@ -9,6 +9,7 @@ import FormulateInputGroup from './FormulateInputGroup.vue' import FormulateInputBox from './inputs/FormulateInputBox.vue' import FormulateInputText from './inputs/FormulateInputText.vue' import FormulateInputSelect from './inputs/FormulateInputSelect.vue' +import FormulateInputSlider from './inputs/FormulateInputSlider.vue' import FormulateInputTextArea from './inputs/FormulateInputTextArea.vue' /** @@ -28,6 +29,7 @@ class Formulate { FormulateInputText, FormulateInputGroup, FormulateInputSelect, + FormulateInputSlider, FormulateInputTextArea }, library, @@ -112,6 +114,8 @@ class Formulate { const generators = this.options.locales[this.options.locale] if (generators.hasOwnProperty(rule)) { return generators[rule](validationContext) + } else if (rule[0] === '_' && generators.hasOwnProperty(rule.substr(1))) { + return generators[rule.substr(1)](validationContext) } if (generators.hasOwnProperty('default')) { return generators.default(validationContext) diff --git a/src/inputs/FormulateInputBox.vue b/src/inputs/FormulateInputBox.vue index 18e9c18..323a64a 100644 --- a/src/inputs/FormulateInputBox.vue +++ b/src/inputs/FormulateInputBox.vue @@ -1,6 +1,6 @@ + + diff --git a/src/inputs/FormulateInputText.vue b/src/inputs/FormulateInputText.vue index 33c45f0..6cc3e68 100644 --- a/src/inputs/FormulateInputText.vue +++ b/src/inputs/FormulateInputText.vue @@ -1,6 +1,7 @@