@blinkk/editor
Version:
Structured content editor with live previews.
269 lines • 356 kB
JavaScript
/*! For license information please see example.min.js.LICENSE.txt */
(()=>{var e={3450:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.until=t.unsafeHTML=t.styleMap=t.repeat=t.ifDefined=t.classMap=t.render=t.html=t.directive=t.TemplateResult=t.UuidMixin=t.SortableUi=t.SortableMixin=t.OptionMixin=t.DroppableUi=t.DroppableMixin=t.DataMixin=t.Base=t.findParentByClassname=t.autoDeepObject=t.DeepObject=t.RequireRule=t.RangeRule=t.PatternRule=t.MatchRule=t.LengthRule=t.Rule=t.VariantField=t.TimeField=t.TextareaField=t.TextField=t.RadioField=t.NumberField=t.ListField=t.GroupField=t.DatetimeField=t.DateField=t.ColorField=t.CheckboxMultiField=t.CheckboxField=t.Fields=t.Field=t.SelectiveEditor=void 0;var s=i(663);Object.defineProperty(t,"SelectiveEditor",{enumerable:!0,get:function(){return s.SelectiveEditor}});var r=i(9963);Object.defineProperty(t,"Field",{enumerable:!0,get:function(){return r.Field}});var n=i(5765);Object.defineProperty(t,"Fields",{enumerable:!0,get:function(){return n.Fields}});var a=i(3766);Object.defineProperty(t,"CheckboxField",{enumerable:!0,get:function(){return a.CheckboxField}});var l=i(5288);Object.defineProperty(t,"CheckboxMultiField",{enumerable:!0,get:function(){return l.CheckboxMultiField}});var o=i(6733);Object.defineProperty(t,"ColorField",{enumerable:!0,get:function(){return o.ColorField}});var u=i(716);Object.defineProperty(t,"DateField",{enumerable:!0,get:function(){return u.DateField}});var c=i(6835);Object.defineProperty(t,"DatetimeField",{enumerable:!0,get:function(){return c.DatetimeField}});var d=i(6400);Object.defineProperty(t,"GroupField",{enumerable:!0,get:function(){return d.GroupField}});var h=i(995);Object.defineProperty(t,"ListField",{enumerable:!0,get:function(){return h.ListField}});var p=i(9162);Object.defineProperty(t,"NumberField",{enumerable:!0,get:function(){return p.NumberField}});var f=i(9521);Object.defineProperty(t,"RadioField",{enumerable:!0,get:function(){return f.RadioField}});var m=i(5978);Object.defineProperty(t,"TextField",{enumerable:!0,get:function(){return m.TextField}});var g=i(5208);Object.defineProperty(t,"TextareaField",{enumerable:!0,get:function(){return g.TextareaField}});var _=i(6285);Object.defineProperty(t,"TimeField",{enumerable:!0,get:function(){return _.TimeField}});var v=i(8081);Object.defineProperty(t,"VariantField",{enumerable:!0,get:function(){return v.VariantField}});var b=i(8850);Object.defineProperty(t,"Rule",{enumerable:!0,get:function(){return b.Rule}});var y=i(326);Object.defineProperty(t,"LengthRule",{enumerable:!0,get:function(){return y.LengthRule}});var D=i(1800);Object.defineProperty(t,"MatchRule",{enumerable:!0,get:function(){return D.MatchRule}});var w=i(5644);Object.defineProperty(t,"PatternRule",{enumerable:!0,get:function(){return w.PatternRule}});var F=i(8683);Object.defineProperty(t,"RangeRule",{enumerable:!0,get:function(){return F.RangeRule}});var k=i(713);Object.defineProperty(t,"RequireRule",{enumerable:!0,get:function(){return k.RequireRule}});var E=i(2501);Object.defineProperty(t,"DeepObject",{enumerable:!0,get:function(){return E.DeepObject}}),Object.defineProperty(t,"autoDeepObject",{enumerable:!0,get:function(){return E.autoDeepObject}});var x=i(3402);Object.defineProperty(t,"findParentByClassname",{enumerable:!0,get:function(){return x.findParentByClassname}});var C=i(900);Object.defineProperty(t,"Base",{enumerable:!0,get:function(){return C.Base}});var A=i(3720);Object.defineProperty(t,"DataMixin",{enumerable:!0,get:function(){return A.DataMixin}});var P=i(9418);Object.defineProperty(t,"DroppableMixin",{enumerable:!0,get:function(){return P.DroppableMixin}}),Object.defineProperty(t,"DroppableUi",{enumerable:!0,get:function(){return P.DroppableUi}});var O=i(9145);Object.defineProperty(t,"OptionMixin",{enumerable:!0,get:function(){return O.OptionMixin}});var $=i(5614);Object.defineProperty(t,"SortableMixin",{enumerable:!0,get:function(){return $.SortableMixin}}),Object.defineProperty(t,"SortableUi",{enumerable:!0,get:function(){return $.SortableUi}});var S=i(8224);Object.defineProperty(t,"UuidMixin",{enumerable:!0,get:function(){return S.UuidMixin}});var T=i(2439);Object.defineProperty(t,"TemplateResult",{enumerable:!0,get:function(){return T.TemplateResult}}),Object.defineProperty(t,"directive",{enumerable:!0,get:function(){return T.directive}}),Object.defineProperty(t,"html",{enumerable:!0,get:function(){return T.html}}),Object.defineProperty(t,"render",{enumerable:!0,get:function(){return T.render}});var I=i(7857);Object.defineProperty(t,"classMap",{enumerable:!0,get:function(){return I.classMap}});var M=i(6718);Object.defineProperty(t,"ifDefined",{enumerable:!0,get:function(){return M.ifDefined}});var j=i(449);Object.defineProperty(t,"repeat",{enumerable:!0,get:function(){return j.repeat}});var N=i(4305);Object.defineProperty(t,"styleMap",{enumerable:!0,get:function(){return N.styleMap}});var L=i(3273);Object.defineProperty(t,"unsafeHTML",{enumerable:!0,get:function(){return L.unsafeHTML}});var V=i(1311);Object.defineProperty(t,"until",{enumerable:!0,get:function(){return V.until}})},3720:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DataMixin=void 0,t.DataMixin=function(e){return class extends e{get data(){return this._data}set data(e){this._data=e}}}},9418:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DroppableUi=t.DroppableMixin=void 0;const s=i(900),r=i(1330),n=i(8224),a=i(3402);t.DroppableMixin=function(e){return class extends e{get droppableUi(){return this._droppableUi||(this._droppableUi=new l),this._droppableUi}set droppableUi(e){this._droppableUi=e}}};class l extends(n.UuidMixin(s.Base)){constructor(){super(),this.listeners=new r.Listeners,this.validTypes=[]}findDropTarget(e){const t=a.findParentByClassname(e.target,"selective__droppable__target");return t&&e.dataTransfer?.types.includes("Files")?(e.preventDefault(),e.stopPropagation(),t):null}handleDragEnter(e){const t=this.findDropTarget(e);t&&t.classList.add("selective__droppable--hover")}handleDragLeave(e){const t=this.findDropTarget(e);t&&t===e.target&&t.classList.remove("selective__droppable--hover")}handleDragOver(e){this.findDropTarget(e)}handleDrop(e){const t=this.findDropTarget(e);if(!t)return;t.classList.remove("selective__droppable--hover");const i=[];if(e.dataTransfer?.items)for(const t of e.dataTransfer.items){if("file"!==t.kind)continue;const e=t.getAsFile();e&&this.isFileValid(e)&&i.push(e)}else for(const t of e.dataTransfer?.files||[])this.isFileValid(t)&&i.push(t);i.length&&this.listeners.trigger("files",i)}isFileValid(e){return!(this.validTypes.length&&!this.validTypes.includes(e.type))}}t.DroppableUi=l},900:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Base=void 0,t.Base=class{}},9145:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OptionMixin=t.ColorsOrientation=void 0;const s=i(2439),r=i(7857),n=i(6718),a=i(449),l=i(4305);var o;!function(e){e.Vertical="vertical",e.Horizontal="horizontal",e.Slope="slope"}(o=t.ColorsOrientation||(t.ColorsOrientation={})),t.OptionMixin=function(e){return class extends e{ariaLabelForOptionDot(e,t){return t.color?t.color:t.gradient&&t.gradient.colors.length?t.gradient.colors.join(", "):t.label}classesForOptions(e,t){return{selective__options:!0,"selective__options--color-hint":this.hasColorHints(t),"selective__options--few":t.length>4,"selective__options--many":t.length>11,"selective__options--multi":e.isMulti||!1}}classesForOption(e,t){return{selective__options__option:!0,"selective__options__option--selected":e.isOptionSelected(t),"selective__options__option--color-hint":Boolean(t.color),"selective__options__option--color-hint-gradient":Boolean(t.gradient)}}hasColorHints(e){for(const t of e)if(t.color||t.gradient)return!0;return!1}stylesForOptionDot(e,t){if(t.color)return{backgroundColor:t.color};if(!t.gradient||!t.gradient.colors.length)return{};const i=t.gradient;let s="0deg";i.orientation===o.Horizontal?s="90deg":i.orientation===o.Slope&&(s="45deg");const r=i.isSmooth||!1,n=[`${i.colors[0]} 0%`],a=r?i.colors.length-1:i.colors.length;let l=Math.floor(100/a),u=null;for(const e of i.colors)u?(r||n.push(`${u} ${l}%`),n.push(`${e} ${l}%`),l+=l,u=e):u=e;return r||n.push(`${i.colors[i.colors.length-1]} 100%`),{backgroundImage:`linear-gradient(${s}, ${n.join(", ")})`}}templateColorSwatch(e,t,i,r){return r.color||r.gradient?s.html`<div
class="selective__swatch"
aria-label=${this.ariaLabelForOptionDot(i,r)}
style=${l.styleMap(this.stylesForOptionDot(i,r))}
></div>`:s.html``}templateOption(e,t,i,n){let a="";return a=i.isOptionSelected(n)?i.isMulti?"check_box":"radio_button_checked":i.isMulti?"check_box_outline_blank":"radio_button_unchecked",s.html`<div
class=${r.classMap(this.classesForOption(i,n))}
aria-checked=${i.isOptionSelected(n)}
data-value=${n.value}
tabindex="0"
role=${i.isMulti?"checkbox":"radio"}
@click=${i.handleInput}
@keypress=${e=>{"Space"===e.code&&(e.preventDefault(),i.handleInput(e))}}
>
<span class="material-icons">${a}</span>
${this.templateColorSwatch(e,t,i,n)}
<label>${n.label||"(Empty)"}</label>
</div>`}templateOptions(e,t,i,l){return s.html`<div
class=${r.classMap(this.classesForOptions(i,l))}
role=${n.ifDefined(i.isMulti?void 0:"radiogroup")}
>
${a.repeat(l,(e=>e.value),(s=>this.templateOption(e,t,i,s)))}
</div>`}}}},5614:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SortableUi=t.SortableMixin=void 0;const s=i(900),r=i(1330),n=i(8224),a=i(3402);t.SortableMixin=function(e){return class extends e{get sortableUi(){return this._sortableUi||(this._sortableUi=new l),this._sortableUi}set sortableUi(e){this._sortableUi=e}}};class l extends(n.UuidMixin(s.Base)){constructor(){super(),this.listeners=new r.Listeners}findDragTarget(e){const t=e.target;return this.dragOrigin&&t&&e.dataTransfer?.types.includes(this.transferType)?(e.preventDefault(),e.stopPropagation(),a.findParentDraggable(t)):null}handleDragEnter(e){const t=this.findDragTarget(e);if(!t)return;t.classList.add("selective__sortable--hover");const i=parseInt(t.dataset.index),s=parseInt(this.dragOrigin?.dataset.index);t===e.target&&i!==s&&(i<s?t.classList.add("selective__sortable--above"):t.classList.add("selective__sortable--below"))}handleDragLeave(e){const t=this.findDragTarget(e);t&&t===e.target&&t.classList.remove("selective__sortable--hover","selective__sortable--above","selective__sortable--below")}handleDragOver(e){this.findDragTarget(e)&&e.dataTransfer&&(e.dataTransfer.dropEffect="move")}handleDragStart(e){if(e.stopPropagation(),this.dragOrigin=a.findParentDraggable(e.target)||void 0,e.dataTransfer&&this.dragOrigin){e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/plain",this.dragOrigin.dataset.index),e.dataTransfer.setData(this.transferType,this.dragOrigin.dataset.index);const t=this.dragOrigin.querySelector(".selective__sortable__preview");t&&e.dataTransfer.setDragImage(t,0,0)}}handleDrop(e){const t=this.findDragTarget(e);if(!t)return;const i=parseInt(t.dataset.index),s=parseInt(e?.dataTransfer?.getData("text/plain")||"");t.classList.remove("selective__sortable--hover","selective__sortable--above","selective__sortable--below"),this.dragOrigin=void 0,this.listeners.trigger("sort",s,i,t)}get transferType(){return`sortable/${this.uid}`}}t.SortableUi=l},8224:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UuidMixin=void 0;const s=i(2363);t.UuidMixin=function(e){return class extends e{get uuid(){return this._uuid||(this._uuid=s.generateUUID()),this._uuid}get uid(){return this.uuid.slice(0,8)}}}},5948:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AutoFields=void 0;const s=i(3909);t.AutoFields=class{constructor(e){this.config=e||{}}deepGuess(e,t){return t=t||[],s.DataType.isArray(e)?this.deepGuessArray(e,t):s.DataType.isObject(e)?this.deepGuessObject(e,t):[this.guessField(t.join("."),e)]}deepGuessArray(e,t){return t=t||[],e.length?this.deepGuess(e[0],t):[]}deepGuessObject(e,t){let i=[];t=t||[];for(const r of Object.keys(e)){if(this.isIgnoredKey(r))continue;const n=t.concat([r]),a=e[r];s.DataType.isObject(a)?i=i.concat(this.deepGuessObject(a,n)):i.push(this.deepGuessSimple(e[r],n))}return i}deepGuessSimple(e,t){const i=(t=t||[]).join(".");return this.guessField(i,e)}guessField(e,t){const i=this.guessType(e,t),s=this.guessLabel(e),r={key:e,type:i};return""!==s&&(r.label=s),"list"===i&&(r.fields=this.deepGuess(t)),r}guessFields(e){return this.deepGuess(e)}guessLabel(e){return(e=(e=(e=e.replace(/\./g," ")).replace(/-/g," ")).replace(/_/g," ")).split(" ").map((e=>e.charAt(0).toUpperCase()+e.slice(1))).join(" ")}guessType(e,t){return s.DataType.isNull(t)||s.DataType.isUndefined(t)?"text":s.DataType.isArray(t)?"list":s.DataType.isString(t)&&t.length>75?"textarea":"text"}isIgnoredKey(e){const t=this.config.ignorePatterns||[];if((this.config.ignoreKeys||[]).includes(e))return!0;for(const i of t)if(new RegExp(i).test(e))return!0;return!1}}},663:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SelectiveEditor=void 0;const s=i(5765),r=i(2439),n=i(5948),a=i(900),l=i(5056),o=i(3720),u=i(8700);class c extends(o.DataMixin(a.Base)){constructor(e,t){super(),this.container=t,this.config=e,this.types={fields:new l.ClassManager,globals:{FieldsCls:s.Fields,AutoFieldsCls:n.AutoFields},rules:new l.ClassManager},this.isRendering=!1,this.isPendingRender=!1,this.config.fieldTypes&&this.types.fields.registerClasses(this.config.fieldTypes),this.config.ruleTypes&&this.types.rules.registerClasses(this.config.ruleTypes),this.fields=new s.Fields(this.types,{fields:this.config.fields,parentKey:""},this.config.global||{})}addFieldType(e,t){this.types.fields.registerClass(e,t),this.resetFields()}addFieldTypes(e){this.types.fields.registerClasses(e),this.resetFields()}addRuleType(e,t){this.types.rules.registerClass(e,t)}addRuleTypes(e){this.types.rules.registerClasses(e)}guessFields(){const e=new this.types.globals.AutoFieldsCls({});return this.config.fields=e.guessFields(this.data?.obj),this.resetFields(),this.config.fields}get isClean(){return this.fields.isClean}get isValid(){return this.fields.isValid}template(e,t){return r.html`<div class="selective">
${e.fields.template(e,t)}
</div>`}render(){if(!this.container||!this.data)return;if(this.isRendering)return void(this.isPendingRender=!0);this.isPendingRender=!1,this.isRendering=!0;const e=this.isClean,t=this.isValid;r.render(this.template(this,this.data),this.container),this.isRendering=!1,document.dispatchEvent(new CustomEvent(u.EVENT_RENDER_COMPLETE)),(this.isPendingRender||this.isClean!==e||this.isValid!==t)&&this.render()}resetFields(){this.fields=new s.Fields(this.types,{fields:this.config.fields,parentKey:""},this.config.global||{}),this.render()}get value(){return this.fields.value}}t.SelectiveEditor=c},8700:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EVENT_UNLOCK=t.EVENT_RENDER_COMPLETE=t.EVENT_RENDER=void 0,t.EVENT_RENDER="selective.render",t.EVENT_RENDER_COMPLETE="selective.render.complete",t.EVENT_UNLOCK="selective.unlock"},9963:function(e,t,i){"use strict";var s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Field=void 0;const r=i(6665),n=i(8850),a=i(2439),l=i(900),o=i(3720),u=i(3909),c=i(8700),d=i(8224),h=i(7857),p=i(449),f=s(i(7266));class m extends(d.UuidMixin(o.DataMixin(l.Base))){constructor(e,t,i,s="unknown"){super(),this.types=e,this.config=t,this.globalConfig=i,this.fieldType=s,this.isLocked=!1,this.isDeepLinked=!1,this.usingAutoFields=!1}classesForField(){const e={selective__field:!0,"selective__field--auto":this.usingAutoFields,"selective__field--dirty":!this.isClean,"selective__field--guess":this.config.isGuessed||!1,"selective__field--invalid":!this.isValid,"selective__field--linked":this.isDeepLinked};e[`selective__field__type__${this.fieldType}`]=!0;for(const t of this.config.classes||[])e[t]=!0;return e}classesForInput(e=r.DEFAULT_ZONE_KEY){const t={selective__field__input:!0};if(!this.isValid)for(const i of[r.ValidationLevel.Error,r.ValidationLevel.Warning,r.ValidationLevel.Info])this.validation?.hasAnyResults(e,i)&&(t[`selective__field__input--${i}`]=!0);return t}classesForLabel(e=r.DEFAULT_ZONE_KEY){const t={selective__field__label:!0};if(!this.isValid&&!this.isValid)for(const i of[r.ValidationLevel.Error,r.ValidationLevel.Warning,r.ValidationLevel.Info])this.validation?.hasAnyResults(e,i)&&(t[`selective__field__label--${i}`]=!0);return t}cleanOriginalValue(e){return u.DataType.isArray(e)&&(e=[...e]),e}get fullKey(){return this.config.parentKey?`${this.config.parentKey}.${this.key}`:this.key}handleInput(e){const t=e.target;this.currentValue=t.value,this.render()}get isClean(){return!this.isLocked&&f.default(this.currentValue)===f.default(this.originalValue)}get isSimple(){return!0}get isValid(){if(!this.validation)if(this.validation=new r.Validation(this.rules),this.zoneToKey){const e=this.currentValue||{};for(const t of Object.keys(this.zoneToKey)){const i=this.zoneToKey[t];this.validation.validate(e[i],t)}}else this.validation.validate(this.currentValue);return!this.validation.hasAnyResults(null)}get key(){return this.config.key}lock(){this.isLocked=!0}render(){document.dispatchEvent(new CustomEvent(c.EVENT_RENDER))}get rules(){if(this._rules)return this._rules;this._rules=new n.Rules(this.types.rules);let e=this.config?.validation||[];if(u.DataType.isArray(e)){e=e;for(const t of e)this.rules.addRuleFromConfig(t)}else if(u.DataType.isObject(e)){e=e;for(const t of Object.keys(e))for(const i of e[t])this.rules.addRuleFromConfig(i,t)}else e&&console.error("Validation rules in an invalid format.","Expecting array or Record<zoneKey, array>.",e);return this._rules}template(e,t){return this.updateOriginal(e,t),this.templateWrapper(e,t)}templateErrors(e,t,i){if(this.isValid)return a.html``;const s=this.validation?.getResults(i)||[];return s.length?a.html`<div class="selective__field__errors">
${p.repeat(s,(e=>e.uuid),(e=>a.html`
<div
class="selective__field__error selective__field__error--level__${e.level}"
data-error-level="${e.level}"
>
${e.message}
</div>
`))}
</div>`:a.html``}templateFooter(e,t){return a.html``}templateFooterStructure(e,t){return a.html`<div class="selective__field__footer">
${this.templateFooter(e,t)}
</div>`}templateHeader(e,t){return a.html``}templateHeaderStructure(e,t){return a.html`<div class="selective__field__header">
${this.templateHeader(e,t)} ${this.templateLabel(e,t)}
</div>`}templateHelp(e,t,i){let s=this.config.help;return s?(i&&u.DataType.isObject(s)&&(s=s,s=s[i]),a.html`<div class="selective__field__help">${s}</div>`):a.html``}templateIconDeepLink(e,t){return a.html``}templateIconValidation(e,t){return this.isValid?a.html``:a.html`<span class="selective__field__invalid">
<i class="material-icons">error</i>
</span>`}templateInput(e,t){return a.html`${this.templateHelp(e,t)}
<div class="selective__field__input">Input not defined.</div>`}templateInputStructure(e,t){return a.html`<div class="selective__field__input__structure">
${this.templateInput(e,t)}
</div>`}templateLabel(e,t){return this.config.label?a.html`<div class=${h.classMap(this.classesForLabel())}>
${this.templateIconDeepLink(e,t)}
${this.templateIconValidation(e,t)}
<label for=${this.uid}>${this.config.label}</label>
</div>`:a.html``}templateStructure(e,t){return a.html`${this.templateHeaderStructure(e,t)}
${this.templateInputStructure(e,t)}
${this.templateFooterStructure(e,t)}`}templateWrapper(e,t){return a.html`<div
class=${h.classMap(this.classesForField())}
data-field-type=${this.fieldType}
data-field-full-key=${this.fullKey}
>
${this.templateStructure(e,t)}
</div>`}unlock(){this.isLocked=!1}updateOriginal(e,t){if(this.validation=void 0,this.isLocked)return;let i=t.get(this.key);const s=this.isClean;i=this.cleanOriginalValue(i),this.originalValue=i,s&&(this.currentValue=this.cleanOriginalValue(i),void 0===this.currentValue&&(this.currentValue=this.config.default)),s!==this.isClean&&this.render()}get value(){return this.currentValue}}t.Field=m},3766:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CheckboxField=void 0;const s=i(9145),r=i(9963),n=i(2439);class a extends(s.OptionMixin(r.Field)){constructor(e,t,i,s="checkbox"){super(e,t,i,s),this.config=t}get isChecked(){const e=void 0!==this.currentValue&&this.currentValue;return void 0===this.config.value?!0===e:e===this.config.value}handleInput(e){this.isChecked?this.currentValue=void 0!==this.config.valueUnchecked&&this.config.valueUnchecked:this.currentValue=void 0===this.config.value||this.config.value,this.render()}templateInput(e,t){return n.html`${this.templateOptions(e,t,{handleInput:this.handleInput.bind(this),isMulti:!0,isOptionSelected:()=>this.isChecked},[this.config])}
${this.templateHelp(e,t)} ${this.templateErrors(e,t)}`}templateLabel(e,t){return n.html``}}t.CheckboxField=a},5288:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CheckboxMultiField=void 0;const s=i(9963),r=i(9145),n=i(2439),a=i(3402);class l extends(r.OptionMixin(s.Field)){constructor(e,t,i,s="checkboxMulti"){super(e,t,i,s),this.config=t}handleInput(e){const t=a.findParentByClassname(e.target,"selective__options__option");if(!t)return;this.currentValue=this.currentValue||[];const i=t.dataset.value;this.currentValue.includes(i)?this.currentValue=this.currentValue.filter((e=>e!==i)):this.currentValue.push(i),this.render()}templateInput(e,t){const i=this.currentValue||[];return n.html`${this.templateHelp(e,t)}
${this.templateOptions(e,t,{handleInput:this.handleInput.bind(this),isMulti:!0,isOptionSelected:e=>i.includes(e.value)},this.config.options)}
${this.templateErrors(e,t)}`}}t.CheckboxMultiField=l},6733:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ColorField=void 0;const s=i(9963),r=i(2439),n=i(7857);class a extends s.Field{constructor(e,t,i,s="text"){super(e,t,i,s),this.config=t}templateInput(e,t){const i=this.currentValue||"";return r.html`${this.templateHelp(e,t)}
<div class=${n.classMap(this.classesForInput())}>
<input
type="color"
id="${this.uid}"
@input=${this.handleInput.bind(this)}
value=${i}
/>
</div>
${this.templateErrors(e,t)}`}}t.ColorField=a},716:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DateField=void 0;const s=i(9963),r=i(2439),n=i(3909),a=i(7857);class l extends s.Field{constructor(e,t,i,s="text"){super(e,t,i,s),this.config=t}cleanOriginalValue(e){return(e=super.cleanOriginalValue(e))&&n.DataType.isString(e)&&e.length>10&&(e=e.slice(0,10)),e}templateInput(e,t){const i=this.currentValue||"";return r.html`${this.templateHelp(e,t)}
<div class=${a.classMap(this.classesForInput())}>
<input
type="date"
id="${this.uid}"
@input=${this.handleInput.bind(this)}
value=${i}
/>
</div>
${this.templateErrors(e,t)}`}}t.DateField=l},6835:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DatetimeField=void 0;const s=i(9963),r=i(2439),n=i(3909),a=i(7857);class l extends s.Field{constructor(e,t,i,s="text"){super(e,t,i,s),this.config=t}cleanOriginalValue(e){return(e=super.cleanOriginalValue(e))&&n.DataType.isString(e)&&e.length>16&&(e=e.slice(0,16)),e}templateInput(e,t){const i=this.currentValue||"";return r.html`${this.templateHelp(e,t)}
<div class=${a.classMap(this.classesForInput())}>
<input
type="datetime-local"
id="${this.uid}"
@input=${this.handleInput.bind(this)}
value=${i}
/>
</div>
${this.templateErrors(e,t)}`}}t.DatetimeField=l},6400:function(e,t,i){"use strict";var s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GroupField=void 0;const r=i(2501),n=i(9963),a=i(2439),l=i(7857),o=i(9459),u=s(i(2378)),c=i(449);class d extends n.Field{constructor(e,t,i,s="group"){super(e,t,i,s),this.config=t,this.usingAutoFields=!1}classesForField(){const e=super.classesForField();return e[`selective__field__type__${this.fieldType}--expanded`]=this.config.isExpanded||!1,e}createFields(e){return new this.types.globals.FieldsCls(this.types,{fields:e,isGuessed:this.usingAutoFields,parentKey:this.fullKey},this.globalConfig)}ensureFields(){this.fields||(this.fields=this.createFields(this.config.fields||[]))}get isClean(){return!this.fields||this.fields.isClean}get isValid(){return!this.fields||this.fields.isValid}templateHeader(e,t){const i=[];return i.push(a.html`<div class="selective__action selective__action__expand">
<i class="material-icons"
>${this.config.isExpanded?"expand_more":"chevron_right"}</i
>
</div>`),a.html`<div class="selective__field__actions">${i}</div>`}templateHeaderStructure(e,t){return a.html`<div
class="selective__field__header"
@click=${()=>{this.config.isExpanded=!this.config.isExpanded,this.render()}}
>
${this.templateHeader(e,t)} ${this.templateLabel(e,t)}
</div>`}templateInput(e,t){return this.config.isExpanded?(this.ensureFields(),a.html`${this.templateHelp(e,t)}${this.fields?.template(e,r.autoDeepObject(this.originalValue))||""}`):this.templatePreview(e,t)}templateLabel(e,t){const i=this.config.label||"(Group)";return a.html`<div class=${l.classMap(this.classesForLabel())}>
${this.templateIconValidation(e,t)}
<label>${i}</label>
</div>`}get value(){return this.fields?u.default({},this.originalValue,this.fields.value):this.originalValue}templatePreview(e,t){return this.config.previewFields?a.html`${this.templateHelp(e,t)}
<div class="selective__field__preview">
${c.repeat(this.config.previewFields,(e=>e),(i=>this.templatePreviewField(e,t,i)))}
</div>`:a.html`${this.templateHelp(e,t)}`}templatePreviewField(e,t,i){let s=i;for(const e of this.config.fields||[])if(e.key===i){s=e.label||s;break}return a.html`<div class="selective__field__preview__line">
<strong>${s}:</strong> ${o.findPreviewValue(this.currentValue||{},[i],i)}
</div>`}}t.GroupField=d},995:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListFieldItem=t.ListField=void 0;const s=i(2501),r=i(9963),n=i(5614),a=i(2439),l=i(900),o=i(8700),u=i(8224),c=i(7857),d=i(449);class h extends(n.SortableMixin(r.Field)){constructor(e,t,i,s="list"){super(e,t,i,s),this.config=t,this.items=null,this.usingAutoFields=!1,this.ListItemCls=p,this.sortableUi.listeners.add("sort",this.handleSort.bind(this))}get allowAdd(){const e=this.value;for(const t of this.rules.getRulesForZone())if(!t.allowAdd(e))return!1;return!0}get allowRemove(){const e=this.value;for(const t of this.rules.getRulesForZone())if(!t.allowRemove(e))return!1;return!0}get allowSimple(){return!this.config.isComplex}createFields(e){return new this.types.globals.FieldsCls(this.types,{fields:e,isGuessed:this.usingAutoFields,parentKey:this.fullKey,previewField:this.config.previewField,previewFields:this.config.previewFields,previewType:this.config.previewType},this.globalConfig)}ensureItems(e){if(null===this.items){this.items=[];let t=this.config.fields||[];for(const i of this.originalValue||[]){0===t.length&&(this.usingAutoFields=!0,t=new this.types.globals.AutoFieldsCls({}).guessFields(i),this.config.fields=t);const r=this.createFields(t);r.updateOriginal(e,i);for(const t of r.fields)t.updateOriginal(e,s.autoDeepObject(i||r.guessDefaultValue()));this.items.push(new this.ListItemCls(this,r))}}return this.items}handleAddItem(e,t,i){const r=this.ensureItems(t),n=this.config.fields||[],a=this.createFields(n);a.updateOriginal(t,i);for(const e of a.fields)e.updateOriginal(t,s.autoDeepObject(a.guessDefaultValue()));const l=new this.ListItemCls(this,a);l.isExpanded=!0,r.push(l),this.render()}handleDeleteItem(e,t){const i=this.items||[];e.stopPropagation(),i.splice(t,1);const s=i.slice(t);for(const e of s)e.fields.lock();this.lock(),document.addEventListener(o.EVENT_UNLOCK,(()=>{for(const e of s)e.fields.unlock();this.unlock(),this.render()}),{once:!0}),this.render()}handleSort(e,t){const i=[],s=this.items||[],r=Math.max(t,e),n=Math.min(t,e);let a=1;e>t&&(a=-1);for(let l=0;l<s.length;l++)l<n||l>r?(i[l]=s[l],i[l].fields.lock()):l===t?(i[l]=s[e],i[l].fields.lock()):(i[l]=s[l+a],i[l].fields.lock());this.items=i,this.lock(),document.addEventListener(o.EVENT_UNLOCK,(()=>{for(const e of i)e.fields.unlock();this.unlock(),this.render()}),{once:!0}),this.render()}get isClean(){if(null===this.items)return!0;if(this.isLocked)return!1;if(null!==this.items&&this.originalValue&&this.originalValue.length!==this.items.length)return!1;for(const e of this.items||[])if(!e.fields.isClean)return!1;return!0}get isValid(){if(null===this.items)return!0;for(const e of this.items)if(!e.fields.isValid)return!1;return!0}get length(){return this.items?.length||0}templateEmpty(e,t,i){return a.html` <div
class="selective__list__item selective__list__item--empty"
data-index=${i}
>
${this.config.emptyLabel||"No items in list"}
</div>`}templateFooter(e,t){return this.allowAdd?a.html`<div class="selective__field__actions">
<button
class="selective__action--add"
@click=${i=>{this.handleAddItem(i,e,t)}}
>
${this.config.addLabel||"Add"}
</button>
</div>`:a.html``}templateHeader(e,t){const i=this.ensureItems(e);if(!i.length)return a.html``;const s=[];let r=this.allowSimple,n=!0,l=!0;for(const e of i)e.fields.isSimple&&e.fields.allowSimple||(r=!1),e.isExpanded||(n=!1),e.isExpanded&&(l=!1);return r?a.html``:(s.push(a.html`<div
?disabled=${n}
class="selective__action selective__action--expand selective__tooltip--bottom-left"
data-tip="Expand all"
@click=${()=>{for(const e of i)e.isExpanded=!0;this.render()}}
>
<i class="material-icons">unfold_more</i>
</div>`),s.push(a.html`<div
?disabled=${l}
class="selective__action selective__action--collapse selective__tooltip--bottom-left"
data-tip="Collapse all"
@click=${()=>{for(const e of i)e.isExpanded=!1;this.render()}}
>
<i class="material-icons">unfold_less</i>
</div>`),a.html`<div class="selective__field__actions">${s}</div>`)}templateInput(e,t){return a.html`${this.templateHelp(e,t)}
<div class="selective__list">
${d.repeat(this.items||[],(e=>e.uid),((t,i)=>{const r=new s.DeepObject(i<this.originalValue?.length?this.originalValue[i]:t.fields.guessDefaultValue());return t.template(e,r,i)}))}
${this.items?.length?"":this.templateEmpty(e,t,0)}
</div>
${this.templateErrors(e,t)}`}get value(){if(null===this.items)return this.originalValue||[];const e=[];for(const t of this.items)e.push(t.fields.value);return e}}t.ListField=h;class p extends(u.UuidMixin(l.Base)){constructor(e,t){super(),this.listField=e,this.fields=t,this.isExpanded=!1}handleCollapseItem(){this.isExpanded=!1,this.listField.render()}handleExpandItem(){this.isExpanded=!0,this.listField.render()}template(e,t,i){return this.listField.allowSimple&&this.fields.allowSimple&&this.fields.isSimple?this.templateSimple(e,t,i):this.isExpanded?this.templateExpanded(e,t,i):this.templateCollapsed(e,t,i)}templateCollapsed(e,t,i){this.fields.updateOriginal(e,t,!0);const s=this.listField.length>1,r=this.listField.sortableUi,n=[],l=[];return s&&n.push(a.html`<div class="selective__list__item__drag">
<i class="material-icons">drag_indicator</i>
</div>`),l.push(this.templateRemove(e,t,i)),a.html` <div
class=${c.classMap({selective__list__item:!0,"selective__list__item--collapsed":!0,"selective__list__item--no-drag":this.listField.length<=1,selective__sortable:!0})}
draggable=${s?"true":"false"}
data-index=${i}
@dragenter=${r.handleDragEnter.bind(r)}
@dragleave=${r.handleDragLeave.bind(r)}
@dragover=${r.handleDragOver.bind(r)}
@dragstart=${r.handleDragStart.bind(r)}
@drop=${r.handleDrop.bind(r)}
>
<div class="selective__field__actions selective__field__actions--pre">
${n}
</div>
<div
class="selective__list__item__preview"
data-item-uid=${this.uid}
@click=${this.handleExpandItem.bind(this)}
>
${this.templatePreviewValue(e,t,i)}
</div>
<div class="selective__field__actions selective__field__actions--post">
${l}
</div>
</div>`}templateExpanded(e,t,i){const s=this.listField.sortableUi;return a.html` <div
class="selective__list__item selective__list__item--expanded selective__sortable"
data-index=${i}
@dragenter=${s.handleDragEnter.bind(s)}
@dragleave=${s.handleDragLeave.bind(s)}
@dragover=${s.handleDragOver.bind(s)}
@drop=${s.handleDrop.bind(s)}
>
<div
class="selective__list__fields__header"
@click=${this.handleCollapseItem.bind(this)}
>
<span class="material-icons">keyboard_arrow_down</span>
<div class="selective__list__item__preview">
${this.templatePreviewValue(e,t,i)}
</div>
</div>
<div class="selective__list__fields">
${this.fields.template(e,t)}
</div>
</div>`}templatePreviewValue(e,t,i){return this.fields.templatePreviewValue(e,t,i)}templateRemove(e,t,i){return this.listField.allowRemove?a.html`<div
class="selective__action selective__action--delete selective__tooltip--left"
data-item-uid=${this.uid}
@click=${e=>{this.listField.handleDeleteItem(e,i)}}
aria-label="Delete item"
data-tip="Delete item"
>
<i class="material-icons icon icon--delete">remove_circle</i>
</div>`:a.html``}templateSimple(e,t,i){const s=this.listField.length>1,r=this.listField.sortableUi,n=[],l=[];return s&&n.push(a.html`<div class="selective__list__item__drag">
<i class="material-icons">drag_indicator</i>
</div>`),l.push(this.templateRemove(e,t,i)),a.html` <div
class="selective__list__item selective__list__item--simple selective__sortable"
draggable=${s?"true":"false"}
data-index=${i}
@dragenter=${r.handleDragEnter.bind(r)}
@dragleave=${r.handleDragLeave.bind(r)}
@dragover=${r.handleDragOver.bind(r)}
@dragstart=${r.handleDragStart.bind(r)}
@drop=${r.handleDrop.bind(r)}
>
<div class="selective__field__actions selective__field__actions--pre">
${n}
</div>
${this.fields.template(e,t)}
<div class="selective__field__actions selective__field__actions--post">
${l}
</div>
</div>`}}t.ListFieldItem=p},9162:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NumberField=void 0;const s=i(9963),r=i(2439),n=i(7857);class a extends s.Field{constructor(e,t,i,s="text"){super(e,t,i,s),this.config=t}handleInput(e){const t=e.target;this.currentValue=parseFloat(t.value)||void 0,this.render()}templateInput(e,t){const i=this.currentValue||"";return r.html`${this.templateHelp(e,t)}
<div class=${n.classMap(this.classesForInput())}>
<input
type="number"
id="${this.uid}"
placeholder=${this.config.placeholder||""}
@input=${this.handleInput.bind(this)}
max=${void 0===this.config.max?"":this.config.max}
min=${void 0===this.config.min?"":this.config.min}
step=${this.config.step||1}
value=${i}
/>
</div>
${this.templateErrors(e,t)}`}}t.NumberField=a},9521:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RadioField=void 0;const s=i(9963),r=i(9145),n=i(2439),a=i(3402);class l extends(r.OptionMixin(s.Field)){constructor(e,t,i,s="checkboxMulti"){super(e,t,i,s),this.config=t}handleInput(e){const t=a.findParentByClassname(e.target,"selective__options__option");t&&(this.currentValue=t.dataset.value,this.render())}templateInput(e,t){return n.html`${this.templateHelp(e,t)}
${this.templateOptions(e,t,{handleInput:this.handleInput.bind(this),isMulti:!1,isOptionSelected:e=>this.currentValue===e.value},this.config.options)}
${this.templateErrors(e,t)}`}}t.RadioField=l},5978:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TextField=void 0;const s=i(9963),r=i(2439),n=i(7857);class a extends s.Field{constructor(e,t,i,s="text"){super(e,t,i,s),this.config=t}templateInput(e,t){const i=this.currentValue||"";return r.html`${this.templateHelp(e,t)}
<div class=${n.classMap(this.classesForInput())}>
<input
type="text"
id="${this.uid}"
placeholder=${this.config.placeholder||""}
@input=${this.handleInput.bind(this)}
value=${i}
/>
</div>
${this.templateErrors(e,t)}`}}t.TextField=a},5208:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TextareaField=void 0;const s=i(9963),r=i(2439),n=i(7857);class a extends s.Field{constructor(e,t,i,s="textarea"){super(e,t,i,s),this.config=t}templateInput(e,t){const i=this.currentValue||"";return r.html` ${this.templateHelp(e,t)}
<div class=${n.classMap(this.classesForInput())}>
<textarea
id=${this.uid}
rows=${this.config.rows||6}
placeholder=${this.config.placeholder||""}
@input=${this.handleInput.bind(this)}
wrap=${void 0===this.config.wrap?"soft":this.config.wrap}
>
${i}</textarea
>
</div>
${this.templateErrors(e,t)}`}}t.TextareaField=a},6285:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TimeField=void 0;const s=i(9963),r=i(2439),n=i(3909),a=i(7857);class l extends s.Field{constructor(e,t,i,s="text"){super(e,t,i,s),this.config=t}cleanOriginalValue(e){return(e=super.cleanOriginalValue(e))&&n.DataType.isString(e)&&e.length>5&&(e=e.slice(0,5)),e}templateInput(e,t){const i=this.currentValue||"";return r.html`${this.templateHelp(e,t)}
<div class=${a.classMap(this.classesForInput())}>
<input
type="time"
id="${this.uid}"
@input=${this.handleInput.bind(this)}
value=${i}
/>
</div>
${this.templateErrors(e,t)}`}}t.TimeField=l},8081:function(e,t,i){"use strict";var s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.VariantField=void 0;const r=i(2501),n=i(9963),a=i(2439),l=i(3402),o=s(i(2378)),u=i(449);class c extends n.Field{constructor(e,t,i,s="variant"){super(e,t,i,s),this.config=t,this.usingAutoFields=!1}createFields(){const e=this.variant||this.originalValue?._variant||this.config.default;if(!e)return;void 0===this.variant&&(this.variant=e);const t=(this.config.variants[e]||{}).fields||[];return new this.types.globals.FieldsCls(this.types,{fields:t,isGuessed:this.usingAutoFields,parentKey:this.fullKey},this.globalConfig)}ensureFields(){this.fields||(this.fields=this.createFields())}handleVariantClick(e){const t=e.target,i=l.findParentByClassname(t,"selective__variant__variant")?.dataset.variant;i&&i!==this.variant&&(this.variant=i,this.fields=void 0,this.render())}get isClean(){return!this.fields||(!this.originalValue||this.originalValue._variant===this.variant)&&this.fields.isClean}get isValid(){return!this.fields||this.fields.isValid}templateInput(e,t){return this.ensureFields(),a.html`${this.templateHelp(e,t)}${this.fields?.template(e,r.autoDeepObject(this.originalValue))||""}`}templateInputStructure(e,t){return a.html`<div class="selective__field__input__structure">
${this.templateVariants(e,t)}${this.templateInput(e,t)}
</div>`}templateVariants(e,t){const i=this.config.variants,s=Object.keys(i).sort();return a.html`<div class="selective__variant__variants">
<label>${this.config.variantLabel||"Variant"}:</label>
${u.repeat(s,(e=>e),(e=>a.html`
<button
?disabled=${this.variant!==e&&this.fields&&!this.fields.isClean}
class="selective__variant__variant ${this.variant===e?"selective__variant__variant--selected selective__button--primary":""}"
data-variant=${e}
@click=${this.handleVariantClick.bind(this)}
>
${i[e].label||e}
</button>
`))}
</div>`}templateWrapper(e,t){return this.ensureFields(),super.templateWrapper(e,t)}get value(){return this.fields?o.default({},this.originalValue,this.fields.value,{_variant:this.variant}):this.originalValue}}t.VariantField=c},5765:function(e,t,i){"use strict";var s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Fields=void 0;const r=i(9459),n=i(2439),a=i(900),l=i(3720),o=i(3909),u=i(2501),c=i(8224),d=s(i(2378)),h=i(449);class p extends(c.UuidMixin(l.DataMixin(a.Base))){constructor(e,t,i){super(),this.types=e,this.config=t,this.globalConfig=i,this.isLocked=!1,this.fields=[];for(const e of this.config.fields||[])this.addField(e)}addField(e){e.parentKey=this.config.parentKey,e.isGuessed=this.config.isGuessed;const t=this.types.fields.newFromKey(e.type,this.types,e,this.globalConfig);t?this.fields.push(t):console.error(`Unable to add field for unknown field type: ${e.type}.`)}get allowSimple(){return!this.config.previewField&&!this.config.previewFields}guessDefaultValue(){return this.fields.length>1?{}:""}get isClean(){for(const e of this.fields)if(!e.isClean)return!1;return!0}get isSimple(){if(this.fields.length>1)return!1;for(const e of this.fields)if(!e.isSimple)return!1;return!0}get isValid(){for(const e of this.fields)if(!e.isValid)return!1;return!0}lock(){this.isLocked=!0;for(const e of this.fields)e.lock()}get previewFields(){let e=this.config.previewField||this.config.previewFields||[];return o.DataType.isArray(e)||(e=[e]),e}template(e,t){return this.fields.length?this.isSimple?n.html` ${this.updateOriginal(e,t)}
${this.fields[0].template(e,t)}`:n.html`<div class="selective__fields">
${this.updateOriginal(e,t)}
${h.repeat(this.fields,(e=>e.uuid),(i=>n.html` ${i.template(e,t)} `))}
</div>`:n.html``}templatePreviewValue(e,t,i){const s=`{ Item ${void 0!==i?i+1:""} }`,n=r.findOrGuessPreviewValue(this.value,this.previewFields,s);return r.templatePreviewValue(n,this.config.previewType?this.config.previewType:r.PreviewTypes.Text,s)}unlock(){this.isLocked=!1;for(const e of this.fields)e.unlock()}updateOriginal(e,t,i=!1){if(!this.isLocked&&(this.originalValue=t,i))for(const i of this.fields)i.updateOriginal(e,t)}get value(){if(!this.fields.length)return null;if(this.allowSimple&&this.isSimple&&!this.fields[0].key)return this.fields[0].value;const e=new u.DeepObject(d.default({},this?.originalValue?.obj));for(const t of this.fields)e.set(t.key,t.value);return e.obj}}t.Fields=p},326:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LengthRule=void 0;const s=i(8850),r=i(3909);class n extends s.Rule{constructor(e){super(e),this.defaultMessage="Value needs to have the correct length.",this.config=e}allowAdd(e){return!(e&&(e=this.cleanValue(e),this.config.max&&e.length>=this.config.max.value))}allowRemove(e){return!(e&&(e=this.cleanValue(e),this.config.min&&e.length<=this.config.min.value))}cleanValue(e){return r.DataType.isString(e)&&(e=e.trim()),e}validate(e){return!e||r.DataType.isArray(e)&&0===e.length?null:(e=this.cleanValue(e),this.config.min&&e.length<this.config.min.value?this.config.min.message||this.message:this.config.max&&e.length>this.config.max.value?this.config.max.message||this.message:null)}}t.LengthRule=n},1800:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MatchRule=void 0;const s=i(8850),r=i(3909);class n extends s.Rule{constructor(e){super(e),this.defaultMessage="Value needs to match the validation rule.",this.config=e,this.patternCache={}}cachePattern(e,t){return e in this.patternCache||(this.patternCache[e]=new RegExp(t)),this.patternCache[e]}validate(e){if(!e)return null;let t=this.config.allowed;if(t){if(t.pattern&&!this.cachePattern("allowed",t.pattern).test(e))return t.message||this.message;if(t.values&&t.values.length){let i=!1;for(const s of t.values)if(r.DataType.isRegExp(s)){if(s.test(e)){i=!0;break}}else if(s===e){i=!0;break}if(!i)return t.message||this.message}}if(t=this.config.excluded,t){if(t.pattern&&this.cachePattern("excluded",t.pattern).test(e))return t.message||this.message;if(t.values)for(const i of t.values)if(r.DataType.isRegExp(i)){if(i.test(e))return t.message||this.message}else if(i===e)return t.message||this.message}return null}}t.MatchRule=n},5644:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PatternRule=void 0;const s=i(8850);class r extends s.Rule{constructor(e){super(e),this.config=e,this.defaultMessage=`Value needs to match the pattern: ${this.config.pattern}`}validate(e){return e?(this.pattern||(this.pattern=new RegExp(this.config.pattern)),this.pattern.test(e)?null:this.message):null}}t.PatternRule=r},8683:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RangeRule=void 0;const s=i(8850),r=i(3909);class n extends s.Rule{constructor(e){super(e),this.defaultMessage="Value needs to be a number in range.",this.config=e}allowAdd(e){return!(e&&(e=this.cleanValue(e),this.config.max&&e.length>=this.config.max.value))}allowRemove(e){return!(e&&(e=this.cleanValue(e),this.config.min&&e.length<=this.config.min.value))}cleanValue(e){return r.DataType.isString(e)&&(e=e.trim()),e}validate(e){if(!e)return null;if(r.DataType.isArray(e)){if(this.config.min&&e.length<this.config.min.value)return this.config.min.message||this.message;if(this.config.max&&e.length>this.config.max.value)return this.config.max.message||this.message}else{if(e=parseFloat(e),isNaN(e))return this.message;if(this.config.min&&e<this.config.min.value)return this.config.min.message||this.message;if(this.config.max&&e>this.config.max.value)return this.config.max.message||this.message}return null}}t.RangeRule=n},713:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RequireRule=void 0;const s=i(8850),r=i(3909);class n extends s.Rule{constructor(e){super(e),this.defaultMessage="Value is required. Cannot be empty.",this.config=e}validate(e){if(!e)return this.message;if(r.DataType.isArray(e)&&e.length<1)return this.message;try{if(!(e=e.trim()).length)return this.message}catch(e){if(!(e instanceof TypeError))throw e}for(const t of this.config.alternativeEmpties||[])if(e===t)return this.message;return null}}t.RequireRule=n},6665:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ValidationResult=t.Validation=t.ValidationLevel=t.DEFAULT_ZONE_KEY=void 0;const s=i(900),r=i(8224);var n;t.DEFAULT_ZONE_KEY="default",function(e){e.Info="info",e.Warning="warning",e.Error="error"}(n=t.ValidationLevel||(t.ValidationLevel={})),t.Validation=class{constructor(e){this.rules=e,this.zoneToResults={}}addResult(e,t){this.getResults(t).push(e)}filterResults(e,t){return this.getResults(t).filter((t=>t.level===e))}getResults(e,i){if(e=e||t.DEFAULT_ZONE_KEY,this.zoneToResults[e]||(this.zoneToResults[e]=[]),i){const t=e=>i===n.Info?e.level===n.Info:i!==n.Warning||e.level===n.Info||e.level===n.Warning;return this.zoneToResults[e].filter(t)}return this.zoneToResults[e]}hasAnyResults(e,t){if(null===e){for(const e of this.zones)if(this.hasAnyResults(e,t))return!0;return!1}return this.getResults(e,t).length>0}validate(e,t){let i=!1;for(const s of this.rules.getRulesForZone(t)){const r=s.validate(e);r&&(this.addResult(new a(r,s.level),t),i=!0)}return i}get zones(){return Object.keys(this.zoneToResults)}};class a extends(r.UuidMixin(s.Base)){constructor(e,t=n.Error){super(),this.message=e,this.level=t}}t.ValidationResult=a},8850:(e,t,i)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Rule=t.Rules=void 0;const s=i(6665),r=i(900);t.Rules=class{constructor(e){this.zoneToRules={},this.types=e}addRuleFromConfig(e,t=s.DEFAULT_ZONE_KEY){const i=this.types.newFromKey(e.type,e);i?this.getRulesForZone(t).push(i):console.error(`Unable to add validation rule for unknown validation type: ${e.type}`)}getRulesForZone(e=s.DEFAULT_ZONE_KEY){return this.zoneToRules[e]||(this.zoneToRules[e]=[]),this.zoneToRules[e]}get zones(){return Object.keys(this.zoneToRules)}};class n extends r.Base{constructor(e){super(),this.defaultMessage="Value is invalid.",this.config=e,this.defaultLevel=s.ValidationLevel.Error}allowAdd(e){return!0}allowRemove(e){return!0}get level(){return this.config.level||this.defaultLevel}get message(){return this.config.message||this.defaultMessage}validate(e){return console.error("Validation check not defined."),null}}t.Rule=n},5056:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ClassManager=void 0,t.ClassManager=class{constructor(e){this.DefaultCls=e,this.classes={}}getByKey(e){return this.classes[e]?this.classes[e]:null}newFromKey(e,...t){return this.classes[e]?new this.classes[e](...t):this.DefaultCls?new this.DefaultCls(...t):null}registerClass(e,t){this.classes[e]=t}registerClasses(e){for(const t of Object.keys(e))this.registerClass(t,e[t])}}},3909:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DataType=void 0,t.DataType=class{static isArray(e){return Array.isArray?Array.isArray(e):Boolean(e)&&"object"==typeof e&&e.constructor===Array}static isBoolean(e){return"boolean"==typeof e}static isDate(e){return e instanceof Date}static isFunction(e){return"function"==typeof e}static isNumber(e){return"number"==typeof e&&isFinite(e)}static isNull(e){return null===e}static isObject(e){return Boolean(e)&