@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.
Files changed (49) hide show
  1. package/components/index.js +1 -1
  2. package/components/p-CQ2VND9-.js +1 -0
  3. package/components/p-CQQI-pRu.js +1 -0
  4. package/components/p-CkwLFDlS.js +1 -0
  5. package/components/p-CzHtwC1k.js +1 -0
  6. package/components/{p-BlvrLhyv.js → p-DqayamUz.js} +1 -1
  7. package/components/x-form-builder.js +1 -1
  8. package/components/x-icon-picker-dropdown-content.js +1 -1
  9. package/components/x-input-icon.js +1 -1
  10. package/components/x-login.js +1 -1
  11. package/components/x-table.js +1 -1
  12. package/dist/cjs/icons-BfHE2jcr.js +19261 -0
  13. package/dist/cjs/index.cjs.js +2 -2
  14. package/dist/cjs/{schema-builder-BKX4QdTc.js → schema-builder-DAwDwgIM.js} +98 -14
  15. package/dist/cjs/x-address_51.cjs.entry.js +115 -11
  16. package/dist/cjs/x-icon-picker-dropdown-content.cjs.entry.js +1 -1
  17. package/dist/collection/components/x-form-builder/services/schema/condition-builder.js +48 -6
  18. package/dist/collection/components/x-form-builder/services/schema/form-mapping.js +2 -2
  19. package/dist/collection/components/x-form-builder/utils/condition-engine.js +48 -6
  20. package/dist/collection/components/x-form-builder/x-form-builder.js +96 -6
  21. package/dist/collection/components/x-icon/icons.js +11462 -11492
  22. package/dist/collection/components/x-table/x-table.js +18 -4
  23. package/dist/esm/icons-CQ2VND9-.js +19259 -0
  24. package/dist/esm/index.js +2 -2
  25. package/dist/esm/{schema-builder-DlGEzg5B.js → schema-builder-CekbhOnD.js} +98 -14
  26. package/dist/esm/x-address_51.entry.js +115 -11
  27. package/dist/esm/x-icon-picker-dropdown-content.entry.js +1 -1
  28. package/dist/types/components/x-form-builder/types/common/field-types-enum.d.ts +1 -1
  29. package/dist/types/components/x-form-builder/types/fields/advanced-fields.d.ts +1 -0
  30. package/dist/types/components/x-form-builder/types/fields/form-field-union.d.ts +2 -2
  31. package/dist/types/components/x-form-builder/types/fields/layout-fields.d.ts +10 -1
  32. package/dist/types/components/x-form-builder/types/fields/special-input-fields.d.ts +3 -0
  33. package/dist/types/components/x-form-builder/x-form-builder.d.ts +2 -0
  34. package/dist/xlabs/index.esm.js +1 -1
  35. package/dist/xlabs/{p-45fda37b.entry.js → p-99c568fd.entry.js} +1 -1
  36. package/dist/xlabs/p-CQ2VND9-.js +1 -0
  37. package/dist/xlabs/p-CkwLFDlS.js +1 -0
  38. package/dist/xlabs/p-a4995e36.entry.js +1 -0
  39. package/dist/xlabs/xlabs.esm.js +1 -1
  40. package/package.json +1 -1
  41. package/components/p-BGNOiTqa.js +0 -1
  42. package/components/p-BgCjF74f.js +0 -1
  43. package/components/p-xf66Fag-.js +0 -1
  44. package/components/p-xzKm-BQN.js +0 -1
  45. package/dist/cjs/icons-DJ-kuboh.js +0 -19291
  46. package/dist/esm/icons-BgCjF74f.js +0 -19289
  47. package/dist/xlabs/p-239cf367.entry.js +0 -1
  48. package/dist/xlabs/p-BgCjF74f.js +0 -1
  49. package/dist/xlabs/p-xf66Fag-.js +0 -1
@@ -1 +0,0 @@
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,s){switch(t.type){case"number":return e.number(s);case"email":case"text":case"textarea":case"phone":case"url":case"password":case"color":case"file":return e.string(s);case"switch":return e.boolean(s);case"date":case"datetime":return e.date(s);default:return s}}}function s(t,e){if(!t||!e)return;const s=e.split(".");let r=t;for(const t of s){if(!r||"object"!=typeof r||!(t in r))return;r=r[t]}return r}class r{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,s,r){return r=e.detect(s,r),t.value===r}notEquals(t,s,r){return r=e.detect(s,r),t.value!==r}contains(t,s,r){return r=e.detect(s,r),Array.isArray(r)?r.includes(t.value):"string"==typeof r&&r.includes(String(t.value))}greaterThan(t,s,r){if("number"==typeof(r=e.detect(s,r))){const e="number"==typeof t.value?t.value:Number(t.value??NaN);return!!Number.isFinite(e)&&r>e}return!1}lessThan(t,s,r){if("number"==typeof(r=e.detect(s,r))){const e="number"==typeof t.value?t.value:Number(t.value??NaN);return!!Number.isFinite(e)&&r<e}return!1}isEmpty(t,s,r){return null==(r=e.detect(s,r))||""===r||Array.isArray(r)&&0===r.length}isNotEmpty(t,s,r){return!(null==(r=e.detect(s,r))||""===r||Array.isArray(r)&&0===r.length)}notContains(t,s,r){return r=e.detect(s,r),Array.isArray(r)?!r.includes(t.value):"string"!=typeof r||!r.includes(String(t.value))}greaterThanOrEqual(t,s,r){if("number"==typeof(r=e.detect(s,r))){const e="number"==typeof t.value?t.value:Number(t.value??NaN);return!!Number.isFinite(e)&&r>=e}return!1}lessThanOrEqual(t,s,r){if("number"==typeof(r=e.detect(s,r))){const e="number"==typeof t.value?t.value:Number(t.value??NaN);return!!Number.isFinite(e)&&r<=e}return!1}startsWith(t,s,r){return"string"==typeof(r=e.detect(s,r))&&r.startsWith(String(t.value))}endsWith(t,s,r){return"string"==typeof(r=e.detect(s,r))&&r.endsWith(String(t.value))}in(t,s,r){return r=e.detect(s,r),Array.isArray(t.value)?t.value.includes(r):"string"==typeof t.value&&t.value.split(",").map((t=>t.trim())).includes(String(r))}notIn(t,s,r){return r=e.detect(s,r),Array.isArray(t.value)?!t.value.includes(r):"string"!=typeof t.value||!t.value.split(",").map((t=>t.trim())).includes(String(r))}run(t,e,r){return function(t,e,r){if(!t||!t.field||!t.operator)return!1;const{field:i,operator:n,value:a}=t,o=function(t,e,r){if(t)return t.startsWith("$")?s(r,t.substring(1)):s(e,t)}(i,e,r);return(()=>{switch(n){case"equals":return o===a;case"notEquals":return o!==a;case"contains":return Array.isArray(o)?o.includes(a):"string"==typeof o&&o.includes(String(a));case"notContains":return Array.isArray(o)?!o.includes(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.includes(o):"string"==typeof a&&a.split(",").map((t=>t.trim())).includes(String(o));case"notIn":return Array.isArray(a)?!a.includes(o):"string"!=typeof a||!a.split(",").map((t=>t.trim())).includes(String(o));default:return!1}})()}({field:t.field,operator:t.condition,value:t.value},e,r)}}class i extends r{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,s)=>{e.control&&(t[s]=e.control.value)})),this.form.mapping.forEach(((e,s)=>{e.control&&(t[s]=e.control.value)})),t}group(t){const e=()=>{const e=this.getEvaluationValues();this.builder.callEvent("beforeConditionCheck",t,e);const s=t.conditions.map((t=>this.run(t,e,this.builder.context))),r="and"===t.operator?s.every(Boolean):s.some(Boolean);r&&t.actions.forEach((t=>{this.execute(t.action,t.actionField)})),this.builder.callEvent("afterConditionCheck",t,e,r),this.isCheckingAll||this.builder.notifySubscribers()};t.conditions.forEach((t=>{const s=this.form.mapping.get(t.field);s&&"control"in s&&s.control&&s.control.subscribe((()=>e()))})),this.executors.push(e),e()}advanced(t){const e=()=>{const e=this.getEvaluationValues();this.builder.callEvent("beforeConditionCheck",t,e);const s=t.when.rules.map((s=>!(!(this.form.mappingById.get(s.field)??this.form.mapping.get(s.field))&&!s.field?.startsWith("$"))&&this.run({id:t.id,field:s.field,condition:s.operator,value:s.value,action:"show",actionField:"none"},e,this.builder.context))),r="or"===t.when.operator?s.some(Boolean):s.every(Boolean);(r?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,r),this.isCheckingAll||this.builder.notifySubscribers()};t.when.rules.forEach((t=>{const s=this.form.mappingById.get(t.field)??this.form.mapping.get(t.field);s&&"control"in s&&s.control&&s.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 s=e.control.value,r=this.getEvaluationValues();this.builder.callEvent("beforeConditionCheck",t,s);const i=this.run(t,r,this.builder.context);i&&this.execute(t.action,t.actionField),this.builder.callEvent("afterConditionCheck",t,s,i),this.isCheckingAll||this.builder.notifySubscribers()}},s=this.form.mappingById.get(t.field)||this.form.mapping.get(t.field);s&&"control"in s&&s.control&&(s.control.subscribe((()=>e())),this.executors.push(e)),e()}execute(t,e,s){const r="all"===e?Array.from(this.form.mapping.keys()):[e];for(const e of r){const r=this.form.mappingById.get(e)||this.form.mapping.get(e);if(console.log(`[ConditionEngine] Executing action '${t}' on field '${e}'. Field found:`,!!r,"Value:",s),r)switch(t){case"show":r.hidden=!1;break;case"hide":r.hidden=!0;break;case"enable":r.disabled=!1;break;case"disable":r.disabled=!0;break;case"require":r.required=!0;break;case"unrequire":r.required=!1;break;case"setContent":r.content=s;break;case"setLabel":r.label=String(s)}}}}class n{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,s=this.getDependencies(e),r=()=>{const s=this.getEvaluationValues(),r=this.evaluate(e,s),i=t.control;i&&i.value!==r&&i.setValue(r)},i=new Set;s.forEach((t=>{if(i.has(t))return;const e=this.builder.form.mappingById.get(t)||this.builder.form.mapping.get(t);e&&e.control&&(e.control.subscribe((()=>{r()})),i.add(t))})),setTimeout((()=>r()),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,s)=>{e.control&&(t[s]=e.control.value)})),this.builder.form.mapping.forEach(((e,s)=>{e.control&&(t[s]=e.control.value)})),t}evaluate(t,e){try{let s=t;const r=this.getDependencies(t);r.sort(((t,e)=>e.length-t.length)),r.forEach((t=>{const r=void 0!==e[t]?e[t]:0,i=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=new RegExp(`\\$[\\$]?${i}(\\b|[^a-zA-Z0-9_-])`,"g");s=s.replace(n,((t,e)=>String(r||0)+(e||"")))}));const i=s.replace(/[^0-9\+\-\*\/\(\)\. ]/g,"");if(!i.trim())return 0;const n=new Function(`return ${i}`)(),a=Number(n);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 s=e(this);s&&(t=t||{},Object.assign(t,s))}return t}async runAsyncValidators(){let t=null;for(const e of this._asyncValidators){const s=await e(this._value);s&&(t=t||{},Object.assign(t,s))}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,s){let r=[],i=[];Array.isArray(e)?(r=e,i=s||[]):e&&(r=e.validators||[],i=e.asyncValidators||[]),super(r,i),this.setValueInternal(t),this.updateValueAndValidity({emitEvent:!1})}setValue(t,e={}){const{emitEvent:s=!0}=e;this.setValueInternal(t),this.markAsDirty(),this.updateValueAndValidity({emitEvent:s})}patchValue(t,e={}){this.setValue(t,e)}reset(t=null,e={}){this.setValueInternal(t),this.markAsPristine(),this.markAsUntouched(),this.updateValueAndValidity(e)}}class h extends a{_controls=[];constructor(t,e,s){let r=[],i=[];Array.isArray(e)?(r=e,i=s||[]):e&&(r=e.validators||[],i=e.asyncValidators||[]),super(r,i),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,s)=>{e.reset(t[s],{emitEvent:!1})})),this.markAsPristine(),this.markAsUntouched(),this.updateValueAndValidity(e)}getRawValue(){return this._controls.map((t=>t.value))}}class u extends a{_controls={};constructor(t,e,s){let r=[],i=[];Array.isArray(e)?(r=e,i=s||[]):e&&(r=e.validators||[],i=e.asyncValidators||[]),super(r,i),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 s=this._controls[e];s.disabled||(t[e]=s.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 s=this._controls[e[0]]||null;for(let t=1;t<e.length&&s;t++)if(s instanceof u)s=s.controls[e[t]]||null;else{if(!(s instanceof h))return null;{const r=parseInt(e[t],10);s=s.at(r)||null}}return s}async updateValueAndValidity(t={}){const{emitEvent:e=!0}=t;if("DISABLED"===this._status)return;this._errors=this.runValidators();let s=!1;const r={};for(const t of Object.keys(this._controls)){const e=this._controls[t];e.invalid&&(s=!0,e.errors&&(r[t]=e.errors))}s?(this._errors=this._errors||{},Object.assign(this._errors,r),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 s=String(e.value);return s.length<t?{minLength:{minLength:t,actualLength:s.length}}:null}}static maxLength(t){return e=>{if(null==e.value||""===e.value)return null;const s=String(e.value);return s.length>t?{maxLength:{maxLength:t,actualLength:s.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 s=e.parent;if(!s||"function"!=typeof s.get)return null;const r=s.get(t);return r?e.value===r.value?null:{sameAs:{fieldName:t}}:null}}}class l{control(t,e,s){return new o(t,e,s)}group(t,e){const s={};return Object.keys(t).forEach((e=>{const r=t[e];s[e]=r instanceof a?r:Array.isArray(r)?new o(r[0],r[1],r[2]):new o(r)})),new u(s,e?.validators,e?.asyncValidators)}array(t,e){const s=t.map((t=>t instanceof a?t:Array.isArray(t)?new o(t[0],t[1],t[2]):new o(t)));return new h(s,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),s=new o(t.defaultValue??t.targetKeys??t.defaultChecked??"",e);return t.control=s,{field:t,control:s}}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 s=t;"integer"===s.numberType?e.push(c.integer):"decimal"===s.numberType&&e.push(c.number)}if(Array.isArray(t.validators)&&t.validators.length>0)for(const s of t.validators)switch(s.type){case"required":e.includes(c.required)||e.push(c.required);break;case"minLength":f.isEmpty(s.value)||e.push(c.minLength(Number(s.value)));break;case"maxLength":f.isEmpty(s.value)||e.push(c.maxLength(Number(s.value)));break;case"pattern":f.isEmpty(s.value)||e.push(c.pattern(s.value));break;case"min":f.isEmpty(s.value)||e.push(c.min(Number(s.value)));break;case"max":f.isEmpty(s.value)||e.push(c.max(Number(s.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(s.value)||e.push(c.sameAs(s.value))}return e}static translate(t,e){return t?e?t.replace(/\{\{(\w+)\}\}/g,((t,s)=>void 0!==e[s]?e[s]:`{{${s}}}`)):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 d extends u{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 s=new Map;if(!e||!Array.isArray(e))return s;for(const r of e)if(r&&("button"===r.type&&"submit"===r.htmlType&&(this.is_custom_submit=!0),r.name&&s.set(r.name,r),r.id&&(this.mappingById.set(r.id,r),r.name||s.set(r.id,r)),f.isFieldGroup(r)&&t(r.elements).forEach(((t,e)=>s.set(e,t))),"tabs"===r.type&&r.items&&Array.isArray(r.items)))for(const e of r.items)e&&Array.isArray(e.elements)&&t(e.elements).forEach(((t,e)=>s.set(e,t)));return s},e=this.schema?.elements||this.schema?.fields,s=this.schema?.actions||[],r=t(e);if(s&&Array.isArray(s))for(const t of s)t.id&&(this.mappingById.set(t.id,t),t.id.startsWith("action-")||r.set(t.id,t));return r}toMappingObject(){const t=(t,e)=>{const s=e.name;if(!s)return;const r=s.split(".");let i=t;for(let t=0;t<r.length;t++){let s=r[t];const n=s.endsWith("[]"),a=n?s.replace("[]",""):s,o=t===r.length-1;if(n){Array.isArray(i[a])||(i[a]=[{}]);const t=i[a];t[0]&&"object"==typeof t[0]&&!Array.isArray(t[0])||(t[0]={}),i=t[0]}else{if(o){i[a]||(i[a]=e.name);break}i[a]||(i[a]={}),i=i[a]}}},e={};for(const[s,r]of Array.from(this.mapping.entries()))t(e,r);return e}toFormMapping(t,e){for(const[s,r]of Object.entries(t))if(Array.isArray(r)){const t=this.fb.array([]);for(const e of r)if(e instanceof Object&&!(e instanceof Array)){const s=this.fb.group({});this.toFormMapping(e,s),t.push(s)}else{const s=this.mapping.get(e);if(!s){console.warn(`Field with name ${e} not found in mapping.`);continue}const{control:r}=f.builderFromControl(s);this.validateOnUseApi(s),r.subscribe((t=>{this.builder.callEvent("onFieldChange",s.name,t)})),t.push(r)}e instanceof u?e.addControl(s,t):e.push(t)}else if(r instanceof Object){const t=e,i=new u({});this.toFormMapping(r,i),t.addControl(s,i)}else{const t=this.mapping.get(r);if(!t){console.warn(`Field with name ${r} not found in mapping.`);continue}const i=e;this.validateOnUseApi(t);const{control:n}=f.builderFromControl(t);if(n.subscribe((e=>{this.builder.callEvent("onFieldChange",t.name,e)})),i.addControl(s,n),this.builder.showErrorCheckbox){const e=this.fb.control(!1);i.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,s]of Array.from(this.mapping.entries()))s&&!1===s.submitData&&s.name&&this.deletePath(t,s.name)}deletePath(t,e){if(!t||!e)return;const s=e.split(".");let r=t;for(let t=0;t<s.length-1;t++){const e=s[t];if(e.endsWith("[]")){const i=r[e.replace("[]","")];if(Array.isArray(i)){const e=s.slice(t+1).join(".");i.forEach((t=>this.deletePath(t,e)))}return}if(r=r[e],!r)return}const i=s[s.length-1];i.endsWith("[]")?delete r[i.replace("[]","")]:delete r[i]}}class b{static validate(t){const e=[];if(!t)return e.push("Schema is undefined or null."),e;const s=t.elements||t.fields;return s&&Array.isArray(s)?(0===s.length&&e.push("Schema elements array is empty."),s.forEach(((t,s)=>{this.validateField(t,`elements[${s}]`,e)}))):e.push('Schema must contain an "elements" or "fields" array.'),e}static validateField(t,e,s){t?(t.type||s.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,r)=>{this.validateField(t,`${e}.elements[${r}]`,s)}))):s.push(`Field at ${e} is undefined or null.`)}}class g{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 d(this);const s=b.validate(this.schema);s.length>0&&console.error("SchemaBuilder Error: The provided schema is invalid.",s),this.conditions=new i(this),this.formulas=new n(this),this.callEvent("onInit")}callEvent(t,...e){const s=this.events[t];s&&s({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{g as S,f as U}