@ngxviewbuilder/runtime 0.7.0 → 0.8.0

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.
@@ -0,0 +1 @@
1
+ import{NgClass as r}from"@angular/common";import*as o from"@angular/core";import{input as v,signal as p,inject as a,computed as e,ChangeDetectionStrategy as u,Component as m}from"@angular/core";import{c as b,E as h,U as g,S as x,a as l,N as c,D as d}from"./ngxviewbuilder-runtime-ngxviewbuilder-runtime-vepMpo7v.mjs";class n{model=v.required(...ngDevMode?[{debugName:"model"}]:[]);tid=b(this.model,"nvb-toast","toast");visible=p(true,...ngDevMode?[{debugName:"visible"}]:[]);elementActionService=a(h);uiTranslationService=a(g);hideTimeoutId=null;autoHideStartedAt=0;autoHideDelayMs=0;autoHideRemainingMs=0;isEditor=e(()=>x.isEditor(),...ngDevMode?[{debugName:"isEditor"}]:[]);shellClass=e(()=>{const t=this.resolvePosition();return{[`nvb-toast-shell--${t}`]:true,"nvb-toast-shell--editor":this.isEditor()}},...ngDevMode?[{debugName:"shellClass"}]:[]);variantClass=e(()=>`nvb-toast--${this.resolveVariant()}`,...ngDevMode?[{debugName:"variantClass"}]:[]);iconName=e(()=>{const t=String(this.model()?.icon??"").trim();if(t){return t}switch(this.resolveVariant()){case"success":return"check_circle";case"warning":return"warning";case"error":return"error";default:return"info"}},...ngDevMode?[{debugName:"iconName"}]:[]);showActionButton=e(()=>String(this.model()?.actionText??"").trim().length>0,...ngDevMode?[{debugName:"showActionButton"}]:[]);ngOnInit(){this.visible.set(Boolean(this.model()?.initiallyVisible??true));if(this.isEditor()){this.visible.set(true);return}this.scheduleAutoHide()}ngOnDestroy(){this.clearAutoHide()}onToastClick(t){t.stopPropagation();void this.runActions("click")}onActionClick(t){t.preventDefault();t.stopPropagation();void this.runActions("action")}onDismissClick(t){t.preventDefault();t.stopPropagation();this.visible.set(false);this.clearAutoHide();void this.runActions("dismiss")}pauseAutoHide(){if(this.isEditor()||this.hideTimeoutId===null){return}const t=Date.now()-this.autoHideStartedAt;this.autoHideRemainingMs=Math.max(1e3,this.autoHideDelayMs-t);this.clearAutoHide()}resumeAutoHide(){if(this.isEditor()||!this.visible()||!this.model().autoHide||this.hideTimeoutId!==null){return}this.scheduleAutoHide(this.autoHideRemainingMs||this.resolveAutoHideDelayMs())}resolvedTitle(){const t=String(this.model()?.title??"").trim();return t==="Notification"?this.uiTranslationService.translate("toast.titleDefault","Notification"):t}resolvedDescription(){const t=String(this.model()?.descriptionText??"").trim();return t==="Toast message"?this.uiTranslationService.translate("toast.descriptionDefault","Toast message"):t}dismissLabel(){return this.uiTranslationService.translate("common.dismiss","Dismiss")}toastAriaLive(){return this.resolveVariant()==="info"?"polite":"assertive"}toastRole(){return this.toastAriaLive()==="assertive"?"alert":"status"}scheduleAutoHide(t=this.resolveAutoHideDelayMs()){this.clearAutoHide();if(!this.visible()){return}if(!this.model().autoHide){return}this.autoHideDelayMs=t;this.autoHideRemainingMs=t;this.autoHideStartedAt=Date.now();this.hideTimeoutId=setTimeout(()=>{this.visible.set(false);this.hideTimeoutId=null;void this.runActions("autoHide")},t)}clearAutoHide(){if(this.hideTimeoutId===null){return}clearTimeout(this.hideTimeoutId);this.hideTimeoutId=null}resolveAutoHideDelayMs(){const t=Number(this.model()?.autoHideMs);if(Number.isFinite(t)&&t>=0){return Math.floor(t)}return 7e3}async runActions(t){const i={action:t,value:this.model().value,item:null,row:null};const s=String(this.model().name??"").trim();if(s){i[s]=this.model().value}await this.elementActionService.runActions(this.model(),this.model().events??[],"click",i)}resolveVariant(){const t=String(this.model()?.variant??"info").trim().toLowerCase();if(t==="error"||t==="danger"||t==="risk"){return"error"}if(t==="warning"||t==="warn"){return"warning"}if(t==="success"||t==="ok"){return"success"}if(t==="info"||t==="neutral"){return"info"}return"info"}resolvePosition(){const t=String(this.model()?.position??"top-right").trim().toLowerCase();if(t==="top-left"||t==="top-center"||t==="top-right"||t==="bottom-left"||t==="bottom-center"||t==="bottom-right"){return t}return"top-right"}static ɵfac=o.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.1.4",ngImport:o,type:n,deps:[],target:o.ɵɵFactoryTarget.Component});static ɵcmp=o.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.1.4",type:n,isStandalone:true,selector:"toast-element",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:true,transformFunction:null}},ngImport:o,template:"<element-wrapper [model]=\"model()\">\n @if (visible()) {\n <section class=\"nvb-toast-shell\" [ngClass]=\"shellClass()\" [attr.data-testid]=\"tid('root')\">\n <article\n class=\"nvb-toast\"\n [ngClass]=\"variantClass()\"\n [class.nvb-toast--no-icon]=\"!model().showIcon\"\n [attr.role]=\"toastRole()\"\n [attr.aria-live]=\"toastAriaLive()\"\n (click)=\"onToastClick($event)\"\n (mouseenter)=\"pauseAutoHide()\"\n (mouseleave)=\"resumeAutoHide()\"\n (focusin)=\"pauseAutoHide()\"\n (focusout)=\"resumeAutoHide()\"\n >\n @if (model().showIcon) {\n <span class=\"nvb-toast__media\" aria-hidden=\"true\">\n <nvb-icon class=\"nvb-toast__icon\" [name]=\"iconName()\"></nvb-icon>\n </span>\n }\n\n <div class=\"nvb-toast__content\">\n <h4 class=\"nvb-toast__title\">{{ resolvedTitle() | dynamicText: model() }}</h4>\n\n @if (resolvedDescription()) {\n <p class=\"nvb-toast__description\">\n {{ resolvedDescription() | dynamicText: model() }}\n </p>\n }\n </div>\n\n @if (showActionButton()) {\n <button type=\"button\" class=\"nvb-toast__action\" (click)=\"onActionClick($event)\">\n {{ model().actionText | dynamicText: model() }}\n </button>\n }\n\n @if (model().dismissible) {\n <button\n type=\"button\"\n class=\"nvb-toast__dismiss\"\n (click)=\"onDismissClick($event)\"\n [attr.aria-label]=\"dismissLabel()\"\n >\n <nvb-icon name=\"close\"></nvb-icon>\n </button>\n }\n </article>\n </section>\n }\n</element-wrapper>\n",styles:[":host{display:block;width:100%;font-family:var(--nvb-font-family)}.nvb-toast-shell{position:fixed;z-index:2147483500;width:min(360px,100vw - 32px);pointer-events:none;display:grid;gap:16px}.nvb-toast-shell--editor{position:relative;inset:auto;width:min(360px,100%);max-width:100%;margin-top:8px}.nvb-toast-shell--top-left{top:16px;left:16px}.nvb-toast-shell--top-center{top:16px;left:50%;transform:translate(-50%)}.nvb-toast-shell--top-right{top:16px;right:16px}.nvb-toast-shell--bottom-left{bottom:16px;left:16px}.nvb-toast-shell--bottom-center{bottom:16px;left:50%;transform:translate(-50%)}.nvb-toast-shell--bottom-right{bottom:16px;right:16px}.nvb-toast{--nvb-toast-icon-color: var(--nvb-color-primary-600);pointer-events:auto;position:relative;display:grid;grid-template-columns:20px minmax(0,1fr) 24px;gap:4px 12px;align-items:start;min-height:52px;padding:12px;border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-toast-radius, 4px);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);box-shadow:0 8px 16px color-mix(in oklab,var(--nvb-color-neutral-950) 14%,transparent),0 0 2px color-mix(in oklab,var(--nvb-color-neutral-950) 12%,transparent);overflow:hidden}.nvb-toast__media{grid-column:1;grid-row:1/span 2;width:20px;height:20px;margin-top:1px;display:inline-flex;align-items:center;justify-content:center;color:var(--nvb-toast-icon-color);flex:0 0 auto}.nvb-toast__icon{font-size:20px;line-height:1}.nvb-toast__content{grid-column:2;min-width:0;display:grid;gap:2px}.nvb-toast--no-icon .nvb-toast__content,.nvb-toast--no-icon .nvb-toast__action{grid-column:1/3}.nvb-toast__title{margin:0;font-size:14px;font-weight:600;line-height:20px;letter-spacing:0;color:var(--nvb-color-neutral-900)}.nvb-toast__description{margin:0;font-size:13px;line-height:18px;color:var(--nvb-color-neutral-600);overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.nvb-toast__action{grid-column:2;justify-self:start;min-height:22px;padding:0;border:0;border-radius:var(--nvb-button-radius, 4px);background:transparent;color:var(--nvb-color-primary-700);font:inherit;font-size:13px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap}.nvb-toast__action:hover{color:var(--nvb-color-primary-800);text-decoration:underline;text-underline-offset:2px}.nvb-toast__action:focus-visible,.nvb-toast__dismiss:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-toast__dismiss{grid-column:3;grid-row:1;width:24px;height:24px;margin:-2px -2px 0 0;border:1px solid transparent;border-radius:var(--nvb-button-radius, 4px);background:transparent;color:var(--nvb-color-neutral-600);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color .16s ease,color .16s ease}.nvb-toast__dismiss:hover{background:var(--nvb-color-neutral-100);color:var(--nvb-color-neutral-900)}.nvb-toast--info{--nvb-toast-icon-color: var(--nvb-color-primary-600)}.nvb-toast--success{--nvb-toast-icon-color: var(--nvb-color-success-700)}.nvb-toast--warning{--nvb-toast-icon-color: var(--nvb-color-warning-700)}.nvb-toast--error{--nvb-toast-icon-color: var(--nvb-color-risk-700)}@media(max-width:520px){.nvb-toast-shell{width:min(360px,100vw - 24px)}}\n"],dependencies:[{kind:"component",type:l,selector:"element-wrapper",inputs:["model","controlIdInput","labelForInput","groupRole","showTextWrapperInput"],exportAs:["elementWrapper"]},{kind:"directive",type:r,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"component",type:c,selector:"nvb-icon",inputs:["name","svg","ariaLabel"]},{kind:"pipe",type:d,name:"dynamicText"}],changeDetection:o.ChangeDetectionStrategy.OnPush})}o.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.1.4",ngImport:o,type:n,decorators:[{type:m,args:[{selector:"toast-element",changeDetection:u.OnPush,imports:[l,r,d,c],template:"<element-wrapper [model]=\"model()\">\n @if (visible()) {\n <section class=\"nvb-toast-shell\" [ngClass]=\"shellClass()\" [attr.data-testid]=\"tid('root')\">\n <article\n class=\"nvb-toast\"\n [ngClass]=\"variantClass()\"\n [class.nvb-toast--no-icon]=\"!model().showIcon\"\n [attr.role]=\"toastRole()\"\n [attr.aria-live]=\"toastAriaLive()\"\n (click)=\"onToastClick($event)\"\n (mouseenter)=\"pauseAutoHide()\"\n (mouseleave)=\"resumeAutoHide()\"\n (focusin)=\"pauseAutoHide()\"\n (focusout)=\"resumeAutoHide()\"\n >\n @if (model().showIcon) {\n <span class=\"nvb-toast__media\" aria-hidden=\"true\">\n <nvb-icon class=\"nvb-toast__icon\" [name]=\"iconName()\"></nvb-icon>\n </span>\n }\n\n <div class=\"nvb-toast__content\">\n <h4 class=\"nvb-toast__title\">{{ resolvedTitle() | dynamicText: model() }}</h4>\n\n @if (resolvedDescription()) {\n <p class=\"nvb-toast__description\">\n {{ resolvedDescription() | dynamicText: model() }}\n </p>\n }\n </div>\n\n @if (showActionButton()) {\n <button type=\"button\" class=\"nvb-toast__action\" (click)=\"onActionClick($event)\">\n {{ model().actionText | dynamicText: model() }}\n </button>\n }\n\n @if (model().dismissible) {\n <button\n type=\"button\"\n class=\"nvb-toast__dismiss\"\n (click)=\"onDismissClick($event)\"\n [attr.aria-label]=\"dismissLabel()\"\n >\n <nvb-icon name=\"close\"></nvb-icon>\n </button>\n }\n </article>\n </section>\n }\n</element-wrapper>\n",styles:[":host{display:block;width:100%;font-family:var(--nvb-font-family)}.nvb-toast-shell{position:fixed;z-index:2147483500;width:min(360px,100vw - 32px);pointer-events:none;display:grid;gap:16px}.nvb-toast-shell--editor{position:relative;inset:auto;width:min(360px,100%);max-width:100%;margin-top:8px}.nvb-toast-shell--top-left{top:16px;left:16px}.nvb-toast-shell--top-center{top:16px;left:50%;transform:translate(-50%)}.nvb-toast-shell--top-right{top:16px;right:16px}.nvb-toast-shell--bottom-left{bottom:16px;left:16px}.nvb-toast-shell--bottom-center{bottom:16px;left:50%;transform:translate(-50%)}.nvb-toast-shell--bottom-right{bottom:16px;right:16px}.nvb-toast{--nvb-toast-icon-color: var(--nvb-color-primary-600);pointer-events:auto;position:relative;display:grid;grid-template-columns:20px minmax(0,1fr) 24px;gap:4px 12px;align-items:start;min-height:52px;padding:12px;border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-toast-radius, 4px);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);box-shadow:0 8px 16px color-mix(in oklab,var(--nvb-color-neutral-950) 14%,transparent),0 0 2px color-mix(in oklab,var(--nvb-color-neutral-950) 12%,transparent);overflow:hidden}.nvb-toast__media{grid-column:1;grid-row:1/span 2;width:20px;height:20px;margin-top:1px;display:inline-flex;align-items:center;justify-content:center;color:var(--nvb-toast-icon-color);flex:0 0 auto}.nvb-toast__icon{font-size:20px;line-height:1}.nvb-toast__content{grid-column:2;min-width:0;display:grid;gap:2px}.nvb-toast--no-icon .nvb-toast__content,.nvb-toast--no-icon .nvb-toast__action{grid-column:1/3}.nvb-toast__title{margin:0;font-size:14px;font-weight:600;line-height:20px;letter-spacing:0;color:var(--nvb-color-neutral-900)}.nvb-toast__description{margin:0;font-size:13px;line-height:18px;color:var(--nvb-color-neutral-600);overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.nvb-toast__action{grid-column:2;justify-self:start;min-height:22px;padding:0;border:0;border-radius:var(--nvb-button-radius, 4px);background:transparent;color:var(--nvb-color-primary-700);font:inherit;font-size:13px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap}.nvb-toast__action:hover{color:var(--nvb-color-primary-800);text-decoration:underline;text-underline-offset:2px}.nvb-toast__action:focus-visible,.nvb-toast__dismiss:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-toast__dismiss{grid-column:3;grid-row:1;width:24px;height:24px;margin:-2px -2px 0 0;border:1px solid transparent;border-radius:var(--nvb-button-radius, 4px);background:transparent;color:var(--nvb-color-neutral-600);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color .16s ease,color .16s ease}.nvb-toast__dismiss:hover{background:var(--nvb-color-neutral-100);color:var(--nvb-color-neutral-900)}.nvb-toast--info{--nvb-toast-icon-color: var(--nvb-color-primary-600)}.nvb-toast--success{--nvb-toast-icon-color: var(--nvb-color-success-700)}.nvb-toast--warning{--nvb-toast-icon-color: var(--nvb-color-warning-700)}.nvb-toast--error{--nvb-toast-icon-color: var(--nvb-color-risk-700)}@media(max-width:520px){.nvb-toast-shell{width:min(360px,100vw - 24px)}}\n"]}]}],propDecorators:{model:[{type:o.Input,args:[{isSignal:true,alias:"model",required:true}]}]}});export{n as ToastElement};
@@ -1 +1 @@
1
- import{A as s,b as i,c as t,d as o,e as r,f as l,g as n,h as E,B as d,i as c,j as S,k as _,l as u,m as T,n as A,o as m,p as I,C as N,q as L,r as M,s as C,t as R,u as g,v as b,w as B,x as p,y as v,z as O,F as V,G as P,H as D,I as x,J as w,K as U,L as y,O as H,P as G,Q as F,R as X,T as W,V as h,W as Y,X as K,Y as k,Z as z,_ as f,$ as Z,a0 as J,a1 as j,a2 as q,a3 as Q,a4 as $,a5 as ee,a6 as ae,a7 as se,a8 as ie,a9 as te,D as oe,aa as re,ab as le,ac as ne,ad as Ee,ae as de,af as ce,ag as Se,ah as _e,E as ue,ai as Te,aj as Ae,ak as me,al as Ie,am as Ne,an as Le,ao as Me,ap as Ce,aq as Re,ar as ge,as as be,at as Be,au as pe,av as ve,aw as Oe,ax as Ve,ay as Pe,az as De,aA as xe,aB as we,aC as Ue,aD as ye,aE as He,aF as Ge,aG as Fe,aH as Xe,aI as We,aJ as he,aK as Ye,aL as Ke,aM as ke,aN as ze,aO as fe,aP as Ze,aQ as Je,aR as je,aS as qe,aT as Qe,aU as $e,aV as ea,aW as aa,aX as sa,aY as ia,aZ as ta,a_ as oa,a$ as ra,b0 as la,b1 as na,M as Ea,b2 as da,b3 as ca,b4 as Sa,b5 as _a,b6 as ua,b7 as Ta,b8 as Aa,b9 as ma,ba as Ia,bb as Na,bc as La,bd as Ma,be as Ca,bf as Ra,bg as ga,bh as ba,bi as Ba,bj as pa,bk as va,bl as Oa,bm as Va,bn as Pa,bo as Da,bp as xa,bq as wa,br as Ua,bs as ya,bt as Ha,bu as Ga,bv as Fa,bw as Xa,bx as Wa,by as ha,bz as Ya,bA as Ka,bB as ka,bC as za,bD as fa,bE as Za,bF as Ja,bG as ja,bH as qa,bI as Qa,bJ as $a,bK as es,bL as as,bM as ss,bN as is,bO as ts,bP as os,bQ as rs,N as ls,bR as ns,bS as Es,bT as ds,bU as cs,bV as Ss,bW as _s,bX as us,bY as Ts,bZ as As,b_ as ms,b$ as Is,c0 as Ns,c1 as Ls,c2 as Ms,c3 as Cs,c4 as Rs,c5 as gs,c6 as bs,c7 as Bs,c8 as ps,c9 as vs,ca as Os,cb as Vs,cc as Ps,cd as Ds,ce as xs,cf as ws,cg as Us,ch as ys,ci as Hs,cj as Gs,ck as Fs,cl as Xs,cm as Ws,cn as hs,co as Ys,cp as Ks,cq as ks,cr as zs,cs as fs,ct as Zs,cu as Js,cv as js,S as qs,cw as Qs,cx as $s,cy as ei,cz as ai,cA as si,cB as ii,cC as ti,cD as oi,cE as ri,cF as li,cG as ni,cH as Ei,cI as di,cJ as ci,cK as Si,cL as _i,cM as ui,cN as Ti,cO as Ai,cP as mi,cQ as Ii,cR as Ni,cS as Li,cT as Mi,cU as Ci,cV as Ri,cW as gi,cX as bi,cY as Bi,cZ as pi,c_ as vi,c$ as Oi,d0 as Vi,d1 as Pi,d2 as Di,d3 as xi,d4 as wi,d5 as Ui,U as yi,d6 as Hi,d7 as Gi,d8 as Fi,d9 as Xi,da as Wi,db as hi,dc as Yi,dd as Ki,de as ki,df as zi,dg as fi,dh as Zi,di as Ji,dj as ji,dk as qi,dl as Qi,dm as $i,dn as et,dp as at,dq as st,dr as it,ds as tt,dt as ot,du as rt,dv as lt,dw as nt,dx as Et,dy as dt,dz as ct,dA as St,dB as _t,dC as ut,dD as Tt,dE as At,dF as mt,dG as It,dH as Nt,dI as Lt,dJ as Mt,dK as Ct,dL as Rt,dM as gt,dN as bt,dO as Bt,dP as pt,dQ as vt,dR as Ot,dS as Vt,dT as Pt,dU as Dt,dV as xt,dW as wt,dX as Ut,dY as yt,dZ as Ht,d_ as Gt,d$ as Ft,e0 as Xt,e1 as Wt,e2 as ht,e3 as Yt,e4 as Kt,e5 as kt,e6 as zt,e7 as ft,e8 as Zt,e9 as Jt}from"./ngxviewbuilder-runtime-ngxviewbuilder-runtime-CY_sp0Pm.mjs";export{s as ALIGN_CLASS_MAP,i as ALIGN_CLASS_PREFIX,t as APPLICATION_LOCALE_VALUE,o as AccordionElement,r as AccordionModel,l as ApplicationLocaleService,n as AutocompleteModel,E as AvatarModel,d as BLOCK_TAGS,c as BUILT_IN_STRUCTURE_MIGRATIONS,S as BUILT_IN_TABLE_CELL_ELEMENT_TYPES,_ as BadgeModel,u as BreadcrumbsModel,T as BuilderModel,A as BuilderPageDisplayModeEnum,m as BuilderTabRegistryService,I as ButtonModel,N as COLOR_CLASS_PREFIX,L as CURRENT_SCHEMA_VERSION,M as ChartModel,C as CheckboxInputModel,R as ChoiceModel,g as ColumnFragmentModeEnum,b as ColumnModel,B as ComponentRegistryService,p as ConfirmDialog,v as CreatorStructureService,O as CustomHtmlModel,V as DATA_JSON_CAPABLE_ELEMENT_TYPES,P as DEFAULT_FONT,D as DEFAULT_FONT_CLASS,x as DEFAULT_HIGHLIGHT_COLOR,w as DEFAULT_LINE_HEIGHT_VALUE,U as DEFAULT_MOBILE_BREAKPOINT,y as DEFAULT_SIZE_CLASS,H as DEFAULT_SIZE_VALUE,G as DEFAULT_TABLET_BREAKPOINT,F as DEFAULT_TABLE_COLUMNS,X as DEFAULT_TABLE_ROWS,W as DEFAULT_TEXT_COLOR,h as DataService,Y as DataSourceModel,K as DataSourceService,k as DatePickerModel,z as DateRangeModel,f as DialogDragController,Z as DialogElement,J as DialogModel,j as DividerModel,q as DomInstrumentationService,Q as DragAndDropService,$ as DragAutoScrollService,ee as DynamicPanel,ae as DynamicPanelModel,se as DynamicTableColumnModel,ie as DynamicTableModel,te as DynamicTableRowColumnModel,oe as DynamicTextPipe,re as ELEMENT_ROW_CONTEXT_KEY,le as ELEMENT_ROW_SCOPE_PATH_KEY,ne as EN_UI_DICTIONARY,Ee as EXCLUDE_FROM_DATA_JSON_KEY,de as ElementActionButtonToneEnum,ce as ElementActionButtonVariantEnum,Se as ElementActionDialogOperationEnum,_e as ElementActionResponseModeEnum,ue as ElementActionService,Te as ElementActionSetValueModeEnum,Ae as ElementActionToastPositionEnum,me as ElementActionToastVariantEnum,Ie as ElementActionTriggerEnum,Ne as ElementActionTypeEnum,Le as ElementBaseModel,Me as ElementContentBox,Ce as ElementContentRow,Re as ElementDataSourceUseForEnum,ge as ElementDefaultsService,be as ElementExecutionModeEnum,Be as ElementFocusService,pe as ElementTypesEnum,ve as ElementsService,Oe as EmptyBlockElement,Ve as EmptyBlockModel,Pe as EventService,De as ExpressionService,xe as FONT_CLASS_MAP,we as FONT_CLASS_PREFIX,Ue as FeaturePackRegistryService,ye as FileUploadModel,He as ForgeInitializerService,Ge as HIGHLIGHT_CLASS_PREFIX,Fe as HIGHLIGHT_SWATCHES,Xe as HISTORY_COALESCE_MS,We as HeaderModel,he as HeaderTabEnum,Ye as INDENT_CLASS_PREFIX,Ke as INLINE_TAGS,ke as IconModel,ze as IconSvgService,fe as IframeModel,Ze as ImageModel,Je as LEGACY_LINE_HEIGHT_CLASS_MAP,je as LEGACY_SCHEMA_VERSION,qe as LEGACY_SIZE_CLASS_MAP,Qe as LINE_HEIGHT_CLASS_MAP,$e as LINE_HEIGHT_CLASS_PREFIX,ea as LINE_HEIGHT_OPTION_VALUES,aa as LOCALE_CHOICES,sa as ListBoxModel,ia as ListGridModel,ta as LocalizationService,oa as MANAGED_STRUCTURE_SETTING_KEYS,ra as MARK_TAG_MAP,la as MAX_HISTORY_ENTRIES,na as MAX_INDENT_LEVEL,Ea as MarkupSecurityService,da as MessageCardModel,ca as ModelService,Sa as MultiSelectInputModel,_a as NGX_VIEW_BUILDER_AI_ACTION_TYPES,ua as NGX_VIEW_BUILDER_AI_API_VERSION,Ta as NGX_VIEW_BUILDER_AI_AUTOMATION_ACTION_TYPES,Aa as NGX_VIEW_BUILDER_AI_ROW_CONTAINERS,ma as NGX_VIEW_BUILDER_AI_TAB_CONTAINERS,Ia as NGX_VIEW_BUILDER_AI_TEMPLATES_CAPABILITY,Na as NGX_VIEW_BUILDER_AI_VALIDATOR_TYPES,La as NGX_VIEW_BUILDER_ANY_ELEMENT_TYPE,Ma as NGX_VIEW_BUILDER_BRIDGE_PROTOCOL_VERSION,Ca as NGX_VIEW_BUILDER_PROJECT_LAYER,Ra as NGX_VIEW_BUILDER_UI_TRANSLATIONS,ga as NVB_TEXT_CONTEXT_KEY,ba as NgxViewBuilder,Ba as NgxViewBuilderActionExecutorService,pa as NgxViewBuilderAiApiService,va as NgxViewBuilderAlignEnum,Oa as NgxViewBuilderApiService,Va as NgxViewBuilderAutomationActionTypeEnum,Pa as NgxViewBuilderAutomationService,Da as NgxViewBuilderBuilderTabRenderModeEnum,xa as NgxViewBuilderChromePositionEnum,wa as NgxViewBuilderDataSourceTypeEnum,Ua as NgxViewBuilderDialogCloseReasonEnum,ya as NgxViewBuilderExecutionReasonEnum,Ha as NgxViewBuilderHeadlessService,Ga as NgxViewBuilderInteractionStatusEnum,Fa as NgxViewBuilderMcpBridgeService,Xa as NgxViewBuilderPageNavigationModeEnum,Wa as NgxViewBuilderPreviewModeEnum,ha as NgxViewBuilderProcessService,Ya as NgxViewBuilderRenderModeEnum,Ka as NgxViewBuilderRenderPhaseEnum,ka as NgxViewBuilderRenderer,za as NgxViewBuilderRuleExecutedBranchEnum,fa as NgxViewBuilderRuleRunModeEnum,Za as NgxViewBuilderRulesEngineService,Ja as NgxViewBuilderRuntime,ja as NgxViewBuilderSaveRequestedSourceEnum,qa as NgxViewBuilderTableSettingsSourceEnum,Qa as NgxViewBuilderThemeModeEnum,$a as NgxViewBuilderTriggerEngineService,es as NgxViewBuilderTriggerEventEnum,as as NgxViewBuilderValidator,ss as NgxViewBuilderWebsocketMessageModeEnum,is as NumberInputModel,ts as NumberStepperModel,os as NvbElement,rs as NvbElementContextService,ls as NvbIcon,ns as NvbRichTextEditor,Es as NvbRows,ds as NvbScope,cs as NvbSelect,Ss as NvbStyleOutlet,_s as NvbTab,us as PHONE_COUNTRY_OPTIONS,Ts as PHONE_COUNTRY_PROPERTY_CHOICES,As as PageElement,ms as PageTitleModel,Is as PanelElement,Ns as PanelModel,Ls as PhoneInputModel,Ms as PreviewRendererService,Cs as ProgressBarModel,Rs as ProgressFlowElement,gs as ProgressFlowModel,bs as PropertyModel,Bs as RICH_TEXT_DEFAULT_TOOLBAR_TOOLS,ps as RICH_TEXT_TOOLBAR_ICONS,vs as RICH_TEXT_TOOLBAR_TOOLS,Os as ROOT_BLOCK_TAGS,Vs as RadioInputModel,Ps as RendererService,Ds as RichTextModel,xs as RouterOutletModel,ws as RowModel,Us as RuntimeDynamicPanel,ys as RuntimeVariableSourceTypeEnum,Hs as RuntimeVariablesService,Gs as SIZE_CLASS_MAP,Fs as SIZE_CLASS_PREFIX,Xs as SIZE_OPTION_VALUES,Ws as SPECIAL_CHARACTERS,hs as SelectButtonModel,Ys as SelectInputModel,Ks as SettingsModel,ks as SignaturePadModel,zs as SingleCheckboxModel,fs as SliderModel,Zs as SpacerModel,Js as SplitterElement,js as SplitterModel,qs as StateService,Qs as StatsCardModel,$s as StructureMigrationService,ei as StructureModel,ai as StructureService,si as TABLE_BORDER_CLASS_PREFIX,ii as TABLE_CELL_BACKGROUND_SWATCHES,ti as TABLE_CELL_VALIGN_CLASS_MAP,oi as TABLE_CELL_VALIGN_CLASS_PREFIX,ri as TABLE_CLASS,li as TABLE_PICKER_COLUMNS,ni as TABLE_PICKER_ROWS,Ei as TASK_ITEM_CHECKED_CLASS,di as TASK_ITEM_CLASS,ci as TASK_ITEM_MARKER_WIDTH,Si as TASK_LIST_CLASS,_i as TableCellElementRegistryService,ui as TableColumnAlignEnum,Ti as TableColumnCellActionsDisplayModeEnum,Ai as TableColumnTypeEnum,mi as TableFilterControlTypeEnum,Ii as TableFilterOptionsSourceTypeEnum,Ni as TableInlineEditStartModeEnum,Li as TableInlineEditorTypeEnum,Mi as TableModel,Ci as TableRowActionsDropdownButtonStyleEnum,Ri as TableStatusToneEnum,gi as TabsElement,bi as TabsModel,Bi as TabsProModel,pi as TemplateEngineService,vi as TemplateStorageModeEnum,Oi as TextAreaModel,Vi as TextInputModel,Pi as TimePickerModel,Di as ToastModel,xi as ToggleSwitchModel,wi as TooltipComponent,Ui as UiTranslatePipe,yi as UiTranslationService,Hi as ValidatorService,Gi as ValueChangeTriggerEnum,Fi as VideoModel,Xi as applyDynamicPanelRowNumberingContext,Wi as applyElementRowContext,hi as applyRuntimeNumberingContext,Yi as applyStructureMigrations,Ki as applyViewportBreakpoints,ki as bridgeNgxViewBuilderApiEvents,zi as buildElementRowRuntimeContext,fi as buildFocusKey,Zi as buildResponsiveColumnStyle,Ji as clearStructureMigrationNotice,ji as cloneRecord,qi as cloneValue,Qi as composeCssSize,$i as configureStructureMigrations,et as createUuid,at as describeDragEvent,st as describeElementModel,it as describeEventTarget,tt as describeMouseEvent,ot as elements,rt as getMobileBreakpoint,lt as getRuntimeTextContext,nt as getStructureMigrationConfig,Et as getTabletBreakpoint,dt as getViewportContentWidth,ct as isDataJsonCapableElementType,St as isDragDebugEnabled,_t as isMobileViewport,ut as isMobileWidth,Tt as isPlainRecord,At as isRelativeResponsiveWidth,mt as isTabletViewport,It as isTabletWidth,Nt as lastStructureMigration,Lt as logDragDebug,Mt as logDragDebugThrottled,Ct as migrateStructure,Rt as normalizeBreakpoint,gt as normalizeCssSizeUnit,bt as normalizeResponsiveCssSize,Bt as normalizeStringList,pt as provideNgxViewBuilderExtensions,vt as provideNgxViewBuilderMigrations,Ot as provideNgxViewBuilderProjectLayer,Vt as provideNgxViewBuilderProjectLayers,Pt as provideNgxViewBuilderRuntime,Dt as provideNgxViewBuilderUiTranslations,xt as pruneStructureSettings,wt as readSchemaVersion,Ut as recordStructureMigration,yt as resetStructureMigrationConfig,Ht as resolveAllowedPhoneCountries,Gt as resolveCssSizeSetting,Ft as resolveElementRowContext,Xt as resolveElementRowScope,Wt as resolveElementRowScopedPath,ht as resolveFixedViewport,Yt as resolvePhoneCountry,Kt as resolveResponsiveDisplayWidth,kt as resolveResponsiveWidth,zt as resolveRuntimeTextContextValue,ft as resolveStructureSettings,Zt as setElementRowContext,Jt as setViewportContentWidth};
1
+ import{A as s,b as i,d as t,e as o,f as r,g as l,h as n,i as E,B as d,j as c,k as S,l as _,m as u,n as T,o as A,p as m,q as I,C as N,r as L,s as M,t as C,u as R,v as g,w as b,x as B,y as p,z as v,F as O,G as V,H as P,I as D,J as x,K as w,L as U,O as y,P as H,Q as G,R as F,T as X,V as W,W as h,X as Y,Y as K,Z as k,_ as z,$ as f,a0 as Z,a1 as J,a2 as j,a3 as q,a4 as Q,a5 as $,a6 as ee,a7 as ae,a8 as se,a9 as ie,aa as te,D as oe,ab as re,ac as le,ad as ne,ae as Ee,af as de,ag as ce,ah as Se,ai as _e,E as ue,aj as Te,ak as Ae,al as me,am as Ie,an as Ne,ao as Le,ap as Me,aq as Ce,ar as Re,as as ge,at as be,au as Be,av as pe,aw as ve,ax as Oe,ay as Ve,az as Pe,aA as De,aB as xe,aC as we,aD as Ue,aE as ye,aF as He,aG as Ge,aH as Fe,aI as Xe,aJ as We,aK as he,aL as Ye,aM as Ke,aN as ke,aO as ze,aP as fe,aQ as Ze,aR as Je,aS as je,aT as qe,aU as Qe,aV as $e,aW as ea,aX as aa,aY as sa,aZ as ia,a_ as ta,a$ as oa,b0 as ra,b1 as la,b2 as na,M as Ea,b3 as da,b4 as ca,b5 as Sa,b6 as _a,b7 as ua,b8 as Ta,b9 as Aa,ba as ma,bb as Ia,bc as Na,bd as La,be as Ma,bf as Ca,bg as Ra,bh as ga,bi as ba,bj as Ba,bk as pa,bl as va,bm as Oa,bn as Va,bo as Pa,bp as Da,bq as xa,br as wa,bs as Ua,bt as ya,bu as Ha,bv as Ga,bw as Fa,bx as Xa,by as Wa,bz as ha,bA as Ya,bB as Ka,bC as ka,bD as za,bE as fa,bF as Za,bG as Ja,bH as ja,bI as qa,bJ as Qa,bK as $a,bL as es,bM as as,bN as ss,bO as is,bP as ts,bQ as os,bR as rs,N as ls,bS as ns,bT as Es,bU as ds,bV as cs,bW as Ss,bX as _s,bY as us,bZ as Ts,b_ as As,b$ as ms,c0 as Is,c1 as Ns,c2 as Ls,c3 as Ms,c4 as Cs,c5 as Rs,c6 as gs,c7 as bs,c8 as Bs,c9 as ps,ca as vs,cb as Os,cc as Vs,cd as Ps,ce as Ds,cf as xs,cg as ws,ch as Us,ci as ys,cj as Hs,ck as Gs,cl as Fs,cm as Xs,cn as Ws,co as hs,cp as Ys,cq as Ks,cr as ks,cs as zs,ct as fs,cu as Zs,cv as Js,cw as js,S as qs,cx as Qs,cy as $s,cz as ei,cA as ai,cB as si,cC as ii,cD as ti,cE as oi,cF as ri,cG as li,cH as ni,cI as Ei,cJ as di,cK as ci,cL as Si,cM as _i,cN as ui,cO as Ti,cP as Ai,cQ as mi,cR as Ii,cS as Ni,cT as Li,cU as Mi,cV as Ci,cW as Ri,cX as gi,cY as bi,cZ as Bi,c_ as pi,c$ as vi,d0 as Oi,d1 as Vi,d2 as Pi,d3 as Di,d4 as xi,d5 as wi,d6 as Ui,U as yi,d7 as Hi,d8 as Gi,d9 as Fi,da as Xi,db as Wi,dc as hi,dd as Yi,de as Ki,df as ki,dg as zi,dh as fi,di as Zi,dj as Ji,dk as ji,dl as qi,dm as Qi,dn as $i,dp as et,dq as at,dr as st,ds as it,dt as tt,du as ot,dv as rt,dw as lt,dx as nt,dy as Et,dz as dt,dA as ct,dB as St,dC as _t,dD as ut,dE as Tt,dF as At,dG as mt,dH as It,dI as Nt,dJ as Lt,dK as Mt,dL as Ct,dM as Rt,dN as gt,dO as bt,dP as Bt,dQ as pt,dR as vt,dS as Ot,dT as Vt,dU as Pt,dV as Dt,dW as xt,dX as wt,dY as Ut,dZ as yt,d_ as Ht,d$ as Gt,e0 as Ft,e1 as Xt,e2 as Wt,e3 as ht,e4 as Yt,e5 as Kt,e6 as kt,e7 as zt,e8 as ft,e9 as Zt,ea as Jt}from"./ngxviewbuilder-runtime-ngxviewbuilder-runtime-vepMpo7v.mjs";export{s as ALIGN_CLASS_MAP,i as ALIGN_CLASS_PREFIX,t as APPLICATION_LOCALE_VALUE,o as AccordionElement,r as AccordionModel,l as ApplicationLocaleService,n as AutocompleteModel,E as AvatarModel,d as BLOCK_TAGS,c as BUILT_IN_STRUCTURE_MIGRATIONS,S as BUILT_IN_TABLE_CELL_ELEMENT_TYPES,_ as BadgeModel,u as BreadcrumbsModel,T as BuilderModel,A as BuilderPageDisplayModeEnum,m as BuilderTabRegistryService,I as ButtonModel,N as COLOR_CLASS_PREFIX,L as CURRENT_SCHEMA_VERSION,M as ChartModel,C as CheckboxInputModel,R as ChoiceModel,g as ColumnFragmentModeEnum,b as ColumnModel,B as ComponentRegistryService,p as ConfirmDialog,v as CreatorStructureService,O as CustomHtmlModel,V as DATA_JSON_CAPABLE_ELEMENT_TYPES,P as DEFAULT_FONT,D as DEFAULT_FONT_CLASS,x as DEFAULT_HIGHLIGHT_COLOR,w as DEFAULT_LINE_HEIGHT_VALUE,U as DEFAULT_MOBILE_BREAKPOINT,y as DEFAULT_SIZE_CLASS,H as DEFAULT_SIZE_VALUE,G as DEFAULT_TABLET_BREAKPOINT,F as DEFAULT_TABLE_COLUMNS,X as DEFAULT_TABLE_ROWS,W as DEFAULT_TEXT_COLOR,h as DataService,Y as DataSourceModel,K as DataSourceService,k as DatePickerModel,z as DateRangeModel,f as DialogDragController,Z as DialogElement,J as DialogModel,j as DividerModel,q as DomInstrumentationService,Q as DragAndDropService,$ as DragAutoScrollService,ee as DynamicPanel,ae as DynamicPanelModel,se as DynamicTableColumnModel,ie as DynamicTableModel,te as DynamicTableRowColumnModel,oe as DynamicTextPipe,re as ELEMENT_ROW_CONTEXT_KEY,le as ELEMENT_ROW_SCOPE_PATH_KEY,ne as EN_UI_DICTIONARY,Ee as EXCLUDE_FROM_DATA_JSON_KEY,de as ElementActionButtonToneEnum,ce as ElementActionButtonVariantEnum,Se as ElementActionDialogOperationEnum,_e as ElementActionResponseModeEnum,ue as ElementActionService,Te as ElementActionSetValueModeEnum,Ae as ElementActionToastPositionEnum,me as ElementActionToastVariantEnum,Ie as ElementActionTriggerEnum,Ne as ElementActionTypeEnum,Le as ElementBaseModel,Me as ElementContentBox,Ce as ElementContentRow,Re as ElementDataSourceUseForEnum,ge as ElementDefaultsService,be as ElementExecutionModeEnum,Be as ElementFocusService,pe as ElementTypesEnum,ve as ElementsService,Oe as EmptyBlockElement,Ve as EmptyBlockModel,Pe as EventService,De as ExpressionService,xe as FONT_CLASS_MAP,we as FONT_CLASS_PREFIX,Ue as FeaturePackRegistryService,ye as FileUploadModel,He as ForgeInitializerService,Ge as HIGHLIGHT_CLASS_PREFIX,Fe as HIGHLIGHT_SWATCHES,Xe as HISTORY_COALESCE_MS,We as HeaderModel,he as HeaderTabEnum,Ye as INDENT_CLASS_PREFIX,Ke as INLINE_TAGS,ke as IconModel,ze as IconSvgService,fe as IframeModel,Ze as ImageModel,Je as LEGACY_LINE_HEIGHT_CLASS_MAP,je as LEGACY_SCHEMA_VERSION,qe as LEGACY_SIZE_CLASS_MAP,Qe as LINE_HEIGHT_CLASS_MAP,$e as LINE_HEIGHT_CLASS_PREFIX,ea as LINE_HEIGHT_OPTION_VALUES,aa as LOCALE_CHOICES,sa as ListBoxModel,ia as ListGridModel,ta as LocalizationService,oa as MANAGED_STRUCTURE_SETTING_KEYS,ra as MARK_TAG_MAP,la as MAX_HISTORY_ENTRIES,na as MAX_INDENT_LEVEL,Ea as MarkupSecurityService,da as MessageCardModel,ca as ModelService,Sa as MultiSelectInputModel,_a as NGX_VIEW_BUILDER_AI_ACTION_TYPES,ua as NGX_VIEW_BUILDER_AI_API_VERSION,Ta as NGX_VIEW_BUILDER_AI_AUTOMATION_ACTION_TYPES,Aa as NGX_VIEW_BUILDER_AI_ROW_CONTAINERS,ma as NGX_VIEW_BUILDER_AI_TAB_CONTAINERS,Ia as NGX_VIEW_BUILDER_AI_TEMPLATES_CAPABILITY,Na as NGX_VIEW_BUILDER_AI_VALIDATOR_TYPES,La as NGX_VIEW_BUILDER_ANY_ELEMENT_TYPE,Ma as NGX_VIEW_BUILDER_BRIDGE_PROTOCOL_VERSION,Ca as NGX_VIEW_BUILDER_PROJECT_LAYER,Ra as NGX_VIEW_BUILDER_UI_TRANSLATIONS,ga as NVB_TEXT_CONTEXT_KEY,ba as NgxViewBuilder,Ba as NgxViewBuilderActionExecutorService,pa as NgxViewBuilderAiApiService,va as NgxViewBuilderAlignEnum,Oa as NgxViewBuilderApiService,Va as NgxViewBuilderAutomationActionTypeEnum,Pa as NgxViewBuilderAutomationService,Da as NgxViewBuilderBuilderTabRenderModeEnum,xa as NgxViewBuilderChromePositionEnum,wa as NgxViewBuilderDataSourceTypeEnum,Ua as NgxViewBuilderDialogCloseReasonEnum,ya as NgxViewBuilderExecutionReasonEnum,Ha as NgxViewBuilderHeadlessService,Ga as NgxViewBuilderInteractionStatusEnum,Fa as NgxViewBuilderMcpBridgeService,Xa as NgxViewBuilderPageNavigationModeEnum,Wa as NgxViewBuilderPreviewModeEnum,ha as NgxViewBuilderProcessService,Ya as NgxViewBuilderRenderModeEnum,Ka as NgxViewBuilderRenderPhaseEnum,ka as NgxViewBuilderRenderer,za as NgxViewBuilderRuleExecutedBranchEnum,fa as NgxViewBuilderRuleRunModeEnum,Za as NgxViewBuilderRulesEngineService,Ja as NgxViewBuilderRuntime,ja as NgxViewBuilderSaveRequestedSourceEnum,qa as NgxViewBuilderTableSettingsSourceEnum,Qa as NgxViewBuilderThemeModeEnum,$a as NgxViewBuilderTriggerEngineService,es as NgxViewBuilderTriggerEventEnum,as as NgxViewBuilderValidator,ss as NgxViewBuilderWebsocketMessageModeEnum,is as NumberInputModel,ts as NumberStepperModel,os as NvbElement,rs as NvbElementContextService,ls as NvbIcon,ns as NvbRichTextEditor,Es as NvbRows,ds as NvbScope,cs as NvbSelect,Ss as NvbStyleOutlet,_s as NvbTab,us as PHONE_COUNTRY_OPTIONS,Ts as PHONE_COUNTRY_PROPERTY_CHOICES,As as PageElement,ms as PageTitleModel,Is as PanelElement,Ns as PanelModel,Ls as PhoneInputModel,Ms as PreviewRendererService,Cs as ProgressBarModel,Rs as ProgressFlowElement,gs as ProgressFlowModel,bs as PropertyModel,Bs as RICH_TEXT_DEFAULT_TOOLBAR_TOOLS,ps as RICH_TEXT_TOOLBAR_ICONS,vs as RICH_TEXT_TOOLBAR_TOOLS,Os as ROOT_BLOCK_TAGS,Vs as RadioInputModel,Ps as RendererService,Ds as RichTextModel,xs as RouterOutletModel,ws as RowModel,Us as RuntimeDynamicPanel,ys as RuntimeVariableSourceTypeEnum,Hs as RuntimeVariablesService,Gs as SIZE_CLASS_MAP,Fs as SIZE_CLASS_PREFIX,Xs as SIZE_OPTION_VALUES,Ws as SPECIAL_CHARACTERS,hs as SelectButtonModel,Ys as SelectInputModel,Ks as SettingsModel,ks as SignaturePadModel,zs as SingleCheckboxModel,fs as SliderModel,Zs as SpacerModel,Js as SplitterElement,js as SplitterModel,qs as StateService,Qs as StatsCardModel,$s as StructureMigrationService,ei as StructureModel,ai as StructureService,si as TABLE_BORDER_CLASS_PREFIX,ii as TABLE_CELL_BACKGROUND_SWATCHES,ti as TABLE_CELL_VALIGN_CLASS_MAP,oi as TABLE_CELL_VALIGN_CLASS_PREFIX,ri as TABLE_CLASS,li as TABLE_PICKER_COLUMNS,ni as TABLE_PICKER_ROWS,Ei as TASK_ITEM_CHECKED_CLASS,di as TASK_ITEM_CLASS,ci as TASK_ITEM_MARKER_WIDTH,Si as TASK_LIST_CLASS,_i as TableCellElementRegistryService,ui as TableColumnAlignEnum,Ti as TableColumnCellActionsDisplayModeEnum,Ai as TableColumnTypeEnum,mi as TableFilterControlTypeEnum,Ii as TableFilterOptionsSourceTypeEnum,Ni as TableInlineEditStartModeEnum,Li as TableInlineEditorTypeEnum,Mi as TableModel,Ci as TableRowActionsDropdownButtonStyleEnum,Ri as TableStatusToneEnum,gi as TabsElement,bi as TabsModel,Bi as TabsProModel,pi as TemplateEngineService,vi as TemplateStorageModeEnum,Oi as TextAreaModel,Vi as TextInputModel,Pi as TimePickerModel,Di as ToastModel,xi as ToggleSwitchModel,wi as TooltipComponent,Ui as UiTranslatePipe,yi as UiTranslationService,Hi as ValidatorService,Gi as ValueChangeTriggerEnum,Fi as VideoModel,Xi as applyDynamicPanelRowNumberingContext,Wi as applyElementRowContext,hi as applyRuntimeNumberingContext,Yi as applyStructureMigrations,Ki as applyViewportBreakpoints,ki as bridgeNgxViewBuilderApiEvents,zi as buildElementRowRuntimeContext,fi as buildFocusKey,Zi as buildResponsiveColumnStyle,Ji as clearStructureMigrationNotice,ji as cloneRecord,qi as cloneValue,Qi as composeCssSize,$i as configureStructureMigrations,et as createUuid,at as describeDragEvent,st as describeElementModel,it as describeEventTarget,tt as describeMouseEvent,ot as elements,rt as getMobileBreakpoint,lt as getRuntimeTextContext,nt as getStructureMigrationConfig,Et as getTabletBreakpoint,dt as getViewportContentWidth,ct as isDataJsonCapableElementType,St as isDragDebugEnabled,_t as isMobileViewport,ut as isMobileWidth,Tt as isPlainRecord,At as isRelativeResponsiveWidth,mt as isTabletViewport,It as isTabletWidth,Nt as lastStructureMigration,Lt as logDragDebug,Mt as logDragDebugThrottled,Ct as migrateStructure,Rt as normalizeBreakpoint,gt as normalizeCssSizeUnit,bt as normalizeResponsiveCssSize,Bt as normalizeStringList,pt as provideNgxViewBuilderExtensions,vt as provideNgxViewBuilderMigrations,Ot as provideNgxViewBuilderProjectLayer,Vt as provideNgxViewBuilderProjectLayers,Pt as provideNgxViewBuilderRuntime,Dt as provideNgxViewBuilderUiTranslations,xt as pruneStructureSettings,wt as readSchemaVersion,Ut as recordStructureMigration,yt as resetStructureMigrationConfig,Ht as resolveAllowedPhoneCountries,Gt as resolveCssSizeSetting,Ft as resolveElementRowContext,Xt as resolveElementRowScope,Wt as resolveElementRowScopedPath,ht as resolveFixedViewport,Yt as resolvePhoneCountry,Kt as resolveResponsiveDisplayWidth,kt as resolveResponsiveWidth,zt as resolveRuntimeTextContextValue,ft as resolveStructureSettings,Zt as setElementRowContext,Jt as setViewportContentWidth};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngxviewbuilder/runtime",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Native Angular runtime for NGX View Builder: renders forms, dashboards, data tables and guided flows defined as JSON.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://ngxviewbuilder.io",
package/styles/tokens.css CHANGED
@@ -151,18 +151,18 @@
151
151
  --nvb-color-primary-800: oklch(91.21% 0.0518 252.79);
152
152
  --nvb-color-primary-900: oklch(95.63% 0.0247 251.98);
153
153
  --nvb-color-primary-950: oklch(98.04% 0.0104 251.42);
154
- --nvb-color-neutral-000: oklch(18% 0.004 286);
155
- --nvb-color-neutral-050: oklch(20.5% 0.004 286);
156
- --nvb-color-neutral-100: oklch(23% 0.004 286);
157
- --nvb-color-neutral-200: oklch(27.5% 0.005 286);
158
- --nvb-color-neutral-300: oklch(35% 0.006 286);
159
- --nvb-color-neutral-400: oklch(47% 0.007 286);
160
- --nvb-color-neutral-500: oklch(60% 0.006 286);
161
- --nvb-color-neutral-600: oklch(71% 0.005 286);
162
- --nvb-color-neutral-700: oklch(81% 0.004 286);
163
- --nvb-color-neutral-800: oklch(87% 0.003 286);
164
- --nvb-color-neutral-900: oklch(92% 0.002 286);
165
- --nvb-color-neutral-950: oklch(96% 0.0015 286);
154
+ --nvb-color-neutral-000: oklch(19.00% 0.0060 286.00);
155
+ --nvb-color-neutral-050: oklch(23.00% 0.0070 286.00);
156
+ --nvb-color-neutral-100: oklch(27.00% 0.0080 286.00);
157
+ --nvb-color-neutral-200: oklch(38.00% 0.0090 286.00);
158
+ --nvb-color-neutral-300: oklch(49.50% 0.0100 286.00);
159
+ --nvb-color-neutral-400: oklch(58.00% 0.0100 286.00);
160
+ --nvb-color-neutral-500: oklch(65.00% 0.0090 286.00);
161
+ --nvb-color-neutral-600: oklch(74.00% 0.0070 286.00);
162
+ --nvb-color-neutral-700: oklch(82.00% 0.0050 286.00);
163
+ --nvb-color-neutral-800: oklch(88.00% 0.0040 286.00);
164
+ --nvb-color-neutral-900: oklch(93.00% 0.0030 286.00);
165
+ --nvb-color-neutral-950: oklch(97.00% 0.0020 286.00);
166
166
  --nvb-color-risk-050: oklch(25.26% 0.0866 26);
167
167
  --nvb-color-risk-100: oklch(39.96% 0.1348 25.77);
168
168
  --nvb-color-risk-200: oklch(44.1% 0.1603 26.89);
@@ -218,18 +218,18 @@
218
218
  --nvb-color-info-800: oklch(89.99% 0.0556 231.68);
219
219
  --nvb-color-info-900: oklch(95.35% 0.024 236.81);
220
220
  --nvb-color-info-950: oklch(97.67% 0.0127 236.62);
221
- --nvb-color-text-000: oklch(18% 0.004 286);
222
- --nvb-color-text-050: oklch(20.5% 0.004 286);
223
- --nvb-color-text-100: oklch(23% 0.004 286);
224
- --nvb-color-text-200: oklch(27.5% 0.005 286);
225
- --nvb-color-text-300: oklch(35% 0.006 286);
226
- --nvb-color-text-400: oklch(47% 0.007 286);
227
- --nvb-color-text-500: oklch(60% 0.006 286);
228
- --nvb-color-text-600: oklch(71% 0.005 286);
229
- --nvb-color-text-700: oklch(81% 0.004 286);
230
- --nvb-color-text-800: oklch(87% 0.003 286);
231
- --nvb-color-text-900: oklch(92% 0.002 286);
232
- --nvb-color-text-950: oklch(96% 0.0015 286);
221
+ --nvb-color-text-000: oklch(19.00% 0.0060 286.00);
222
+ --nvb-color-text-050: oklch(23.00% 0.0070 286.00);
223
+ --nvb-color-text-100: oklch(27.00% 0.0080 286.00);
224
+ --nvb-color-text-200: oklch(38.00% 0.0090 286.00);
225
+ --nvb-color-text-300: oklch(49.50% 0.0100 286.00);
226
+ --nvb-color-text-400: oklch(58.00% 0.0100 286.00);
227
+ --nvb-color-text-500: oklch(65.00% 0.0090 286.00);
228
+ --nvb-color-text-600: oklch(74.00% 0.0070 286.00);
229
+ --nvb-color-text-700: oklch(82.00% 0.0050 286.00);
230
+ --nvb-color-text-800: oklch(88.00% 0.0040 286.00);
231
+ --nvb-color-text-900: oklch(93.00% 0.0030 286.00);
232
+ --nvb-color-text-950: oklch(97.00% 0.0020 286.00);
233
233
  --nvb-radius-sm: 2px;
234
234
  --nvb-radius-md: 4px;
235
235
  --nvb-radius-lg: 8px;
@@ -276,13 +276,37 @@
276
276
  color-scheme: light;
277
277
  background-color: var(--nvb-surface, var(--nvb-color-neutral-000));
278
278
  color: var(--nvb-color-neutral-800);
279
+
280
+ /* Scrollbars, written in tokens so they flip with the theme like everything else.
281
+ The track is transparent on purpose: every scroller then shows its own panel
282
+ background through it, instead of a second surface colour that has to be kept in
283
+ step with whatever the panel happens to use. Only the thumb is drawn, in the same
284
+ token the control borders use, so it clears 3:1 against the surface and reads as
285
+ something you can grab. `scrollbar-color` is inherited, so this one declaration
286
+ covers every scroller below the root. */
287
+ scrollbar-color: var(--nvb-color-neutral-300) transparent;
279
288
  }
280
289
 
281
290
  /* Both declarations above are written in tokens, so the dark theme flips them for free:
282
291
  `--nvb-color-neutral-000` becomes the dark surface and `--nvb-color-neutral-800` the light
283
- text. Only the colour scheme has to be said again, since it is not a token. */
292
+ text. Only the colour scheme has to be said again, since it is not a token.
293
+
294
+ The nested selectors matter for the designer, which carries the theme marker on its
295
+ shadow host and puts `.nvb-root` on the layout div one level inside it. Without them
296
+ that inner `.nvb-root` matches the light rule above, re-declares `color-scheme: light`
297
+ over the dark value it inherited, and every browser drawn part below it - scrollbars
298
+ above all - comes out light on a dark panel. The tokens survive that only because the
299
+ designer re-applies them inline; `color-scheme` is not a custom property, so nothing
300
+ repairs it.
301
+
302
+ Deliberately scoped to `:host(...)`, i.e. to the library's own shadow hosts, where the
303
+ same marker also flips the tokens. A bare `[data-theme='dark'] .nvb-root` would catch a
304
+ host application that themes its own page dark without asking for the dark palette, and
305
+ hand it dark scrollbars on light inputs. */
284
306
  :host([data-theme='dark']),
285
307
  :host(.nvb-dark),
308
+ :host([data-theme='dark']) .nvb-root,
309
+ :host(.nvb-dark) .nvb-root,
286
310
  .nvb-root.nvb-dark,
287
311
  .nvb-root[data-theme='dark'] {
288
312
  color-scheme: dark;
@@ -402,6 +402,19 @@ interface IElementActionConfig {
402
402
  navigateTo?: string;
403
403
  openInNewTab?: boolean;
404
404
  beforeNavigateDataSourceName?: string;
405
+ /**
406
+ * `navigate`: carries the before-navigate data source's response over as Angular
407
+ * Router navigation state instead of (or in addition to) `responseTargetPath`.
408
+ * The target page reads it back via `__route.state` / `{__route.state...}`, with
409
+ * no need for the value to round-trip through the URL.
410
+ */
411
+ passResponseAsNavigationState?: boolean;
412
+ /**
413
+ * `navigate`: key to nest the response under in navigation state, e.g. `order`
414
+ * exposes it as `__route.state.order`. Leave empty to spread the response object
415
+ * at the state root (`__route.state.<field>`).
416
+ */
417
+ navigationStateKey?: string;
405
418
  dataSourceName?: string;
406
419
  /** `sendMessage`: what to push over the websocket source named in `dataSourceName`. */
407
420
  messagePayload?: string;
@@ -3178,6 +3191,13 @@ declare class AccordionModel extends ElementBaseModel {
3178
3191
  }
3179
3192
 
3180
3193
  declare class DataService {
3194
+ /**
3195
+ * Read for `__language`, never written here. `UiTranslationService` is the one
3196
+ * place the active language lives - `api.setLanguage()`, the `language` input
3197
+ * and `settings.language` all end up there - and it depends on nothing, so
3198
+ * reading it from here cannot cycle.
3199
+ */
3200
+ private uiTranslationService;
3181
3201
  private _data;
3182
3202
  private dirtyState;
3183
3203
  private baselineSnapshot;
@@ -3190,6 +3210,8 @@ declare class DataService {
3190
3210
  getData(): Record<string, unknown>;
3191
3211
  getRawData(): Record<string, unknown>;
3192
3212
  buildRuntimeContext(additionalContext?: Record<string, unknown> | null, baseData?: Record<string, unknown> | null): Record<string, unknown>;
3213
+ /** The language the view is rendered in, as `api.getLanguage()` reports it. */
3214
+ getActiveLanguage(): string;
3193
3215
  setData(data: Record<string, unknown>): void;
3194
3216
  setValue(path: string, value: unknown, options?: {
3195
3217
  sender?: unknown;
@@ -4634,6 +4656,13 @@ declare class ElementActionService {
4634
4656
  private normalizeConditionExpression;
4635
4657
  private isInteractionLocked;
4636
4658
  private executeNavigate;
4659
+ /**
4660
+ * Turns the before-navigate data source's response into `NavigationExtras.state`,
4661
+ * Angular's built-in way to carry a value into the next route without round-tripping
4662
+ * it through the URL. The target page reads it back via `__route.state`
4663
+ * (see `RuntimeVariablesService`).
4664
+ */
4665
+ private buildNavigationStateExtras;
4637
4666
  private executeBeforeNavigateDataSource;
4638
4667
  /**
4639
4668
  * Pushes a message into a websocket source that is already connected. The socket stays
@@ -5873,6 +5902,36 @@ declare class ModelService {
5873
5902
  registerModel(type: string, modelClass: Type<ElementBaseModel>): void;
5874
5903
  registerModels(map: Record<string, Type<ElementBaseModel>>): void;
5875
5904
  createModel(type: string, data?: Partial<unknown>, options?: ICreateModelOptions): ElementBaseModel;
5905
+ /**
5906
+ * Strips the live, per-instance members out of a payload that was spread off
5907
+ * another model.
5908
+ *
5909
+ * Every repeater builds its row models by spreading the template model -
5910
+ * `createModel(column.type, { ...column, dataPath, ... })` - and every model
5911
+ * constructor runs `Object.assign(this, data)` *after* its own field
5912
+ * initializers. Whatever the spread carries therefore overwrites the fresh
5913
+ * members the class just made, and the row silently ends up pointing at the
5914
+ * template's:
5915
+ *
5916
+ * - `EventEmitter`s, so `onDataSourceChanged.fire()` for row 2 also runs the
5917
+ * handler every other row registered on that same emitter. One row's option
5918
+ * response then lands in all of them, which is exactly the classifier
5919
+ * bleeding between `dynamicTable` / `dynamicPanel` rows.
5920
+ * - `dataSource` config object, so editing one row's source edits them all.
5921
+ *
5922
+ * Dropping the emitters lets each model keep the one its own field
5923
+ * initializer made; the config objects are copied so a row owns its own.
5924
+ * Keys that are meant to be shared - `parentElement`, `dataService`, the
5925
+ * resolved `dataSource.source` - are passed through untouched.
5926
+ */
5927
+ private detachFromSourceModel;
5928
+ private isLiveEmitter;
5929
+ /**
5930
+ * A copy the row owns, except for `source`: that one is the resolved
5931
+ * `DataSourceModel` the renderer hangs off the config, and it is shared on
5932
+ * purpose - one definition, many readers.
5933
+ */
5934
+ private copyElementDataSource;
5876
5935
  /**
5877
5936
  * The values a type carries straight out of its model class, with no host
5878
5937
  * defaults and no structure data mixed in. Cached per type: building one means
@@ -7744,6 +7803,8 @@ declare class AccordionElement implements OnInit, OnDestroy {
7744
7803
  readonly itemTemplateScopeId: string;
7745
7804
  readonly itemTemplateScopeSelector: string;
7746
7805
  model: _angular_core.InputSignal<AccordionModel>;
7806
+ /** Test ids for this element, namespaced by its data path or name. */
7807
+ protected readonly tid: (part: string, ...segments: Array<string | number | null | undefined>) => string;
7747
7808
  column: _angular_core.InputSignal<ColumnModel>;
7748
7809
  rowsTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
7749
7810
  templateContext: _angular_core.InputSignal<Record<string, unknown>>;
@@ -7813,6 +7874,8 @@ declare class DialogElement implements OnInit, OnDestroy {
7813
7874
  readonly templateScopeId: string;
7814
7875
  readonly templateScopeSelector: string;
7815
7876
  model: _angular_core.InputSignal<DialogModel>;
7877
+ /** Test ids for this element, namespaced by its data path or name. */
7878
+ protected readonly tid: (part: string, ...segments: Array<string | number | null | undefined>) => string;
7816
7879
  column: _angular_core.InputSignal<ColumnModel>;
7817
7880
  rowsTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
7818
7881
  templateContext: _angular_core.InputSignal<Record<string, unknown>>;
@@ -7921,6 +7984,8 @@ declare class DynamicPanel implements OnInit, OnDestroy {
7921
7984
  readonly templateScopeId: string;
7922
7985
  readonly templateScopeSelector: string;
7923
7986
  model: _angular_core.InputSignal<ElementBaseModel>;
7987
+ /** Test ids for this element, namespaced by its data path or name. */
7988
+ protected readonly tid: (part: string, ...segments: Array<string | number | null | undefined>) => string;
7924
7989
  column: _angular_core.InputSignal<ColumnModel>;
7925
7990
  private dragAutoScrollService;
7926
7991
  recursiveData: _angular_core.InputSignal<Record<string, unknown>[]>;
@@ -8046,6 +8111,8 @@ declare class EmptyBlockElement implements OnInit, OnDestroy {
8046
8111
  private eventService;
8047
8112
  private dragAndDropService;
8048
8113
  model: _angular_core.InputSignal<EmptyBlockModel>;
8114
+ /** Test ids for this element, namespaced by its data path or name. */
8115
+ protected readonly tid: (part: string, ...segments: Array<string | number | null | undefined>) => string;
8049
8116
  column: _angular_core.InputSignal<ColumnModel>;
8050
8117
  isMobileView: _angular_core.InputSignal<boolean>;
8051
8118
  rowsTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
@@ -8125,6 +8192,8 @@ declare class PageElement implements OnInit, OnDestroy {
8125
8192
  private dragAndDropService;
8126
8193
  private readonly elementHoverService;
8127
8194
  model: _angular_core.InputSignal<PageElementModel>;
8195
+ /** Test ids for this element, namespaced by its data path or name. */
8196
+ protected readonly tid: (part: string, ...segments: Array<string | number | null | undefined>) => string;
8128
8197
  pageRows: _angular_core.InputSignal<RowModel[]>;
8129
8198
  pageIsEmpty: _angular_core.InputSignal<boolean>;
8130
8199
  isEditor: _angular_core.InputSignal<boolean>;
@@ -8157,6 +8226,8 @@ declare class PanelElement implements OnInit, OnDestroy {
8157
8226
  readonly templateScopeId: string;
8158
8227
  readonly templateScopeSelector: string;
8159
8228
  model: _angular_core.InputSignal<ElementBaseModel | PanelModel>;
8229
+ /** Test ids for this element, namespaced by its data path or name. */
8230
+ protected readonly tid: (part: string, ...segments: Array<string | number | null | undefined>) => string;
8160
8231
  column: _angular_core.InputSignal<ColumnModel>;
8161
8232
  isMobileView: _angular_core.InputSignal<boolean>;
8162
8233
  isEmpty: _angular_core.WritableSignal<boolean>;
@@ -8218,6 +8289,8 @@ declare class ProgressFlowElement implements OnInit, OnDestroy {
8218
8289
  readonly stepTemplateScopeId: string;
8219
8290
  readonly stepTemplateScopeSelector: string;
8220
8291
  model: _angular_core.InputSignal<ProgressFlowModel>;
8292
+ /** Test ids for this element, namespaced by its data path or name. */
8293
+ protected readonly tid: (part: string, ...segments: Array<string | number | null | undefined>) => string;
8221
8294
  column: _angular_core.InputSignal<ColumnModel>;
8222
8295
  rowsTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
8223
8296
  templateContext: _angular_core.InputSignal<Record<string, unknown>>;
@@ -8306,6 +8379,8 @@ declare class ProgressFlowElement implements OnInit, OnDestroy {
8306
8379
 
8307
8380
  declare class SplitterElement implements OnInit, OnDestroy {
8308
8381
  model: _angular_core.InputSignal<SplitterModel>;
8382
+ /** Test ids for this element, namespaced by its data path or name. */
8383
+ protected readonly tid: (part: string, ...segments: Array<string | number | null | undefined>) => string;
8309
8384
  column: _angular_core.InputSignal<ColumnModel>;
8310
8385
  isMobileView: _angular_core.InputSignal<boolean>;
8311
8386
  rowsTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
@@ -8368,6 +8443,8 @@ declare class TabsElement implements OnInit, OnDestroy {
8368
8443
  readonly tabTemplateScopeId: string;
8369
8444
  readonly tabTemplateScopeSelector: string;
8370
8445
  model: _angular_core.InputSignal<TabsModel>;
8446
+ /** Test ids for this element, namespaced by its data path or name. */
8447
+ protected readonly tid: (part: string, ...segments: Array<string | number | null | undefined>) => string;
8371
8448
  column: _angular_core.InputSignal<ColumnModel>;
8372
8449
  rowsTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
8373
8450
  templateContext: _angular_core.InputSignal<Record<string, unknown>>;
@@ -8939,6 +9016,7 @@ declare class RendererService {
8939
9016
  }
8940
9017
 
8941
9018
  declare class PreviewRendererService extends RendererService {
9019
+ private readonly uiTranslationService;
8942
9020
  private isDataSourceValueWatcherBound;
8943
9021
  private elementDataSourceSubscriptions;
8944
9022
  stopPreviewDataSources(): void;
@@ -8947,6 +9025,7 @@ declare class PreviewRendererService extends RendererService {
8947
9025
  getDataSource(name: string): DataSourceModel | undefined;
8948
9026
  private loadElementDataSource;
8949
9027
  private bindDataSourceValueWatcher;
9028
+ private reloadElementsWatching;
8950
9029
  private isElementUsingDataPath;
8951
9030
  private isDataPathMaterialized;
8952
9031
  private extractDependenciesFromUnknown;
@@ -8970,6 +9049,13 @@ interface IRuntimeRouteVariables {
8970
9049
  queryParams: Record<string, unknown>;
8971
9050
  data: Record<string, unknown>;
8972
9051
  fragment: string | null;
9052
+ /**
9053
+ * Value passed via Angular Router's `NavigationExtras.state` by the navigation that
9054
+ * landed on this route (e.g. a `navigate` action's `passResponseAsNavigationState`).
9055
+ * Angular stores this in `history.state`, so it survives only for the in-app
9056
+ * navigation that set it - a hard refresh or a direct URL open leaves it empty.
9057
+ */
9058
+ state: Record<string, unknown>;
8973
9059
  }
8974
9060
 
8975
9061
  declare class RuntimeVariablesService {
@@ -9024,6 +9110,12 @@ declare class RuntimeVariablesService {
9024
9110
  private isProjectedDataPath;
9025
9111
  private buildRouteVariables;
9026
9112
  private createEmptyVariables;
9113
+ /**
9114
+ * Reads the state the current navigation was given via Angular Router's
9115
+ * `NavigationExtras.state` (Angular mirrors it into `history.state`). Filters out
9116
+ * Angular's own `navigationId` bookkeeping key so only the caller's payload remains.
9117
+ */
9118
+ private readNavigationState;
9027
9119
  private normalizeMappings;
9028
9120
  private normalizeSourceType;
9029
9121
  private resolveDataSourceRefreshPaths;
@@ -1 +0,0 @@
1
- import{NgStyle as o}from"@angular/common";import*as n from"@angular/core";import{input as d,signal as s,inject as v,computed as l,ChangeDetectionStrategy as m,Component as u}from"@angular/core";import{E as g,a as p,D as c}from"./ngxviewbuilder-runtime-ngxviewbuilder-runtime-CY_sp0Pm.mjs";class i{model=d.required(...ngDevMode?[{debugName:"model"}]:[]);previewOpen=s(false,...ngDevMode?[{debugName:"previewOpen"}]:[]);previewSrc=s("",...ngDevMode?[{debugName:"previewSrc"}]:[]);elementActionService=v(g);avatarStyle=l(()=>{const e=Number(this.model()?.size);const a=Number.isFinite(e)&&e>0?Math.floor(e):48;const t=String(this.model()?.shape??"circle").trim().toLowerCase();return{width:`${a}px`,height:`${a}px`,"border-radius":t==="square"?"10px":"999px","background-color":String(this.model()?.backgroundColor??"#dfe6ff").trim()||"#dfe6ff",color:String(this.model()?.textColor??"#1b2d6b").trim()||"#1b2d6b",border:this.model().showBorder?"1px solid var(--nvb-color-neutral-300)":"none"}},...ngDevMode?[{debugName:"avatarStyle"}]:[]);initials=l(()=>{const e=String(this.model()?.nameText??"").trim();if(!e){return"U"}const a=e.split(/\s+/).map(t=>t.trim()).filter(t=>t.length>0);if(!a.length){return"U"}return a.slice(0,2).map(t=>t[0].toUpperCase()).join("")},...ngDevMode?[{debugName:"initials"}]:[]);onAvatarClick(e,a){a.preventDefault();a.stopPropagation();const t={value:e||this.initials(),item:null,row:null};const r=String(this.model().name??"").trim();if(r){t[r]=t["value"]}void this.elementActionService.runActions(this.model(),this.model().events??[],"click",t);if(!this.model().showPreview||!e){return}this.previewSrc.set(e);this.previewOpen.set(true)}closePreview(e){e?.preventDefault();e?.stopPropagation();this.previewOpen.set(false);this.previewSrc.set("")}static ɵfac=n.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.1.4",ngImport:n,type:i,deps:[],target:n.ɵɵFactoryTarget.Component});static ɵcmp=n.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.1.4",type:i,isStandalone:true,selector:"avatar-element",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:true,transformFunction:null}},ngImport:n,template:'<element-wrapper [model]="model()">\n @let avatarSrc = model().src | dynamicText: model();\n @let avatarName = model().nameText | dynamicText: model();\n\n <div class="nvb-avatar-wrap" data-testid="avatar-root">\n <button\n type="button"\n class="nvb-avatar"\n [ngStyle]="avatarStyle()"\n (click)="onAvatarClick(avatarSrc, $event)"\n >\n @if (avatarSrc) {\n <img [src]="avatarSrc" [alt]="avatarName" />\n } @else {\n <span>{{ initials() }}</span>\n }\n </button>\n </div>\n\n @if (previewOpen()) {\n <div class="nvb-avatar-preview" (click)="closePreview()">\n <button type="button" class="nvb-avatar-preview__close" (click)="closePreview($event)">\n <span class="material-symbols-outlined">close</span>\n </button>\n <img [src]="previewSrc()" [alt]="avatarName" />\n </div>\n }\n</element-wrapper>\n',styles:[":host{display:block;width:100%}.nvb-avatar-wrap{width:100%;display:flex;justify-content:flex-start;align-items:center}.nvb-avatar{border:none;padding:0;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;font-weight:700;font-size:14px;line-height:1}.nvb-avatar img{width:100%;height:100%;object-fit:cover;display:block}.nvb-avatar-preview{position:fixed;inset:0;background:#000000b8;z-index:1300;display:grid;place-items:center;padding:20px}.nvb-avatar-preview img{width:min(300px,100vw - 40px);height:min(300px,100vw - 40px);object-fit:cover;border-radius:14px;box-shadow:0 16px 32px #0000004d;background:#fff}.nvb-avatar-preview__close{position:absolute;top:12px;right:12px;width:36px;height:36px;border:none;border-radius:8px;background:#ffffff2e;color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.nvb-avatar-preview__close span{font-size:20px}\n"],dependencies:[{kind:"component",type:p,selector:"element-wrapper",inputs:["model","controlIdInput","labelForInput","groupRole","showTextWrapperInput"],exportAs:["elementWrapper"]},{kind:"directive",type:o,selector:"[ngStyle]",inputs:["ngStyle"]},{kind:"pipe",type:c,name:"dynamicText"}],changeDetection:n.ChangeDetectionStrategy.OnPush})}n.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.1.4",ngImport:n,type:i,decorators:[{type:u,args:[{selector:"avatar-element",changeDetection:m.OnPush,imports:[p,o,c],template:'<element-wrapper [model]="model()">\n @let avatarSrc = model().src | dynamicText: model();\n @let avatarName = model().nameText | dynamicText: model();\n\n <div class="nvb-avatar-wrap" data-testid="avatar-root">\n <button\n type="button"\n class="nvb-avatar"\n [ngStyle]="avatarStyle()"\n (click)="onAvatarClick(avatarSrc, $event)"\n >\n @if (avatarSrc) {\n <img [src]="avatarSrc" [alt]="avatarName" />\n } @else {\n <span>{{ initials() }}</span>\n }\n </button>\n </div>\n\n @if (previewOpen()) {\n <div class="nvb-avatar-preview" (click)="closePreview()">\n <button type="button" class="nvb-avatar-preview__close" (click)="closePreview($event)">\n <span class="material-symbols-outlined">close</span>\n </button>\n <img [src]="previewSrc()" [alt]="avatarName" />\n </div>\n }\n</element-wrapper>\n',styles:[":host{display:block;width:100%}.nvb-avatar-wrap{width:100%;display:flex;justify-content:flex-start;align-items:center}.nvb-avatar{border:none;padding:0;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;font-weight:700;font-size:14px;line-height:1}.nvb-avatar img{width:100%;height:100%;object-fit:cover;display:block}.nvb-avatar-preview{position:fixed;inset:0;background:#000000b8;z-index:1300;display:grid;place-items:center;padding:20px}.nvb-avatar-preview img{width:min(300px,100vw - 40px);height:min(300px,100vw - 40px);object-fit:cover;border-radius:14px;box-shadow:0 16px 32px #0000004d;background:#fff}.nvb-avatar-preview__close{position:absolute;top:12px;right:12px;width:36px;height:36px;border:none;border-radius:8px;background:#ffffff2e;color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.nvb-avatar-preview__close span{font-size:20px}\n"]}]}],propDecorators:{model:[{type:n.Input,args:[{isSignal:true,alias:"model",required:true}]}]}});export{i as AvatarElement};
@@ -1 +0,0 @@
1
- import*as s from"@angular/core";import{input as y,inject as p,signal as S,computed as v,ChangeDetectionStrategy as x,Component as w}from"@angular/core";import{Router as I,NavigationEnd as _}from"@angular/router";import{get as k}from"lodash-es";import{filter as C}from"rxjs";import{E as T,M as R,U as D,a as f,N as h,D as g}from"./ngxviewbuilder-runtime-ngxviewbuilder-runtime-CY_sp0Pm.mjs";class d{model=y.required(...ngDevMode?[{debugName:"model"}]:[]);elementActionService=p(T);markupSecurityService=p(R);uiTranslationService=p(D);router=p(I,{optional:true});routeRefresh=S(0,...ngDevMode?[{debugName:"routeRefresh"}]:[]);navigationSubscription=null;ngOnInit(){if(!this.router){return}this.navigationSubscription=this.router.events.pipe(C(r=>r instanceof _)).subscribe(()=>{this.routeRefresh.update(r=>r+1)})}ngOnDestroy(){this.navigationSubscription?.unsubscribe();this.navigationSubscription=null}renderedItems=v(()=>{this.routeRefresh();const r=this.resolveSourceItems();const e=[];if(this.model().showHome){const n=String(this.model()?.homeLabel??"").trim();e.push({label:n||this.uiTranslationService.translate("breadcrumbs.home","Home"),value:String(this.model()?.homeUrl??"/").trim()||"/"})}e.push(...r);const t=Number(this.model()?.maxItems??0);const i=Number.isFinite(t)&&t>0?Math.floor(t):0;if(i>0&&e.length>i&&i>=2){const n=e[0];const a=e.slice(e.length-(i-1));return[n,{label:"...",value:"",ellipsis:true},...a]}return e},...ngDevMode?[{debugName:"renderedItems"}]:[]);separatorIcon=v(()=>{const r=String(this.model()?.separator??"").trim();return r||"chevron_right"},...ngDevMode?[{debugName:"separatorIcon"}]:[]);resolveItemHref(r){return this.markupSecurityService.sanitizeNavigationUrl(String(r??""))}onItemClick(r,e,t){if(r.ellipsis){t.preventDefault();return}const i=Array.isArray(this.model().events)&&this.model().events.length>0;if(i){t.preventDefault()}else{const o=t.currentTarget instanceof HTMLAnchorElement?String(t.currentTarget.getAttribute("href")??"").trim():"";if(o.startsWith("/")&&this.router){t.preventDefault();this.router.navigateByUrl(o).catch(()=>{if(typeof window!=="undefined"&&typeof window.location?.assign==="function"){window.location.assign(o)}});return}}const n={item:r,row:r,index:e,value:r.value};const a=String(this.model().name??"").trim();if(a){n[a]=r.value}void this.elementActionService.runActions(this.model(),this.model().events??[],"click",n)}resolveSourceItems(){if(this.model()?.itemsSource==="route"){return this.buildRouteItems()}return Array.isArray(this.model()?.items)?[...this.model().items]:[]}buildRouteItems(){const r=this.router?.routerState?.snapshot?.root??null;if(!r){return[]}const e=String(this.model()?.routeLabelDataKey??"breadcrumb").trim()||"breadcrumb";const t=this.model()?.routeUsePathFallback!==false;const i=this.model()?.routeIncludeCurrent!==false;const n=this.resolveLeafSnapshot(r);const a=[];const o=[];for(const m of n.pathFromRoot){const c=m.url.map(l=>String(l?.path??"").trim()).filter(Boolean);if(c.length>0){a.push(...c)}const u=this.resolveRouteItem(m,a,e,t);if(u){o.push(u)}}if(!i&&o.length>0){o.pop()}return o}resolveLeafSnapshot(r){let e=r;while(e.firstChild){e=e.firstChild}return e}resolveRouteItem(r,e,t,i){const n=this.resolveRouteBreadcrumbConfig(r,t);if(n?.skip){return null}const a=i?this.resolveFallbackRouteLabel(r):"";const o=this.resolveRouteTemplate(String(n?.label??a??"").trim(),r,e);if(!o){return null}const m=this.resolveRouteTemplate(String(n?.value??"").trim(),r,e);const c=e.length>0?`/${e.join("/")}`:"/";return{label:o,value:m||c}}resolveRouteBreadcrumbConfig(r,e){const t=r.data?.[e];if(t===false||t===null){return{skip:true}}if(typeof t==="string"){const n=t.trim();return n?{label:n}:null}if(!t||typeof t!=="object"||Array.isArray(t)){return null}const i=t;return{label:String(i["label"]??"").trim()||void 0,value:String(i["value"]??"").trim()||void 0,skip:Boolean(i["skip"])}}resolveFallbackRouteLabel(r){const e=String(r.data?.["title"]??"").trim();if(e){return e}const t=r.url.map(n=>this.humanizeSegment(String(n?.path??"").trim())).filter(Boolean).join(" / ");if(t){return t}const i=String(r.routeConfig?.path??"").trim();if(i.startsWith(":")){const n=i.slice(1).split("/")[0];const a=String(r.params?.[n]??"").trim();if(a){return a}}return""}humanizeSegment(r){const e=decodeURIComponent(String(r??"").trim());if(!e){return""}return e.replace(/[-_]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}resolveRouteTemplate(r,e,t){const i=String(r??"").trim();if(!i){return""}const n=t.length>0?`/${t.join("/")}`:"/";const a=String(e.params?.["id"]??e.paramMap.get("id")??"").trim()||void 0;const o={route:{id:a,url:n,params:e.params??{},queryParams:e.queryParams??{},data:e.data??{},fragment:e.fragment??"",path:String(e.routeConfig?.path??"").trim()},id:a,url:n,params:e.params??{},queryParams:e.queryParams??{},data:e.data??{}};const m=u=>{const l=String(u??"").trim();if(!l){return""}const b=k(o,l);if(b===null||b===void 0){return""}return String(b)};const c=i.replace(/\{\{([^}]+)\}\}/g,(u,l)=>m(l));return c.replace(/\{([^}]+)\}/g,(u,l)=>m(l))}static ɵfac=s.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.1.4",ngImport:s,type:d,deps:[],target:s.ɵɵFactoryTarget.Component});static ɵcmp=s.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.1.4",type:d,isStandalone:true,selector:"breadcrumbs-element",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:true,transformFunction:null}},ngImport:s,template:'<element-wrapper [model]="model()">\n <nav class="nvb-breadcrumbs" aria-label="Breadcrumbs" data-testid="breadcrumbs-root">\n <ol>\n @for (item of renderedItems(); track $index; let itemIndex = $index; let isLast = $last) {\n <li>\n @if (item.ellipsis) {\n <span class="nvb-breadcrumbs__ellipsis">...</span>\n } @else if (!isLast && item.value) {\n <a\n [attr.href]="resolveItemHref(item.value | dynamicText: model())"\n (click)="onItemClick(item, itemIndex, $event)"\n >\n {{ item.label | dynamicText: model() }}\n </a>\n } @else {\n <span class="nvb-breadcrumbs__current">{{ item.label | dynamicText: model() }}</span>\n }\n\n @if (!isLast) {\n <nvb-icon class="nvb-breadcrumbs__separator" [name]="separatorIcon()"></nvb-icon>\n }\n </li>\n }\n </ol>\n </nav>\n</element-wrapper>\n',styles:[":host{display:block;width:100%}.nvb-breadcrumbs{width:100%}.nvb-breadcrumbs ol{list-style:none;margin:0;padding:0;display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-width:0}.nvb-breadcrumbs li{display:inline-flex;align-items:center;gap:6px;min-width:0}.nvb-breadcrumbs a,.nvb-breadcrumbs__current,.nvb-breadcrumbs__ellipsis{font-size:12px;line-height:1.3;text-decoration:none;max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nvb-breadcrumbs a{color:var(--nvb-color-primary-700);cursor:pointer}.nvb-breadcrumbs a:hover{text-decoration:underline}.nvb-breadcrumbs__current{color:var(--nvb-color-neutral-700);font-weight:600}.nvb-breadcrumbs__ellipsis{color:var(--nvb-color-neutral-500)}.nvb-breadcrumbs__separator{font-size:14px;color:var(--nvb-color-neutral-500)}\n"],dependencies:[{kind:"component",type:f,selector:"element-wrapper",inputs:["model","controlIdInput","labelForInput","groupRole","showTextWrapperInput"],exportAs:["elementWrapper"]},{kind:"component",type:h,selector:"nvb-icon",inputs:["name","svg","ariaLabel"]},{kind:"pipe",type:g,name:"dynamicText"}],changeDetection:s.ChangeDetectionStrategy.OnPush})}s.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.1.4",ngImport:s,type:d,decorators:[{type:w,args:[{selector:"breadcrumbs-element",changeDetection:x.OnPush,imports:[f,g,h],template:'<element-wrapper [model]="model()">\n <nav class="nvb-breadcrumbs" aria-label="Breadcrumbs" data-testid="breadcrumbs-root">\n <ol>\n @for (item of renderedItems(); track $index; let itemIndex = $index; let isLast = $last) {\n <li>\n @if (item.ellipsis) {\n <span class="nvb-breadcrumbs__ellipsis">...</span>\n } @else if (!isLast && item.value) {\n <a\n [attr.href]="resolveItemHref(item.value | dynamicText: model())"\n (click)="onItemClick(item, itemIndex, $event)"\n >\n {{ item.label | dynamicText: model() }}\n </a>\n } @else {\n <span class="nvb-breadcrumbs__current">{{ item.label | dynamicText: model() }}</span>\n }\n\n @if (!isLast) {\n <nvb-icon class="nvb-breadcrumbs__separator" [name]="separatorIcon()"></nvb-icon>\n }\n </li>\n }\n </ol>\n </nav>\n</element-wrapper>\n',styles:[":host{display:block;width:100%}.nvb-breadcrumbs{width:100%}.nvb-breadcrumbs ol{list-style:none;margin:0;padding:0;display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-width:0}.nvb-breadcrumbs li{display:inline-flex;align-items:center;gap:6px;min-width:0}.nvb-breadcrumbs a,.nvb-breadcrumbs__current,.nvb-breadcrumbs__ellipsis{font-size:12px;line-height:1.3;text-decoration:none;max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nvb-breadcrumbs a{color:var(--nvb-color-primary-700);cursor:pointer}.nvb-breadcrumbs a:hover{text-decoration:underline}.nvb-breadcrumbs__current{color:var(--nvb-color-neutral-700);font-weight:600}.nvb-breadcrumbs__ellipsis{color:var(--nvb-color-neutral-500)}.nvb-breadcrumbs__separator{font-size:14px;color:var(--nvb-color-neutral-500)}\n"]}]}],propDecorators:{model:[{type:s.Input,args:[{isSignal:true,alias:"model",required:true}]}]}});export{d as BreadcrumbsElement};
@@ -1 +0,0 @@
1
- import{NgClass as l,NgStyle as s}from"@angular/common";import*as n from"@angular/core";import{input as p,inject as m,computed as r,ChangeDetectionStrategy as d,Component as v}from"@angular/core";import{E as g,a as c,N as a}from"./ngxviewbuilder-runtime-ngxviewbuilder-runtime-CY_sp0Pm.mjs";class o{model=p.required(...ngDevMode?[{debugName:"model"}]:[]);elementActionService=m(g);iconName=r(()=>{const e=String(this.model()?.iconName??"").trim();return e||"star"},...ngDevMode?[{debugName:"iconName"}]:[]);iconStyle=r(()=>{const e=this.resolveSize(this.model()?.iconSize,24);const i=String(this.model()?.iconColor??"").trim();return{width:`${e+18}px`,height:`${e+18}px`,color:i||"var(--nvb-color-neutral-700)","font-size":`${e}px`}},...ngDevMode?[{debugName:"iconStyle"}]:[]);previewStyle=r(()=>{const e=this.resolveSize(this.model()?.previewSize,64);const i=String(this.model()?.iconColor??"").trim();return{width:`${e+20}px`,height:`${e+20}px`,color:i||"var(--nvb-color-neutral-700)","font-size":`${e}px`}},...ngDevMode?[{debugName:"previewStyle"}]:[]);onIconClick(e){e.preventDefault();e.stopPropagation();const i={value:this.iconName(),item:null,row:null};const t=String(this.model().name??"").trim();if(t){i[t]=this.iconName()}void this.elementActionService.runActions(this.model(),this.model().events??[],"click",i)}resolveSize(e,i){const t=Number(e);if(!Number.isFinite(t)||t<=0){return i}return Math.floor(t)}static ɵfac=n.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.1.4",ngImport:n,type:o,deps:[],target:n.ɵɵFactoryTarget.Component});static ɵcmp=n.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.1.4",type:o,isStandalone:true,selector:"icon-element",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:true,transformFunction:null}},ngImport:n,template:"<element-wrapper [model]=\"model()\">\n <section class=\"nvb-icon-wrap\" data-testid=\"icon-root\">\n <button\n type=\"button\"\n class=\"nvb-icon\"\n [ngClass]=\"{ 'nvb-icon--filled': model().filled }\"\n [ngStyle]=\"iconStyle()\"\n (click)=\"onIconClick($event)\"\n >\n <nvb-icon [name]=\"iconName()\"></nvb-icon>\n </button>\n\n @if (model().showPreview) {\n <div class=\"nvb-icon__preview\" [ngStyle]=\"previewStyle()\">\n <nvb-icon [name]=\"iconName()\"></nvb-icon>\n </div>\n }\n </section>\n</element-wrapper>\n",styles:[':host{display:block;width:100%}.nvb-icon-wrap{width:100%;display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap}.nvb-icon,.nvb-icon__preview{border:1px solid var(--nvb-color-neutral-300);background:var(--nvb-color-neutral-000);border-radius:10px;display:inline-flex;align-items:center;justify-content:center}.nvb-icon{cursor:pointer;min-width:42px;min-height:42px;padding:0}.nvb-icon span,.nvb-icon__preview span{line-height:1}.nvb-icon--filled span{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}\n'],dependencies:[{kind:"component",type:c,selector:"element-wrapper",inputs:["model","controlIdInput","labelForInput","groupRole","showTextWrapperInput"],exportAs:["elementWrapper"]},{kind:"directive",type:l,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:s,selector:"[ngStyle]",inputs:["ngStyle"]},{kind:"component",type:a,selector:"nvb-icon",inputs:["name","svg","ariaLabel"]}],changeDetection:n.ChangeDetectionStrategy.OnPush})}n.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.1.4",ngImport:n,type:o,decorators:[{type:v,args:[{selector:"icon-element",changeDetection:d.OnPush,imports:[c,l,s,a],template:"<element-wrapper [model]=\"model()\">\n <section class=\"nvb-icon-wrap\" data-testid=\"icon-root\">\n <button\n type=\"button\"\n class=\"nvb-icon\"\n [ngClass]=\"{ 'nvb-icon--filled': model().filled }\"\n [ngStyle]=\"iconStyle()\"\n (click)=\"onIconClick($event)\"\n >\n <nvb-icon [name]=\"iconName()\"></nvb-icon>\n </button>\n\n @if (model().showPreview) {\n <div class=\"nvb-icon__preview\" [ngStyle]=\"previewStyle()\">\n <nvb-icon [name]=\"iconName()\"></nvb-icon>\n </div>\n }\n </section>\n</element-wrapper>\n",styles:[':host{display:block;width:100%}.nvb-icon-wrap{width:100%;display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap}.nvb-icon,.nvb-icon__preview{border:1px solid var(--nvb-color-neutral-300);background:var(--nvb-color-neutral-000);border-radius:10px;display:inline-flex;align-items:center;justify-content:center}.nvb-icon{cursor:pointer;min-width:42px;min-height:42px;padding:0}.nvb-icon span,.nvb-icon__preview span{line-height:1}.nvb-icon--filled span{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}\n']}]}],propDecorators:{model:[{type:n.Input,args:[{isSignal:true,alias:"model",required:true}]}]}});export{o as IconElement};