@xlabs-store/core 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/index.js +1 -1
- package/components/p-CQ2VND9-.js +1 -0
- package/components/p-CQQI-pRu.js +1 -0
- package/components/p-CkwLFDlS.js +1 -0
- package/components/p-CzHtwC1k.js +1 -0
- package/components/{p-BlvrLhyv.js → p-DqayamUz.js} +1 -1
- package/components/x-form-builder.js +1 -1
- package/components/x-icon-picker-dropdown-content.js +1 -1
- package/components/x-input-icon.js +1 -1
- package/components/x-login.js +1 -1
- package/components/x-table.js +1 -1
- package/dist/cjs/icons-BfHE2jcr.js +19261 -0
- package/dist/cjs/index.cjs.js +2 -2
- package/dist/cjs/{schema-builder-BKX4QdTc.js → schema-builder-DAwDwgIM.js} +98 -14
- package/dist/cjs/x-address_51.cjs.entry.js +115 -11
- package/dist/cjs/x-icon-picker-dropdown-content.cjs.entry.js +1 -1
- package/dist/collection/components/x-form-builder/services/schema/condition-builder.js +48 -6
- package/dist/collection/components/x-form-builder/services/schema/form-mapping.js +2 -2
- package/dist/collection/components/x-form-builder/utils/condition-engine.js +48 -6
- package/dist/collection/components/x-form-builder/x-form-builder.js +96 -6
- package/dist/collection/components/x-icon/icons.js +11462 -11492
- package/dist/collection/components/x-table/x-table.js +18 -4
- package/dist/esm/icons-CQ2VND9-.js +19259 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/{schema-builder-DlGEzg5B.js → schema-builder-CekbhOnD.js} +98 -14
- package/dist/esm/x-address_51.entry.js +115 -11
- package/dist/esm/x-icon-picker-dropdown-content.entry.js +1 -1
- package/dist/types/components/x-form-builder/types/common/field-types-enum.d.ts +1 -1
- package/dist/types/components/x-form-builder/types/fields/advanced-fields.d.ts +1 -0
- package/dist/types/components/x-form-builder/types/fields/form-field-union.d.ts +2 -2
- package/dist/types/components/x-form-builder/types/fields/layout-fields.d.ts +10 -1
- package/dist/types/components/x-form-builder/types/fields/special-input-fields.d.ts +3 -0
- package/dist/types/components/x-form-builder/x-form-builder.d.ts +2 -0
- package/dist/xlabs/index.esm.js +1 -1
- package/dist/xlabs/{p-45fda37b.entry.js → p-99c568fd.entry.js} +1 -1
- package/dist/xlabs/p-CQ2VND9-.js +1 -0
- package/dist/xlabs/p-CkwLFDlS.js +1 -0
- package/dist/xlabs/p-a4995e36.entry.js +1 -0
- package/dist/xlabs/xlabs.esm.js +1 -1
- package/package.json +1 -1
- package/components/p-BGNOiTqa.js +0 -1
- package/components/p-BgCjF74f.js +0 -1
- package/components/p-xf66Fag-.js +0 -1
- package/components/p-xzKm-BQN.js +0 -1
- package/dist/cjs/icons-DJ-kuboh.js +0 -19291
- package/dist/esm/icons-BgCjF74f.js +0 -19289
- package/dist/xlabs/p-239cf367.entry.js +0 -1
- package/dist/xlabs/p-BgCjF74f.js +0 -1
- package/dist/xlabs/p-xf66Fag-.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t}from"./p-DFADJBLL.js";class e{static number(t){return Number(t)}static string(t){return String(t)}static boolean(t){return Boolean(t)}static date(t){return new Date(t)}static detect(t,r){switch(t.type){case"number":return e.number(r);case"email":case"text":case"textarea":case"phone":case"url":case"password":case"color":case"file":return e.string(r);case"switch":return e.boolean(r);case"date":case"datetime":return e.date(r);default:return r}}}function r(t,e){if(!t||!e)return;const r=e.split(".");let s=t;for(const t of r){if(!s||"object"!=typeof s||!(t in s))return;s=s[t]}return s}class s{get mapping(){return{equals:this.equals.bind(this),notEquals:this.notEquals.bind(this),contains:this.contains.bind(this),notContains:this.notContains.bind(this),greaterThan:this.greaterThan.bind(this),lessThan:this.lessThan.bind(this),greaterThanOrEqual:this.greaterThanOrEqual.bind(this),lessThanOrEqual:this.lessThanOrEqual.bind(this),isEmpty:this.isEmpty.bind(this),isNotEmpty:this.isNotEmpty.bind(this),startsWith:this.startsWith.bind(this),endsWith:this.endsWith.bind(this),in:this.in.bind(this),notIn:this.notIn.bind(this)}}equals(t,r,s){return"string"==typeof(s=e.detect(r,s))&&"number"==typeof t.value||"number"==typeof s&&"string"==typeof t.value?String(s)===String(t.value):t.value===s}notEquals(t,r,s){return"string"==typeof(s=e.detect(r,s))&&"number"==typeof t.value||"number"==typeof s&&"string"==typeof t.value?String(s)!==String(t.value):t.value!==s}contains(t,r,s){return s=e.detect(r,s),Array.isArray(s)?s.some((e=>"string"==typeof e&&"number"==typeof t.value||"number"==typeof e&&"string"==typeof t.value?String(e)===String(t.value):e===t.value)):"string"==typeof s&&s.includes(String(t.value))}greaterThan(t,r,s){if("number"==typeof(s=e.detect(r,s))){const e="number"==typeof t.value?t.value:Number(t.value??NaN);return!!Number.isFinite(e)&&s>e}return!1}lessThan(t,r,s){if("number"==typeof(s=e.detect(r,s))){const e="number"==typeof t.value?t.value:Number(t.value??NaN);return!!Number.isFinite(e)&&s<e}return!1}isEmpty(t,r,s){return null==(s=e.detect(r,s))||""===s||Array.isArray(s)&&0===s.length}isNotEmpty(t,r,s){return!(null==(s=e.detect(r,s))||""===s||Array.isArray(s)&&0===s.length)}notContains(t,r,s){return s=e.detect(r,s),Array.isArray(s)?!s.some((e=>"string"==typeof e&&"number"==typeof t.value||"number"==typeof e&&"string"==typeof t.value?String(e)===String(t.value):e===t.value)):"string"!=typeof s||!s.includes(String(t.value))}greaterThanOrEqual(t,r,s){if("number"==typeof(s=e.detect(r,s))){const e="number"==typeof t.value?t.value:Number(t.value??NaN);return!!Number.isFinite(e)&&s>=e}return!1}lessThanOrEqual(t,r,s){if("number"==typeof(s=e.detect(r,s))){const e="number"==typeof t.value?t.value:Number(t.value??NaN);return!!Number.isFinite(e)&&s<=e}return!1}startsWith(t,r,s){return"string"==typeof(s=e.detect(r,s))&&s.startsWith(String(t.value))}endsWith(t,r,s){return"string"==typeof(s=e.detect(r,s))&&s.endsWith(String(t.value))}in(t,r,s){return s=e.detect(r,s),Array.isArray(t.value)?t.value.some((t=>"string"==typeof t&&"number"==typeof s||"number"==typeof t&&"string"==typeof s?String(t)===String(s):t===s)):"string"==typeof t.value&&t.value.split(",").map((t=>t.trim())).some((t=>"number"==typeof s?t===String(s):t===s))}notIn(t,r,s){return s=e.detect(r,s),Array.isArray(t.value)?!t.value.some((t=>"string"==typeof t&&"number"==typeof s||"number"==typeof t&&"string"==typeof s?String(t)===String(s):t===s)):"string"!=typeof t.value||!t.value.split(",").map((t=>t.trim())).some((t=>"number"==typeof s?t===String(s):t===s))}run(t,e,s){return function(t,e,s){if(!t||!t.field||!t.operator)return!1;const{field:n,operator:i,value:a}=t,o=function(t,e,s){if(t)return t.startsWith("$")?r(s,t.substring(1)):r(e,t)}(n,e,s);return(()=>{switch(i){case"equals":return"string"==typeof o&&"number"==typeof a||"number"==typeof o&&"string"==typeof a?String(o)===String(a):o===a;case"notEquals":return"string"==typeof o&&"number"==typeof a||"number"==typeof o&&"string"==typeof a?String(o)!==String(a):o!==a;case"contains":return Array.isArray(o)?o.some((t=>"string"==typeof t&&"number"==typeof a||"number"==typeof t&&"string"==typeof a?String(t)===String(a):t===a)):"string"==typeof o&&o.includes(String(a));case"notContains":return Array.isArray(o)?!o.some((t=>"string"==typeof t&&"number"==typeof a||"number"==typeof t&&"string"==typeof a?String(t)===String(a):t===a)):"string"!=typeof o||!o.includes(String(a));case"greaterThan":return Number(o)>Number(a);case"lessThan":return Number(o)<Number(a);case"greaterThanOrEqual":return Number(o)>=Number(a);case"lessThanOrEqual":return Number(o)<=Number(a);case"isNotEmpty":case"notEmpty":return null!=o&&""!==o&&!(Array.isArray(o)&&0===o.length);case"isEmpty":case"empty":return null==o||""===o||Array.isArray(o)&&0===o.length;case"startsWith":return String(o).startsWith(String(a));case"endsWith":return String(o).endsWith(String(a));case"in":return Array.isArray(a)?a.some((t=>"string"==typeof t&&"number"==typeof o||"number"==typeof t&&"string"==typeof o?String(t)===String(o):t===o)):"string"==typeof a&&a.split(",").map((t=>t.trim())).some((t=>"number"==typeof o?t===String(o):t===o));case"notIn":return Array.isArray(a)?!a.some((t=>"string"==typeof t&&"number"==typeof o||"number"==typeof t&&"string"==typeof o?String(t)===String(o):t===o)):"string"!=typeof a||!a.split(",").map((t=>t.trim())).some((t=>"number"==typeof o?t===String(o):t===o));default:return!1}})()}({field:t.field,operator:t.condition,value:t.value},e,s)}}class n extends s{builder;get form(){return this.builder.form}get schema(){return this.builder.schema}get conditions(){return this.schema.conditions||[]}executors=[];isCheckingAll=!1;constructor(t){super(),this.builder=t,this.extract()}checkAll(){this.isCheckingAll=!0,this.executors.forEach((t=>t())),this.isCheckingAll=!1,this.builder.notifySubscribers()}extract(){this.conditions.forEach((t=>{"when"in t?this.advanced(t):"conditions"in t?this.group(t):this.condition(t)}))}getEvaluationValues(){const t={};return this.form.mappingById.forEach(((e,r)=>{e.control&&(t[r]=e.control.value)})),this.form.mapping.forEach(((e,r)=>{e.control&&(t[r]=e.control.value)})),t}group(t){const e=()=>{const e=this.getEvaluationValues();this.builder.callEvent("beforeConditionCheck",t,e);const r=t.conditions.map((t=>this.run(t,e,this.builder.context))),s="and"===t.operator?r.every(Boolean):r.some(Boolean);s&&t.actions.forEach((t=>{this.execute(t.action,t.actionField)})),this.builder.callEvent("afterConditionCheck",t,e,s),this.isCheckingAll||this.builder.notifySubscribers()};t.conditions.forEach((t=>{const r=this.form.mapping.get(t.field);r&&"control"in r&&r.control&&r.control.subscribe((()=>e()))})),this.executors.push(e),e()}advanced(t){const e=()=>{const e=this.getEvaluationValues();this.builder.callEvent("beforeConditionCheck",t,e);const r=t.when.rules.map((r=>!(!(this.form.mappingById.get(r.field)??this.form.mapping.get(r.field))&&!r.field?.startsWith("$"))&&this.run({id:t.id,field:r.field,condition:r.operator,value:r.value,action:"show",actionField:"none"},e,this.builder.context))),s="or"===t.when.operator?r.some(Boolean):r.every(Boolean);(s?t.then:t.else||[]).forEach((t=>{const e=this.form.mappingById.get(t.target)??this.form.mapping.get(t.target);this.execute(t.action,e?e.id||e.name:t.target,t.value)})),this.builder.callEvent("afterConditionCheck",t,e,s),this.isCheckingAll||this.builder.notifySubscribers()};t.when.rules.forEach((t=>{const r=this.form.mappingById.get(t.field)??this.form.mapping.get(t.field);r&&"control"in r&&r.control&&r.control.subscribe((()=>e()))})),this.executors.push(e),e()}condition(t){const e=()=>{const e=this.form.mappingById.get(t.field)||this.form.mapping.get(t.field);if(e&&"control"in e&&e.control){const r=e.control.value,s=this.getEvaluationValues();this.builder.callEvent("beforeConditionCheck",t,r);const n=this.run(t,s,this.builder.context);n&&this.execute(t.action,t.actionField),this.builder.callEvent("afterConditionCheck",t,r,n),this.isCheckingAll||this.builder.notifySubscribers()}},r=this.form.mappingById.get(t.field)||this.form.mapping.get(t.field);r&&"control"in r&&r.control&&(r.control.subscribe((()=>e())),this.executors.push(e)),e()}execute(t,e,r){const s="all"===e?Array.from(this.form.mapping.keys()):[e];for(const e of s){const s=this.form.mappingById.get(e)||this.form.mapping.get(e);if(console.log(`[ConditionEngine] Executing action '${t}' on field '${e}'. Field found:`,!!s,"Value:",r),s)switch(t){case"show":s.hidden=!1;break;case"hide":s.hidden=!0;break;case"enable":s.disabled=!1;break;case"disable":s.disabled=!0;break;case"require":s.required=!0;break;case"unrequire":s.required=!1;break;case"setContent":s.content=r;break;case"setLabel":s.label=String(r)}}}}class i{builder;constructor(t){this.builder=t,this.extract()}extract(){Array.from(this.builder.form.mapping.values()).forEach((t=>{"number"===t.type&&t.formula&&this.setupFormula(t)}))}setupFormula(t){const e=t.formula,r=this.getDependencies(e),s=()=>{const r=this.getEvaluationValues(),s=this.evaluate(e,r),n=t.control;n&&n.value!==s&&n.setValue(s)},n=new Set;r.forEach((t=>{if(n.has(t))return;const e=this.builder.form.mappingById.get(t)||this.builder.form.mapping.get(t);e&&e.control&&(e.control.subscribe((()=>{s()})),n.add(t))})),setTimeout((()=>s()),0)}getDependencies(t){return(t.match(/[\$]{1,2}[a-zA-Z0-9_-]+/g)||[]).map((t=>t.replace(/^[\$]{1,2}/,"")))}getEvaluationValues(){const t={};return this.builder.form.mappingById.forEach(((e,r)=>{e.control&&(t[r]=e.control.value)})),this.builder.form.mapping.forEach(((e,r)=>{e.control&&(t[r]=e.control.value)})),t}evaluate(t,e){try{let r=t;const s=this.getDependencies(t);s.sort(((t,e)=>e.length-t.length)),s.forEach((t=>{const s=void 0!==e[t]?e[t]:0,n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\$[\\$]?${n}(\\b|[^a-zA-Z0-9_-])`,"g");r=r.replace(i,((t,e)=>String(s||0)+(e||"")))}));const n=r.replace(/[^0-9\+\-\*\/\(\)\. ]/g,"");if(!n.trim())return 0;const i=new Function(`return ${n}`)(),a=Number(i);return isFinite(a)?a:0}catch(e){return console.warn("Formula Evaluation Error:",e,"Formula:",t),0}}}class a{_value;_errors=null;_status="VALID";_parent=null;_validators=[];_asyncValidators=[];_subscribers=new Set;_touched=!1;_dirty=!1;constructor(t,e){t&&(this._validators=t),e&&(this._asyncValidators=e)}get value(){return this._value}get errors(){return this._errors}get status(){return this._status}get valid(){return"VALID"===this._status}get invalid(){return"INVALID"===this._status}get pending(){return"PENDING"===this._status}get disabled(){return"DISABLED"===this._status}get parent(){return this._parent}get touched(){return this._touched}get untouched(){return!this._touched}get dirty(){return this._dirty}get pristine(){return!this._dirty}runValidators(){let t=null;for(const e of this._validators){const r=e(this);r&&(t=t||{},Object.assign(t,r))}return t}async runAsyncValidators(){let t=null;for(const e of this._asyncValidators){const r=await e(this._value);r&&(t=t||{},Object.assign(t,r))}return t}async updateValueAndValidity(t={}){const{emitEvent:e=!0}=t;if("DISABLED"!==this._status){if(this._errors=this.runValidators(),this._status=this._errors?"INVALID":"VALID",this._asyncValidators.length>0&&!this._errors){this._status="PENDING",e&&this.notifySubscribers();const t=await this.runAsyncValidators();t?(this._errors={...this._errors??{},...t},this._status="INVALID"):this._status="VALID"}e&&(this.notifySubscribers(),this._parent&&this._parent.updateValueAndValidity({emitEvent:!0}))}}markAsTouched(){this._touched=!0}markAsUntouched(){this._touched=!1}markAsDirty(){this._dirty=!0}markAsPristine(){this._dirty=!1}disable(){this._status="DISABLED",this.notifySubscribers()}enable(){this._status="VALID",this.updateValueAndValidity()}setValidators(t){this._validators=t,this.updateValueAndValidity()}setAsyncValidators(t){this._asyncValidators=t,this.updateValueAndValidity()}clearValidators(){this._validators=[],this.updateValueAndValidity()}clearAsyncValidators(){this._asyncValidators=[],this.updateValueAndValidity()}registerValidator(t){this._validators.push(t),this.updateValueAndValidity()}registerValidatorAsync(t){this._asyncValidators.push(t),this.updateValueAndValidity()}setParent(t){this._parent=t}subscribe(t){return this._subscribers.add(t),()=>this._subscribers.delete(t)}notifySubscribers(){this._subscribers.forEach((t=>t(this._value)))}setValueInternal(t){this._value=t}hasError(t){return!!this._errors&&void 0!==this._errors[t]}getError(t){return this._errors?this._errors[t]:null}}class o extends a{constructor(t=null,e,r){let s=[],n=[];Array.isArray(e)?(s=e,n=r||[]):e&&(s=e.validators||[],n=e.asyncValidators||[]),super(s,n),this.setValueInternal(t),this.updateValueAndValidity({emitEvent:!1})}setValue(t,e={}){const{emitEvent:r=!0}=e;this.setValueInternal(t),this.markAsDirty(),this.updateValueAndValidity({emitEvent:r})}patchValue(t,e={}){this.setValue(t,e)}reset(t=null,e={}){this.setValueInternal(t),this.markAsPristine(),this.markAsUntouched(),this.updateValueAndValidity(e)}}class u extends a{_controls=[];constructor(t,e,r){let s=[],n=[];Array.isArray(e)?(s=e,n=r||[]):e&&(s=e.validators||[],n=e.asyncValidators||[]),super(s,n),this._controls=t,t.forEach((t=>{t.setParent(this)})),this.updateValueAndValidity({emitEvent:!1})}get controls(){return this._controls}get value(){return this._controls.filter((t=>!t.disabled)).map((t=>t.value))}get length(){return this._controls.length}at(t){return this._controls[t]||null}push(t){this._controls.push(t),t.setParent(this),this.updateValueAndValidity()}insert(t,e){this._controls.splice(t,0,e),e.setParent(this),this.updateValueAndValidity()}removeAt(t){this._controls[t]&&(this._controls.splice(t,1),this.updateValueAndValidity())}setControl(t,e){this._controls[t]&&(this._controls[t]=e,e.setParent(this),this.updateValueAndValidity())}clear(){this._controls=[],this.updateValueAndValidity()}setValue(t,e={}){if(t.length!==this._controls.length)throw new Error("setValue: value array length must match controls array length");t.forEach(((t,e)=>{this._controls[e].setValue(t,{emitEvent:!1})})),this.markAsDirty(),this.updateValueAndValidity(e)}patchValue(t,e={}){t.forEach(((t,e)=>{this._controls[e]&&this._controls[e].patchValue(t,{emitEvent:!1})})),this.updateValueAndValidity(e)}reset(t=[],e={}){this._controls.forEach(((e,r)=>{e.reset(t[r],{emitEvent:!1})})),this.markAsPristine(),this.markAsUntouched(),this.updateValueAndValidity(e)}getRawValue(){return this._controls.map((t=>t.value))}}class h extends a{_controls={};constructor(t,e,r){let s=[],n=[];Array.isArray(e)?(s=e,n=r||[]):e&&(s=e.validators||[],n=e.asyncValidators||[]),super(s,n),this._controls=t,Object.values(t).forEach((t=>{t.setParent(this)})),this.updateValueAndValidity({emitEvent:!1})}get controls(){return this._controls}get value(){const t={};return Object.keys(this._controls).forEach((e=>{const r=this._controls[e];r.disabled||(t[e]=r.value)})),t}setValue(t,e={}){Object.keys(t).forEach((e=>{if(!this._controls[e])throw new Error(`Cannot find form control with name: ${e}`);this._controls[e].setValue(t[e],{emitEvent:!1})})),this.markAsDirty(),this.updateValueAndValidity(e)}patchValue(t,e={}){Object.keys(t).forEach((e=>{this._controls[e]&&this._controls[e].patchValue(t[e],{emitEvent:!1})})),this.updateValueAndValidity(e)}reset(t={},e={}){Object.keys(this._controls).forEach((e=>{this._controls[e].reset(t[e],{emitEvent:!1})})),this.markAsPristine(),this.markAsUntouched(),this.updateValueAndValidity(e)}addControl(t,e){this._controls[t]=e,e.setParent(this),this.updateValueAndValidity()}removeControl(t){this._controls[t]&&(delete this._controls[t],this.updateValueAndValidity())}setControl(t,e){this._controls[t]&&this.removeControl(t),this.addControl(t,e)}contains(t){return void 0!==this._controls[t]}get(t){const e=Array.isArray(t)?t:t.split(".");if(0===e.length)return null;let r=this._controls[e[0]]||null;for(let t=1;t<e.length&&r;t++)if(r instanceof h)r=r.controls[e[t]]||null;else{if(!(r instanceof u))return null;{const s=parseInt(e[t],10);r=r.at(s)||null}}return r}async updateValueAndValidity(t={}){const{emitEvent:e=!0}=t;if("DISABLED"===this._status)return;this._errors=this.runValidators();let r=!1;const s={};for(const t of Object.keys(this._controls)){const e=this._controls[t];e.invalid&&(r=!0,e.errors&&(s[t]=e.errors))}r?(this._errors=this._errors||{},Object.assign(this._errors,s),this._status="INVALID"):this._status=this._errors?"INVALID":"VALID",e&&(this.notifySubscribers(),this._parent&&await this._parent.updateValueAndValidity({emitEvent:!0}))}getRawValue(){const t={};return Object.keys(this._controls).forEach((e=>{t[e]=this._controls[e].value})),t}}class c{static required(t){const e=t.value;return null==e||""===e||Array.isArray(e)&&0===e.length?{required:!0}:null}static email(t){return t.value?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t.value)?null:{email:!0}:null}static min(t){return e=>!e.value||isNaN(e.value)?null:e.value<t?{min:{min:t,actual:e.value}}:null}static max(t){return e=>!e.value||isNaN(e.value)?null:e.value>t?{max:{max:t,actual:e.value}}:null}static minLength(t){return e=>{if(null==e.value||""===e.value)return null;const r=String(e.value);return r.length<t?{minLength:{minLength:t,actualLength:r.length}}:null}}static maxLength(t){return e=>{if(null==e.value||""===e.value)return null;const r=String(e.value);return r.length>t?{maxLength:{maxLength:t,actualLength:r.length}}:null}}static pattern(t){return e=>e.value?("string"==typeof t?new RegExp(`^(?:${t})$`):t).test(e.value)?null:{pattern:{requiredPattern:t,actualValue:e.value}}:null}static hasUppercase(t){return t.value?/[A-Z]/.test(t.value)?null:{hasUppercase:!0}:null}static hasNumber(t){return t.value?/[0-9]/.test(t.value)?null:{hasNumber:!0}:null}static hasSpecialChar(t){return t.value?/[!@#$%^&*(),.?":{}|<>]/.test(t.value)?null:{hasSpecialChar:!0}:null}static integer(t){if(null==t.value||""===t.value)return null;const e=Number(t.value);return!isNaN(e)&&Number.isInteger(e)?null:{integer:!0}}static number(t){if(null==t.value||""===t.value)return null;const e=Number(t.value);return isNaN(e)?{number:!0}:null}static sameAs(t){return e=>{if(!e.value)return null;const r=e.parent;if(!r||"function"!=typeof r.get)return null;const s=r.get(t);return s?e.value===s.value?null:{sameAs:{fieldName:t}}:null}}}class l{control(t,e,r){return new o(t,e,r)}group(t,e){const r={};return Object.keys(t).forEach((e=>{const s=t[e];r[e]=s instanceof a?s:Array.isArray(s)?new o(s[0],s[1],s[2]):new o(s)})),new h(r,e?.validators,e?.asyncValidators)}array(t,e){const r=t.map((t=>t instanceof a?t:Array.isArray(t)?new o(t[0],t[1],t[2]):new o(t)));return new u(r,e?.validators,e?.asyncValidators)}}const m=["text","password","email","number","phone","url","date","datetime","time","color","checkbox","radio","file","range","textarea","select","switch","slider","rate","tags","daterange","tree-select","transfer","cascader","auto-complete","editor","location","input","captcha","address","table"];class f{static isEmpty(t){return null==t||""===t}static isNotEmpty(t){return null!=t&&""!==t}static isFieldGroup(t){return"elements"in t&&Array.isArray(t.elements)}static isInputField(t){return m.includes(t)}static builderFromControl(t){try{const e=f.buildValidators(t),r=new o(t.defaultValue??t.targetKeys??t.defaultChecked??"",e);return t.control=r,{field:t,control:r}}catch(e){throw new Error(`Error building control for field ${t?.name}: ${e}`)}}static buildValidators(t){const e=[];if(t.required&&e.push(c.required),"minLength"in t&&!f.isEmpty(t.minLength)&&e.push(c.minLength(t.minLength)),"maxLength"in t&&!f.isEmpty(t.maxLength)&&e.push(c.maxLength(t.maxLength)),"pattern"in t&&!f.isEmpty(t.pattern)&&e.push(c.pattern(t.pattern)),"email"===t.type&&e.push(c.email),"min"in t&&!f.isEmpty(t.min)&&e.push(c.min(Number(t.min))),"max"in t&&!f.isEmpty(t.max)&&e.push(c.max(Number(t.max))),t.hasUppercase&&e.push(c.hasUppercase),t.hasNumber&&e.push(c.hasNumber),t.hasSpecialChar&&e.push(c.hasSpecialChar),"number"===t.type){const r=t;"integer"===r.numberType?e.push(c.integer):"decimal"===r.numberType&&e.push(c.number)}if(Array.isArray(t.validators)&&t.validators.length>0)for(const r of t.validators)switch(r.type){case"required":e.includes(c.required)||e.push(c.required);break;case"minLength":f.isEmpty(r.value)||e.push(c.minLength(Number(r.value)));break;case"maxLength":f.isEmpty(r.value)||e.push(c.maxLength(Number(r.value)));break;case"pattern":f.isEmpty(r.value)||e.push(c.pattern(r.value));break;case"min":f.isEmpty(r.value)||e.push(c.min(Number(r.value)));break;case"max":f.isEmpty(r.value)||e.push(c.max(Number(r.value)));break;case"hasUppercase":e.includes(c.hasUppercase)||e.push(c.hasUppercase);break;case"hasNumber":e.includes(c.hasNumber)||e.push(c.hasNumber);break;case"hasSpecialChar":e.includes(c.hasSpecialChar)||e.push(c.hasSpecialChar);break;case"integer":e.includes(c.integer)||e.push(c.integer);break;case"number":e.includes(c.number)||e.push(c.number);break;case"sameAs":f.isEmpty(r.value)||e.push(c.sameAs(r.value))}return e}static translate(t,e){return t?e?t.replace(/\{\{(\w+)\}\}/g,((t,r)=>void 0!==e[r]?e[r]:`{{${r}}}`)):t:""}static messageValidator(){const e=t("validation",{},{});return{required:e.required||"This field is required",email:e.email||"Invalid email",min:e.min||"Value is too small",max:e.max||"Value is too large",minLength:e.minLength||"Value is too short",maxLength:e.maxLength||"Value is too long",pattern:e.pattern||"Invalid pattern",hasUppercase:e.hasUppercase||"Uppercase letter required",hasNumber:e.hasNumber||"Number required",hasSpecialChar:e.hasSpecialChar||"Special character required",type:e.type||"Invalid type",integer:e.integer||"Value must be an integer",number:e.number||"Value must be a number",custom:e.custom||"Invalid value"}}}class g extends h{builder;mapping=new Map;mappingById=new Map;mappingObject={};fb=new l;get schema(){return this.builder.schema}is_custom_submit=!1;constructor(t){super({}),this.builder=t,this.mapping=this.toMapping(),this.mappingObject=this.toMappingObject(),this.toFormMapping(this.mappingObject,this)}toMapping(){const t=e=>{const r=new Map;if(!e||!Array.isArray(e))return r;for(const s of e)if(s&&("button"===s.type&&"submit"===s.htmlType&&(this.is_custom_submit=!0),s.name&&r.set(s.name,s),s.id&&(this.mappingById.set(s.id,s),s.name||r.set(s.id,s)),f.isFieldGroup(s)&&t(s.elements).forEach(((t,e)=>r.set(e,t))),("tabs"===s.type||String(s.type).startsWith("columns-"))&&s.items&&Array.isArray(s.items)))for(const e of s.items)e&&Array.isArray(e.elements)&&t(e.elements).forEach(((t,e)=>r.set(e,t)));return r},e=this.schema?.elements||this.schema?.fields,r=this.schema?.actions||[],s=t(e);if(r&&Array.isArray(r))for(const t of r)t.id&&(this.mappingById.set(t.id,t),t.id.startsWith("action-")||s.set(t.id,t));return s}toMappingObject(){const t=(t,e)=>{const r=e.name;if(!r)return;const s=r.split(".");let n=t;for(let t=0;t<s.length;t++){let r=s[t];const i=r.endsWith("[]"),a=i?r.replace("[]",""):r,o=t===s.length-1;if(i){Array.isArray(n[a])||(n[a]=[{}]);const t=n[a];t[0]&&"object"==typeof t[0]&&!Array.isArray(t[0])||(t[0]={}),n=t[0]}else{if(o){n[a]||(n[a]=e.name);break}n[a]||(n[a]={}),n=n[a]}}},e={};for(const[r,s]of Array.from(this.mapping.entries()))t(e,s);return e}toFormMapping(t,e){for(const[r,s]of Object.entries(t))if(Array.isArray(s)){const t=this.fb.array([]);for(const e of s)if(e instanceof Object&&!(e instanceof Array)){const r=this.fb.group({});this.toFormMapping(e,r),t.push(r)}else{const r=this.mapping.get(e);if(!r){console.warn(`Field with name ${e} not found in mapping.`);continue}const{control:s}=f.builderFromControl(r);this.validateOnUseApi(r),s.subscribe((t=>{this.builder.callEvent("onFieldChange",r.name,t)})),t.push(s)}e instanceof h?e.addControl(r,t):e.push(t)}else if(s instanceof Object){const t=e,n=new h({});this.toFormMapping(s,n),t.addControl(r,n)}else{const t=this.mapping.get(s);if(!t){console.warn(`Field with name ${s} not found in mapping.`);continue}const n=e;this.validateOnUseApi(t);const{control:i}=f.builderFromControl(t);if(i.subscribe((e=>{this.builder.callEvent("onFieldChange",t.name,e)})),n.addControl(r,i),this.builder.showErrorCheckbox){const e=this.fb.control(!1);n.addControl(`isError_${t.name}`,e)}}}validateOnUseApi(t){}markAllAsTouched(){for(const[t,e]of Array.from(this.mapping.entries()))e.control&&e.control.markAsTouched()}onSubmit(){}onReset(){}get value(){const t=super.value;return this.cleanSubmitData(t),t}getRawValue(){const t=super.getRawValue();return this.cleanSubmitData(t),t}cleanSubmitData(t){if(t)for(const[e,r]of Array.from(this.mapping.entries()))r&&!1===r.submitData&&r.name&&this.deletePath(t,r.name)}deletePath(t,e){if(!t||!e)return;const r=e.split(".");let s=t;for(let t=0;t<r.length-1;t++){const e=r[t];if(e.endsWith("[]")){const n=s[e.replace("[]","")];if(Array.isArray(n)){const e=r.slice(t+1).join(".");n.forEach((t=>this.deletePath(t,e)))}return}if(s=s[e],!s)return}const n=r[r.length-1];n.endsWith("[]")?delete s[n.replace("[]","")]:delete s[n]}}class p{static validate(t){const e=[];if(!t)return e.push("Schema is undefined or null."),e;const r=t.elements||t.fields;return r&&Array.isArray(r)?(0===r.length&&e.push("Schema elements array is empty."),r.forEach(((t,r)=>{this.validateField(t,`elements[${r}]`,e)}))):e.push('Schema must contain an "elements" or "fields" array.'),e}static validateField(t,e,r){t?(t.type||r.push(`Field at ${e} is missing required property "type".`),["panel","grid","container"].includes(t.type)&&"elements"in t&&Array.isArray(t.elements)&&t.elements.forEach(((t,s)=>{this.validateField(t,`${e}.elements[${s}]`,r)}))):r.push(`Field at ${e} is undefined or null.`)}}class b{schema;showErrorCheckbox=!1;form;context={};get fields(){return this.schema?.elements||this.schema?.fields||[]}events={};plugins=[];_subscribers=new Set;on(t,e){return this.events[t]=e,this}conditions;formulas;constructor(t,e={}){this.schema=t,this.showErrorCheckbox=!!e.showErrorCheckbox,this.form=new g(this);const r=p.validate(this.schema);r.length>0&&console.error("SchemaBuilder Error: The provided schema is invalid.",r),this.conditions=new n(this),this.formulas=new i(this),this.callEvent("onInit")}callEvent(t,...e){const r=this.events[t];r&&r({builder:this,form:this.form,schema:this.schema},...e)}async use(t,e){return this.plugins.push(t),await t(this,e),this}subscribe(t){return this._subscribers.add(t),()=>this._subscribers.delete(t)}notifySubscribers(){this._subscribers.forEach((t=>t(this.form.value)))}}export{b as S,f as U}
|