@ngxviewbuilder/runtime 0.12.2 → 0.12.4
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/fesm2022/ngxviewbuilder-runtime-autocomplete-element-DaMuvB5p.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-avatar-element-DCy3AEHW.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-badge-element-Ci2NV1MC.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-breadcrumbs-element-Bcq5oGI8.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-button-element-DzJfdCcx.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-chart-element-BCg3CI8N.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-checkbox-element-Cj3HQvkO.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-column-p1eNMy75.mjs +43 -0
- package/fesm2022/ngxviewbuilder-runtime-custom-html-element-BMdxXckt.mjs +3 -0
- package/fesm2022/ngxviewbuilder-runtime-date-range-element-BE_9Ba_-.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-datepicker-element-BFwwyRt-.mjs +1 -0
- package/fesm2022/{ngxviewbuilder-runtime-divider-element-Bit-YRpc.mjs → ngxviewbuilder-runtime-divider-element-CbCCZ1Qu.mjs} +1 -1
- package/fesm2022/ngxviewbuilder-runtime-element-wrapper-EBaWVZvf.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-file-upload-element-BYU3tLZw.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-icon-element-CLqWvjKL.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-iframe-element-Bl74Zm6Y.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-image-element-iDSaX41Y.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-list-box-element-DrDTjcW5.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-list-grid-element-CgiY-Lcy.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-mark-for-check-on-property-change-WxfEoWah.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-message-card-element-60xyNliB.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-multi-select-element-DHqMGyjB.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-ngx-view-builder-api.service-BYA8UfCA.mjs +4 -0
- package/fesm2022/ngxviewbuilder-runtime-number-element-CdhEZPYp.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-number-stepper-element-f9KrH_YF.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-nvb-select-Dkh4SIap.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-page-title-element-8T25QlMQ.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-phone-input-element-CZCkF7lo.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-progress-bar-element-BqCwBXpQ.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-radio-element-CvVAePSa.mjs +1 -0
- package/fesm2022/{ngxviewbuilder-runtime-rich-text-element-DAl3vSxG.mjs → ngxviewbuilder-runtime-rich-text-element-D4knphJa.mjs} +2 -2
- package/fesm2022/ngxviewbuilder-runtime-router-outlet-element-BzouCbdg.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-select-button-element-CtysP-cz.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-select-element-Be-lGWkG.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-signature-pad-element-CJqDTYnO.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-single-checkbox-element-DrJcESGd.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-slider-element-CsTb-3m4.mjs +1 -0
- package/fesm2022/{ngxviewbuilder-runtime-spacer-element-BGJ-ObOf.mjs → ngxviewbuilder-runtime-spacer-element-OAgkc5so.mjs} +1 -1
- package/fesm2022/ngxviewbuilder-runtime-stats-card-element-CzjJKd-Y.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-table-element-C25OdqZn.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-text-element-0eMB6sBj.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-textarea-element-BRJA5Lzb.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-time-picker-element-3qN3oxZF.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-toast-element-CzKIkQVY.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-toggle-switch-element-D9svjkSP.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime-video-element-CliJnlMX.mjs +1 -0
- package/fesm2022/ngxviewbuilder-runtime.mjs +1 -1
- package/package.json +1 -1
- package/types/ngxviewbuilder-runtime.d.ts +254 -41
- package/fesm2022/ngxviewbuilder-runtime-autocomplete-element-DWbMobho.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-avatar-element-98vFX6ZL.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-badge-element-WdHbUp_X.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-breadcrumbs-element-qlHbgWfh.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-button-element-BWI56rGB.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-chart-element-wN98hSa2.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-checkbox-element-yAUJgMY7.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-column-CEOo23I_.mjs +0 -43
- package/fesm2022/ngxviewbuilder-runtime-custom-html-element-D7ezjkGw.mjs +0 -3
- package/fesm2022/ngxviewbuilder-runtime-date-range-element-kRoWWvXf.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-datepicker-element-Co2_JHM2.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-dynamic-text.pipe-BUJ4fCqt.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-element-wrapper-D0lfZvuW.mjs +0 -4
- package/fesm2022/ngxviewbuilder-runtime-file-upload-element-B1sGgTAJ.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-icon-element-BBV3IriU.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-iframe-element-DAKlSTTJ.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-image-element-Co9eNt6D.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-list-box-element-BkqVfq4H.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-list-grid-element-BsVooLf9.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-message-card-element-DOlB-FAw.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-multi-select-element-5YHKOX69.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-number-element-MNO3T8kR.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-number-stepper-element-Jl6DZNAb.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-nvb-select-DuPHFQk6.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-page-title-element-BdfBrnaW.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-phone-input-element-BDZkscMD.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-progress-bar-element-Dg7Y6-jq.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-radio-element-xscwN_Hs.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-router-outlet-element-BpGv-kkh.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-select-button-element-BPH_N-fd.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-select-element-B_FOlIzR.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-signature-pad-element-BxZMh4-H.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-single-checkbox-element-DZiHDP6i.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-slider-element-NBbgW-1w.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-stats-card-element-DUxzXyTC.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-table-element-yvDWlU-z.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-text-element-C9W3pPu7.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-textarea-element-55rqT93w.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-time-picker-element-C1p0lG_4.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-toast-element-Dc8tFqFS.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-toggle-switch-element-DEmC69ye.mjs +0 -1
- package/fesm2022/ngxviewbuilder-runtime-video-element-COR0eePU.mjs +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import*as d from"@angular/core";import{EventEmitter as Sr,Injectable as k,InjectionToken as vt,Injector as vr,Pipe as wt,inject as D,makeEnvironmentProviders as wr,signal as B}from"@angular/core";import{get as x,has as Pe,isEqual as j,set as xt,unset as Ct}from"lodash-es";import{Observable as xr,firstValueFrom as At,of as Pt,throwError as ne,timer as Cr}from"rxjs";import{HttpClient as Ar}from"@angular/common/http";import{NavigationEnd as Pr,Router as Dr}from"@angular/router";import{catchError as Tr,filter as Dt,map as De,retry as Er,scan as Mr,shareReplay as Tt,tap as de}from"rxjs/operators";import Ir from"jexl";import{states as Nr}from"jexl/dist/parser/states";import{ternaryStart as Or}from"jexl/dist/parser/handlers";import{__decorate as u}from"tslib";var b;(function(i){i["SELECT"]="select";i["AUTOCOMPLETE"]="autocomplete";i["MULTI_SELECT"]="multiSelect";i["DATEPICKER"]="datepicker";i["DATE_RANGE"]="dateRange";i["PAGE"]="page";i["PANEL"]="panel";i["OBJECT_PANEL"]="objectPanel";i["SPLITTER"]="splitter";i["EMPTY_BLOCK"]="emptyBlock";i["TEXTAREA"]="textarea";i["RICH_TEXT"]="richText";i["CUSTOM_HTML"]="customHtml";i["HTML_SNIPPET"]="htmlSnippet";i["RICH_TEXT_VIEWER"]="richTextViewer";i["TEXT"]="text";i["PHONE_INPUT"]="phoneInput";i["NUMBER"]="number";i["CHECKBOX"]="checkbox";i["SINGLE_CHECKBOX"]="singleCheckbox";i["SLIDER"]="slider";i["TOGGLE_BUTTON"]="toggleButton";i["TOGGLE_SWITCH"]="toggleSwitch";i["ROW"]="row";i["CODE"]="code";i["VISIBILITY"]="visibility";i["CHOICES"]="choices";i["VALIDATORS"]="validators";i["DROPDOWN"]="dropdown";i["RADIO"]="radio";i["DYNAMIC_PANEL"]="dynamicPanel";i["DYNAMIC_TABLE"]="dynamicTable";i["TABS"]="tabs";i["DIALOG"]="dialog";i["LIST_GRID"]="listGrid";i["MESSAGE_CARD"]="messageCard";i["TOAST"]="toast";i["BADGE"]="badge";i["STATS_CARD"]="statsCard";i["ACCORDION"]="accordion";i["PROGRESS_FLOW"]="progressFlow";i["PROGRESS_BAR"]="progressBar";i["TABS_PRO"]="tabsPro";i["CHART"]="chart";i["FILE_UPLOAD"]="fileUpload";i["IMAGE"]="image";i["VIDEO"]="video";i["IFRAME"]="iframe";i["ROUTER_OUTLET"]="routerOutlet";i["AVATAR"]="avatar";i["ICON"]="icon";i["DIVIDER"]="divider";i["SPACER"]="spacer";i["BREADCRUMBS"]="breadcrumbs";i["PAGE_TITLE"]="pageTitle";i["BUTTON"]="button";i["SELECT_BUTTON"]="selectButton";i["TABLE"]="table";i["COLUMN"]="column";i["DATA_SOURCE_ARGUMENTS"]="dataSourceArguments";i["NUMBER_STEPPER"]="numberStepper";i["TIME_PICKER"]="timePicker";i["SIGNATURE_PAD"]="signaturePad";i["LIST_BOX"]="listBox"})(b||(b={}));var g=class{listeners=[];namedListeners=new Map;destroyed=false;add(i){if(this.destroyed)return()=>void 0;this.listeners.push(i);return()=>this.remove(i)}subscribe(i){if(this.destroyed)return{unsubscribe:()=>void 0,closed:true};let e=false;const t=this.add(i);return{unsubscribe:()=>{if(e)return;e=true;t()},get closed(){return e}}}once(i){let e=()=>void 0;const t=r=>{e();i(r)};e=this.add(t);return e}remove(i){if(this.destroyed)return;this.listeners=this.listeners.filter(e=>e!==i)}clear(){this.listeners=[]}fire(i){if(this.destroyed)return;for(const e of[...this.listeners])this.safeInvoke(e,i)}addListener(i,e){if(this.destroyed)return()=>void 0;this.namedListeners.set(i,e);return()=>this.removeListener(i)}removeListener(i){if(this.destroyed)return;this.namedListeners.delete(i)}clearNamed(){this.namedListeners.clear()}listenerCount(i=true){return this.listeners.length+(i?this.namedListeners.size:0)}destroy(){if(this.destroyed)return;this.destroyed=true;this.clear();this.clearNamed()}fireListener(i){if(this.destroyed)return;for(const e of Array.from(this.namedListeners.values()))this.safeInvoke(e,i)}safeInvoke(i,e){try{i(e)}catch(t){if(typeof console!=="undefined"&&typeof console.error==="function")console.error("[EventEmitter] Listener execution failed.",t)}}};function P(i){if(i===null||i===void 0||typeof i!=="object")return i;try{if(typeof structuredClone==="function")return structuredClone(i)}catch{}try{return JSON.parse(JSON.stringify(i))}catch{return i}}function pe(i){if(!Z(i))return{};const e=P(i);return Z(e)?e:{}}function Z(i){return Boolean(i)&&typeof i==="object"&&!Array.isArray(i)}function Et(i){const e=(Array.isArray(i)?i:String(i??"").split(",")).map(t=>String(t??"").trim()).filter(t=>t.length>0);return Array.from(new Set(e))}const Mt={"automation.apply":"Apply","automation.featurePacks":"Feature packs","automation.expectedArray":"Expected a JSON array.","automation.expectedObject":"Expected a JSON object.","automation.format":"Format","automation.fragments":"Reusable fragments","automation.fragmentsHelp":"Reusable row and element snippets for fragmentRef usage.","automation.invalidJson":"Invalid JSON.","automation.none":"None","automation.pluginTabs":"Plugin tabs","automation.process":"Process state machine","automation.processHelp":"Stores states and transitions for approval or workflow logic.","automation.processStates":"Process states","automation.reload":"Reload","automation.rules":"Rules","automation.rulesHelp":"Central conditions that run on init, change or manual execution.","automation.subtitle":"Visual JSON-driven MVP for triggers, rules, process state and reusable fragments.","automation.title":"Automation studio","automation.triggers":"Triggers","automation.triggersHelp":"Runs actions on events like onLoad, valueChanged, pageChanged.","code.build":"Build","code.builder.clear":"Clear","code.close":"Close","code.edit":"Edit code","code.empty":"Empty expression","code.mode.builder":"Code builder","code.mode.code":"Code","code.save":"Save","code.selectExpression":"Select an expression field and click Edit.","common.add":"Add","common.all":"All","common.bottom":"Bottom","common.cancel":"Cancel","common.clear":"Clear","common.copy":"Copy","common.copied":"Copied","eventAction.section.presentation":"Label & icon","eventAction.section.naming":"Naming","eventAction.label.hintInternal":"Only names this action in the list here. The user never sees it.","eventAction.section.behaviour":"Conditions & safety","eventAction.section.confirm":"Confirmation","eventAction.section.toast":"Toast after success","eventAction.confirmOn":"On","variables.expressionEdit":"Edit expression","variables.expressionEmpty":"No expression","variables.expressionHint":"Reference fields and variables in braces, for example toNumber({el1}) + 10.","common.left":"Left","common.right":"Right","common.save":"Save","common.top":"Top","common.trbl":"Top/Right/Bottom/Left","logic.add":"Add expression","logic.edit":"Edit expression","logic.empty":"No logic expressions.","logic.expression":"Expression","logic.remove":"Remove expression","logic.type":"Logic type","confirm.actionMessage":"Are you sure you want to perform this action?","confirm.cancel":"Cancel","confirm.confirm":"Continue","confirm.dirtyMessage":"The form has unsaved changes. Continue?","confirm.dirtyTitle":"Unsaved changes","confirm.message":"Are you sure you want to continue?","confirm.title":"Confirmation","datePicker.apply":"Apply","datePicker.clear":"Clear","datePicker.max":"Max","datePicker.min":"Min","datePicker.select":"Select date","dialog.trigger.open":"Open dialog","dynamicPanel.addRow":"Add","dynamicPanel.deleteRow":"Delete","dynamicPanel.deleteTitle":"Delete row","dynamicPanel.empty":"Panel is empty, add a row","dynamicPanel.emptyBuilder":"Select this panel and double-click an element on the left, or drag one here.","dynamicPanel.emptyPanel":"Panel is empty","dynamicTable.addRow":"Add","dynamicTable.col.add":"Add","dynamicTable.col.checkbox":"Checkbox","dynamicTable.col.datepicker":"Datepicker","dynamicTable.col.multiSelect":"Multi-choice menu","dynamicTable.col.number":"Number input","dynamicTable.col.radio":"Radio","dynamicTable.col.select":"Select","dynamicTable.col.text":"Text input","dynamicTable.col.textarea":"Textarea","dynamicTable.deleteRowTitle":"Delete row","dynamicTable.empty":"No rows yet","dynamicTable.totalTemplateDefault":"Total: {total}","element.accordion":"Accordion","element.autocomplete":"Autocomplete","element.button":"Button","element.chart":"Chart","element.checkbox":"Checkbox group","element.datepicker":"Date picker","element.divider":"Divider","element.dynamicPanel":"Dynamic panel","element.dynamicTable":"Dynamic table","element.emptyBlock":"Empty block","element.fileUpload":"File upload","element.iframe":"IFrame","element.image":"Image","element.listGrid":"List / Grid","element.messageCard":"Message card","element.multiSelect":"Multi-choice menu","element.number":"Number input","element.pageTitle":"Page title","element.panel":"Panel","element.objectPanel":"Object panel","element.phoneInput":"Phone input","element.progressBar":"Progress bar","element.progressFlow":"Stepper / Timeline","element.radio":"Radio input","element.select":"Dropdown","element.singleCheckbox":"Single checkbox","element.slider":"Slider","element.spacer":"Spacer","element.splitter":"Splitter","element.statsCard":"Stats card","element.table":"Table","element.tabs":"Tabs","element.text":"Text input","element.textarea":"Long text input","element.toggleSwitch":"Toggle switch","emptyBlock.emptyBuilder":"Drop elements here to create a layout block","eventAction.action":"Action","eventAction.action.dataSource":"Data source","eventAction.action.sendMessage":"Send socket message","eventAction.action.navigate":"Navigate","eventAction.action.setValue":"Set value","eventAction.action.setOptions":"Set options","eventAction.action.reloadElements":"Reload elements","eventAction.action.toast":"Toast notification","eventAction.action.validate":"Validate","eventAction.action.submit":"Submit","eventAction.add":"Add action","eventAction.afterActionToast":"Toast after action","eventAction.condition":"Visible if","eventAction.confirmCancelLabel":"Cancel button label","eventAction.confirmConfirmLabel":"Confirm button label","eventAction.confirmEnabled":"Ask confirmation before action","eventAction.confirmMessage":"Confirmation message (optional)","eventAction.confirmOnDirty":"Confirm only when form has changes","eventAction.confirmTitle":"Confirmation title (optional)","eventAction.dataSource":"Data source","eventAction.socketSource":"WebSocket data source","eventAction.messagePayload":"Message","eventAction.reloadDataSources":"Reload data sources after success (comma separated, optional)","eventAction.label":"Label","eventAction.useCustomButtonStyle":"Use custom button style","eventAction.missingRestUrl":"Selected REST data source has no URL. Set URL in DataSources tab.","eventAction.navigateTo":"Navigate to","eventAction.noDataSources":"No data sources yet. Add one in the bottom DataSources tab.","eventAction.noPlaceholders":"Source URL/body has no placeholders ({...}), so extra mapping is not needed.","eventAction.openInNewTab":"Open in new tab","eventAction.param":"Param","eventAction.paramMap":"Placeholder mapping (URL/body)","eventAction.paramMapHint":"Example: body {selectedRows} -> __table.el1.selectedRows, URL {id} -> row.id","eventAction.plain":"Plain value","eventAction.reloadCurrentElementAfterSuccess":"Reload current element data after success","eventAction.responseMode":"Response action","eventAction.response.none":"Do nothing","eventAction.response.download":"Download file","eventAction.response.setValue":"Set value on element","eventAction.responseDataPath":"Response data path (optional)","eventAction.responseTargetElement":"Target element","eventAction.responseTargetPath":"Target data path (optional)","eventAction.responseFileName":"Download file name (optional)","eventAction.responseTargetHint":"Known elements:","eventAction.setValueTargetPath":"Target variable or data path","eventAction.setValueMode":"Value source","eventAction.setValueMode.contextPath":"Context path","eventAction.setValueMode.template":"Text template","eventAction.setValueMode.json":"JSON object / array","eventAction.setValueValue":"Value","eventAction.setValueHint":"Use variable name or __variables.name for variable targets. Then use that value in dialogs, expressions, or data source actions.","eventAction.setOptionsTargetElement":"Target element","eventAction.setOptionsMode":"Options source","eventAction.setOptionsValue":"Options","eventAction.setOptionsHint":"Updates the target element options. Provide an array or a response object with items, data or results.","eventAction.reloadElements":"Elements to reload (comma separated)","eventAction.reloadElementsHint":"Each listed element reloads its own data source. Available:","eventAction.select":"Select...","eventAction.showToastAfter":"Show toast after successful action","eventAction.noReloadableElements":"No elements with assigned data source found yet. First assign a data source to a table, list or another element.","eventAction.toastAutoHide":"Auto hide","eventAction.toastAutoHideMs":"Auto hide timeout (ms)","eventAction.toastConfig":"Toast configuration","eventAction.toastIcon":"Icon name","eventAction.toastMessage":"Toast message","eventAction.toastPosition":"Toast position","eventAction.toastPosition.bottom-center":"Bottom center","eventAction.toastPosition.bottom-left":"Bottom left","eventAction.toastPosition.bottom-right":"Bottom right","eventAction.toastPosition.top-center":"Top center","eventAction.toastPosition.top-left":"Top left","eventAction.toastPosition.top-right":"Top right","eventAction.toastShowIcon":"Show icon","eventAction.toastTitle":"Toast title","eventAction.toastVariant":"Toast variant","eventAction.toastVariant.error":"Error","eventAction.toastVariant.info":"Info","eventAction.toastVariant.success":"Success","eventAction.toastVariant.warning":"Warning","eventAction.trigger":"Trigger","eventAction.trigger.always":"Always (any trigger)","eventAction.trigger.afterLoad":"After load","eventAction.trigger.beforeLoad":"Before load","eventAction.trigger.blur":"Blur","eventAction.trigger.change":"Change","eventAction.trigger.click":"Click","eventAction.trigger.focus":"Focus","eventAction.trigger.input":"Input","eventAction.trigger.onLoad":"On load","eventAction.trigger.submit":"Submit","eventAction.debounceMs":"Debounce (ms)","eventAction.debounceMs.hint":"Delay action execution after input/change. Example: 300","eventAction.validateForm":"Validate whole form before action","eventAction.value":"Value","footer.collapse":"Collapse panel","footer.dataSources":"Data sources","footer.expand":"Expand panel","footer.logs":"Logs","footer.pages":"Pages","group.choiceInputs":"Choice inputs","group.containers":"Containers","group.singleLineInput":"Single line inputs","group.tables":"Tables","json.apply":"Apply","json.builder.moreSettings":"Additional JSON settings","json.format":"Format","json.invalid":"Invalid JSON format","option.label":"Label","option.value":"Value","option.visibleIf":"Condition","option.visibleIfConfigured":"Condition configured","option.visibleIfEdit":"Edit condition","option.visibleIfEmpty":"No condition","option.visibleIfPlaceholder":"visibleIf, e.g. {el1} == 1","progressFlowItem.step":"Step","progressFlowItem.label":"Label","progressFlowItem.value":"Description","progressFlowItem.valueEmpty":"No description","progressFlowItem.visibleIf":"Visible if","progressFlowItem.activeIf":"Active if","progressFlowItem.disabledIf":"Disabled if","progressFlowItem.completedIf":"Completed if","progressFlowItem.conditionPlaceholder":"{el1} == 1 or {score} > 80","property.items":"Items","property.activeIndex":"Active index","property.activeStepExpression":"Active step expression","property.activeStepDataPath":"Active step data path","property.activeTabDataPath":"Active tab data path","page.emptyBuilder":"This page is empty. Double-click an element on the left to add it, or drag it here.","page.emptyFormBuilder":"Drag an element here to create the first page","pages.addPage":"New page","pages.empty":"No pages yet.","panel.emptyBuilder":"Select this panel and double-click an element on the left, or drag one here.","preview.device.desktop":"Desktop","preview.device.mobile":"Mobile","preview.device.tablet":"Tablet","preview.dialog.open":"Open form","preview.fieldHelp":"Field help","preview.language":"Language","preview.next":"Next","preview.page":"Page","preview.prev":"Prev","preview.result":"Submit JSON","preview.step.blocked":"Cannot move to this step before completing previous steps.","preview.submit":"Submit","preview.validate":"Validate","preview.validation.invalid":"Validation failed","preview.validation.panel.close":"Close validation panel","preview.validation.panel.title":"Validation issues","preview.validation.valid":"Validation successful","properties.search":"Search in property list","properties.searchEmpty":"No matches found.","property.actionText":"Action text","property.addRowButtonText":"Add row button text","property.allow":"Allow","property.allowFullscreen":"Allow fullscreen","property.allowedCountryCodes":"Allowed country codes","property.autoHide":"Auto hide","property.autoHideMs":"Auto hide timeout (ms)","property.autocomplete":"Autocomplete","property.backgroundColor":"Background color","property.borderless":"Borderless","property.confirmDeleteCancelLabel":"Delete cancel button text","property.confirmDeleteConfirmLabel":"Delete confirm button text","property.confirmDeleteMessage":"Delete confirm message","property.confirmDeleteTitle":"Delete confirm title","property.confirmRowDeletion":"Confirm row deletion","property.countrySearch":"Enable country search","property.dataSource":"Data source","property.filterIfEqual":"Filter if equal","property.filterIfNotEqual":"Filter if not equal","property.pill":"Pill","property.variantExpression":"Variant expression","property.iconExpression":"Icon expression","property.trendDirectionExpression":"Trend direction expression","property.showSearch":"Show search","property.defaultCountryCode":"Default country code","property.defaultValue":"Default value","property.description":"Description","property.descriptionText":"Description text","property.disableIf":"Disable if","property.disabled":"Disabled","property.disallowAddRows":"Disallow adding rows","property.disallowDeleteRows":"Disallow deleting rows","property.disallowAddRowsIf":"Disallow adding rows if","property.disallowDeleteRowsIf":"Disallow deleting rows if","property.dismissible":"Dismissible","property.emptyMessage":"Empty state text","property.events":"Events","property.expression":"Expression","property.frameHeight":"Frame height","property.hidden":"Hidden","property.hideHeader":"Hide header","property.gridColumnCount":"Grid column count","property.gridMinColumnWidth":"Grid minimum column width","property.visibleIf":"Visible if","property.hideRowIf":"Hide row if","property.htmlContent":"HTML content","property.visibleTools":"Visible tools","property.icon":"Icon","property.ignoreParentState":"Ignore parent state","property.inheritParentState":"Inherit parent state","property.initiallyVisible":"Initially visible","property.inputMode":"Input mode","property.itemsPath":"Items path","property.label":"Label","property.labelTooltip":"Field help tooltip","property.loading":"Loading mode","property.max":"Max value","property.maxRows":"Max rows","property.maxlength":"Max length","property.min":"Min value","property.minlength":"Min length","property.fitContent":"Fit content","property.height":"Height","property.overflow":"Overflow","property.opacity":"Opacity","property.backdropFilter":"Backdrop filter","property.panelBorderStyle":"Border style","property.backgroundImage":"Background image","property.backgroundPosition":"Background position","property.backgroundSize":"Background size","property.backgroundRepeat":"Background repeat","property.backgroundOverlayColor":"Background overlay color","property.backgroundBlendMode":"Background blend mode","property.contentWrap":"Content wrap","property.contentAlignContent":"Content align content","property.contentRowGap":"Content row gap","property.contentColumnGap":"Content column gap","property.gridTemplateRows":"Grid rows","property.mobilePadding":"Mobile padding","property.mobileWidth":"Mobile width","property.tabletWidth":"Tablet width","property.name":"Name (code)","property.numberPlaceholder":"Number placeholder text","property.pattern":"Pattern","property.placeholder":"Placeholder text","property.pageBackgroundColor":"Page background color","property.pagePadding":"Page padding","property.panelBackgroundColor":"Panel background color","property.panelPadding":"Panel padding","property.position":"Position","property.readOnly":"Read only","property.readonlyIf":"Read only if","property.referrerPolicy":"Referrer policy","property.removeBackground":"Remove background","property.removeBackgraund":"Remove background","property.removeRowButtonText":"Remove row button text","property.requireIf":"Require if","property.required":"Required","property.requiredMessage":"Required field message","property.resetIf":"Reset if","property.resetChildrenOnHide":"Reset child fields on hide","property.resetOnHide":"Reset value on hide","property.outletName":"Outlet name","element.routerOutlet":"Router outlet","routerOutlet.placeholder":"Router outlet","routerOutlet.namedHint":"Named outlet","routerOutlet.primaryHint":"Primary outlet routed content renders here at runtime.","property.returnCountryIso":"Return country ISO code","property.sandbox":"Sandbox","property.showIcon":"Show icon","property.spellcheck":"Spellcheck","property.src":"Source URL","property.status":"Status","property.step":"Step","property.text":"Text","property.title":"Title","property.type":"Type","property.validators":"Validators","property.variant":"Variant","property.width":"Width","property.inputMask":"Input mask","property.rows":"Row count","property.pickerMode":"Picker mode","property.outputFormat":"Output format","property.minValue":"Min value (optional)","property.maxValue":"Max value (optional)","property.maxHeight":"Max height","property.showInline":"Show inline","property.valueStorageType":"Store value as","property.visualFormatEnabled":"Use visual number format","property.maskType":"Input mask","propertyCategory.behavior":"Behavior","propertyCategory.columns":"Columns","propertyCategory.dataSet":"Data","propertyCategory.design":"Design","propertyCategory.events":"Events","propertyCategory.general":"General","propertyCategory.logic":"Logic","propertyCategory.options":"Options","propertyCategory.restrictions":"Restrictions","propertyCategory.validators":"Validators","propertyCategory.texts":"Texts","propertyChoice.fit.contain":"Contain","propertyChoice.fit.cover":"Cover","propertyChoice.fit.fill":"Fill","propertyChoice.fit.none":"None","propertyChoice.overflow.visible":"Visible","propertyChoice.overflow.auto":"Auto","propertyChoice.overflow.hidden":"Hidden","propertyChoice.overflow.scroll":"Scroll","propertyChoice.overflow.clip":"Clip","propertyChoice.panelBorderStyle.solid":"Solid","propertyChoice.panelBorderStyle.dashed":"Dashed","propertyChoice.panelBorderStyle.dotted":"Dotted","propertyChoice.panelBorderStyle.double":"Double","propertyChoice.backgroundSize.cover":"Cover","propertyChoice.backgroundSize.contain":"Contain","propertyChoice.backgroundSize.auto":"Auto","propertyChoice.backgroundSize.100% 100%":"Fill","propertyChoice.backgroundRepeat.no-repeat":"No repeat","propertyChoice.backgroundRepeat.repeat":"Repeat","propertyChoice.backgroundRepeat.repeat-x":"Repeat X","propertyChoice.backgroundRepeat.repeat-y":"Repeat Y","propertyChoice.backgroundBlendMode.normal":"Normal","propertyChoice.backgroundBlendMode.multiply":"Multiply","propertyChoice.backgroundBlendMode.screen":"Screen","propertyChoice.backgroundBlendMode.overlay":"Overlay","propertyChoice.backgroundBlendMode.darken":"Darken","propertyChoice.backgroundBlendMode.lighten":"Lighten","propertyChoice.contentWrap.nowrap":"No wrap","propertyChoice.contentWrap.wrap":"Wrap","propertyChoice.contentWrap.wrap-reverse":"Wrap reverse","propertyChoice.contentAlignContent.flex-start":"Start","propertyChoice.contentAlignContent.center":"Center","propertyChoice.contentAlignContent.flex-end":"End","propertyChoice.contentAlignContent.stretch":"Stretch","propertyChoice.inputMode.decimal":"decimal","propertyChoice.inputMode.email":"email","propertyChoice.inputMode.none":"browser default","propertyChoice.inputMode.numeric":"numeric","propertyChoice.inputMode.search":"search","propertyChoice.inputMode.tel":"telephone","propertyChoice.inputMode.text":"text","propertyChoice.inputMode.url":"url","propertyChoice.loading.eager":"eager","propertyChoice.loading.lazy":"lazy","propertyChoice.maskType.custom":"custom","propertyChoice.maskType.date":"date","propertyChoice.maskType.dateTime":"date time","propertyChoice.maskType.digits":"digits","propertyChoice.maskType.none":"none","propertyChoice.maskType.personalCodeLt":"personal code","propertyChoice.maskType.phoneIntl":"international phone","propertyChoice.maskType.phoneLt":"phone","propertyChoice.maskType.time":"time","propertyChoice.visibleTools.alignCenter":"Align center","propertyChoice.visibleTools.alignJustify":"Justify","propertyChoice.visibleTools.alignLeft":"Align left","propertyChoice.visibleTools.alignRight":"Align right","propertyChoice.visibleTools.blockquote":"Quote","propertyChoice.visibleTools.bold":"Bold","propertyChoice.visibleTools.clearFormatting":"Clear formatting","propertyChoice.visibleTools.font":"Font family","propertyChoice.visibleTools.heading":"Heading","propertyChoice.visibleTools.highlight":"Highlight","propertyChoice.visibleTools.horizontalRule":"Horizontal rule","propertyChoice.visibleTools.image":"Image","propertyChoice.visibleTools.inlineCode":"Inline code","propertyChoice.visibleTools.italic":"Italic","propertyChoice.visibleTools.lineHeight":"Line spacing","propertyChoice.visibleTools.link":"Link","propertyChoice.visibleTools.orderedList":"Ordered list","propertyChoice.visibleTools.redo":"Redo","propertyChoice.visibleTools.size":"Text size","propertyChoice.visibleTools.strike":"Strikethrough","propertyChoice.visibleTools.subscript":"Subscript","propertyChoice.visibleTools.superscript":"Superscript","propertyChoice.visibleTools.textColor":"Text color","propertyChoice.visibleTools.underline":"Underline","propertyChoice.visibleTools.undo":"Undo","propertyChoice.visibleTools.unlink":"Remove link","propertyChoice.visibleTools.unorderedList":"Unordered list","propertyChoice.type.autocomplete":"Autocomplete","propertyChoice.type.checkbox":"Checkboxes","propertyChoice.type.datepicker":"Date picker","propertyChoice.type.multiSelect":"Multi-choice menu","propertyChoice.type.number":"Number input","propertyChoice.type.radio":"Radio","propertyChoice.type.select":"Select","propertyChoice.type.singleCheckbox":"Single checkbox","propertyChoice.type.slider":"Slider","propertyChoice.type.text":"Text","propertyChoice.type.textarea":"Textarea","propertyChoice.type.toggleSwitch":"Toggle switch","propertyChoice.type.status":"Status","propertyChoice.valueStorageType.number":"number (default)","propertyChoice.valueStorageType.string":"string","propertyChoice.status.default":"Default","propertyChoice.status.readonly":"Read only","propertyChoice.quickSearchCondition.%-%":"contains (%-%)","propertyChoice.quickSearchCondition.!%-%":"not contains (!%-%)","propertyChoice.quickSearchCondition.%-":"starts with (%-)","propertyChoice.quickSearchCondition.-%":"ends with (-%)","propertyChoice.quickSearchCondition.=":"equals (=)","propertyChoice.quickSearchCondition.!=":"not equals (!=)","propertyChoice.quickSearchCaseMode.caseInsensitiveLatin":"Case insensitive latin","propertyChoice.quickSearchCaseMode.caseSensitive":"Case sensitive","propertyChoice.quickSearchCaseMode.uppercase":"Uppercase","propertyChoice.quickSearchCaseMode.lowercase":"Lowercase","propertyChoice.detailedSearchCaseMode.caseInsensitiveLatin":"Case insensitive latin","propertyChoice.detailedSearchCaseMode.caseSensitive":"Case sensitive","propertyChoice.detailedSearchCaseMode.uppercase":"Uppercase","propertyChoice.detailedSearchCaseMode.lowercase":"Lowercase","propertyChoice.paginatorVariant.full":"Full (first/prev/numbers/next/last)","propertyChoice.paginatorVariant.pager":"Pager (prev/numbers/next)","propertyChoice.paginatorVariant.numbers":"Numbers only","propertyChoice.paginatorVariant.simple":"Simple (prev/next)","propertyChoice.paginatorAlign.end":"End","propertyChoice.paginatorAlign.center":"Center","propertyChoice.paginatorAlign.start":"Start","propertyChoice.responsiveMode.auto":"Auto","propertyChoice.responsiveMode.stack":"Stack on mobile","propertyChoice.tableStyle.default":"Default","propertyChoice.tableStyle.grid":"Grid","propertyChoice.tableStyle.striped":"Striped","propertyChoice.headerCenterElementsPosition.left":"Left","propertyChoice.headerCenterElementsPosition.center":"Center","propertyChoice.headerCenterElementsPosition.right":"Right","propertyChoice.expandedDisplayMode.sidePanel":"Side panel","propertyChoice.expandedDisplayMode.inline":"Inline row","propertyChoice.rowActionsDisplayMode.dropdown":"Dropdown menu","propertyChoice.rowActionsDisplayMode.iconButtons":"Icon buttons","propertyChoice.rowActionsDisplayMode.buttons":"Buttons (icon + text)","propertyChoice.rowActionsDropdownButtonStyle.borderless":"Borderless","propertyChoice.rowActionsDropdownButtonStyle.default":"Default","richText.alignCenter":"Align center","richText.alignJustify":"Justify","richText.alignLeft":"Align left","richText.alignRight":"Align right","richText.apply":"Apply","richText.backgroundColor":"Background color","richText.blockquote":"Quote","richText.bold":"Bold","richText.cancel":"Cancel","richText.clearFormatting":"Clear formatting","richText.codeBlock":"Code block","richText.edit":"Edit","richText.emptyPreview":"No content yet.","richText.emptyViewer":"Content is empty","richText.fontCourier":"Courier New","richText.fontGeorgia":"Georgia","richText.fontIbmPlexSans":"IBM Plex Sans","richText.fontMonospace":"Monospace","richText.fontSans":"Sans Serif","richText.fontSerif":"Serif","richText.fontSystem":"System UI","richText.fontVerdana":"Verdana","richText.headingH1":"H1","richText.headingH2":"H2","richText.headingH3":"H3","richText.headingH4":"H4","richText.headingParagraph":"P","richText.heading1":"Heading 1","richText.heading2":"Heading 2","richText.heading3":"Heading 3","richText.highlight":"Highlight","richText.horizontalRule":"Horizontal rule","richText.image":"Image","richText.imagePrompt":"Enter image URL or data:image base64","richText.video":"Video","richText.videoPrompt":"Enter video or YouTube URL","richText.removeImage":"Remove image","richText.decreaseImageSize":"Decrease image size","richText.increaseImageSize":"Increase image size","richText.wrapText":"Wrap text","richText.indent":"Indent","richText.inlineCode":"Inline code","richText.italic":"Italic","richText.lineHeight":"Line spacing","richText.link":"Link","richText.linkPlaceholder":"https://example.com","richText.linkPrompt":"Enter link URL","richText.orderedList":"Ordered list","richText.outdent":"Outdent","richText.paragraph":"Paragraph","richText.placeholder":"Write content...","richText.preview":"Preview","richText.redo":"Redo","richText.sizeLarge":"Large","richText.sizeNormal":"Normal","richText.sizeSmall":"Small","richText.sizeXLarge":"Extra large","richText.strikeThrough":"Strikethrough","richText.subscript":"Subscript","richText.superscript":"Superscript","richText.textColor":"Text color","richText.toolbar":"Formatting","richText.underline":"Underline","richText.undo":"Undo","richText.unlink":"Remove link","richText.unorderedList":"Unordered list","richText.characters":"Characters","richText.customColor":"Custom","richText.embed":"Embed","richText.embedPrompt":"Enter page URL to embed","richText.find":"Find","richText.findNext":"Next","richText.findNoMatches":"No matches","richText.findPrevious":"Previous","richText.findReplace":"Find and replace","richText.imageAlt":"Alternative text","richText.matchCase":"Aa","richText.mediaUpload":"Upload","richText.mediaUrl":"By URL","richText.removeHighlight":"None","richText.replace":"Replace","richText.replaceAll":"Replace all","richText.replaceWith":"Replace with","richText.sourceCode":"Source code","richText.specialCharacter":"Special character","richText.table":"Table","richText.tableBorderAll":"All borders","richText.tableBorderNone":"No borders","richText.tableCellBackground":"Cell background","richText.tableColumnLeft":"Insert column left","richText.tableColumnRight":"Insert column right","richText.tableDelete":"Delete table","richText.tableDeleteColumn":"Delete column","richText.tableDeleteRow":"Delete row","richText.tableHeaderColumn":"Header column","richText.tableHeaderRow":"Header row","richText.tableMergeDown":"Merge cell down","richText.tableMergeRight":"Merge cell right","richText.tableRowAbove":"Insert row above","richText.tableRowBelow":"Insert row below","richText.tableSplitHorizontally":"Split cell horizontally","richText.tableSplitVertically":"Split cell vertically","richText.taskList":"Task list","richText.words":"Words","select.filter":"Filter","select.noMatches":"No matches","select.pressEnterToUse":"Press Enter to use what you typed","select.typeOrPick":"Type or pick","settings.alignment.center":"Center","settings.alignment.left":"Left","settings.alignment.right":"Right","settings.apply":"Apply","settings.defaultLanguage":"Default language","settings.dialog":"Rendering and dialog","settings.dialogCloseEvents":"Close button actions","settings.dialogFooterActions":"Dialog footer actions","settings.dialogFooterActionsAlign":"Dialog footer alignment","settings.dialogHeaderDescription":"Dialog header description","settings.dialogHeaderTitle":"Dialog header title","settings.dialogFontSize":"Dialog font size","settings.dialogMaxWidth":"Dialog max width","settings.dialogMaxHeight":"Dialog max height","settings.dialogPadding":"Dialog padding","settings.dialogShowCloseButton":"Show close button","settings.dialogDraggable":"Draggable dialog","settings.dialogDraggableHelp":"The dialog can be moved by its header and the dimmed backdrop is not shown.","settings.dialogWidth":"Dialog width","settings.dialogWidthUnit":"Dialog width unit","settings.elementSpacing":"Element spacing","settings.contentPadding":"Content padding","settings.tabletBreakpoint":"Tablet breakpoint","settings.mobileBreakpoint":"Mobile breakpoint","settings.removeContentPadding":"No content padding","settings.removeContentPaddingHelp":"The form touches the edges of the page it sits in.","settings.general":"General","settings.header":"Form header","settings.header.description":"Description text","settings.header.logo":"Logo URL or base64","settings.header.logoPreview":"Logo preview","settings.header.logoAlign":"Logo alignment","settings.header.logoUpload":"Upload logo file as base64","settings.header.logoUploadButton":"Add file","settings.header.showDescription":"Show description","settings.header.showLogo":"Show logo","settings.header.showTitle":"Show title","settings.header.title":"Title text","settings.invalidJson":"Invalid JSON object.","settings.language":"Current language","settings.navigation":"Navigation and actions","settings.pageSubtitle":"Manage form appearance, navigation, and runtime mode.","settings.pageTitle":"Settings","settings.renderMode":"Render mode","settings.renderMode.dialog":"Dialog","settings.renderMode.page":"Page","settings.showValidationIssuesModal":"Show validation issues modal","settings.supportedLanguages":"Supported languages (comma separated)","settings.width":"Form width","settings.widthUnit":"Form width unit","settings.actionButtonsPosition":"Action buttons position","settings.allowStepWithoutValidation":"Allow step without validation","settings.locale":"Locale","settings.pageNavigationMode":"Page navigation mode","settings.pageNavigationMode.default":"Default","settings.pageNavigationMode.stepper":"Stepper","settings.pageNavigationPosition":"Page navigation position","settings.position.both":"Both","settings.position.bottom":"Bottom","settings.position.none":"Hidden","settings.position.top":"Top","settings.showSubmitButton":"Show submit button","settings.showToc":"Show table of contents","settings.showValidateButton":"Show validate button","settings.status":"Status","settings.status.default":"Default","settings.status.readonly":"Read only","settings.stepperPosition":"Stepper position","settings.mcp":"AI access (MCP)","settings.mcp.howTo":"Add the server URL to your AI client (for Claude: Settings → Connectors → Add custom connector). When it asks for the session key, give it the key below.","settings.mcp.status":"Status","settings.mcp.connecting":"Connecting to the MCP server…","settings.mcp.unreachable":"MCP server unreachable, retrying…","settings.mcp.pairedWith":"Connected:","settings.mcp.waiting":"Waiting for an AI client to pair","settings.mcp.url":"Server URL","settings.mcp.key":"Session key","settings.mcp.copy":"Copy","settings.mcp.copied":"Copied","settings.mcp.regenerate":"New key","settings.mcp.regenerateHint":"Disconnects every paired AI client and issues a new key","sidebar.addCopiedPage":"Add page","sidebar.collapseElements":"Collapse elements","sidebar.collapseProperties":"Collapse properties","sidebar.copies":"Copies","sidebar.elements":"Elements","sidebar.expandElements":"Expand elements","sidebar.expandProperties":"Expand properties","sidebar.properties":"Properties","sidebar.emptyElements":"No elements available.","sidebar.groups":"Groups","sidebar.noCopies":"No copies yet.","sidebar.noGroups":"No groups yet.","sidebar.noMatches":"No matches found.","sidebar.saveCopy":"Save selected element","sidebar.saveTemplate":"Save selected element","sidebar.searchCopies":"Search copies","sidebar.searchGroups":"Search groups","sidebar.toggleGroup":"Toggle group","sidebar.searchElements":"Search elements in library","sidebar.searchPlacedElements":"Search placed element","sourceMapper.addPath":"Add","sourceMapper.autoPaths":"Auto from params","sourceMapper.filterOptionsBy":"Filter options by","sourceMapper.optionLabel":"Option label key","sourceMapper.optionValue":"Option value key","sourceMapper.param":"Param","sourceMapper.plain":"Plain value","sourceMapper.refreshLabel":"React to change","sourceMapper.refreshPaths":"Listen fields","sourceMapper.refreshPathsPlaceholder":"e.g. el1 or panel.userId","sourceMapper.refreshText":"Reload source when mapped question value changes","sourceMapper.removePath":"Remove","sourceMapper.select":"Select...","sourceMapper.source":"Data source","sourceMapper.variablePrefix":"Variable","sourceMapper.useFor":"Use as","sourceMapper.useForHelp":"Option - use when source should load selectable options (select, radio, checkbox). Value - use when source should load field value.","sourceMapper.value":"Value","sources.addSource":"New data source","sources.body":"Body","sources.bodyHint":"Use {...} placeholders, e.g. {id} for URL or {__table.el1.selectedRows} for body.","sources.bodyPlaceholder":'{"rows":"{__table.el1.selectedRows}"}',"sources.dataPath":"Data path","sources.empty":"No data sources yet.","sources.emptySelect":"Select a data source to edit.","sources.localJson":"JSON data","sources.localMode":"Local mode","sources.localMode.json":"JSON","sources.localMode.path":"Another question value","sources.method":"Method","sources.name":"Name","sources.routeKey":"Route data key","sources.routePath":"Data path (optional)","sources.title":"Title","sources.type":"Type","sources.type.local":"Local JSON","sources.type.rest":"REST","sources.type.route":"Route data","sources.type.websocket":"WebSocket","sources.url":"URL","sources.urlRequired":"Enter the address the data is loaded from.","sources.localFunction":"Local function","sources.localFunctionHint":"Example: window.myFunction or this.myFunction","sources.websocketMessage":"WebSocket message","sources.websocketMessageHint":"Initial message (optional)","sources.websocketMessageMode":"WebSocket update mode","sources.websocketMessageMode.push":"Push values in array","sources.websocketMessageMode.replace":"Replace current value","sources.websocketMessagePath":"WebSocket message path","sources.websocketProtocols":"WebSocket protocols","tab.documentation":"Documentation generator","tab.logic":"Logic","tab.automation":"Automation studio","tab.builder":"Builder","tab.formSettings":"Settings","tab.json":"JSON Editor","tab.preview":"Preview","tab.templates":"Templates","tab.translations":"Translations","tab.variables":"Variables","table.actions":"Actions","table.collapse":"Collapse","table.collapseRow":"Collapse row","table.column.add":"Add column","table.empty":"No data","table.columns.settings.apply":"Apply settings","table.columns.settings.button":"Column settings","table.columns.settings.cancel":"Cancel","table.columns.settings.save":"Save settings","table.columns.settings.moveDown":"Move down","table.columns.settings.moveUp":"Move up","table.columns.settings.reorder":"Reorder column","table.columns.settings.reset":"Reset","table.columns.settings.showAll":"Show all","table.columns.settings.title":"Column settings","table.columns.settings.auto":"Auto width","table.columns.settings.width":"Width","table.expand":"Expand","table.expandRow":"Expand row","table.expanded.empty":"No nested rows","table.export.busy":"Exporting...","table.export.csv":"CSV","table.export.excel":"Excel","table.export.open":"Export","table.export.pdf":"PDF","table.pagination.first":"First page","table.pagination.last":"Last page","table.pagination.pageSize":"Rows per page","table.export.scope":"Export scope","table.export.scope.all":"All data","table.export.scope.current":"Current page","table.export.columns.all":"Select all columns","table.export.dialog.title":"Export columns","table.loading":"Loading...","table.next":"Next","table.prev":"Prev","table.search.addFilter":"Add filter","table.search.apply":"Apply","table.search.boolean.false":"False","table.search.boolean.true":"True","table.search.clear":"Clear","table.search.clearQuick":"Clear quick search","table.search.field":"Field","table.search.hideDetailed":"Hide detailed search","table.search.op.after":"After","table.search.op.before":"Before","table.search.op.contains":"Contains","table.search.op.endsWith":"Ends with","table.search.op.equals":"Equals","table.search.op.greaterOrEqual":"Greater or equal","table.search.op.greaterThan":"Greater than","table.search.op.lessOrEqual":"Less or equal","table.search.op.lessThan":"Less than","table.search.op.notContains":"Does not contain","table.search.op.notEquals":"Not equals","table.search.op.onOrAfter":"On or after","table.search.op.onOrBefore":"On or before","table.search.op.startsWith":"Starts with","table.search.operator":"Operator","table.search.quickPlaceholder":"Quick search","table.search.removeFilter":"Remove filter","table.search.showDetailed":"Detailed search","table.search.value":"Value","table.search.emptyOptions":"No options","table.search.saved":"Saved filters","table.select":"Select","table.selectAll":"Select all","table.selectRow":"Select row","table.status.addRule":"Add rule","table.status.condition":"Condition","table.status.label":"Display label","table.status.tone":"Tone","table.status.tone.danger":"Danger","table.status.tone.info":"Info","table.status.tone.neutral":"Neutral","table.status.tone.success":"Success","table.status.tone.warning":"Warning","table.status.icon":"Icon","table.status.rounded":"Rounded badge","table.status.tone.primary":"Primary","table.status.tone.risk":"Risk","table.closeDetails":"Close details","table.filters.apply":"Apply","table.filters.code":"Code","table.filters.delete":"Delete","table.filters.description":"Description","table.filters.dialog.list":"Filter list","table.filters.dialog.new":"Create new","table.filters.dialog.title":"Saved filters","table.filters.empty":"No saved filters","table.filters.loading":"Loading...","table.filters.name":"Name","table.filters.save":"Save filter","table.header.addElement":"Add element","table.header.removeCenterElement":"Remove center element","table.inlineEdit.cancel":"Cancel","table.inlineEdit.edit":"Edit","table.inlineEdit.save":"Save","table.inlineEdit.saving":"Saving...","table.inlineEdit.select":"Select","tableRequestParams.limit":"Up to 5 parameter rows are allowed.","tableRequestParams.name":"Param name","tableRequestParams.value":"Value / {path}","property.actionsLabel":"Actions label","property.showActionsHeaderLabel":"Show actions header label","property.prevLabel":"Prev label","property.nextLabel":"Next label","property.loadingLabel":"Loading label","property.selectAllLabel":"Select all label","property.selectLabel":"Select label","property.selectRowLabel":"Select row label","property.expandLabel":"Expand label","property.collapseLabel":"Collapse label","property.tableDataSourceName":"Data source name","property.tableItemsPath":"Items path (optional)","property.params":"Request params","property.lazyLoad":"Lazy load","property.orderClause":"Order clause","property.orderDirection":"Order direction","property.tableTotalPath":"Total path (lazy)","property.quickSearchParamName":"Quick search param name","property.quickSearchCondition":"Quick search condition","property.quickSearchCaseMode":"Quick search case mode","property.detailedSearchCaseMode":"Detailed search case mode","property.searchDebounceMs":"Quick search debounce (ms)","property.searchDataSourceName":"Search datasource","property.searchItemsPath":"Items path","property.searchLabelKey":"Label key","property.searchValueKey":"Value key","property.searchResultLimit":"Server result limit","property.columnsConfig":"Columns","property.rowActions":"Row actions","property.rowClickActions":"Row click actions","property.rowExpandActions":"Row expand actions","property.headerMenuActions":"Header dropdown actions","property.rowActionVisibilityPath":"Row action visibility path","property.selectionActions":"Selection actions","property.selectionActionsLabel":"Selection actions label","property.paginator":"Paginator","property.pageSize":"Page size","property.paginatorVariant":"Paginator variant","property.paginatorAlign":"Paginator align","property.paginatorMaxButtons":"Paginator max buttons","property.responsiveMode":"Responsive mode","property.tableStyle":"Table style","property.rowHover":"Row hover","property.stickyHeader":"Sticky header","property.showHeaderControls":"Show header controls","property.showQuickSearch":"Show quick search","property.quickSearchPlaceholder":"Quick search placeholder","property.quickSearchOnType":"Search while typing","property.showDetailedSearch":"Show detailed search","property.showExport":"Show export buttons","property.exportUseColumnPicker":"Export column picker dialog","property.exportFileName":"Export file name","property.exportAllPageSize":"Export all page size","property.headerTemplateName":"Header template ref","property.headerTemplate":"Header template (HTML)","property.headerCenterElementsPosition":"Header added elements position","property.headerMenuEnabled":"Header dropdown","property.headerMenuPlaceholder":"Header dropdown placeholder","property.headerMenuItemsPath":"Header dropdown items path","property.headerMenuDataSourceName":"Header dropdown datasource","property.headerMenuDataSourceItemsPath":"Header dropdown datasource items path","property.headerMenuOptions":"Header dropdown static options","property.headerMenuLabelKey":"Header dropdown label key","property.headerMenuValueKey":"Header dropdown value key","property.flatHeaderSurface":"Flat header surface","property.headerGroup":"Header group","property.statusRules":"Status rules","property.enableSelection":"Enable multi select","property.selectionKey":"Selection key path","property.autoSelectCondition":"Auto select if","property.selectionItemTemplate":"Selected item template","property.expandableRows":"Expandable rows","property.rowClickOpensDetails":"Open details on row click","property.showExpandChevron":"Show expand chevron in first column","property.alwaysShowExpandChevron":"Always show expand chevron","property.expandedDisplayMode":"Expanded display mode","property.rowActionsDisplayMode":"Row actions display","property.rowActionsDropdownButtonStyle":"Row actions menu button style","property.expandedItemsPath":"Expanded rows path","property.expandedDataSourceName":"Expanded datasource","property.expandedDataSourceItemsPath":"Expanded datasource items path","property.expandedTemplate":"Expanded content template (HTML)","property.expandedEmptyMessage":"Expanded empty message","property.detailsPanelTitle":"Details panel title","property.expandedColumnsConfig":"Expanded columns","property.expandedRowActions":"Expanded row actions","property.controlActiveIf":"Checked if","property.controlEnabledIf":"Enabled if","property.showHeaderLabel":"Show header label","property.statusShowIcon":"Show status icon","property.enableSavedFilters":"Enable saved filters","property.savedFiltersDataSourceName":"Saved filters datasource","property.savedFiltersItemsPath":"Saved filters items path","property.saveFilterDataSourceName":"Save filter datasource","property.deleteFilterDataSourceName":"Delete filter datasource","property.savedFilterIdKey":"Saved filter id key","property.savedFilterNameKey":"Saved filter name key","property.savedFilterDescriptionKey":"Saved filter description key","property.savedFilterCodeKey":"Saved filter code key","property.savedFilterPayloadKey":"Saved filter payload key","property.flatFooterSurface":"Flat footer surface","propertySection.identity":"Identity","propertySection.content":"Content","propertySection.input":"Input","propertySection.formatting":"Formatting","propertySection.source":"Primary source","propertySection.request":"Request","propertySection.search":"Search","propertySection.remoteSearch":"Search source","propertySection.savedFilters":"Saved filters","propertySection.options":"Options schema","propertySection.selection":"Selection","propertySection.details":"Details","propertySection.pagination":"Pagination","propertySection.headerControls":"Header controls","propertySection.columns":"Columns schema","propertySection.trigger":"Trigger button","propertySection.state":"State","propertySection.limits":"Limits","propertySection.deletion":"Deletion","propertySection.validation":"Validation","propertySection.logicVisibility":"Visibility logic","propertySection.logicInteraction":"Interaction logic","propertySection.logicValue":"Value logic","propertySection.logicExecution":"Execution modes","propertySection.actions":"Events","propertySection.layout":"Layout","propertySection.surface":"Surface","propertySection.appearance":"Appearance","propertySection.advanced":"Advanced","propertySectionDescription.identity":"Name, label, and basic identifiers.","propertySectionDescription.content":"Visible texts, titles, placeholders, and content fields.","propertySectionDescription.input":"Input modes, autocomplete, and user input UX.","propertySectionDescription.formatting":"Masks, locale, and value formatting settings.","propertySectionDescription.source":"Data source binding and response paths.","propertySectionDescription.request":"Request params, lazy load, and backend request settings.","propertySectionDescription.search":"Quick or detailed search and their extra settings.","propertySectionDescription.remoteSearch":"Data source queried while typing and how its records map to options.","propertySectionDescription.savedFilters":"Saved filters data source and payload schema.","propertySectionDescription.options":"Option lists, filtering, and selection modes.","propertySectionDescription.selection":"Table selection and selected item configuration.","propertySectionDescription.details":"Expanded rows, details panel, and nested views.","propertySectionDescription.pagination":"Paginator and footer control.","propertySectionDescription.headerControls":"Header bar, export, and search controls.","propertySectionDescription.columns":"Main and expanded table columns.","propertySectionDescription.trigger":"Button that opens a dialog or another action.","propertySectionDescription.state":"Hidden, disabled, and readonly states.","propertySectionDescription.limits":"Min/max, lengths, counts, and other restrictions.","propertySectionDescription.deletion":"Delete flow and confirm settings.","propertySectionDescription.validation":"Required, validators, and strict options.","propertySectionDescription.logicVisibility":"Visible if and open conditions.","propertySectionDescription.logicInteraction":"Disable, require, and readonly conditions.","propertySectionDescription.logicValue":"Expression, defaultValue, and reset conditions.","propertySectionDescription.logicExecution":"Logic and validation execution mode settings.","propertySectionDescription.actions":"Events and action collections.","propertySectionDescription.layout":"Width, padding, orientation, gap, and overall layout.","propertySectionDescription.surface":"Borders, backgrounds, shadows, and page or panel surfaces.","propertySectionDescription.appearance":"Variants, colors, icons, and visual accents.","propertySectionDescription.advanced":"Rare or specialized properties.","templates.add":"Add template","templates.content":"HTML content","templates.delete":"Delete","templates.description":"Description","templates.empty":"No templates yet.","templates.error.contentRequired":"Template HTML content is required.","templates.error.duplicateName":"Template name already exists.","templates.error.formatFailed":"Failed to format template HTML.","templates.error.nameRequired":"Template name is required.","templates.format":"Format template","templates.name":"Name","templates.preview.data":"Preview JSON object","templates.preview.editJson":"Edit preview JSON","templates.preview.empty":"No preview object.","templates.preview.format":"Format JSON","templates.preview.invalidArray":"Preview JSON must be an array.","templates.preview.invalidObject":"Preview JSON must be an object.","templates.preview.invalidJson":"Preview JSON is invalid.","templates.save":"Save","templates.select":"Select a template to edit.","templates.storage.dataSource":"Data source","templates.storage.loaded":"Templates loaded.","templates.storage.loading":"Loading templates from data source...","templates.storage.local":"Local storage","templates.storage.localKey":"Local storage key","templates.storage.mode":"Storage mode","templates.storage.path":"Templates path (optional)","templates.storage.reload":"Load from data source","templates.storage.source":"Data source name","templates.tags":"Tags (comma separated)","templates.title":"Templates","templates.titleField":"Title","templates.css":"CSS","templates.css.format":"Format CSS","templates.fields.placeholder":"e.g. jarStatus or status.code","templates.fields.slot":"Field","templates.fields.title":"Template fields","translations.activeLanguage":"Active language","translations.add":"Add","translations.addLanguage":"Add language","translations.defaultLanguage":"Default language","translations.empty":"No translatable texts found.","translations.field":"Field","translations.removeLanguage":"Remove","translations.sourceValue":"Source value","translations.translation":"Translation","validator.add":"Add validator","validator.applyIf":"Apply if (optional)","validator.edit":"Edit validator","validator.empty":"No validators yet.","validator.condition":"Condition (error when true)","validator.message":"Error message","validator.type":"Type","validator.value":"Value","variables.add":"New variable","variables.contextHint":"Source examples: route.id, route.params.id, route.queryParams.xxx, route.data.xxx, route.url","variables.empty":"Route data is not available.","variables.externalHint":"External context is provided via API. Example: external.apiBaseUrl, external.user, external.features.list.","variables.fallback":"Fallback","variables.hint":"Use expressions: {__route.id}, {__route.params.id}, {__route.queryParams.xxx}, {__route.data.xxx}. Supported type: dataSource.","variables.includeInData":"To data JSON","variables.name":"Name","variables.noRows":"No variables yet. Add a row and bind it to route/external/constant/expression/dataSource.","variables.reloadOnChange":"Reload data source when fields change","variables.refresh":"Refresh","variables.refreshPathsHint":"Separate paths with commas. Reload runs only when one of these paths changes.","variables.refreshPathsPlaceholder":"e.g. userId, data.user.type, filters.status","variables.routeData":"Route / resolver data","variables.routeParams":"Route params","variables.routeQuery":"Query params","variables.routeUrl":"Current URL","variables.source":"Source","variables.targetPath":"Target path","variables.title":"Title","variables.type":"Type","variables.type.constant":"Constant","variables.type.dataSource":"Data source","variables.type.expression":"Expression","variables.type.external":"External","variables.type.manual":"Manual / action","variables.type.route":"Route","variables.manualHint":'Manual variable is not recalculated automatically. Set its value through the "Set value" action.',"variables.manualHintShort":"Value is set via action.","variables.valueSource":"Value / Source","accordion.emptyBuilder":"Drop content into accordion","accordion.noItems":"No items","code.help":"Expression help","code.help.examples":"Examples","code.help.functions":"Functions","code.help.hide":"Hide help","code.help.result":"Result","code.help.show":"Show help","code.help.tokens":"Tokens","dateRange.select":"Select date range","dialog.close":"Close","dialog.enterFullscreen":"Enter fullscreen","dialog.exitFullscreen":"Exit fullscreen","eventAction.icon":"Icon","eventAction.drag":"Drag action","eventAction.buttonVariant":"Button style","eventAction.buttonTone":"Button tone","eventAction.buttonVariant.filled":"Filled","eventAction.buttonVariant.outlined":"Outlined","eventAction.buttonVariant.text":"Text","eventAction.buttonTone.primary":"Primary","eventAction.buttonTone.risk":"Risk","eventAction.buttonTone.neutral":"Neutral","eventAction.quickAction.view":"View","eventAction.quickAction.delete":"Delete","eventAction.quickAction.copy":"Copy","eventAction.quickAction.edit":"Edit","eventAction.actionCode":"Action code","eventAction.action.hint":"What the action will do. Example: setValue changes a value, reloadElements reloads elements.","eventAction.beforeNavigateDataSource":"Run data source before navigation","eventAction.beforeNavigateDataSource.hint":"Additional source that runs before navigation. Example: loadOrderDraft","eventAction.beforeNavigateTargetPath":"Use response path before navigation","eventAction.passResponseAsNavigationState":"Pass response to the next page as navigation state","eventAction.navigationStateKey":"State key (optional)","eventAction.navigationStateKey.help":"Leave empty to spread the response at the state root. Set a key, e.g. order, to read it as __route.state.order on the target page.","eventAction.navigationStateKey.hint":"On the target page, read it via a Runtime Variable with source route.state or route.state.key, or an expression referencing __route.state.","eventAction.condition.help":"Example: el1 == ok or row.status != draft","eventAction.confirmCancelLabel.hint":"Cancel button text. Example: No, go back","eventAction.confirmConfirmLabel.hint":"Confirm button text. Example: Yes, continue","eventAction.confirmMessage.hint":"Text in the confirmation dialog. Example: This action will change table data.","eventAction.confirmTitle.hint":"Dialog title. Example: Confirm deletion?","eventAction.dataSource.hint":"Which data source will be called. Example: saveOrder or loadPersons.","eventAction.dialogName":"Dialog name","eventAction.hideText":"Hide text, show icon only","eventAction.icon.hint":"Material Symbols icon code. Example: refresh, save, visibility","eventAction.label.hint":"Text shown on the button or menu item. Example: Update table","eventAction.navigateTo.hint":"Route or URL. Example: /orders/{row.id} or https://example.com?id={item.id}","eventAction.socketSource.hint":"The websocket source whose open connection the message is sent through.","eventAction.messagePayload.hint":'Text or JSON sent to the server. Placeholders work, e.g. {"action":"publish"}.',"eventAction.reloadDataSources.hint":"After success, reload specified sources. Example: loadPersons, loadSummary","eventAction.reloadElements.help":"Example: ordersTable, summaryCards","eventAction.reloadOnReturnElements.hint":"Elements to reload on return from dialog or navigation. Example: filesTable","eventAction.responseDataPath.help":"Example: data, result.item, payload.items","eventAction.responseMode.hint":"What to do with the data source response. Example: download file or set value.","eventAction.setValueTargetPath.help":"Example: __variables.selectedRow, selectedRow or client.id","eventAction.setValueValue.contextPath.help":"Example: value, item, row.id, el3.selectedTab","eventAction.setValueValue.json.help":"Example: id=row.id, tab=el3.selectedTab","eventAction.setValueValue.template.help":"Example: Selected tab: el3.selectedTab","eventAction.setOptionsValue.contextPath.help":"Example: items, response.items, __variables.options","eventAction.setOptionsValue.json.help":'Example: [{"label":"A","value":"a"}]',"eventAction.setOptionsValue.template.help":'Example: [{"label":"{row.name}","value":"{row.id}"}]',"eventAction.toastAutoHideMs.hint":"How many milliseconds to show the toast. Example: 7000 = 7 seconds.","eventAction.toastIcon.hint":"Material Symbols icon for the toast. Example: check_circle, info.","eventAction.toastMessage.hint":"Additional explanation for the user. Example: Table data reloaded.","eventAction.toastPosition.hint":"Where on screen to show the message. Example: top-right.","eventAction.toastTitle.hint":"Short toast title. Example: Data updated","eventAction.toastVariant.hint":"Visual message type. Example: success for success, error for errors.","eventAction.trigger.hint":"When to run the action. Example: on button click or value change.","eventAction.dialogOperation":"Dialog operation","eventAction.edit":"Edit","eventAction.noDialogs":"No dialogs yet.","eventAction.reloadOnReturnElements":"Reload elements on return","history.redo":"Redo","history.undo":"Undo","preview.dialog.close":"Close dialog","preview.device.group":"Preview device","preview.language.select":"Preview language","preview.page.fallback":"Page","preview.page.select":"Preview page","preview.page.unknown":"Unknown page","preview.prev.aria":"Previous page","preview.next.aria":"Next page","preview.resize":"Resize preview width","preview.steps":"Page steps","preview.submit.aria":"Submit page","preview.toc.title":"Contents","preview.validate.aria":"Validate page","autocomplete.clear":"Clear","autocomplete.empty":"No results found","autocomplete.loading":"Loading...","autocomplete.placeholder":"Search...","fileAttribute.choose":"Choose file","fileAttribute.clear":"Clear","fileAttribute.placeholder":"Paste image URL or data URI","logger.empty":"Waiting for console output...","multiSelect.clear":"Clear","multiSelect.clearSearch":"Clear search","multiSelect.clearSelections":"Clear selections","multiSelect.empty":"No results found","multiSelect.optionFallback":"Option","multiSelect.placeholder":"Select...","multiSelect.searchPlaceholder":"Search...","multiSelect.templateError":"Template render error","multiSelect.templateUnsupportedHtml":"Template contains unsupported HTML.","select.clear":"Clear","select.clearSearch":"Clear search","select.empty":"No results found","select.optionFallback":"Option","select.placeholder":"Select...","select.searchPlaceholder":"Search...","select.templateError":"Template render error","select.templateUnsupportedHtml":"Template contains unsupported HTML.","splitter.emptyBuilder":"Drop content into splitter panel","splitter.noPanels":"No panels configured","tabs.emptyBuilder":"Drop content into tabs","common.close":"Close","common.delete":"Delete","common.dismiss":"Dismiss","documentation.columns":"Columns","documentation.controls":"Controls","documentation.copyHtml":"Copy HTML","documentation.empty":"Documentation has not been generated yet.","documentation.option.elementNumbers":"Show element numbers","documentation.option.emptyPages":"Show empty pages","documentation.option.emptySections":"Show empty sections","documentation.option.formHeader":"Include form header","documentation.option.headingCounts":"Show counts in headings","documentation.option.pageDescription":"Include page descriptions","documentation.option.unplaced":"Show unplaced elements","documentation.preset.full":"Full","documentation.preset.minimal":"Minimal","documentation.preset.standard":"Standard","documentation.presets":"Presets","documentation.preview":"Preview","documentation.regenerate":"Regenerate","documentation.section.dataSources":"Data sources","documentation.section.elements":"Element tables","documentation.section.logic":"Logic and dependencies","documentation.section.overview":"Overview","documentation.section.pageSummary":"Page summary","documentation.section.variables":"Variables","documentation.sections":"Sections","documentation.structure":"Structure","files.closePreview":"Close preview","files.download":"Download","files.preview":"Preview","files.remove":"Remove","files.unknownType":"Unknown file type","htmlCode.emptyPreview":"Empty","htmlCode.inputMode":"Input mode","htmlCode.inputModeHtml":"Manual HTML","htmlCode.inputModeRichText":"Text editor","htmlCode.openEditor":"Edit content","htmlCode.richTextPlaceholder":"Write content...","image.altDefault":"Image","image.noSource":"No image source","iframe.blocked":"Blocked insecure iframe source.","iframe.noSource":"No iframe source configured.","iframe.titleDefault":"Embedded content","listGrid.empty":"No data to display.","listGrid.loadingMore":"Loading more...","listGrid.search.apply":"Run search","listGrid.search.clear":"Clear search","listGrid.search.placeholder":"Quick search","listGrid.sort":"Sort","listGrid.sort.asc":"Ascending","listGrid.sort.desc":"Descending","messageCard.descriptionDefault":"Message details","messageCard.titleDefault":"Information","option.badge":"Badge","option.icon":"Icon","automation.action":"Action","automation.actionLabel":"Action label","automation.actionType":"Action type","automation.actions":"Actions","automation.addAction":"Add action","automation.addRule":"Add rule","automation.addState":"Add state","automation.addTransition":"Add transition","automation.addTrigger":"Add trigger","automation.condition":"Condition","automation.dataPath":"Data path","automation.dataSource":"Data source","automation.dialogName":"Dialog name","automation.dialogOperation":"Dialog operation","automation.enabled":"Enabled","automation.event":"Event","automation.fromStates":"From states","automation.id":"ID","automation.initialState":"Initial state","automation.navigateTo":"Navigate to","automation.noActions":"No actions yet.","automation.noOtherwiseActions":"No otherwise actions yet.","automation.noRules":"No rules yet.","automation.noStates":"No states yet.","automation.noTransitions":"No transitions yet.","automation.noTriggers":"No triggers yet.","automation.openInNewTab":"Open in new tab","automation.otherwiseActions":"Otherwise actions","automation.processState":"Process state","automation.processTransition":"Process transition","automation.propertyKey":"Property key","automation.readonly":"Read only","automation.refreshVariablesHelp":"Refresh variables after structure or source changes.","automation.rule":"Rule","automation.runMode":"Run mode","automation.state":"State","automation.targetElement":"Target element","automation.terminal":"Terminal","automation.titleLabel":"Title","automation.toState":"To state","automation.toastMessage":"Toast message","automation.toastTitle":"Toast title","automation.toastVariant":"Toast variant","automation.transition":"Transition","automation.transitions":"Transitions","automation.trigger":"Trigger","automation.value":"Value","automation.valueExpression":"Value expression","automation.watchPaths":"Watch paths","toast.descriptionDefault":"Toast message","toast.titleDefault":"Notification","toggle.on":"On","toggle.off":"Off","breadcrumbs.home":"Home","chart.empty":"No chart data.","chart.loading":"Loading chart data...","tabsPro.empty":"No tabs configured.","video.blocked":"Blocked insecure or missing video URL.","video.noSource":"No video source configured.","video.titleDefault":"Video","property.accept.hint":"Allowed file types for the file upload element. Specify MIME types or file extensions according to HTML `accept` rules.\nExample: .pdf,image/*","property.actionsLabel.hint":"Actions column header for the main and expanded table. If empty and header is shown, a fallback text is used.\nExample: Actions","property.actionText.hint":"Additional short action text displayed near the appropriate control or card action.","property.activeIndex.hint":"Default active element in an array, tabs, or progress scenario. Most commonly used to set the open state.","property.activeStepDataPath.hint":"Data path from which the active progress or wizard step index is read. Use when the active step is controlled from external state.","property.activeStepExpression.hint":"JEXL expression for calculating the active step. Suitable when the active step depends on multiple fields or a business condition.","property.addRowButtonText.hint":"Custom text for the button that adds a new row.","property.align.hint":"Column text alignment.","property.allow.hint":"Additional `allow` attribute for iframe or other embed scenarios. Use only the browser capabilities you actually need.\nExample: fullscreen; clipboard-read","property.allowedCountryCodes.hint":"Restricts phone or country selection to the specified list of country codes. Useful when the form should work only for specific markets.","property.allowEmpty.hint":"In a single SelectButton, allows deselecting by clicking the active button again.","property.allowFullscreen.hint":"Allows the iframe content to be shown in fullscreen mode, if supported by the embedded source.","property.allowManualNavigation.hint":"If enabled, the user can navigate between steps or tabs manually, even if they are not changed by automatic logic alone.","property.allowMultiple.hint":"Allows having multiple active values or open elements at the same time, depending on the specific component scenario.","property.allowResize.hint":"Allows the user to resize panels using the drag handle.","property.alt.hint":"Alternative text for the image. Important for accessibility and cases when the image fails to load.","property.aspectRatio.hint":"Element proportion via CSS `aspect-ratio`. Useful for media, cards, or preview blocks when you want to maintain a constant width-to-height ratio.","property.autocomplete.hint":"HTML `autocomplete` attribute for the browser. Let the browser help the user if the field matches a standard data type.\nExample: given-name, email, street-address","property.autoHide.hint":"If enabled, the element hides itself after a certain time or event. Most commonly applied to toasts or temporary notifications.","property.autoHideMs.hint":"Time in milliseconds until auto-hide. Only useful when `autoHide` is enabled.\nExample: 4000","property.autoplay.hint":"If enabled, media content tries to start automatically. Browsers often require `muted` together, especially in video scenarios.","property.autoSelectCondition.hint":'Auto-select condition after refresh. Example: {row.status} == "Y" or {row.active} == true',"property.axis.hint":"Specifies which direction the element should operate or occupy space. Useful for spacer, divider, and similar layout elements.","property.backgroundColor.hint":"Background color of the element, card, or surface. Use when you want to visually separate a block from its surroundings.","property.badge.hint":"Additional badge value next to the button or option label.","property.blockType.hint":"Defines the content block type or display variant when the component supports multiple different modes.","property.borderless.hint":"If enabled, the element is shown without a border. Suitable for a minimalist or more integrated look.","property.caption.hint":"Additional caption below media, timeline, or other visual block content. Suitable for brief context, source, or explanation.","property.captionAlign.hint":"Caption alignment. Use when `caption` should match the component composition, e.g. left, center, or right.","property.cardTemplate.hint":"Custom HTML template for a card. Supports Angular syntax: {{item.xxx}} and @if(...){...}.","property.cardTemplateName.hint":"Reference to a template created in the Templates tab. If set, it takes priority over Card template.","property.cellActions.hint":'Actions for this column. For regular columns can be displayed as dropdown / buttons, for toggle / checkbox columns they fire on clicking the control. In runtime context you can use row, parentRow, column, and checked.\nExample: [{ "label": "Disable", "trigger": "change", "type": "dataSource" }]',"property.cellActionsDisplayMode.hint":"How to display regular column cell actions: dropdown, iconButtons, or buttons. For interactive toggle / checkbox columns this property is ignored since the action fires on the control itself.\nExample: iconButtons","property.cellActionsEnabled.hint":"Enables column actions. For a regular column these are additional buttons / dropdown, and for a toggle / checkbox column actions fire on clicking the control itself.\nExample: true","property.cellActionsPlaceholder.hint":"Dropdown placeholder text for column actions.\nExample: Actions","property.chartDataPath.hint":"Path to the data array or object from which the chart is drawn. Specify the exact data path to the dataset.\nExample: stats.points","property.chartHeight.hint":"Chart height. Useful when you need a stable widget size in dashboard or cards.","property.chartType.hint":"Chart type, e.g. line, bar, or pie. The choice should match the data shape and what you want to show.","property.checkboxLabel.hint":"Text next to the checkbox or toggle control. Use when the option meaning needs to be readable without additional context.","property.closeOnBackdrop.hint":"Allows closing the dialog by clicking the backdrop.","property.collapseLabel.hint":"Collapse button text/aria.","property.color.hint":"Primary element color. Most commonly used for buttons, badges, icons, or other accents that should reference the theme or business meaning.","property.columns.hint":"Dynamic table columns list.","property.columnsConfig.hint":"Table columns configuration.","property.columnSettingsDataSourceName.hint":"Data source used for the table to get column settings schema or saved user preferences. Useful when settings are managed not just in local state.","property.columnSettingsDataSourcePath.hint":"Path to the column settings array in the data source response. Example: data.columns or payload.items.","property.columnSettingsDialogTitle.hint":"Column settings dialog title. Useful when the table has more than one settings scenario and you want a clearer name.","property.columnSettingsMode.hint":"Specifies how column settings work: local UI only, with local storage, or with host/server integration. Choose based on where user preferences should live.","property.columnSettingsStorageKey.hint":"Unique key for localStorage or other storage when column settings need to be saved between sessions.","property.confirmDeleteCancelLabel.hint":"Custom cancel button text.","property.confirmDeleteConfirmLabel.hint":"Custom confirm button text.","property.confirmDeleteMessage.hint":"Custom confirmation dialog message.","property.confirmDeleteTitle.hint":"Custom confirmation dialog title.","property.confirmRowDeletion.hint":"Show a confirmation dialog before deleting a row.","property.contentAlign.hint":"Alignment on the cross axis.","property.contentDisplay.hint":"Container content rendering: flex or grid.","property.contentGap.hint":"Gap between container child elements.","property.contentJustify.hint":"Distribution along the main axis: start, between, around, etc.","property.controlActiveIf.hint":"Condition that determines the checked state of an interactive toggle / checkbox column. If empty, uses row[key] boolean value.\nExample: {row.disabled} == true","property.controlEnabledIf.hint":"Condition that determines whether an interactive toggle / checkbox column allows clicking. If empty control is active.\nExample: {row.canEdit} == true","property.controls.hint":"Controls whether the media element shows browser player buttons. Disable only when you have your own separate control UI.","property.dataSource.hint":"Data source for options or values. Dependent fields are supported via sourceMapper param map and refresh paths (REST URL/body placeholders).","property.debounceMs.hint":"Time in milliseconds between the last keystroke and the search request. Default 1000.","property.defaultCountryCode.hint":"Default country code for the phone field. Useful when most users are from a single market.\nExample: US","property.defaultValue.hint":"Initial field value. Applied when the form opens or when the field is reset suitable for starting state or default selection.","property.deleteDataSourceName.hint":"Data source for file deletion. The file key is passed according to the specified fileKeyField (e.g. key).","property.deleteFilterDataSourceName.hint":"Data source used for deleting saved filters. Typically for table saved filters functionality.","property.description.hint":"Help text below the label. Suitable for a longer explanation that should always be visible at runtime, not just when hovering over the help icon.","property.descriptionText.hint":"Additional description text shown as extended content after the main title or label. Suitable for message card and toast scenarios.","property.detailedSearchCaseMode.hint":"Controls how detailed search compares uppercase and lowercase letters. Useful when the backend or UX requires more precise matching.","property.detailLabel.hint":"Optional column name in the details view.","property.detailsPanelTitle.hint":"Title for the expanded details or side panel view. Use when you want a clear context for the opened details block.","property.dialogHeight.hint":"Dialog height.","property.dialogMaxHeight.hint":"Maximum dialog height (e.g. 90vh).","property.dialogMaxWidth.hint":"Maximum dialog width.","property.dialogMode.hint":"Dialog display mode: modal, draggable, or fullscreen.","property.dialogWidth.hint":"Dialog width (e.g. 720px or 90%).","property.disabled.hint":"If enabled, the field is inactive and the user cannot change it.","property.disableIf.hint":'Condition for when to disable the field. Enter via Edit code. Example: {el1} != "yes"',"property.disallowAddRows.hint":"If enabled, the user cannot add new rows.","property.disallowDeleteRows.hint":"If enabled, the user cannot delete rows.","property.disallowAddRowsIf.hint":'While this condition is true, the Add button is disabled. Use form fields and {rowCount}, e.g. {rowCount} >= 5 || {status} == "closed"',"property.disallowDeleteRowsIf.hint":'Checked for every row: a row where it is true has no delete button. Use row.* for the row and general fields, e.g. {row.status} == "approved"',"property.dismissible.hint":"If enabled, the user can manually close the notification or card.","property.displayType.hint":"Controls whether the progress is rendered as a horizontal bar or a circular indicator.","property.downloadDataSourceName.hint":"Data source for file download. The file key is passed according to the specified fileKeyField (e.g. key).","property.dropzoneText.hint":"Text in the file upload zone. Use a short and action-clear call to action, e.g. drag or select a file.","property.editable.hint":"Marks that the value or record can be edited directly in that component. Most commonly used in table or card editing scenarios.","property.editorOptionLabelKey.hint":"Object key used as the edit control option label. Use together with `editorOptionValueKey`.","property.editorOptions.hint":"Manual options for inline edit or another editor control. Suitable for short static lists when a separate data source is not needed.","property.editorOptionValueKey.hint":"Object key used as the edit control technical value.","property.editorPlaceholder.hint":"Placeholder text for the edit control. Should help understand what value can be entered or selected.","property.editorType.hint":"Specifies what control is used for editing, e.g. text, number, select, or date. Choose based on column data type and UX.","property.emptyMessage.hint":"Text when the table has no data.","property.enableInlineEdit.hint":"Enables editing directly in the table or list without opening a separate dialog. Useful for quick in-place corrections.","property.enableSavedFilters.hint":"Enables saved filters functionality for the table. Useful when users frequently return to the same search settings.","property.enableSelection.hint":"Enables checkbox multi-select in the table. Selected records are accessible via {__table.<tableName>.selectedRows}, and if a Selected item template is used also via {__table.<tableName>.selectedItems}.","property.endAt.hint":"End point, date, or index for a timeline, interval, or progress. Use together with `startAt` when showing a segment.","property.events.hint":"Action list. You can set click -> navigate, click -> dataSource, or click -> toast.","property.expandableRows.hint":"Enables row expansion with additional content. Without this property neither inline nested tables nor sidePanel details will work.\nExample: true","property.expandedColumnsConfig.hint":'Expanded row nested table columns. Uses the same schema as columnsConfig.\nExample: [{ "key": "orgName", "label": "Organization" }]',"property.expandedDataSourceItemsPath.hint":"Path to the nested array in the data source response.\nExample: items or data.rows","property.expandedDataSourceName.hint":"Optional data source for details. If set, a REST/data source is called on expand instead of the nested row array.\nExample: organizationsByUser","property.expandedDisplayMode.hint":"How to display expanded content: below the row (inline) or in a side detail panel (sidePanel).\nExample: inline","property.expandedEmptyMessage.hint":"Text when the expanded row has no nested records.","property.expandedItemsPath.hint":"Path in the row object to the nested array. You can write either a simple property name or a full path.\nExample: orgList or details.items","property.expandedRowActions.hint":'Expanded row nested record actions. In runtime context additionally has parentRow / tableRow.\nExample: [{ "label": "Open", "type": "navigate", "navigateTo": "/org/{parentRow.id}/{row.id}" }]',"property.expandedTemplate.hint":"HTML template for the expanded row. Supports {{value}}, {{row.xxx}}, {{item.xxx}}.","property.expandLabel.hint":"Expand button text/aria.","property.exportAllPageSize.hint":"How many records to load at once for export when exporting all pages or all results. Important for larger data sets.","property.exportFileName.hint":"Default export file name. You can use a stable business name so it is clearer for the user.","property.exportUseColumnPicker.hint":"If enabled, you can select which columns to include in the export. Useful for wide tables.","property.expression.hint":"Expression that calculates the field value. Enter via Edit code. Example: {price} * {quantity}","property.falseLabel.hint":"Label text for the off state.","property.falseValue.hint":"Custom value when the toggle is off.","property.fileKeyField.hint":"Field name for the file key in the server object. Example: key.","property.fileNameField.hint":"Field name for the file name in the server object. Example: name.","property.fileSizeField.hint":"Field name for the file size in the server object. Example: size.","property.fileTypeField.hint":"Field name for the file type in the server object. Example: contentType.","property.filled.hint":"Controls whether the component is displayed as a filled, full, or more accented variant.","property.filterControlType.hint":"What type of control to show in detailed search for this column. auto tries to match the column type.\nExample: select or toggle","property.filterIfEqual.hint":'Show option only if its value EQUALS the specified value.\nExample: {el1} or 1 or "US".\nIf empty filter not applied.',"property.filterIfNotEqual.hint":'Show option only if its value does NOT EQUAL the specified value.\nExample: {el1} or 1 or "US".\nIf empty filter not applied.',"property.filterMultiValueDelimiter.hint":"Delimiter used to join multiple filter values into a single request parameter.\nExample: , or ;","property.filterOptionLabelKey.hint":"Object key used as the filter option label when filter options are loaded from a data source.","property.filterOptions.hint":"Manually described filter options. Use when a separate data source is not needed in detailed search.","property.filterOptionsBy.hint":"Legacy conditional filter. Leave empty if not used.","property.filterOptionsDataSourceItemsPath.hint":"Path to the filter options array in the data source response.\nExample: data.items","property.filterOptionsDataSourceName.hint":"Data source from which filter options are loaded. Suitable for dynamic detailed search values.","property.filterOptionsJson.hint":"Additional JSON with filter option schema or configuration. Use only when a simple options list is not enough.","property.filterOptionsPath.hint":"Path to the filter options structure in the object or response. Useful when options are deeply nested.","property.filterOptionsSourceType.hint":"Specifies whether filter options come from manual options, JSON, or a data source.","property.filterOptionValueKey.hint":"Object key used as the filter option value when filter options are loaded from a data source.","property.filterToggleFalseValue.hint":"Value returned by the detailed search toggle when disabled.\nExample: no or N","property.filterToggleTrueValue.hint":"Value returned by the detailed search toggle when enabled.\nExample: yes or T","property.fit.hint":"How the image or media content should fit in its container. Usually corresponds to CSS `object-fit` logic.\nExample: cover or contain","property.flatFooterSurface.hint":"If enabled, the footer block is shown without additional surface accents, border, or shadow. Useful for a flatter design.","property.flatHeaderSurface.hint":"If enabled, the header block is shown without additional surface accents. Suitable for a minimalist layout.","property.flexDirection.hint":"Flex direction: row or column.","property.forceSelection.hint":"When enabled, only selecting from the list is allowed. Non-matching input will be cleared.","property.format.hint":"Output format (for storage), e.g. YYYY-MM-DD, YYYY-MM-DD HH:mm:ss, HH:mm. If empty uses mode default.","property.frameHeight.hint":"Iframe or other frame base height. Useful for embed scenarios to avoid relying solely on automatic sizing.","property.fullWidthTabs.hint":"When enabled, tab buttons fill the entire row in equal blocks.","property.gap.hint":"Gap between cards or grid items. Can be px, rem, or other CSS size units.","property.gridAutoRows.hint":"Grid auto row size, e.g. minmax(120px, auto).","property.gridColumns.hint":"Number of grid columns.","property.gridTemplateColumns.hint":"Grid columns, e.g. repeat(2, minmax(0, 1fr)).","property.gutterSize.hint":"Gap/handle size between panels in pixels.","property.headerActions.hint":"Header action list. Suitable for standard buttons that should be shown in the table or other block header bar without extra drag-and-drop elements.","property.headerActionsDisplayMode.hint":"How to display header actions: as separate buttons, icon buttons, or another UI variant. For consistent UX, coordinate with the overall header density.","property.headerActionsPosition.hint":"Where in the table to show `headerActions`: left, center, or right of the header bar. This controls the standard header action layout.","property.headerCenterElementsPosition.hint":"Controls how elements in the header center are aligned or distributed. Useful for more complex header composition.","property.headerGroup.hint":"Name for an additional group header above the column. Adjacent columns with the same name will be merged.","property.headerMenuActions.hint":"Actions for header menu items. Useful when menu items should directly trigger navigate, data source, or another action.","property.headerMenuDataSourceItemsPath.hint":"Path to the header menu options array in the data source response.","property.headerMenuDataSourceName.hint":"Data source from which the header menu content is loaded.","property.headerMenuEnabled.hint":"Enables an additional header menu. Useful when you want actions or options in the page header.","property.headerMenuItemsPath.hint":"Path to the menu item list when the header menu is not populated from a standard array.","property.headerMenuLabelKey.hint":"Object key used as the header menu item label.","property.headerMenuOptions.hint":"Manual header menu item list. Use when a data source is not needed.","property.headerMenuPlaceholder.hint":"Placeholder text for the header menu control when nothing has been selected yet.","property.headerMenuValueKey.hint":"Object key used as the header menu item value.","property.headerTemplate.hint":"Custom template for the header block or its center part. Use when non-standard content above the form is needed.","property.headerTemplateName.hint":"Reference to a header template saved in the Templates tab. If set, it takes priority over the simple inline `headerTemplate` content.","property.headerTitleLevel.hint":"Selects the dialog title heading level: h1, h2, h3, etc.","property.hidden.hint":"If enabled, the field is completely hidden from the user. Use only when there is truly no need to show it in the current scenario.","property.hideHeader.hint":"Hides the page header.","property.hideRowIf.hint":'Condition to hide a dynamic table row. Use row.*, item.* or general fields, e.g. {row.status} != "A"',"property.homeLabel.hint":"Text for the home link in a breadcrumb or similar navigation element.","property.homeUrl.hint":"URL the home link points to in a breadcrumb or other navigation component.","property.htmlContent.hint":"Rich text HTML content. You can use placeholders, e.g. {user.name}.","property.htmlSourcePath.hint":"Path to the HTML or rich content field in the object or data source response. Useful when markup comes from data rather than a static property.","property.htmlTemplate.hint":"Custom HTML content. Supports @if/@for, {{...}} and click bindings, e.g. (click)=\"action('Open dialog')\" or (click)=\"loadData(id)\".","property.htmlTemplateName.hint":"Reference to an HTML template stored in the Templates tab. If set, it takes priority over the inline HTML template.","property.icon.hint":"Material Symbol or registered SVG icon code. Use when you want a visual accent or shorter action representation.","property.iconColor.hint":"Icon color. Useful when the icon should differ from the main text or background color.","property.iconName.hint":"Icon name or key, if the component uses a separate icon property instead of the common `icon`.","property.iconOnly.hint":"When enabled, shows only the button icon without text.","property.iconPosition.hint":"Icon position in the button: left, right, top, or bottom.","property.iconSize.hint":"Icon size. Use when precise visual proportion is needed.","property.ignoreParentState.hint":"Legacy compatibility field. Use Inherit parent state instead.","property.imageHeight.hint":"Image height. Suitable for cards, hero blocks, or cases where consistent visual rhythm is needed.","property.includeSeconds.hint":"If enabled, seconds are allowed in time/datetime modes.","property.infinityScroll.hint":"Automatic next page loading when approaching the list bottom. Works as a paginator alternative and is especially suitable for large card/list views.","property.inheritParentState.hint":"If enabled, the element inherits the read-only / disabled state of its parent container or page. Disable when a specific child needs to be unlocked.","property.initiallyOpen.hint":"Whether the dialog should be open by default.","property.initiallyVisible.hint":"Specifies whether the element should be shown immediately when the form opens, before additional logic or user actions apply.","property.inlineEditCancelOnReload.hint":"Specifies whether to cancel unsaved inline edit changes when the table or datasource is reloaded. Important when reload can happen during editing.","property.inlineEditSaveDataSourceName.hint":"Data source to which inline edit save changes are sent. Usually called for each changed row or in batches.","property.inlineEditStartMode.hint":"When to start inline editing: single click, double click, or a separate action. Choose based on desired speed and error tolerance.","property.inputMode.hint":"HTML `inputmode` hint for the browser. On mobile devices, this helps show a more appropriate keyboard.\nExample: text, email, numeric, decimal","property.items.hint":"Static item list when the component needs a data collection directly from the property rather than a separate data source.","property.itemSourceMode.hint":"Specifies where the component gets its items from: manual property, template, data source, or another source. This is the main switch for reusable item scenarios.","property.itemsPath.hint":"Path to the array in the data source response. If the data is in a deeper object in the response, specify the exact path here.\nExample: data.items","property.itemsSource.hint":"Specifies exactly where item data is loaded from. Most commonly used together with `itemSourceMode` when switching between manual and dynamic records.","property.itemTemplate.hint":"Custom template for rendering a single item. Suitable for list, accordion, tabs, steps, and other components when fully custom markup is needed.","property.itemTemplateName.hint":"Reference to an item template saved in the Templates tab. Useful when the same item appearance should be reused across multiple components.","property.key.hint":"Data key in the row object. Can also be a nested path.\nExample: user.name or status","property.label.hint":"The main label visible to the user. If the field is important to the end user, the label should be clear and understandable in business terms.","property.labelKey.hint":"Object key taken from the data source item as the user-visible text. Use together with `valueKey`.","property.labelTooltip.hint":"Help text shown next to the field label as a tooltip. Use when the explanation should be accessible on demand, but not always visible.","property.layout.hint":"List or grid display.","property.lazyContent.hint":"If enabled, the component inner content is loaded or rendered only when the user actually needs it.","property.lazyLoad.hint":"When enabled, the component loads data on demand: for tables when changing pages/sort, for autocomplete based on input. URL/context can use corresponding runtime variables.","property.level.hint":"Heading level or hierarchical weight. Useful for title/heading elements to maintain consistent document structure.","property.linkUrl.hint":"Link URL. Suitable for buttons, badges, avatars, or other elements that should open a page, document, or external resource.","property.loading.hint":"When enabled, the button shows a loading indicator instead of the icon.","property.loadingLabel.hint":"Text shown during table loading.","property.loop.hint":"If enabled, media content restarts from the beginning after ending. Useful for background videos, short animations, and demo content.","property.maskPattern.hint":"Custom mask pattern, e.g. ####-##-## or +1 ##########.","property.maskType.hint":"Input mask template. Built-in options: phone/date/time etc. For custom, use # (digit), A (letter), * (letter or digit).","property.max.hint":"Maximum slider value limit.","property.maxFiles.hint":"Maximum number of files the user can upload. Once the limit is reached, additional uploads are not allowed.","property.maxFileSizeMb.hint":"Maximum single file size in megabytes. When this limit is exceeded, the upload should be stopped before sending to the server.","property.maxHeight.hint":"Maximum container height. When content exceeds this limit, a scroll appears inside the container.\nExample: 320px or 60vh","property.maxItems.hint":"Maximum number of items in a list, selection, or dynamic structure. Useful for controlling content volume.","property.maxlength.hint":"Maximum number of allowed characters. Useful for short codes, names, or fields with strict limits.","property.maxRows.hint":"Maximum allowed number of rows in a dynamic table/dynamic panel. When the limit is reached, the add button is disabled.","property.maxSuggestions.hint":"Maximum number of autocomplete suggestions to show.","property.maxValue.hint":"Maximum allowed date/time.","property.min.hint":"Minimum slider value limit.","property.minCardWidth.hint":"Minimum card width in responsive grid mode.","property.minHeight.hint":"Minimum container height (e.g. 120px).","property.minlength.hint":"Minimum number of characters required for the field to be considered fully filled or valid.","property.minPanelSize.hint":"Minimum size of a single panel as a percentage.","property.minSearchLength.hint":"Minimum number of characters before triggering a lazy search.","property.minValue.hint":"Minimum allowed date/time.","property.mobileLabel.hint":"Mobile column name (if empty uses Label).","property.mobilePadding.hint":"Padding for mobile mode.","property.mobileWidth.hint":"Width for mobile mode. If empty, uses tablet width, then base width.","property.mode.hint":"Component or view mode. Use when the same element supports multiple operational interpretations.","property.multiple.hint":"Allows SelectButton to select multiple values. The value is then stored as an array.","property.muted.hint":"If enabled, media plays without sound. Often required together with `autoplay`, as browsers restrict audio autoplay.","property.name.hint":"Unique element code in the JSON structure. Used by logic, data path, and other elements change with care.\nExample: el1 or personFirstName","property.nameText.hint":"Additional name text or secondary `name` display. Useful for card or avatar information scenarios.","property.nextLabel.hint":'Pagination "next" button text.',"property.numberInputAlign.hint":"Text alignment inside the number input (left or right). Default is left.","property.objectPosition.hint":"CSS `object-position` value for image or video. Use when it is important which part of the image remains most visible when using `cover` etc.","property.openDataPath.hint":"Data path for a boolean value that controls dialog opening.","property.openFirst.hint":"If enabled, the first accordion, tab, or other multi-element block opens automatically.","property.openIf.hint":"Condition for opening the dialog.","property.openInNewTab.hint":"Opens the link in a new browser tab. Suitable for external URLs or scenarios where the user should not lose current form context.","property.options.hint":"Manual options with `label` and `value`. Suitable for short static lists when a separate data source is not needed.","property.optionTemplate.hint":"HTML template for rendering an option. Use {{label}}, {{value}}, {{selected}}.","property.optionTemplateName.hint":"Reference to a template in the Templates tab for rendering an option item. If set, it takes priority over the simple option template text.","property.orderClause.hint":"Additional sorting or order by expression for the request. Useful when the backend expects a specific sort format.","property.orderDirection.hint":"Sort direction, e.g. asc or desc. Usually used together with `orderClause` or table sort logic.","property.orientation.hint":"Splitter orientation: horizontal or vertical.","property.pageBackgroundColor.hint":"Page background color.","property.pagePadding.hint":"Page inner padding. You can specify all sides or individual sides.","property.pageSize.hint":"Records per page.","property.pageSizeOptions.hint":"List of available page sizes for the paginator selector. Example: 10,25,50,100. Only use values actually supported by the backend.","property.paginator.hint":"Shows pagination controls.","property.paginatorAlign.hint":"Pagination control alignment. Useful when the footer or table chrome needs to match the overall design system.","property.paginatorMaxButtons.hint":"Maximum number of pagination buttons to show at once. A larger value shows more pages but takes more space.","property.paginatorStyle.hint":"Pagination visual style. Helps coordinate the paginator with the rest of the design system when `paginatorVariant` alone is not enough.","property.paginatorVariant.hint":"Pagination visual variant. Useful when you need to match the paginator to the rest of the UI styling.","property.panelBackgroundColor.hint":"Background color (e.g. #ffffff).","property.panelBorderColor.hint":"Border color (e.g. #d9dce3).","property.panelBorderWidth.hint":"Border thickness (e.g. 1px).","property.panelPadding.hint":"Container inner padding (e.g. 12px or 1rem).","property.panelRadius.hint":"Container corner radius (e.g. 12px).","property.panels.hint":"Splitter panels list. The value field is used as the panel key and tabRows identifier.","property.panelShadow.hint":"CSS shadow value (e.g. 0 8px 24px rgba(0,0,0,.12)).","property.params.hint":"Additional TABLE-POST params. Up to 5 rows.","property.pattern.hint":"Additional RegExp pattern for validating text value. Use when strict format control is needed, e.g. for code, registration number, or identifier structure.","property.pickerMode.hint":"Date picker mode: date only, date+time, or time only.","property.pill.hint":"If enabled, the badge or similar element is shown with fully rounded corners.","property.placeholder.hint":"Text shown when the field is empty. Use as an example or short hint, but not as the only explanation for the field.","property.playsInline.hint":"Allows video to play inline instead of fullscreen on mobile browsers. Especially relevant for iOS and embed scenarios.","property.points.hint":"Data points for a chart or progress visualization. Most commonly used when data is passed directly at the property level.","property.position.hint":"Element, legend, or helper block position relative to the container. The exact meaning depends on the component.","property.poster.hint":"Image shown before playing the video. Useful when you want a clear first frame preview or branding accent.","property.previewSize.hint":"Builder or documentation preview size. Useful when you want to quickly check a specific component scale.","property.prevLabel.hint":'Pagination "back" button text.',"property.primaryButtonText.hint":"Primary button text. Suitable for dialog, toast, message card, or other CTA scenarios.","property.privacyMode.hint":"Enables privacy mode for an integrated media provider, when supported. Most commonly used in embed scenarios to reduce tracking or cookies.","property.provider.hint":"Specifies what media or embed provider is used, e.g. native, youtube, or vimeo. This can affect available additional settings.","property.queryContextKey.hint":"Runtime context key name for the query value. Example: query or searchTerm.","property.quickSearchCaseMode.hint":"Controls quick search letter case sensitivity. Useful when search UX needs to be stricter or more lenient.","property.quickSearchCondition.hint":"Additional condition for quick search to work. Use when search should activate only in a specific context.","property.quickSearchParamName.hint":"Request parameter name to which the quick search value will be passed.\nExample: q or searchTerm","property.quickSearchOnType.hint":"Off: the quick search runs only when the search button is pressed or Enter is hit. On: it runs as the user types, after the quick search debounce.","property.quickSearchPlaceholder.hint":"Placeholder text for the quick search field. Should clearly say what the user can search for here.","property.radius.hint":"Corner radius. Can be used for cards, images, inputs, or other surfaces.","property.readOnly.hint":"If enabled, the value is displayed but the user cannot change it. Suitable for cases where data should be shown as read-only.","property.readonlyIf.hint":'Condition for when to make the field read-only. Enter via Edit code. Example: {status} == "locked"',"property.referrerPolicy.hint":"Additional iframe or media `referrerPolicy` policy. Use only if the host source requires specific browser behavior.","property.removeBackgraund.hint":"Disables the page background.","property.removeRowButtonText.hint":"Custom text for the button that removes a row.","property.required.hint":"If enabled, the user cannot submit the form without filling this field. Typically used together with a clear required message.","property.requiredMessage.hint":"Text shown when a required field is left empty. If the form is multilingual, consider localizing this message too.","property.requireIf.hint":"Condition for when to make the field required. Enter via Edit code. Example: {el2} == 1","property.resetIf.hint":"Condition for when to reset the field value to defaultValue. The trigger fires when the condition transitions to true.","property.resetChildrenOnHide.hint":"Clear every field inside this container when it becomes hidden, or when a dialog closes. Use it so a reopened dialog starts from the default values instead of the previous input.","property.resetOnHide.hint":"Clear the field value whenever it stops being visible its own Visible if turning false, an ancestor panel being hidden, or a dialog closing all count.","property.responsiveMode.hint":"Auto or stack in mobile mode.","property.routeIncludeCurrent.hint":"Whether to include the current page in the breadcrumb or route chain. Useful when you want to precisely show the user location in the hierarchy.","property.routeLabelDataKey.hint":"Data key name from which the route item label is taken. Use when breadcrumb text should be generated from a data source object.","property.routeUsePathFallback.hint":"If the route label cannot be obtained from data, allows using the URL path segment as a fallback name.","property.rowActions.hint":"Actions for each row (dropdown).","property.rowActionsDisplayMode.hint":"How to display row actions: dropdown, buttons, or another format. This affects table density and UX.","property.rowActionsDropdownButtonStyle.hint":"When row actions are shown as a dropdown menu, allows choosing whether the three-dot button has a default or borderless style.","property.rowActionVisibilityPath.hint":"Path in the row object that controls whether row actions should be shown. Useful when actions are not available for all records.","property.rowClickActions.hint":"Actions that fire when clicking an entire row. Useful for navigation, opening details, or quick selection.","property.rowClickOpensDetails.hint":"If enabled, clicking a row opens its details view. Convenient when you do not want a separate expand button.","property.rowExpandActions.hint":"Actions for the expanded row scenario. Useful when the details view has its own actions separate from the main row.","property.rowHover.hint":"Enables an additional hover state for rows. Can improve UX when the table has many interactive actions.","property.rows.hint":"Number of textarea rows. A larger value allows seeing more input text at once.","property.rowTemplate.hint":"Custom HTML template for an entire table row. In context you can use row, item, value, rowIndex, selected, expanded, and table.*.","property.rowTemplateName.hint":"Reference to a row template stored in the Templates tab. If set, it renders the entire row data area, while expand, selection, and action columns remain separate.","property.sandbox.hint":"Iframe `sandbox` attribute. Restrict only as much as needed, as overly strict sandbox can block required content behavior.","property.saveColumnSettingsDataSourceName.hint":"Data source to which column settings save changes are sent. Useful when user preferences need to be kept on a server or host API.","property.savedFilterCodeKey.hint":"Object key that holds the saved filter code or short identifier.","property.savedFilterDescriptionKey.hint":"Object key that holds the saved filter description. Useful when the user needs to see not just the name but also the context.","property.savedFilterIdKey.hint":"Object key that holds the saved filter unique ID.","property.savedFilterNameKey.hint":"Object key that holds the saved filter name. Usually the main selection label.","property.savedFilterPayloadKey.hint":"Object key that holds the actual filter payload schema or JSON content, used later to apply the filter.","property.savedFiltersDataSourceName.hint":"Data source from which previously saved filters are loaded. Usually used together with save and delete filter data sources.","property.savedFiltersItemsPath.hint":"Path to the saved filters array in the data source response.\nExample: data.items","property.saveFilterDataSourceName.hint":"Data source used for saving the current filter. One of the main points of the saved filters functionality.","property.searchDebounceMs.hint":"Additional search debounce time in milliseconds. A larger value reduces request count but slows response.","property.searchDataSourceName.hint":"Data source called while the user types, with the text available as {query} in its URL or body. The answer may be any array of objects: pick which field is the label and which is the value below.","property.searchItemsPath.hint":"Path to the array inside the response, e.g. data.items. Leave empty when the response is the array itself or a common wrapper (items, data, results, rows, content).","property.searchLabelKey.hint":"Field of each record shown in the dropdown, e.g. name or address.city. Leave empty to try label, name, title and text.","property.searchValueKey.hint":"Field of each record stored as the value, e.g. id. Leave empty to store the whole selected record as an object.","property.searchResultLimit.hint":"How many records the data source returns at most, e.g. 100. When an answer has fewer records, it already holds every match, so typing further filters it locally instead of calling the data source again. Leave empty to call it on every change. Also passed as {limit}.","property.secondaryButtonText.hint":"Secondary button text. Useful in dialog or message scenarios where two clearly separate actions are needed.","property.selectAllLabel.hint":"Select all checkbox label/aria.","property.selectButtonOptions.hint":"SelectButton options list with additional fields: label, value, icon, badge, and visibleIf.","property.selectionActions.hint":"Actions applied to the set of selected rows. Useful for bulk action scenarios, e.g. export, deletion, or mass status change.","property.selectionActionsLabel.hint":"Label or placeholder text for the selection action control. Should clearly say that the action will apply to selected rows.","property.selectionItemTemplate.hint":'Specifies how to convert each selected row into the selectedItems array. If empty selectedItems will be the entire row object. If you write row.oraId or {row.oraId} you get an ID array. If you write JSON, e.g. {"oraId":"{row.oraId}"}, you get a custom object array.',"property.selectionKey.hint":"Unique field for identifying selected rows. Example: id or classifier.id","property.selectLabel.hint":"Select column label.","property.selectRowLabel.hint":"Single row checkbox label/aria.","property.separator.hint":"Separator, divider, or visual split symbol / text. The exact meaning depends on the component.","property.shadow.hint":"Additional shadow variant or intensity for the component. Use when you need to quickly control the surface depth feel.","property.shape.hint":"Additional visual variant describing form or silhouette, e.g. square, rounded, circle.","property.showActionsHeaderLabel.hint":"Controls whether to show text in the action column header. Works for both the main and expanded nested table.\nExample: false","property.showBorder.hint":"If enabled, the component shows a border. Useful when border should not be forced in all cases.","property.showCloseButton.hint":"Shows a close button in the dialog header.","property.showColumnSettings.hint":"Shows the column settings action in the header bar. When disabled, the user cannot change visible columns and their order through the UI.","property.showConnector.hint":"Shows a connecting line between steps or related elements. Most commonly used in progress or stepper scenarios.","property.showContent.hint":"Controls whether to show the main element content. Useful when the component can work as only a shell or only a header.","property.showDetailedSearch.hint":"Shows the expanded search block with more filter fields, conditions, and column controls.","property.showDivider.hint":"If enabled, a visual divider is shown below the title. Use when you want to more clearly separate a page title or other heading block from content below.","property.showExpandChevron.hint":"Shows the expand button in the first column. The chevron is shown only for rows that can actually expand.\nExample: true","property.alwaysShowExpandChevron.hint":"Shows the expand chevron on every row, even when that row has no nested records yet. Use when details come from an expanded datasource or template, so the column does not look half-empty.\nExample: true","property.showExport.hint":"Shows an export action or button. Useful in tables when the user needs to download results.","property.showHeaderControls.hint":"Shows additional controls in the header bar. Suitable for search, export, menu, or other top-bar functions.","property.showHeaderLabel.hint":"Controls whether to show label text in the column header row. Useful for action, checkbox, or technical columns when you want to leave an empty header.\nExample: false","property.showHome.hint":"Shows the home link in a breadcrumb or similar navigation component.","property.showIcon.hint":"Controls whether the element shows an icon at all. Useful when the icon should be optional, not mandatory.","property.showInDetails.hint":"Whether the column is shown in the details block / expanded details view.","property.showInline.hint":"Options are displayed in a single row.","property.showInTable.hint":"Whether the column is shown in the main table.","property.showLegend.hint":"Shows a legend for the chart or other visual component, if you want to explain colors or series.","property.showMaxLengthCounter.hint":"When enabled and maxlength is set, a character counter is shown below the text field. This helps the user see how many characters can still be entered.","property.showNumbers.hint":"Shows numbering in steps, lists, or other components where order should be emphasized.","property.showPageSizeSelector.hint":"Shows a paginator selector that allows the user to change page size. Suitable for longer lists and different work scenarios.","property.showPanelHeaders.hint":"Whether to show a header for each panel.","property.showPreview.hint":"Shows the builder or runtime preview part. Useful when a certain component can work without a live preview too.","property.showQuickSearch.hint":"Shows the quick search field. Suitable for tables where a single short field is needed for quick filtering.","property.showRecordCount.hint":"Shows total record count summary near the paginator or list footer. Useful when the user cares about the full result scale, not just the current page.","property.showRelated.hint":"Shows related content, additional block, or secondary details. The exact meaning depends on the component, so use when nearby information needs to be revealed.","property.showSelectedIcon.hint":"Shows a check icon on selected SelectButton buttons.","property.showSortControl.hint":"Shows a sort button above the list/grid or other data source view. For it to work, additionally specify `sortField`.","property.showTriggerButton.hint":"Enables a button or other control that opens a dialog or related action. If disabled, trigger fields can usually be hidden.","property.showValueLabel.hint":"Shows the current slider value next to the control.","property.size.hint":"Component size variant or semantic scale, e.g. sm, md, lg. Differs from `width` as it usually controls styling rather than exact CSS width.","property.sortable.hint":"Whether sorting is allowed by this column.","property.sortField.hint":"Object field by which the list/grid or other data source view should be sorted.\nExample: name, createdAt, or user.lastName","property.spacing.hint":"Overall spacing between component inner parts. Useful when you need to quickly increase or decrease visual density.","property.spellcheck.hint":"HTML `spellcheck` control. Useful for text fields when you want to leave or disable browser spell-checking.","property.src.hint":"Main media source URL, e.g. for image or iframe. If using a local file, it may take priority.","property.srcFile.hint":"Select a local image from your computer. This will set a data URL and it will take priority over the Image src URL.","property.startAt.hint":"Start point, date, or index for a timeline, interval, or progress. Usually used together with `endAt`.","property.stateful.hint":"If enabled, splitter panel sizes are saved in localStorage.","property.stateKey.hint":"Optional localStorage key for splitter state.","property.status.hint":"Legacy compatibility field. For new elements, use the Read only checkbox.","property.statusRules.hint":'Status rules with condition and tone. For table status columns, additionally uses label, optional icon, and rounded; for dynamic table columns, the rule colors the entire cell background. Condition supports {row.*}, {item.*}, {parentRow.*}, {value}.\nExample: [{ "condition": "{row.submitted} == \\"Y\\"", "label": "Submitted", "tone": "success", "icon": "check_circle", "rounded": true }]',"property.statusShowIcon.hint":"If enabled, the status badge shows an icon. If no custom icon is specified in the rule, the tone default is used.\nExample: true","property.step.hint":"Slider step (e.g. 1, 0.5).","property.stepsDataPath.hint":"Path to the steps array in the data object or data source response. Example: data.steps or payload.workflow.steps.","property.stepTemplate.hint":"Custom template for rendering a single step item. Allows fully taking over the stepper visuals and using your own data binding.","property.stepTemplateName.hint":"Reference to a step item template saved in the Templates tab. Useful for reusable stepper or timeline scenarios.","property.stickyHeader.hint":"When enabled, the top part of the table sticks to the top when scrolling down. If the table has header controls, quick search, filters, export, and column headers remain visible together.","property.styleType.hint":"Additional visual style variant. Use when the component has multiple typical styling modes.","property.strictOptions.hint":"Validates whether the current value or array of selected values exists among the currently available option values.","property.subtitle.hint":"Secondary text below the title. Suitable for cards, page titles, or other blocks that need additional context.","property.tableDataSourceName.hint":"Primary table data source name from the DataSources tab. If set, the table loads data through this source.\nExample: loadUsers","property.tableItemsPath.hint":"Path to the array in the response. Example: data.items. If empty, auto-detection is attempted.","property.tableStyle.hint":"Table styling variant. Can control density, border, zebra, or other general table appearance.","property.tableTotalPath.hint":"Path to the total field for lazy mode. Example: meta.total or totalCount.","property.tabletWidth.hint":"Width for tablet. If empty, uses the base desktop width.","property.tabs.hint":"Tabs list. The value field is used as the tab ID, label for the name, visibleIf for hiding.","property.tabsDataPath.hint":"Path to the tabs array in the data object or data source response. Useful for dynamic tabs coming from the server.","property.tabsPosition.hint":"Tab header position: top or sides (left/right). Default is top.","property.tabsVariant.hint":"Tabs visual variant, e.g. underline, pills, or another design mode.","property.tabTemplate.hint":"Custom template for rendering a single tab item. Suitable when the tab header or content should be completely custom markup.","property.tabTemplateName.hint":"Reference to a tab item template saved in the Templates tab. Convenient when the same tab appearance should be used across multiple components.","property.template.hint":"Custom HTML template for the cell. Example: <strong>{{value}}</strong> {{row.status}}","property.templateName.hint":"Reference to a general template saved in the Templates tab. Depending on the component, it can replace inline `template`, `cardTemplate`, or another markup property.","property.text.hint":"Main text visible to the user. Depending on the element, this may be the button label, badge text, or other primary value.","property.textColor.hint":"Button text color. Useful with a light background.","property.thickness.hint":"Line, divider, or other thin visual element thickness.","property.type.hint":"Allows changing the element type without recreating it. Useful only for closely related types when you want to preserve some common properties.\nExample: text -> number","property.title.hint":"Main heading text. Use when the element has its own separate heading or hero header.","property.titleUnderline.hint":"If enabled, an underline or accent is shown below the title. Useful for visual emphasis.","property.titleUnderlineColor.hint":"Title underline or accent color.","property.titleUnderlineWidth.hint":"Title underline width or length.","property.toggleMode.hint":"Toggle mode: checkbox returns true/false, toggle allows custom true/false values.","property.tone.hint":"Higher-level semantic shade, e.g. info, success, warning, or risk. Useful when the visual appearance should follow a status.","property.totalFractionDigits.hint":"Number of decimal places to show in the totals row. If empty auto.","property.totalLocale.hint":"Optional locale override for the totals row (e.g. en-US). If empty uses the form locale.","property.totalMaskPattern.hint":"Custom mask pattern for the total when custom mask type is selected.","property.totalMaskType.hint":"Mask type for the calculated total.","property.totalPath.hint":"Path to the total record count in the backend response. Required when the list/grid or table uses lazy load and server-side pagination needs to know the total count.\nExample: total, data.totalCount, or paging.total","property.totalTemplate.hint":"Footer text template. Use {total}, e.g. Total: {total} items sold.","property.totalToData":"Total to data","property.totalToData.hint":'Publishes the column sum into the data as "<table>.<column>-total", for example el4.column1-total. Any element can then read it with {el4.column1-total}, and it travels with the data JSON. Turning on "Use totals" publishes it as well.',"property.totalUseGrouping.hint":"Whether to show thousand separators in totals by locale.","property.trendDirection.hint":"Trend direction, e.g. up, down, or neutral. Most commonly used in stats or KPI cards.","property.trendText.hint":"Additional text next to the trend indicator. Use for a short KPI or change explanation.","property.triggerAlign.hint":"Dialog or other trigger button alignment in the container. Useful when precise positioning is needed.","property.triggerColor.hint":"Dialog open button primary color.","property.triggerIcon.hint":"Dialog open button icon.","property.triggerIconOnly.hint":"When enabled, the dialog open button shows only the icon.","property.triggerIconPosition.hint":"Dialog open button icon position.","property.triggerMobileWidth.hint":"Dialog open button width in mobile mode.","property.triggerText.hint":"Dialog open button text in preview and fill mode.","property.triggerTextColor.hint":"Dialog open button text or icon color.","property.triggerVariant.hint":"Dialog open button variant: solid, outline, or text.","property.triggerWidth.hint":"Dialog open button width.","property.trueLabel.hint":"Confirmed label text for the on state.","property.trueValue.hint":"Custom value when the toggle is on. You can write text, number, or JSON.","property.storageMode.hint":"Base64 keeps each file inside the form value as { name, size, type, lastModified, contentType, base64 }. Upload to server sends it to the upload data source and keeps fileKey instead of base64. Base64 makes the value about a third larger than the file, so set a max file size.","property.uploadDataSourceName.hint":"Data source for file upload. The component sends POST (or the specified method) with FormData and the file.","property.uploadFormFieldName.hint":"FormData file field name in the upload request. Example: file.","property.useAsNumber.hint":"If enabled, the option value is converted to a number.","property.useTotals.hint":"Show this column sum in the table footer row.","property.validators.hint":"Additional validators: built-in (min/max/pattern/email) or custom condition with error message.","property.valueKey.hint":"Object key taken as the technical option or item value. Most commonly used together with `labelKey`.","property.valueLabelMode.hint":"Controls what is shown as the progress value: percentage, raw value, or current/max.","property.valueStorageType.hint":"Specifies how to store the number element value in the data: number or string. Default is number.","property.valueText.hint":'Primary displayed value for a card, KPI, or other content block. Suitable when the element has a separate "value" visual field.',"property.variant.hint":"Button variant: solid, outline, or text.","property.virtualScroll.hint":"Enables virtual rendering for large lists or tables. Only visible items are rendered, significantly reducing DOM load.","property.virtualScrollBuffer.hint":"Number of extra items above and below the visible viewport that are rendered in advance. A larger value gives smoother scrolling but increases DOM size.","property.virtualScrollRowHeight.hint":"Estimated row height in pixels for the virtual scroll scenario. Should be as accurate as possible so scroll math does not skew.","property.virtualScrollViewportHeight.hint":"Viewport height for the virtual scroll container. If not set or too small, virtualization UX may become inconvenient.","property.visibleIf.hint":'Condition for when to show the field. Enter via Edit code. Example: {el1} == "yes"',"property.visualFormatEnabled.hint":"Visually formats the number input by locale (e.g. US: 12,345.67), but still stores a number in the data. Use when readable formatting and a clean input appearance matter.","property.visualFormatLocale.hint":"Optional locale override. If empty, uses Form settings -> Locale.","property.visualFormatMaxFractionDigits.hint":"Maximum number of digits shown after the decimal point.","property.visualFormatMinFractionDigits.hint":"Minimum number of digits shown after the decimal point.","property.visualFormatUseGrouping.hint":"Whether to show thousand separators (group separator).","property.width.hint":"Field width in desktop or base mode. Can be percentage, px, or other CSS units.\nExample: 100% or 320px","propertyType.checkbox.hint":"On/Off selection. Most commonly used to enable or disable a feature.","propertyType.color.hint":"Color field with color picker. Suitable for text, background, border, or icon.","propertyType.columnList.hint":"Column configuration. Suitable for object list structure or tabular data description.","propertyType.eventActions.hint":"Element event and action configuration. Use for click, selection, row, or other action scenarios.","propertyType.file.hint":"File selection from computer with automatic encoding to data URL. Suitable for local images or other asset-type fields.","propertyType.htmlCode.hint":"HTML editor with Angular template syntax and format button. Use when non-standard markup is needed.","propertyType.number.hint":"Numeric value. Useful for limits, sizes, quantities, and other mathematical parameters.","propertyType.options.hint":"Options list with `label` and `value`. Useful for static dropdown or radio scenarios.","propertyType.padding.hint":"Padding with top/right/bottom/left support. Useful for internal offset of surfaces and containers.","propertyType.progressFlowItems.hint":"Progress flow item list. Useful for stepper, timeline, or status flow where each item has label, value, tone, or template data.","propertyType.select.hint":"Selection from a list. Suitable when the user must choose one from several allowed values.","propertyType.selectButtonOptions.hint":"SelectButton options list with `label`, `value`, `icon`, `badge`, and `visibleIf`. Suitable for button-style selections.","propertyType.size.hint":"Size with units: px, %, rem, etc. Suitable for width, height, or spacing.","propertyType.sourceMapper.hint":"Data source mapping. Use when you need to clearly specify how data source fields are mapped to builder / runtime fields.","propertyType.sourceName.hint":"Data source selection from the list of already created sources.","propertyType.tableColumns.hint":"Table column configuration, including labels, templates, filters, and actions.","propertyType.tableRequestParams.hint":"TABLE-POST request parameter list. Useful for server-side tables, filters, and additional backend context.","propertyType.tableStatusRules.hint":"Status rules configuration with condition, tone, and additional badge fields. For table status columns use label/icon, for dynamic table columns condition and tone are most important.","propertyType.templateName.hint":"Reference to a template stored in the Templates tab. Suitable for reusable markup instead of inline HTML.","propertyType.text.hint":"Text field. Suitable for short values, codes, and expression-type fields where logic is written via Edit code.","propertyType.textarea.hint":"Larger text field for longer descriptions, JSON fragments, or more complex text.","propertyType.validators.hint":"Validators list: built-in, custom conditions, and additional messages."};const It={inputMask:"Input maskcsdas",rows:"Rows",pickerMode:"Picker mode",outputFormat:"Output format",minValue:"Min value",maxValue:"Max value",visualFormatEnabled:"Use visual number format",valueStorageType:"Store value as"};const Nt={"status.default":"Default","status.readonly":"Read only"};const Fr={general:"General",restrictions:"Restrictions",validators:"Validators",logic:"Logic",dataSet:"Data",columns:"Columns",options:"Options",events:"Events",design:"Design",texts:"Texts"};function Lr(i){return String(i??"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_\-]+/g," ").split(/\s+/).map(e=>e.trim()).filter(e=>e.length>0)}function Vr(i){const e=String(i??"").trim();if(!e)return e;return e.charAt(0).toUpperCase()+e.slice(1)}function Ot(i){const e=Lr(i);if(e.length===0)return i;return Vr(e.map(t=>{const r=t.toLowerCase();if(r==="id")return"ID";if(r==="html")return"HTML";if(r==="json")return"JSON";if(r==="url")return"URL";if(r==="ui")return"UI";return r}).join(" "))}function Ft(i){if(It[i])return It[i];if(i.endsWith("If")&&i.length>2)return`${Ft(i.slice(0,-2))} if`;return Ot(i)}function Rr(i,e){const t=`${i}.${e}`;if(Nt[t])return Nt[t];return Ot(e)}function kr(i){return Fr[i]??null}function zr(i,e){const t=String(i??"").trim();String(e??"").trim().toLowerCase();if(!t)return null;if(t.startsWith("property."))return Ft(t.slice(9));if(t.startsWith("propertyChoice.")){const r=t.slice(15);const a=r.indexOf(".");if(a===-1)return null;const o=r.slice(0,a);const n=r.slice(a+1);if(!o||!n)return null;return Rr(o,n)}if(t.startsWith("propertyCategory."))return kr(t.slice(17));return null}const Te=new vt("NGX_VIEW_BUILDER_UI_TRANSLATIONS");function Br(i,e){return wr([{provide:Te,multi:true,useValue:{dictionaries:i,language:e?.language??null}}])}function jr(i){let e=String(i??"");const t=/[ÃÂÅÄâ�]/;if(!t.test(e))return e;for(let r=0;r<3;r+=1){if(!t.test(e))break;try{const a=Uint8Array.from(Array.from(e).map(n=>n.charCodeAt(0)&255));const o=new TextDecoder("utf-8").decode(a);if(!o||o.includes("�")||o===e)break;e=o}catch{break}}return e}function Lt(i){const e={};Object.keys(i??{}).forEach(t=>{const r=i[t];if(!r||typeof r!=="object")return;e[t]={};Object.keys(r).forEach(a=>{e[t][a]=jr(String(r[a]??""))})});return e}function _r(){return Lt({en:Mt})}var me=class ot{providerConfigs=D(Te,{optional:true})??[];language=B("en",...ngDevMode?[{debugName:"language"}]:[]);dictionaries=B(_r(),...ngDevMode?[{debugName:"dictionaries"}]:[]);onLanguageChanged=new g;onDictionariesChanged=new g;constructor(){this.initializeFromProviders()}initialize(e,t){if(t)this.setDictionaries(t);if(e)this.setLanguage(e)}setLanguage(e){const t=String(e??"").trim();if(!t)return;if(this.language()===t)return;this.language.set(t);this.onLanguageChanged.fire({language:t})}getLanguage(){return this.language()}setDictionaries(e,t=true){if(!e||typeof e!=="object")return;const r=Lt(e);const a=t?this.mergeDictionaries(this.dictionaries(),r):this.mergeDictionaries({},r);this.dictionaries.set(a);this.onDictionariesChanged.fire({dictionaries:a})}setPropertyHints(e){if(!e||typeof e!=="object")return;const t={};Object.keys(e).forEach(r=>{t[`property.${r}.hint`]=e[r]});this.setDictionaries({[this.language()]:t})}getPropertyHint(e){return this.translateOrEmpty(`property.${e}.hint`)}setPropertyTypeHints(e){if(!e||typeof e!=="object")return;const t={};Object.keys(e).forEach(r=>{t[`propertyType.${r}.hint`]=e[r]});this.setDictionaries({[this.language()]:t})}getPropertyTypeHint(e){return this.translateOrEmpty(`propertyType.${e}.hint`)}translateOrEmpty(e){const t=this.translate(e);return t===e?"":t.trim()}translate(e,t){const r=this.language();const a=this.dictionaries();if(a[r]&&Object.prototype.hasOwnProperty.call(a[r],e))return a[r][e];if(t!=null&&t!==""&&t!==e)return t;const o=zr(e,r);if(o)return o;if(a["en"]&&Object.prototype.hasOwnProperty.call(a["en"],e))return a["en"][e];return e}mergeDictionaries(e,t){const r={};Object.keys(e).forEach(a=>{r[a]={...e[a]}});Object.keys(t).forEach(a=>{r[a]={...r[a]??{},...t[a]}});return r}initializeFromProviders(){let e="";this.providerConfigs.forEach(t=>{if(t?.dictionaries)this.setDictionaries(t.dictionaries);const r=String(t?.language??"").trim();if(r)e=r});if(e)this.setLanguage(e)}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ot,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ot,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:me,decorators:[{type:k,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});var q=class nt{uiTranslationService=D(me);_data=B({},...ngDevMode?[{debugName:"_data"}]:[]);dirtyState=B(false,...ngDevMode?[{debugName:"dirtyState"}]:[]);baselineSnapshot="{}";onValueChanging=new g;onValueChanged=new g;onDataMutated=new g;onClearValue=new g;constructor(){this.onValueChanging.add(e=>{if(this.isSenderInteractionLocked(e.sender))return;const t=this.getValue(e.dataPath);if(j(t,e.newValue))return;this.setValue(e.dataPath,e.newValue,{sender:e.sender,trigger:e.trigger??"change",oldValue:e.oldValue}).then(()=>{this.onValueChanged.fire({sender:e.sender,dataPath:e.dataPath,newValue:e.newValue,oldValue:e.oldValue,trigger:e.trigger})})});this.onClearValue.add(e=>{if(this.isSenderInteractionLocked(e.sender))return;this.clearValue(e.dataPath);this.onValueChanged.fire({sender:e.sender,dataPath:e.dataPath,newValue:void 0,oldValue:e.oldValue,trigger:e.trigger??"change"})})}async deleteValue(e){const t=this.normalizeDataAliasPath(e);if(!t||!Pe(this._data(),t))return;const r=this.getValue(t);this._data.update(a=>{const o={...a};Ct(o,t);return o});this.onDataMutated.fire({dataPath:t,newValue:void 0,oldValue:r,trigger:"programmatic"});this.recomputeDirtyState()}getData(){return this._data()}getRawData(){return this._data()}buildRuntimeContext(e,t){const r=pe(t??this._data());const a={...r,data:r,__language:this.getActiveLanguage()};this.applyTabsRuntimeAliases(a,r);this.applyProgressFlowRuntimeAliases(a,r);return e?Object.assign(a,e):a}getActiveLanguage(){return String(this.uiTranslationService.getLanguage()??"").trim()}setData(e){const t=pe(e);this._data.set(t);this.captureBaselineFromCurrent()}async setValue(e,t,r){const a=this.normalizeDataAliasPath(e);if(!a)return Promise.resolve();const o=this.getValue(a);if(j(o,t))return Promise.resolve();const n=r?.oldValue!==void 0?r.oldValue:o;this._data.update(s=>{const l={...s};xt(l,a,t);return l});this.onDataMutated.fire({dataPath:a,newValue:t,oldValue:n,sender:r?.sender??null,trigger:r?.trigger??"programmatic"});this.recomputeDirtyState();return Promise.resolve()}clearValue(e){const t=this.normalizeDataAliasPath(e);if(!t||!Pe(this._data(),t))return;const r=this.getValue(t);this._data.update(a=>{const o={...a};Ct(o,t);return o});this.onDataMutated.fire({dataPath:t,newValue:void 0,oldValue:r,trigger:"programmatic"});this.recomputeDirtyState()}setElementValue(e){return new Promise(t=>{let r=null;this._data.update(a=>{const o={...a,...e};r=o;queueMicrotask(()=>t(true));return o});this.recomputeDirtyState(r??void 0)})}renameObjectKeyDeep(e,t){const r=this._data();const a=this.renameObjectKeyDeepInternal(r,e,t);if(!a||typeof a!=="object")return;this._data.set({...a});this.recomputeDirtyState()}updateNestedTableValue(e,t,r,a){this._data.update(o=>{const n=o[e]||[];if(t===-1){const l=n.map(h=>({...h,[r]:a}));return{...o,[e]:l}}const s=[...n];while(s.length<=t)s.push({});s[t]={...s[t],[r]:a};return{...o,[e]:s}});this.recomputeDirtyState()}getValue(e){const t=String(e??"").trim();if(!t)return;if(t==="data")return pe(this._data());if(t==="__language")return this.getActiveLanguage();const r=this.normalizeDataAliasPath(t);if(!r)return;const a=this._data();const o=x(a,r);if(o!==void 0)return o;if(Object.prototype.hasOwnProperty.call(a,r))return a[r]}getColumnValue(e,t,r){return this._data()[e][r][t]??null}removeValue(e){this._data.update(t=>{const r={...t};delete r[e];return r});this.recomputeDirtyState()}isDirty(){return this.dirtyState()}markPristine(){this.captureBaselineFromCurrent()}captureBaselineFromCurrent(){this.baselineSnapshot=this.createComparableSnapshot(this._data());this.dirtyState.set(false)}recomputeDirtyState(e){const t=this.createComparableSnapshot(e??this._data());this.dirtyState.set(t!==this.baselineSnapshot)}createComparableSnapshot(e){const t=this.normalizeValueForDirty(e);return JSON.stringify(t)}normalizeValueForDirty(e){if(Array.isArray(e))return e.map(t=>this.normalizeValueForDirty(t));if(e&&typeof e==="object"){const t=e;const r={};Object.keys(t).filter(a=>!a.startsWith("__")).sort((a,o)=>a.localeCompare(o)).forEach(a=>{r[a]=this.normalizeValueForDirty(t[a])});return r}return e}isSenderInteractionLocked(e){if(!e||typeof e!=="object")return false;const t=e;if(Boolean(t["__pfInteractionLocked"]))return true;return Boolean(t["readOnly"])||Boolean(t["disabled"])}renameObjectKeyDeepInternal(e,t,r){if(Array.isArray(e))return e.map(a=>this.renameObjectKeyDeepInternal(a,t,r));if(e&&typeof e==="object"){const a=e;const o={};Object.keys(a).forEach(n=>{const s=n===t?r:n;o[s]=this.renameObjectKeyDeepInternal(a[n],t,r)});return o}return e}normalizeDataAliasPath(e){const t=String(e??"").trim();if(!t||t==="data")return"";if(t.startsWith("data."))return t.slice(5);if(t.startsWith("data["))return t.slice(4);return t}applyTabsRuntimeAliases(e,t){const r=x(t,"__tabs");if(!r||typeof r!=="object"||Array.isArray(r))return;Object.entries(r).forEach(([a,o])=>{if(!o||typeof o!=="object"||Array.isArray(o))return;const n=o;const s=e[a];const l=s&&typeof s==="object"&&!Array.isArray(s)?{...s}:{};l["selectedTab"]=n["selectedTab"]??n["active"];l["activeTab"]=n["activeTab"]??n["active"];l["selectedTabItem"]=n["selectedTabItem"]??null;l["selectedTabIndex"]=n["selectedTabIndex"]??-1;if(e[a]===void 0||s&&typeof s==="object"&&!Array.isArray(s))e[a]=l})}applyProgressFlowRuntimeAliases(e,t){const r=x(t,"__progressFlow");if(!r||typeof r!=="object"||Array.isArray(r))return;Object.entries(r).forEach(([a,o])=>{if(!o||typeof o!=="object"||Array.isArray(o))return;const n=o;const s=e[a];const l=s&&typeof s==="object"&&!Array.isArray(s)?{...s}:{};l["selectedStep"]=n["selectedStep"]??n["active"];l["activeStep"]=n["activeStep"]??n["active"];l["selectedStepItem"]=n["selectedStepItem"]??null;l["selectedStepIndex"]=n["selectedStepIndex"]??n["activeIndex"]??-1;if(e[a]===void 0||s&&typeof s==="object"&&!Array.isArray(s))e[a]=l})}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:nt,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:nt,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:q,decorators:[{type:k,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});var Ee=class st{static isEditor=B(true,...ngDevMode?[{debugName:"isEditor"}]:[]);static isPreview=B(false,...ngDevMode?[{debugName:"isPreview"}]:[]);static isBuilderLoaded=B(false,...ngDevMode?[{debugName:"isBuilderLoaded"}]:[]);static allowRuntimeVariableDataSources=B(false,...ngDevMode?[{debugName:"allowRuntimeVariableDataSources"}]:[]);static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:st,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:st,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:Ee,decorators:[{type:k,args:[{providedIn:"root"}]}]});var Me;(function(i){i["Default"]="default";i["Readonly"]="readonly"})(Me||(Me={}));var C;(function(i){i["Rest"]="rest";i["Route"]="route";i["Local"]="local";i["Websocket"]="websocket"})(C||(C={}));var K;(function(i){i["ReplaceCurrent"]="replaceCurrent";i["PushValuesInArray"]="pushValuesInArray"})(K||(K={}));var Ie;(function(i){i["Option"]="option";i["Value"]="value"})(Ie||(Ie={}));var Ne;(function(i){i["OnInput"]="onInput";i["OnChange"]="onChange";i["OnBlur"]="onBlur"})(Ne||(Ne={}));var Oe;(function(i){i["Append"]="append";i["Replace"]="replace"})(Oe||(Oe={}));var Fe;(function(i){i["Default"]="default";i["Stepper"]="stepper"})(Fe||(Fe={}));var Le;(function(i){i["Top"]="top";i["Bottom"]="bottom";i["Both"]="both";i["None"]="none"})(Le||(Le={}));var Ve;(function(i){i["All"]="all";i["Single"]="single"})(Ve||(Ve={}));var Re;(function(i){i["Page"]="page";i["Dialog"]="dialog";i["Canvas"]="canvas"})(Re||(Re={}));var ke;(function(i){i["Left"]="left";i["Center"]="center";i["Right"]="right"})(ke||(ke={}));var ze;(function(i){i["Route"]="route";i["External"]="external";i["Constant"]="constant";i["Expression"]="expression";i["Manual"]="manual";i["DataSource"]="dataSource"})(ze||(ze={}));var Be;(function(i){i["LocalStorage"]="localStorage";i["DataSource"]="dataSource"})(Be||(Be={}));var je;(function(i){i["Light"]="light";i["Dark"]="dark"})(je||(je={}));const Vt=new Set(["dynamicPanel","objectPanel"]);const Rt=new Set(["objectPanel"]);function W(i){return Vt.has(String(i??"").trim())}function ee(i){return Rt.has(String(i??"").trim())}function fe(i,e,t){return ee(t)?i:`${i}[${e}]`}function Ur(i){return ee(i)?{}:[]}function Hr(i,e){const t=`${e}[`;if(!e||!i.startsWith(t))return null;const r=/^(\d+)\]\./.exec(i.slice(t.length));return r?Number(r[1]):null}function kt(){for(const i of["postArgs","postTransform"]){const e=Nr[i]?.tokenTypes;if(e&&!e["question"])e["question"]={toState:"ternaryMid",handler:Or}}}function Wr(i){const e=String(i??"").normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[^A-Za-z0-9]+/g," ").trim().split(/\s+/).filter(Boolean);if(!e.length)return"";const t=e.map((r,a)=>{const o=/[a-z]/.test(r)?r:r.toLowerCase();return a===0?o.charAt(0).toLowerCase()+o.slice(1):o.charAt(0).toUpperCase()+o.slice(1)}).join("");return/^[0-9]/.test(t)?`field${t.charAt(0).toUpperCase()}${t.slice(1)}`:t}function zt(i){const e=new Set;const t=r=>{Object.entries(r??{}).forEach(([a,o])=>{e.add(a);const n=o?.template;if(n&&typeof n==="object")t(n)})};t(i);return e}function _e(i,e,t=1){const r=String(i??"").trim()||"element";let a=t;while(e.has(`${r}${a}`))a+=1;const o=`${r}${a}`;e.add(o);return o}function $r(i,e){const t=String(i??"").trim().replace(/\d+$/,"")||"element";return _e(t,e,e.has(t)||t===i?2:1)}function qr(i,e){const t=String(i??"").trim();const r=String(e??"").trim();return/^el\d+$/.test(t)||Boolean(r)&&new RegExp(`^${r}\\d+$`).test(t)}const Kr=new Set(["avatar","badge","breadcrumbs","button","chart","customHtml","divider","emptyBlock","htmlSnippet","icon","iframe","image","messageCard","pageTitle","progressBar","richTextViewer","spacer","statsCard","toast","video"]);const Ue=new WeakMap;function c(){return function(i,e){const t=i.constructor;let r=Ue.get(t);if(!r){r=new Set;Ue.set(t,r)}r.add(e)}}function Bt(i){const e=new Set;let t=i.constructor;while(t&&t!==Object){const r=Ue.get(t);if(r)r.forEach(a=>e.add(a));t=Object.getPrototypeOf(t)}return Array.from(e)}var f=class lt{name;label;description;labelTooltip;type;required;requiredMessage;hidden;disabled;readOnly;status;ignoreParentState;inheritParentState;placeholder;visibleIf;disableIf;requireIf;readonlyIf;resetIf;resetChildrenOnHide;resetOnHide;expression;logicExecutionMode;validationExecutionMode;value;defaultValue;template;columns;validators;dataSource;events;width;fitContent;tabletWidth;mobileWidth;templateElementParentDataPath;isTemplateElement;index;parentName;parentType;parentPath;errors;parentElement;dependsOn;uuid;dataPath;schemaPath;allowBuilderInteractions;static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:lt,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:lt,providedIn:"root"})};u([c()],f.prototype,"templateElementParentDataPath",void 0);u([c()],f.prototype,"isTemplateElement",void 0);u([c()],f.prototype,"index",void 0);u([c()],f.prototype,"parentName",void 0);u([c()],f.prototype,"parentType",void 0);u([c()],f.prototype,"parentPath",void 0);u([c()],f.prototype,"errors",void 0);u([c()],f.prototype,"parentElement",void 0);u([c()],f.prototype,"dependsOn",void 0);u([c()],f.prototype,"uuid",void 0);u([c()],f.prototype,"dataPath",void 0);u([c()],f.prototype,"schemaPath",void 0);u([c()],f.prototype,"allowBuilderInteractions",void 0);d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:f,decorators:[{type:k,args:[{providedIn:"root"}]}],propDecorators:{templateElementParentDataPath:[],isTemplateElement:[],index:[],parentName:[],parentType:[],parentPath:[],errors:[],parentElement:[],dependsOn:[],uuid:[],dataPath:[],schemaPath:[],allowBuilderInteractions:[]}});var $=class extends f{showMaxLengthCounter=true;dataService;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=i.target;if(!t.value){const r=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:r,trigger:e})}else{this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:t.value,oldValue:this.value,sender:this,trigger:e});this.value=t.value??null}}};u([c()],$.prototype,"dataService",void 0);u([c()],$.prototype,"setValue",null);var Y=class extends f{valueStorageType="number";dataService;localeFormatService;constructor(i,e,t){super();if(i)Object.assign(this,i);this.valueStorageType=this.resolveStorageType();this.dataService=e;this.localeFormatService=t}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=i.target;const r=t.type==="number"&&!Number.isNaN(t.valueAsNumber)?t.valueAsNumber:this.parseRawNumber(t.value);this.setValueFromNumber(r,e)}setValueFromNumber(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;if(i===null||i===void 0){const o=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:o,trigger:e});return}const t=typeof i==="number"?i:Number(i);if(!Number.isFinite(t)){const o=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:o,trigger:e});return}const r=this.applyConfiguredFractionDigits(t);const a=this.toStoredValue(r);this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:a,oldValue:this.value,sender:this,trigger:e});this.value=a}parseRawNumber(i){const e=String(i??"").trim();if(!e)return null;const t=e.replace(/\s+/g,"").replace(/,/g,".");const r=Number(t);return Number.isFinite(r)?r:null}toStoredValue(i){if(this.resolveStorageType()==="string")return this.formatValueForStringStorage(i);return i}resolveStorageType(){return String(this["valueStorageType"]??"number").trim().toLowerCase()==="string"?"string":"number"}stringifyNumericValue(i){if(!Number.isFinite(i))return"";if(Number.isInteger(i))return String(i);const e=Number(i.toFixed(12));return String(e).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"")}formatValueForStringStorage(i){if(!Boolean(this["visualFormatEnabled"]))return this.stringifyNumericValue(i);const e=this.resolveLocale();const t=this.resolveUseGrouping();const r=this.resolveMinFractionDigits();const a=this.resolveMaxFractionDigits();if(this.localeFormatService)return this.localeFormatService.formatNumber(i,{locale:e,useGrouping:t,minimumFractionDigits:r??void 0,maximumFractionDigits:a??void 0});return new Intl.NumberFormat(e,{useGrouping:t,minimumFractionDigits:r??void 0,maximumFractionDigits:a??void 0}).format(i)}applyConfiguredFractionDigits(i){const e=this.resolveMaxFractionDigits();if(e===null)return i;return Number(i.toFixed(e))}resolveMaxFractionDigits(){if(!Boolean(this["visualFormatEnabled"]))return null;const i=this["visualFormatMaxFractionDigits"];const e=Number(i);if(!Number.isFinite(e))return null;return Math.max(0,Math.min(20,Math.floor(e)))}resolveMinFractionDigits(){if(!Boolean(this["visualFormatEnabled"]))return null;const i=this["visualFormatMinFractionDigits"];const e=Number(i);if(!Number.isFinite(e))return null;const t=Math.max(0,Math.min(20,Math.floor(e)));const r=this.resolveMaxFractionDigits();if(r===null)return t;return Math.min(t,r)}resolveLocale(){const i=String(this["visualFormatLocale"]??"").trim();if(this.localeFormatService)return this.localeFormatService.resolveLocale(i);return i||"lt-LT"}resolveUseGrouping(){const i=this["visualFormatUseGrouping"];return i===void 0||i===null?true:Boolean(i)}};u([c()],Y.prototype,"dataService",void 0);u([c()],Y.prototype,"localeFormatService",void 0);u([c()],Y.prototype,"setValue",null);u([c()],Y.prototype,"setValueFromNumber",null);const G=[{isoCode:"LT",dialCode:"+370"},{isoCode:"LV",dialCode:"+371"},{isoCode:"EE",dialCode:"+372"},{isoCode:"PL",dialCode:"+48"},{isoCode:"DE",dialCode:"+49"},{isoCode:"SE",dialCode:"+46"},{isoCode:"NO",dialCode:"+47"},{isoCode:"DK",dialCode:"+45"},{isoCode:"FI",dialCode:"+358"},{isoCode:"GB",dialCode:"+44"},{isoCode:"IE",dialCode:"+353"},{isoCode:"US",dialCode:"+1"}];const Yr=G.map(i=>({label:`${i.isoCode} (${i.dialCode})`,value:i.isoCode}));function He(i){const e=String(i??"").trim();const t=e.toUpperCase();return G.find(r=>r.isoCode===t||r.dialCode===e)??G[0]}function Gr(i){const e=String(i??"").split(",").map(r=>r.trim().toUpperCase()).filter(Boolean);if(!e.length)return G;const t=G.filter(r=>e.includes(r.isoCode));return t.length>0?t:G}var ge=class extends f{defaultCountryCode="LT";allowedCountryCodes="";autocomplete="tel";dataService;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e;this.defaultCountryCode=String(this.defaultCountryCode??"LT").trim().toUpperCase()||"LT";this.allowedCountryCodes=String(this.allowedCountryCodes??"").trim();this.autocomplete=String(this.autocomplete??"tel").trim()||"tel";this.value=this.normalizeValue(this.value)}setValueFromParts(i,e,t="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const r=String(e??"").trim();if(!r){const n=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:n,trigger:t});return}const a=He(i||this.defaultCountryCode);const o={countryIso:a.isoCode,countryCode:a.dialCode,number:r};this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:o,oldValue:this.value,sender:this,trigger:t});this.value=o}normalizeValue(i){if(!i||typeof i!=="object")return null;const e=i;const t=String(e["number"]??"").trim();if(!t)return null;const r=He(String(e["countryIso"]??e["countryCode"]??this.defaultCountryCode));return{countryIso:r.isoCode,countryCode:r.dialCode,number:t}}};u([c()],ge.prototype,"dataService",void 0);u([c()],ge.prototype,"setValueFromParts",null);var J=class extends f{min=0;max=100;variant="primary";displayType="linear";styleType="solid";showValueLabel=true;valueLabelMode="percent";progressDataPath="";progressValuePath="";progressMaxPath="";dataSourceLoaded=false;onDataSourceChanged=new g;afterDataSourceLoad=new g;dataService;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e;this.min=this.normalizeNumber(this.min,0);this.max=this.normalizeMax(this.max,this.min,100);this.variant=this.normalizeVariant(this.variant);this.displayType=this.normalizeDisplayType(this.displayType);this.styleType=this.normalizeStyleType(this.styleType);this.showValueLabel=this.showValueLabel!==false;this.valueLabelMode=this.normalizeValueLabelMode(this.valueLabelMode);this.progressDataPath=String(this.progressDataPath??"").trim();this.progressValuePath=String(this.progressValuePath??"").trim();this.progressMaxPath=String(this.progressMaxPath??"").trim();this.defaultValue=this.normalizeInitialValue(this.defaultValue);this.dataSourceLoaded=!this.hasActiveValueDataSource();this.onDataSourceChanged.add(t=>{if(!this.shouldConsumeValueDataSourceEvent(t)){this.dataSourceLoaded=!this.hasActiveValueDataSource();this.afterDataSourceLoad.fire();return}this.setProgressFromSource(t.result);this.dataSourceLoaded=true;this.afterDataSourceLoad.fire()})}resolveMin(){return this.min}resolveMax(){return this.resolveProgressState().max}resolveValue(){return this.resolveProgressState().value}resolveProgressState(i=this.value){const e=this.resolveMin();const t=this.resolveProgressSource(i);const r=this.resolveResolvedMax(t,e);return{min:e,max:r,value:this.resolveResolvedValue(t,i,e,r)}}setProgressFromSource(i){const e=this.resolveProgressState(i);this.max=e.max;this.value=e.value;if(this.dataPath)this.dataService?.setValue(this.dataPath,e.value,{sender:this})}normalizeInitialValue(i){const e=Number(i);if(!Number.isFinite(e))return this.resolveMin();return this.normalizeValue(e,this.resolveMin(),this.resolveMax())}normalizeValue(i,e,t){const r=Number(i);if(!Number.isFinite(r))return e;return Math.max(e,Math.min(t,r))}normalizeNumber(i,e){const t=Number(i);if(!Number.isFinite(t))return e;return t}normalizeMax(i,e,t){const r=Number(i);if(!Number.isFinite(r))return Math.max(e,t);return r<e?e:r}normalizeVariant(i){const e=String(i??"primary").trim().toLowerCase();if(e==="success"||e==="warning"||e==="risk")return e;return"primary"}normalizeDisplayType(i){return String(i??"").trim().toLowerCase()==="circular"?"circular":"linear"}normalizeStyleType(i){const e=String(i??"solid").trim().toLowerCase();if(e==="soft"||e==="striped"||e==="segmented")return e;return"solid"}normalizeValueLabelMode(i){const e=String(i??"percent").trim().toLowerCase();if(e==="value"||e==="fraction")return e;return"percent"}hasActiveValueDataSource(){const i=String(this.dataSource?.name??"").trim();const e=String(this.dataSource?.useFor??"value").trim().toLowerCase();return i.length>0&&e!=="option"}shouldConsumeValueDataSourceEvent(i){return Boolean(i?.dataSource)&&this.hasActiveValueDataSource()}resolveProgressSource(i){const e=String(this.progressDataPath??"").trim();if(e){const t=x(i,e);if(t!==void 0)return t}return i}resolveResolvedMax(i,e){if(!(String(this.progressMaxPath??"").trim().length>0)&&!this.isRecordSource(i))return this.normalizeMax(this.max,e,100);const t=this.resolveSourceNumber(i,this.progressMaxPath,["max","total","goal","limit","capacity"]);if(!Number.isFinite(t))return this.normalizeMax(this.max,e,100);return this.normalizeMax(t,e,this.max)}resolveResolvedValue(i,e,t,r){const a=this.resolveSourceNumber(i,this.progressValuePath,["value","current","progress","amount","count","completed","done"]);if(Number.isFinite(a))return this.normalizeValue(a,t,r);return this.normalizeValue(e,t,r)}isRecordSource(i){return Boolean(i)&&typeof i==="object"&&!Array.isArray(i)}resolveSourceNumber(i,e,t){if(e){const r=x(i,e);const a=Number(r);return Number.isFinite(a)?a:null}if(i===null||i===void 0)return null;if(typeof i==="number")return Number.isFinite(i)?i:null;if(typeof i==="string"){const r=Number(i);return Number.isFinite(r)?r:null}if(!i||typeof i!=="object"||Array.isArray(i))return null;for(const r of t){const a=x(i,r);const o=Number(a);if(Number.isFinite(o))return o}return null}};u([c()],J.prototype,"dataSourceLoaded",void 0);u([c()],J.prototype,"onDataSourceChanged",void 0);u([c()],J.prototype,"afterDataSourceLoad",void 0);u([c()],J.prototype,"dataService",void 0);u([c()],J.prototype,"setProgressFromSource",null);var Jr=class extends f{hideHeader;removeBackgraund;constructor(i){super();if(i)Object.assign(this,i)}};var se=class extends f{dataService;useCompactStyle=true;columns=[new $({name:"column1",label:"Col 1",type:b.TEXT,parentElement:this}),new $({name:"column2",label:"Col 2",type:b.TEXT,parentElement:this}),new $({name:"column3",label:"Col 3",type:b.TEXT,parentElement:this})];itemsPath;dataSourceLoaded=false;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i,e){super();this.dataService=e;if(i)Object.assign(this,i);this.useCompactStyle=true;this.onDataSourceChanged.add(t=>{const r=this.resolveRowsFromSource(t?.result);this.value=r;this.dataSourceLoaded=true;if(this.dataPath)this.dataService?.setValue(this.dataPath,r);this.afterDataSourceLoad.fire()})}resolveRowsFromSource(i){if(Array.isArray(i))return this.normalizeRows(i);const e=String(this.itemsPath??"").trim();if(e){const t=x(i,e);return this.normalizeRows(t)}if(i&&typeof i==="object"){const t=i;if(Array.isArray(t["items"]))return this.normalizeRows(t["items"]);if(Array.isArray(t["data"]))return this.normalizeRows(t["data"]);if(Array.isArray(t["rows"]))return this.normalizeRows(t["rows"]);if(Array.isArray(t["result"]))return this.normalizeRows(t["result"])}return this.normalizeRows(i)}normalizeRows(i){if(!Array.isArray(i))return[];return i.filter(e=>e&&typeof e==="object")}};u([c()],se.prototype,"dataSourceLoaded",void 0);u([c()],se.prototype,"onDataSourceChanged",void 0);u([c()],se.prototype,"afterDataSourceLoad",void 0);var ye=class extends f{rows=3;showMaxLengthCounter=true;dataService;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=i.target;if(!t.value){const r=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:r,trigger:e})}else{this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:t.value,oldValue:this.value,sender:this,trigger:e});this.value=t.value}}};u([c()],ye.prototype,"dataService",void 0);u([c()],ye.prototype,"setValue",null);var E=class extends f{strictOptions=true;optionTemplateName;isGrouped;optionTemplate;showSearch=true;filterOptionsBy;filterIfEqual;filterIfNotEqual;options=[{label:"Opt 1",value:"0"},{label:"Opt 2",value:"1"},{label:"Opt 3",value:"2"}];dataSourceLoaded=false;dataService;dataSourceModel;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i,e){super();if(i)Object.assign(this,i);this.optionTemplateName=String(this.optionTemplateName??"").trim()||void 0;this.optionTemplate=String(this.optionTemplate??"").trim()||void 0;this.showSearch=this.showSearch!==false;this.dataService=e;this.dataSourceLoaded=!this.hasActiveOptionDataSource();this.onDataSourceChanged.add(t=>{if(!this.shouldConsumeOptionDataSourceEvent(t)){this.dataSourceLoaded=!this.hasActiveOptionDataSource();this.afterDataSourceLoad.fire();return}if(this.dataSource?.useFor==="option")this.setOptions(t.result);this.dataSourceLoaded=true;this.afterDataSourceLoad.fire()})}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;if(i===null||i===void 0||typeof i==="string"&&i.trim().length===0){const t=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:t,trigger:e})}else{this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:i,oldValue:this.value,sender:this,trigger:e});this.value=i}}setOptions(i){const e=this.resolveOptionItems(i);if(!Array.isArray(e))return;const t=this.dataSource?.optionLabel??"label";const r=this.dataSource?.optionValue??"value";if(this.hasGroupedItems(e)){this.options=e.map(a=>this.normalizeGroupOption(a,t,r)).filter(a=>a!==null);return}this.options=e.map(a=>this.normalizeLeafOption(a,t,r))}hasActiveOptionDataSource(){return String(this.dataSource?.name??"").trim().length>0&&String(this.dataSource?.useFor??"").trim()==="option"}shouldConsumeOptionDataSourceEvent(i){if(!this.hasActiveOptionDataSource())return false;const e=String(this.dataSource?.name??"").trim();const t=String(i?.dataSource?.name??"").trim();if(!e||!t||e!==t)return false;return i?.result!==void 0&&i?.result!==null}resolveOptionItems(i){if(Array.isArray(i))return i;if(!i||typeof i!=="object")return[];for(const e of["items","data.items","data.rows","data.records","data.results","records","rows","results","result","data"]){const t=this.readPath(i,e);if(Array.isArray(t))return t}return[]}hasGroupedItems(i){return i.some(e=>Array.isArray(e?.items))}normalizeGroupOption(i,e,t){const r=(Array.isArray(i?.items)?i.items:[]).map(a=>this.normalizeLeafOption(a,e,t));if(r.length===0)return null;return{...i??{},label:String(i?.label??i?.[e]??"").trim(),items:r}}normalizeLeafOption(i,e,t){const r=String(i?.[e]??i?.label??i?.value??i?.[t]??"").trim();const a=i?.[t]??i?.value??(r.length>0?r:void 0);return{...i??{},label:r,value:a,visibleIf:String(i?.["visibleIf"]??"").trim()||void 0}}readPath(i,e){const t=String(e??"").trim().split(".").filter(a=>a.length>0);if(t.length===0)return;let r=i;for(const a of t){if(!r||typeof r!=="object"||Array.isArray(r))return;r=r[a]}return r}};u([c()],E.prototype,"dataSourceLoaded",void 0);u([c()],E.prototype,"dataService",void 0);u([c()],E.prototype,"dataSourceModel",void 0);u([c()],E.prototype,"onDataSourceChanged",void 0);u([c()],E.prototype,"afterDataSourceLoad",void 0);u([c()],E.prototype,"setValue",null);u([c()],E.prototype,"setOptions",null);u([c()],E.prototype,"hasActiveOptionDataSource",null);u([c()],E.prototype,"shouldConsumeOptionDataSourceEvent",null);u([c()],E.prototype,"resolveOptionItems",null);u([c()],E.prototype,"hasGroupedItems",null);u([c()],E.prototype,"normalizeGroupOption",null);u([c()],E.prototype,"normalizeLeafOption",null);u([c()],E.prototype,"readPath",null);const Xr=["lazyLoad","searchDataSourceName","searchItemsPath","searchLabelKey","searchValueKey","searchResultLimit","minSearchLength","debounceMs","forceSelection","maxSuggestions","queryContextKey"];var jt=class extends E{lazyLoad=false;searchDataSourceName;searchItemsPath;searchLabelKey;searchValueKey;searchResultLimit;minSearchLength=3;debounceMs=1e3;forceSelection=false;maxSuggestions=20;queryContextKey="query";constructor(i,e){super(i,e);if(i)Xr.forEach(a=>{if(a in i)this[a]=i[a]});this.lazyLoad=Boolean(this.lazyLoad);this.forceSelection=Boolean(this.forceSelection);this.minSearchLength=this.normalizeInt(this.minSearchLength,0,10,3);this.debounceMs=this.normalizeInt(this.debounceMs,0,1e4,1e3);this.maxSuggestions=this.normalizeInt(this.maxSuggestions,1,500,20);const t=String(this.queryContextKey??"").trim();this.queryContextKey=t||"query";this.searchDataSourceName=String(this.searchDataSourceName??"").trim()||void 0;this.searchItemsPath=String(this.searchItemsPath??"").trim()||void 0;this.searchLabelKey=String(this.searchLabelKey??"").trim()||void 0;this.searchValueKey=String(this.searchValueKey??"").trim()||void 0;const r=Number(this.searchResultLimit);this.searchResultLimit=this.searchResultLimit!==null&&String(this.searchResultLimit??"").trim()!==""&&Number.isFinite(r)&&r>0?Math.floor(r):null}normalizeInt(i,e,t,r){const a=Number(i);if(!Number.isFinite(a))return r;return Math.max(e,Math.min(t,Math.floor(a)))}};var te=class extends f{dataService;itemsPath;hideHeader=false;contentDisplay="flex";gridColumnCount;gridMinColumnWidth="";headerTemplateName="";headerTemplate="";dataSourceLoaded=false;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i,e){super();this.dataService=e;if(i)Object.assign(this,i);this.hideHeader=Boolean(this.hideHeader);const t=String(this.contentDisplay??"flex").trim().toLowerCase();this.contentDisplay=t==="grid"?"grid":"flex";const r=Number(this.gridColumnCount);this.gridColumnCount=Number.isFinite(r)&&r>0?Math.floor(r):void 0;this.gridMinColumnWidth=this.normalizeOptionalText(this.gridMinColumnWidth);this.headerTemplateName=this.normalizeOptionalText(this.headerTemplateName);this.headerTemplate=String(this.headerTemplate??"");this.onDataSourceChanged.add(a=>{const o=this.resolveValueFromSource(a?.result);this.value=o;this.dataSourceLoaded=true;if(this.dataPath)this.dataService?.setValue(this.dataPath,o);this.afterDataSourceLoad.fire()})}resolveValueFromSource(i){return this.resolveRowsFromSource(i)}resolveRowsFromSource(i){if(Array.isArray(i))return this.normalizeRows(i);const e=String(this.itemsPath??"").trim();if(e){const t=x(i,e);return this.normalizeRows(t)}if(i&&typeof i==="object"){const t=i;if(Array.isArray(t["items"]))return this.normalizeRows(t["items"]);if(Array.isArray(t["data"]))return this.normalizeRows(t["data"]);if(Array.isArray(t["rows"]))return this.normalizeRows(t["rows"]);if(Array.isArray(t["result"]))return this.normalizeRows(t["result"])}return this.normalizeRows(i)}normalizeRows(i){if(!Array.isArray(i))return[];return i.filter(e=>e&&typeof e==="object")}normalizeOptionalText(i){return String(i??"").trim()}};u([c()],te.prototype,"dataSourceLoaded",void 0);u([c()],te.prototype,"onDataSourceChanged",void 0);u([c()],te.prototype,"afterDataSourceLoad",void 0);var F=class extends f{strictOptions=true;isGrouped;filterOptionsBy;filterIfEqual;filterIfNotEqual;isLoaded=false;value=[];options=[{label:"Option 1",value:"0"},{label:"Option 2",value:"1"},{label:"Option 3",value:"2"}];showInline;dataSourceLoaded=false;dataService;dataSourceModel;onElementChanging=new g;onElementChanged=new g;onOptionChanged=new g;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e;this.dataSourceLoaded=!this.hasActiveOptionDataSource();this.onDataSourceChanged.add(t=>{if(!this.shouldConsumeOptionDataSourceEvent(t)){this.dataSourceLoaded=!this.hasActiveOptionDataSource();this.afterDataSourceLoad.fire();return}if(this.dataSource?.useFor==="option")this.setOptions(t.result);this.dataSourceLoaded=true;this.afterDataSourceLoad.fire()})}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;if(i===null||i===void 0){const t=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:t,trigger:e})}else{this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:i,oldValue:this.value,sender:this,trigger:e});this.value=i}}setOptions(i){const e=this.resolveOptionItems(i);if(!Array.isArray(e))return;const t=this.dataSource?.optionLabel??"label";const r=this.dataSource?.optionValue??"value";this.options=e.map(a=>{return{label:a[t],value:a[r],visibleIf:String(a["visibleIf"]??"").trim()||void 0}})}hasActiveOptionDataSource(){return String(this.dataSource?.name??"").trim().length>0&&String(this.dataSource?.useFor??"").trim()==="option"}shouldConsumeOptionDataSourceEvent(i){if(!this.hasActiveOptionDataSource())return false;const e=String(this.dataSource?.name??"").trim();const t=String(i?.dataSource?.name??"").trim();if(!e||!t||e!==t)return false;return i?.result!==void 0&&i?.result!==null}resolveOptionItems(i){if(Array.isArray(i))return i;if(!i||typeof i!=="object")return[];for(const e of["items","data.items","data.rows","data.records","data.results","records","rows","results","result","data"]){const t=this.readPath(i,e);if(Array.isArray(t))return t}return[]}readPath(i,e){const t=String(e??"").trim().split(".").filter(a=>a.length>0);if(t.length===0)return;let r=i;for(const a of t){if(!r||typeof r!=="object"||Array.isArray(r))return;r=r[a]}return r}};u([c()],F.prototype,"dataSourceLoaded",void 0);u([c()],F.prototype,"dataService",void 0);u([c()],F.prototype,"dataSourceModel",void 0);u([c()],F.prototype,"onElementChanging",void 0);u([c()],F.prototype,"onElementChanged",void 0);u([c()],F.prototype,"onOptionChanged",void 0);u([c()],F.prototype,"onDataSourceChanged",void 0);u([c()],F.prototype,"afterDataSourceLoad",void 0);u([c()],F.prototype,"setValue",null);u([c()],F.prototype,"setOptions",null);u([c()],F.prototype,"hasActiveOptionDataSource",null);u([c()],F.prototype,"shouldConsumeOptionDataSourceEvent",null);u([c()],F.prototype,"resolveOptionItems",null);u([c()],F.prototype,"readPath",null);var N=class extends f{strictOptions=true;filterOptionsBy;filterIfEqual;filterIfNotEqual;options=[{label:"Opt 1",value:"opt1"},{label:"Opt 2",value:"opt2"},{label:"Opt 3",value:"opt3"}];showInline;dataSourceLoaded=false;dataService;dataSourceModel;onElementChanging=new g;onElementChanged=new g;onOptionChanged=new g;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e;this.dataSourceLoaded=!this.hasActiveOptionDataSource();this.onDataSourceChanged.add(t=>{if(!this.shouldConsumeOptionDataSourceEvent(t)){this.dataSourceLoaded=!this.hasActiveOptionDataSource();this.afterDataSourceLoad.fire();return}if(this.dataSource?.useFor==="option")this.setOptions(t.result);this.dataSourceLoaded=true;this.afterDataSourceLoad.fire()})}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;if(i===null||i===void 0||typeof i==="string"&&i.trim().length===0){const t=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:t,trigger:e})}else{this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:i,oldValue:this.value,sender:this,trigger:e});this.value=i}}setOptions(i){const e=this.resolveOptionItems(i);if(!Array.isArray(e))return;const t=this.dataSource?.optionLabel??"label";const r=this.dataSource?.optionValue??"value";this.options=e.map(a=>{return{label:a[t],value:a[r],visibleIf:String(a["visibleIf"]??"").trim()||void 0}})}hasActiveOptionDataSource(){return String(this.dataSource?.name??"").trim().length>0&&String(this.dataSource?.useFor??"").trim()==="option"}shouldConsumeOptionDataSourceEvent(i){if(!this.hasActiveOptionDataSource())return false;const e=String(this.dataSource?.name??"").trim();const t=String(i?.dataSource?.name??"").trim();if(!e||!t||e!==t)return false;return i?.result!==void 0&&i?.result!==null}resolveOptionItems(i){if(Array.isArray(i))return i;if(!i||typeof i!=="object")return[];for(const e of["items","data.items","data.rows","data.records","data.results","records","rows","results","result","data"]){const t=this.readPath(i,e);if(Array.isArray(t))return t}return[]}readPath(i,e){const t=String(e??"").trim().split(".").filter(a=>a.length>0);if(t.length===0)return;let r=i;for(const a of t){if(!r||typeof r!=="object"||Array.isArray(r))return;r=r[a]}return r}};u([c()],N.prototype,"dataSourceLoaded",void 0);u([c()],N.prototype,"dataService",void 0);u([c()],N.prototype,"dataSourceModel",void 0);u([c()],N.prototype,"onElementChanging",void 0);u([c()],N.prototype,"onElementChanged",void 0);u([c()],N.prototype,"onOptionChanged",void 0);u([c()],N.prototype,"onDataSourceChanged",void 0);u([c()],N.prototype,"afterDataSourceLoad",void 0);u([c()],N.prototype,"setValue",null);u([c()],N.prototype,"setOptions",null);u([c()],N.prototype,"hasActiveOptionDataSource",null);u([c()],N.prototype,"shouldConsumeOptionDataSourceEvent",null);u([c()],N.prototype,"resolveOptionItems",null);u([c()],N.prototype,"readPath",null);var We=class extends E{value=[];constructor(i,e){super(i,e);if(!Array.isArray(this.value))this.value=[]}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=Array.isArray(i)?[...i]:[];if(t.length===0){const r=this.value;this.value=[];this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:r,trigger:e});return}this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:t,oldValue:this.value,sender:this,trigger:e});this.value=t}};u([c()],We.prototype,"setValue",null);var le=class extends f{checkboxLabel="Selected";value=false;dataService;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e;this.checkboxLabel=String(this.checkboxLabel??"Selected").trim()||"Selected";this.value=this.parseBoolean(this.value)}isChecked(){return this.parseBoolean(this.value)}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=this.parseBoolean(i);this.dataService?.onValueChanging.fire({dataPath:this.dataPath,newValue:t,oldValue:this.value,sender:this,trigger:e});this.value=t}parseBoolean(i){if(typeof i==="boolean")return i;const e=String(i??"").trim().toLowerCase();if(!e)return false;if(e==="true"||e==="1"||e==="yes"||e==="on")return true;if(e==="false"||e==="0"||e==="no"||e==="off")return false;return Boolean(i)}};u([c()],le.prototype,"dataService",void 0);u([c()],le.prototype,"isChecked",null);u([c()],le.prototype,"setValue",null);var _t=class extends Y{min=0;max=100;step=1;showValueLabel=true;constructor(i,e,t){super(i,e,t);this.min=this.normalizeNumber(i?.min,0);this.max=this.normalizeNumber(i?.max,100);this.step=this.normalizeStep(i?.step);this.showValueLabel=i?.showValueLabel!==false;if(this.max<this.min){const r=this.min;this.min=this.max;this.max=r}}resolveMin(){return this.min}resolveMax(){return this.max}resolveStep(){return this.step}normalizeNumber(i,e){const t=Number(i);if(!Number.isFinite(t))return e;return t}normalizeStep(i){const e=Number(i);if(!Number.isFinite(e)||e<=0)return 1;return e}};var H=class extends f{toggleMode="checkbox";shape="round";trueValue=true;falseValue=false;hideLabel=false;trueLabel="On";falseLabel="Off";dataService;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e;this.toggleMode=this.resolveMode(this.toggleMode);this.shape=String(this.shape??"").trim().toLowerCase()==="square"?"square":"round";this.trueLabel=String(this.trueLabel??"On").trim()||"On";this.falseLabel=String(this.falseLabel??"Off").trim()||"Off";if(this.value===void 0)this.value=this.resolveFalseValue();else if(this.toggleMode==="checkbox")this.value=this.parseBoolean(this.value)}isChecked(){if(this.toggleMode==="checkbox")return this.parseBoolean(this.value);return this.areValuesEqual(this.value,this.resolveTrueValue())}toggle(i="change"){this.setChecked(!this.isChecked(),i)}setChecked(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=i?this.resolveTrueValue():this.resolveFalseValue();this.dataService?.onValueChanging.fire({dataPath:this.dataPath,newValue:t,oldValue:this.value,sender:this,trigger:e});this.value=t}resolveTrueValue(){if(this.toggleMode==="checkbox")return true;return this.parseCustomValue(this.trueValue)}resolveFalseValue(){if(this.toggleMode==="checkbox")return false;return this.parseCustomValue(this.falseValue)}resolveMode(i){return String(i??"").trim().toLowerCase()==="toggle"?"toggle":"checkbox"}parseBoolean(i){if(typeof i==="boolean")return i;const e=String(i??"").trim().toLowerCase();if(!e)return false;if(e==="true"||e==="1"||e==="yes"||e==="on")return true;if(e==="false"||e==="0"||e==="no"||e==="off")return false;return Boolean(i)}parseCustomValue(i){if(i===null||i===void 0)return i;if(typeof i!=="string")return i;const e=i.trim();if(!e)return"";if(e==="true")return true;if(e==="false")return false;if(e==="null")return null;if(/^-?\d+(\.\d+)?$/.test(e)){const t=Number(e);if(Number.isFinite(t))return t}if(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")||e.startsWith('"')&&e.endsWith('"'))try{return JSON.parse(e)}catch{return e}return e}areValuesEqual(i,e){if(Object.is(i,e))return true;return this.toComparable(i)===this.toComparable(e)}toComparable(i){if(i===null||i===void 0)return"";if(typeof i==="object")try{return JSON.stringify(i)}catch{return String(i)}return String(i)}};u([c()],H.prototype,"dataService",void 0);u([c()],H.prototype,"isChecked",null);u([c()],H.prototype,"toggle",null);u([c()],H.prototype,"setChecked",null);u([c()],H.prototype,"resolveTrueValue",null);u([c()],H.prototype,"resolveFalseValue",null);var Ut=class extends f{showBorder=true;titleUnderline=false;titleUnderlineColor="";titleUnderlineWidth=1;headerTemplateName="";headerTemplate="";sectionMode=false;sectionTheme="light";backgroundImage="";backgroundOverlayColor="";sectionContentWidth="";sectionPaddingY="";sectionMinHeight="";sectionVerticalAlign="center";constructor(i){super();if(i)Object.assign(this,i);this.showBorder=this.showBorder!==false;this.titleUnderline=Boolean(this.titleUnderline);this.titleUnderlineColor=String(this.titleUnderlineColor??"").trim();const e=Number(this.titleUnderlineWidth??1);this.titleUnderlineWidth=e===2||e===3?e:1;this.headerTemplateName=this.normalizeOptionalText(this.headerTemplateName);this.headerTemplate=String(this.headerTemplate??"");this.sectionMode=Boolean(this.sectionMode);this.sectionTheme=this.sectionTheme==="dark"?"dark":"light";this.sectionVerticalAlign=this.sectionVerticalAlign==="start"||this.sectionVerticalAlign==="end"?this.sectionVerticalAlign:"center"}normalizeOptionalText(i){return String(i??"").trim()}};var Ht=class extends te{constructor(i,e){super(i,e);if(!this.value||typeof this.value!=="object"||Array.isArray(this.value))this.value=Array.isArray(this.value)&&this.value[0]&&typeof this.value[0]==="object"?this.value[0]:{}}resolveValueFromSource(i){const e=String(this.itemsPath??"").trim();const t=e&&i&&typeof i==="object"?x(i,e):i;if(Array.isArray(t))return t[0]&&typeof t[0]==="object"?t[0]:{};return t&&typeof t==="object"?t:{}}};var Wt=class extends f{panels=[{label:"Panel 1",value:"panel1"},{label:"Panel 2",value:"panel2"}];orientation="horizontal";gutterSize=8;minPanelSize=10;showPanelHeaders=true;allowResize=true;stateful=false;stateKey="";constructor(i){super();if(i)Object.assign(this,i);this.panels=this.normalizePanels(this.panels);this.orientation=this.orientation==="vertical"?"vertical":"horizontal";this.gutterSize=this.normalizeInt(this.gutterSize,2,40,8);this.minPanelSize=this.normalizeInt(this.minPanelSize,1,45,10);this.showPanelHeaders=this.showPanelHeaders!==false;this.allowResize=this.allowResize!==false;this.stateful=Boolean(this.stateful);this.stateKey=String(this.stateKey??"").trim()}resolveStateKey(){const i=String(this.stateKey??"").trim();if(i)return i;return`nvb-splitter:${String(this.name??"").trim()||"splitter"}`}normalizePanels(i){if(!Array.isArray(i)||i.length===0)return[{label:"Panel 1",value:"panel1"},{label:"Panel 2",value:"panel2"}];const e=i.map((t,r)=>{const a=t;return{label:String(a?.["label"]??"").trim()||`Panel ${r+1}`,value:String(a?.["value"]??"").trim()||`panel${r+1}`,visibleIf:String(a?.["visibleIf"]??"").trim()||void 0}}).filter(t=>String(t.value??"").trim().length>0);if(e.length===0)return[{label:"Panel 1",value:"panel1"},{label:"Panel 2",value:"panel2"}];return e}normalizeInt(i,e,t,r){const a=Number(i);if(!Number.isFinite(a))return r;return Math.max(e,Math.min(t,Math.floor(a)))}};var $t=class extends f{blockType="layout";formStatus="valid";formErrorsCount=0;formIsValid=true;constructor(i){super();if(i)Object.assign(this,i);this.blockType=String(this.blockType??"layout").trim().toLowerCase()==="form"?"form":"layout";this.formStatus=this.formStatus==="invalid"?"invalid":"valid";this.formErrorsCount=Number.isFinite(Number(this.formErrorsCount))?Math.max(0,Math.floor(Number(this.formErrorsCount))):0;this.formIsValid=this.formStatus==="valid"}};var qt=class extends f{text;icon;iconPosition;iconOnly;variant;tone;color;textColor;size;loading;badge;menuActions;events=[];constructor(i){super();if(i)Object.assign(this,i);if(!Array.isArray(this.events))this.events=[];if(!Array.isArray(this.menuActions))this.menuActions=[];const e=String(this.iconPosition??"left").trim().toLowerCase();this.iconPosition=e==="right"||e==="top"||e==="bottom"?e:"left";const t=String(this.variant??"solid").trim().toLowerCase();this.variant=t==="outline"||t==="text"?t:"solid";const r=String(this.tone??"primary").trim().toLowerCase();this.tone=r==="neutral"||r==="success"||r==="info"||r==="warning"||r==="risk"||r==="danger"?r==="danger"?"risk":r:"primary";const a=String(this.size??"normal").trim().toLowerCase();this.size=a==="small"||a==="large"?a:"normal";this.loading=Boolean(this.loading);this.badge=String(this.badge??"").trim();this.color=String(this.color??"").trim();this.textColor=String(this.textColor??"").trim()}};function re(){const i=Qr();try{if(i&&typeof i.randomUUID==="function")return i.randomUUID()}catch{}if(i&&typeof i.getRandomValues==="function"){const e=new Uint8Array(16);i.getRandomValues(e);e[6]=e[6]&15|64;e[8]=e[8]&63|128;const t=Array.from(e,r=>r.toString(16).padStart(2,"0"));return[t.slice(0,4).join(""),t.slice(4,6).join(""),t.slice(6,8).join(""),t.slice(8,10).join(""),t.slice(10,16).join("")].join("-")}return`nvb-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}-${Math.random().toString(36).slice(2,10)}`}function Qr(){if(typeof globalThis==="undefined")return;return globalThis.crypto}var Kt=class extends f{lazyLoad=false;paginator=true;paginatorVariant="full";paginatorStyle="default";paginatorMaxButtons=7;pageSize=10;showPageSizeSelector=true;pageSizeOptions="10,25,50,100";orderClause="";orderDirection="asc";tableStyle="default";showHeaderControls=true;showQuickSearch=true;quickSearchOnType=false;showDetailedSearch=true;showExport=true;showColumnSettings=false;columnSettingsMode="none";columnSettingsStorageKey="";columnSettingsDataSourceName="";columnSettingsDataSourcePath="";saveColumnSettingsDataSourceName="";resetColumnSettingsDataSourceName="";columnSettingsDialogTitle="";exportUseColumnPicker=true;rowHover=true;virtualScroll=false;virtualScrollViewportHeight=420;virtualScrollRowHeight=52;virtualScrollBuffer=6;enableInlineEdit=false;inlineEditStartMode="action";inlineEditSaveDataSourceName="";inlineEditCancelOnReload=true;quickSearchPlaceholder="";quickSearchParamName="quickSearch";quickSearchCondition="%-%";quickSearchCaseMode="caseInsensitiveLatin";detailedSearchCaseMode="caseInsensitiveLatin";searchDebounceMs=260;headerTemplate="";rowTemplateName="";rowTemplate="";headerCenterElements=[];headerCenterElementsPosition="center";headerMenuEnabled=false;headerMenuPlaceholder="";headerMenuItemsPath="";headerMenuDataSourceName="";headerMenuDataSourceItemsPath="";headerMenuOptions=[];headerMenuLabelKey="label";headerMenuValueKey="value";headerActionsPosition="end";headerActionsDisplayMode="buttons";headerActionsDropdownPlaceholder="";headerActionsDropdownTrigger="blur";flatHeaderSurface=true;stickyHeader=false;exportFileName="";exportAllPageSize=1e4;flatFooterSurface=true;paginatorAlign="end";responsiveMode="auto";enableSelection=false;selectionKey="id";autoSelectCondition="";selectionItemTemplate="";expandableRows=false;rowClickOpensDetails=false;showExpandChevron=true;alwaysShowExpandChevron=false;expandedItemsPath="";expandedTemplate="";expandedEmptyMessage="";detailsPanelTitle="";expandedDisplayMode="sidePanel";expandedDataSourceName="";expandedDataSourceItemsPath="";emptyMessage="No records";actionsLabel="";showActionsHeaderLabel=true;prevLabel="";nextLabel="";loadingLabel="";selectAllLabel="";selectLabel="";selectRowLabel="";expandLabel="";collapseLabel="";columnsConfig=[{id:re(),key:"name",label:"Name",showHeaderLabel:true,type:"text",align:"left",sortable:true,template:"",templateName:"",visibleIf:"",statusRules:[],statusShowIcon:false,showInTable:true,showInDetails:false,detailLabel:"",controlActiveIf:"",controlEnabledIf:"",cellActionsEnabled:false,cellActions:[],cellActionsDisplayMode:"dropdown",cellActionsPlaceholder:"",editable:false,editorType:"auto",editorPlaceholder:"",editorOptions:[],editorOptionLabelKey:"label",editorOptionValueKey:"value",filterControlType:"auto",filterOptionsSourceType:"static",filterOptions:[],filterOptionsPath:"",filterOptionsJson:"",filterOptionsDataSourceName:"",filterOptionsDataSourceItemsPath:"",filterOptionLabelKey:"label",filterOptionValueKey:"value",filterMultiValueDelimiter:"|",filterToggleTrueValue:"true",filterToggleFalseValue:"false"},{id:re(),key:"value",label:"Value",showHeaderLabel:true,type:"text",align:"left",sortable:true,template:"",templateName:"",visibleIf:"",statusRules:[],statusShowIcon:false,showInTable:true,showInDetails:false,detailLabel:"",controlActiveIf:"",controlEnabledIf:"",cellActionsEnabled:false,cellActions:[],cellActionsDisplayMode:"dropdown",cellActionsPlaceholder:"",editable:false,editorType:"auto",editorPlaceholder:"",editorOptions:[],editorOptionLabelKey:"label",editorOptionValueKey:"value",filterControlType:"auto",filterOptionsSourceType:"static",filterOptions:[],filterOptionsPath:"",filterOptionsJson:"",filterOptionsDataSourceName:"",filterOptionsDataSourceItemsPath:"",filterOptionLabelKey:"label",filterOptionValueKey:"value",filterMultiValueDelimiter:"|",filterToggleTrueValue:"true",filterToggleFalseValue:"false"}];tableDataSourceName="";tableItemsPath="";params=[];refreshOnChange=true;refreshPaths=[];tableTotalPath="";rowActions=[];rowActionsDisplayMode="dropdown";rowActionsDropdownButtonStyle="borderless";rowClickActions=[];rowExpandActions=[];headerActions=[];headerMenuActions=[];rowActionVisibilityPath="";selectionActions=[];selectionActionsLabel="";expandedColumnsConfig=[];expandedRowActions=[];enableSavedFilters=false;savedFiltersMode="localStorage";savedFiltersDataSourceName="";savedFiltersItemsPath="";saveFilterDataSourceName="";deleteFilterDataSourceName="";savedFilterIdKey="id";savedFilterNameKey="name";savedFilterDescriptionKey="description";savedFilterCodeKey="code";savedFilterPayloadKey="filters";constructor(i){super();if(i)Object.assign(this,i);if(!Array.isArray(this.columnsConfig)||this.columnsConfig.length===0)this.columnsConfig=[{id:re(),key:"name",label:"Name",type:"text",align:"left",sortable:true,template:"",templateName:"",visibleIf:"",statusRules:[],showInTable:true,showInDetails:false,detailLabel:"",cellActionsEnabled:false,cellActions:[],cellActionsDisplayMode:"dropdown",cellActionsPlaceholder:"",editable:false,editorType:"auto",editorPlaceholder:"",editorOptions:[],editorOptionLabelKey:"label",editorOptionValueKey:"value",filterControlType:"auto",filterOptionsSourceType:"static",filterOptions:[],filterOptionsPath:"",filterOptionsJson:"",filterOptionsDataSourceName:"",filterOptionsDataSourceItemsPath:"",filterOptionLabelKey:"label",filterOptionValueKey:"value",filterMultiValueDelimiter:"|",filterToggleTrueValue:"true",filterToggleFalseValue:"false"}];if(!Array.isArray(this.rowActions))this.rowActions=[];if(!Array.isArray(this.headerActions))this.headerActions=[];if(!Array.isArray(this.headerMenuActions))this.headerMenuActions=[];if(!Array.isArray(this.headerMenuOptions))this.headerMenuOptions=[];if(!Array.isArray(this.headerCenterElements))this.headerCenterElements=[];if(!Array.isArray(this.selectionActions))this.selectionActions=[];if(!Array.isArray(this.rowClickActions))this.rowClickActions=[];if(!Array.isArray(this.rowExpandActions))this.rowExpandActions=[];if(!Array.isArray(this.expandedColumnsConfig))this.expandedColumnsConfig=[];if(!Array.isArray(this.expandedRowActions))this.expandedRowActions=[];this.tableDataSourceName=String(this.tableDataSourceName??"");this.tableItemsPath=String(this.tableItemsPath??"");if(!Array.isArray(this.params))this.params=[];this.params=this.params.map(S=>this.normalizeRequestParam(S)).filter(S=>S!==null).slice(0,5);this.refreshOnChange=this.refreshOnChange===void 0||this.refreshOnChange===null?true:this.normalizeBooleanFlag(this.refreshOnChange);this.refreshPaths=this.normalizeStringList(this.refreshPaths);this.tableTotalPath=String(this.tableTotalPath??"");this.autoSelectCondition=String(this.autoSelectCondition??"");this.selectionItemTemplate=String(this.selectionItemTemplate??"");this.expandedItemsPath=String(this.expandedItemsPath??"");this.expandedTemplate=String(this.expandedTemplate??"");this.expandedEmptyMessage=String(this.expandedEmptyMessage??"");this.expandedDataSourceName=String(this.expandedDataSourceName??"").trim();this.expandedDataSourceItemsPath=String(this.expandedDataSourceItemsPath??"").trim();this.actionsLabel=String(this.actionsLabel??"");this.showActionsHeaderLabel=this.showActionsHeaderLabel===void 0||this.showActionsHeaderLabel===null?true:this.normalizeBooleanFlag(this.showActionsHeaderLabel);this.prevLabel=String(this.prevLabel??"");this.nextLabel=String(this.nextLabel??"");this.loadingLabel=String(this.loadingLabel??"");this.selectAllLabel=String(this.selectAllLabel??"");this.selectLabel=String(this.selectLabel??"");this.selectRowLabel=String(this.selectRowLabel??"");this.expandLabel=String(this.expandLabel??"");this.collapseLabel=String(this.collapseLabel??"");this.selectionActionsLabel=String(this.selectionActionsLabel??"");this.quickSearchPlaceholder=String(this.quickSearchPlaceholder??"");this.orderClause=String(this.orderClause??"").trim();this.orderDirection=String(this.orderDirection??"asc").trim().toLowerCase()==="desc"?"desc":"asc";this.quickSearchParamName=String(this.quickSearchParamName??"quickSearch").trim()||"quickSearch";this.quickSearchCondition=String(this.quickSearchCondition??"%-%").trim()||"%-%";this.quickSearchCaseMode=String(this.quickSearchCaseMode??"caseInsensitiveLatin").trim()||"caseInsensitiveLatin";this.detailedSearchCaseMode=String(this.detailedSearchCaseMode??"caseInsensitiveLatin").trim()||"caseInsensitiveLatin";this.headerTemplate=String(this.headerTemplate??"");this.rowTemplateName=String(this.rowTemplateName??"").trim();this.rowTemplate=String(this.rowTemplate??"");this.headerCenterElements=this.headerCenterElements.map(S=>String(S??"").trim()).filter((S,I,z)=>Boolean(S)&&z.indexOf(S)===I);const e=String(this.headerCenterElementsPosition??"center").trim().toLowerCase();this.headerCenterElementsPosition=e==="left"||e==="right"?e:"center";this.headerMenuEnabled=Boolean(this.headerMenuEnabled);this.headerMenuPlaceholder=String(this.headerMenuPlaceholder??"");this.headerMenuItemsPath=String(this.headerMenuItemsPath??"").trim();this.headerMenuDataSourceName=String(this.headerMenuDataSourceName??"").trim();this.headerMenuDataSourceItemsPath=String(this.headerMenuDataSourceItemsPath??"").trim();this.headerMenuLabelKey=String(this.headerMenuLabelKey??"label").trim()||"label";this.headerMenuValueKey=String(this.headerMenuValueKey??"value").trim()||"value";const t=String(this.headerActionsPosition??"end").trim().toLowerCase();this.headerActionsPosition=t==="start"||t==="center"?t:"end";this.headerActionsDisplayMode=String(this.headerActionsDisplayMode??"buttons").trim().toLowerCase()==="dropdown"?"dropdown":"buttons";this.headerActionsDropdownPlaceholder=String(this.headerActionsDropdownPlaceholder??"");this.headerActionsDropdownTrigger=String(this.headerActionsDropdownTrigger??"blur").trim().toLowerCase()==="change"?"change":"blur";this.exportFileName=String(this.exportFileName??"");this.exportUseColumnPicker=this.exportUseColumnPicker===void 0||this.exportUseColumnPicker===null?true:Boolean(this.exportUseColumnPicker);this.showHeaderControls=Boolean(this.showHeaderControls);this.showQuickSearch=Boolean(this.showQuickSearch);this.quickSearchOnType=Boolean(this.quickSearchOnType);this.showDetailedSearch=Boolean(this.showDetailedSearch);this.showExport=Boolean(this.showExport);this.rowHover=this.rowHover===void 0||this.rowHover===null?true:Boolean(this.rowHover);this.virtualScroll=this.virtualScroll===void 0||this.virtualScroll===null?false:this.normalizeBooleanFlag(this.virtualScroll);const r=Number(this.virtualScrollViewportHeight);this.virtualScrollViewportHeight=Number.isFinite(r)&&r>=160?Math.floor(r):420;const a=Number(this.virtualScrollRowHeight);this.virtualScrollRowHeight=Number.isFinite(a)&&a>=24?Math.floor(a):52;const o=Number(this.virtualScrollBuffer);this.virtualScrollBuffer=Number.isFinite(o)&&o>=1?Math.floor(o):6;this.enableInlineEdit=this.enableInlineEdit===void 0||this.enableInlineEdit===null?false:this.normalizeBooleanFlag(this.enableInlineEdit);this.inlineEditStartMode=String(this.inlineEditStartMode??"action").trim().toLowerCase()==="doubleclick"?"doubleClick":"action";this.inlineEditSaveDataSourceName=String(this.inlineEditSaveDataSourceName??"").trim();this.inlineEditCancelOnReload=this.inlineEditCancelOnReload===void 0||this.inlineEditCancelOnReload===null?true:this.normalizeBooleanFlag(this.inlineEditCancelOnReload);this.flatHeaderSurface=this.flatHeaderSurface===void 0||this.flatHeaderSurface===null?true:this.normalizeBooleanFlag(this.flatHeaderSurface);this.stickyHeader=Boolean(this.stickyHeader);this.flatFooterSurface=this.flatFooterSurface===void 0||this.flatFooterSurface===null?true:this.normalizeBooleanFlag(this.flatFooterSurface);const n=String(this.paginatorAlign??"end").trim().toLowerCase();this.paginatorAlign=n==="start"||n==="center"?n:"end";const s=Number(this.searchDebounceMs);this.searchDebounceMs=Number.isFinite(s)&&s>=0?Math.floor(s):260;const l=Number(this.exportAllPageSize);this.exportAllPageSize=Number.isFinite(l)&&l>0?Math.floor(l):1e4;this.enableSelection=this.normalizeBooleanFlag(this.enableSelection);this.expandableRows=this.normalizeBooleanFlag(this.expandableRows);this.rowClickOpensDetails=this.normalizeBooleanFlag(this.rowClickOpensDetails);this.showExpandChevron=this.normalizeBooleanFlag(this.showExpandChevron);this.alwaysShowExpandChevron=this.normalizeBooleanFlag(this.alwaysShowExpandChevron);this.expandedDisplayMode=String(this.expandedDisplayMode??"sidePanel").trim().toLowerCase()==="inline"?"inline":"sidePanel";this.selectionKey=String(this.selectionKey??"id").trim()||"id";this.rowActionVisibilityPath=String(this.rowActionVisibilityPath??"").trim();const h=String(this.paginatorVariant??"full").trim().toLowerCase();this.paginatorVariant=h==="simple"||h==="numbers"||h==="pager"?h:"full";const m=String(this.paginatorStyle??"default").trim().toLowerCase();this.paginatorStyle=m==="compact"||m==="segmented"?m:"default";const p=Number(this.paginatorMaxButtons);this.paginatorMaxButtons=Number.isFinite(p)&&p>0?Math.floor(p):7;this.showPageSizeSelector=this.showPageSizeSelector===void 0||this.showPageSizeSelector===null?true:this.normalizeBooleanFlag(this.showPageSizeSelector);this.pageSizeOptions=String(this.pageSizeOptions??"10,25,50,100").trim();const y=String(this.tableStyle??"default").trim().toLowerCase();this.tableStyle=y==="grid"||y==="striped"?y:"default";this.rowActions=this.normalizeTableActions(this.rowActions);const v=String(this.rowActionsDisplayMode??"dropdown").trim().toLowerCase();this.rowActionsDisplayMode=v==="iconbuttons"||v==="icon-buttons"?"iconButtons":v==="buttons"?"buttons":"dropdown";const A=String(this.rowActionsDropdownButtonStyle??"borderless").trim().toLowerCase();this.rowActionsDropdownButtonStyle=A==="default"?"default":"borderless";this.rowClickActions=this.normalizeTableActions(this.rowClickActions);this.rowExpandActions=this.normalizeTableActions(this.rowExpandActions);this.headerActions=this.normalizeTableActions(this.headerActions);this.headerMenuActions=this.normalizeTableActions(this.headerMenuActions);this.selectionActions=this.normalizeTableActions(this.selectionActions);this.expandedRowActions=this.normalizeTableActions(this.expandedRowActions);this.enableSavedFilters=Boolean(this.enableSavedFilters);const w=String(this.savedFiltersMode??"localStorage").trim().toLowerCase();this.savedFiltersMode=w==="host"?"host":w==="datasource"?"dataSource":"localStorage";this.savedFiltersDataSourceName=String(this.savedFiltersDataSourceName??"").trim();this.savedFiltersItemsPath=String(this.savedFiltersItemsPath??"").trim();this.saveFilterDataSourceName=String(this.saveFilterDataSourceName??"").trim();this.deleteFilterDataSourceName=String(this.deleteFilterDataSourceName??"").trim();this.savedFilterIdKey=String(this.savedFilterIdKey??"id").trim()||"id";this.savedFilterNameKey=String(this.savedFilterNameKey??"name").trim()||"name";this.savedFilterDescriptionKey=String(this.savedFilterDescriptionKey??"description").trim()||"description";this.savedFilterCodeKey=String(this.savedFilterCodeKey??"code").trim()||"code";this.savedFilterPayloadKey=String(this.savedFilterPayloadKey??"filters").trim()||"filters";this.resetColumnSettingsDataSourceName=String(this.resetColumnSettingsDataSourceName??"").trim();this.detailsPanelTitle=String(this.detailsPanelTitle??"");this.headerMenuOptions=this.headerMenuOptions.filter(S=>S&&typeof S==="object").map(S=>({...S}));this.columnsConfig=this.columnsConfig.map(S=>this.normalizeColumnConfig(S));this.expandedColumnsConfig=this.expandedColumnsConfig.map(S=>this.normalizeColumnConfig(S))}normalizeColumnConfig(i){return{...i,showHeaderLabel:i?.showHeaderLabel===void 0||i?.showHeaderLabel===null?true:this.normalizeBooleanFlag(i?.showHeaderLabel),mobileLabel:String(i?.mobileLabel??""),formatLocale:String(i?.formatLocale??"").trim(),dateFormatPattern:String(i?.dateFormatPattern??"").trim(),dateIncludeSeconds:this.normalizeBooleanFlag(i?.dateIncludeSeconds),numberMinFractionDigits:this.normalizeFractionDigitsSetting(i?.numberMinFractionDigits),numberMaxFractionDigits:this.normalizeFractionDigitsSetting(i?.numberMaxFractionDigits),numberUseGrouping:i?.numberUseGrouping===void 0||i?.numberUseGrouping===null?true:this.normalizeBooleanFlag(i?.numberUseGrouping),elementType:String(i?.elementType??"").trim(),element:this.normalizeColumnElement(i?.element),template:String(i?.template??""),templateName:String(i?.templateName??""),visibleIf:String(i?.visibleIf??""),statusRules:this.normalizeStatusRules(i?.statusRules),statusShowIcon:this.normalizeBooleanFlag(i?.statusShowIcon),showInTable:i?.showInTable===void 0||i?.showInTable===null?true:Boolean(i?.showInTable),showInDetails:Boolean(i?.showInDetails),detailLabel:String(i?.detailLabel??""),controlActiveIf:String(i?.controlActiveIf??""),controlEnabledIf:String(i?.controlEnabledIf??""),cellActionsEnabled:Boolean(i?.cellActionsEnabled),cellActions:this.normalizeTableActions(Array.isArray(i?.cellActions)?i.cellActions:[]),cellActionsDisplayMode:this.normalizeColumnCellActionsDisplayMode(i?.cellActionsDisplayMode),cellActionsPlaceholder:String(i?.cellActionsPlaceholder??""),editable:this.normalizeBooleanFlag(i?.editable),editorType:this.normalizeInlineEditorType(i?.editorType),editorPlaceholder:String(i?.editorPlaceholder??""),editorOptions:this.parseRecordOptionsArray(i?.editorOptions),editorOptionLabelKey:String(i?.editorOptionLabelKey??"label").trim()||"label",editorOptionValueKey:String(i?.editorOptionValueKey??"value").trim()||"value",filterControlType:this.normalizeFilterControlType(i?.filterControlType),filterOptionsSourceType:this.normalizeFilterOptionsSourceType(i?.filterOptionsSourceType,i?.filterOptionsDataSourceName),filterOptions:this.parseFilterOptionsArray(i?.filterOptions,i?.filterOptionsJson),filterOptionsPath:String(i?.filterOptionsPath??""),filterOptionsJson:String(i?.filterOptionsJson??""),filterOptionsDataSourceName:String(i?.filterOptionsDataSourceName??"").trim(),filterOptionsDataSourceItemsPath:String(i?.filterOptionsDataSourceItemsPath??"").trim(),filterOptionLabelKey:String(i?.filterOptionLabelKey??"label").trim()||"label",filterOptionValueKey:String(i?.filterOptionValueKey??"value").trim()||"value",filterMultiValueDelimiter:String(i?.filterMultiValueDelimiter??"|").trim()||"|",filterToggleTrueValue:String(i?.filterToggleTrueValue??"true"),filterToggleFalseValue:String(i?.filterToggleFalseValue??"false")}}normalizeFractionDigitsSetting(i){const e=String(i??"").trim();if(!e)return"";const t=Number(e);if(!Number.isFinite(t))return"";return Math.max(0,Math.min(20,Math.floor(t)))}normalizeColumnElement(i){if(!i||typeof i!=="object"||Array.isArray(i))return{};return{...i}}normalizeTableActions(i){if(!Array.isArray(i))return[];return i.map(e=>({...e,id:String(e?.id??"").trim()||re(),label:String(e?.label??""),actionCode:String(e?.actionCode??"").trim(),icon:String(e?.icon??"").trim(),hideText:this.normalizeBooleanFlag(e?.hideText),trigger:String(e?.trigger??"click").trim()||"click",debounceMs:Number(e?.debounceMs??0),type:String(e?.type??"navigate").trim()||"navigate",validateForm:this.normalizeBooleanFlag(e?.validateForm),confirmEnabled:this.normalizeBooleanFlag(e?.confirmEnabled),confirmOnDirty:this.normalizeBooleanFlag(e?.confirmOnDirty),condition:String(e?.condition??""),navigateTo:String(e?.navigateTo??""),openInNewTab:this.normalizeBooleanFlag(e?.openInNewTab),beforeNavigateDataSourceName:String(e?.beforeNavigateDataSourceName??""),dataSourceName:String(e?.dataSourceName??""),reloadCurrentElementAfterSuccess:this.normalizeBooleanFlag(e?.reloadCurrentElementAfterSuccess),reloadOnReturnElementNames:Array.isArray(e?.reloadOnReturnElementNames)?e.reloadOnReturnElementNames.map(t=>String(t??"").trim()).filter(Boolean):String(e?.reloadOnReturnElementNames??""),responseMode:String(e?.responseMode??"none").trim()||"none",responseDataPath:String(e?.responseDataPath??""),responseTargetElement:String(e?.responseTargetElement??""),responseTargetPath:String(e?.responseTargetPath??""),responseFileName:String(e?.responseFileName??""),setValueTargetPath:String(e?.setValueTargetPath??""),setValueMode:String(e?.setValueMode??"contextPath").trim()||"contextPath",setValueValue:String(e?.setValueValue??""),setOptionsTargetElement:String(e?.setOptionsTargetElement??""),setOptionsMode:String(e?.setOptionsMode??"contextPath").trim()||"contextPath",setOptionsValue:String(e?.setOptionsValue??""),reloadDataSourceNames:String(e?.reloadDataSourceNames??""),reloadElementNames:Array.isArray(e?.reloadElementNames)?e.reloadElementNames.map(t=>String(t??"").trim()).filter(Boolean):String(e?.reloadElementNames??""),confirmTitle:String(e?.confirmTitle??""),confirmMessage:String(e?.confirmMessage??""),confirmConfirmLabel:String(e?.confirmConfirmLabel??""),confirmCancelLabel:String(e?.confirmCancelLabel??""),showToastAfter:this.normalizeBooleanFlag(e?.showToastAfter),toastTitle:String(e?.toastTitle??""),toastMessage:String(e?.toastMessage??""),toastVariant:String(e?.toastVariant??"info").trim()||"info",toastPosition:String(e?.toastPosition??"top-right").trim()||"top-right",toastAutoHide:e?.toastAutoHide===void 0?true:this.normalizeBooleanFlag(e?.toastAutoHide),toastAutoHideMs:Number(e?.toastAutoHideMs??7e3),toastShowIcon:e?.toastShowIcon===void 0?true:this.normalizeBooleanFlag(e?.toastShowIcon),toastIcon:String(e?.toastIcon??""),params:Array.isArray(e?.params)?[...e.params]:[]}))}normalizeBooleanFlag(i){if(typeof i==="string"){const e=i.trim().toLowerCase();if(!e)return false;return e!=="false"&&e!=="0"&&e!=="off"&&e!=="no"}return Boolean(i)}normalizeRequestParam(i){if(!i||typeof i!=="object"||Array.isArray(i))return null;const e=i;return{paramName:String(e["paramName"]??e["name"]??""),paramValue:e["paramValue"]??e["value"]??""}}normalizeStringList(i){return(Array.isArray(i)?i:String(i??"").split(/[\r\n,]+/g).map(e=>e.trim())).map(e=>String(e??"").trim()).filter((e,t,r)=>Boolean(e)&&r.indexOf(e)===t)}normalizeStatusRules(i){if(!Array.isArray(i))return[];return i.map(e=>({...e,id:String(e?.["id"]??"").trim()||re(),condition:String(e?.["condition"]??""),label:String(e?.["label"]??""),tone:this.normalizeStatusTone(e?.["tone"]),icon:String(e?.["icon"]??"").trim(),rounded:this.normalizeBooleanFlag(e?.["rounded"])}))}normalizeStatusTone(i){const e=String(i??"").trim().toLowerCase();if(e==="success")return"success";if(e==="warning"||e==="warn")return"warning";if(e==="risk"||e==="danger"||e==="error")return"risk";if(e==="info")return"info";if(e==="primary")return"primary";return"neutral"}normalizeColumnCellActionsDisplayMode(i){const e=String(i??"").trim().toLowerCase();if(e==="iconbuttons"||e==="icon-buttons")return"iconButtons";if(e==="buttons")return"buttons";return"dropdown"}normalizeInlineEditorType(i){const e=String(i??"auto").trim().toLowerCase();if(e==="text")return"text";if(e==="number")return"number";if(e==="date")return"date";if(e==="textarea")return"textarea";if(e==="checkbox")return"checkbox";if(e==="toggle")return"toggle";if(e==="select")return"select";return"auto"}parseRecordOptionsArray(i){if(!Array.isArray(i))return[];return i.filter(e=>e&&typeof e==="object"&&!Array.isArray(e)).map(e=>({...e}))}normalizeFilterOptionsSourceType(i,e){const t=String(i??"").trim().toLowerCase();if(t==="datasource")return"datasource";if(t==="static")return"static";return String(e??"").trim()?"datasource":"static"}parseFilterOptionsArray(i,e){if(Array.isArray(i))return i.filter(r=>r&&typeof r==="object"&&!Array.isArray(r)).map(r=>({...r}));const t=String(e??"").trim();if(!t)return[];try{const r=JSON.parse(t);return Array.isArray(r)?r.filter(a=>a&&typeof a==="object"&&!Array.isArray(a)).map(a=>({...a})):[]}catch{return[]}}normalizeFilterControlType(i){const e=String(i??"auto").trim().toLowerCase();if(e==="text")return"text";if(e==="number")return"number";if(e==="date")return"date";if(e==="datetime"||e==="date-time")return"dateTime";if(e==="boolean")return"boolean";if(e==="select")return"select";if(e==="multiselect"||e==="multi-select")return"multiSelect";if(e==="checkbox")return"checkbox";if(e==="toggle"||e==="togglebutton"||e==="toggle-button")return"toggle";return"auto"}};var R=class extends f{pickerMode="date";includeSeconds=false;format;customFormat;minValue;maxValue;dataService;boundExpressionEvaluator;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e}resolveBoundDate(i){const e=String(i??"").trim();if(!e)return null;const t=this.parseValue(e);if(t)return t;if(!this.boundExpressionEvaluator||!/[({]/.test(e))return null;return this.coerceEvaluatedDate(this.boundExpressionEvaluator(e))}coerceEvaluatedDate(i){if(i instanceof Date)return Number.isNaN(i.getTime())?null:i;if(typeof i==="number"&&Number.isFinite(i)){const a=new Date(i);return Number.isNaN(a.getTime())?null:a}const e=String(i??"").trim();if(!e)return null;const t=this.parseValue(e);if(t)return t;const r=new Date(e);return Number.isNaN(r.getTime())?null:r}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=i.target;const r=String(t?.value??"").trim();if(!r){this.setValueFromString(null,e);return}const a=this.fromNativeInputValue(r);this.setValueFromString(a,e)}setValueFromString(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=String(i??"").trim();if(!t){const r=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:r,trigger:e});return}this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:t,oldValue:this.value,sender:this,trigger:e});this.value=t}setValueFromDate(i,e="change"){if(!i){this.setValueFromString(null,e);return}this.setValueFromString(this.formatDateForOutput(i),e)}formatDateForOutput(i){const e=this.normalizeMode(this.pickerMode);const t=this.resolveOutputFormat(e,this.includeSeconds);return this.formatDate(i,t)}toDisplayValue(i){const e=String(i??"").trim();if(!e)return"";const t=this.parseValue(e);if(!t)return e;const r=this.normalizeMode(this.pickerMode);const a=this.resolveDisplayFormat(r,this.includeSeconds);return this.formatDate(t,a)}parseValue(i){const e=String(i??"").trim();if(!e)return null;const t=this.normalizeMode(this.pickerMode);const r=this.resolveNativeFormat(t,this.includeSeconds);const a=this.resolveOutputFormat(t,this.includeSeconds);const o=this.resolveDisplayFormat(t,this.includeSeconds);const n=Array.from(new Set([a,o,r,"YYYY-MM-DDTHH:mm:ss","YYYY-MM-DDTHH:mm","YYYY-MM-DD HH:mm:ss","YYYY-MM-DD HH:mm","YYYY-MM-DD","HH:mm:ss","HH:mm"]));for(const s of n){const l=this.parseByFormat(e,s);if(l)return l}return null}isWithinRange(i){if(!(i instanceof Date)||Number.isNaN(i.getTime()))return false;const e=this.normalizeMode(this.pickerMode);const t=this.resolveBoundDate(this.minValue);const r=this.resolveBoundDate(this.maxValue);if(e==="time"){const a=this.toSeconds(i);if(t&&a<this.toSeconds(t))return false;if(r&&a>this.toSeconds(r))return false;return true}if(t&&i.getTime()<t.getTime())return false;if(r&&i.getTime()>r.getTime())return false;return true}toNativeInputValue(i){const e=String(i??"").trim();if(!e)return"";const t=this.parseValue(e);if(!t)return e;const r=this.normalizeMode(this.pickerMode);const a=this.resolveNativeFormat(r,this.includeSeconds);return this.formatDate(t,a)}fromNativeInputValue(i){const e=this.normalizeMode(this.pickerMode);const t=this.resolveNativeFormat(e,this.includeSeconds);const r=this.resolveOutputFormat(e,this.includeSeconds);const a=this.parseByFormat(i,t);if(!a)return i;return this.formatDate(a,r)}resolveOutputFormat(i,e){const t=this.resolveConfiguredOutputFormat();if(t)return t;return this.resolveNativeFormat(i,e)}resolveDisplayFormat(i,e){const t=this.resolveConfiguredOutputFormat();if(t)return t;if(i==="datetime")return e?"YYYY-MM-DD HH:mm:ss":"YYYY-MM-DD HH:mm";return this.resolveNativeFormat(i,e)}resolveNativeFormat(i,e){if(i==="time")return e?"HH:mm:ss":"HH:mm";if(i==="datetime")return e?"YYYY-MM-DDTHH:mm:ss":"YYYY-MM-DDTHH:mm";return"YYYY-MM-DD"}hasOutputFormatOverride(){return Boolean(this.resolveConfiguredOutputFormat())}normalizeMode(i){const e=String(i??"date").trim().toLowerCase();if(e==="time")return"time";if(e==="datetime")return"datetime";return"date"}toSeconds(i){return i.getHours()*3600+i.getMinutes()*60+i.getSeconds()}formatDate(i,e){const t=i.getFullYear();const r=String(i.getMonth()+1).padStart(2,"0");const a=String(i.getDate()).padStart(2,"0");const o=String(i.getHours()).padStart(2,"0");const n=String(i.getMinutes()).padStart(2,"0");const s=String(i.getSeconds()).padStart(2,"0");return String(e??"").replaceAll("YYYY",String(t)).replaceAll("MM",r).replaceAll("DD",a).replaceAll("HH",o).replaceAll("mm",n).replaceAll("ss",s)}resolveConfiguredOutputFormat(){const i=String(this.format??"").trim();if(!i)return"";if(i==="custom")return String(this.customFormat??"").trim();return i}parseByFormat(i,e){const t=String(i??"").trim();const r=String(e??"").trim();if(!t||!r)return null;const a=/(YYYY|MM|DD|HH|mm|ss)/g;const o=[];const n=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(a,S=>{o.push(S);if(S==="YYYY")return"(\\d{4})";return"(\\d{1,2})"});const s=new RegExp(`^${n}$`).exec(t);if(!s)return null;const l=new Map;o.forEach((S,I)=>{const z=Number(s[I+1]);l.set(S,Number.isFinite(z)?z:0)});const h=l.get("YYYY")??1970;const m=(l.get("MM")??1)-1;const p=l.get("DD")??1;const y=l.get("HH")??0;const v=l.get("mm")??0;const A=l.get("ss")??0;const w=new Date(h,m,p,y,v,A);if(Number.isNaN(w.getTime()))return null;if(l.has("YYYY")&&w.getFullYear()!==h)return null;if(l.has("MM")&&w.getMonth()!==m)return null;if(l.has("DD")&&w.getDate()!==p)return null;if(l.has("HH")&&w.getHours()!==y)return null;if(l.has("mm")&&w.getMinutes()!==v)return null;if(l.has("ss")&&w.getSeconds()!==A)return null;return w}};u([c()],R.prototype,"dataService",void 0);u([c()],R.prototype,"boundExpressionEvaluator",void 0);u([c()],R.prototype,"resolveBoundDate",null);u([c()],R.prototype,"setValue",null);u([c()],R.prototype,"setValueFromString",null);u([c()],R.prototype,"setValueFromDate",null);u([c()],R.prototype,"formatDateForOutput",null);u([c()],R.prototype,"toDisplayValue",null);u([c()],R.prototype,"parseValue",null);u([c()],R.prototype,"isWithinRange",null);var ae=class extends R{constructor(i,e){super(i,e);this.pickerMode="date";this.includeSeconds=false}normalizeRangeValue(i){const e=this.parseRangeValue(i);if(!e.dateFrom&&!e.dateTo)return null;return{dateFrom:e.dateFrom?this.formatDateForOutput(e.dateFrom):"",dateTo:e.dateTo?this.formatDateForOutput(e.dateTo):""}}parseRangeValue(i){const e=this.resolveRangeSource(i);const t=e?.["dateFrom"]??e?.["from"]??e?.["start"]??null;const r=e?.["dateTo"]??e?.["to"]??e?.["end"]??null;let a=this.parseValue(t);let o=this.parseValue(r);if(a)a=this.normalizeDateOnly(a);if(o)o=this.normalizeDateOnly(o);if(a&&o&&o.getTime()<a.getTime())[a,o]=[o,a];return{dateFrom:a,dateTo:o}}setRangeValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=this.normalizeRangeValue(i);if(!t){const r=this.value;this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:r,trigger:e});return}this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:t,oldValue:this.value,sender:this,trigger:e});this.value=t}setRangeValueFromDates(i,e,t="change"){if(!i&&!e){this.setRangeValue(null,t);return}const r=i?this.normalizeDateOnly(i):null;const a=e?this.normalizeDateOnly(e):null;if(!r||!a){this.setRangeValue(null,t);return}let o=r;let n=a;if(n.getTime()<o.getTime())[o,n]=[n,o];this.setRangeValue({dateFrom:this.formatDateForOutput(o),dateTo:this.formatDateForOutput(n)},t)}resolveRangeSource(i){if(!i)return null;if(typeof i==="object"&&!Array.isArray(i))return i;if(typeof i==="string"){const e=i.trim();if(!e)return null;if(e.startsWith("{")&&e.endsWith("}"))try{const r=JSON.parse(e);if(r&&typeof r==="object"&&!Array.isArray(r))return r}catch{}const t=e.split("|").map(r=>r.trim());if(t.length===2)return{dateFrom:t[0],dateTo:t[1]}}return null}normalizeDateOnly(i){const e=new Date(i);e.setHours(0,0,0,0);return e}};u([c()],ae.prototype,"normalizeRangeValue",null);u([c()],ae.prototype,"parseRangeValue",null);u([c()],ae.prototype,"setRangeValue",null);u([c()],ae.prototype,"setRangeValueFromDates",null);var M=class extends f{tabs=[{value:"tab1",label:"Tab 1"},{value:"tab2",label:"Tab 2"}];itemSourceMode="manual";tabsDataPath="";activeTabDataPath="";showContent=true;tabTemplateName;tabTemplate;fullWidthTabs=false;tabsPosition="top";tabsVariant="buttons";dataSourceLoaded=false;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i){super();if(i)Object.assign(this,i);const e=Array.isArray(i?.items)?i.items:[];if((!Array.isArray(this.tabs)||this.tabs.length===0)&&e.length>0)this.tabs=e.map((a,o)=>({value:`tab${o+1}`,label:String(a?.label??"").trim()||`Tab ${o+1}`,content:String(a?.value??"").trim()}));if(!Array.isArray(this.tabs)||this.tabs.length===0)this.tabs=[{value:"tab1",label:"Tab 1"},{value:"tab2",label:"Tab 2"}];this.tabs=this.normalizeTabs(this.tabs);this.fullWidthTabs=Boolean(this.fullWidthTabs);const t=String(this.tabsPosition??"top").trim().toLowerCase();this.tabsPosition=t==="left"||t==="right"?t:"top";const r=String(this.tabsVariant??"buttons").trim().toLowerCase();this.tabsVariant=r==="header"||r==="underline"?r:"buttons";this.itemSourceMode=this.normalizeItemSourceMode(this.itemSourceMode);this.tabsDataPath=String(this.tabsDataPath??"").trim();this.activeTabDataPath=String(this.activeTabDataPath??"").trim();this.showContent=this.showContent!==false;this.tabTemplateName=this.normalizeOptionalText(this.tabTemplateName);this.tabTemplate=this.normalizeOptionalText(this.tabTemplate);this.dataSourceLoaded=!this.hasActiveItemsDataSource();this.onDataSourceChanged.add(a=>{if(!this.shouldConsumeItemsDataSourceEvent(a)){this.dataSourceLoaded=!this.hasActiveItemsDataSource();this.afterDataSourceLoad.fire();return}this.setTabsFromSource(a.result);this.dataSourceLoaded=true;this.afterDataSourceLoad.fire()})}setTabsFromSource(i){this.tabs=this.normalizeSourceTabs(this.resolveItemsFromSource(i))}normalizeTabs(i){if(!Array.isArray(i))return[];return i.map((e,t)=>{const r=String(e?.id??"").trim();const a=String(e?.value??r).trim()||`tab${t+1}`;return{...e??{},id:r||a,value:a,label:String(e?.label??"").trim()||`Tab ${t+1}`,visibleIf:String(e?.visibleIf??"").trim()||void 0,disabledIf:String(e?.disabledIf??"").trim()||void 0,content:String(e?.content??"").trim()||void 0}})}normalizeSourceTabs(i){if(!Array.isArray(i))return[];return i.map((e,t)=>this.normalizeSourceTab(e,t))}normalizeSourceTab(i,e){if(!i||typeof i!=="object"||Array.isArray(i)){const l=String(i??"").trim();const h=`tab${e+1}`;return{id:h,value:h,label:l||`Tab ${e+1}`}}const t=i;const r=String(this.dataSource?.optionLabel??"label").trim()||"label";const a=String(this.dataSource?.optionValue??"value").trim()||"value";const o=this.resolveMappedValue(t,a);const n=this.firstText(t["id"],o,t["code"],t["value"],`tab${e+1}`);const s=this.firstText(this.resolveMappedValue(t,r),t["label"],t["title"],t["name"],`Tab ${e+1}`);return{...t,id:n,value:n,label:s,visibleIf:String(t["visibleIf"]??"").trim()||void 0,disabledIf:String(t["disabledIf"]??"").trim()||void 0,content:this.firstText(t["content"],t["description"],t["text"])||void 0}}resolveItemsFromSource(i){const e=String(this.tabsDataPath??"").trim();if(e){const t=this.readPath(i,e);if(Array.isArray(t))return t}if(Array.isArray(i))return i;if(!i||typeof i!=="object")return[];for(const t of["tabs","items","data.tabs","data.items","data.rows","data.records","data.results","records","rows","results","result","data"]){const r=this.readPath(i,t);if(Array.isArray(r))return r}return[]}hasActiveItemsDataSource(){return this.normalizeItemSourceMode(this.itemSourceMode)==="dataSource"&&String(this.dataSource?.name??"").trim().length>0}shouldConsumeItemsDataSourceEvent(i){if(!this.hasActiveItemsDataSource())return false;const e=String(this.dataSource?.name??"").trim();const t=String(i?.dataSource?.name??"").trim();return Boolean(e&&t&&e===t)}normalizeItemSourceMode(i){return String(i??"").trim().toLowerCase()==="datasource"?"dataSource":"manual"}normalizeOptionalText(i){return String(i??"").trim()||void 0}resolveMappedValue(i,e){const t=String(e??"").trim();if(!t)return;return this.readPath(i,t)}readPath(i,e){const t=String(e??"").trim().split(".").filter(a=>a.length>0);if(t.length===0)return i;let r=i;for(const a of t){if(!r||typeof r!=="object"||Array.isArray(r))return;r=r[a]}return r}firstText(...i){for(const e of i){const t=String(e??"").trim();if(t)return t}return""}};u([c()],M.prototype,"dataSourceLoaded",void 0);u([c()],M.prototype,"onDataSourceChanged",void 0);u([c()],M.prototype,"afterDataSourceLoad",void 0);u([c()],M.prototype,"setTabsFromSource",null);u([c()],M.prototype,"normalizeTabs",null);u([c()],M.prototype,"normalizeSourceTabs",null);u([c()],M.prototype,"normalizeSourceTab",null);u([c()],M.prototype,"resolveItemsFromSource",null);u([c()],M.prototype,"hasActiveItemsDataSource",null);u([c()],M.prototype,"shouldConsumeItemsDataSourceEvent",null);u([c()],M.prototype,"normalizeItemSourceMode",null);u([c()],M.prototype,"normalizeOptionalText",null);u([c()],M.prototype,"resolveMappedValue",null);u([c()],M.prototype,"readPath",null);u([c()],M.prototype,"firstText",null);var Yt=class extends f{triggerText;triggerIcon;triggerIconPosition="left";triggerIconOnly=false;triggerVariant="solid";triggerColor;triggerTextColor;triggerWidth;triggerMobileWidth;triggerAlign="left";showTriggerButton=true;dialogMode="modal";initiallyOpen=false;openIf;openDataPath;stateDataPath;showCloseButton=true;closeOnBackdrop=true;allowFullscreenToggle=false;headerTemplateName;headerTemplate;dialogWidth;dialogMaxWidth;dialogHeight;constructor(i){super();if(i)Object.assign(this,i)}};var ie=class extends f{dataService;layout="grid";gridColumns=3;gap;minCardWidth;itemsPath;totalPath="";emptyMessage;cardTemplateName;cardTemplate;lazyLoad=false;paginator=false;infinityScroll=false;paginatorVariant="pager";paginatorStyle="default";paginatorMaxButtons=7;pageSize=10;showPageSizeSelector=false;pageSizeOptions="10,25,50,100";showRecordCount=false;stickyHeader=false;showQuickSearch=false;quickSearchPlaceholder="";quickSearchParamName="quickSearch";quickSearchCondition="%-%";quickSearchCaseMode="caseInsensitiveLatin";searchDebounceMs=260;showSortControl=false;sortField="";orderDirection="asc";items=[];dataSourceLoaded=false;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i,e){super();this.dataService=e;if(i){const{columns:a,...o}=i;Object.assign(this,o);const n=Number(a);if(Number.isFinite(n)&&n>0)this.gridColumns=Math.floor(n)}this.itemsPath=this.normalizeOptionalText(this.itemsPath);this.totalPath=String(this.totalPath??"").trim();this.emptyMessage=this.normalizeOptionalText(this.emptyMessage);this.cardTemplateName=this.normalizeOptionalText(this.cardTemplateName);this.cardTemplate=this.normalizeOptionalText(this.cardTemplate);this.lazyLoad=Boolean(this.lazyLoad);this.paginator=Boolean(this.paginator);this.infinityScroll=Boolean(this.infinityScroll);const t=String(this.paginatorVariant??"pager").trim().toLowerCase();this.paginatorVariant=t==="simple"||t==="numbers"||t==="full"?t:"pager";const r=String(this.paginatorStyle??"default").trim().toLowerCase();this.paginatorStyle=r==="compact"||r==="segmented"?r:"default";this.paginatorMaxButtons=this.normalizePositiveInteger(this.paginatorMaxButtons,7);this.pageSize=this.normalizePositiveInteger(this.pageSize,10);this.showPageSizeSelector=Boolean(this.showPageSizeSelector);this.pageSizeOptions=String(this.pageSizeOptions??"10,25,50,100").trim();this.showRecordCount=Boolean(this.showRecordCount);this.stickyHeader=Boolean(this.stickyHeader);this.showQuickSearch=Boolean(this.showQuickSearch);this.quickSearchPlaceholder=String(this.quickSearchPlaceholder??"").trim();this.quickSearchParamName=String(this.quickSearchParamName??"quickSearch").trim()||"quickSearch";this.quickSearchCondition=String(this.quickSearchCondition??"%-%").trim()||"%-%";this.quickSearchCaseMode=String(this.quickSearchCaseMode??"caseInsensitiveLatin").trim()||"caseInsensitiveLatin";this.searchDebounceMs=this.normalizePositiveInteger(this.searchDebounceMs,260);this.showSortControl=Boolean(this.showSortControl);this.sortField=String(this.sortField??"").trim();this.orderDirection=this.normalizeSortDirection(this.orderDirection);this.dataSourceLoaded=!this.hasActiveItemsDataSource();this.onDataSourceChanged.add(a=>{if(!this.shouldConsumeItemsDataSourceEvent(a)){this.dataSourceLoaded=!this.hasActiveItemsDataSource();this.afterDataSourceLoad.fire();return}const o=this.resolveRowsFromSource(a?.result);this.items=o;this.value=[...o];this.dataSourceLoaded=true;if(this.dataPath)this.dataService?.setValue(this.dataPath,[...o]);this.afterDataSourceLoad.fire()})}setItemsFromSource(i){const e=this.resolveRowsFromSource(i);this.items=e;this.value=[...e]}resolveRowsFromSource(i){if(Array.isArray(i))return this.normalizeRows(i);const e=String(this.itemsPath??"").trim();if(e)return this.normalizeRows(x(i,e));if(!i||typeof i!=="object")return[];const t=i;if(Array.isArray(t["items"]))return this.normalizeRows(t["items"]);if(Array.isArray(t["data"]))return this.normalizeRows(t["data"]);return[]}normalizeRows(i){if(!Array.isArray(i))return[];return i.map((e,t)=>this.normalizeRow(e,t))}normalizeRow(i,e){if(i&&typeof i==="object"&&!Array.isArray(i))return{...i};return{index:e,value:i,label:String(i??"")}}normalizeOptionalText(i){return String(i??"").trim()||void 0}normalizePositiveInteger(i,e){const t=Number(i);if(!Number.isFinite(t)||t<=0)return e;return Math.floor(t)}normalizeSortDirection(i){return String(i??"asc").trim().toLowerCase()==="desc"?"desc":"asc"}hasActiveItemsDataSource(){return String(this.dataSource?.name??"").trim().length>0}shouldConsumeItemsDataSourceEvent(i){if(!this.hasActiveItemsDataSource())return false;const e=String(this.dataSource?.name??"").trim();const t=String(i?.dataSource?.name??"").trim();if(!e||!t||e!==t)return false;return true}};u([c()],ie.prototype,"items",void 0);u([c()],ie.prototype,"dataSourceLoaded",void 0);u([c()],ie.prototype,"onDataSourceChanged",void 0);u([c()],ie.prototype,"afterDataSourceLoad",void 0);var ce=class extends f{htmlSourcePath;htmlContent="";htmlCss="";toolbarTools;showWordCount=false;dataService;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e;const t=String(this.value??this.htmlContent??"");this.htmlContent=t;this.htmlCss=String(this.htmlCss??"");this.htmlSourcePath=this.normalizeOptionalText(this.htmlSourcePath);this.value=t}normalizeOptionalText(i){return String(i??"").trim()||void 0}setHtmlValue(i,e="change",t){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const r=String(i??"");const a=String(t??"");const o=this.isHtmlEffectivelyEmpty(r);if(!this.dataService){this.htmlContent=o?"":r;this.htmlCss=o?"":a;this.value=o?null:r;return}if(o){const n=this.value;this.htmlContent="";this.htmlCss="";this.value=null;this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:n,trigger:e});return}this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:r,oldValue:this.value,sender:this,trigger:e});this.htmlContent=r;this.htmlCss=a;this.value=r}isHtmlEffectivelyEmpty(i){const e=String(i??"").replace(/<br\s*\/?>/gi,"").replace(/ /gi," ").trim();if(!e)return true;if(/<\s*(img|iframe|video|hr|table)\b/i.test(e))return false;return e.replace(/<[^>]*>/g,"").trim().length===0}};u([c()],ce.prototype,"dataService",void 0);u([c()],ce.prototype,"setHtmlValue",null);var $e=class extends f{htmlTemplateName;htmlTemplate="<section><h4>{pageTitle}</h4><p>{pageDescription}</p></section>";constructor(i){super();if(i)Object.assign(this,i);this.htmlTemplateName=this.normalizeOptionalText(this.htmlTemplateName);this.htmlTemplate=String(this.htmlTemplate??"")}normalizeOptionalText(i){return String(i??"").trim()||void 0}};var Gt=class extends f{variantMode="static";variant="info";title="Information";descriptionText="Message details";icon="";showIcon=true;primaryButtonText="";secondaryButtonText="";variantExpression="";variantRules=[];appearance="soft";actionsLayout="stacked";dismissible=false;initiallyVisible=true;constructor(i){super();if(i)Object.assign(this,i);this.variantMode=String(this.variantMode??"static").trim().toLowerCase()==="conditional"?"conditional":"static";this.variantRules=Array.isArray(this.variantRules)?this.variantRules.map(t=>({variant:String(t?.variant??"").trim(),condition:String(t?.condition??"").trim()})).filter(t=>t.variant.length>0):[];const e=String(this.appearance??"soft").trim().toLowerCase();this.appearance=e==="card"||e==="accent"?e:"soft";this.actionsLayout=String(this.actionsLayout??"").trim().toLowerCase()==="inline"?"inline":"stacked";this.showIcon=Boolean(this.showIcon);this.dismissible=Boolean(this.dismissible);this.initiallyVisible=Boolean(this.initiallyVisible)}};var Jt=class extends f{variant="info";title="Notification";descriptionText="Toast message";icon="";showIcon=true;position="top-right";autoHide=true;autoHideMs=7e3;dismissible=true;initiallyVisible=true;actionText="";constructor(i){super();if(i)Object.assign(this,i);this.showIcon=Boolean(this.showIcon);this.autoHide=Boolean(this.autoHide);this.dismissible=Boolean(this.dismissible);this.initiallyVisible=Boolean(this.initiallyVisible);const e=Number(this.autoHideMs);this.autoHideMs=Number.isFinite(e)&&e>=0?Math.floor(e):7e3}};var Xt=class extends f{text="Badge";variantMode="static";variant="info";variantExpression="";variantRules=[];icon="";showIcon=false;size="md";pill=true;constructor(i){super();if(i)Object.assign(this,i);this.variantMode=String(this.variantMode??"static").trim().toLowerCase()==="conditional"?"conditional":"static";this.variantRules=Array.isArray(this.variantRules)?this.variantRules.map(e=>({variant:String(e?.variant??"").trim(),condition:String(e?.condition??"").trim()})).filter(e=>e.variant.length>0):[]}};var Qt=class extends f{title="Metric";valueText="0";trendText="";trendDirection="neutral";icon="monitoring";variantMode="static";variant="neutral";variantExpression="";variantRules=[];iconExpression="";trendDirectionExpression="";constructor(i){super();if(i)Object.assign(this,i);this.variantMode=String(this.variantMode??"static").trim().toLowerCase()==="conditional"?"conditional":"static";this.variantRules=Array.isArray(this.variantRules)?this.variantRules.map(e=>({variant:String(e?.variant??"").trim(),condition:String(e?.condition??"").trim()})).filter(e=>e.variant.length>0):[]}};var Zt=class extends f{items=[{label:"Section 1",value:"Section 1 content"},{label:"Section 2",value:"Section 2 content"}];allowMultiple=false;openFirst=true;itemTemplateName;itemTemplate;constructor(i){super();if(i)Object.assign(this,i);if(!Array.isArray(this.items))this.items=[];this.itemTemplateName=this.normalizeOptionalText(this.itemTemplateName);this.itemTemplate=this.normalizeOptionalText(this.itemTemplate)}normalizeOptionalText(i){return String(i??"").trim()||void 0}};var O=class extends f{mode="stepper";variant="default";itemSourceMode="manual";stepsDataPath="";stepLabelKey="";stepValueKey="";stepDescriptionKey="";stepTemplateName;stepTemplate;items=[{label:"Step 1",value:"Collect data"},{label:"Step 2",value:"Review"},{label:"Step 3",value:"Done"}];activeIndex=0;activeStepExpression="";activeStepDataPath="";allowManualNavigation=true;showNumbers=true;showConnector=true;showContent=true;dataSourceLoaded=false;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i){super();if(i)Object.assign(this,i);this.items=this.normalizeItems(this.items);const e=Number(this.activeIndex);this.activeIndex=Number.isFinite(e)&&e>=0?Math.floor(e):0;this.variant=["soft","underline","plain","accordion","side"].includes(String(this.variant??"").trim().toLowerCase())?String(this.variant).trim().toLowerCase():"default";const t=String(this.mode??"").trim().toLowerCase();this.mode=t==="timeline"?"timeline":"stepper";this.activeStepExpression=String(this.activeStepExpression??"").trim();this.activeStepDataPath=String(this.activeStepDataPath??"").trim();this.allowManualNavigation=this.allowManualNavigation!==false;this.showNumbers=Boolean(this.showNumbers);this.showConnector=Boolean(this.showConnector);this.showContent=this.showContent!==false;this.itemSourceMode=this.normalizeItemSourceMode(this.itemSourceMode);this.stepsDataPath=String(this.stepsDataPath??"").trim();this.stepLabelKey=String(this.stepLabelKey??"").trim();this.stepValueKey=String(this.stepValueKey??"").trim();this.stepDescriptionKey=String(this.stepDescriptionKey??"").trim();this.stepTemplateName=this.normalizeOptionalText(this.stepTemplateName);this.stepTemplate=this.normalizeOptionalText(this.stepTemplate);this.dataSourceLoaded=!this.hasActiveItemsDataSource();this.onDataSourceChanged.add(r=>{if(!this.shouldConsumeItemsDataSourceEvent(r)){this.dataSourceLoaded=!this.hasActiveItemsDataSource();this.afterDataSourceLoad.fire();return}this.setItemsFromSource(r.result);this.dataSourceLoaded=true;this.afterDataSourceLoad.fire()})}setItemsFromSource(i){this.items=this.normalizeSourceItems(this.resolveItemsFromSource(i))}normalizeItems(i){if(!Array.isArray(i))return[];return i.map((e,t)=>({id:String(e?.id??"").trim()||`step${t+1}`,label:String(e?.label??"").trim()||`Step ${t+1}`,value:String(e?.value??"").trim(),visibleIf:String(e?.visibleIf??"").trim(),disabledIf:String(e?.disabledIf??"").trim(),activeIf:String(e?.activeIf??"").trim(),completedIf:String(e?.completedIf??"").trim()}))}normalizeSourceItems(i){if(!Array.isArray(i))return[];return i.map((e,t)=>this.normalizeSourceItem(e,t))}normalizeSourceItem(i,e){if(!i||typeof i!=="object"||Array.isArray(i)){const m=String(i??"").trim();return{id:`step${e+1}`,label:m||`Step ${e+1}`,value:""}}const t=i;const r=String(this.stepLabelKey??"").trim()||String(this.dataSource?.optionLabel??"label").trim()||"label";const a=String(this.stepValueKey??"").trim()||String(this.dataSource?.optionValue??"value").trim()||"value";const o=String(this.stepDescriptionKey??"").trim();const n=this.resolveMappedValue(t,a);const s=this.firstText(t["id"],n,t["code"],`step${e+1}`);const l=this.firstText(this.resolveMappedValue(t,r),t["label"],t["title"],t["name"],`Step ${e+1}`);const h=this.firstText(this.resolveMappedValue(t,o),t["description"],t["content"],t["text"],t["value"],"");return{...t,id:s,label:l,value:h,visibleIf:String(t["visibleIf"]??"").trim()||void 0,disabledIf:String(t["disabledIf"]??"").trim()||void 0,activeIf:String(t["activeIf"]??"").trim()||void 0,completedIf:String(t["completedIf"]??"").trim()||void 0}}resolveItemsFromSource(i){if(Array.isArray(i))return i;const e=String(this.stepsDataPath??"").trim();if(e){const t=this.readPath(i,e);if(Array.isArray(t))return t}if(!i||typeof i!=="object")return[];for(const t of["steps","items","data.steps","data.items","data.rows","data.records","data.results","records","rows","results","result","data"]){const r=this.readPath(i,t);if(Array.isArray(r))return r}return[]}hasActiveItemsDataSource(){return this.normalizeItemSourceMode(this.itemSourceMode)==="dataSource"&&String(this.dataSource?.name??"").trim().length>0}shouldConsumeItemsDataSourceEvent(i){if(!this.hasActiveItemsDataSource())return false;const e=String(this.dataSource?.name??"").trim();const t=String(i?.dataSource?.name??"").trim();return Boolean(e&&t&&e===t)}normalizeItemSourceMode(i){return String(i??"").trim().toLowerCase()==="datasource"?"dataSource":"manual"}normalizeOptionalText(i){return String(i??"").trim()||void 0}resolveMappedValue(i,e){const t=String(e??"").trim();if(!t)return;return this.readPath(i,t)}readPath(i,e){const t=String(e??"").trim().split(".").filter(a=>a.length>0);if(t.length===0)return i;let r=i;for(const a of t){if(!r||typeof r!=="object"||Array.isArray(r))return;r=r[a]}return r}firstText(...i){for(const e of i){const t=String(e??"").trim();if(t)return t}return""}};u([c()],O.prototype,"dataSourceLoaded",void 0);u([c()],O.prototype,"onDataSourceChanged",void 0);u([c()],O.prototype,"afterDataSourceLoad",void 0);u([c()],O.prototype,"setItemsFromSource",null);u([c()],O.prototype,"normalizeItems",null);u([c()],O.prototype,"normalizeSourceItems",null);u([c()],O.prototype,"normalizeSourceItem",null);u([c()],O.prototype,"resolveItemsFromSource",null);u([c()],O.prototype,"hasActiveItemsDataSource",null);u([c()],O.prototype,"shouldConsumeItemsDataSourceEvent",null);u([c()],O.prototype,"normalizeItemSourceMode",null);u([c()],O.prototype,"normalizeOptionalText",null);u([c()],O.prototype,"resolveMappedValue",null);u([c()],O.prototype,"readPath",null);u([c()],O.prototype,"firstText",null);var X=class extends f{chartType="bar";title="Chart";chartDataPath="";itemsPath="";labelKey="label";valueKey="value";showLegend=true;legendLayout="vertical";mergeDuplicateLabels=true;chartHeight="220px";points=[{label:"A",value:30},{label:"B",value:60},{label:"C",value:40}];dataSourceLoaded=false;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i){super();if(i)Object.assign(this,i);if(!Array.isArray(this.points))this.points=[];this.migrateLegacyItemsPath();this.onDataSourceChanged.add(e=>{this.setPointsFromSource(e.result);this.dataSourceLoaded=true;this.afterDataSourceLoad.fire()})}migrateLegacyItemsPath(){const i=String(this.itemsPath??"").trim();if(!i)return;const e=String(this.chartDataPath??"").trim();this.chartDataPath=e?`${e}.${i}`:i;this.itemsPath=""}setPointsFromSource(i){this.migrateLegacyItemsPath();let e=i;const t=String(this.chartDataPath??"").trim();if(t)e=x(i,t);const r=this.normalizeSourceArray(e);const a=String(this.labelKey??"label").trim()||"label";const o=String(this.valueKey??"value").trim()||"value";this.points=r.map((n,s)=>this.mapSourceEntryToPoint(n,s,a,o)).filter(n=>n!==null);this.value=[...this.points]}normalizeSourceArray(i){if(Array.isArray(i))return i;if(!i||typeof i!=="object")return[];const e=i;return Object.keys(e).map(t=>({label:t,value:e[t]}))}mapSourceEntryToPoint(i,e,t,r){if(i&&typeof i==="object"){const o=i;const n=o[t]??o["label"]??o["name"]??`Item ${e+1}`;const s=o[r]??o["value"]??o["count"]??0;const l=Number(s);return{label:String(n??`Item ${e+1}`).trim()||`Item ${e+1}`,value:Number.isFinite(l)?l:0}}const a=Number(i);if(!Number.isFinite(a)&&i===null)return null;return{label:`Item ${e+1}`,value:Number.isFinite(a)?a:0}}};u([c()],X.prototype,"dataSourceLoaded",void 0);u([c()],X.prototype,"onDataSourceChanged",void 0);u([c()],X.prototype,"afterDataSourceLoad",void 0);u([c()],X.prototype,"migrateLegacyItemsPath",null);u([c()],X.prototype,"setPointsFromSource",null);var be=class br extends f{multiple=false;accept="";maxFiles=5;maxFileSizeMb=0;showPreview=true;displayMode="modern";dropzoneText="Drop files here or click to upload";storageMode="base64";uploadDataSourceName="";downloadDataSourceName="";deleteDataSourceName="";fileKeyField="key";fileNameField="name";fileTypeField="contentType";fileSizeField="size";uploadFormFieldName="file";dataService;constructor(e,t){super();if(e)Object.assign(this,e);this.dataService=t;this.multiple=Boolean(this.multiple);this.showPreview=Boolean(this.showPreview);const r=String(this.displayMode??"modern").trim().toLowerCase();this.displayMode=r==="compact"||r==="grid"?r:"modern";const a=Number(this.maxFiles);this.maxFiles=Number.isFinite(a)&&a>0?Math.floor(a):5;const o=Number(this.maxFileSizeMb);this.maxFileSizeMb=Number.isFinite(o)&&o>0?o:0;this.uploadDataSourceName=String(this.uploadDataSourceName??"").trim();this.downloadDataSourceName=String(this.downloadDataSourceName??"").trim();this.deleteDataSourceName=String(this.deleteDataSourceName??"").trim();this.storageMode=br.resolveStorageMode(e?.storageMode,this.uploadDataSourceName);this.fileKeyField=this.normalizeFieldName(this.fileKeyField,"key");this.fileNameField=this.normalizeFieldName(this.fileNameField,"name");this.fileTypeField=this.normalizeFieldName(this.fileTypeField,"contentType");this.fileSizeField=this.normalizeFieldName(this.fileSizeField,"size");this.uploadFormFieldName=this.normalizeFieldName(this.uploadFormFieldName,"file")}static resolveStorageMode(e,t){const r=String(e??"").trim().toLowerCase();if(r==="server"||r==="base64")return r;return String(t??"").trim()?"server":"base64"}setFiles(e){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;const t=Array.isArray(e)?e:[];const r=t.map(o=>this.serializeFileMeta(o));const a=this.multiple?r:r[0]??null;if(!t.length){const o=this.value;this.value=this.multiple?[]:null;this.dataService?.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:o,trigger:"change"});return}this.dataService?.onValueChanging.fire({dataPath:this.dataPath,newValue:a,oldValue:this.value,sender:this,trigger:"change"});this.value=a}serializeFileMeta(e){const t=String(e?.name??"").trim();const r=String(e?.type??"").trim();const a=Number(e?.size??0);const o=Number.isFinite(a)&&a>=0?a:0;const n=Number(e?.lastModified??0);const s={name:t,size:o,type:r,lastModified:Number.isFinite(n)&&n>=0?n:0,[this.fileNameField]:t,[this.fileTypeField]:r,[this.fileSizeField]:o};const l=String(e?.base64??"").trim();if(l)s["base64"]=l;const h=String(e?.fileKey??"").trim();if(h)s["fileKey"]=h;return s}normalizeFieldName(e,t){return String(e??"").trim()||t}};u([c()],be.prototype,"dataService",void 0);u([c()],be.prototype,"setFiles",null);var er=class extends f{title="";src="";srcFile="";alt="Image";caption="";linkUrl="";openInNewTab=true;loading="lazy";aspectRatio="auto";objectPosition="center center";fit="cover";imageHeight="220px";radius="8px";borderless=false;shadow=false;backgroundColor="";captionAlign="left";showPreview=true;constructor(i){super();if(i)Object.assign(this,i)}};var tr=class extends f{provider="youtube";src="";srcFile="";title="Video";caption="";poster="";aspectRatio="16 / 9";frameHeight="360px";loading="lazy";allowFullscreen=true;autoplay=false;muted=false;loop=false;controls=true;playsInline=true;privacyMode=true;startAt="";endAt="";showRelated=false;borderless=false;radius="12px";shadow=false;backgroundColor="";allow="";referrerPolicy="strict-origin-when-cross-origin";constructor(i){super();if(i)Object.assign(this,i)}};var rr=class extends f{src="";title="Embedded content";frameHeight="360px";loading="lazy";referrerPolicy="";sandbox="";allow="";allowFullscreen=false;borderless=false;constructor(i){super();if(i)Object.assign(this,i)}};var ar=class extends f{outletName;activateEvents=[];deactivateEvents=[];attachEvents=[];detachEvents=[];constructor(i){super();if(i)Object.assign(this,i);this.outletName=String(this.outletName??"").trim();for(const e of["activateEvents","deactivateEvents","attachEvents","detachEvents"])if(!Array.isArray(this[e]))this[e]=[]}};var ir=class extends f{src="";nameText="User Name";size=48;shape="circle";backgroundColor="#dfe6ff";textColor="#1b2d6b";showBorder=false;showPreview=true;constructor(i){super();if(i)Object.assign(this,i);const e=Number(this.size);this.size=Number.isFinite(e)&&e>0?Math.floor(e):48;this.showBorder=Boolean(this.showBorder);this.showPreview=Boolean(this.showPreview)}};var or=class extends f{iconName="star";iconSize=24;iconColor="";filled=false;showPreview=true;previewSize=64;constructor(i){super();if(i)Object.assign(this,i);const e=Number(this.iconSize);const t=Number(this.previewSize);this.iconSize=Number.isFinite(e)&&e>0?Math.floor(e):24;this.previewSize=Number.isFinite(t)&&t>0?Math.floor(t):64;this.filled=Boolean(this.filled);this.showPreview=Boolean(this.showPreview)}};var nr=class extends f{orientation="horizontal";thickness="1px";styleType="solid";color="";spacing="8px";constructor(i){super();if(i)Object.assign(this,i)}};var sr=class extends f{axis="vertical";size="20px";constructor(i){super();if(i)Object.assign(this,i)}};var lr=class extends f{itemsSource="static";items=[{label:"Home",value:"/"},{label:"Section",value:"/section"},{label:"Page",value:"/section/page"}];separator="chevron_right";showHome=false;homeLabel="Home";homeUrl="/";maxItems=0;routeLabelDataKey="breadcrumb";routeUsePathFallback=true;routeIncludeCurrent=true;constructor(i){super();if(i)Object.assign(this,i);if(!Array.isArray(this.items))this.items=[];this.itemsSource=String(this.itemsSource??"static").trim().toLowerCase()==="route"?"route":"static";this.routeLabelDataKey=String(this.routeLabelDataKey??"breadcrumb").trim()||"breadcrumb";this.routeUsePathFallback=this.routeUsePathFallback!==false;this.routeIncludeCurrent=this.routeIncludeCurrent!==false}};var cr=class extends f{title="";subtitle="";icon="";align="left";level="h2";showDivider=false;constructor(i){super();if(i)Object.assign(this,i)}};var qe=class extends N{multiple=false;allowEmpty=false;showSelectedIcon=false;size="normal";variant="buttons";orientation="horizontal";tone="primary";color;textColor;constructor(i,e){super(i,e);if(i){this.multiple=i.multiple??this.multiple;this.allowEmpty=i.allowEmpty??this.allowEmpty;this.showSelectedIcon=i.showSelectedIcon??this.showSelectedIcon;this.size=i.size??this.size;this.variant=i.variant??this.variant;this.orientation=i.orientation??this.orientation;this.tone=i.tone??this.tone;this.color=i.color??this.color;this.textColor=i.textColor??this.textColor}this.showInline=true;this.multiple=this.normalizeBooleanFlag(this.multiple);this.allowEmpty=this.normalizeBooleanFlag(this.allowEmpty);this.showSelectedIcon=this.normalizeBooleanFlag(this.showSelectedIcon);const t=String(this.size??"normal").trim().toLowerCase();this.size=t==="small"||t==="large"?t:"normal";const r=String(this.variant??"buttons").trim().toLowerCase();this.variant=r==="segmented"?"segmented":"buttons";const a=String(this.orientation??"horizontal").trim().toLowerCase();this.orientation=a==="vertical"?"vertical":"horizontal";const o=String(this.tone??"primary").trim().toLowerCase();this.tone=o==="neutral"||o==="success"||o==="info"||o==="warning"||o==="risk"||o==="danger"?o==="danger"?"risk":o:"primary";this.color=String(this.color??"").trim();this.textColor=String(this.textColor??"").trim();if(this.multiple){this.value=Array.isArray(this.value)?[...this.value]:[];return}if(Array.isArray(this.value))this.value=this.value.length>0?this.value[0]:null}setValue(i,e="change"){if(this.disabled||this.readOnly||Boolean(this["__pfInteractionLocked"]))return;if(!this.multiple){const r=Array.isArray(i)?i.length>0?i[0]:null:i;super.setValue(r,e);return}const t=Array.isArray(i)?[...i]:[];if(t.length===0){const r=this.value;this.value=[];this.dataService.onClearValue.fire({dataPath:this.dataPath,sender:this,oldValue:r,trigger:e});return}this.dataService.onValueChanging.fire({dataPath:this.dataPath,newValue:t,oldValue:this.value,sender:this,trigger:e});this.value=t}normalizeBooleanFlag(i){if(typeof i==="string"){const e=i.trim().toLowerCase();if(!e)return false;return e!=="false"&&e!=="0"&&e!=="off"&&e!=="no"}return Boolean(i)}};u([c()],qe.prototype,"setValue",null);var _=class extends f{min=null;max=null;step=1;dataService;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e;const t=Number(this.step??1);this.step=Number.isFinite(t)&&t>0?t:1;if(this.value===void 0||this.value===null)this.value=0;this.value=this.clamp(Number(this.value??0))}get numericValue(){const i=Number(this.value??0);return Number.isFinite(i)?i:0}canDecrement(){if(this.min!==null&&this.min!==void 0)return this.numericValue>Number(this.min);return true}canIncrement(){if(this.max!==null&&this.max!==void 0)return this.numericValue<Number(this.max);return true}increment(i="change"){if(this.isLocked()||!this.canIncrement())return;this.applyValue(this.clamp(this.numericValue+this.step),i)}decrement(i="change"){if(this.isLocked()||!this.canDecrement())return;this.applyValue(this.clamp(this.numericValue-this.step),i)}applyValue(i,e){this.dataService?.onValueChanging.fire({dataPath:this.dataPath,newValue:i,oldValue:this.value,sender:this,trigger:e});this.value=i}clamp(i){let e=Number.isFinite(i)?i:0;if(this.min!==null&&this.min!==void 0)e=Math.max(e,Number(this.min));if(this.max!==null&&this.max!==void 0)e=Math.min(e,Number(this.max));return e}isLocked(){return Boolean(this.disabled)||Boolean(this.readOnly)||Boolean(this["__pfInteractionLocked"])}};u([c()],_.prototype,"dataService",void 0);u([c()],_.prototype,"numericValue",null);u([c()],_.prototype,"canDecrement",null);u([c()],_.prototype,"canIncrement",null);u([c()],_.prototype,"increment",null);u([c()],_.prototype,"decrement",null);u([c()],_.prototype,"applyValue",null);u([c()],_.prototype,"clamp",null);u([c()],_.prototype,"isLocked",null);var ur=class extends f{format="locale";minuteStep=1;min=null;max=null;placeholder="";constructor(i){super();if(i)Object.assign(this,i);const e=String(this.format??"").trim().toLowerCase();this.format=e==="12h"||e==="24h"?e:"locale";const t=Number(this.minuteStep??1);this.minuteStep=Number.isFinite(t)&&t>0?Math.floor(t):1}};var hr=class extends f{strokeColor="#000000";strokeWidth=2;backgroundColor="#ffffff";exportFormat="png";canvasHeight=200;clearLabel="Clear";constructor(i){super();if(i)Object.assign(this,i);const e=Number(this.strokeWidth??2);this.strokeWidth=Number.isFinite(e)&&e>0?e:2;const t=Number(this.canvasHeight??200);this.canvasHeight=Number.isFinite(t)&&t>0?t:200;const r=String(this.exportFormat??"").trim().toLowerCase();this.exportFormat=["png","jpeg","svg"].includes(r)?r:"png"}};var U=class extends f{selectionMode="single";maxHeight=240;placeholder="No items";options=[{label:"Option 1",value:"0"},{label:"Option 2",value:"1"},{label:"Option 3",value:"2"}];value=null;dataSourceLoaded=false;dataService;onDataSourceChanged=new g;afterDataSourceLoad=new g;constructor(i,e){super();if(i)Object.assign(this,i);this.dataService=e;this.dataSourceLoaded=!this.hasActiveOptionDataSource();this.onDataSourceChanged.add(a=>{if(!this.shouldConsumeOptionDataSourceEvent(a)){this.dataSourceLoaded=!this.hasActiveOptionDataSource();this.afterDataSourceLoad.fire();return}if(this.dataSource?.useFor==="option")this.setOptions(a.result);this.dataSourceLoaded=true;this.afterDataSourceLoad.fire()});const t=String(this.selectionMode??"").trim().toLowerCase();this.selectionMode=t==="multiple"?"multiple":"single";const r=Number(this.maxHeight??240);this.maxHeight=Number.isFinite(r)&&r>0?r:240;if(!Array.isArray(this.options))this.options=[]}setOptions(i){const e=this.resolveOptionItems(i);if(!Array.isArray(e))return;const t=this.dataSource?.optionLabel??"label";const r=this.dataSource?.optionValue??"value";this.options=e.map(a=>({label:a[t],value:a[r],visibleIf:String(a["visibleIf"]??"").trim()||void 0}))}hasActiveOptionDataSource(){return String(this.dataSource?.name??"").trim().length>0&&String(this.dataSource?.useFor??"").trim()==="option"}shouldConsumeOptionDataSourceEvent(i){if(!this.hasActiveOptionDataSource())return false;const e=String(this.dataSource?.name??"").trim();const t=String(i?.dataSource?.name??"").trim();if(!e||!t||e!==t)return false;return i?.result!==void 0&&i?.result!==null}resolveOptionItems(i){if(Array.isArray(i))return i;if(!i||typeof i!=="object")return[];for(const e of["items","data.items","data.rows","data.records","data.results","records","rows","results","result","data"]){const t=this.readPath(i,e);if(Array.isArray(t))return t}return[]}readPath(i,e){const t=String(e??"").trim().split(".").filter(a=>a.length>0);if(t.length===0)return void 0;let r=i;for(const a of t){if(!r||typeof r!=="object"||Array.isArray(r))return void 0;r=r[a]}return r}};u([c()],U.prototype,"dataSourceLoaded",void 0);u([c()],U.prototype,"dataService",void 0);u([c()],U.prototype,"onDataSourceChanged",void 0);u([c()],U.prototype,"afterDataSourceLoad",void 0);u([c()],U.prototype,"setOptions",null);u([c()],U.prototype,"hasActiveOptionDataSource",null);u([c()],U.prototype,"shouldConsumeOptionDataSourceEvent",null);u([c()],U.prototype,"resolveOptionItems",null);u([c()],U.prototype,"readPath",null);const Zr="*";var Ke=class ct{defaultsByType=new Map;revision=0;set(e,t=true){const r=this.normalizeDefaults(e);const a=new Set;if(!t){this.defaultsByType.forEach((o,n)=>{if(!r[n])a.add(n)});this.defaultsByType.clear()}Object.entries(r).forEach(([o,n])=>{if(this.applyTypePatch(o,n,t))a.add(o)});if(a.size>0)this.revision+=1;return Array.from(a)}setForType(e,t,r=true){const a=this.normalizeType(e);if(!a||!Z(t))return false;const o=this.applyTypePatch(a,P(t),r);if(o)this.revision+=1;return o}getAll(){const e={};this.defaultsByType.forEach((t,r)=>{e[r]=P(t)});return e}getForType(e){if(this.defaultsByType.size===0)return null;const t=this.normalizeType(e);const r=this.defaultsByType.get("*");const a=t?this.defaultsByType.get(t):void 0;if(!r&&!a)return null;const o={...r??{},...a??{}};return Object.keys(o).length>0?P(o):null}clear(e){if(e===void 0||e===null||String(e).trim().length===0){const r=Array.from(this.defaultsByType.keys());this.defaultsByType.clear();if(r.length>0)this.revision+=1;return r}const t=this.normalizeType(e);if(!t||!this.defaultsByType.has(t))return[];this.defaultsByType.delete(t);this.revision+=1;return[t]}hasAny(){return this.defaultsByType.size>0}getRevision(){return this.revision}applyTypePatch(e,t,r){const a=this.defaultsByType.get(e);const o=r&&a?{...a,...t}:{...t};if(Object.keys(o).length===0){if(!a)return false;this.defaultsByType.delete(e);return true}if(a&&j(a,o))return false;this.defaultsByType.set(e,o);return true}normalizeDefaults(e){if(!Z(e))return{};const t={};Object.entries(e).forEach(([r,a])=>{const o=this.normalizeType(r);if(!o||!Z(a))return;t[o]=P(a)});return t}normalizeType(e){return String(e??"").trim()}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ct,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ct,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:Ke,decorators:[{type:k,args:[{providedIn:"root"}]}]});var Ye=class ut{dataService=D(q);elementDefaultsService=D(Ke);builtInDefaultsCache=new Map;modelMap={text:$,phoneInput:ge,progressBar:J,number:Y,textarea:ye,richText:ce,richTextViewer:ce,customHtml:$e,htmlSnippet:$e,page:Jr,dynamicTable:se,select:E,autocomplete:jt,multiSelect:We,slider:_t,panel:Ut,objectPanel:Ht,splitter:Wt,emptyBlock:$t,dynamicPanel:te,checkbox:F,singleCheckbox:le,toggleButton:H,toggleSwitch:H,radio:N,selectButton:qe,numberStepper:_,timePicker:ur,signaturePad:hr,listBox:U,tabs:M,dialog:Yt,listGrid:ie,button:qt,table:Kt,datepicker:R,dateRange:ae,messageCard:Gt,toast:Jt,badge:Xt,statsCard:Qt,accordion:Zt,progressFlow:O,tabsPro:M,chart:X,fileUpload:be,image:er,video:tr,iframe:rr,routerOutlet:ar,avatar:ir,icon:or,divider:nr,spacer:sr,breadcrumbs:lr,pageTitle:cr};registerModel(e,t){const r=String(e??"").trim();if(!r||!t)return;this.modelMap[r]=t}registerModels(e){if(!e||typeof e!=="object")return;Object.keys(e).forEach(t=>{this.registerModel(t,e[t])})}createModel(e,t,r){const a=String(e??"").trim();const o=this.detachFromSourceModel(t);const n=r?.skipTypeDefaults?o:this.applyTypeDefaults(a,o);const s=this.modelMap[a];if(!s){console.warn(`Unknown form element type: ${a}. Using TextInputModel fallback.`);return new $(n)}return new s(n,this.dataService)}detachFromSourceModel(e){if(!e||typeof e!=="object"||Array.isArray(e))return e;const t=e;let r=null;const a=(o,n)=>{r??={...t};if(n===void 0){delete r[o];return}r[o]=n};Object.keys(t).forEach(o=>{const n=t[o];if(this.isLiveEmitter(n)){a(o,void 0);return}if(o==="dataSource"&&n&&typeof n==="object"){a(o,this.copyElementDataSource(n));return}if(o==="options"&&Array.isArray(n))a(o,P(n))});return r??t}isLiveEmitter(e){return e instanceof g||e instanceof Sr}copyElementDataSource(e){const t={...e};if(Array.isArray(e.params))t.params=e.params.map(r=>r&&typeof r==="object"?{...r}:r);if(Array.isArray(e.refreshPaths))t.refreshPaths=[...e.refreshPaths];return t}getBuiltInDefaults(e){const t=String(e??"").trim();if(!t)return{};const r=this.builtInDefaultsCache.get(t);if(r)return r;let a={};try{const o=this.createModel(t,{},{skipTypeDefaults:true});const n=new Set(Bt(o));Object.keys(o).forEach(s=>{const l=o[s];if(n.has(s)||typeof l==="function"||l===void 0)return;a[s]=l})}catch{a={}}this.builtInDefaultsCache.set(t,a);return a}hasModel(e){return Boolean(this.modelMap[String(e??"").trim()])}getRegisteredTypes(){return Object.keys(this.modelMap)}applyTypeDefaults(e,t){const r=this.elementDefaultsService.getForType(e);if(!r)return t;const a=t&&typeof t==="object"?{...t}:{};Object.entries(r).forEach(([o,n])=>{if(a[o]===void 0)a[o]=n});return a}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ut,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ut,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:Ye,decorators:[{type:k,args:[{providedIn:"root"}]}]});const dr=new Set([b.TEXT,b.TEXTAREA,b.NUMBER,b.NUMBER_STEPPER,b.PHONE_INPUT,b.RICH_TEXT,b.SELECT,b.MULTI_SELECT,b.AUTOCOMPLETE,b.SELECT_BUTTON,b.RADIO,b.CHECKBOX,b.SINGLE_CHECKBOX,b.TOGGLE_SWITCH,b.TOGGLE_BUTTON,b.SLIDER,b.LIST_BOX,b.DATEPICKER,b.DATE_RANGE,b.TIME_PICKER,b.SIGNATURE_PAD,b.FILE_UPLOAD,b.DYNAMIC_TABLE,b.DYNAMIC_PANEL,b.OBJECT_PANEL]);const ea="excludeFromDataJson";function ta(i){return dr.has(String(i??"").trim())}var ue=class ht{skippedRuntimeKeys=new Set(["dataService","modelService","onElementChanging","onElementChanged","onOptionChanged","onDataSourceChanged","afterDataSourceLoad","parentElement","structureService","_structure","_previewStructure","onStructureChanged"]);onElementChanging=new g;onElementChanged=new g;modelService=D(Ye);dataService=D(q);_structure=B(null,...ngDevMode?[{debugName:"_structure"}]:[]);_previewStructure=B(null,...ngDevMode?[{debugName:"_previewStructure"}]:[]);flatModelMap={};setPreviewStructure(e){this._previewStructure.set(e)}setStructure(e){this._structure.set(e)}checkNameExist(e){const t=this._structure();if(t.elements[e])return true;for(const r of t.pages)if(r.name===e)return true;return false}getNextFreeColumnName(e){const t=Object.keys(e).map(a=>{const o=a.match(/^column(\d+)$/);return o?parseInt(o[1],10):null}).filter(a=>a!==null);if(t.length===0)return"column1";const r=Math.max(...t);for(let a=1;a<=r+1;a++)if(!t.includes(a))return`column${a}`;return`column${r+1}`}updateName(e,t){const r=String(e??"").trim();const a=String(t??"").trim();if(!r||!a||r===a)return;const o=this._structure();if(!o)return;this.renameTopLevelElement(o,r,a);this.renamePageName(o,r,a);o.pages.forEach(n=>{this.renameElementRefsInPages(n.rows,r,a)});this.renameNestedElementMapKeys(o,r,a);this.replaceNameReferencesDeep(o,r,a,new WeakSet);this.renameFlatModelMapPaths(r,a);this.dataService.renameObjectKeyDeep(r,a);this._structure.set(o)}checkNameExistIn(e,t){const r=e&&W(e.type)?e.template:null;if(r&&typeof r==="object")return Object.prototype.hasOwnProperty.call(r,t);return this.checkNameExist(t)}updateNameInTemplate(e,t,r){const a=String(t??"").trim();const o=String(r??"").trim();const n=e?.template;if(!a||!o||a===o||!n||!n[a]||n[o])return;const s=this._structure();if(!s)return;const l=n[a];const h={};Object.keys(n).forEach(y=>{h[y===a?o:y]=n[y]});Object.keys(n).forEach(y=>delete n[y]);Object.assign(n,h);l.name=o;const m=this.findOwnerColumn(s,e);if(m){this.renameRefsInScope(m.rows??[],n,a,o);Object.values(m.tabRows??{}).forEach(y=>this.renameRefsInScope(y,n,a,o))}this.replaceNameReferencesDeep(n,a,o,new WeakSet);const p=String(e.dataPath??"").trim();if(p&&this.flatModelMap){const y=new RegExp(`^(${this.escapeRegExp(p)}(?:\\[\\d+\\])?\\.)${this.escapeRegExp(a)}(?=$|[.[])`);const v={};Object.keys(this.flatModelMap).forEach(S=>{const I=this.flatModelMap[S];const z=S.replace(y,`$1${o}`);if(z!==S&&I&&typeof I.dataPath==="string"){I.dataPath=I.dataPath.replace(y,`$1${o}`);if(String(I.name??"").trim()===a)I.name=o}v[z]=I});this.flatModelMap=v;const A=this.dataService.getValue(p);const w=S=>{if(!S||typeof S!=="object"||Array.isArray(S)||!(a in S))return S;const{[a]:I,...z}=S;return{...z,[o]:I}};if(ee(e.type))this.dataService.setValue(p,w(A));else if(Array.isArray(A))this.dataService.setValue(p,A.map(w))}this._structure.set(s)}findOwnerColumn(e,t){const r=(a,o)=>{for(const n of a??[])for(const s of n?.columns??[]){const l=o?.[s.elementRef];if(l===t)return s;const h=l&&W(l.type)&&l.template?l.template:o;const m=r(s.rows,h)??Object.values(s.tabRows??{}).reduce((p,y)=>p??r(y,h),null);if(m)return m}return null};for(const a of e.pages??[]){const o=r(a.rows,e.elements);if(o)return o}return null}renameRefsInScope(e,t,r,a){(e??[]).forEach(o=>{(o?.columns??[]).forEach(n=>{if(n.elementRef===r)n.elementRef=a;const s=t[n.elementRef];if(s&&W(s.type))return;this.renameRefsInScope(n.rows??[],t,r,a);Object.values(n.tabRows??{}).forEach(l=>this.renameRefsInScope(l,t,r,a))})})}getStructure(){return this._structure()}getPreviewStructure(){return this._previewStructure()}buildSubmitPayload(){const e=this.dataService.getData();if(!e||typeof e!=="object")return{};const t=this.getPreviewStructure()??this.getStructure();if(!t?.elements)return{...e};const r=new Set;Object.values(t.elements).forEach(o=>{if(!o||typeof o!=="object")return;const n=String(o.name??"").trim();const s=String(o.type??"").trim().toLowerCase();if(!n)return;if(s==="page"||s==="panel"||s==="header"||s==="emptyblock")return;if(o["excludeFromDataJson"])return;r.add(n)});this.collectProjectedVariableKeys(t).forEach(o=>r.add(o));const a={};Object.keys(e).forEach(o=>{if(!r.has(o))return;a[o]=e[o]});return a}collectProjectedVariableKeys(e){const t=new Set;const r=e?.settings?.variables;if(!Array.isArray(r))return t;r.forEach(a=>{const o=a;if(!o||!o["includeInDataJson"])return;const n=String(o["targetPath"]??"").trim();const s=String(o["name"]??"").trim();const l=n||s;if(!l)return;const h=l.split(/[.[]/)[0]?.trim();if(h)t.add(h)});return t}getElement(e){const t=String(e??"").trim();if(!t)return null;const r=this._structure();if(r?.elements?.[t])return r.elements[t];return this._previewStructure()?.elements?.[t]??null}getPreviewElement(e){const t=String(e??"").trim();if(!t)return null;const r=this._previewStructure();if(r?.elements?.[t])return r.elements[t];return this._structure()?.elements?.[t]??null}getElementColumn(e){const t=e.split(".");this._structure().elements[t[0]];return null}getByPath(e){return e.split(".").reduce((t,r)=>{if(t===void 0||t===null)return void 0;const a=r.match(/^([^\[]+)\[(\d+)\]$/);if(a){const o=a[1];const n=parseInt(a[2],10);return t[o]?.[n]}return t[r]},this._structure().elements)}getObjectValue(e,t){try{return e[t]}catch(r){console.error("[Structure] Object does not have key: ",t)}finally{return e[t]}}removeFromElement(e){const t=String(e??"").trim();const r=this.structure;if(!r?.elements||!t)return;const a=new Set;if(r.elements[t]){this.collectNestedElementNames(r.elements[t],a);this.collectLayoutDescendantElementNames(t,a);this.expandRemovedNamesWithNestedElements(a,r.elements);a.add(t);delete r.elements[t]}Object.values(r.elements).forEach(o=>{this.removeNestedElementByName(o,t,a)});if(a.size===0)return;this.expandRemovedNamesWithNestedElements(a,r.elements);a.forEach(o=>{this.removeFromPage(o)});a.forEach(o=>{if(r.elements[o])delete r.elements[o];this.removeElementRuntimeData(o)});this.removeFromFlatModelMap(a)}removeFromPage(e){const t=String(e??"").trim();if(!t)return;const r=o=>{if(!Array.isArray(o)||o.length===0)return false;let n=false;for(let s=o.length-1;s>=0;s--){const l=o[s];const h=Array.isArray(l?.columns)?l.columns:[];for(let m=h.length-1;m>=0;m-=1){const p=h[m];if(String(p?.elementRef??"").trim()===t){h.splice(m,1);n=true;continue}if(p.rows&&r(p.rows))n=true;const y=p.tabRows;if(y&&typeof y==="object")Object.values(y).forEach(v=>{if(Array.isArray(v)&&r(v))n=true})}if(h.length===0){o.splice(s,1);n=true}}return n};for(const o of this.structure.pages)r(o.rows);const a=this.structure?.elements;if(!a||typeof a!=="object")return;Object.values(a).forEach(o=>{this.removeElementRefFromHeaderCenter(o,t)})}getNextElementName(e){const t=zt(this.structure?.elements);(this.structure?.pages??[]).forEach(r=>t.add(String(r?.name??"")));return _e(String(e??"").trim()||"element",t)}onStructureChanged=new g;set structure(e){this._structure.set(e);this.onStructureChanged.fire(e)}get structure(){return this._structure()}get previewStructure(){return this._previewStructure()}refreshElementReference(e){const t=String(e??"").trim();if(!t)return null;const r=this.getStructure();if(!r?.elements)return null;return this.refreshElementReferenceInMap(r.elements,t)}refreshElementReferenceFor(e){if(!e||typeof e!=="object")return null;const t=this.getStructure();if(t?.elements){const r=this.refreshExactElementInMap(t.elements,e);if(r)return r}return this.refreshElementReference(String(e.name??""))}refreshExactElementInMap(e,t){const r=String(t.schemaPath??"").trim();for(const a of Object.keys(e??{})){const o=e[a];if(!o||typeof o!=="object")continue;const n=r!==""&&String(o.schemaPath??"").trim()===r;if(o===t||n){const l=this.cloneWithPrototype(o);e[a]=l;this.rebindFlatMapModelReferences(o,l);return l}const s=o.template;if(s&&typeof s==="object"){const l=this.refreshExactElementInMap(s,t);if(l)return l}}return null}refreshElementReferenceAcrossStructures(e){const t=String(e??"").trim();if(!t)return null;let r=null;const a=this.getPreviewStructure();if(a?.elements){r=this.refreshElementReferenceInMap(a.elements,t)??r;this._previewStructure.set(a)}const o=this.getStructure();if(o?.elements){r=this.refreshElementReferenceInMap(o.elements,t)??r;this._structure.set(o)}return r}collectNestedElementNames(e,t){if(!e||typeof e!=="object")return;const r=String(e.name??"").trim();if(r)t.add(r);this.collectHeaderCenterRefs(e,t);if(e.template&&typeof e.template==="object")Object.values(e.template).forEach(a=>{this.collectNestedElementNames(a,t)});if(Array.isArray(e.columns))e.columns.forEach(a=>{this.collectNestedElementNames(a,t)})}collectLayoutDescendantElementNames(e,t){const r=String(e??"").trim();if(!r)return;const a=new Map;(this.structure?.pages??[]).forEach(o=>{this.collectLayoutDescendantsFromRows(o?.rows??[],"",new Set,a)});a.get(r)?.forEach(o=>t.add(o))}layoutDescendantIndex=null;getLayoutDescendantElementNames(e){const t=String(e??"").trim();if(!t)return new Set;if(!this.layoutDescendantIndex){this.layoutDescendantIndex=this.buildLayoutDescendantIndex();setTimeout(()=>{this.layoutDescendantIndex=null},0)}return new Set(this.layoutDescendantIndex.get(t)??[])}buildLayoutDescendantIndex(){const e=new Map;(this._structure()?.pages??this._previewStructure()?.pages??[]).forEach(t=>{this.collectLayoutDescendantsFromRows(t?.rows??[],"",new Set,e)});return e}collectLayoutDescendantsFromRows(e,t,r,a){if(!Array.isArray(e)||e.length===0)return;e.forEach(o=>{(Array.isArray(o?.columns)?o.columns:[]).forEach(n=>{const s=String(n?.elementRef??"").trim();if(s)r.forEach(h=>{let m=a.get(h);if(!m){m=new Set;a.set(h,m)}m.add(s)});const l=s?new Set([...r,s]):r;this.collectLayoutDescendantsFromRows(n?.rows??[],"",l,a);this.collectLayoutDescendantsFromTabRows(n?.tabRows,"",l,a)})})}collectLayoutDescendantsFromTabRows(e,t,r,a){if(!e||typeof e!=="object")return;Object.keys(e).forEach(o=>{this.collectLayoutDescendantsFromRows(e[o]??[],"",r,a)})}collectElementRefsFromRows(e,t){if(!Array.isArray(e)||e.length===0)return;e.forEach(r=>{(Array.isArray(r?.columns)?r.columns:[]).forEach(a=>{const o=String(a?.elementRef??"").trim();if(o)t.add(o);this.collectElementRefsFromRows(a?.rows??[],t);this.collectElementRefsFromTabRows(a?.tabRows,t)})})}collectElementRefsFromTabRows(e,t){if(!e||typeof e!=="object")return;Object.keys(e).forEach(r=>{this.collectElementRefsFromRows(e[r]??[],t)})}expandRemovedNamesWithNestedElements(e,t){if(!e.size||!t||typeof t!=="object")return;const r=Array.from(e);while(r.length>0){const a=String(r.shift()??"").trim();if(!a)continue;const o=t[a];if(!o)continue;const n=new Set;this.collectNestedElementNames(o,n);n.forEach(s=>{if(!s||e.has(s))return;e.add(s);r.push(s)})}}refreshElementReferenceInMap(e,t){if(!e||typeof e!=="object")return null;for(const r of Object.keys(e)){const a=e[r];if(!a||typeof a!=="object")continue;if(String(a.name??"").trim()===t){const n=this.cloneWithPrototype(a);e[r]=n;this.rebindFlatMapModelReferences(a,n);return n}const o=a.template;if(o&&typeof o==="object"){const n=this.refreshElementReferenceInMap(o,t);if(n)return n}}return null}refreshRowElementReference(e){const t=String(e?.dataPath??"").trim();if(!t||!this.flatModelMap||this.flatModelMap[t]!==e)return null;const r=this.cloneWithPrototype(e);this.flatModelMap[t]=r;return r}cloneWithPrototype(e){return Object.assign(Object.create(Object.getPrototypeOf(e)),e)}rebindFlatMapModelReferences(e,t){if(!e||!t||!this.flatModelMap)return;Object.keys(this.flatModelMap).forEach(r=>{if(this.flatModelMap[r]===e)this.flatModelMap[r]=t})}removeNestedElementByName(e,t,r){if(!e||typeof e!=="object")return false;let a=false;if(e.template&&typeof e.template==="object")Object.keys(e.template).forEach(o=>{const n=e.template[o];const s=String(n?.name??"").trim();if(o===t||s===t){this.collectNestedElementNames(n,r);r.add(t);delete e.template[o];a=true;return}if(this.removeNestedElementByName(n,t,r))a=true});if(Array.isArray(e.columns)){const o=[];e.columns.forEach(n=>{if(String(n?.name??"").trim()===t){this.collectNestedElementNames(n,r);r.add(t);a=true;return}if(this.removeNestedElementByName(n,t,r))a=true;o.push(n)});e.columns=o}return a}collectHeaderCenterRefs(e,t){if(!e||typeof e!=="object")return;const r=e["headerCenterElements"];if(!Array.isArray(r))return;r.forEach(a=>{const o=String(a??"").trim();if(o)t.add(o)})}removeElementRefFromHeaderCenter(e,t){if(!e||typeof e!=="object")return false;const r=e;const a=r["headerCenterElements"];if(!Array.isArray(a)||a.length===0)return false;const o=a.map(n=>String(n??"").trim()).filter(n=>n&&n!==t);if(o.length===a.length)return false;r["headerCenterElements"]=o;return true}removeElementRuntimeData(e){const t=String(e??"").trim();if(!t)return;this.dataService.removeValue(t);this.dataService.clearValue(`__form.${t}`);this.dataService.clearValue(`__table.${t}`);this.dataService.clearValue(`__listGrid.${t}`);this.dataService.clearValue(`__tabs.${t}`);this.dataService.clearValue(`__progressFlow.${t}`);this.dataService.clearValue(`__dialog.${t}`);this.dataService.clearValue(`__table.${t}.request`);this.dataService.clearValue(`__listGrid.${t}.request`)}removeFromFlatModelMap(e){if(!e.size||!this.flatModelMap)return;const t=Array.from(e);Object.keys(this.flatModelMap).forEach(r=>{const a=this.flatModelMap[r];const o=String(a?.name??"").trim();const n=o&&e.has(o);const s=t.some(l=>r===l||r.endsWith(`.${l}`)||r.includes(`].${l}`));if(n||s)delete this.flatModelMap[r]});Object.values(this.flatModelMap).forEach(r=>{if(!Array.isArray(r?.dependsOn))return;r.dependsOn=r.dependsOn.filter(a=>!t.some(o=>a===o||a.endsWith(`.${o}`)))})}renameTopLevelElement(e,t,r){if(!e?.elements?.[t])return;e.elements[r]=e.elements[t];e.elements[r].name=r;delete e.elements[t]}renamePageName(e,t,r){e.pages.forEach(a=>{if(a.name===t)a.name=r})}renameElementRefsInPages(e,t,r){if(!Array.isArray(e)||e.length===0)return;e.forEach(a=>{(Array.isArray(a?.columns)?a.columns:[]).forEach(o=>{if(o.elementRef===t)o.elementRef=r;if(o.rows&&o.rows.length>0)this.renameElementRefsInPages(o.rows,t,r);const n=o.tabRows;if(n&&typeof n==="object")Object.values(n).forEach(s=>{if(Array.isArray(s)&&s.length>0)this.renameElementRefsInPages(s,t,r)})})})}renameNestedElementMapKeys(e,t,r,a=new WeakSet){if(!e||typeof e!=="object")return;if(a.has(e))return;a.add(e);if(Array.isArray(e)){e.forEach(n=>this.renameNestedElementMapKeys(n,t,r,a));return}const o=e;Object.keys(o).forEach(n=>{if(this.shouldSkipTraversalKey(n))return;const s=o[n];if(n===t&&this.isElementDefinition(s,t)&&!o[r]){o[r]=s;delete o[n]}});Object.values(o).forEach(n=>{this.renameNestedElementMapKeys(n,t,r,a)})}isElementDefinition(e,t){if(!e||typeof e!=="object")return false;const r=e;const a=String(r["name"]??"").trim();return typeof r["type"]==="string"&&a===t}replaceNameReferencesDeep(e,t,r,a){if(!e||typeof e!=="object")return;if(a.has(e))return;a.add(e);if(Array.isArray(e)){e.forEach(n=>this.replaceNameReferencesDeep(n,t,r,a));return}const o=e;Object.keys(o).forEach(n=>{if(this.shouldSkipTraversalKey(n))return;const s=o[n];if(typeof s==="function")return;if(typeof s==="string"){o[n]=this.replaceNameInString(s,t,r);return}this.replaceNameReferencesDeep(s,t,r,a)})}replaceNameInString(e,t,r){const a=String(e??"");if(!a||!a.includes(t))return a;if(a===t)return r;const o=this.escapeRegExp(t);const n=new RegExp(`(^|[.\\[{(\\s,:'"=+\\-/*%!<>|&])${o}(?=([.\\]}\\)\\s,:'"=+\\-/*%!<>|&]|$))`,"g");return a.replace(n,`$1${r}`)}renameFlatModelMapPaths(e,t){if(!this.flatModelMap)return;const r=this.flatModelMap;const a={};Object.keys(r).forEach(o=>{const n=r[o];this.renameModelRuntimeReferences(n,e,t);const s=this.replacePathSegments(o,e,t);a[s]=n});this.flatModelMap=a}renameModelRuntimeReferences(e,t,r){if(!e||typeof e!=="object")return;if(String(e.name??"").trim()===t)e.name=r;if(typeof e.dataPath==="string")e.dataPath=this.replacePathSegments(e.dataPath,t,r);if(typeof e.schemaPath==="string")e.schemaPath=this.replacePathSegments(e.schemaPath,t,r);if(typeof e.templateElementParentDataPath==="string")e.templateElementParentDataPath=this.replacePathSegments(e.templateElementParentDataPath,t,r);if(typeof e.parentName==="string"&&e.parentName===t)e.parentName=r;if(Array.isArray(e.dependsOn))e.dependsOn=e.dependsOn.map(a=>this.replacePathSegments(String(a??""),t,r))}replacePathSegments(e,t,r){const a=String(e??"").trim();if(!a||!a.includes(t))return a;if(a===t)return r;const o=this.escapeRegExp(t);const n=new RegExp(`(^|\\.|\\])${o}(?=(\\.|\\[|$))`,"g");return a.replace(n,`$1${r}`)}escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}shouldSkipTraversalKey(e){return this.skippedRuntimeKeys.has(e)}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ht,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ht,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ue,decorators:[{type:k,args:[{providedIn:"root"}]}]});var Ge=class dt{locale="";setLocale(e){const t=this.normalizeLocale(e);if(this.locale===t)return false;this.locale=t;return true}getLocale(){return this.locale}normalizeLocale(e){const t=String(e??"").trim().replace(/_/g,"-");if(!t)return"";const r=t.split("-").map(n=>n.trim()).filter(n=>n.length>0);if(r.length===0)return"";const[a,...o]=r;return[a.toLowerCase(),...o.map(n=>n.length===2?n.toUpperCase():n)].join("-")}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:dt,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:dt,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:Ge,decorators:[{type:k,args:[{providedIn:"root"}]}]});var Je=class pt{structureService=D(ue);applicationLocaleService=D(Ge);resolveLocale(e){const t=String(e??"").trim();if(t)return this.normalizeLocale(t);const r=this.structureService.getStructure?.()??this.structureService.getPreviewStructure?.();const a=String(r?.settings?.["locale"]??"").trim();if(a)return this.normalizeLocale(a);const o=String(this.applicationLocaleService.getLocale()??"").trim();if(o)return this.normalizeLocale(o);return this.defaultLocale()}defaultLocale(){const e=typeof navigator!=="undefined"?String(navigator.language??"").trim():"";return e?this.normalizeLocale(e):"en-US"}formatNumber(e,t){if(!Number.isFinite(e))return"";const r=this.resolveLocale(t?.locale);const a=this.normalizeFractionDigits(t?.minimumFractionDigits,0,20,0);const o=this.normalizeFractionDigits(t?.maximumFractionDigits,a,20,Math.max(a,6));return new Intl.NumberFormat(r,{useGrouping:t?.useGrouping??true,minimumFractionDigits:a,maximumFractionDigits:o}).format(e)}parseNumber(e,t){if(typeof e==="number")return Number.isFinite(e)?e:null;const r=String(e??"").trim();if(!r)return null;const a=this.resolveLocale(t);const o=this.getNumberSeparators(a);let n=r.replace(/\u00A0/g," ").replace(/\u202F/g," ").replace(/\u2009/g," ").trim();if(!n)return null;if(o.group)n=n.split(o.group).join("");n=n.replace(/\s+/g,"");if(o.decimal&&o.decimal!==".")n=n.replace(new RegExp(this.escapeRegExp(o.decimal),"g"),".");n=n.replace(/,/g,".");n=n.replace(/[^0-9.\-]/g,"");const s=n.indexOf("-");if(s>0)n=n.replace(/-/g,"");else if(s===0)n=`-${n.slice(1).replace(/-/g,"")}`;if((n.match(/\./g)||[]).length>1){const h=n.split(".");n=`${h.shift()}.${h.join("")}`}const l=Number(n);return Number.isFinite(l)?l:null}resolveDateTimeFormatOptions(e,t){if(e==="time")return t?{hour:"2-digit",minute:"2-digit",second:"2-digit"}:{hour:"2-digit",minute:"2-digit"};if(e==="datetime")return t?{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}:{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};return{year:"numeric",month:"2-digit",day:"2-digit"}}formatDateTimeValue(e,t,r,a){if(!(e instanceof Date)||Number.isNaN(e.getTime()))return"";const o=this.resolveLocale(a);return new Intl.DateTimeFormat(o,this.resolveDateTimeFormatOptions(t,r)).format(e)}getNumberSeparators(e){const t=new Intl.NumberFormat(e).formatToParts(12345.6);return{group:t.find(r=>r.type==="group")?.value??",",decimal:t.find(r=>r.type==="decimal")?.value??"."}}normalizeLocale(e){const t=String(e??"").trim();if(!t)return this.defaultLocale();if(t==="lt")return"lt-LT";if(t==="en")return"en-US";return t}normalizeFractionDigits(e,t,r,a){const o=Number(e);if(!Number.isFinite(o))return a;return Math.max(t,Math.min(r,Math.floor(o)))}escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:pt,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:pt,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:Je,decorators:[{type:k,args:[{providedIn:"root"}]}]});var Xe=class mt{onElementFocus=new g;onPageFocus=new g;onDragStart=new g;onRelocateDragStart=new g;onDragEnd=new g;onDrop=new g;afterPropertyChanged=new g;onSidebarSaveFocusedCopyRequested=new g;onSidebarSaveFocusedGroupRequested=new g;onSidebarTemplateSaved=new g;onSidebarGroupDeleted=new g;onSidebarGroupDeleteRequested=new g;onSidebarTemplatesSetRequested=new g;onSidebarGroupsSetRequested=new g;onElementContextMenuRequested=new g;onBuilderSaveRequested=new g;onPageActionRequested=new g;static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:mt,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:mt,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:Xe,decorators:[{type:k,args:[{providedIn:"root"}]}]});const pr="__nvbRowScopePath";const ra=new Set(["data","row","item","panel","value","index","rowIndex"]);function Se(i,e){const t=i?.parentElement;const r=L(i?.[pr]);const a=r||L(t?.dataPath);if(!i||!t||!a)return null;if(!r&&!oa(t,i))return null;const o=na(i,t,a);if(o===null||o<0)return null;const n=r?`${a}[${o}]`:fe(a,o,t.type);const s=la(t,n,o,e);return{parentElement:t,parentPath:a,rowPath:n,rowIndex:o,rowValue:s,siblingNames:ca(t,s)}}function Qe(i,e,t){const r=L(e);if(!r)return"";const a=Se(i,t);if(!a)return r;return ia(r,a)}function aa(i,e,t){const r=Se(i,e);if(!r)return t?{...t}:null;const a=L(i?.name);const o=i?.dataPath&&e?e(i.dataPath):i?.value??void 0;const n=L(r.parentElement.name);const s=e?e(r.parentPath):r.parentElement.value;const l={row:r.rowValue,item:r.rowValue,panel:r.rowValue,index:r.rowIndex,rowIndex:r.rowIndex,value:o,__rowDataPath:r.rowPath,__rowIndex:r.rowIndex,__parentDataPath:r.parentPath};Object.entries(r.rowValue).forEach(([h,m])=>{const p=L(h);if(!p||ha(p))return;l[p]=m});if(a)l[a]=o;if(n)l[n]=s;return{...t??{},...l}}function ia(i,e){if(ua(i,e))return i;const t=i.match(/^(row|item|panel)(?:\.|$)/);if(t){const a=i.slice(t[1].length);return a.startsWith(".")?`${e.rowPath}${a}`:e.rowPath}const r=i.split(/[.[\]]/)[0]??"";if(r&&e.siblingNames.has(r))return`${e.rowPath}.${i}`;return i}function oa(i,e){const t=L(i.type).toLowerCase();if(t==="dynamictable"||t==="dynamicpanel"||t==="objectpanel")return true;const r=L(i.dataPath);const a=L(e.dataPath);return Boolean(r&&a.startsWith(`${r}[`))}function na(i,e,t){if(ee(e.type))return 0;const r=sa(i.dataPath,t);if(r!==null)return r;if(typeof i.index==="number"&&Number.isFinite(i.index))return i.index;if(typeof e.index==="number"&&Number.isFinite(e.index))return e.index;return null}function sa(i,e){const t=L(i);if(!t||!t.startsWith(`${e}[`))return null;const r=t.slice(e.length).match(/^\[(\d+)\]/);if(!r)return null;const a=Number(r[1]);return Number.isFinite(a)?a:null}function la(i,e,t,r){const a=r?r(e):void 0;if(ve(a))return a;const o=i.value;if(ee(i.type)&&ve(o))return o;if(Array.isArray(o)&&ve(o[t]))return o[t];return{}}function ca(i,e){const t=new Set;const r=L(i.type).toLowerCase();if(r==="dynamictable"&&Array.isArray(i.columns))i.columns.forEach(a=>{const o=L(a?.name);if(o)t.add(o)});if((r==="dynamicpanel"||r==="objectpanel")&&ve(i.template))Object.entries(i.template).forEach(([a,o])=>{const n=L(o?.name)||a;if(n)t.add(n)});Object.keys(e).forEach(a=>{const o=L(a);if(o)t.add(o)});return t}function ua(i,e){if(!i)return true;if(i.startsWith("__")||i==="data"||i.startsWith("data.")||i===e.rowPath||i.startsWith(`${e.rowPath}.`)||i.startsWith(`${e.parentPath}[`))return true;return false}function ha(i){return i.startsWith("__")||ra.has(i)}function L(i){const e=String(i??"").trim();if(!e)return"";const t=e.match(/^\{([^}]+)\}$/);if(t)return String(t[1]??"").trim();return e}function ve(i){return Boolean(i&&typeof i==="object"&&!Array.isArray(i))}var we=class Q{expressionKeys=["disableIf","visibleIf","requireIf","readonlyIf","resetIf","expression"];jexl=new Ir.Jexl;jexlFunctions=B([],...ngDevMode?[{debugName:"jexlFunctions"}]:[]);expressionWritePathCounts=new Map;warnedExpressionCycles=new Set;pendingValueChangedSkipKeys=new Set;pendingAffectedPathEvaluations=new Set;propertyChangeBatches=new Map;static DATA_SOURCE_REFRESH_WINDOW_MS=800;dataSourceExpressionCache=new Map;dataSourceExpressionRefreshedAt=new Map;activeLocalContexts=[];injector=D(vr);structureService=D(ue);dataService=D(q);localeFormatService=D(Je);eventService=D(Xe);constructor(){kt();this.registerDefaultFunctions();this.dataService.onValueChanged.add(e=>{if(j(e?.newValue,e?.oldValue))return;const t=this.buildValueChangeSkipKey(e?.dataPath,e?.sender,e?.trigger);if(t&&this.pendingValueChangedSkipKeys.delete(t))return;const r=this.resolveMutationSourceElements(e?.dataPath);if(r.length===0){const a=String(e?.dataPath??"").trim();if(this.isDependableDataPath(a))this.evaluateAffectedElementsForPath(a);return}this.evaluateMutationSources(r,e?.trigger,e?.dataPath)});this.dataService.onDataMutated.add(e=>{const t=String(e?.dataPath??"").trim();if(this.isExpressionWritePath(t))return;const r=this.buildValueChangeSkipKey(e?.dataPath,e?.sender,e?.trigger);if(r)this.pendingValueChangedSkipKeys.add(r);if(this.isRuntimeVariablePath(t)||this.isRuntimeStatePath(t)){this.evaluateAffectedElementsForPath(t);return}const a=this.resolveMutationSourceElements(e?.dataPath);if(a.length===0){if(this.isDependableDataPath(t))this.evaluateAffectedElementsForPath(t);return}this.evaluateMutationSources(a,void 0,t)})}async evaluateMutationSources(e,t,r){const a=e.find(o=>String(o?.dataPath??"").trim()===String(r??"").trim()&&(W(o?.type)||o?.type==="dynamicTable"));if(a)await Promise.resolve();await this.evaluateCascade([...e.flatMap(o=>this.dependentElementsOf(o,t)),...a?this.rowExpressionElementsOf(a,t):[]],t)}rowExpressionElementsOf(e,t){const r=String(e?.dataPath??"").trim();if(!r)return[];return Object.values(this.structureService.flatModelMap??{}).filter(a=>{const o=String(a?.dataPath??"").trim();return Boolean(a?.expression)&&(o.startsWith(`${r}[`)||o.startsWith(`${r}.`))&&(!t||this.shouldEvaluateForTrigger(a,t,a.logicExecutionMode))})}getRegisteredFunctions(){return[...this.jexlFunctions()]}dependencyCache=new Map;extractDependenciesFromExpression(e,t){const r=String(e??"").trim();if(!r)return[];const a=`${t?String(t.dataPath??t.name??""):""}${r}`;const o=this.dependencyCache.get(a);if(o)return[...o];const n=t?this.applyContextToExpression(r,t):r;const s=this.extractDependencyCandidates(n);if(this.dependencyCache.size===0)setTimeout(()=>{this.dependencyCache.clear()},0);this.dependencyCache.set(a,s);return[...s]}registerFunction(e){const t=String(e?.name??"").trim();if(!t||typeof e.handler!=="function")return;try{this.jexl.addFunction(t,e.handler)}catch{}const r={name:t,args:Array.isArray(e.args)?[...e.args]:[],description:String(e.description??"").trim(),example:e.example,isCustom:e.isCustom??false};this.jexlFunctions.update(a=>{return[...a.filter(o=>o.name!==t),r].sort((o,n)=>o.name.localeCompare(n.name))})}registerCustomFunctions(e){if(!Array.isArray(e))return;e.forEach(t=>{this.registerFunction({...t,isCustom:true})})}async evaluateStartingElement(e){const t=this.dataService.getData();await this.evaluateExpressionOnly(t,e);await this.evaluateCascade(this.dependentElementsOf(e))}async evaluateAllExpressionsInDependencyOrder(){const e=Object.values(this.structureService.flatModelMap??{});await this.evaluateElementsInDependencyOrder(e)}dependentElementsOf(e,t){return this.dependentPathsOf(e).map(r=>this.structureService.flatModelMap[r]).filter(r=>Boolean(r)&&(!t||this.shouldEvaluateForTrigger(r,t,r.logicExecutionMode)))}async evaluateCascade(e,t){const r=new Map;const a=new Map;const o=[...e];while(o.length>0){const h=o.shift();const m=String(h?.dataPath??"").trim();if(!m||r.has(m))continue;r.set(m,h);const p=this.dependentElementsOf(h,t);a.set(m,p);o.push(...p)}if(r.size===0)return;const n=new Map([...r.keys()].map(h=>[h,0]));a.forEach(h=>h.forEach(m=>{const p=String(m.dataPath??"").trim();n.set(p,(n.get(p)??0)+1)}));const s=[...r.keys()].filter(h=>n.get(h)===0);const l=[];while(s.length>0){const h=s.shift();l.push(h);(a.get(h)??[]).forEach(m=>{const p=String(m.dataPath??"").trim();const y=(n.get(p)??0)-1;n.set(p,y);if(y===0)s.push(p)})}if(l.length<r.size){const h=new Set(l);r.forEach((m,p)=>!h.has(p)&&l.push(p))}for(const h of l)await this.evaluateAllExpressions(this.dataService.getData(),r.get(h))}async evaluateExpressionOnly(e,t){if(!t.expression)return;await this.evaluateAndSet(e,t,"expression",async r=>{await this.setExpressionResult(t,r)})}async evaluateAllExpressions(e,t){const r=this.propertyChangeBatches.get(t);const a=[];this.propertyChangeBatches.set(t,a);try{await this.applyElementExpressions(e,t)}finally{if(r){this.propertyChangeBatches.set(t,r);r.push(...a)}else{this.propertyChangeBatches.delete(t);this.flushPropertyChanges(t,a)}}}async applyElementExpressions(e,t){if(t.expression)await this.evaluateAndSet(e,t,"expression",async a=>{await this.setExpressionResult(t,a)});if(t.disableIf)await this.evaluateAndSet(e,t,"disableIf",a=>{const o=Boolean(a);const n=Boolean(t.disabled);const s=Boolean(t["__pfInteractionLocked"]);const l=this.resolveElementBaseDisabled(t);const h=Boolean(t["__pfAncestorDisabled"]);t["__pfLogicDisabled"]=o;t.disabled=l||h||o;const m=this.resolveElementBaseReadonly(t);const p=Boolean(t["__pfLogicReadOnly"]);const y=Boolean(t["__pfAncestorReadonly"]);t["__pfInteractionLocked"]=t.disabled||m||p||y;this.updateChildElement(t,"disabled",t.disabled);const v=Boolean(t["__pfInteractionLocked"]);if(n!==Boolean(t.disabled)||s!==v)this.notifyElementPropertyChanged(t,"disabled",t.disabled)});if(t.visibleIf)await this.evaluateAndSet(e,t,"visibleIf",a=>{const o=!a;if(Boolean(t.hidden)===o)return;t.hidden=o;this.updateChildElement(t,"hidden",o);this.notifyElementPropertyChanged(t,"hidden",o);if(o)this.resetValuesOnHide(t)});if(t.requireIf)await this.evaluateAndSet(e,t,"requireIf",a=>{const o=!!a;if(Boolean(t.required)===o)return;t.required=o;this.updateChildElement(t,"required",o);this.notifyElementPropertyChanged(t,"required",o)});const r=this.resolveElementExpressionKey(t,["readonlyIf"]);if(r)await this.evaluateAndSet(e,t,r,a=>{const o=Boolean(a);const n=Boolean(t.readOnly);const s=Boolean(t["__pfInteractionLocked"]);const l=this.resolveElementBaseReadonly(t);t["__pfLogicReadOnly"]=o;const h=Boolean(t["__pfAncestorReadonly"]);t.readOnly=l||h||o;const m=this.resolveElementBaseDisabled(t);const p=Boolean(t["__pfLogicDisabled"]);const y=Boolean(t["__pfAncestorDisabled"]);t["__pfInteractionLocked"]=m||p||y||t.readOnly;this.updateChildElement(t,"readOnly",t.readOnly);const v=Boolean(t["__pfInteractionLocked"]);if(n!==Boolean(t.readOnly)||s!==v)this.notifyElementPropertyChanged(t,"readOnly",t.readOnly)});if(String(t["resetIf"]??"").trim())await this.evaluateAndSet(e,t,"resetIf",async a=>{await this.applyResetIfState(t,Boolean(a))})}async setExpressionResult(e,t){const r=e.dataPath;if(!r)return;const a=this.normalizeExpressionResultForElement(e,t);if(a===null||a===void 0){e.value=void 0;if(!this.canWriteToDataPath(r))return;await this.runExpressionWrite(r,()=>this.dataService.deleteValue(r));return}const o=P(a);e.value=o;if(!this.canWriteToDataPath(r))return;await this.runExpressionWrite(r,()=>this.dataService.setValue(r,o))}updateChildElement(e,t,r){if(!e?.parentElement||!e.schemaPath)return;if(this.isRepeaterRowInstance(e))return;const a=this.structureService.getStructure()?.elements??this.structureService.getPreviewStructure()?.elements;if(!a)return;const o=x(a,e.schemaPath);if(!o)return;o[t]=r}dependentPathsOf(e){const t=Array.isArray(e?.dependsOn)?e.dependsOn:[];if(!e?.expression)return t;const r=new Set(t);const a=new Set;let o=e;while(o&&this.isRepeaterRowInstance(o)){const n=String(o.parentElement?.dataPath??"").trim();if(!n||a.has(n))break;a.add(n);const s=this.structureService.flatModelMap?.[n]??o.parentElement;(Array.isArray(s?.dependsOn)?s.dependsOn:[]).forEach(l=>r.add(l));o=s}return r.size===t.length?t:[...r]}isRepeaterRowInstance(e){const t=e?.parentElement;const r=String(t?.type??"").trim().toLowerCase();if(r!=="dynamicpanel"&&r!=="dynamictable"&&r!=="objectpanel")return false;const a=String(t?.dataPath??"").trim();const o=String(e?.dataPath??"").trim();const n=r==="objectpanel"?`${a}.`:`${a}[`;return Boolean(a)&&o.startsWith(n)}notifyElementPropertyChanged(e,t,r){const a=this.propertyChangeBatches.get(e);if(a){a.push({propertyKey:t,value:r});return}this.applyPropertyChangeNotification(e,[{propertyKey:t,value:r}])}flushPropertyChanges(e,t){if(t.length===0)return;const r=new Map;t.forEach(a=>r.set(a.propertyKey,a.value));this.applyPropertyChangeNotification(e,Array.from(r,([a,o])=>({propertyKey:a,value:o})))}applyPropertyChangeNotification(e,t){const r=String(e?.name??"").trim();if(!r||t.length===0)return;if(this.isRepeaterRowInstance(e))this.structureService.refreshRowElementReference(e);else this.structureService.refreshElementReferenceAcrossStructures(r);const a=String(e.dataPath??r??e.schemaPath??"");t.forEach(({propertyKey:o,value:n})=>{this.eventService.afterPropertyChanged.fire({payload:{elementNameOrPath:a,propertyKey:o,value:n}})})}async evaluateAndSet(e,t,r,a){const o=t[r];if(!o||typeof o!=="string")return;if(r==="expression"&&this.hasSelfDependencyExpression(t,o)){this.warnExpressionCycle(t,`Skipping self-referential expression for "${String(t?.dataPath??t?.name??"").trim()}".`);return}try{const n=this.prepareExpressionForEvaluation(o,t);const s=await this.jexl.eval(n,this.buildEvaluationContext(e,t));if(r==="expression"&&(s===null||s===void 0||this.isInvalidExpressionResult(s))){await a(null);return}if(r!=="expression"){await a(!!s);return}await a(s)}catch{if(r==="expression")await a(null)}}resolveElementExpressionKey(e,t){for(const r of t)if(String(e?.[r]??"").trim())return r;return null}resolveElementBaseReadonly(e){const t=e["__pfBaseReadOnly"];if(typeof t==="boolean")return t;return Boolean(e.readOnly)}resolveElementBaseDisabled(e){const t=e["__pfBaseDisabled"];if(typeof t==="boolean")return t;return Boolean(e.disabled)}async applyResetIfState(e,t){const r="__pfResetIfActive";const a=Boolean(e[r]);e[r]=t;if(!t||a)return;const o=String(e?.dataPath??"").trim();const n=this.resolveResetValue(e);e.value=P(n);if(!o||!this.canWriteToDataPath(o))return;const s=this.dataService.getValue(o);if(j(s,n))return;if(n===void 0){await this.dataService.deleteValue(o);return}await this.dataService.setValue(o,P(n))}async resetValuesOnHide(e){if(!e)return;if(e["resetOnHide"])await this.resetElementValue(e);await this.resetDescendantValues(e)}async resetDescendantValues(e){if(!e)return;const t=Boolean(e["resetChildrenOnHide"]);for(const r of this.collectDescendants(e))if(t||r["resetOnHide"])await this.resetElementValue(r)}collectDescendants(e){const t=this.structureService.flatModelMap??{};const r=[];const a=new Set;const o=s=>{if(!s||s===e||a.has(s))return;a.add(s);r.push(s)};const n=String(e?.name??"").trim();if(n)this.structureService.getLayoutDescendantElementNames(n).forEach(s=>o(t[s]));if(!W(e?.type)&&e?.type!=="dynamicTable")return r;Object.values(t).forEach(s=>{if(this.isDescendantOf(s,e))o(s)});return r}isDescendantOf(e,t){let r=e?.parentElement;let a=0;while(r&&a<100){if(r===t)return true;r=r.parentElement;a+=1}return false}async resetElementValue(e){const t=String(e?.dataPath??"").trim();if(!t)return;const r=this.resolveResetValue(e);e.value=P(r);if(!this.canWriteToDataPath(t))return;const a=this.dataService.getValue(t);if(j(a,r))return;if(r===void 0){await this.dataService.deleteValue(t);return}await this.dataService.setValue(t,P(r))}resolveResetValue(e){const t=e;if(Object.prototype.hasOwnProperty.call(t,"defaultValue")){const r=P(t["defaultValue"]);if(!this.shouldEvaluateDefaultExpression(r))return r;const a=this.normalizeDefaultExpression(String(r??""));if(!a)return r;const o=this.evaluateInlineExpression(a,e);return o===void 0?r:P(o)}if(Array.isArray(e.value))return[];if(typeof e.value==="boolean")return false}shouldEvaluateDefaultExpression(e){if(typeof e!=="string")return false;const t=e.trim();if(!t)return false;if(t.startsWith("="))return true;return t.includes("{")&&t.includes("}")}normalizeDefaultExpression(e){const t=String(e??"").trim();if(!t)return"";if(t.startsWith("="))return t.slice(1).trim();return t}buildEvaluationContext(e,t){const r=this.dataService.buildRuntimeContext(void 0,e);const a=this.buildSelfExpressionContext(t);if(a){r["__self"]=a;r["__element"]=a}const o=x(r,"__variables");if(!o||typeof o!=="object"||Array.isArray(o))return r;Object.entries(o).forEach(([n,s])=>{const l=String(n??"").trim();if(!l||l==="route"||l==="external")return;if(Object.prototype.hasOwnProperty.call(r,l))return;r[l]=s});return r}isInvalidExpressionResult(e){return typeof e==="number"&&!Number.isFinite(e)}normalizeExpressionResultForElement(e,t){if(t===null||t===void 0)return null;if(String(e?.type??"").trim().toLowerCase()!=="number")return t;const r=this.resolveExpressionNumericValue(t,e);if(r===null)return null;const a=this.applyExpressionMaxFractionDigits(e,r);if(String(e["valueStorageType"]??"number").trim().toLowerCase()!=="string")return a;return this.formatNumberForStringStorage(e,a)}resolveExpressionNumericValue(e,t){if(typeof e==="number")return Number.isFinite(e)?e:null;if(typeof e!=="string")return null;const r=e.trim();if(!r)return null;const a=String(t["visualFormatLocale"]??"").trim();const o=this.localeFormatService.parseNumber(r,a);return o===null?null:o}applyExpressionMaxFractionDigits(e,t){if(!Boolean(e["visualFormatEnabled"]))return t;const r=e["visualFormatMaxFractionDigits"];const a=Number(r);if(!Number.isFinite(a))return t;const o=Math.max(0,Math.min(20,Math.floor(a)));return Number(t.toFixed(o))}formatNumberForStringStorage(e,t){if(!Boolean(e["visualFormatEnabled"]))return this.stringifyNumber(t);const r=this.localeFormatService.resolveLocale(String(e["visualFormatLocale"]??"").trim());const a=e["visualFormatUseGrouping"];const o=a===void 0||a===null?true:Boolean(a);const n=this.resolveConfiguredFractionDigits(e["visualFormatMinFractionDigits"]);const s=this.resolveConfiguredFractionDigits(e["visualFormatMaxFractionDigits"]);return this.localeFormatService.formatNumber(t,{locale:r,useGrouping:o,minimumFractionDigits:n??void 0,maximumFractionDigits:s??void 0})}resolveConfiguredFractionDigits(e){const t=Number(e);if(!Number.isFinite(t))return null;return Math.max(0,Math.min(20,Math.floor(t)))}stringifyNumber(e){if(!Number.isFinite(e))return"";if(Number.isInteger(e))return String(e);const t=Number(e.toFixed(12));return String(t).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"")}removeBraces(e){return e.replace(/{/g,"").replace(/}/g,"")}resolveExpressionPlaceholders(e,t){if(!e||!e.includes("{"))return e;return e.replace(/\{([^}]+)\}/g,(r,a)=>{const o=String(a??"").trim();if(!o)return'""';if(this.isLocalScopeToken(t,o))return o;return`getVal("${o.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}")`})}isLocalScopeToken(e,t){if(!e||typeof e!=="object"||Array.isArray(e))return false;if(!/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\[\d+\])*$/.test(t))return false;const r=t.split(/[.[]/)[0];if(!r||!Object.prototype.hasOwnProperty.call(e,r))return false;if(this.structureService.flatModelMap?.[r])return false;if(this.declaredRuntimeVariableNames().has(r))return false;return!Object.prototype.hasOwnProperty.call(this.dataService.getData()??{},r)}async runPropertyCondition(e,t,r){const a=this.buildConditionContext(e,r);const o=this.prepareConditionExpression(t,r,a,false);this.activeLocalContexts.push(a);try{return await this.jexl.eval(o,a)}finally{this.activeLocalContexts.pop()}}evaluateInlineExpression(e,t){const r=String(e??"").trim();if(!r)return;const a=this.dataService.getData();const o=this.buildEvaluationContext(a,t);const n=t??{};try{const s=this.prepareExpressionForEvaluation(r,n,null,true);const l=this.jexl.evalSync(s,o);return this.isInvalidExpressionResult(l)?void 0:l}catch{return}}runPropertyConditionSync(e,t,r){const a=this.buildConditionContext(e,r);const o=this.prepareConditionExpression(t,r,a,true);this.activeLocalContexts.push(a);try{return this.jexl.evalSync(o,a)}finally{this.activeLocalContexts.pop()}}prepareConditionExpression(e,t,r,a){const o=String(e??"").trim();if(!o)return o;try{return this.prepareExpressionForEvaluation(o,t??null,r,a)}catch{return o}}buildConditionContext(e,t){const r=e&&typeof e==="object"&&!Array.isArray(e)?e:{};const a=this.buildSelfExpressionContext(t);if(!a)return r;return{...r,__self:a,__element:a}}replacePlaceholder(e,t){if(!t)return t;return this.applyContextToExpression(t,e)}static COLLECTION_PREDICATE_FUNCTIONS=["filterArray","findInArray","existsInArray","countArray","countInArray","sumArray","sumInArray","avgArray","avgInArray","minArray","minInArray","maxArray","maxInArray","mapArray","getFirst","getLast","firstInArray","lastInArray","joinArray","joinInArray","collectValuesFrom"];static ELEMENT_REFERENCE_FUNCTIONS=["getLabel","getValue","getElementProperty","getProp","setElementProperty","setProp","setValue","setVar","sumValue","sumVar","addValue","pushValue","pushVar"];prepareExpressionForEvaluation(e,t,r,a=false){const o=this.rewriteAssignmentExpression(String(e??"").trim());const n=this.rewriteElementReferenceArguments(o);const s=this.resolveExpressionPlaceholders(n,r).trim();const l=t&&!this.hasLocalRowScope(r)?this.applyContextToExpression(s,t):s;const h=a?this.rewriteAsyncFunctionsForSync(l):l;return this.quoteCollectionPredicateArguments(h)}rewriteAssignmentExpression(e){const t=String(e??"").trim();if(!t.startsWith("{"))return t;const r=t.match(/^\{([^}]+)\}\s*(\+=|=)(?!=)\s*([\s\S]+)$/);if(!r)return t;const a=String(r[1]??"").trim();const o=String(r[3]??"").trim();if(!a||!o)return t;return`${r[2]==="+="?"sumValue":"setValue"}(${JSON.stringify(a)}, ${o})`}hasLocalRowScope(e){if(!e||typeof e!=="object"||Array.isArray(e))return false;return Object.prototype.hasOwnProperty.call(e,"row")||Object.prototype.hasOwnProperty.call(e,"panel")}rewriteAsyncFunctionsForSync(e){if(!e||!e.includes("("))return e;return e.replace(/\b(?:runDataSource|reloadDataSource)\s*\(/g,"dataSourceValue(")}rewriteElementReferenceArguments(e){if(!e||!e.includes("{"))return e;const t=Q.ELEMENT_REFERENCE_FUNCTIONS.join("|");return e.replace(new RegExp(`\\b(${t})\\s*\\(\\s*\\{([^}]+)\\}\\s*(?=[,)])`,"g"),(r,a,o)=>`${a}(${JSON.stringify(String(o??"").trim())}`)}quoteCollectionPredicateArguments(e){if(!e||!e.includes("("))return e;const t=Q.COLLECTION_PREDICATE_FUNCTIONS.join("|");const r=new RegExp(`\\b(${t})\\s*\\(`,"g");let a=e;let o=0;for(;;){r.lastIndex=o;const n=r.exec(a);if(!n)return a;const s=n.index+n[0].length-1;if(this.isIndexInsideStringLiteral(a,n.index)){o=n.index+1;continue}const l=this.findMatchingParenthesis(a,s);if(l<0)return a;const h=a.slice(s+1,l);const m=this.splitTopLevelArguments(h);const p=String(m[1]??"").trim();if(m.length<2||!p||this.isQuotedLiteral(p)){o=s+1;continue}m[1]=JSON.stringify(p);a=`${a.slice(0,s+1)}${m.join(",")}${a.slice(l)}`;o=s+1}}findMatchingParenthesis(e,t){let r=0;let a="";for(let o=t;o<e.length;o++){const n=e[o];if(a){if(n==="\\")o++;else if(n===a)a="";continue}if(n==='"'||n==="'"){a=n;continue}if(n==="("){r++;continue}if(n===")"){r--;if(r===0)return o}}return-1}splitTopLevelArguments(e){const t=[];let r=0;let a=0;for(;;){const o=this.findTopLevelComma(e.slice(a));if(o<0){t.push(e.slice(r));return t}const n=a+o;t.push(e.slice(r,n));r=n+1;a=r}}findTopLevelComma(e){let t=0;let r="";for(let a=0;a<e.length;a++){const o=e[a];if(r){if(o==="\\")a++;else if(o===r)r="";continue}if(o==='"'||o==="'"){r=o;continue}if(o==="("||o==="["||o==="{"){t++;continue}if(o===")"||o==="]"||o==="}"){t--;continue}if(o===","&&t===0)return a}return-1}isIndexInsideStringLiteral(e,t){let r="";for(let a=0;a<t&&a<e.length;a++){const o=e[a];if(r){if(o==="\\")a++;else if(o===r)r="";continue}if(o==='"'||o==="'")r=o}return r!==""}isQuotedLiteral(e){const t=String(e??"").trim();if(t.length<2)return false;const r=t[0];if(r!=='"'&&r!=="'")return false;return this.findMatchingQuoteIndex(t,r)===t.length-1}findMatchingQuoteIndex(e,t){for(let r=1;r<e.length;r++){if(e[r]==="\\"){r++;continue}if(e[r]===t)return r}return-1}applyContextToExpression(e,t){if(!e)return e;let r=e;r=this.applyIndexContextTokens(r,t);const a=this.resolveCurrentRowPath(t);if(a)r=r.replace(/\brow\./g,`${a}.`);const o=this.resolveCurrentPanelPath(t)??a;if(o)r=r.replace(/\bpanel\./g,`${o}.`);return r}resolveCurrentRowPath(e){const t=Se(e,a=>this.dataService.getValue(a));if(t)return t.rowPath;const r=e?.parentElement;if(!r?.dataPath)return null;if(r.type==="dynamicTable"||W(r.type)){const a=this.resolveContextIndex(e,r);return fe(r.dataPath,a,r.type)}return r.dataPath}resolveCurrentPanelPath(e){let t=e;while(t?.parentElement){const r=t.parentElement;if(W(r.type)&&r.dataPath){const a=this.resolveContextIndex(t,r);return fe(r.dataPath,a,r.type)}t=r}return null}resolveContextIndex(e,t){const r=this.resolveContextIndexFromDataPath(e?.dataPath,t?.dataPath);if(r!==null)return r;if(typeof e?.index==="number"&&Number.isFinite(e.index))return e.index;if(typeof t?.index==="number"&&Number.isFinite(t.index))return t.index;return 0}resolveContextIndexFromDataPath(e,t){const r=String(e??"").trim();const a=String(t??"").trim();if(!r||!a)return null;if(!r.startsWith(`${a}[`))return null;const o=r.slice(a.length).match(/^\[(\d+)\]/);if(!o)return null;const n=Number(o[1]);return Number.isFinite(n)?n:null}resolveEventElement(e,t){if(e)return e;const r=String(t??"").trim();if(!r)return null;return this.structureService.flatModelMap[r]??null}buildValueChangeSkipKey(e,t,r){const a=String(e??"").trim();if(!a||!t)return"";const o=String(r??"").trim().toLowerCase();if(o!=="input"&&o!=="change"&&o!=="blur")return"";const n=String(t?.dataPath??"").trim()||String(t?.name??"").trim();if(!n)return"";return`${a}::${n}::${o}`}translateContentValue(e,t){const r=this.stringifyTranslationKey(e);const a=t===void 0||t===null?"":this.stringifyTranslationKey(t);if(!r)return a;const o=this.resolveContentDictionary();const n=o[r]??o[`values.${r}`]??o[r.toLowerCase()];const s=String(n??"").trim();if(s)return s;return a||r}stringifyTranslationKey(e){if(e===null||e===void 0)return"";if(typeof e==="object")return"";return String(e).trim()}resolveContentDictionary(){const e=(this.structureService.getPreviewStructure()?.localization??this.structureService.getStructure()?.localization)?.texts;if(!e||typeof e!=="object")return{};const t=e[this.resolveActiveLanguage()];return t&&typeof t==="object"?t:{}}resolveActiveLanguage(){const e=String(this.structureService.getPreviewStructure()?.settings?.language??"").trim();if(e)return e;const t=String(this.structureService.getStructure()?.settings?.language??"").trim();if(t)return t;const r=this.structureService.getStructure()?.localization??null;return String(r?.defaultLanguage??"").trim()}isRuntimeVariablePath(e){if(!e)return false;return e==="__variables"||e.startsWith("__variables.")}static STATIC_RUNTIME_NAMESPACES=new Set(["__route","__external"]);isRuntimeStatePath(e){const t=String(e??"").trim();if(!t.startsWith("__"))return false;const r=t.split(/[.[]/)[0];if(Q.STATIC_RUNTIME_NAMESPACES.has(r))return false;return r!=="__self"&&r!=="__element"}isDependableDataPath(e){const t=String(e??"").trim();if(!t||t==="data")return false;if(this.isRuntimeVariablePath(t))return true;if(t.startsWith("__"))return this.isRuntimeStatePath(t);return this.hasPathInData(this.dataService.getData(),t)}async evaluateAllMappedExpressions(){const e=Object.values(this.structureService.flatModelMap??{});await this.evaluateElementsInDependencyOrder(e)}async evaluateElementsInDependencyOrder(e){const t=e.filter(Boolean);if(t.length===0)return;const r=new Map;const a=new Map;t.forEach(l=>{const h=String(l?.dataPath??"").trim();if(!h)return;a.set(h,l);r.set(h,0)});const o=new Map;t.forEach(l=>{const h=this.dependentPathsOf(l);o.set(String(l?.dataPath??"").trim(),h);h.forEach(m=>{const p=String(m??"").trim();if(!p||!r.has(p))return;r.set(p,(r.get(p)??0)+1)})});const n=t.filter(l=>{const h=String(l?.dataPath??"").trim();return h&&(r.get(h)??0)===0});const s=new Set;while(n.length>0){const l=n.shift();const h=String(l?.dataPath??"").trim();if(!l||!h||s.has(h))continue;await this.evaluateElementExpressionsOnce(l,s);(o.get(h)??[]).forEach(m=>{const p=String(m??"").trim();if(!p||!r.has(p))return;const y=Math.max(0,(r.get(p)??0)-1);r.set(p,y);if(y===0){const v=a.get(p);if(v)n.push(v)}})}for(const l of t)await this.evaluateElementExpressionsOnce(l,s)}async evaluateElementExpressionsOnce(e,t){const r=String(e?.dataPath??"").trim();if(!r||t.has(r))return;t.add(r);await this.evaluateAllExpressions(this.dataService.getData(),e)}async evaluateAffectedElementsForPath(e){const t=String(e??"").trim();if(!t)return;if(this.pendingAffectedPathEvaluations.has(t))return;const r=Object.values(this.structureService.flatModelMap??{});if(r.length===0)return;this.pendingAffectedPathEvaluations.add(t);try{await this.evaluateCascade(r.filter(a=>this.doesElementDependOnPath(a,t)))}finally{this.pendingAffectedPathEvaluations.delete(t)}}doesElementDependOnPath(e,t){return this.expressionKeys.some(r=>{const a=String(e?.[r]??"").trim();if(!a)return false;return this.extractDependenciesFromExpression(a,e).some(o=>this.isDependencyPathMatch(String(o??"").trim(),t))})}isDependencyPathMatch(e,t){const r=String(e??"").trim();const a=String(t??"").trim();if(!r||!a)return false;if(r===a)return true;return this.isChildDataPath(r,a)||this.isChildDataPath(a,r)}isChildDataPath(e,t){if(!e.startsWith(t))return false;const r=e.slice(t.length);return r.startsWith(".")||r.startsWith("[")}resolveMutationSourceElements(e){const t=String(e??"").trim();if(!t)return[];const r=this.buildMutationSourcePaths(t);const a=new Set;const o=[];r.forEach(n=>{const s=this.structureService.flatModelMap[n];if(!s?.dataPath)return;if(a.has(s.dataPath))return;a.add(s.dataPath);if(!Array.isArray(s.dependsOn)||s.dependsOn.length===0)return;o.push(s)});return o}buildMutationSourcePaths(e){const t=[];let r=String(e??"").trim();while(r){t.push(r);const o=this.trimLastPathSegment(r);if(!o||o===r)break;r=o}const a=this.resolveRuntimeStateOwnerFromDataPath(e);if(a)t.push(a);return t}trimLastPathSegment(e){const t=String(e??"").trim();if(!t)return"";if(t.endsWith("]"))return t.replace(/\[[^\]]+\]$/,"");return t.replace(/\.[^.[\]]+$/,"")}resolveRuntimeStateOwnerFromDataPath(e){const t=String(e??"").trim();if(!t)return"";const r=t.match(/^__tabs\.([A-Za-z_][A-Za-z0-9_-]*)\./);if(r)return String(r[1]??"").trim();const a=t.match(/^__progressFlow\.([A-Za-z_][A-Za-z0-9_-]*)\./);if(a)return String(a[1]??"").trim();return""}shouldEvaluateForTrigger(e,t,r){const a=String(t??"change").trim().toLowerCase();if(a==="programmatic"||a==="load")return true;const o=this.normalizeExecutionMode(r);if(o==="onInput")return a==="input";if(o==="onChange")return a==="change";if(a==="blur")return true;if(a==="change"&&!this.isHighFrequencyInput(e))return true;return false}normalizeExecutionMode(e){const t=String(e??"").trim().toLowerCase();if(t==="oninput")return"onInput";if(t==="onchange")return"onChange";return"onBlur"}isHighFrequencyInput(e){const t=String(e?.type??"").trim().toLowerCase();return t==="text"||t==="number"||t==="textarea"}applyIndexContextTokens(e,t){const r=this.resolveIndexedPathContexts(t);if(r.length===0)return e;let a=e;const o=r[r.length-1];const n=r.slice(0,-1).reverse();a=a.replace(/\bparentIndex(?:\.parentIndex)*/g,s=>{const l=s.split(".").length-1;const h=n[l];return String(h?.index??0)});a=a.replace(/\bpanel\.index\b/g,String(o.index));a=a.replace(/\brow\.index\b/g,String(o.index));r.forEach(s=>{const l=this.escapeRegExp(s.name);const h=new RegExp(`\\b${l}\\.index\\b`,"g");a=a.replace(h,String(s.index))});return a}resolveIndexedPathContexts(e){const t=String(e?.dataPath??"").trim();if(!t)return[];const r=Array.from(t.matchAll(/([^.[\]]+)\[(\d+)\]/g));if(r.length===0)return[];return r.map(a=>({name:String(a[1]??"").trim(),index:Number(a[2]??0)}))}canWriteToDataPath(e){if(!e||!e.includes("["))return true;const t=/\[(\d+)\]/g;let r=null;while((r=t.exec(e))!==null){const a=e.slice(0,r.index);const o=Number(r[1]);const n=this.dataService.getValue(a);if(!Array.isArray(n)||n.length<=o)return false}return true}escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}hasSelfDependencyExpression(e,t){const r=new Set([e?.dataPath,e?.name].map(a=>String(a??"").trim()).filter(a=>a.length>0));if(r.size===0)return false;return this.extractDependenciesFromExpression(t,e).some(a=>r.has(String(a??"").trim()))}extractDependencyCandidates(e){const t=new Set;const r=String(e??"").trim();if(!r)return[];const a=l=>{const h=String(l??"").trim();if(!h)return;const m=this.resolveExpressionLookupPath(h);const p=this.structureService.flatModelMap[m];if(p?.dataPath){t.add(String(p.dataPath).trim());return}const y=this.structureService.flatModelMap[h];if(y?.dataPath){t.add(String(y.dataPath).trim());return}const v=this.resolveRuntimeStateAliasElementName(h);if(v){const A=this.structureService.flatModelMap[v];if(A?.dataPath){t.add(String(A.dataPath).trim());return}}if(this.isDependableDataPath(m))t.add(m)};(r.match(/\{([^}]+)\}/g)??[]).forEach(l=>{const h=l.slice(1,-1).trim();a(h)});const o=r.matchAll(/getVal\(\s*["']([^"']+)["']\s*\)/g);for(const l of o)a(String(l?.[1]??"").trim());const n=r.replace(/"(?:\\.|[^"\\])*"/g," ").replace(/'(?:\\.|[^'\\])*'/g," ").match(/\b[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*|\[\d+\])*\b/g)??[];const s=new Set(["true","false","null","undefined","and","or","not","if","else","row","panel","parentPanel","parentIndex","__self","__element","data",...this.getRegisteredFunctions().map(l=>String(l.name??"").trim())]);n.forEach(l=>{const h=String(l??"").trim();if(!h||s.has(h))return;a(h)});return Array.from(t)}warnExpressionCycle(e,t){const r=`${String(e?.dataPath??e?.name??"").trim()}::${t}`;if(!r.trim()||this.warnedExpressionCycles.has(r))return;this.warnedExpressionCycles.add(r);console.warn(`[NgxViewBuilder][Expression] ${t}`,{elementName:String(e?.name??"").trim()||null,dataPath:String(e?.dataPath??"").trim()||null})}isExpressionWritePath(e){if(!e)return false;return(this.expressionWritePathCounts.get(e)??0)>0}async runExpressionWrite(e,t){this.incrementExpressionWritePath(e);try{await t()}finally{this.decrementExpressionWritePath(e)}}incrementExpressionWritePath(e){const t=String(e??"").trim();if(!t)return;const r=this.expressionWritePathCounts.get(t)??0;this.expressionWritePathCounts.set(t,r+1)}decrementExpressionWritePath(e){const t=String(e??"").trim();if(!t)return;const r=this.expressionWritePathCounts.get(t)??0;if(r<=1){this.expressionWritePathCounts.delete(t);return}this.expressionWritePathCounts.set(t,r-1)}resolveExpressionLookupPath(e){const t=String(e??"").trim();if(!t)return"";const r=this.dataService.getData();if(this.hasPathInData(r,t))return t;const a=this.resolveRuntimeStateAliasPath(t);if(a&&this.hasPathInData(r,a))return a;if(t.startsWith("__"))return t;const o=`__variables.${t}`;if(this.hasPathInData(r,o))return o;if(this.isDeclaredRuntimeVariableToken(t))return o;return t}isDeclaredRuntimeVariableToken(e){const t=String(e??"").trim().split(/[.[]/)[0];if(!t)return false;if(this.structureService.flatModelMap?.[t])return false;return this.declaredRuntimeVariableNames().has(t)}declaredRuntimeVariableNames(){const e=(this.structureService.getPreviewStructure()?.settings??this.structureService.getStructure()?.settings)?.variables;const t=new Set;if(!Array.isArray(e))return t;e.forEach(r=>{const a=String(r?.name??"").trim();if(a)t.add(a)});return t}hasPathInData(e,t){if(!t)return false;if(Pe(e,t))return true;return Object.prototype.hasOwnProperty.call(e,t)}resolveRuntimeStateAliasPath(e){const t=String(e??"").trim();if(!t)return"";const r=t.match(/^([A-Za-z_][A-Za-z0-9_-]*)\.(selectedTab|activeTab|selectedTabItem|selectedTabIndex)$/);if(r)return`__tabs.${r[1]}.${r[2]}`;const a=t.match(/^([A-Za-z_][A-Za-z0-9_-]*)\.(selectedStep|activeStep|selectedStepItem|selectedStepIndex)$/);if(a)return`__progressFlow.${a[1]}.${a[2]}`;return""}resolveRuntimeStateAliasElementName(e){const t=String(e??"").trim();if(!t)return"";const r=t.match(/^([A-Za-z_][A-Za-z0-9_-]*)\./);return r?String(r[1]??"").trim():""}registerDefaultFunctions(){this.registerFunction({name:"dbg",args:["value","label(optional)"],description:"Outputs value to console and returns it, allowing you to debug expressions.",example:'dbg({el2.selectedStep}, "selectedStep")',handler:(e,t)=>this.debugExpressionValue(e,t)});this.registerFunction({name:"clog",args:["value","label(optional)"],description:"Alias for dbg function for quick console logging.",example:'clog({price}, "price")',handler:(e,t)=>this.debugExpressionValue(e,t)});this.registerFunction({name:"isEmpty",args:["value"],description:"True if value is empty",example:"isEmpty({el1})",handler:e=>{if(e===null||e===void 0)return true;if(typeof e==="string")return e.trim().length===0;if(Array.isArray(e))return e.length===0;return false}});this.registerFunction({name:"getVal",args:["path"],description:"Returns value from data by path",example:'getVal("el1")',handler:e=>{const t=String(e??"").trim();if(!t)return;const r=this.resolveExpressionLookupPath(t);if(!r)return;const a=this.dataService.getValue(r);const o=this.structureService.flatModelMap[r];if(a!==void 0)return this.resolveExpressionValue(a,o);const n=this.resolveElementOwnValue(t,r);return this.resolveExpressionValue(n.value,n.model??o)}});this.registerFunction({name:"translate",args:["value","fallback(optional)"],description:'Translates a value with the structure dictionary of the active language. Looks up the key as given and under a "values." prefix, then falls back to the value itself.',example:"translate({row.status})",handler:(e,t)=>this.translateContentValue(e,t)});this.registerFunction({name:"t",args:["value","fallback(optional)"],description:"Alias for translate function",example:'t({row.status}, "Unknown")',handler:(e,t)=>this.translateContentValue(e,t)});this.registerFunction({name:"currentLanguage",args:[],description:"Returns the language code the view is currently rendered in",example:'currentLanguage() == "en"',handler:()=>this.resolveActiveLanguage()});this.registerFunction({name:"getElementProperty",args:["elementNameOrPath","propertyKey"],description:"Returns an element's property value by key (supports nested keys)",example:'getElementProperty("el1", "label")',handler:(e,t)=>this.getElementPropertyValue(e,t)});this.registerFunction({name:"getProp",args:["elementNameOrPath","propertyKey"],description:"Alias for getElementProperty function",example:'getProp({el1}, "placeholder")',handler:(e,t)=>this.getElementPropertyValue(e,t)});this.registerFunction({name:"setElementProperty",args:["elementNameOrPath","propertyKey","value"],description:"Sets element property value and returns true/false",example:'setElementProperty({step2}, "disabled", isEmpty({el1}))',handler:(e,t,r)=>this.setElementPropertyValue(e,t,r)});this.registerFunction({name:"setProp",args:["elementNameOrPath","propertyKey","value"],description:"Alias for setElementProperty function",example:'setProp({el1}, "label", "New label")',handler:(e,t,r)=>this.setElementPropertyValue(e,t,r)});this.registerFunction({name:"setValue",args:["target","value"],description:"Writes a value into a variable or a data path and returns it. Writing the value that is already there changes nothing, so it is safe in a recalculated expression.",example:"setValue({variable1}, sumArray({el1}, el5[].column3))",handler:(e,t)=>this.writeExpressionValue(e,t)});this.registerFunction({name:"setVar",args:["name","value"],description:"Like setValue, but the target is always read as a variable name",example:"setVar({variable1}, {el2} + {el3})",handler:(e,t)=>this.writeExpressionValue(e,t,true)});this.registerFunction({name:"sumValue",args:["target","value"],description:"Adds a number onto what the target already holds and returns the new total. Arrays are summed first, so a whole column can be added at once. Each call adds again, so use it from an action rather than from a condition that is recalculated.",example:"sumValue({variable1}, {row.column3})",handler:(e,t)=>this.accumulateExpressionValue(e,t)});this.registerFunction({name:"sumVar",args:["name","value"],description:"Like sumValue, but the target is always read as a variable name",example:"sumVar({variable1}, {row.column3} + 40)",handler:(e,t)=>this.accumulateExpressionValue(e,t,true)});this.registerFunction({name:"addValue",args:["target","value"],description:"Alias for sumValue function",example:"addValue({total}, {row.column3})",handler:(e,t)=>this.accumulateExpressionValue(e,t)});this.registerFunction({name:"pushValue",args:["target","value"],description:"Appends to the array held by the target and returns it. An array argument is appended item by item, which is what collects every row of a table into one variable.",example:"pushValue({variable1}, flattenArray(collectValuesFrom({el1}, el5[])))",handler:(e,t)=>this.appendExpressionValue(e,t)});this.registerFunction({name:"pushVar",args:["name","value"],description:"Like pushValue, but the target is always read as a variable name",example:"pushVar({variable1}, {row})",handler:(e,t)=>this.appendExpressionValue(e,t,true)});this.registerFunction({name:"flattenArray",args:["source"],description:"Flattens nested arrays into one flat array. Rows gathered out of a dynamic panel come back grouped per panel, and this puts them all on one level.",example:"flattenArray(collectValuesFrom({el1}, el5[]))",handler:e=>this.flattenUnknownValues(e)});this.registerFunction({name:"runDataSource",args:["sourceName","contextElement(optional)"],description:"Reloads the specified data source and returns its result. In synchronous places (conditions, rules, templates) it returns the last loaded payload and refreshes in the background - the fresh payload arrives through __dataSource.<name>.",example:'runDataSource("loadUsers")',handler:(e,t)=>this.runDataSourceValue(e,t)});this.registerFunction({name:"reloadDataSource",args:["sourceName","contextElement(optional)"],description:"Alias for runDataSource function",example:'reloadDataSource("loadUsers", __self)',handler:(e,t)=>this.runDataSourceValue(e,t)});this.registerFunction({name:"dataSourceValue",args:["sourceName","contextElement(optional)"],description:"Returns the last loaded payload of a data source without waiting for the request. This is what runDataSource resolves to in synchronous expressions.",example:'len(dataSourceValue("loadUsers")) > 0',handler:(e,t)=>this.readDataSourceValue(e,t)});this.registerFunction({name:"notEmpty",args:["value"],description:"True if value is not empty",example:"notEmpty({el1})",handler:e=>{if(e===null||e===void 0)return false;if(typeof e==="string")return e.trim().length>0;if(Array.isArray(e))return e.length>0;return true}});this.registerFunction({name:"includesAny",args:["collection","value"],description:"True if array or text contains value",example:'includesAny({el1}, "A")',handler:(e,t)=>{if(Array.isArray(e))return e.some(r=>String(r??"")===String(t??""));if(typeof e==="string")return e.includes(String(t??""));return false}});this.registerFunction({name:"contains",args:["collection","value"],description:"True if collection (array/text) contains value",example:'contains({el1}, "A")',handler:(e,t)=>{if(Array.isArray(e))return e.some(r=>String(r??"")===String(t??""));if(typeof e==="string")return e.includes(String(t??""));return false}});this.registerFunction({name:"containsAny",args:["collection","values"],description:"True if collection contains at least one value from the list",example:'containsAny({el1}, ["A","B"])',handler:(e,t)=>{const r=this.normalizeToArray(t);if(r.length===0)return false;if(Array.isArray(e))return r.some(a=>e.some(o=>String(o??"")===String(a??"")));if(typeof e==="string")return r.some(a=>e.includes(String(a??"")));return false}});this.registerFunction({name:"containsAll",args:["collection","values"],description:"True if collection contains all values from the list",example:'containsAll({el1}, ["A","B"])',handler:(e,t)=>{const r=this.normalizeToArray(t);if(r.length===0)return false;if(Array.isArray(e))return r.every(a=>e.some(o=>String(o??"")===String(a??"")));if(typeof e==="string")return r.every(a=>e.includes(String(a??"")));return false}});this.registerFunction({name:"inArray",args:["value","collection"],description:"True if value is in the collection",example:"inArray({el2}, {el1})",handler:(e,t)=>{if(!Array.isArray(t))return false;return t.some(r=>String(r??"")===String(e??""))}});this.registerFunction({name:"startsWithAny",args:["text","prefix"],description:"True if text starts with prefix",example:'startsWithAny({el1}, "LT")',handler:(e,t)=>String(e??"").startsWith(String(t??""))});this.registerFunction({name:"endsWithAny",args:["text","suffix"],description:"True if text ends with suffix",example:'endsWithAny({el1}, "99")',handler:(e,t)=>String(e??"").endsWith(String(t??""))});this.registerFunction({name:"toNumber",args:["value"],description:"Converts to number (NaN -> 0)",example:"toNumber({el1}) > 10",handler:e=>{const t=Number(e);return Number.isNaN(t)?0:t}});this.registerFunction({name:"len",args:["value"],description:"Returns length of text or array",example:"len({el1}) >= 3",handler:e=>{if(Array.isArray(e)||typeof e==="string")return e.length;return 0}});this.registerFunction({name:"inRange",args:["value","min","max"],description:"True if value is between min and max",example:"inRange({el1}, 1, 10)",handler:(e,t,r)=>{const a=Number(e);const o=Number(t);const n=Number(r);if(Number.isNaN(a)||Number.isNaN(o)||Number.isNaN(n))return false;return a>=o&&a<=n}});this.registerFunction({name:"collectValuesFrom",args:["source","selector","unique(optional)"],description:"Collects values from an array by selector, optionally keeping only unique ones",example:"collectValuesFrom({orders}, id, true)",handler:(e,t,r)=>{const a=this.projectCollectionValues(e,t).filter(s=>s!==void 0);if(!r)return a;const o=new Set;const n=[];a.forEach(s=>{const l=JSON.stringify(s??null);if(o.has(l))return;o.add(l);n.push(s)});return n}});this.registerFunction({name:"countArray",args:["source","condition(optional)"],description:"Counts array items matching the condition. Without a condition it returns the length.",example:'countArray({tasks}, status == "OPEN")',handler:(e,t)=>this.filterCollectionByPredicate(e,t).length});this.registerFunction({name:"countInArray",args:["source","condition(optional)"],description:"Alias for countArray function",example:'countInArray({tasks}, status == "OPEN")',handler:(e,t)=>this.filterCollectionByPredicate(e,t).length});this.registerFunction({name:"filterArray",args:["source","condition"],description:"Returns the array items matching the condition",example:'filterArray({users}, role == "ADMIN")',handler:(e,t)=>this.filterCollectionByPredicate(e,t)});this.registerFunction({name:"findInArray",args:["source","condition"],description:"Returns the first array item matching the condition",example:"findInArray({products}, id == {el5})",handler:(e,t)=>this.filterCollectionByPredicate(e,t)[0]??null});this.registerFunction({name:"existsInArray",args:["source","condition"],description:"True if at least one array item matches the condition",example:'existsInArray({items}, status == "ACTIVE")',handler:(e,t)=>this.filterCollectionByPredicate(e,t).length>0});this.registerFunction({name:"sumArray",args:["source","selector(optional)"],description:"Sums a field over every array item. Without a selector it sums the values themselves.",example:"sumArray({orderItems}, price)",handler:(e,t)=>this.projectCollectionNumbers(e,t).reduce((r,a)=>r+a,0)});this.registerFunction({name:"sumInArray",args:["source","selector(optional)"],description:"Alias for sumArray function",example:"sumInArray({el1}, el5[].el7[].el8)",handler:(e,t)=>this.projectCollectionNumbers(e,t).reduce((r,a)=>r+a,0)});this.registerFunction({name:"avgArray",args:["source","selector(optional)"],description:"Averages a field over every array item",example:"avgArray({orderItems}, price)",handler:(e,t)=>{const r=this.projectCollectionNumbers(e,t);return r.length===0?0:r.reduce((a,o)=>a+o,0)/r.length}});this.registerFunction({name:"avgInArray",args:["source","selector(optional)"],description:"Alias for avgArray function",example:"avgInArray({el1}, el5[].el6)",handler:(e,t)=>{const r=this.projectCollectionNumbers(e,t);return r.length===0?0:r.reduce((a,o)=>a+o,0)/r.length}});this.registerFunction({name:"minArray",args:["source","selector(optional)"],description:"Finds the smallest number over every array item",example:"minArray({orderItems}, price)",handler:(e,t)=>{const r=this.projectCollectionNumbers(e,t);return r.length===0?0:Math.min(...r)}});this.registerFunction({name:"minInArray",args:["source","selector(optional)"],description:"Alias for minArray function",example:"minInArray({el1}, el5[].el6)",handler:(e,t)=>{const r=this.projectCollectionNumbers(e,t);return r.length===0?0:Math.min(...r)}});this.registerFunction({name:"maxArray",args:["source","selector(optional)"],description:"Finds the largest number over every array item",example:"maxArray({orderItems}, price)",handler:(e,t)=>{const r=this.projectCollectionNumbers(e,t);return r.length===0?0:Math.max(...r)}});this.registerFunction({name:"maxInArray",args:["source","selector(optional)"],description:"Alias for maxArray function",example:"maxInArray({el1}, el5[].el6)",handler:(e,t)=>{const r=this.projectCollectionNumbers(e,t);return r.length===0?0:Math.max(...r)}});this.registerFunction({name:"mapArray",args:["source","selector"],description:"Projects every array item through a field or expression",example:"mapArray({users}, name)",handler:(e,t)=>this.projectCollectionValues(e,t)});this.registerFunction({name:"getFirst",args:["source","condition(optional)"],description:"Returns the first array item, optionally the first one matching a condition",example:'getFirst({tasks}, status == "OPEN")',handler:(e,t)=>this.filterCollectionByPredicate(e,t)[0]??null});this.registerFunction({name:"getLast",args:["source","condition(optional)"],description:"Returns the last array item, optionally the last one matching a condition",example:'getLast({tasks}, status == "OPEN")',handler:(e,t)=>{const r=this.filterCollectionByPredicate(e,t);return r.length>0?r[r.length-1]:null}});this.registerFunction({name:"getLabel",args:["element","value(optional)"],description:"Returns the displayed label of a choice-based element instead of its stored value",example:"getLabel({select1})",handler:(e,t)=>this.resolveElementOptionLabel(e,t)});this.registerFunction({name:"getValue",args:["element"],description:"Returns the stored value of an element",example:"getValue({select1})",handler:e=>{const t=this.resolveElementReference(e);return t?this.resolveElementCurrentValue(t):void 0}});this.registerFunction({name:"firstInArray",args:["source","selector(optional)"],description:"Returns the first value of an array, projected through the selector",example:"firstInArray({el1}, el5[].el6)",handler:(e,t)=>{const r=this.projectCollectionValues(e,t);return r.length>0?r[0]:void 0}});this.registerFunction({name:"lastInArray",args:["source","selector(optional)"],description:"Returns the last value of an array, projected through the selector",example:"lastInArray({el1}, el5[].el6)",handler:(e,t)=>{const r=this.projectCollectionValues(e,t);return r.length>0?r[r.length-1]:void 0}});this.registerFunction({name:"joinArray",args:["source","selector(optional)","separator(optional)"],description:"Joins the projected array values into text",example:'joinArray({users}, name, ", ")',handler:(e,t,r)=>this.projectCollectionValues(e,t).map(a=>String(a??"")).join(String(r??","))});this.registerFunction({name:"joinInArray",args:["source","selector(optional)","separator(optional)"],description:"Alias for joinArray function",example:'joinInArray({el1}, el5[].el6, ", ")',handler:(e,t,r)=>this.projectCollectionValues(e,t).map(a=>String(a??"")).join(String(r??","))});this.registerFunction({name:"today",args:[],description:"Returns today's date in YYYY-MM-DD format",example:"today()",handler:()=>this.toLocalDateString(new Date)});this.registerFunction({name:"now",args:[],description:"Returns current date-time in ISO format",example:"now()",handler:()=>new Date().toISOString()});this.registerFunction({name:"date",args:["value","mode"],description:"Normalizes a date (default YYYY-MM-DD, mode: iso|datetime|timestamp)",example:'date({createdAt}, "iso")',handler:(e,t)=>{const r=this.resolveDateInput(e,true);if(!r)return"";const a=String(t??"").trim().toLowerCase();if(a==="iso"||a==="datetime")return r.toISOString();if(a==="timestamp")return r.getTime();return this.toLocalDateString(r)}});this.registerFunction({name:"day",args:["value"],description:"Returns day of month (1-31)",example:"day(today())",handler:e=>{const t=this.resolveDateInput(e,true);return t?t.getDate():0}});this.registerFunction({name:"month",args:["value"],description:"Returns month number (1-12)",example:"month(today())",handler:e=>{const t=this.resolveDateInput(e,true);return t?t.getMonth()+1:0}});this.registerFunction({name:"year",args:["value"],description:"Returns year",example:"year(today())",handler:e=>{const t=this.resolveDateInput(e,true);return t?t.getFullYear():0}});this.registerFunction({name:"weekDay",args:["value","locale","style"],description:"Returns day of week name (long/short/narrow)",example:'weekDay(today(), "lt-LT", "long")',handler:(e,t,r)=>{const a=this.resolveDateInput(e,true);if(!a)return"";const o=String(t??"").trim()||"lt-LT";const n=String(r??"").trim().toLowerCase();const s=n==="short"||n==="narrow"?n:"long";try{return new Intl.DateTimeFormat(o,{weekday:s}).format(a)}catch{return new Intl.DateTimeFormat("lt-LT",{weekday:s}).format(a)}}});this.registerFunction({name:"weekDayIndex",args:["value"],description:"Returns day of week index (Monday=1, Sunday=7)",example:"weekDayIndex(today())",handler:e=>{const t=this.resolveDateInput(e,true);if(!t)return 0;const r=t.getDay();return r===0?7:r}});this.registerFunction({name:"isWeekend",args:["value"],description:"True if date is a weekend",example:"isWeekend(today())",handler:e=>{const t=this.resolveDateInput(e,true);if(!t)return false;const r=t.getDay();return r===0||r===6}});this.registerFunction({name:"addDays",args:["value","days"],description:"Adds days to a date and returns YYYY-MM-DD",example:"addDays(today(), 7)",handler:(e,t)=>{const r=this.resolveDateInput(e,true);if(!r)return"";const a=this.coerceInteger(t);r.setDate(r.getDate()+a);return this.toLocalDateString(r)}});this.registerFunction({name:"dateDiffDays",args:["from","to"],description:"Returns day difference between two dates",example:"dateDiffDays({startDate}, {endDate})",handler:(e,t)=>{const r=this.resolveDateInput(e,false);const a=this.resolveDateInput(t,false);if(!r||!a)return 0;const o=Date.UTC(r.getFullYear(),r.getMonth(),r.getDate());const n=Date.UTC(a.getFullYear(),a.getMonth(),a.getDate());return Math.trunc((n-o)/864e5)}});this.registerFunction({name:"startOfWeek",args:["value","weekStartsOn"],description:"Returns start of week YYYY-MM-DD (default Monday)",example:"startOfWeek(today(), 1)",handler:(e,t)=>{const r=this.resolveDateInput(e,true);if(!r)return"";const a=this.startOfWeekDate(r,t);return this.toLocalDateString(a)}});this.registerFunction({name:"endOfWeek",args:["value","weekStartsOn"],description:"Returns end of week YYYY-MM-DD (default Monday)",example:"endOfWeek(today(), 1)",handler:(e,t)=>{const r=this.resolveDateInput(e,true);if(!r)return"";const a=this.endOfWeekDate(r,t);return this.toLocalDateString(a)}});this.registerGeneralFunctions()}registerGeneralFunctions(){const e=t=>t.flatMap(r=>this.flattenUnknownValues(r)).map(r=>this.toFiniteNumber(r)).filter(r=>r!==null);this.registerFunction({name:"substring",args:["value","start","end(optional)"],description:"Part of a text from start (0 based) up to, not including, end",example:"substring({personCode}, 0, 1)",handler:(t,r,a)=>{const o=t===null||t===void 0?"":String(t);const n=this.coerceInteger(r);return a===void 0||a===null?o.substring(n):o.substring(n,this.coerceInteger(a))}});this.registerFunction({name:"age",args:["birthDate"],description:"Full years from a date until today",example:"age({birthDate}) >= 18",handler:t=>{const r=this.resolveDateInput(t,false);if(!r)return null;const a=new Date;let o=a.getFullYear()-r.getFullYear();if(a.getMonth()<r.getMonth()||a.getMonth()===r.getMonth()&&a.getDate()<r.getDate())o-=1;return o}});this.registerFunction({name:"roundNumber",args:["value","digits(optional)"],description:"Rounds a number to the given number of decimals (default 0)",example:"roundNumber({price} * 1.21, 2)",handler:(t,r)=>{const a=this.toFiniteNumber(t);if(a===null)return null;const o=10**Math.max(0,Math.min(10,this.coerceInteger(r)));return Math.round((a+Number.EPSILON)*o)/o}});this.registerFunction({name:"min",args:["...values"],description:"Smallest of the numbers given (arrays are flattened)",example:"min({a}, {b}, 100)",handler:(...t)=>{const r=e(t);return r.length===0?null:Math.min(...r)}});this.registerFunction({name:"max",args:["...values"],description:"Largest of the numbers given (arrays are flattened)",example:"max({a}, {b}, 0)",handler:(...t)=>{const r=e(t);return r.length===0?null:Math.max(...r)}});this.registerFunction({name:"sum",args:["...values"],description:"Sum of the numbers given, empty ones count as 0 (arrays are flattened)",example:"sum({grant}, {loan})",handler:(...t)=>e(t).reduce((r,a)=>r+a,0)})}getElementPropertyValue(e,t){const r=String(t??"").trim();if(!r||this.isUnsafePropertyPath(r))return;const a=this.resolveElementReference(e);if(!a)return;if(r==="value")return this.resolveElementCurrentValue(a);return x(a,r)}resolveWriteTargetPath(e,t=false){let r=String(e??"").trim();if(!r)return"";const a=r.match(/^\{([^}]+)\}$/);if(a)r=String(a[1]??"").trim();if(!r)return"";if(r.startsWith("__variables."))return r;if(t||this.isDeclaredRuntimeVariableToken(r))return`__variables.${r}`;const o=this.structureService.flatModelMap[r];return String(o?.dataPath??"").trim()||r}readExpressionWriteTarget(e,t=false){const r=this.resolveWriteTargetPath(e,t);return r?this.dataService.getValue(r):void 0}writeExpressionValue(e,t,r=false){const a=this.resolveWriteTargetPath(e,r);if(!a)return t;const o=P(t);if(a.startsWith("__variables."))return this.writeRuntimeVariableValue(a.slice(12),o);if(j(this.dataService.getValue(a),o))return o;this.dataService.setValue(a,o);return o}writeRuntimeVariableValue(e,t){const r=String(e??"").trim();if(!r)return t;if(j(this.dataService.getValue(`__variables.${r}`),t))return t;const a=this.dataService.getValue("__variables");const o=a&&typeof a==="object"&&!Array.isArray(a)?{...a}:{};o[r]=t;this.dataService.setValue("__variables",o);return t}accumulateExpressionValue(e,t,r=false){const a=(this.toFiniteNumber(this.readExpressionWriteTarget(e,r))??0)+this.flattenUnknownValues(t).reduce((o,n)=>{const s=this.toFiniteNumber(n);return s===null?o:o+s},0);this.writeExpressionValue(e,a,r);return a}appendExpressionValue(e,t,r=false){const a=this.readExpressionWriteTarget(e,r);const o=Array.isArray(a)?[...a]:a===void 0||a===null||a===""?[]:[a];if(Array.isArray(t))t.forEach(n=>o.push(n));else o.push(t);this.writeExpressionValue(e,o,r);return o}setElementPropertyValue(e,t,r){const a=String(t??"").trim();if(!a)return false;if(this.isUnsafePropertyPath(a))return false;const o=this.resolveElementReference(e);if(!o)return false;const n=x(o,a);const s=P(r);if(j(n,s))return true;this.structureService.onElementChanging.fire({schemaPath:String(o.schemaPath??o.dataPath??o.name??""),key:a,newValue:s,oldValue:n,sender:o});xt(o,a,s);this.structureService.onElementChanged.fire({schemaPath:String(o.schemaPath??o.dataPath??o.name??""),key:a,newValue:s,sender:o});this.eventService.afterPropertyChanged.fire({payload:{elementNameOrPath:String(o.dataPath??o.name??o.schemaPath??""),propertyKey:a,value:s}});return true}async runDataSourceValue(e,t){const r=String(e??"").trim();if(!r)return null;const a=this.resolveElementReference(t);const o=this.buildEvaluationContext(this.dataService.getData(),a);try{const n=await At(this.getDataSourceService().getData$(r,true,a??void 0,o,true));await this.publishDataSourceResult(r,n);return n}catch{return null}}readDataSourceValue(e,t){const r=String(e??"").trim();if(!r)return null;this.scheduleDataSourceRefresh(r,t);const a=this.dataSourceExpressionCache.get(r);if(a!==void 0)return a;return this.dataService.getValue(`__dataSource.${r}`)??null}scheduleDataSourceRefresh(e,t){const r=this.dataSourceExpressionRefreshedAt.get(e)??0;if(Date.now()-r<Q.DATA_SOURCE_REFRESH_WINDOW_MS)return;this.dataSourceExpressionRefreshedAt.set(e,Date.now());this.runDataSourceValue(e,t)}async publishDataSourceResult(e,t){const r=this.dataSourceExpressionCache.get(e);if(j(r,t))return;this.dataSourceExpressionCache.set(e,t);await this.dataService.setValue(`__dataSource.${e}`,P(t))}resolveElementOwnValue(e,t){const r=[e,t].filter((a,o,n)=>a&&n.indexOf(a)===o);for(const a of r){const o=this.resolveElementByNameOrPath(a);if(o&&o.value!==void 0)return{value:o.value,model:o};const n=a.search(/[.[]/);if(n<=0)continue;const s=this.resolveElementByNameOrPath(a.slice(0,n));if(!s||s.value===void 0||s.value===null)continue;const l=a.slice(n).replace(/^\./,"");const h=x(s.value,l);if(h!==void 0)return{value:h,model:null}}return{value:void 0,model:null}}resolveElementReference(e){if(e&&typeof e==="object"){const r=e;const a=String(r["dataPath"]??r["name"]??r["schemaPath"]??"").trim();if(a)return this.resolveElementByNameOrPath(a)}const t=String(e??"").trim();if(!t)return null;return this.resolveElementByNameOrPath(t)}resolveElementByNameOrPath(e){const t=String(e??"").trim();if(!t)return null;const r=this.structureService.flatModelMap[t];if(r)return r;const a=Object.values(this.structureService.flatModelMap??{}).find(s=>String(s?.name??"").trim()===t);if(a)return a;const o=this.structureService.getStructure()?.elements?.[t];if(o)return o;const n=this.structureService.getPreviewStructure()?.elements?.[t];if(n)return n;return null}getDataSourceService(){return this.injector.get(Ze)}buildSelfExpressionContext(e){if(!e)return null;return{name:String(e.name??"").trim()||null,dataPath:String(e.dataPath??"").trim()||null,schemaPath:String(e.schemaPath??"").trim()||null,type:String(e.type??"").trim()||null,parentName:String(e.parentElement?.name??"").trim()||null,parentDataPath:String(e.parentElement?.dataPath??"").trim()||null}}splitPropertyPath(e){return String(e??"").trim().replace(/\[(\w+)\]/g,".$1").split(".").map(t=>t.trim()).filter(t=>t.length>0)}isUnsafePropertyPath(e){const t=String(e??"").toLowerCase();if(t.includes("__proto__")||t.includes("constructor")||t.includes("prototype"))return true;return this.splitPropertyPath(e).some(r=>r==="__proto__"||r==="constructor"||r==="prototype")}normalizeToArray(e){if(Array.isArray(e))return e;if(typeof e==="string"){const t=e.trim();if(!t)return[];return t.split(",").map(r=>r.trim()).filter(r=>r.length>0)}if(e===null||e===void 0)return[];return[e]}resolveExpressionValue(e,t){if(e===null||e===void 0)return;if(String(t?.type??"").trim().toLowerCase()!=="number")return e;if(typeof e==="number")return Number.isFinite(e)?e:void 0;if(typeof e!=="string")return e;const r=e.trim();if(!r)return;const a=String(t?.["visualFormatLocale"]??"").trim();const o=this.localeFormatService.parseNumber(r,a);return o===null?void 0:o}evaluateItemExpression(e,t,r){const a=String(r??"").trim();if(!a)return;const o=e&&typeof e==="object"&&!Array.isArray(e)?e:{};const n=this.activeLocalContexts[this.activeLocalContexts.length-1]??{};const s={...this.dataService.getData()??{},...n,...o,item:e,row:e,index:t};if(s["value"]===void 0)s["value"]=e;try{return this.jexl.evalSync(a,s)}catch{return}}matchesArrayCondition(e,t,r){if(r===null||r===void 0)return true;if(typeof r==="boolean")return this.isScalarValue(e)?e===r:r;if(typeof r==="number")return this.valuesMatch(e,r);const a=String(r).trim();if(!a)return true;if(this.isPredicateLikeSelector(a))return Boolean(this.evaluateItemExpression(e,t,a));if(this.isScalarValue(e)){if(this.isFieldPath(a)){const o=this.evaluateItemExpression(e,t,a);if(o!==void 0)return this.valuesMatch(e,o)}return this.valuesMatch(e,a)}if(this.isFieldPath(a))return Boolean(x(e,a));return Boolean(this.evaluateItemExpression(e,t,a))}filterCollectionByPredicate(e,t){const r=this.resolveCollectionSource(e);if(t===null||t===void 0)return r;if(String(t).trim()==="")return r;return r.filter((a,o)=>this.matchesArrayCondition(a,o,t))}isScalarValue(e){return typeof e==="string"||typeof e==="number"||typeof e==="boolean"||e===null||e===void 0}valuesMatch(e,t){if(e===t)return true;if(e===null||e===void 0||t===null||t===void 0)return false;if(typeof e==="object"||typeof t==="object")return j(e,t);return String(e)===String(t)}isFieldPath(e){return/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\[\d+\])*$/.test(e)}projectItemValue(e,t,r){if(t===null||t===void 0)return e;const a=String(t).trim();if(!a)return e;if(a.includes("[]")){const o=this.resolveWildcardSelectorValues(e,a);return o.length===1?o[0]:o}if(this.isFieldPath(a))return e&&typeof e==="object"?x(e,a):void 0;return this.evaluateItemExpression(e,r,a)}projectCollectionValues(e,t){return this.resolveCollectionSource(e).map((r,a)=>this.projectItemValue(r,t,a))}projectCollectionNumbers(e,t){const r=[];this.projectCollectionValues(e,t).forEach(a=>{this.flattenUnknownValues(a).forEach(o=>{const n=this.toFiniteNumber(o);if(n!==null)r.push(n)})});return r}isPredicateLikeSelector(e){const t=String(e??"").trim();if(!t)return false;return/(==|!=|>=|<=|>|<|&&|\|\||\s+in\s+|!|\?|\(|\+|\*|\/)/.test(t)}resolveElementOptionLabel(e,t){const r=this.resolveElementReference(e);if(!r)return t===void 0?this.stringifyTranslationKey(e):t;const a=t===void 0?this.resolveElementCurrentValue(r):t;if(a===null||a===void 0||a==="")return"";if(Array.isArray(a))return a.map(o=>this.resolveSingleOptionLabel(r,o));return this.resolveSingleOptionLabel(r,a)}resolveSingleOptionLabel(e,t){const r=e["options"];if(!Array.isArray(r))return t;const a=e["dataSource"];const o=String(a?.["optionValue"]??"").trim()||"value";const n=String(a?.["optionLabel"]??"").trim()||"label";const s=r.find(h=>{if(!h||typeof h!=="object")return String(h??"")===String(t??"");return String(h[o]??"")===String(t??"")});if(!s)return t;if(!s||typeof s!=="object")return s;const l=s[n];return l===void 0||l===null||l===""?t:l}resolveElementCurrentValue(e){const t=String(e?.dataPath??"").trim();if(t){const r=this.dataService.getValue(t);if(r!==void 0)return r}return e?.value}resolveCollectionSource(e){if(Array.isArray(e))return e;if(e===null||e===void 0)return[];if(typeof e==="string"){const t=e.trim();if(!t)return[];const r=this.dataService.getValue(this.resolveExpressionLookupPath(t));if(Array.isArray(r))return r;return r===void 0?[]:[r]}if(typeof e==="object")return[e];return[]}resolveWildcardSelectorValues(e,t){const r=t.split(".").map(o=>o.trim()).filter(o=>o.length>0);if(r.length===0)return[];let a=[e];for(const o of r){const n=o.match(/^(.*)\[\]$/);if(n){const l=String(n[1]??"").trim();const h=[];a.forEach(m=>{const p=l?x(m,l):m;if(!Array.isArray(p))return;p.forEach(y=>{h.push(y)})});a=h;continue}const s=[];a.forEach(l=>{const h=x(l,o);if(h!==void 0)s.push(h)});a=s}return a}flattenUnknownValues(e){if(!Array.isArray(e))return[e];const t=[];e.forEach(r=>{this.flattenUnknownValues(r).forEach(a=>{t.push(a)})});return t}toFiniteNumber(e){if(typeof e==="number")return Number.isFinite(e)?e:null;if(typeof e!=="string")return null;const t=e.trim();if(!t)return null;const r=this.localeFormatService.parseNumber(t,"");if(r!==null&&Number.isFinite(r))return r;const a=Number(t.replace(/\s+/g,"").replace(",","."));return Number.isFinite(a)?a:null}toLocalDateString(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}resolveDateInput(e,t){if(e===null||e===void 0||String(e??"").trim()==="")return t?new Date:null;if(e instanceof Date)return Number.isFinite(e.getTime())?new Date(e.getTime()):null;if(typeof e==="number"){const s=new Date(e);return Number.isFinite(s.getTime())?s:null}const r=String(e??"").trim();if(!r)return t?new Date:null;const a=r.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(a){const s=Number(a[1]);const l=Number(a[2]);const h=Number(a[3]);const m=new Date(s,l-1,h);return Number.isFinite(m.getTime())?m:null}const o=new Date(r);if(Number.isFinite(o.getTime()))return o;const n=Number(r);if(Number.isFinite(n)){const s=new Date(n);return Number.isFinite(s.getTime())?s:null}return null}coerceInteger(e){const t=Number(e);if(!Number.isFinite(t))return 0;return Math.trunc(t)}startOfWeekDate(e,t){const r=this.normalizeWeekStartsOn(t);const a=new Date(e.getFullYear(),e.getMonth(),e.getDate());const o=(a.getDay()-r+7)%7;a.setDate(a.getDate()-o);return a}endOfWeekDate(e,t){const r=this.startOfWeekDate(e,t);const a=new Date(r.getFullYear(),r.getMonth(),r.getDate());a.setDate(a.getDate()+6);return a}normalizeWeekStartsOn(e){const t=Number(e);if(!Number.isFinite(t))return 1;const r=Math.trunc(t);if(r<0||r>6)return 1;return r}debugExpressionValue(e,t){const r=String(t??"").trim();const a=r?`[NgxViewBuilder][Expr][${r}]`:"[NgxViewBuilder][Expr]";try{console.log(a,e)}catch{}return e}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:Q,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:Q,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:we,decorators:[{type:k,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});var xe=class{static setItem(i,e){sessionStorage.setItem(i,e)}static getItem(i){return sessionStorage.getItem(i)}static removeItem(i){sessionStorage.removeItem(i)}};const mr=new vt("NGX_VIEW_BUILDER_PROJECT_LAYER");var Ze=class he{static WEBSOCKET_RECONNECT_DELAYS_MS=[1e3,2e3,5e3,1e4,3e4];static WEBSOCKET_MAX_BUFFERED_VALUES=500;maxObservableCacheEntries=100;pendingReturnReloadsStorageKey="ngx-view-builder.pending-return-reloads.v1";pendingReturnReloadTtlMs=18e5;http=D(Ar);structureService=D(ue);dataService=D(q);expressionService=D(we);router=D(Dr,{optional:true});observableCache=new Map;liveSocketConnections=new Map;liveSockets=new Map;websocketAuthorizer=null;projectLayers=D(mr,{optional:true})??[];navigationSubscription=null;onDataSourceLoading=new g;onDataSourceLoaded=new g;onDataSourceLoadFailed=new g;onDataSourceReloaded=new g;constructor(){if(!this.router)return;this.navigationSubscription=this.router.events.pipe(Dt(e=>e instanceof Pr)).subscribe(()=>{this.applyPendingReturnReloads()})}ngOnDestroy(){this.navigationSubscription?.unsubscribe();this.navigationSubscription=null}resetObservableCache(){this.observableCache.clear()}queueReturnReloadForElements(e){const t=this.normalizeElementNames(e);if(t.length===0||typeof sessionStorage==="undefined")return;const r=this.readPendingReturnReloadEntries();r.push({id:`reload-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,elementNames:t,createdAt:Date.now()});this.writePendingReturnReloadEntries(r)}async applyPendingReturnReloads(){const e=this.readPendingReturnReloadEntries();if(e.length===0)return;const t=new Set;for(const a of e)if(await this.applyPendingReturnReloadEntry(a))t.add(a.id);if(t.size===0)return;const r=this.readPendingReturnReloadEntries().filter(a=>!t.has(a.id));this.writePendingReturnReloadEntries(r)}reloadDataSource$(e,t,r){const a=typeof e==="string"?e:e?.name;return this.getData$(e,true,t,r).pipe(de(o=>{if(a&&t)this.notifyContextElementDataSourceChanged(a,t,o);if(a)this.onDataSourceReloaded.fire({sourceName:a,sourceType:this.getSource(a)?.type??null,contextElementName:String(t?.name??"").trim()||null,contextElementDataPath:String(t?.dataPath??"").trim()||null,forceReload:true,fromCache:false,runtimeContext:r?{...r}:null,timestamp:Date.now(),result:o})}))}getData$(e,t=false,r,a,o=false){return this.getDataInternal$(e,t,r,a,o,false)}getDataStream$(e,t=false,r,a,o=false){return this.getDataInternal$(e,t,r,a,o,true)}setWebsocketAuthorizer(e){this.websocketAuthorizer=typeof e==="function"?e:null}sendWebsocketMessage(e,t,r,a){const o=String(e??"").trim();const n=o?this.getSource(o):void 0;if(!n){console.warn(`[DataSourceService] Data source "${o}" not found.`);return false}if(this.normalizeSourceType(n.type)!==C.Websocket){console.warn(`[DataSourceService] Data source "${o}" is not a websocket.`);return false}let s;try{s=this.prepareSource(n,null,r,a)}catch{return false}if(s.type!==C.Websocket)return false;const l=this.buildWebsocketConnectionKey(s);const h=this.liveSockets.get(l);if(!h||h.readyState!==WebSocket.OPEN){console.warn(`[DataSourceService] Websocket source "${o}" is not connected, message dropped.`);return false}try{h.send(typeof t==="string"?t:JSON.stringify(t??{}));return true}catch{return false}}getDataInternal$(e,t,r,a,o,n){if(Ee.isEditor()&&!o)return Pt([]);const s=Date.now();const l=String(r?.name??"").trim()||null;const h=String(r?.dataPath??"").trim()||null;const m=a?{...a}:null;const p=typeof e==="string"?e:e?.name;if(!p)return ne(()=>new Error("Data source name not found."));const y=this.getSource(p);if(!y){const T=new Error(`Data source "${p}" nerastas.`);this.onDataSourceLoadFailed.fire({sourceName:p,sourceType:null,contextElementName:l,contextElementDataPath:h,forceReload:t,fromCache:false,runtimeContext:m,startedAt:s,finishedAt:s,durationMs:0,error:T,errorMessage:T.message});return ne(()=>T)}const v=typeof e==="string"?null:e;let A;try{A=this.prepareSource(y,v,r,a)}catch(T){const V=T instanceof Error?T.message:"Failed to prepare data source.";const Ae=new Error(V);const St=Date.now();this.onDataSourceLoadFailed.fire({sourceName:p,sourceType:this.normalizeSourceType(y.type),contextElementName:l,contextElementDataPath:h,forceReload:t,fromCache:false,runtimeContext:m,startedAt:s,finishedAt:St,durationMs:St-s,error:Ae,errorMessage:Ae.message});return ne(()=>Ae)}const w={sourceName:p,sourceType:A.type,contextElementName:l,contextElementDataPath:h,forceReload:t,runtimeContext:m};const S=n||A.type===C.Websocket;const I=S?`${A.cacheKey}|continuous`:A.cacheKey;const z=A.type===C.Websocket;const yt=!t||z?this.getObservableCacheEntry(I):null;if(yt){this.onDataSourceLoading.fire({...w,fromCache:true,startedAt:s});return yt.pipe(de({next:T=>{const V=Date.now();this.onDataSourceLoaded.fire({...w,fromCache:true,startedAt:s,finishedAt:V,durationMs:V-s,result:P(T)})},error:T=>{const V=Date.now();this.onDataSourceLoadFailed.fire({...w,fromCache:true,startedAt:s,finishedAt:V,durationMs:V-s,error:T,errorMessage:T instanceof Error?T.message:"Failed to fetch data source data."})}}))}this.onDataSourceLoading.fire({...w,fromCache:false,startedAt:s});const bt=this.executePreparedSource(A,S).pipe(de({next:T=>{const V=Date.now();this.onDataSourceLoaded.fire({...w,fromCache:false,startedAt:s,finishedAt:V,durationMs:V-s,result:P(T)})},error:T=>{const V=Date.now();this.onDataSourceLoadFailed.fire({...w,fromCache:false,startedAt:s,finishedAt:V,durationMs:V-s,error:T,errorMessage:T instanceof Error?T.message:"Failed to fetch data source data."})}}),Tt({bufferSize:1,refCount:true}),Tr(T=>{this.deleteObservableCacheEntry(I);return ne(()=>T)}));this.setObservableCacheEntry(I,bt);return bt}request(e,t,r,a){const o=this.normalizeRequestMethod(e);if(!["GET","POST","PUT","PATCH","DELETE"].includes(o))return ne(()=>new Error(`HTTP metodas "${e}" nepalaikomas.`));const n={responseType:this.normalizeResponseType(a?.responseType),observe:a?.observeResponse?"response":"body"};if(r!==void 0&&o!=="GET")n["body"]=r??{};return this.http.request(o,t,n)}getSource(e){return this.structureService.getPreviewStructure()?.dataSources?.find(t=>t.name===e)??this.structureService.getStructure()?.dataSources?.find(t=>t.name===e)}prepareSource(e,t,r,a){const o=this.normalizeSourceType(e.type);if(o===C.Local)return this.prepareLocalSource(e,r,a);if(o===C.Route)return this.prepareRouteSource(e);if(o===C.Websocket)return this.prepareWebsocketSource(e,t,r,a);return this.prepareRestSource(e,t,r,a)}prepareRestSource(e,t,r,a){const o=String(e.params?.["method"]??"GET").trim().toUpperCase();const n=this.normalizeRequestMethod(o);const s=String(e.params?.["url"]??"").trim();if(!s)throw new Error(`Data source "${e.name}" does not have a URL.`);const l=this.resolveParamsForElement(t,r,a);const{url:h,hasMissingParams:m}=this.resolveUrlTemplate(s,l,a);if(m)return{type:C.Local,data:[],cacheKey:`${e.name}|missing-param|${s}`};const p=this.normalizePayloadTemplate(e.params?.["body"]??e.params?.["payload"]??void 0,e.name);const y=this.replacePlaceholders(p,l,a);const v=this.mergeTableRequestPayload(o,y,r,a);const A=this.resolvePreparedResponseType(e,a);const w=this.resolvePreparedObserveResponse(e,a);return{type:C.Rest,method:n,url:h,payload:v,responseType:A,observeResponse:w,cacheKey:`${e.name}|${o}|${h}|${A}|${w}|${JSON.stringify(v??null)}`}}prepareWebsocketSource(e,t,r,a){const o=String(e.params?.["url"]??"").trim();if(!o)throw new Error(`Data source "${e.name}" does not have a URL.`);const n=this.resolveParamsForElement(t,r,a);const{url:s,hasMissingParams:l}=this.resolveUrlTemplate(o,n,a);if(l)return{type:C.Local,data:[],cacheKey:`${e.name}|websocket|missing-param|${o}`};const h=this.buildRuntimeContext(r,a);const m=this.normalizePayloadTemplate(e.params?.["message"]??void 0,e.name);const p=this.replacePlaceholders(this.resolveTemplateExpressions(m,r,h),n,h);const y=String(e.params?.["protocols"]??"").split(",").map(w=>String(w??"").trim()).filter(w=>w.length>0);const v=String(e.params?.["messagePath"]??"").trim();const A=this.normalizeWebsocketMessageMode(e.params?.["messageMode"]);return{type:C.Websocket,name:String(e.name??"").trim(),url:s,protocols:y,message:p,messagePath:v,messageMode:A,cacheKey:`${e.name}|websocket|${s}|${y.join(",")}|${v}|${A}|${JSON.stringify(p??null)}`}}prepareLocalSource(e,t,r){if(String(e.params?.["localMode"]??"json").toLowerCase()==="datapath"){const m=String(e.params?.["dataPath"]??"").trim();if(!m)return{type:C.Local,data:[],cacheKey:`${e.name}|local|datapath|missing-path`};const p=this.resolveContextualDataPath(m,t);const y=this.dataService.getValue(p);return{type:C.Local,data:y!==void 0?y:this.resolvePathValue(m,r),cacheKey:`${e.name}|local|datapath|${p}`}}const a=e.params?.["dataJson"]??e.params?.["data"]??"[]";let o=a;if(typeof a==="string"){const m=a.trim();if(!m)o=[];else try{o=JSON.parse(m)}catch{throw new Error(`Data source "${e.name}" local JSON is invalid.`)}}const n=this.buildRuntimeContext(t,r);const s=this.resolveTemplateExpressions(o,t,n);const l=this.replacePlaceholders(s,new Map,n);const h=this.applyLocalDataFunction(e,l,t,n);return{type:C.Local,data:h,cacheKey:`${e.name}|local|${JSON.stringify(a)}|${t?.dataPath??""}`}}prepareRouteSource(e){const t=String(e.params?.["routeDataKey"]??"").trim();const r=String(e.params?.["routeDataPath"]??"").trim();if(!t)return{type:C.Route,data:null,cacheKey:`${e.name}|route|missing-key`};const a=this.findRouteData(t);const o=r?x(a,r):a;return{type:C.Route,data:o,cacheKey:`${e.name}|route|${t}|${r}`}}executePreparedSource(e,t=false){if(e.type===C.Rest)return this.request(e.method,e.url,e.payload,{responseType:e.responseType,observeResponse:e.observeResponse});if(e.type===C.Websocket)return this.openWebsocketStream$(e);return Pt(P(e.data))}openWebsocketStream$(e){const t=this.resolveSharedWebsocketConnection$(e).pipe(de(r=>this.publishWebsocketStatus(e,r)),Dt(r=>r.kind==="message"),De(r=>e.messagePath?x(r.payload,e.messagePath):r.payload));if(e.messageMode===K.PushValuesInArray)return t.pipe(Mr((r,a)=>[...r,P(a)].slice(-he.WEBSOCKET_MAX_BUFFERED_VALUES),[]),De(r=>P(r)));return t.pipe(De(r=>P(r)))}resolveSharedWebsocketConnection$(e){const t=this.buildWebsocketConnectionKey(e);const r=this.liveSocketConnections.get(t);if(r)return r;const a=this.createWebsocketConnection$(e,t).pipe(Er({delay:(o,n)=>Cr(this.resolveWebsocketRetryDelay(n)),resetOnSuccess:true}),Tt({bufferSize:1,refCount:true}));this.liveSocketConnections.set(t,a);return a}buildWebsocketConnectionKey(e){return`${e.url}|${e.protocols.join(",")}|${JSON.stringify(e.message??null)}`}resolveWebsocketRetryDelay(e){const t=he.WEBSOCKET_RECONNECT_DELAYS_MS;return t[Math.min(Math.max(e,1),t.length)-1]}publishWebsocketStatus(e,t){const r=String(e.name??"").trim();if(!r)return;const a=`__socket.${r}`;const o=this.dataService.getValue(a);const n=Boolean(o?.["connected"]);const s=Number(o?.["reconnects"]??0);if(t.kind==="status"){const l={url:e.url,connected:t.connected,lastMessageAt:o?.["lastMessageAt"]??null,reconnects:t.connected&&!n&&o?s+1:s};this.dataService.setValue(a,l);return}this.dataService.setValue(a,{url:e.url,connected:true,lastMessageAt:Date.now(),reconnects:s})}createWebsocketConnection$(e,t){return new xr(r=>{if(typeof WebSocket==="undefined"){r.error(new Error("WebSocket is not supported in this environment."));return}let a=null;let o=false;const n=()=>{if(this.liveSockets.get(t)===a)this.liveSockets.delete(t)};const s=()=>{o=true;n();if(!a)return;if(a.readyState===WebSocket.OPEN||a.readyState===WebSocket.CONNECTING)a.close();a=null};this.resolveWebsocketConnection(e).then(l=>{if(o)return;const h=l.protocols.length>0?new WebSocket(l.url,l.protocols):new WebSocket(l.url);a=h;h.onopen=()=>{this.liveSockets.set(t,h);r.next({kind:"status",connected:true});if(e.message===null||e.message===void 0||e.message==="")return;h.send(typeof e.message==="string"?e.message:JSON.stringify(e.message))};h.onmessage=m=>{r.next({kind:"message",payload:this.parseWebsocketPayload(m.data)})};h.onerror=()=>{n();if(o)return;r.next({kind:"status",connected:false});r.error(new Error(`WebSocket source "${l.url}" returned an error.`))};h.onclose=()=>{n();if(o)return;r.next({kind:"status",connected:false});r.error(new Error(`WebSocket source "${l.url}" closed.`))}}).catch(l=>{if(o)return;r.next({kind:"status",connected:false});r.error(l instanceof Error?l:new Error("Failed to open WebSocket connection."))});return s})}resolveWebsocketAuthorizer(){if(this.websocketAuthorizer)return this.websocketAuthorizer;return this.projectLayers.find(e=>typeof e?.authorizeWebsocket==="function")?.authorizeWebsocket??null}async resolveWebsocketConnection(e){const t={url:e.url,protocols:[...e.protocols]};const r=this.resolveWebsocketAuthorizer();if(!r)return t;const a=await r({sourceName:e.name,url:e.url,protocols:[...e.protocols]});if(!a)return t;return{url:String(a.url??"").trim()||t.url,protocols:Array.isArray(a.protocols)?a.protocols.map(o=>String(o??"").trim()).filter(Boolean):t.protocols}}parseWebsocketPayload(e){if(typeof e!=="string")return e;const t=e.trim();if(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]"))try{return JSON.parse(t)}catch{return e}return e}resolveParamsForElement(e,t,r){const a=new Map;this.normalizeParamMappings(e?.params).forEach(o=>{if(o.isPlainValue){a.set(o.name,o.value);return}const n=o.value||o.name;const s=this.resolveContextualDataPath(n,t);let l=this.resolvePathValue(s,r);if(l===void 0&&s!==n)l=this.resolvePathValue(n,r);a.set(o.name,l)});return a}resolveContextualDataPath(e,t){const r=String(e??"").trim().replace(/^\{/,"").replace(/\}$/,"");if(!r)return"";return Qe(t,t&&(r.includes("row.")||r.includes("panel."))?this.expressionService.replacePlaceholder(t,r):r,a=>this.dataService.getValue(a))}normalizeParamMappings(e){if(!Array.isArray(e))return[];return e.map(t=>{const r=t;const a=String(r["name"]??"").trim();if(!a)return null;return{name:a,value:String(r["value"]??""),isPlainValue:Boolean(r["isPlainValue"])}}).filter(t=>t!==null)}resolveUrlTemplate(e,t,r){const a=this.extractParamsFromUrl(e);if(a.length===0)return{url:e,hasMissingParams:false};let o=false;return{url:a.reduce((n,s)=>{const l=t.has(s)?t.get(s):this.resolvePathValue(s,r);const h=this.serializeForUrl(l);if(!h.length)o=true;return n.replaceAll(`{${s}}`,encodeURIComponent(h))},e),hasMissingParams:o}}replacePlaceholders(e,t,r){if(typeof e==="string"){const a=e.match(/^\{([^}]+)\}$/);if(a){const o=String(a[1]??"").trim();return t.has(o)?t.get(o):this.resolvePathValue(o,r)}return e.replace(/\{([^}]+)\}/g,(o,n)=>{const s=t.has(n)?t.get(n):this.resolvePathValue(n,r);return this.serializeForUrl(s)})}if(Array.isArray(e))return e.map(a=>this.replacePlaceholders(a,t,r));if(e&&typeof e==="object"){const a=e;const o={};Object.keys(a).forEach(n=>{o[n]=this.replacePlaceholders(a[n],t,r)});return o}return e}resolveTemplateExpressions(e,t,r){if(typeof e==="string"){const a=String(e??"");const o=a.match(/^\{\{([^}]+)\}\}$/);if(o)return this.evaluateTemplateExpression(String(o[1]??""),t,r);return a.replace(/\{\{([^}]+)\}\}/g,(n,s)=>{const l=this.evaluateTemplateExpression(s,t,r);if(l===null||l===void 0)return"";if(typeof l==="object")try{return JSON.stringify(l)}catch{return""}return String(l)})}if(Array.isArray(e))return e.map(a=>this.resolveTemplateExpressions(a,t,r));if(e&&typeof e==="object"){const a=e;const o={};Object.keys(a).forEach(n=>{o[n]=this.resolveTemplateExpressions(a[n],t,r)});return o}return e}applyLocalDataFunction(e,t,r,a){const o=String(e.params?.["dataFunction"]??e.params?.["localFunction"]??"").trim();if(!o)return t;const n=this.normalizeExpression(o,r);if(!n)return t;try{const s={...a??{},data:t};return this.expressionService.runPropertyConditionSync(s,n)}catch(s){throw new Error(`Data source "${e.name}" dataFunction error: ${s instanceof Error?s.message:"unknown error"}`)}}normalizePayloadTemplate(e,t){if(typeof e!=="string")return e;const r=e.trim();if(!r)return;if(/^\{[^{}]+\}$/.test(r))return r;if(!r.startsWith("{")&&!r.startsWith("["))return e;try{return JSON.parse(r)}catch{throw new Error(`Data source "${t}" body JSON is invalid.`)}}mergeTableRequestPayload(e,t,r,a){if(!this.shouldMergeTableRequest(e,r))return t;const o=this.resolveTableRequestPayload(r,a);if(!o)return t;if(!t||typeof t!=="object"||Array.isArray(t))return o;const n=t;const s=this.normalizePagingParams(n["pagingParams"]);const l=this.normalizeUnknownArray(n["params"]);const h=this.normalizeExtendedParams(n["extendedParams"]);return{...n,pagingParams:s?{...s,...o.pagingParams}:o.pagingParams,params:this.mergeTableParams(l,o.params),extendedParams:this.mergeExtendedParams(h??[],o.extendedParams)}}mergeTableParams(e,t){const r=Array.isArray(e)?[...e]:[];const a=Array.isArray(t)?[...t]:[];if(r.length===0)return a;if(a.length===0)return r;return[...r,...a]}shouldMergeTableRequest(e,t){if(String(e??"").trim().toUpperCase()!=="TABLE-POST")return false;if(!t||typeof t!=="object")return false;const r=t;if(String(r["tableDataSourceName"]??"").trim().length>0)return true;const a=String(r["type"]??"").trim();if(a!==b.LIST_GRID&&a!==b.TABLE)return false;const o=r["dataSource"];return String(o?.["name"]??"").trim().length>0}normalizeRequestMethod(e){const t=String(e??"").trim().toUpperCase();if(t==="TABLE-POST")return"POST";return t}normalizeWebsocketMessageMode(e){return String(e??"").trim().toLowerCase()===K.PushValuesInArray.toLowerCase()?K.PushValuesInArray:K.ReplaceCurrent}normalizeResponseType(e){const t=String(e??"json").trim().toLowerCase();if(t==="text"||t==="blob"||t==="arraybuffer")return t;return"json"}resolvePreparedResponseType(e,t){const r=t&&typeof t==="object"?t["__pfDataSourceResponseType"]:void 0;return this.normalizeResponseType(r??e.params?.["responseType"])}resolvePreparedObserveResponse(e,t){const r=t&&typeof t==="object"?t["__pfObserveResponse"]:void 0;if(typeof r==="boolean")return r;const a=e.params?.["observeResponse"];if(typeof a==="string"){const o=a.trim().toLowerCase();if(!o)return false;return o!=="false"&&o!=="0"&&o!=="off"&&o!=="no"}return Boolean(a)}resolveTableRequestPayload(e,t){const r=this.resolveRequestContextNamespace(e);const a=String(e?.["name"]??"").trim();const o=[];if(t&&typeof t==="object"){if(a)o.push(x(t,`${r}.${a}.request`));o.push(x(t,`${r}.request`))}if(a)o.push(this.dataService.getValue(`${r}.${a}.request`));o.push(this.dataService.getValue(`${r}.request`));for(const n of o){const s=this.normalizeTableRequestPayload(n);if(s)return s}return null}resolveRequestContextNamespace(e){return String(e?.["type"]??"").trim()===b.LIST_GRID?"__listGrid":"__table"}normalizeTableRequestPayload(e){if(!e||typeof e!=="object"||Array.isArray(e))return null;const t=e;const r=this.normalizePagingParams(t["pagingParams"]);const a=this.normalizeUnknownArray(t["params"]);const o=this.normalizeExtendedParams(t["extendedParams"]);if(!r||!a||!o)return null;return{pagingParams:r,params:a,extendedParams:o}}normalizePagingParams(e){if(!e||typeof e!=="object"||Array.isArray(e))return null;const t=e;const r=t["cnt"];const a=Number(r);const o=Number(t["pageSize"]);const n=Number(t["skipRows"]);return{cnt:r===null||r===void 0||r===""?null:Number.isFinite(a)?a:null,orderClause:String(t["orderClause"]??""),pageSize:Number.isFinite(o)&&o>=0?Math.floor(o):0,skipRows:Number.isFinite(n)&&n>=0?Math.floor(n):0,totalCountUsed:Boolean(t["totalCountUsed"])}}normalizeUnknownArray(e){if(!Array.isArray(e))return null;return[...e]}normalizeExtendedParams(e){if(!Array.isArray(e))return null;return e.map(t=>{if(!t||typeof t!=="object"||Array.isArray(t))return null;const r=t;const a=String(r["paramName"]??"").trim();if(!a)return null;return{paramName:a,paramValue:r["paramValue"]}}).filter(t=>t!==null)}mergeExtendedParams(e,t){if(!t||t.length===0)return[...e];const r=new Map;e.forEach(a=>r.set(String(a.paramName??"").trim(),a));t.forEach(a=>r.set(String(a.paramName??"").trim(),a));return Array.from(r.values())}resolvePathValue(e,t){const r=String(e??"").trim().replace(/^\{/,"").replace(/\}$/,"");if(!r)return;if(t&&typeof t==="object"){const o=x(t,r);if(o!==void 0)return o}const a=this.dataService.getValue(r);if(a!==void 0)return a;if(!r.startsWith("__")){const o=this.dataService.getValue(`__variables.${r}`);if(o!==void 0)return o}return a}buildRuntimeContext(e,t){const r=this.dataService.buildRuntimeContext(t);if(e?.dataPath)r["__contextDataPath"]=e.dataPath;return r}evaluateTemplateExpression(e,t,r){const a=this.normalizeExpression(e,t);if(!a)return;try{return this.expressionService.runPropertyConditionSync(r??{},a)}catch{return}}normalizeExpression(e,t){const r=String(e??"").replace(/\{([^}]+)\}/g,(a,o)=>String(o??"").trim()).trim();if(!r)return"";if(!t)return r;return this.expressionService.applyContextToExpression(r,t)}extractParamsFromUrl(e){return Array.from(e.matchAll(/\{([^}]+)\}/g),t=>t[1])}serializeForUrl(e){if(Array.isArray(e)){if(e.length===0)return"";return String(e[0]??"")}if(e===null||e===void 0)return"";return String(e)}findRouteData(e){const t=this.router?.routerState?.snapshot?.root;if(!t)return null;return this.findRouteDataRecursive(t,e)}findRouteDataRecursive(e,t){if(Object.prototype.hasOwnProperty.call(e.data,t))return e.data[t];for(const r of e.children){const a=this.findRouteDataRecursive(r,t);if(a!==void 0)return a}}async applyPendingReturnReloadEntry(e){const t=this.normalizeElementNames(e?.elementNames??[]);if(t.length===0)return true;let r=false;const a=new Set;for(const o of t){const n=this.resolveElementByName(o);if(!n)continue;r=true;const s=this.resolvePrimaryDataSourceName(n);if(!s)continue;const l=`${o}::${s}`;if(a.has(l))continue;a.add(l);try{await At(this.reloadDataSource$(s,n,{__pfReturnReload:true}))}catch(h){console.warn("[DataSourceService] Failed to apply reload-on-return.",{elementName:o,dataSourceName:s,error:h instanceof Error?h.message:h})}}return r}notifyContextElementDataSourceChanged(e,t,r){const a=this.resolvePrimaryDataSourceName(t);if(!a||a!==e)return;const o=this.getSource(e);t["onDataSourceChanged"]?.fire({dataSource:o,result:r})}resolveElementByName(e){const t=String(e??"").trim();if(!t)return null;return this.structureService.getPreviewElement(t)??this.structureService.getElement(t)??null}resolvePrimaryDataSourceName(e){const t=e&&typeof e==="object"?e:null;if(!t)return"";const r=String(t["tableDataSourceName"]??"").trim();if(r)return r;const a=t["dataSource"];if(a&&typeof a==="object"){const o=String(a["name"]??"").trim();if(o)return o}return String(t["dataSourceName"]??"").trim()}normalizeElementNames(e){return Et(e)}readPendingReturnReloadEntries(){if(typeof sessionStorage==="undefined")return[];try{const e=xe.getItem(this.pendingReturnReloadsStorageKey);if(!e)return[];const t=JSON.parse(e);if(!Array.isArray(t))return[];const r=Date.now()-this.pendingReturnReloadTtlMs;return t.map(a=>{if(!a||typeof a!=="object"||Array.isArray(a))return null;const o=a;const n=Number(o["createdAt"]);const s=this.normalizeElementNames(Array.isArray(o["elementNames"])?o["elementNames"]:[]);if(!Number.isFinite(n)||n<r||s.length===0)return null;return{id:String(o["id"]??"").trim()||`reload-${n}`,elementNames:s,createdAt:n}}).filter(a=>a!==null)}catch{return[]}}writePendingReturnReloadEntries(e){if(typeof sessionStorage==="undefined")return;if(!Array.isArray(e)||e.length===0){xe.removeItem(this.pendingReturnReloadsStorageKey);return}xe.setItem(this.pendingReturnReloadsStorageKey,JSON.stringify(e))}normalizeSourceType(e){const t=String(e??C.Rest).trim().toLowerCase();if(t===C.Route||t===C.Local||t===C.Websocket)return t;return C.Rest}getObservableCacheEntry(e){const t=this.observableCache.get(e)??null;if(!t)return null;this.observableCache.delete(e);this.observableCache.set(e,t);return t}setObservableCacheEntry(e,t){if(this.observableCache.has(e))this.observableCache.delete(e);this.observableCache.set(e,t);while(this.observableCache.size>this.maxObservableCacheEntries){const r=this.observableCache.keys().next().value;if(!r)break;this.observableCache.delete(r)}}deleteObservableCacheEntry(e){this.observableCache.delete(e)}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:he,deps:[],target:d.ɵɵFactoryTarget.Injectable});static ɵprov=d.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:he,providedIn:"root"})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:Ze,decorators:[{type:k,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});const et="__nvbTextContext";const da=new Set([b.PAGE,b.EMPTY_BLOCK,b.ROW,"header","spacer","divider","emptyBlock"]);function pa(i){const e=Array.isArray(i.visiblePageEntries)?i.visiblePageEntries:[];e.forEach((t,r)=>{const a=String(t?.page?.name??"").trim();const o=a?i.getElement(a):null;const n=r+1;const s={index:r,number:n,outlineNumber:String(n),total:e.length,sourceIndex:t?.sourceIndex,name:a||void 0,label:oe(o,"label"),title:oe(o,"title")};if(o)Ce(o,{page:s,element:s,index:r,number:n,outlineNumber:s.outlineNumber});at(t?.page?.rows,i.getElement,{page:s,nextFlatQuestionNumber:1})})}function fr(i,e,t,r){if(!i)return;const a=rt(e);const o=a?.question??a?.element;const n=t+1;const s=String(o?.outlineNumber??"").trim();const l={index:t,number:n,outlineNumber:s?`${s}.${n}`:String(n),total:r,sourceIndex:t,name:String(i?.name??"").trim()||void 0,label:oe(i,"label"),title:oe(i,"title")};Ce(i,{...a,parentQuestion:o,question:l,element:l,row:l,panel:{...a?.panel??{},rowIndex:t,rowNumber:n,rowCount:r,rowOutlineNumber:l.outlineNumber},index:t,number:n,outlineNumber:l.outlineNumber})}function tt(i,e){const t=String(e??"").trim();if(!t||!i)return;const r=rt(i);if(!r)return;return x(r,t)}function rt(i){const e=i?.[et];if(!e||typeof e!=="object"||Array.isArray(e))return;return e}function at(i,e,t,r=t.page.outlineNumber){if(!Array.isArray(i)||i.length===0)return;let a=1;i.forEach(o=>{o?.columns?.forEach(n=>{const s=String(n?.elementRef??"").trim();const l=s?e(s):null;if(!l||Boolean(l.hidden))return;const h=ma(l);let m=r;if(h){const p=t.nextFlatQuestionNumber++;const y=`${r}.${a++}`;const v={index:p-1,number:p,outlineNumber:y,name:s||void 0,label:oe(l,"label"),title:oe(l,"title")};Ce(l,{page:t.page,question:v,element:v,index:v.index,number:v.number,outlineNumber:y});it(l,e);m=y}else{Ce(l,{page:t.page,index:t.page.index,number:t.page.number,outlineNumber:t.page.outlineNumber});it(l,e)}at(n?.rows,e,t,m);Object.values(n?.tabRows??{}).forEach(p=>at(p,e,t,m))})})}function it(i,e){const t=String(i?.type??"").trim();if(t!=="dynamicPanel"&&t!=="dynamicTable")return;const r=String(i?.dataPath??"").trim();const a=Array.isArray(i?.value)?i.value:[];const o=i?.template;if(!r||a.length===0||!o||typeof o!=="object")return;const n=Object.entries(o);a.forEach((s,l)=>{n.forEach(([h,m])=>{const p=String(m?.name??h).trim();if(!p)return;const y=e(`${r}[${l}].${p}`);fr(y,i,l,a.length);if(y)it(y,e)})})}function Ce(i,e){i[et]=e}function ma(i){const e=String(i?.type??"").trim();if(!e||da.has(e))return false;return true}function oe(i,e){return String(i?.[e]??"").trim()||void 0}var gr=class ft{uiTranslationService=D(me);transform(e,t){return this.uiTranslationService.translate(e,t)}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:ft,deps:[],target:d.ɵɵFactoryTarget.Pipe});static ɵpipe=d.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"22.2.1",ngImport:d,type:ft,isStandalone:true,name:"uiT",pure:false})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:gr,decorators:[{type:wt,args:[{name:"uiT",pure:false}]}]});var yr=class gt{dataService=D(q);expressionService=D(we);transform(e,t){if(e===null||e===void 0)return"";const r=String(e);if(!r.includes("{"))return r;return r.replace(/\{([^}]+)\}/g,(a,o)=>{const n=tt(t,o);if(n!==void 0)return this.stringifyValue(n);const s=this.resolvePath(o,t);if(!s)return"";const l=this.resolveTokenValue(s,t);return this.stringifyValue(l)})}resolvePath(e,t){const r=String(e??"").trim();if(!r)return"";if(!t||!this.isElementContext(t))return r;const a=Qe(t,r,o=>this.dataService.getValue(o));if(a&&a!==r)return a;if(r.includes("row.")||r.includes("panel."))return this.expressionService.replacePlaceholder(t,r);return r}resolveTokenValue(e,t){const r=tt(t,e);if(r!==void 0)return r;const a=this.dataService.getValue(e);if(a!==void 0)return a;const o=this.resolveRuntimeVariableValue(e);if(o!==void 0)return o;if(!this.isElementContext(t))return a;try{const n=this.expressionService.applyContextToExpression(e,t);return this.expressionService.runPropertyConditionSync(this.buildEvaluationContext(),n)}catch{return a}}isElementContext(e){if(!e)return false;if(typeof e["name"]==="string")return true;if(typeof e["dataPath"]==="string")return true;return!!e["parentElement"]}resolveRuntimeVariableValue(e){const t=String(e??"").trim();if(!t||t.startsWith("__"))return;return this.dataService.getValue(`__variables.${t}`)}buildEvaluationContext(){const e=this.dataService.getData();const t=this.dataService.buildRuntimeContext(void 0,e);const r=x(t,"__variables");if(!r||typeof r!=="object"||Array.isArray(r))return t;Object.entries(r).forEach(([a,o])=>{const n=String(a??"").trim();if(!n||n==="route"||n==="external"||Object.prototype.hasOwnProperty.call(t,n))return;t[n]=o});return t}stringifyValue(e){if(e===null||e===void 0)return"";if(Array.isArray(e)){const t=e.filter(r=>r===null||r===void 0||typeof r==="string"||typeof r==="number"||typeof r==="boolean");if(t.length===e.length)return t.map(r=>String(r??"")).join(", ");try{return JSON.stringify(e)}catch{return""}}if(typeof e==="object")try{return JSON.stringify(e)}catch{return""}return String(e)}static ɵfac=d.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:gt,deps:[],target:d.ɵɵFactoryTarget.Pipe});static ɵpipe=d.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"22.2.1",ngImport:d,type:gt,isStandalone:true,name:"dynamicText",pure:false})};d.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:d,type:yr,decorators:[{type:wt,args:[{name:"dynamicText",standalone:true,pure:false}]}]});export{M as $,Fe as $t,qe as A,Bt as At,er as B,Ur as Bt,Ye as C,Yr as Ct,hr as D,$ as Dt,U as E,Y as Et,or as F,_e as Ft,Qt as G,Ve as Gt,X as H,W as Ht,ir as I,Wr as It,Gt as J,Ne as Jt,Xt as K,Oe as Kt,ar as L,kt as Lt,lr as M,zt as Mt,sr as N,qr as Nt,ur as O,f as Ot,nr as P,$r as Pt,Yt as Q,Me as Qt,rr as R,Rt,ta as S,G as St,Zr as T,He as Tt,O as U,Hr as Ut,be as V,ee as Vt,Zt as W,fe as Wt,ce as X,Le as Xt,$e as Y,ke as Yt,ie as Z,C as Zt,Je as _,E as _t,pa as a,Ee as an,$t as at,dr as b,J as bt,Ze as c,Te as cn,Ut as ct,we as d,pe as dn,le as dt,Re as en,ae as et,pr as f,P as fn,We as ft,Xe as g,b as gn,jt as gt,Qe as h,g as hn,te as ht,fr as i,Be as in,qt as it,cr as j,Kr as jt,_ as k,c as kt,mr as l,Br as ln,H as lt,Se as m,Et as mn,F as mt,gr as n,K as nn,Kt as nt,rt as o,q as on,Wt as ot,aa as p,Z as pn,N as pt,Jt as q,Ie as qt,et as r,ze as rn,re as rt,tt as s,me as sn,Ht as st,yr as t,je as tn,R as tt,xe as u,Mt as un,_t as ut,Ge as v,ye as vt,Ke as w,Gr as wt,ea as x,ge as xt,ue as y,se as yt,tr as z,Vt as zt};
|