@ngxviewbuilder/runtime 0.10.5 → 0.12.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.
Files changed (63) hide show
  1. package/LICENSE.md +1 -1
  2. package/fesm2022/ngxviewbuilder-runtime-autocomplete-element-D627PmE6.mjs +1 -0
  3. package/fesm2022/ngxviewbuilder-runtime-avatar-element-Bq1dfv2w.mjs +1 -0
  4. package/fesm2022/ngxviewbuilder-runtime-badge-element-C2f14QNw.mjs +1 -0
  5. package/fesm2022/ngxviewbuilder-runtime-breadcrumbs-element-DUD-zxsq.mjs +1 -0
  6. package/fesm2022/ngxviewbuilder-runtime-button-element-DLKWXLDr.mjs +1 -0
  7. package/fesm2022/ngxviewbuilder-runtime-chart-element-B8SBRRoW.mjs +1 -0
  8. package/fesm2022/ngxviewbuilder-runtime-checkbox-element-BUc3LIZY.mjs +1 -0
  9. package/fesm2022/ngxviewbuilder-runtime-column-CQL6_3oR.mjs +43 -0
  10. package/fesm2022/ngxviewbuilder-runtime-custom-html-element-BBZi5m3e.mjs +3 -0
  11. package/fesm2022/ngxviewbuilder-runtime-date-range-element-Dh0iamQ0.mjs +1 -0
  12. package/fesm2022/ngxviewbuilder-runtime-datepicker-element-BzrNzV5m.mjs +1 -0
  13. package/fesm2022/ngxviewbuilder-runtime-divider-element-DaWflvFL.mjs +1 -0
  14. package/fesm2022/ngxviewbuilder-runtime-dropdown-coordinator.service-CDJcQkrB.mjs +1 -0
  15. package/fesm2022/ngxviewbuilder-runtime-dynamic-text.pipe-DJNHX-1z.mjs +1 -0
  16. package/fesm2022/ngxviewbuilder-runtime-element-identity-host-Dh5Xi4Nx.mjs +1 -0
  17. package/fesm2022/ngxviewbuilder-runtime-element-wrapper-FxbwPLem.mjs +4 -0
  18. package/fesm2022/ngxviewbuilder-runtime-file-upload-element-CVmIguAo.mjs +1 -0
  19. package/fesm2022/ngxviewbuilder-runtime-icon-element-D1RfF2C0.mjs +1 -0
  20. package/fesm2022/ngxviewbuilder-runtime-iframe-element-DeU-ENc8.mjs +1 -0
  21. package/fesm2022/ngxviewbuilder-runtime-image-element-9xxf0IfB.mjs +1 -0
  22. package/fesm2022/ngxviewbuilder-runtime-input-mask.service-WZEF2C2_.mjs +1 -0
  23. package/fesm2022/ngxviewbuilder-runtime-list-box-element-BDz4--85.mjs +1 -0
  24. package/fesm2022/ngxviewbuilder-runtime-list-grid-element-BIyp-dce.mjs +1 -0
  25. package/fesm2022/ngxviewbuilder-runtime-message-card-element-D0JmZyvI.mjs +1 -0
  26. package/fesm2022/ngxviewbuilder-runtime-multi-select-element-kVcNNhEt.mjs +1 -0
  27. package/fesm2022/ngxviewbuilder-runtime-number-element-DctiWuS1.mjs +1 -0
  28. package/fesm2022/ngxviewbuilder-runtime-number-stepper-element-iBpT-zsi.mjs +1 -0
  29. package/fesm2022/ngxviewbuilder-runtime-nvb-select-BEN_kxMD.mjs +1 -0
  30. package/fesm2022/ngxviewbuilder-runtime-nvb-style-outlet-CVovePT_.mjs +1 -0
  31. package/fesm2022/ngxviewbuilder-runtime-page-title-element-CYS9yCvk.mjs +1 -0
  32. package/fesm2022/ngxviewbuilder-runtime-phone-input-element-D4rPIZgc.mjs +1 -0
  33. package/fesm2022/ngxviewbuilder-runtime-progress-bar-element-D780Bz4H.mjs +1 -0
  34. package/fesm2022/ngxviewbuilder-runtime-radio-element-CMnPn8dr.mjs +1 -0
  35. package/fesm2022/ngxviewbuilder-runtime-rich-text-element-jeeNhKfo.mjs +2 -0
  36. package/fesm2022/ngxviewbuilder-runtime-rolldown-runtime-DpJrqANO.mjs +1 -0
  37. package/fesm2022/ngxviewbuilder-runtime-router-outlet-element-DSIY_9ES.mjs +1 -0
  38. package/fesm2022/ngxviewbuilder-runtime-select-button-element-D3ECf6NN.mjs +1 -0
  39. package/fesm2022/ngxviewbuilder-runtime-select-element-CL95ygLj.mjs +1 -0
  40. package/fesm2022/ngxviewbuilder-runtime-signature-pad-element-DNWzJf8n.mjs +1 -0
  41. package/fesm2022/ngxviewbuilder-runtime-single-checkbox-element-CwUV4QeU.mjs +1 -0
  42. package/fesm2022/ngxviewbuilder-runtime-slider-element-DG3yzEol.mjs +1 -0
  43. package/fesm2022/ngxviewbuilder-runtime-spacer-element-DmK0-mBg.mjs +1 -0
  44. package/fesm2022/ngxviewbuilder-runtime-stats-card-element-BwF1DgRq.mjs +1 -0
  45. package/fesm2022/ngxviewbuilder-runtime-table-element-DEQz2d-s.mjs +1 -0
  46. package/fesm2022/ngxviewbuilder-runtime-text-element-CMGjmapD.mjs +1 -0
  47. package/fesm2022/ngxviewbuilder-runtime-textarea-element-BXIAOW-5.mjs +1 -0
  48. package/fesm2022/ngxviewbuilder-runtime-time-picker-element-DcaL0iul.mjs +1 -0
  49. package/fesm2022/ngxviewbuilder-runtime-toast-element-Dz0k7DJQ.mjs +1 -0
  50. package/fesm2022/ngxviewbuilder-runtime-toggle-switch-element-D2X34AZt.mjs +1 -0
  51. package/fesm2022/ngxviewbuilder-runtime-video-element-Cn45kYTv.mjs +1 -0
  52. package/fesm2022/ngxviewbuilder-runtime-viewport-breakpoints-CnsMrbX1.mjs +1 -0
  53. package/fesm2022/ngxviewbuilder-runtime.mjs +1 -1
  54. package/package.json +1 -1
  55. package/styles/components.css +7 -4
  56. package/styles/element.css +8 -8
  57. package/styles/tokens.css +34 -6
  58. package/types/ngxviewbuilder-runtime.d.ts +10163 -9128
  59. package/fesm2022/ngxviewbuilder-runtime-avatar-element-C1xYVnbZ.mjs +0 -1
  60. package/fesm2022/ngxviewbuilder-runtime-breadcrumbs-element-me81wZ6G.mjs +0 -1
  61. package/fesm2022/ngxviewbuilder-runtime-icon-element-gI8RpskB.mjs +0 -1
  62. package/fesm2022/ngxviewbuilder-runtime-ngxviewbuilder-runtime-DDs_WA4L.mjs +0 -49
  63. package/fesm2022/ngxviewbuilder-runtime-toast-element-CuvET6fw.mjs +0 -1
@@ -1 +1 @@
1
- import{A as s,b as i,d as t,e as o,f as l,g as r,h as n,i as E,B as d,j as _,k as S,l as c,m as u,n as T,o as A,p as m,q as I,C as N,r as C,s as L,t as M,u as R,v as b,w as g,x as B,y as p,z as O,F as P,G as v,H as V,I as D,J as x,K as w,L as U,O as y,P as G,Q as H,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 le,ac as re,ad as ne,ae as Ee,af as de,ag as _e,ah as Se,ai as ce,E as ue,aj as Te,ak as Ae,al as me,am as Ie,an as Ne,ao as Ce,ap as Le,aq as Me,ar as Re,as as be,at as ge,au as Be,av as pe,aw as Oe,ax as Pe,ay as ve,az as Ve,aA as De,aB as xe,aC as we,aD as Ue,aE as ye,aF as Ge,aG as He,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 la,b1 as ra,b2 as na,M as Ea,b3 as da,b4 as _a,b5 as Sa,b6 as ca,b7 as ua,b8 as Ta,b9 as Aa,ba as ma,bb as Ia,bc as Na,bd as Ca,be as La,bf as Ma,bg as Ra,bh as ba,bi as ga,bj as Ba,bk as pa,bl as Oa,bm as Pa,bn as va,bo as Va,bp as Da,bq as xa,br as wa,bs as Ua,bt as ya,bu as Ga,bv as Ha,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 ls,bS as rs,bT as ns,N as Es,bU as ds,bV as _s,bW as Ss,bX as cs,bY as us,bZ as Ts,b_ as As,b$ as ms,c0 as Is,c1 as Ns,c2 as Cs,c3 as Ls,c4 as Ms,c5 as Rs,c6 as bs,c7 as gs,c8 as Bs,c9 as ps,ca as Os,cb as Ps,cc as vs,cd as Vs,ce as Ds,cf as xs,cg as ws,ch as Us,ci as ys,cj as Gs,ck as Hs,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,cx as qs,cy as Qs,cz as $s,cA as ei,S as ai,cB as si,cC as ii,cD as ti,cE as oi,cF as li,cG as ri,cH as ni,cI as Ei,cJ as di,cK as _i,cL as Si,cM as ci,cN as ui,cO as Ti,cP as Ai,cQ as mi,cR as Ii,cS as Ni,cT as Ci,cU as Li,cV as Mi,cW as Ri,cX as bi,cY as gi,cZ as Bi,c_ as pi,c$ as Oi,d0 as Pi,d1 as vi,d2 as Vi,d3 as Di,d4 as xi,d5 as wi,d6 as Ui,d7 as yi,d8 as Gi,d9 as Hi,da as Fi,db as Xi,U 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 lt,dw as rt,dx as nt,dy as Et,dz as dt,dA as _t,dB as St,dC as ct,dD as ut,dE as Tt,dF as At,dG as mt,dH as It,dI as Nt,dJ as Ct,dK as Lt,dL as Mt,dM as Rt,dN as bt,dO as gt,dP as Bt,dQ as pt,dR as Ot,dS as Pt,dT as vt,dU as Vt,dV as Dt,dW as xt,dX as wt,dY as Ut,dZ as yt,d_ as Gt,d$ as Ht,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,eb as Jt,ec as qt,ed as Qt,ee as $t,ef as eo,eg as ao,eh as so,ei as io,ej as to,ek as oo}from"./ngxviewbuilder-runtime-ngxviewbuilder-runtime-DDs_WA4L.mjs";export{s as ALIGN_CLASS_MAP,i as ALIGN_CLASS_PREFIX,t as APPLICATION_LOCALE_VALUE,o as AccordionElement,l as AccordionModel,r as ApplicationLocaleService,n as AutocompleteModel,E as AvatarModel,d as BLOCK_TAGS,_ as BUILT_IN_STRUCTURE_MIGRATIONS,S as BUILT_IN_TABLE_CELL_ELEMENT_TYPES,c as BadgeModel,u as BreadcrumbsModel,T as BuilderModel,A as BuilderPageDisplayModeEnum,m as BuilderTabRegistryService,I as ButtonModel,N as COLOR_CLASS_PREFIX,C as CURRENT_SCHEMA_VERSION,L as ChartModel,M as CheckboxInputModel,R as ChoiceModel,b as ColumnFragmentModeEnum,g as ColumnModel,B as ComponentRegistryService,p as ConfirmDialog,O as CreatorStructureService,P as CustomHtmlModel,v as DATA_JSON_CAPABLE_ELEMENT_TYPES,V 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,G as DEFAULT_SIZE_VALUE,H 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,le as ELEMENT_ROW_CONTEXT_KEY,re as ELEMENT_ROW_SCOPE_PATH_KEY,ne as EN_UI_DICTIONARY,Ee as EXCLUDE_FROM_DATA_JSON_KEY,de as ElementActionButtonToneEnum,_e as ElementActionButtonVariantEnum,Se as ElementActionDialogOperationEnum,ce as ElementActionResponseModeEnum,ue as ElementActionService,Te as ElementActionSetValueModeEnum,Ae as ElementActionToastPositionEnum,me as ElementActionToastVariantEnum,Ie as ElementActionTriggerEnum,Ne as ElementActionTypeEnum,Ce as ElementBaseModel,Le as ElementContentBox,Me as ElementContentRow,Re as ElementDataSourceUseForEnum,be as ElementDefaultsService,ge as ElementExecutionModeEnum,Be as ElementFocusService,pe as ElementTypesEnum,Oe as ElementsService,Pe as EmptyBlockElement,ve as EmptyBlockModel,Ve as EventService,De as ExpressionService,xe as FONT_CLASS_MAP,we as FONT_CLASS_PREFIX,Ue as FeaturePackRegistryService,ye as FileUploadModel,Ge as ForgeInitializerService,He 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,la as MARK_TAG_MAP,ra as MAX_HISTORY_ENTRIES,na as MAX_INDENT_LEVEL,Ea as MarkupSecurityService,da as MessageCardModel,_a as ModelService,Sa as MultiSelectInputModel,ca 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,Ca as NGX_VIEW_BUILDER_ANY_ELEMENT_TYPE,La as NGX_VIEW_BUILDER_BRIDGE_PROTOCOL_VERSION,Ma as NGX_VIEW_BUILDER_HOSTED_MCP_URL,Ra as NGX_VIEW_BUILDER_MCP_KEY_TTL_MS,ba as NGX_VIEW_BUILDER_PROJECT_LAYER,ga as NGX_VIEW_BUILDER_UI_TRANSLATIONS,Ba as NVB_TEXT_CONTEXT_KEY,pa as NgxViewBuilder,Oa as NgxViewBuilderActionExecutorService,Pa as NgxViewBuilderAiApiService,va as NgxViewBuilderAlignEnum,Va as NgxViewBuilderApiService,Da as NgxViewBuilderAutomationActionTypeEnum,xa as NgxViewBuilderAutomationService,wa as NgxViewBuilderBuilderTabRenderModeEnum,Ua as NgxViewBuilderChromePositionEnum,ya as NgxViewBuilderDataSourceTypeEnum,Ga as NgxViewBuilderDialogCloseReasonEnum,Ha as NgxViewBuilderExecutionReasonEnum,Fa as NgxViewBuilderHeadlessService,Xa as NgxViewBuilderInteractionStatusEnum,Wa as NgxViewBuilderMcpBridgeService,ha as NgxViewBuilderPageNavigationModeEnum,Ya as NgxViewBuilderPreviewModeEnum,Ka as NgxViewBuilderProcessService,ka as NgxViewBuilderRenderModeEnum,za as NgxViewBuilderRenderPhaseEnum,fa as NgxViewBuilderRenderer,Za as NgxViewBuilderRuleExecutedBranchEnum,ja as NgxViewBuilderRuleRunModeEnum,Ja as NgxViewBuilderRulesEngineService,qa as NgxViewBuilderRuntime,Qa as NgxViewBuilderSaveRequestedSourceEnum,$a as NgxViewBuilderTableSettingsSourceEnum,es as NgxViewBuilderThemeModeEnum,as as NgxViewBuilderTriggerEngineService,ss as NgxViewBuilderTriggerEventEnum,is as NgxViewBuilderValidator,ts as NgxViewBuilderWebsocketMessageModeEnum,os as NumberInputModel,ls as NumberStepperModel,rs as NvbElement,ns as NvbElementContextService,Es as NvbIcon,ds as NvbRichTextEditor,_s as NvbRows,Ss as NvbScope,cs as NvbSelect,us as NvbStyleOutlet,Ts as NvbTab,As as ObjectPanelModel,ms as PHONE_COUNTRY_OPTIONS,Is as PHONE_COUNTRY_PROPERTY_CHOICES,Ns as PageElement,Cs as PageTitleModel,Ls as PanelElement,Ms as PanelModel,Rs as PhoneInputModel,bs as PreviewRendererService,gs as ProgressBarModel,Bs as ProgressFlowElement,ps as ProgressFlowModel,Os as PropertyModel,Ps as RICH_TEXT_DEFAULT_TOOLBAR_TOOLS,vs as RICH_TEXT_TOOLBAR_ICONS,Vs as RICH_TEXT_TOOLBAR_TOOLS,Ds as ROOT_BLOCK_TAGS,xs as RadioInputModel,ws as RendererService,Us as RichTextModel,ys as RouterOutletModel,Gs as RowModel,Hs as RuntimeDynamicPanel,Fs as RuntimeVariableSourceTypeEnum,Xs as RuntimeVariablesService,Ws as SINGLE_OBJECT_CONTAINER_TYPES,hs as SIZE_CLASS_MAP,Ys as SIZE_CLASS_PREFIX,Ks as SIZE_OPTION_VALUES,ks as SPECIAL_CHARACTERS,zs as SelectButtonModel,fs as SelectInputModel,Zs as SettingsModel,js as SignaturePadModel,Js as SingleCheckboxModel,qs as SliderModel,Qs as SpacerModel,$s as SplitterElement,ei as SplitterModel,ai as StateService,si as StatsCardModel,ii as StructureMigrationService,ti as StructureModel,oi as StructureService,li as TABLE_BORDER_CLASS_PREFIX,ri as TABLE_CELL_BACKGROUND_SWATCHES,ni as TABLE_CELL_VALIGN_CLASS_MAP,Ei as TABLE_CELL_VALIGN_CLASS_PREFIX,di as TABLE_CLASS,_i as TABLE_PICKER_COLUMNS,Si as TABLE_PICKER_ROWS,ci as TASK_ITEM_CHECKED_CLASS,ui as TASK_ITEM_CLASS,Ti as TASK_ITEM_MARKER_WIDTH,Ai as TASK_LIST_CLASS,mi as TEMPLATE_CONTAINER_TYPES,Ii as TableCellElementRegistryService,Ni as TableColumnAlignEnum,Ci as TableColumnCellActionsDisplayModeEnum,Li as TableColumnTypeEnum,Mi as TableFilterControlTypeEnum,Ri as TableFilterOptionsSourceTypeEnum,bi as TableInlineEditStartModeEnum,gi as TableInlineEditorTypeEnum,Bi as TableModel,pi as TableRowActionsDropdownButtonStyleEnum,Oi as TableStatusToneEnum,Pi as TabsElement,vi as TabsModel,Vi as TabsProModel,Di as TemplateEngineService,xi as TemplateStorageModeEnum,wi as TextAreaModel,Ui as TextInputModel,yi as TimePickerModel,Gi as ToastModel,Hi as ToggleSwitchModel,Fi as TooltipComponent,Xi as UiTranslatePipe,Wi as UiTranslationService,hi as ValidatorService,Yi as ValueChangeTriggerEnum,Ki as VideoModel,ki as applyDynamicPanelRowNumberingContext,zi as applyElementRowContext,fi as applyRuntimeNumberingContext,Zi as applyStructureMigrations,ji as applyViewportBreakpoints,Ji as bridgeNgxViewBuilderApiEvents,qi as buildElementRowRuntimeContext,Qi as buildFocusKey,$i as buildResponsiveColumnStyle,et as clearStructureMigrationNotice,at as cloneRecord,st as cloneValue,it as composeCssSize,tt as configureStructureMigrations,ot as createUuid,lt as describeDragEvent,rt as describeElementModel,nt as describeEventTarget,Et as describeMouseEvent,dt as elements,_t as emptyTemplateContainerValue,St as getMobileBreakpoint,ct as getRuntimeTextContext,ut as getStructureMigrationConfig,Tt as getTabletBreakpoint,At as getViewportContentWidth,mt as isDataJsonCapableElementType,It as isDragDebugEnabled,Nt as isMobileViewport,Ct as isMobileWidth,Lt as isPlainRecord,Mt as isRelativeResponsiveWidth,Rt as isSingleObjectContainerType,bt as isTabletViewport,gt as isTabletWidth,Bt as isTemplateContainerType,pt as lastStructureMigration,Ot as logDragDebug,Pt as logDragDebugThrottled,vt as migrateStructure,Vt as normalizeBreakpoint,Dt as normalizeCssSizeUnit,xt as normalizeResponsiveCssSize,wt as normalizeStringList,Ut as provideNgxViewBuilderExtensions,yt as provideNgxViewBuilderMigrations,Gt as provideNgxViewBuilderProjectLayer,Ht as provideNgxViewBuilderProjectLayers,Ft as provideNgxViewBuilderRuntime,Xt as provideNgxViewBuilderUiTranslations,Wt as pruneStructureSettings,ht as readSchemaVersion,Yt as recordStructureMigration,Kt as resetStructureMigrationConfig,kt as resolveAllowedPhoneCountries,zt as resolveCssSizeSetting,ft as resolveElementRowContext,Zt as resolveElementRowScope,jt as resolveElementRowScopedPath,Jt as resolveFixedViewport,qt as resolvePhoneCountry,Qt as resolveResponsiveDisplayWidth,$t as resolveResponsiveWidth,eo as resolveRuntimeTextContextValue,ao as resolveStructureSettings,so as rowIndexOfCellPath,io as setElementRowContext,to as setViewportContentWidth,oo as templateRowPath};
1
+ import{t as Pe}from"./ngxviewbuilder-runtime-rolldown-runtime-DpJrqANO.mjs";import{$ as eo,$t as to,A as no,B as oo,Bt as Q,C as Ne,Ct as ro,D as io,Dt as ao,E as lo,Et as so,F as co,Ft as bo,G as vo,Gt as uo,H as po,Ht as rn,I as go,J as mo,Jt as ho,K as fo,Kt as wo,L as yo,Lt as xo,M as ko,Mt as So,N as _o,Nt as Co,O as To,Ot as de,P as Ro,Pt as Eo,Q as Ao,Qt as Do,R as Mo,Rt as Io,S as Vo,St as Po,T as No,Tt as zo,U as Bo,Ut as an,V as Fo,Vt as N,W as Oo,Wt as Lo,X as qo,Xt as jo,Y as Ho,Yt as $o,Z as Uo,Zt as Jo,_ as Ko,_t as Wo,a as ln,an as O,at as Go,b as Yo,bt as Xo,c as ue,cn as Zo,ct as Qo,d as pe,dn as z,dt as er,en as tr,et as nr,f as or,fn as rr,ft as ir,g as L,gt as ar,h as lr,hn as _,ht as sr,i as ze,in as M,it as cr,j as br,jt as vr,k as dr,kt as ur,l as sn,ln as pr,lt as gr,m as mr,mn as cn,mt as hr,n as V,nn as fr,nt as wr,o as yr,on as ee,ot as xr,p as kr,pn as Sr,pt as _r,q as Cr,qt as Tr,r as Rr,rn as Er,rt as Ar,s as Dr,sn as Mr,st as Ir,t as I,tn as Vr,tt as Pr,un as Nr,ut as zr,v as bn,vt as Br,w as Fr,wt as Or,x as Lr,xt as qr,y as j,yt as jr,z as Hr,zt as $r}from"./ngxviewbuilder-runtime-dynamic-text.pipe-DJNHX-1z.mjs";import{$ as vn,A as Ur,B as Jr,C as dn,D as Be,E as H,F as Kr,G as Wr,H as Gr,I as Yr,J as Xr,K as un,L as pn,M as ge,N as Zr,O as Qr,P as ei,Q as ti,R as gn,T as ni,U as oi,V as ri,W as ii,X as ai,Y as li,Z as si,_ as ci,a as bi,at as vi,b as di,c as ui,ct as pi,d as gi,dt as te,et as me,f as mi,g as hi,gt as fi,h as wi,ht as Fe,i as yi,it as xi,j as ki,k as Si,l as _i,lt as mn,m as hn,mt as Oe,n as Ci,nt as Le,o as $,ot as Ti,p as Ri,q as Ei,r as qe,rt as he,s as P,st as Ai,tt as fn,u as Di,ut as je,v as Mi,w as fe,x as Ii,y as Vi,z as wn}from"./ngxviewbuilder-runtime-element-wrapper-FxbwPLem.mjs";import{t as Pi}from"./ngxviewbuilder-runtime-dropdown-coordinator.service-CDJcQkrB.mjs";import{t as He}from"./ngxviewbuilder-runtime-nvb-select-BEN_kxMD.mjs";import{t as we}from"./ngxviewbuilder-runtime-element-identity-host-Dh5Xi4Nx.mjs";import{a as Ni,c as zi,d as Bi,f as $e,i as Fi,l as Ue,n as Oi,o as Li,p as qi,r as Je,s as ne,t as ji,u as Hi}from"./ngxviewbuilder-runtime-viewport-breakpoints-CnsMrbX1.mjs";import{B as Ke,E as ye,F as $i,I as Ui,L as Ji,M as oe,N as Ki,O as We,P as Wi,R as Gi,S as re,T as Ge,_ as xe,c as yn,d as Yi,f as xn,h as ke,i as Xi,j as kn,k as Sn,l as _n,m as Zi,n as Cn,o as Qi,p as ea,r as ta,s as Tn,t as Ye,u as Xe,w as Rn,x as na,y as Se,z as En}from"./ngxviewbuilder-runtime-column-CQL6_3oR.mjs";import{a as oa,n as J,o as ie,r as An,s as ra}from"./ngxviewbuilder-runtime-table-element-DEQz2d-s.mjs";import{t as ia}from"./ngxviewbuilder-runtime-nvb-style-outlet-CVovePT_.mjs";import{A as aa,B as la,C as sa,D as ca,E as ba,F as va,G as da,H as ua,I as pa,J as ga,K as ma,L as ha,M as fa,N as wa,O as ya,P as xa,R as ka,S as Sa,T as _a,U as Ca,V as Ta,W as Ra,X as Ea,Y as Aa,_ as Da,a as Ma,b as Ia,c as Va,d as Pa,f as Na,g as za,h as Ba,i as Fa,j as Oa,k as La,l as qa,m as ja,o as Ha,p as $a,q as Ua,r as Ja,s as Ka,u as Wa,v as Ga,w as Ya,x as Xa,y as Za,z as Qa}from"./ngxviewbuilder-runtime-rich-text-element-jeeNhKfo.mjs";import*as l from"@angular/core";import{APP_INITIALIZER as el,ChangeDetectionStrategy as E,ChangeDetectorRef as tl,Component as A,ENVIRONMENT_INITIALIZER as nl,ElementRef as Ze,EventEmitter as ol,HostListener as rl,Injectable as q,Injector as il,Renderer2 as Dn,ViewChild as Qe,ViewEncapsulation as Mn,computed as y,effect as S,forwardRef as al,inject as g,input as p,makeEnvironmentProviders as _e,model as ll,output as w,signal as h,viewChild as In}from"@angular/core";import{DOCUMENT as Vn,JsonPipe as sl,NgClass as K,NgComponentOutlet as Pn,NgStyle as B,NgTemplateOutlet as F}from"@angular/common";import{isEqual as Nn}from"lodash-es";import{firstValueFrom as et}from"rxjs";import{HttpClient as zn,HttpErrorResponse as cl,HttpHeaders as bl}from"@angular/common/http";import{__decorate as vl}from"tslib";var D;(function(s){s["EDITOR"]="editor";s["PREVIEW"]="preview";s["JSON_EDITOR"]="jsonEditor";s["TEMPLATES"]="templates";s["FORM_SETTINGS"]="formSettings";s["TRANSLATIONS"]="translations";s["VARIABLES"]="variables";s["DOCUMENTATION"]="documentation"})(D||(D={}));var ae=class Bt{lazyElementRendering=h(false,...ngDevMode?[{debugName:"lazyElementRendering"}]:[]);isLazyElementRenderingEnabled(){return this.lazyElementRendering()}setLazyElementRenderingEnabled(e){this.lazyElementRendering.set(e===true)}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Bt,deps:[],target:l.ɵɵFactoryTarget.Injectable});static ɵprov=l.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Bt,providedIn:"root"})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:ae,decorators:[{type:q,args:[{providedIn:"root"}]}]});var dl=Pe({RuntimePageElement:()=>tt});var tt=class Ft{model=p(null,...ngDevMode?[{debugName:"model"}]:[]);pageRows=p(null,...ngDevMode?[{debugName:"pageRows"}]:[]);pageIsEmpty=p(false,...ngDevMode?[{debugName:"pageIsEmpty"}]:[]);isMobileView=p(false,...ngDevMode?[{debugName:"isMobileView"}]:[]);rowsTemplate=p(null,...ngDevMode?[{debugName:"rowsTemplate"}]:[]);projectedContext=p(null,...ngDevMode?[{debugName:"projectedContext"}]:[]);pageStyle=y(()=>{return{padding:this.normalizeCssSize(String(this.model()?.["pagePadding"]??"").trim()),"background-color":String(this.model()?.["pageBackgroundColor"]??"").trim()||null}},...ngDevMode?[{debugName:"pageStyle"}]:[]);normalizeCssSize(e){if(!e)return null;if(/^-?\d+(\.\d+)?$/.test(e))return`${e}px`;return e}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Ft,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:Ft,isStandalone:true,selector:"runtime-page-element",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:false,transformFunction:null},pageRows:{classPropertyName:"pageRows",publicName:"pageRows",isSignal:true,isRequired:false,transformFunction:null},pageIsEmpty:{classPropertyName:"pageIsEmpty",publicName:"pageIsEmpty",isSignal:true,isRequired:false,transformFunction:null},isMobileView:{classPropertyName:"isMobileView",publicName:"isMobileView",isSignal:true,isRequired:false,transformFunction:null},rowsTemplate:{classPropertyName:"rowsTemplate",publicName:"rowsTemplate",isSignal:true,isRequired:false,transformFunction:null},projectedContext:{classPropertyName:"projectedContext",publicName:"projectedContext",isSignal:true,isRequired:false,transformFunction:null}},host:{properties:{"attr.data-nvb-element-name":"model()?.name || null","attr.data-nvb-data-path":"model()?.dataPath || null","attr.data-nvb-element-type":"model()?.type || null","attr.data-testid":"(model()?.dataPath || model()?.name) ? 'nvb-element-' + (model()?.dataPath || model()?.name) : null"}},ngImport:l,template:"<div\n class=\"nvb-page\"\n data-testid=\"page-element-root\"\n [class.nvb-page-backgraund]=\"!model()?.removeBackgraund\"\n [ngStyle]=\"pageStyle()\"\n>\n @if (!model()?.hideHeader) {\n <header class=\"nvb-page__header\">\n @if (model()?.label) {\n <h4 class=\"nvb-page__header-title\">\n {{ $safeNavigationMigration(model()?.label) | dynamicText: model() }}\n </h4>\n }\n @if (model()?.['description']) {\n <p class=\"nvb-page__header-description\">\n {{ $safeNavigationMigration(model()?.['description']) | dynamicText: model() }}\n </p>\n }\n </header>\n }\n @if (pageIsEmpty()) {\n <div class=\"nvb-page__content\">\n @if (rowsTemplate() && projectedContext()) {\n <ng-container\n *ngTemplateOutlet=\"rowsTemplate(); context: projectedContext()\"\n ></ng-container>\n }\n </div>\n } @else {\n <div class=\"nvb-empty-page\" data-testid=\"page-element-empty\">\n <span class=\"material-symbols-outlined nvb-empty-page__icon\">note_stack_add</span>\n <p class=\"nvb-empty-page__text\">\n {{ 'page.emptyBuilder' | uiT: 'Add elements from the left menu to build content' }}\n </p>\n </div>\n }\n</div>\n",styles:[".nvb-page{padding:var(--nvb-page-padding, 10px);margin-bottom:var(--nvb-page-margin-bottom, 25px);display:flex;flex-direction:column;gap:var(--nvb-page-gap, 5px);border-radius:var(--nvb-page-radius, var(--nvb-radius-md));position:relative;border:1px solid transparent}.nvb-page__header{display:var(--nvb-page-header-display, block)}.nvb-page__header-title{color:var(--nvb-color-neutral-600)}.nvb-page__header-description{color:color-mix(in oklab,var(--nvb-color-neutral-600) 84%,var(--nvb-color-surface-mix-target, white));font-size:var(--nvb-text-md)}.nvb-page__content{display:flex;flex-wrap:wrap;z-index:1;padding:var(--nvb-page-content-padding, 3px)}.nvb-page-backgraund{background-color:var(--nvb-page-surface, color-mix(in oklab, var(--nvb-color-neutral-000) 86%, var(--nvb-color-neutral-050)));border:1px solid var(--nvb-page-border-color, color-mix(in oklab, var(--nvb-color-neutral-300) 78%, var(--nvb-color-surface-mix-target, white)))}.nvb-empty-page{background-color:var(--nvb-color-neutral-050);padding:50px;display:flex;justify-content:center;align-items:center;flex-direction:column;gap:5px;border:1px solid var(--nvb-color-neutral-200)}.nvb-empty-page__icon{font-size:60px;color:var(--nvb-color-neutral-600)}.nvb-empty-page__text{color:var(--nvb-color-neutral-600);font-size:var(--nvb-text-md)}\n"],dependencies:[{kind:"directive",type:B,selector:"[ngStyle]",inputs:["ngStyle"]},{kind:"directive",type:F,selector:"[ngTemplateOutlet]",inputs:["ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector"]},{kind:"pipe",type:I,name:"dynamicText"},{kind:"pipe",type:V,name:"uiT"}],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:tt,decorators:[{type:A,args:[{selector:"runtime-page-element",changeDetection:E.OnPush,imports:[B,F,I,V],host:{...we},template:"<div\n class=\"nvb-page\"\n data-testid=\"page-element-root\"\n [class.nvb-page-backgraund]=\"!model()?.removeBackgraund\"\n [ngStyle]=\"pageStyle()\"\n>\n @if (!model()?.hideHeader) {\n <header class=\"nvb-page__header\">\n @if (model()?.label) {\n <h4 class=\"nvb-page__header-title\">\n {{ $safeNavigationMigration(model()?.label) | dynamicText: model() }}\n </h4>\n }\n @if (model()?.['description']) {\n <p class=\"nvb-page__header-description\">\n {{ $safeNavigationMigration(model()?.['description']) | dynamicText: model() }}\n </p>\n }\n </header>\n }\n @if (pageIsEmpty()) {\n <div class=\"nvb-page__content\">\n @if (rowsTemplate() && projectedContext()) {\n <ng-container\n *ngTemplateOutlet=\"rowsTemplate(); context: projectedContext()\"\n ></ng-container>\n }\n </div>\n } @else {\n <div class=\"nvb-empty-page\" data-testid=\"page-element-empty\">\n <span class=\"material-symbols-outlined nvb-empty-page__icon\">note_stack_add</span>\n <p class=\"nvb-empty-page__text\">\n {{ 'page.emptyBuilder' | uiT: 'Add elements from the left menu to build content' }}\n </p>\n </div>\n }\n</div>\n",styles:[".nvb-page{padding:var(--nvb-page-padding, 10px);margin-bottom:var(--nvb-page-margin-bottom, 25px);display:flex;flex-direction:column;gap:var(--nvb-page-gap, 5px);border-radius:var(--nvb-page-radius, var(--nvb-radius-md));position:relative;border:1px solid transparent}.nvb-page__header{display:var(--nvb-page-header-display, block)}.nvb-page__header-title{color:var(--nvb-color-neutral-600)}.nvb-page__header-description{color:color-mix(in oklab,var(--nvb-color-neutral-600) 84%,var(--nvb-color-surface-mix-target, white));font-size:var(--nvb-text-md)}.nvb-page__content{display:flex;flex-wrap:wrap;z-index:1;padding:var(--nvb-page-content-padding, 3px)}.nvb-page-backgraund{background-color:var(--nvb-page-surface, color-mix(in oklab, var(--nvb-color-neutral-000) 86%, var(--nvb-color-neutral-050)));border:1px solid var(--nvb-page-border-color, color-mix(in oklab, var(--nvb-color-neutral-300) 78%, var(--nvb-color-surface-mix-target, white)))}.nvb-empty-page{background-color:var(--nvb-color-neutral-050);padding:50px;display:flex;justify-content:center;align-items:center;flex-direction:column;gap:5px;border:1px solid var(--nvb-color-neutral-200)}.nvb-empty-page__icon{font-size:60px;color:var(--nvb-color-neutral-600)}.nvb-empty-page__text{color:var(--nvb-color-neutral-600);font-size:var(--nvb-text-md)}\n"]}]}],propDecorators:{model:[{type:l.Input,args:[{isSignal:true,alias:"model",required:false}]}],pageRows:[{type:l.Input,args:[{isSignal:true,alias:"pageRows",required:false}]}],pageIsEmpty:[{type:l.Input,args:[{isSignal:true,alias:"pageIsEmpty",required:false}]}],isMobileView:[{type:l.Input,args:[{isSignal:true,alias:"isMobileView",required:false}]}],rowsTemplate:[{type:l.Input,args:[{isSignal:true,alias:"rowsTemplate",required:false}]}],projectedContext:[{type:l.Input,args:[{isSignal:true,alias:"projectedContext",required:false}]}]}});var ul=Pe({RuntimePanelElement:()=>nt});var nt=class Ot{model=p(null,...ngDevMode?[{debugName:"model"}]:[]);column=p(null,...ngDevMode?[{debugName:"column"}]:[]);isMobileView=p(false,...ngDevMode?[{debugName:"isMobileView"}]:[]);hasContent=p(false,...ngDevMode?[{debugName:"hasContent"}]:[]);rowsTemplate=p(null,...ngDevMode?[{debugName:"rowsTemplate"}]:[]);projectedContext=p(null,...ngDevMode?[{debugName:"projectedContext"}]:[]);hasHeaderContent=y(()=>{const e=String(this.model()?.label??"").trim();const t=String(this.model()?.description??"").trim();return e.length>0||t.length>0},...ngDevMode?[{debugName:"hasHeaderContent"}]:[]);section=y(()=>qi(this.model()),...ngDevMode?[{debugName:"section"}]:[]);panelStyle=y(()=>{if(this.section().active)return this.section().style;const e=this.model()?.["showBorder"]!==false;const t=this.normalizeCssSize(this.model()?.["panelBorderWidth"]);const n=this.normalizeCssColor(this.model()?.["panelBorderColor"]);const o=this.normalizeCssSize(this.model()?.["panelPadding"]);const i=this.normalizeCssSize(this.model()?.["mobilePadding"]);return{width:"100%",padding:this.isMobileView()||this.isRealMobileViewport()?i||o:o,"border-radius":this.normalizeCssSize(this.model()?.["panelRadius"]),"box-shadow":this.normalizeCssShadow(this.model()?.["panelShadow"]),"background-color":this.normalizeCssColor(this.model()?.["panelBackgroundColor"]),"border-width":e?t:"0","border-style":e?t?"solid":null:"none","border-color":e?n:"transparent"}},...ngDevMode?[{debugName:"panelStyle"}]:[]);headerStyle=y(()=>{const e=Boolean(this.model()?.["titleUnderline"]);const t=e?this.normalizeCssSize(this.model()?.["titleUnderlineWidth"]??1):null;return{"border-bottom-width":t,"border-bottom-style":t?"solid":"none","border-bottom-color":e?this.normalizeCssColor(this.model()?.["titleUnderlineColor"])||"var(--nvb-color-neutral-300)":null,"padding-bottom":t?"8px":null,"margin-bottom":t?"8px":null}},...ngDevMode?[{debugName:"headerStyle"}]:[]);contentStyle=y(()=>{return{"justify-content":this.normalizeJustify(this.model()?.["contentJustify"]),"align-items":this.normalizeAlign(this.model()?.["contentAlign"]),gap:this.normalizeCssSize(this.model()?.["contentGap"])}},...ngDevMode?[{debugName:"contentStyle"}]:[]);normalizeCssColor(e){return String(e??"").trim()||null}normalizeCssShadow(e){return String(e??"").trim()||null}normalizeJustify(e){return String(e??"").trim()||null}normalizeAlign(e){return String(e??"").trim()||null}normalizeCssSize(e){const t=String(e??"").trim();if(!t)return null;if(/^-?\d+(\.\d+)?$/.test(t))return`${t}px`;return t}isRealMobileViewport(){if(typeof window==="undefined"||typeof window.matchMedia!=="function")return false;return ne()}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Ot,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:Ot,isStandalone:true,selector:"runtime-panel-element",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:false,transformFunction:null},column:{classPropertyName:"column",publicName:"column",isSignal:true,isRequired:false,transformFunction:null},isMobileView:{classPropertyName:"isMobileView",publicName:"isMobileView",isSignal:true,isRequired:false,transformFunction:null},hasContent:{classPropertyName:"hasContent",publicName:"hasContent",isSignal:true,isRequired:false,transformFunction:null},rowsTemplate:{classPropertyName:"rowsTemplate",publicName:"rowsTemplate",isSignal:true,isRequired:false,transformFunction:null},projectedContext:{classPropertyName:"projectedContext",publicName:"projectedContext",isSignal:true,isRequired:false,transformFunction:null}},host:{properties:{"attr.data-nvb-element-name":"model()?.name || null","attr.data-nvb-data-path":"model()?.dataPath || null","attr.data-nvb-element-type":"model()?.type || null","attr.data-testid":"(model()?.dataPath || model()?.name) ? 'nvb-element-' + (model()?.dataPath || model()?.name) : null"}},ngImport:l,template:"<div\n class=\"nvb-panel\"\n [class.nvb-panel--section]=\"section().active\"\n [class.nvb-section-theme-dark]=\"section().active && section().theme === 'dark'\"\n data-testid=\"panel-element-root\"\n [ngStyle]=\"panelStyle()\"\n>\n @if (hasHeaderContent()) {\n <header class=\"nvb-panel__header\" [ngStyle]=\"headerStyle()\" data-testid=\"panel-element-header\">\n @if (model()?.label) {\n <h4 class=\"nvb-panel__header-heading\">\n {{ $safeNavigationMigration(model()?.label) | dynamicText: model() }}\n </h4>\n }\n @if (model()?.description) {\n <p class=\"nvb-panel__header-description\">\n {{ $safeNavigationMigration(model()?.description) | dynamicText: model() }}\n </p>\n }\n </header>\n }\n\n @if (hasContent()) {\n <div class=\"nvb-panel__content\" [ngStyle]=\"contentStyle()\" data-testid=\"panel-element-content\">\n @if (rowsTemplate() && projectedContext()) {\n <ng-container\n *ngTemplateOutlet=\"rowsTemplate(); context: projectedContext()\"\n ></ng-container>\n }\n </div>\n } @else {\n <div class=\"nvb-empty-panel\" data-testid=\"panel-element-empty\">\n <span class=\"material-symbols-outlined nvb-empty-panel__icon\">note_stack_add</span>\n <p class=\"nvb-empty-panel__text\">\n {{ 'panel.emptyBuilder' | uiT: 'Add elements from the left menu to build content' }}\n </p>\n </div>\n }\n</div>\n",styles:[".nvb-panel{box-sizing:border-box;min-width:0;max-width:100%;border:1px solid color-mix(in oklab,var(--nvb-color-neutral-300) 80%,var(--nvb-color-surface-mix-target, white));border-style:solid;border-radius:var(--nvb-radius-md);padding:5px;overflow:visible;background-color:color-mix(in oklab,var(--nvb-color-neutral-000) 88%,var(--nvb-color-neutral-050))}.nvb-panel__header{display:flex;flex-direction:column;gap:4px;min-width:0}.nvb-panel__header-heading{margin:0;font-size:16px;color:var(--nvb-color-neutral-600)}.nvb-panel__header-description{margin:0;color:color-mix(in oklab,var(--nvb-color-neutral-600) 86%,var(--nvb-color-surface-mix-target, white));font-size:14px}.nvb-panel__content{display:flex;flex-direction:column;width:100%;min-width:0;box-sizing:border-box;z-index:1;padding:3px;overflow:visible}.nvb-empty-panel{box-sizing:border-box;width:100%;max-width:100%;min-width:0;background-color:var(--nvb-color-neutral-050);padding:clamp(16px,5vw,50px);display:flex;position:relative;justify-content:center;align-items:center;flex-direction:column;gap:5px;border:1px solid var(--nvb-color-neutral-200);text-align:center}.nvb-empty-panel__icon{font-size:clamp(40px,10vw,60px);color:var(--nvb-color-neutral-600)}.nvb-empty-panel__text{color:var(--nvb-color-neutral-600);font-size:var(--nvb-text-md);margin:0;overflow-wrap:anywhere}\n"],dependencies:[{kind:"directive",type:B,selector:"[ngStyle]",inputs:["ngStyle"]},{kind:"directive",type:F,selector:"[ngTemplateOutlet]",inputs:["ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector"]},{kind:"pipe",type:V,name:"uiT"},{kind:"pipe",type:I,name:"dynamicText"}],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:nt,decorators:[{type:A,args:[{selector:"runtime-panel-element",changeDetection:E.OnPush,imports:[V,I,B,F],host:{...we},template:"<div\n class=\"nvb-panel\"\n [class.nvb-panel--section]=\"section().active\"\n [class.nvb-section-theme-dark]=\"section().active && section().theme === 'dark'\"\n data-testid=\"panel-element-root\"\n [ngStyle]=\"panelStyle()\"\n>\n @if (hasHeaderContent()) {\n <header class=\"nvb-panel__header\" [ngStyle]=\"headerStyle()\" data-testid=\"panel-element-header\">\n @if (model()?.label) {\n <h4 class=\"nvb-panel__header-heading\">\n {{ $safeNavigationMigration(model()?.label) | dynamicText: model() }}\n </h4>\n }\n @if (model()?.description) {\n <p class=\"nvb-panel__header-description\">\n {{ $safeNavigationMigration(model()?.description) | dynamicText: model() }}\n </p>\n }\n </header>\n }\n\n @if (hasContent()) {\n <div class=\"nvb-panel__content\" [ngStyle]=\"contentStyle()\" data-testid=\"panel-element-content\">\n @if (rowsTemplate() && projectedContext()) {\n <ng-container\n *ngTemplateOutlet=\"rowsTemplate(); context: projectedContext()\"\n ></ng-container>\n }\n </div>\n } @else {\n <div class=\"nvb-empty-panel\" data-testid=\"panel-element-empty\">\n <span class=\"material-symbols-outlined nvb-empty-panel__icon\">note_stack_add</span>\n <p class=\"nvb-empty-panel__text\">\n {{ 'panel.emptyBuilder' | uiT: 'Add elements from the left menu to build content' }}\n </p>\n </div>\n }\n</div>\n",styles:[".nvb-panel{box-sizing:border-box;min-width:0;max-width:100%;border:1px solid color-mix(in oklab,var(--nvb-color-neutral-300) 80%,var(--nvb-color-surface-mix-target, white));border-style:solid;border-radius:var(--nvb-radius-md);padding:5px;overflow:visible;background-color:color-mix(in oklab,var(--nvb-color-neutral-000) 88%,var(--nvb-color-neutral-050))}.nvb-panel__header{display:flex;flex-direction:column;gap:4px;min-width:0}.nvb-panel__header-heading{margin:0;font-size:16px;color:var(--nvb-color-neutral-600)}.nvb-panel__header-description{margin:0;color:color-mix(in oklab,var(--nvb-color-neutral-600) 86%,var(--nvb-color-surface-mix-target, white));font-size:14px}.nvb-panel__content{display:flex;flex-direction:column;width:100%;min-width:0;box-sizing:border-box;z-index:1;padding:3px;overflow:visible}.nvb-empty-panel{box-sizing:border-box;width:100%;max-width:100%;min-width:0;background-color:var(--nvb-color-neutral-050);padding:clamp(16px,5vw,50px);display:flex;position:relative;justify-content:center;align-items:center;flex-direction:column;gap:5px;border:1px solid var(--nvb-color-neutral-200);text-align:center}.nvb-empty-panel__icon{font-size:clamp(40px,10vw,60px);color:var(--nvb-color-neutral-600)}.nvb-empty-panel__text{color:var(--nvb-color-neutral-600);font-size:var(--nvb-text-md);margin:0;overflow-wrap:anywhere}\n"]}]}],propDecorators:{model:[{type:l.Input,args:[{isSignal:true,alias:"model",required:false}]}],column:[{type:l.Input,args:[{isSignal:true,alias:"column",required:false}]}],isMobileView:[{type:l.Input,args:[{isSignal:true,alias:"isMobileView",required:false}]}],hasContent:[{type:l.Input,args:[{isSignal:true,alias:"hasContent",required:false}]}],rowsTemplate:[{type:l.Input,args:[{isSignal:true,alias:"rowsTemplate",required:false}]}],projectedContext:[{type:l.Input,args:[{isSignal:true,alias:"projectedContext",required:false}]}]}});var Bn=Pe({RuntimeDynamicPanel:()=>W});var W=class Ie{dragAndDropService;model=p.required(...ngDevMode?[{debugName:"model"}]:[]);tid=qe(this.model,"nvb-dynamic-panel","dynamic-panel");column=p(...ngDevMode?[void 0,{debugName:"column"}]:[]);dragAutoScrollService=g(kn);recursiveData=p(null,...ngDevMode?[{debugName:"recursiveData"}]:[]);isMobileView=p(false,...ngDevMode?[{debugName:"isMobileView"}]:[]);data=h([],...ngDevMode?[{debugName:"data"}]:[]);dataSourceLoaded=h(true,...ngDevMode?[{debugName:"dataSourceLoaded"}]:[]);isEditor=h(false,...ngDevMode?[{debugName:"isEditor"}]:[]);dropOverlay=h(false,...ngDevMode?[{debugName:"dropOverlay"}]:[]);focusedElementName=h(null,...ngDevMode?[{debugName:"focusedElementName"}]:[]);hoveredElementName=null;onDataSourceLoadedHandler=null;onElementFocusHandler=null;onStructureElementChangingHandler=e=>{if(e.sender?.parentElement&&e.sender?.parentElement.name===this.model().name)this.loadPanelData()};onDataMutatedHandler=e=>{this.reloadIfPanelPathChanged(e?.dataPath)};onPropertyChangedHandler=e=>{const t=e?.payload;if(!t)return;if(t.propertyKey==="hidden"||t.propertyKey==="required"){this.cdr.markForCheck();return}if(t.propertyKey!=="disabled"&&t.propertyKey!=="readOnly")return;this.reapplyRowsInteractionState();this.cdr.markForCheck()};onDragStartHandler=()=>{this.dropOverlay.set(true)};onDragEndHandler=()=>{this.dropOverlay.set(false)};onDropHandler=()=>{this.dropOverlay.set(false)};onAnyValueChangedHandler=()=>{this.reapplyRowsInteractionState();this.cdr.markForCheck()};structureService=g(j);dataService=g(O);modelService=g(Ne);rendererService=g(Be);previewRendererService=g(H);loadRowDataSource(e){if(!M.isEditor())this.previewRendererService.loadDataSourceFor(e)}elementFocusService=g(ie);expressionService=g(pe);validatorService=g(te);eventService=g(L);cdr=g(tl);confirmDialogService=g(je);uiTranslationService=g(ee);ngxViewBuilderApiService=g(P);constructor(e){this.dragAndDropService=e;this.structureService.onElementChanging.add(this.onStructureElementChangingHandler);this.dataService.onDataMutated.add(this.onDataMutatedHandler);this.eventService.onDragStart.add(this.onDragStartHandler);this.eventService.onDragEnd.add(this.onDragEndHandler);this.eventService.onDrop.add(this.onDropHandler);this.eventService.afterPropertyChanged.add(this.onPropertyChangedHandler);this.dataService.onValueChanged.add(this.onAnyValueChangedHandler)}ngOnInit(){this.dropOverlay.set(this.dragAutoScrollService.isDragging());this.dataSourceLoaded.set(this.resolveInitialDataSourceLoadedState());this.onDataSourceLoadedHandler=()=>{this.markDataSourceLoaded();this.loadPanelData()};this.model()["afterDataSourceLoad"]?.add(this.onDataSourceLoadedHandler);this.loadPanelData();this.isEditor.set(M.isEditor());this.onElementFocusHandler=e=>{this.focusedElementName.set(this.resolveFocusKey(e?.payload))};this.eventService.onElementFocus.add(this.onElementFocusHandler)}ngOnDestroy(){if(this.cellReloadTimer!==null){clearTimeout(this.cellReloadTimer);this.cellReloadTimer=null}this.structureService.onElementChanging.remove(this.onStructureElementChangingHandler);this.dataService.onDataMutated.remove(this.onDataMutatedHandler);this.eventService.onDragStart.remove(this.onDragStartHandler);this.eventService.onDragEnd.remove(this.onDragEndHandler);this.eventService.onDrop.remove(this.onDropHandler);this.eventService.afterPropertyChanged.remove(this.onPropertyChangedHandler);this.dataService.onValueChanged.remove(this.onAnyValueChangedHandler);if(this.onDataSourceLoadedHandler){this.model()["afterDataSourceLoad"]?.remove(this.onDataSourceLoadedHandler);this.onDataSourceLoadedHandler=null}if(this.onElementFocusHandler){this.eventService.onElementFocus.remove(this.onElementFocusHandler);this.onElementFocusHandler=null}}onFocus(e){if(!this.isEditor())return;this.elementFocusService.setFocus(this.model());this.focusedElementName.set(this.resolveFocusKey(this.model()))}resolveFocusKey(e){return Ke(e)}onDragOver(e){e.preventDefault();this.hoveredElementName=this.model().name}onDragLeav(e){e.preventDefault();this.hoveredElementName=null}onDrop(e){if(!this.isEditor()&&this.isInteractionLocked())return;this.column().rows=[];e.preventDefault();this.dragAndDropService.onRowDrop(e,this.model(),0,this.column().rows,"top");this.hoveredElementName=null}isObjectMode(){return Q(this.model()?.type)}rowPath(e,t){return an(e,t,this.model()?.type)}loadPanelData(){if(this.isObjectMode()){this.loadObjectData();return}const e=this.model().dataPath;const t=this.model().template;const n=t&&typeof t==="object";const o=c=>{if(n)this.syncRowModels(c)};if(this.recursiveData()){const c=Array.isArray(this.recursiveData())?this.recursiveData():[];if(this.hasDataSource()&&!this.dataSourceLoaded())this.markDataSourceLoaded();this.model().value=c;this.data.set(c);o(c);return}const i=this.dataService.getValue(e);if(Array.isArray(i)){if(this.hasDataSource()&&!this.dataSourceLoaded())this.markDataSourceLoaded();this.model().value=i;this.data.set(i);o(i);return}const r=this.model().value;const a=Array.isArray(r)?r:[];if(this.hasDataSource()&&!this.dataSourceLoaded()&&(Array.isArray(r)||M.isEditor()))this.markDataSourceLoaded();this.model().value=a;this.data.set(a);o(a)}loadObjectData(){const e=this.model().dataPath;const t=e?this.dataService.getValue(e):void 0;const n=this.model().value;const o=r=>r&&typeof r==="object"&&!Array.isArray(r)?r:null;const i=o(t)??o(n)??{};if(this.hasDataSource()&&!this.dataSourceLoaded())this.markDataSourceLoaded();this.model().value=i;this.data.set([i]);if(this.model().template&&typeof this.model().template==="object")this.syncRowModels([i])}async deleteRow(e){if(this.isInteractionLocked()||!this.canDeleteRow(this.data()[e],e))return;if(!await this.ensureDeleteConfirmed())return;const t=this.model().dataPath;if(!t)return;this.removeFlatMapBranch(`${t}[${e}]`);const n=this.dataService.getValue(t);const o=Array.isArray(n)?[...n]:Array.isArray(this.model().value)?[...this.model().value]:[];if(!Array.isArray(o))return;const i=o[e]??null;o.splice(e,1);this.updatePathsAfterDelete(t,e);this.dataService.setValue(t,o).then(()=>{this.loadPanelData();this.rendererService.applyDependencies();this.rendererService.applyExpressions();this.validatorService.evaluateAllValidators();this.ngxViewBuilderApiService.notifyDynamicPanelItemRemoved({elementName:this.model().name,elementDataPath:t,elementType:this.model().type,element:this.model(),rowIndex:e,row:i,rows:o,total:o.length})})}onDelete(){if(this.isInteractionLocked())return;this.structureService.removeFromElement(this.model().name);this.structureService.removeFromPage(this.model().name);this.eventService.onDrop.fire({payload:null})}addRow(){if(this.isInteractionLocked()||!this.canAddRows())return;const e={};const t=this.model().template;this.createDefaultObject(t,e);const n=this.model().dataPath;const o=this.dataService.getValue(n);const i=Array.isArray(o)?[...o]:Array.isArray(this.model().value)?[...this.model().value]:[];i.push(e);this.dataService.setValue(n,i).then(()=>{this.createNewModels(i);this.loadPanelData();this.rendererService.applyDependencies();this.rendererService.applyExpressions();this.validatorService.evaluateAllValidators();this.ngxViewBuilderApiService.notifyDynamicPanelItemAdded({elementName:this.model().name,elementDataPath:n,elementType:this.model().type,element:this.model(),rowIndex:i.length-1,row:e,rows:i,total:i.length})})}createDefaultObject(e,t){Object.keys(e).forEach(n=>{const o=e[n];if(N(o.type)||o.type==="dynamicTable"){t[o.name]=Q(o.type)?{}:[];return}t[o.name]=this.hasMeaningfulValue(o.defaultValue)?o.defaultValue:void 0})}createNewModels(e){const t=e.length-1;const n=this.model().dataPath;const o=this.model().template;this.createModelsRecursive(o,n,t,this.model().schemaPath)}createModelsRecursive(e,t,n,o){Object.keys(e).forEach(i=>{const r=e[i];const a=`${this.rowPath(t,n)}.${r.name}`;const c=`${o}.template.${i}`;const b=this.modelService.createModel(r.type,{...r,dataPath:a,schemaPath:c,dependsOn:[],index:n,parentElement:this.model(),isTemplateElement:true,templateElementParentDataPath:this.model().dataPath,value:Q(r.type)?{}:r.type==="dynamicPanel"||r.type==="dynamicTable"?[]:this.hasMeaningfulValue(r.defaultValue)?r.defaultValue:void 0});this.structureService.flatModelMap[a]=b;this.applyParentInteractionStateToTemplateModel(b);this.rendererService.applyElementDependencies(b);this.expressionService.evaluateStartingElement(b);this.loadRowDataSource(b)})}syncRowModels(e){const t=String(this.model()?.dataPath??"").trim();const n=this.model().template;if(!t||!n||typeof n!=="object")return;const o=Object.entries(n);this.collectExistingRowIndexes(t).forEach(i=>{if(i<e.length)return;this.removeFlatMapBranch(`${t}[${i}]`)});e.forEach((i,r)=>{const a=new Set;o.forEach(([c,b],v)=>{const d=String(b?.name??c).trim();if(!d)return;a.add(d);const u=`${this.rowPath(t,r)}.${d}`;const m=`${this.model().schemaPath}.template.${c}`;const f=this.resolveTemplateValue(i,d,c,b,v);const x=Q(b.type)?f&&typeof f==="object"&&!Array.isArray(f)?f:{}:b.type==="dynamicPanel"||b.type==="dynamicTable"?Array.isArray(f)?f:[]:f;const k=this.structureService.flatModelMap[u];if(k&&String(k.type??"").trim()===String(b.type??"").trim()){k.value=x;k.index=r;k.parentElement=this.model();k.dataPath=u;k.schemaPath=m;k.isTemplateElement=true;k.templateElementParentDataPath=this.model().dataPath;this.syncTemplateOverridableFlags(k,b);this.applyParentInteractionStateToTemplateModel(k);ze(k,this.model(),r,e.length);return}const C=this.modelService.createModel(b.type,{...b,dataPath:u,schemaPath:m,dependsOn:[],index:r,parentElement:this.model(),isTemplateElement:true,templateElementParentDataPath:this.model().dataPath,value:x});this.structureService.flatModelMap[u]=C;this.applyParentInteractionStateToTemplateModel(C);ze(C,this.model(),r,e.length);this.rendererService.applyElementDependencies(C);this.expressionService.evaluateStartingElement(C);this.loadRowDataSource(C)});this.removeStaleRowTemplateModels(t,r,a)})}resolveTemplateValue(e,t,n,o,i){const r=e??{};if(Object.prototype.hasOwnProperty.call(r,t))return r[t];if(n&&Object.prototype.hasOwnProperty.call(r,n))return r[n];const a=String(o?.label??"").trim();if(a&&Object.prototype.hasOwnProperty.call(r,a))return r[a];if(Array.isArray(e))return e[i];const c=Object.entries(r);if(i<0||i>=c.length)return;return c[i][1]}reapplyRowsInteractionState(){const e=String(this.model()?.dataPath??"").trim();const t=this.model()?.template;if(!e||!t||typeof t!=="object")return;const n=Object.entries(t);this.collectExistingRowIndexes(e).forEach(o=>{n.forEach(([i,r])=>{const a=String(r?.name??i).trim();if(!a)return;const c=`${this.rowPath(e,o)}.${a}`;const b=this.structureService.flatModelMap[c];if(b){this.syncTemplateOverridableFlags(b,r);this.applyParentInteractionStateToTemplateModel(b)}})})}syncTemplateOverridableFlags(e,t){if(t?.["inheritParentState"]!==void 0)e["inheritParentState"]=t["inheritParentState"];else delete e["inheritParentState"];if(t?.["ignoreParentState"]!==void 0)e["ignoreParentState"]=t["ignoreParentState"];else delete e["ignoreParentState"]}applyParentInteractionStateToTemplateModel(e){if(!e)return;const t=oa(e);const n=t.readOnly;const o=t.disabled;if(typeof e["__pfBaseReadOnly"]!=="boolean")e["__pfBaseReadOnly"]=Boolean(e.readOnly);if(typeof e["__pfBaseDisabled"]!=="boolean")e["__pfBaseDisabled"]=Boolean(e.disabled);const i=Boolean(e.readOnly);const r=Boolean(e.disabled);e.readOnly=Boolean(e["__pfBaseReadOnly"])||Boolean(e["__pfLogicReadOnly"])||n;e.disabled=Boolean(e["__pfBaseDisabled"])||Boolean(e["__pfLogicDisabled"])||o;e["__pfInteractionReadonly"]=Boolean(e.readOnly);e["__pfInteractionDisabled"]=Boolean(e.disabled);e["__pfInteractionLocked"]=Boolean(e.readOnly)||Boolean(e.disabled);if(i!==Boolean(e.readOnly))this.notifyRowElementPropertyChanged(e,"readOnly",e.readOnly);if(r!==Boolean(e.disabled))this.notifyRowElementPropertyChanged(e,"disabled",e.disabled)}notifyRowElementPropertyChanged(e,t,n){const o=String(e?.dataPath??"").trim();if(!o)return;this.eventService.afterPropertyChanged.fire({payload:{elementNameOrPath:o,propertyKey:t,value:n}})}collectExistingRowIndexes(e){if(this.isObjectMode()){const i=`${e}.`;return Object.keys(this.structureService.flatModelMap).some(r=>r.startsWith(i))?[0]:[]}const t=this.escapeRegex(e);const n=new RegExp(`^${t}\\[(\\d+)\\]`);const o=new Set;Object.keys(this.structureService.flatModelMap).forEach(i=>{const r=i.match(n);if(!r)return;o.add(Number(r[1]))});return Array.from(o.values())}removeStaleRowTemplateModels(e,t,n){const o=`${this.rowPath(e,t)}.`;Object.keys(this.structureService.flatModelMap).forEach(i=>{if(!i.startsWith(o))return;const r=i.slice(o.length).match(/^([^[.\]]+)/)?.[1]??"";if(!r||n.has(r))return;delete this.structureService.flatModelMap[i]})}removeFlatMapBranch(e){Object.keys(this.structureService.flatModelMap).forEach(t=>{if(t===e||t.startsWith(`${e}.`)||t.startsWith(`${e}[`))delete this.structureService.flatModelMap[t]})}hasMeaningfulValue(e){if(e===void 0||e===null)return false;if(typeof e==="string")return e.trim().length>0;return true}getElement(e){const t=String(e??"").trim();if(!t)return null;const n=this.model()?.template?.[t];if(n)return n;const o=this.findTemplateElementDeep(this.model()?.template,t);if(o)return o;return this.structureService.getElement(t)??null}getElementModel(e,t){const n=this.model().dataPath;const o=this.getElement(t);if(!o)return null;const i=`${this.rowPath(n,e)}.${o.name}`;return this.structureService.flatModelMap[i]||null}findTemplateElementDeep(e,t){if(!e||typeof e!=="object"||!t)return null;if(e[t])return e[t];for(const n of Object.values(e)){const o=n?.template&&typeof n.template==="object"?n.template:null;if(!o)continue;const i=this.findTemplateElementDeep(o,t);if(i)return i}return null}updatePathsAfterDelete(e,t){const n=this.structureService.flatModelMap;const o=`${e}[`;const i=[];for(const r in n){if(!r.startsWith(o))continue;const a=n[r];const c=r.match(new RegExp(`^${this.escapeRegex(e)}\\[(\\d+)\\]`));if(!c)continue;const b=parseInt(c[1],10);if(b===t)continue;let v=r;let d=false;if(b>t){const u=b-1;v=r.replace(`${e}[${b}]`,`${e}[${u}]`);d=true;a.dataPath=v;if(typeof a.templateElementParentDataPath==="string")a.templateElementParentDataPath=a.templateElementParentDataPath.replace(`${e}[${b}]`,`${e}[${u}]`);if(typeof a.index==="number")a.index=u}if(Array.isArray(a.dependsOn)&&a.dependsOn.length>0){const u=new Set;for(const m of a.dependsOn){if(typeof m!=="string")continue;const f=m.match(new RegExp(`(${this.escapeRegex(e)}\\[)(\\d+)(\\])`));if(!f){u.add(m);continue}const x=parseInt(f[2],10);if(x===t)continue;if(x>t){const k=x-1;const C=m.replace(`${e}[${x}]`,`${e}[${k}]`);u.add(C)}else u.add(m)}a.dependsOn=Array.from(u)}if(d)i.push({oldPath:r,newPath:v,model:a})}for(const{oldPath:r,newPath:a,model:c}of i){delete n[r];n[a]=c}}escapeRegex(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}panelStyle(){const e=this.normalizeCssSize(this.model()?.["panelBorderWidth"]);const t=this.normalizeCssColor(this.model()?.["panelBorderColor"]);const n=this.normalizeCssSize(this.model()?.["panelPadding"]);const o=this.normalizeCssSize(this.model()?.["mobilePadding"]);return{width:"100%",padding:this.isMobileView()||this.isRealMobileViewport()?o||n:n,"border-radius":this.normalizeCssSize(this.model()?.["panelRadius"]),"box-shadow":this.normalizeCssShadow(this.model()?.["panelShadow"]),"background-color":this.normalizeCssColor(this.model()?.["panelBackgroundColor"]),"border-width":e,"border-style":e?"solid":null,"border-color":t}}bodyStyle(){return{"justify-content":this.normalizeJustify(this.model()?.["contentJustify"]),"align-items":this.normalizeAlign(this.model()?.["contentAlign"]),gap:this.normalizeCssSize(this.model()?.["contentGap"])}}previewRowStyle(e){const t=e??this.model();const n=this.normalizeContentDisplay(t?.["contentDisplay"]);const o=n==="grid";return{display:n,"flex-direction":o?null:this.normalizeFlexDirection(t?.["flexDirection"]),"flex-wrap":o?null:"wrap","justify-content":this.normalizeJustify(t?.["contentJustify"]),"align-items":this.normalizeAlign(t?.["contentAlign"]),gap:this.normalizeCssSize(t?.["contentGap"]),"margin-top":this.normalizeCssSize(t?.["contentGap"])?"0px":null,"grid-template-columns":o?this.normalizeCssTemplate(t?.["gridTemplateColumns"]):null,"grid-auto-rows":o?this.normalizeCssTemplate(t?.["gridAutoRows"]):null}}resolvePreviewColumnStyle(e){return Xe({width:e?.width,tabletWidth:e?.["tabletWidth"],mobileWidth:e?.["mobileWidth"],fitContent:Boolean(e?.fitContent),isTablet:!this.isMobileView()&&this.isRealTabletViewport(),isMobile:this.isMobileView()||this.isRealMobileViewport()})}normalizeCssColor(e){return String(e??"").trim()||null}normalizeCssShadow(e){return String(e??"").trim()||null}normalizeJustify(e){return String(e??"").trim()||null}normalizeAlign(e){return String(e??"").trim()||null}normalizeContentDisplay(e){return String(e??"").trim().toLowerCase()==="grid"?"grid":"flex"}normalizeFlexDirection(e){return String(e??"").trim().toLowerCase()==="column"?"column":"row"}normalizeCssTemplate(e){return String(e??"").trim()||null}normalizeCssSize(e){const t=String(e??"").trim();if(!t)return null;if(/^-?\d+(\.\d+)?$/.test(t))return`${t}px`;return t}reloadIfPanelPathChanged(e){const t=String(this.model()?.dataPath??"").trim();if(!t)return;const n=String(e??"").trim();if(!n)return;if(n!==t&&!n.startsWith(`${t}[`))return;if(rn(n,t)!==null&&this.structureService.flatModelMap?.[n]){this.scheduleCellReload();return}this.loadPanelData()}cellReloadTimer=null;scheduleCellReload(){if(this.cellReloadTimer!==null)return;this.cellReloadTimer=setTimeout(()=>{this.cellReloadTimer=null;this.loadPanelData()},0)}hasDataSource(){return String(this.model()?.dataSource?.name??"").trim().length>0}resolveInitialDataSourceLoadedState(){if(!this.hasDataSource())return true;if(Boolean(this.model()["dataSourceLoaded"]))return true;if(M.isEditor())return true;return this.hasPersistedRowsSnapshot()}hasPersistedRowsSnapshot(){const e=String(this.model()?.dataPath??"").trim();if(e){const t=this.dataService.getValue(e);if(Array.isArray(t))return true}return Array.isArray(this.model()?.value)}markDataSourceLoaded(){this.dataSourceLoaded.set(true);this.model()["dataSourceLoaded"]=true}isInteractionLocked(){const e=this.model();if(!e)return false;if(Boolean(e["__pfInteractionLocked"]))return true;return Boolean(e.disabled)||Boolean(e.readOnly)}resolveMaxRows(){const e=Number(this.model()["maxRows"]);if(!Number.isFinite(e))return null;const t=Math.floor(e);return t>0?t:null}hasReachedMaxRows(){const e=this.resolveMaxRows();if(e===null)return false;return this.data().length>=e}canAddRows(){if(this.isInteractionLocked()||this.isObjectMode())return false;if(Boolean(this.model()["disallowAddRows"]))return false;if(this.isAddRowBlockedByLogic())return false;return!this.hasReachedMaxRows()}isAddRowControlVisible(){return!this.isObjectMode()&&!Boolean(this.model()["disallowAddRows"])}canDeleteRows(){if(this.isInteractionLocked()||this.isObjectMode())return false;return!Boolean(this.model()["disallowDeleteRows"])}canDeleteRow(e,t){if(!this.canDeleteRows())return false;return!Tn(this.expressionService,yn(this.model(),"disallowDeleteRowsIf"),_n(this.dataService.getData(),this.data(),e??{},t))}isAddRowBlockedByLogic(){return Tn(this.expressionService,yn(this.model(),"disallowAddRowsIf"),_n(this.dataService.getData(),this.data()))}resolveAddRowButtonText(){const e=String(this.model()["addRowButtonText"]??"").trim();if(e)return e;return this.uiTranslationService.translate("dynamicPanel.addRow","Add")}resolveRemoveRowButtonText(){const e=String(this.model()["removeRowButtonText"]??"").trim();if(e)return e;return this.uiTranslationService.translate("dynamicPanel.deleteRow","Delete")}resolveEmptyMessage(){const e=String(this.model()["emptyMessage"]??"").trim();if(e)return e;return this.uiTranslationService.translate("dynamicPanel.empty","Panel is empty, add a row")}async ensureDeleteConfirmed(){if(!Boolean(this.model()["confirmRowDeletion"]))return true;return this.confirmDialogService.open({title:this.resolveDeleteConfirmText("confirmDeleteTitle",this.uiTranslationService.translate("dynamicPanel.deleteTitle","Delete row")),message:this.resolveDeleteConfirmText("confirmDeleteMessage",this.uiTranslationService.translate("confirm.message","Are you sure you want to continue?")),confirmLabel:this.resolveDeleteConfirmText("confirmDeleteConfirmLabel",this.uiTranslationService.translate("confirm.confirm","Continue")),cancelLabel:this.resolveDeleteConfirmText("confirmDeleteCancelLabel",this.uiTranslationService.translate("confirm.cancel","Cancel"))})}resolveDeleteConfirmText(e,t){return String(this.model()[e]??"").trim()||t}isRealMobileViewport(){if(typeof window==="undefined"||typeof window.matchMedia!=="function")return false;return ne()}isRealTabletViewport(){if(this.isRealMobileViewport())return false;if(typeof window==="undefined"||typeof window.matchMedia!=="function")return false;return Ue()}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Ie,deps:[{token:oe}],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:Ie,isStandalone:true,selector:"runtime-dynamic-panel",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:true,transformFunction:null},column:{classPropertyName:"column",publicName:"column",isSignal:true,isRequired:false,transformFunction:null},recursiveData:{classPropertyName:"recursiveData",publicName:"recursiveData",isSignal:true,isRequired:false,transformFunction:null},isMobileView:{classPropertyName:"isMobileView",publicName:"isMobileView",isSignal:true,isRequired:false,transformFunction:null}},host:{properties:{"attr.data-nvb-element-name":"model()?.name || null","attr.data-nvb-data-path":"model()?.dataPath || null","attr.data-nvb-element-type":"model()?.type || null","attr.data-testid":"(model()?.dataPath || model()?.name) ? 'nvb-element-' + (model()?.dataPath || model()?.name) : null"}},ngImport:l,template:"@let columnsExist = column()?.rows && column()?.rows.length > 0;\n\n<div class=\"nvb-panel\" data-testid=\"dynamic-panel-root\" [ngStyle]=\"panelStyle()\">\n @if (!model()?.['hideHeader'] && (model()?.label || model()?.description)) {\n <header class=\"nvb-panel__header\" data-testid=\"dynamic-panel-header\">\n @if (model()?.label) {\n <h4 class=\"nvb-panel__header-heading\">\n {{ $safeNavigationMigration(model()?.label) | dynamicText: model() }}\n </h4>\n }\n @if (model()?.description) {\n <p class=\"nvb-panel__header-description\">\n {{ $safeNavigationMigration(model()?.description) | dynamicText: model() }}\n </p>\n }\n </header>\n }\n\n <div class=\"nvb-panel__body\" [ngStyle]=\"bodyStyle()\" data-testid=\"dynamic-panel-body\">\n @if (hasDataSource() && !dataSourceLoaded()) {\n <div class=\"nvb-dynamic-panel-skeleton\" data-testid=\"dynamic-panel-loading\">\n @for (_row of [0, 1, 2]; track _row) {\n <div\n class=\"nvb-dynamic-panel-skeleton__row\"\n [attr.data-testid]=\"tid('loading-row', _row)\"\n ></div>\n }\n </div>\n } @else {\n @if (columnsExist) {\n @if (data()?.length > 0) {\n @for (value of data(); track value; let rowIndex = $index) {\n <div class=\"nvb-panel-item\" [attr.data-testid]=\"tid('row', rowIndex)\">\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column().rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: model(),\n }\n \"\n ></ng-container>\n\n @if (!isEditor() && canDeleteRow(value, rowIndex)) {\n <div class=\"nvb-delete-warapper\">\n <button\n type=\"button\"\n class=\"nvb-remove-button\"\n (click)=\"deleteRow(rowIndex)\"\n [title]=\"resolveRemoveRowButtonText()\"\n [attr.data-testid]=\"tid('delete-row', rowIndex)\"\n >\n <nvb-icon name=\"do_not_disturb_on\" class=\"nvb-remove-button__icon\"></nvb-icon>\n {{ resolveRemoveRowButtonText() | dynamicText: model() }}\n </button>\n </div>\n }\n </div>\n }\n } @else {\n @if (isEditor()) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsTemplate;\n context: { rows: column().rows, parentElement: model() }\n \"\n ></ng-container>\n } @else {\n <div class=\"nvb-empty-panel\" data-testid=\"dynamic-panel-empty\">\n <p class=\"nvb-empty-panel__text\">\n {{ resolveEmptyMessage() | dynamicText: model() }}\n </p>\n </div>\n }\n }\n } @else {\n <div\n class=\"nvb-empty-panel\"\n [class.nvb-empty-panel--overlay]=\"hoveredElementName === model().name\"\n [attr.data-testid]=\"\n !columnsExist && !isEditor()\n ? tid('empty-template')\n : tid('empty-builder')\n \"\n >\n @if (!columnsExist && !isEditor()) {\n <nvb-icon name=\"draft\" class=\"nvb-empty-panel__icon\"></nvb-icon>\n <p class=\"nvb-empty-panel__text\">{{ 'dynamicPanel.emptyPanel' | uiT: 'Panel is empty' }}</p>\n } @else {\n <nvb-icon name=\"note_stack_add\" class=\"nvb-empty-panel__icon\"></nvb-icon>\n <p class=\"nvb-empty-panel__text\">\n {{\n 'dynamicPanel.emptyBuilder'\n | uiT: 'Add elements from the left menu to build content'\n }}\n </p>\n }\n @if (dropOverlay() && isEditor()) {\n <div\n class=\"nvb-drop-overlay\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeav($event)\"\n (drop)=\"onDrop($event)\"\n ></div>\n }\n </div>\n }\n }\n\n @if (focusedElementName() === resolveFocusKey(model())) {\n <element-action-button\n icon=\"close\"\n (dblclick)=\"onDelete()\"\n class=\"nvb-panel__delete\"\n [testId]=\"'builder-panel-delete-' + model()?.name\"\n />\n }\n </div>\n</div>\n\n<!-- Outside the card, like the dynamic table's: the add control belongs to the\n element, not to the list of rows, and both repeaters line it up the same way. -->\n@if (!isEditor() && columnsExist && dataSourceLoaded() && isAddRowControlVisible()) {\n <div class=\"nvb-add-warapper\">\n <button\n type=\"button\"\n class=\"nvb-control__add-row-button nvb-control__add-row-button--compact\"\n (click)=\"addRow()\"\n [disabled]=\"!canAddRows()\"\n data-testid=\"dynamic-panel-add-row\"\n >\n <nvb-icon name=\"add_circle\"></nvb-icon>\n {{ resolveAddRowButtonText() | dynamicText: model() }}\n </button>\n </div>\n}\n\n<ng-template #rowsTemplate let-rows=\"rows\" let-parentElement=\"parentElement\">\n @for (row of rows; track $index; let rowIndex = $index) {\n <row\n [model]=\"row\"\n [rows]=\"rows\"\n [index]=\"rowIndex\"\n [isTemplateElement]=\"true\"\n [parentElement]=\"parentElement || model()\"\n >\n @for (column of row.columns; track column.elementRef; let columnIndex = $index) {\n @let element = getElement(column.elementRef);\n\n @if (element) {\n <column\n [model]=\"element\"\n [index]=\"columnIndex\"\n [columns]=\"row.columns\"\n [parentElement]=\"parentElement || model()\"\n >\n @if (element.type === 'panel') {\n <panel-element [model]=\"element\" [column]=\"column\" [isMobileView]=\"isMobileView()\">\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsTemplate;\n context: { rows: column.rows, parentElement: element }\n \"\n ></ng-container>\n }\n </panel-element>\n } @else if (element.type === 'dynamicPanel' || element.type === 'objectPanel') {\n <runtime-dynamic-panel\n [model]=\"element\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n />\n } @else if (element.type === 'tabs') {\n <tabs-element\n [model]=\"$any(element)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsTemplate;\n context: { rows: column.rows, parentElement: element }\n \"\n ></ng-container>\n }\n </tabs-element>\n } @else if (element.type === 'progressFlow') {\n <progress-flow-element\n [model]=\"$any(element)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsTemplate\"\n />\n } @else if (element.type === 'splitter') {\n <splitter-element\n [model]=\"$any(element)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsTemplate\"\n />\n } @else if (element.type === 'dialog') {\n <dialog-element\n [model]=\"$any(element)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsTemplate\"\n />\n } @else if (element.type === 'emptyBlock') {\n <empty-block-element\n [model]=\"element\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsTemplate;\n context: { rows: column.rows, parentElement: element }\n \"\n ></ng-container>\n }\n </empty-block-element>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"layoutTemplate; context: { $implicit: element }\"\n ></ng-container>\n }\n </column>\n }\n }\n </row>\n }\n</ng-template>\n\n<ng-template\n #rowsPreviewTemplate\n let-rows=\"rows\"\n let-value=\"value\"\n let-rowIndex=\"rowIndex\"\n let-parentElement=\"parentElement\"\n>\n @for (row of rows; track $index) {\n <div class=\"nvb-row\" [ngStyle]=\"previewRowStyle(parentElement)\">\n @for (column of row.columns; track column.elementRef; let columnIndex = $index) {\n @let element = getElement(column.elementRef);\n\n @let elementModel = getElementModel(rowIndex, column.elementRef);\n\n @if (element) {\n <!-- `element` is the shared template entry, `elementModel` this row's own\n instance - visibility is a per-row condition, so it has to come from\n the row. -->\n <div\n class=\"nvb-column\"\n [class.nvb-column--hidden]=\"(elementModel ?? element).hidden\"\n [ngStyle]=\"resolvePreviewColumnStyle(element)\"\n >\n @if (element.type === 'panel') {\n @if (elementModel) {\n <panel-element\n [model]=\"elementModel\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column.rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: elementModel,\n }\n \"\n ></ng-container>\n }\n </panel-element>\n } @else {\n <panel-element [model]=\"element\" [column]=\"column\" [isMobileView]=\"isMobileView()\">\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column.rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: element,\n }\n \"\n ></ng-container>\n }\n </panel-element>\n }\n } @else if (element.type === 'dynamicPanel' || element.type === 'objectPanel') {\n @if (elementModel) {\n <runtime-dynamic-panel\n [model]=\"elementModel\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n />\n }\n } @else if (element.type === 'tabs') {\n @if (elementModel) {\n <tabs-element\n [model]=\"$any(elementModel)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column.rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: elementModel,\n }\n \"\n ></ng-container>\n }\n </tabs-element>\n }\n } @else if (element.type === 'progressFlow') {\n @if (elementModel) {\n <progress-flow-element\n [model]=\"$any(elementModel)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsPreviewTemplate\"\n [templateContext]=\"{ value: value, rowIndex: rowIndex }\"\n />\n }\n } @else if (element.type === 'splitter') {\n @if (elementModel) {\n <splitter-element\n [model]=\"$any(elementModel)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsPreviewTemplate\"\n [templateContext]=\"{ value: value, rowIndex: rowIndex }\"\n />\n }\n } @else if (element.type === 'dialog') {\n @if (elementModel) {\n <dialog-element\n [model]=\"$any(elementModel)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsPreviewTemplate\"\n [templateContext]=\"{ value: value, rowIndex: rowIndex }\"\n />\n }\n } @else if (element.type === 'emptyBlock') {\n <empty-block-element\n [model]=\"element\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column.rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: element,\n }\n \"\n ></ng-container>\n }\n </empty-block-element>\n } @else {\n @if (elementModel) {\n <runtime-lazy-element-outlet [model]=\"elementModel\"></runtime-lazy-element-outlet>\n }\n }\n </div>\n }\n }\n </div>\n }\n</ng-template>\n\n<ng-template #layoutTemplate let-element>\n <runtime-lazy-element-outlet [model]=\"element\"></runtime-lazy-element-outlet>\n</ng-template>\n",styles:[".nvb-panel{box-sizing:border-box;min-width:0;max-width:100%;border:1px solid var(--nvb-card-border-color);border-style:solid;border-radius:var(--nvb-card-radius);display:flex;flex-direction:column;overflow:hidden;background:var(--nvb-card-bg);color:var(--nvb-color-neutral-800);box-shadow:var(--nvb-card-shadow)}.nvb-panel__header{display:flex;flex-direction:column;gap:4px;padding:12px 14px;border-bottom:1px solid var(--nvb-color-neutral-200);min-width:0;background:var(--nvb-color-neutral-000)}.nvb-panel__header--templated{padding:0}.nvb-panel__header-heading{margin:0;font-size:var(--nvb-text-subtitle2);line-height:22px;color:var(--nvb-color-neutral-900)}.nvb-panel__header-description{margin:0;color:color-mix(in oklab,var(--nvb-color-neutral-600) 86%,var(--nvb-color-surface-mix-target, white));font-size:var(--nvb-text-body1);line-height:20px}.nvb-panel__header-template{width:100%;min-width:0}.nvb-panel--focused{outline:0;border-color:color-mix(in oklab,var(--nvb-color-primary-500) 54%,var(--nvb-color-neutral-300));box-shadow:var(--nvb-focus-ring)}.nvb-panel__content{position:relative;display:flex;flex-direction:column;width:100%;min-width:0;box-sizing:border-box;z-index:1;padding:0;overflow:visible}.nvb-panel__content--builder{padding:6px 8px 10px}.nvb-panel__delete{position:absolute;right:-2px;bottom:-20px;background-color:var(--nvb-color-primary-500);border-bottom-right-radius:var(--nvb-radius-sm);border-bottom-left-radius:var(--nvb-radius-sm)}.nvb-panel__body{display:flex;flex-direction:column;padding:0}.nvb-empty-panel{box-sizing:border-box;width:100%;max-width:100%;min-width:0;background-color:color-mix(in oklab,var(--nvb-color-neutral-050) 78%,var(--nvb-color-neutral-000));padding:clamp(16px,5vw,40px);display:flex;position:relative;justify-content:center;align-items:center;flex-direction:column;gap:8px;border-radius:var(--nvb-control-radius);border:1px solid var(--nvb-color-neutral-200);text-align:center;margin:10px 12px}.nvb-empty-panel__icon{font-size:clamp(40px,10vw,60px);color:var(--nvb-color-neutral-600)}.nvb-empty-panel__text{color:var(--nvb-color-neutral-600);font-size:var(--nvb-text-body1);line-height:20px;margin:0;overflow-wrap:anywhere}.nvb-empty-panel--overlay{border-color:var(--nvb-color-primary-500);background-color:color-mix(in oklab,var(--nvb-color-primary-050) 68%,var(--nvb-color-neutral-000));box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--nvb-color-primary-500) 42%,transparent)}.nvb-drop-overlay{position:absolute;z-index:var(--nvb-builder-z-inner-drop-overlay, 50);width:100%;height:90%;top:50%;left:50%;transform:translate(-50%,-50%)}.nvb-preview{width:100%;display:flex;height:100%;flex-direction:column;min-width:0}.nvb-preview__header{padding:10px;border-bottom:1px solid var(--nvb-color-neutral-600)}.nvb-preview__body{height:100%;display:flex;justify-content:start;min-height:0;overflow:auto;padding-bottom:20px}:host{width:100%}.nvb-view{display:flex;justify-content:start;align-items:center;flex-direction:column;gap:10px;width:100%;min-width:0}.nvb-row{display:flex;flex-wrap:wrap;width:100%;min-width:0;position:relative;align-items:start;gap:12px}.nvb-column{min-width:0;max-width:100%;box-sizing:border-box;padding:6px;position:relative;gap:12px}.nvb-column--hidden{display:none}.nvb-control__add-row-button{justify-content:start}.nvb-control__add-row-button.nvb-control__add-row-button--compact{border-radius:var(--nvb-radius-sm)}.nvb-panel-item{border-bottom:1px solid var(--nvb-color-neutral-200);padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-width:0;box-sizing:border-box}.nvb-panel-item:last-of-type{border-bottom:0}.nvb-remove-button{display:flex;gap:2px;font-size:14px;color:var(--nvb-color-risk-600);cursor:pointer}.nvb-remove-button:hover{color:var(--nvb-color-risk-700)}.nvb-remove-button .nvb-icon-svg{font-size:18px}.nvb-delete-warapper{display:flex;justify-content:end;align-items:center;padding-right:5px}.nvb-add-warapper{display:flex;justify-content:start;align-items:center;padding:0;margin-top:8px}.nvb-dynamic-panel-skeleton{width:100%;display:grid;gap:8px;padding:14px 14px 4px}.nvb-dynamic-panel-skeleton__row{height:78px;border-radius:var(--nvb-control-radius);background:linear-gradient(90deg,color-mix(in oklab,var(--nvb-color-neutral-100) 88%,var(--nvb-color-surface-mix-target, white)),color-mix(in oklab,var(--nvb-color-neutral-200) 90%,var(--nvb-color-surface-mix-target, white)),color-mix(in oklab,var(--nvb-color-neutral-100) 88%,var(--nvb-color-surface-mix-target, white)));background-size:210% 100%;animation:dynamic-panel-loading-shimmer 1.05s ease-in-out infinite}@keyframes dynamic-panel-loading-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}\n"],dependencies:[{kind:"component",type:l.forwardRef(()=>Ie),selector:"runtime-dynamic-panel",inputs:["model","column","recursiveData","isMobileView"]},{kind:"directive",type:l.forwardRef(()=>F),selector:"[ngTemplateOutlet]",inputs:["ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector"]},{kind:"directive",type:l.forwardRef(()=>B),selector:"[ngStyle]",inputs:["ngStyle"]},{kind:"component",type:l.forwardRef(()=>Ye),selector:"column",inputs:["model","index","columns","parentElement","builderLayerDepth"]},{kind:"component",type:l.forwardRef(()=>Ge),selector:"row",inputs:["model","rows","index","isTemplateElement","rowLength","parentPath","parentElement"]},{kind:"component",type:l.forwardRef(()=>We),selector:"panel-element",inputs:["model","column","isMobileView","rows"]},{kind:"component",type:l.forwardRef(()=>Se),selector:"empty-block-element",inputs:["model","column","isMobileView","rowsTemplate","templateContext","rows"]},{kind:"component",type:l.forwardRef(()=>re),selector:"tabs-element",inputs:["model","column","rowsTemplate","templateContext","isMobileView"]},{kind:"component",type:l.forwardRef(()=>xe),selector:"progress-flow-element",inputs:["model","column","rowsTemplate","templateContext","isMobileView"]},{kind:"component",type:l.forwardRef(()=>ke),selector:"splitter-element",inputs:["model","column","isMobileView","rowsTemplate","templateContext"]},{kind:"component",type:l.forwardRef(()=>ye),selector:"dialog-element",inputs:["model","column","rowsTemplate","templateContext","isMobileView"]},{kind:"component",type:l.forwardRef(()=>Rn),selector:"element-action-button",inputs:["icon","text","ariaLabel","testId"]},{kind:"component",type:l.forwardRef(()=>$),selector:"nvb-icon",inputs:["name","svg","ariaLabel"]},{kind:"component",type:l.forwardRef(()=>J),selector:"runtime-lazy-element-outlet",inputs:["model"]},{kind:"pipe",type:l.forwardRef(()=>V),name:"uiT"},{kind:"pipe",type:l.forwardRef(()=>I),name:"dynamicText"}],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:W,decorators:[{type:A,args:[{selector:"runtime-dynamic-panel",changeDetection:E.OnPush,imports:[F,B,Ye,Ge,We,Se,re,xe,ke,ye,al(()=>W),sl,Rn,V,I,$,J],host:{...we},template:"@let columnsExist = column()?.rows && column()?.rows.length > 0;\n\n<div class=\"nvb-panel\" data-testid=\"dynamic-panel-root\" [ngStyle]=\"panelStyle()\">\n @if (!model()?.['hideHeader'] && (model()?.label || model()?.description)) {\n <header class=\"nvb-panel__header\" data-testid=\"dynamic-panel-header\">\n @if (model()?.label) {\n <h4 class=\"nvb-panel__header-heading\">\n {{ $safeNavigationMigration(model()?.label) | dynamicText: model() }}\n </h4>\n }\n @if (model()?.description) {\n <p class=\"nvb-panel__header-description\">\n {{ $safeNavigationMigration(model()?.description) | dynamicText: model() }}\n </p>\n }\n </header>\n }\n\n <div class=\"nvb-panel__body\" [ngStyle]=\"bodyStyle()\" data-testid=\"dynamic-panel-body\">\n @if (hasDataSource() && !dataSourceLoaded()) {\n <div class=\"nvb-dynamic-panel-skeleton\" data-testid=\"dynamic-panel-loading\">\n @for (_row of [0, 1, 2]; track _row) {\n <div\n class=\"nvb-dynamic-panel-skeleton__row\"\n [attr.data-testid]=\"tid('loading-row', _row)\"\n ></div>\n }\n </div>\n } @else {\n @if (columnsExist) {\n @if (data()?.length > 0) {\n @for (value of data(); track value; let rowIndex = $index) {\n <div class=\"nvb-panel-item\" [attr.data-testid]=\"tid('row', rowIndex)\">\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column().rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: model(),\n }\n \"\n ></ng-container>\n\n @if (!isEditor() && canDeleteRow(value, rowIndex)) {\n <div class=\"nvb-delete-warapper\">\n <button\n type=\"button\"\n class=\"nvb-remove-button\"\n (click)=\"deleteRow(rowIndex)\"\n [title]=\"resolveRemoveRowButtonText()\"\n [attr.data-testid]=\"tid('delete-row', rowIndex)\"\n >\n <nvb-icon name=\"do_not_disturb_on\" class=\"nvb-remove-button__icon\"></nvb-icon>\n {{ resolveRemoveRowButtonText() | dynamicText: model() }}\n </button>\n </div>\n }\n </div>\n }\n } @else {\n @if (isEditor()) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsTemplate;\n context: { rows: column().rows, parentElement: model() }\n \"\n ></ng-container>\n } @else {\n <div class=\"nvb-empty-panel\" data-testid=\"dynamic-panel-empty\">\n <p class=\"nvb-empty-panel__text\">\n {{ resolveEmptyMessage() | dynamicText: model() }}\n </p>\n </div>\n }\n }\n } @else {\n <div\n class=\"nvb-empty-panel\"\n [class.nvb-empty-panel--overlay]=\"hoveredElementName === model().name\"\n [attr.data-testid]=\"\n !columnsExist && !isEditor()\n ? tid('empty-template')\n : tid('empty-builder')\n \"\n >\n @if (!columnsExist && !isEditor()) {\n <nvb-icon name=\"draft\" class=\"nvb-empty-panel__icon\"></nvb-icon>\n <p class=\"nvb-empty-panel__text\">{{ 'dynamicPanel.emptyPanel' | uiT: 'Panel is empty' }}</p>\n } @else {\n <nvb-icon name=\"note_stack_add\" class=\"nvb-empty-panel__icon\"></nvb-icon>\n <p class=\"nvb-empty-panel__text\">\n {{\n 'dynamicPanel.emptyBuilder'\n | uiT: 'Add elements from the left menu to build content'\n }}\n </p>\n }\n @if (dropOverlay() && isEditor()) {\n <div\n class=\"nvb-drop-overlay\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeav($event)\"\n (drop)=\"onDrop($event)\"\n ></div>\n }\n </div>\n }\n }\n\n @if (focusedElementName() === resolveFocusKey(model())) {\n <element-action-button\n icon=\"close\"\n (dblclick)=\"onDelete()\"\n class=\"nvb-panel__delete\"\n [testId]=\"'builder-panel-delete-' + model()?.name\"\n />\n }\n </div>\n</div>\n\n<!-- Outside the card, like the dynamic table's: the add control belongs to the\n element, not to the list of rows, and both repeaters line it up the same way. -->\n@if (!isEditor() && columnsExist && dataSourceLoaded() && isAddRowControlVisible()) {\n <div class=\"nvb-add-warapper\">\n <button\n type=\"button\"\n class=\"nvb-control__add-row-button nvb-control__add-row-button--compact\"\n (click)=\"addRow()\"\n [disabled]=\"!canAddRows()\"\n data-testid=\"dynamic-panel-add-row\"\n >\n <nvb-icon name=\"add_circle\"></nvb-icon>\n {{ resolveAddRowButtonText() | dynamicText: model() }}\n </button>\n </div>\n}\n\n<ng-template #rowsTemplate let-rows=\"rows\" let-parentElement=\"parentElement\">\n @for (row of rows; track $index; let rowIndex = $index) {\n <row\n [model]=\"row\"\n [rows]=\"rows\"\n [index]=\"rowIndex\"\n [isTemplateElement]=\"true\"\n [parentElement]=\"parentElement || model()\"\n >\n @for (column of row.columns; track column.elementRef; let columnIndex = $index) {\n @let element = getElement(column.elementRef);\n\n @if (element) {\n <column\n [model]=\"element\"\n [index]=\"columnIndex\"\n [columns]=\"row.columns\"\n [parentElement]=\"parentElement || model()\"\n >\n @if (element.type === 'panel') {\n <panel-element [model]=\"element\" [column]=\"column\" [isMobileView]=\"isMobileView()\">\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsTemplate;\n context: { rows: column.rows, parentElement: element }\n \"\n ></ng-container>\n }\n </panel-element>\n } @else if (element.type === 'dynamicPanel' || element.type === 'objectPanel') {\n <runtime-dynamic-panel\n [model]=\"element\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n />\n } @else if (element.type === 'tabs') {\n <tabs-element\n [model]=\"$any(element)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsTemplate;\n context: { rows: column.rows, parentElement: element }\n \"\n ></ng-container>\n }\n </tabs-element>\n } @else if (element.type === 'progressFlow') {\n <progress-flow-element\n [model]=\"$any(element)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsTemplate\"\n />\n } @else if (element.type === 'splitter') {\n <splitter-element\n [model]=\"$any(element)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsTemplate\"\n />\n } @else if (element.type === 'dialog') {\n <dialog-element\n [model]=\"$any(element)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsTemplate\"\n />\n } @else if (element.type === 'emptyBlock') {\n <empty-block-element\n [model]=\"element\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsTemplate;\n context: { rows: column.rows, parentElement: element }\n \"\n ></ng-container>\n }\n </empty-block-element>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"layoutTemplate; context: { $implicit: element }\"\n ></ng-container>\n }\n </column>\n }\n }\n </row>\n }\n</ng-template>\n\n<ng-template\n #rowsPreviewTemplate\n let-rows=\"rows\"\n let-value=\"value\"\n let-rowIndex=\"rowIndex\"\n let-parentElement=\"parentElement\"\n>\n @for (row of rows; track $index) {\n <div class=\"nvb-row\" [ngStyle]=\"previewRowStyle(parentElement)\">\n @for (column of row.columns; track column.elementRef; let columnIndex = $index) {\n @let element = getElement(column.elementRef);\n\n @let elementModel = getElementModel(rowIndex, column.elementRef);\n\n @if (element) {\n <!-- `element` is the shared template entry, `elementModel` this row's own\n instance - visibility is a per-row condition, so it has to come from\n the row. -->\n <div\n class=\"nvb-column\"\n [class.nvb-column--hidden]=\"(elementModel ?? element).hidden\"\n [ngStyle]=\"resolvePreviewColumnStyle(element)\"\n >\n @if (element.type === 'panel') {\n @if (elementModel) {\n <panel-element\n [model]=\"elementModel\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column.rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: elementModel,\n }\n \"\n ></ng-container>\n }\n </panel-element>\n } @else {\n <panel-element [model]=\"element\" [column]=\"column\" [isMobileView]=\"isMobileView()\">\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column.rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: element,\n }\n \"\n ></ng-container>\n }\n </panel-element>\n }\n } @else if (element.type === 'dynamicPanel' || element.type === 'objectPanel') {\n @if (elementModel) {\n <runtime-dynamic-panel\n [model]=\"elementModel\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n />\n }\n } @else if (element.type === 'tabs') {\n @if (elementModel) {\n <tabs-element\n [model]=\"$any(elementModel)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column.rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: elementModel,\n }\n \"\n ></ng-container>\n }\n </tabs-element>\n }\n } @else if (element.type === 'progressFlow') {\n @if (elementModel) {\n <progress-flow-element\n [model]=\"$any(elementModel)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsPreviewTemplate\"\n [templateContext]=\"{ value: value, rowIndex: rowIndex }\"\n />\n }\n } @else if (element.type === 'splitter') {\n @if (elementModel) {\n <splitter-element\n [model]=\"$any(elementModel)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsPreviewTemplate\"\n [templateContext]=\"{ value: value, rowIndex: rowIndex }\"\n />\n }\n } @else if (element.type === 'dialog') {\n @if (elementModel) {\n <dialog-element\n [model]=\"$any(elementModel)\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n [rowsTemplate]=\"rowsPreviewTemplate\"\n [templateContext]=\"{ value: value, rowIndex: rowIndex }\"\n />\n }\n } @else if (element.type === 'emptyBlock') {\n <empty-block-element\n [model]=\"element\"\n [column]=\"column\"\n [isMobileView]=\"isMobileView()\"\n >\n @if (column.rows && column.rows.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n rowsPreviewTemplate;\n context: {\n rows: column.rows,\n value: value,\n rowIndex: rowIndex,\n parentElement: element,\n }\n \"\n ></ng-container>\n }\n </empty-block-element>\n } @else {\n @if (elementModel) {\n <runtime-lazy-element-outlet [model]=\"elementModel\"></runtime-lazy-element-outlet>\n }\n }\n </div>\n }\n }\n </div>\n }\n</ng-template>\n\n<ng-template #layoutTemplate let-element>\n <runtime-lazy-element-outlet [model]=\"element\"></runtime-lazy-element-outlet>\n</ng-template>\n",styles:[".nvb-panel{box-sizing:border-box;min-width:0;max-width:100%;border:1px solid var(--nvb-card-border-color);border-style:solid;border-radius:var(--nvb-card-radius);display:flex;flex-direction:column;overflow:hidden;background:var(--nvb-card-bg);color:var(--nvb-color-neutral-800);box-shadow:var(--nvb-card-shadow)}.nvb-panel__header{display:flex;flex-direction:column;gap:4px;padding:12px 14px;border-bottom:1px solid var(--nvb-color-neutral-200);min-width:0;background:var(--nvb-color-neutral-000)}.nvb-panel__header--templated{padding:0}.nvb-panel__header-heading{margin:0;font-size:var(--nvb-text-subtitle2);line-height:22px;color:var(--nvb-color-neutral-900)}.nvb-panel__header-description{margin:0;color:color-mix(in oklab,var(--nvb-color-neutral-600) 86%,var(--nvb-color-surface-mix-target, white));font-size:var(--nvb-text-body1);line-height:20px}.nvb-panel__header-template{width:100%;min-width:0}.nvb-panel--focused{outline:0;border-color:color-mix(in oklab,var(--nvb-color-primary-500) 54%,var(--nvb-color-neutral-300));box-shadow:var(--nvb-focus-ring)}.nvb-panel__content{position:relative;display:flex;flex-direction:column;width:100%;min-width:0;box-sizing:border-box;z-index:1;padding:0;overflow:visible}.nvb-panel__content--builder{padding:6px 8px 10px}.nvb-panel__delete{position:absolute;right:-2px;bottom:-20px;background-color:var(--nvb-color-primary-500);border-bottom-right-radius:var(--nvb-radius-sm);border-bottom-left-radius:var(--nvb-radius-sm)}.nvb-panel__body{display:flex;flex-direction:column;padding:0}.nvb-empty-panel{box-sizing:border-box;width:100%;max-width:100%;min-width:0;background-color:color-mix(in oklab,var(--nvb-color-neutral-050) 78%,var(--nvb-color-neutral-000));padding:clamp(16px,5vw,40px);display:flex;position:relative;justify-content:center;align-items:center;flex-direction:column;gap:8px;border-radius:var(--nvb-control-radius);border:1px solid var(--nvb-color-neutral-200);text-align:center;margin:10px 12px}.nvb-empty-panel__icon{font-size:clamp(40px,10vw,60px);color:var(--nvb-color-neutral-600)}.nvb-empty-panel__text{color:var(--nvb-color-neutral-600);font-size:var(--nvb-text-body1);line-height:20px;margin:0;overflow-wrap:anywhere}.nvb-empty-panel--overlay{border-color:var(--nvb-color-primary-500);background-color:color-mix(in oklab,var(--nvb-color-primary-050) 68%,var(--nvb-color-neutral-000));box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--nvb-color-primary-500) 42%,transparent)}.nvb-drop-overlay{position:absolute;z-index:var(--nvb-builder-z-inner-drop-overlay, 50);width:100%;height:90%;top:50%;left:50%;transform:translate(-50%,-50%)}.nvb-preview{width:100%;display:flex;height:100%;flex-direction:column;min-width:0}.nvb-preview__header{padding:10px;border-bottom:1px solid var(--nvb-color-neutral-600)}.nvb-preview__body{height:100%;display:flex;justify-content:start;min-height:0;overflow:auto;padding-bottom:20px}:host{width:100%}.nvb-view{display:flex;justify-content:start;align-items:center;flex-direction:column;gap:10px;width:100%;min-width:0}.nvb-row{display:flex;flex-wrap:wrap;width:100%;min-width:0;position:relative;align-items:start;gap:12px}.nvb-column{min-width:0;max-width:100%;box-sizing:border-box;padding:6px;position:relative;gap:12px}.nvb-column--hidden{display:none}.nvb-control__add-row-button{justify-content:start}.nvb-control__add-row-button.nvb-control__add-row-button--compact{border-radius:var(--nvb-radius-sm)}.nvb-panel-item{border-bottom:1px solid var(--nvb-color-neutral-200);padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-width:0;box-sizing:border-box}.nvb-panel-item:last-of-type{border-bottom:0}.nvb-remove-button{display:flex;gap:2px;font-size:14px;color:var(--nvb-color-risk-600);cursor:pointer}.nvb-remove-button:hover{color:var(--nvb-color-risk-700)}.nvb-remove-button .nvb-icon-svg{font-size:18px}.nvb-delete-warapper{display:flex;justify-content:end;align-items:center;padding-right:5px}.nvb-add-warapper{display:flex;justify-content:start;align-items:center;padding:0;margin-top:8px}.nvb-dynamic-panel-skeleton{width:100%;display:grid;gap:8px;padding:14px 14px 4px}.nvb-dynamic-panel-skeleton__row{height:78px;border-radius:var(--nvb-control-radius);background:linear-gradient(90deg,color-mix(in oklab,var(--nvb-color-neutral-100) 88%,var(--nvb-color-surface-mix-target, white)),color-mix(in oklab,var(--nvb-color-neutral-200) 90%,var(--nvb-color-surface-mix-target, white)),color-mix(in oklab,var(--nvb-color-neutral-100) 88%,var(--nvb-color-surface-mix-target, white)));background-size:210% 100%;animation:dynamic-panel-loading-shimmer 1.05s ease-in-out infinite}@keyframes dynamic-panel-loading-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}\n"]}]}],ctorParameters:()=>[{type:oe}],propDecorators:{model:[{type:l.Input,args:[{isSignal:true,alias:"model",required:true}]}],column:[{type:l.Input,args:[{isSignal:true,alias:"column",required:false}]}],recursiveData:[{type:l.Input,args:[{isSignal:true,alias:"recursiveData",required:false}]}],isMobileView:[{type:l.Input,args:[{isSignal:true,alias:"isMobileView",required:false}]}]}});var le=class Lt{model=p.required(...ngDevMode?[{debugName:"model"}]:[]);column=p(null,...ngDevMode?[{debugName:"column"}]:[]);pageRows=p(null,...ngDevMode?[{debugName:"pageRows"}]:[]);pageIsEmpty=p(false,...ngDevMode?[{debugName:"pageIsEmpty"}]:[]);isMobileView=p(false,...ngDevMode?[{debugName:"isMobileView"}]:[]);rowsTemplate=p(null,...ngDevMode?[{debugName:"rowsTemplate"}]:[]);projectedContext=p(null,...ngDevMode?[{debugName:"projectedContext"}]:[]);componentType=h(null,...ngDevMode?[{debugName:"componentType"}]:[]);componentInputs=h({},...ngDevMode?[{debugName:"componentInputs"}]:[]);loadedComponents=new Map;pendingLoads=new Map;runtimeRenderSettingsService=g(ae);constructor(){S(()=>{const e=this.model();const t=String(e?.type??"").trim();if(!t){this.componentType.set(null);this.componentInputs.set({});return}if(!this.runtimeRenderSettingsService.isLazyElementRenderingEnabled()){const n=pl[t]??null;this.loadedComponents.set(t,n);this.componentInputs.set(this.buildInputs(t));this.componentType.set(n);return}this.resolveLazyComponent(t,e)});S(()=>{const e=String(this.model()?.type??"").trim();if(!e||!this.componentType())return;this.componentInputs.set(this.buildInputs(e))})}async resolveLazyComponent(e,t){const n=await this.loadComponent(e);if(this.model()!==t)return;this.componentInputs.set(this.buildInputs(e));this.componentType.set(n)}buildInputs(e){const t=this.model();switch(e){case"page":return{model:t,pageRows:this.pageRows(),pageIsEmpty:this.pageIsEmpty(),isMobileView:this.isMobileView(),rowsTemplate:this.rowsTemplate(),projectedContext:this.projectedContext()};case"panel":return{model:t,column:this.column(),isMobileView:this.isMobileView(),hasContent:Array.isArray(this.column()?.rows)&&this.column().rows.length>0,rowsTemplate:this.rowsTemplate(),projectedContext:this.projectedContext()};case"tabs":case"tabsPro":case"accordion":case"progressFlow":case"emptyBlock":return{model:t,column:this.column(),isMobileView:this.isMobileView(),rowsTemplate:this.rowsTemplate(),templateContext:this.projectedContext()};case"splitter":case"dialog":return{model:t,column:this.column(),isMobileView:this.isMobileView(),rowsTemplate:this.rowsTemplate(),templateContext:this.projectedContext()};case"dynamicPanel":case"objectPanel":return{model:t,column:this.column(),isMobileView:this.isMobileView()};default:return{model:t,column:this.column(),isMobileView:this.isMobileView()}}}async loadComponent(e){const t=this.loadedComponents.get(e);if(t!==void 0)return t;const n=this.pendingLoads.get(e);if(n)return await n;const o=gl[e];if(!o){this.loadedComponents.set(e,null);return null}const i=o().then(r=>{this.loadedComponents.set(e,r);this.pendingLoads.delete(e);return r}).catch(r=>{this.pendingLoads.delete(e);console.error(`[RuntimeContainerOutlet] Failed to load container component for "${e}".`,r);return null});this.pendingLoads.set(e,i);return await i}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Lt,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:Lt,isStandalone:true,selector:"runtime-container-outlet",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:true,transformFunction:null},column:{classPropertyName:"column",publicName:"column",isSignal:true,isRequired:false,transformFunction:null},pageRows:{classPropertyName:"pageRows",publicName:"pageRows",isSignal:true,isRequired:false,transformFunction:null},pageIsEmpty:{classPropertyName:"pageIsEmpty",publicName:"pageIsEmpty",isSignal:true,isRequired:false,transformFunction:null},isMobileView:{classPropertyName:"isMobileView",publicName:"isMobileView",isSignal:true,isRequired:false,transformFunction:null},rowsTemplate:{classPropertyName:"rowsTemplate",publicName:"rowsTemplate",isSignal:true,isRequired:false,transformFunction:null},projectedContext:{classPropertyName:"projectedContext",publicName:"projectedContext",isSignal:true,isRequired:false,transformFunction:null}},ngImport:l,template:'@if (componentType()) {\n <ng-container *ngComponentOutlet="componentType(); inputs: componentInputs()"></ng-container>\n}\n',styles:[""],dependencies:[{kind:"directive",type:Pn,selector:"[ngComponentOutlet]",inputs:["ngComponentOutlet","ngComponentOutletInputs","ngComponentOutletInjector","ngComponentOutletEnvironmentInjector","ngComponentOutletContent","ngComponentOutletNgModule"],exportAs:["ngComponentOutlet"]}],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:le,decorators:[{type:A,args:[{selector:"runtime-container-outlet",changeDetection:E.OnPush,imports:[Pn],template:'@if (componentType()) {\n <ng-container *ngComponentOutlet="componentType(); inputs: componentInputs()"></ng-container>\n}\n'}]}],ctorParameters:()=>[],propDecorators:{model:[{type:l.Input,args:[{isSignal:true,alias:"model",required:true}]}],column:[{type:l.Input,args:[{isSignal:true,alias:"column",required:false}]}],pageRows:[{type:l.Input,args:[{isSignal:true,alias:"pageRows",required:false}]}],pageIsEmpty:[{type:l.Input,args:[{isSignal:true,alias:"pageIsEmpty",required:false}]}],isMobileView:[{type:l.Input,args:[{isSignal:true,alias:"isMobileView",required:false}]}],rowsTemplate:[{type:l.Input,args:[{isSignal:true,alias:"rowsTemplate",required:false}]}],projectedContext:[{type:l.Input,args:[{isSignal:true,alias:"projectedContext",required:false}]}]}});const pl={page:tt,panel:nt,objectPanel:W,dynamicPanel:W,tabs:re,tabsPro:re,accordion:Sn,progressFlow:xe,splitter:ke,dialog:ye,emptyBlock:Se};const gl={page:()=>Promise.resolve().then(()=>dl).then(s=>s.RuntimePageElement),panel:()=>Promise.resolve().then(()=>ul).then(s=>s.RuntimePanelElement),objectPanel:()=>Promise.resolve().then(()=>Bn).then(s=>s.RuntimeDynamicPanel),dynamicPanel:()=>Promise.resolve().then(()=>Bn).then(s=>s.RuntimeDynamicPanel),tabs:()=>import("./ngxviewbuilder-runtime-column-CQL6_3oR.mjs").then(s=>s.C).then(s=>s.TabsElement),tabsPro:()=>import("./ngxviewbuilder-runtime-column-CQL6_3oR.mjs").then(s=>s.C).then(s=>s.TabsElement),accordion:()=>import("./ngxviewbuilder-runtime-column-CQL6_3oR.mjs").then(s=>s.A).then(s=>s.AccordionElement),progressFlow:()=>import("./ngxviewbuilder-runtime-column-CQL6_3oR.mjs").then(s=>s.v).then(s=>s.ProgressFlowElement),splitter:()=>import("./ngxviewbuilder-runtime-column-CQL6_3oR.mjs").then(s=>s.g).then(s=>s.SplitterElement),dialog:()=>import("./ngxviewbuilder-runtime-column-CQL6_3oR.mjs").then(s=>s.D).then(s=>s.DialogElement),emptyBlock:()=>import("./ngxviewbuilder-runtime-column-CQL6_3oR.mjs").then(s=>s.b).then(s=>s.EmptyBlockElement)};var ot=class qt{model=p(null,...ngDevMode?[{debugName:"model"}]:[]);showTitle=y(()=>{const e=this.model();return this.resolveVisibility(e?.showTitle,e?.label)},...ngDevMode?[{debugName:"showTitle"}]:[]);showDescription=y(()=>{const e=this.model();return this.resolveVisibility(e?.showDescription,e?.description)},...ngDevMode?[{debugName:"showDescription"}]:[]);showLogo=y(()=>{const e=this.model();return this.resolveVisibility(e?.showLogo,e?.logo)},...ngDevMode?[{debugName:"showLogo"}]:[]);hasRenderableContent=y(()=>this.showLogo()||this.showTitle()||this.showDescription(),...ngDevMode?[{debugName:"hasRenderableContent"}]:[]);logoAlign=y(()=>String(this.model()?.logoAlign??"").trim().toLowerCase()==="right"?"right":"left",...ngDevMode?[{debugName:"logoAlign"}]:[]);resolveVisibility(e,t){if(typeof e==="boolean")return e;return String(t??"").trim().length>0}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:qt,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:qt,isStandalone:true,selector:"runtime-content-header",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:false,transformFunction:null}},ngImport:l,template:"@if (hasRenderableContent()) {\n <header\n class=\"nvb-content-header\"\n [ngClass]=\"{\n 'nvb-content-header--logo-right': logoAlign() === 'right',\n }\"\n >\n @if (showLogo()) {\n <div class=\"nvb-content-header__logo-wrap\">\n <img\n class=\"nvb-content-header__logo\"\n [src]=\"$safeNavigationMigration(model()?.logo)\"\n [alt]=\"model()?.label || 'Form logo'\"\n />\n </div>\n }\n\n <div class=\"nvb-content-header__text\">\n @if (showTitle()) {\n <h3 class=\"nvb-content-header__title\">\n {{ $safeNavigationMigration(model()?.label) | dynamicText: model() }}\n </h3>\n }\n @if (showDescription()) {\n <p class=\"nvb-content-header__description\">\n {{ $safeNavigationMigration(model()?.description) | dynamicText: model() }}\n </p>\n }\n </div>\n </header>\n}\n",styles:[":host{width:100%;padding:5px;border-bottom:1px solid var(--nvb-color-neutral-300);background-color:var(--nvb-color-neutral-000)}.nvb-content-header{padding:5px;width:100%;display:flex;align-items:center;gap:14px;-webkit-user-select:none;user-select:none}.nvb-content-header__title{margin:0;color:var(--nvb-color-neutral-600);line-height:normal}.nvb-content-header__description{margin:4px 0 0;color:var(--nvb-color-neutral-500);font-size:var(--nvb-text-md)}.nvb-content-header__text{min-width:0;flex:1 1 auto}.nvb-content-header__logo-wrap{flex:0 0 auto;display:inline-flex;align-items:center}.nvb-content-header__logo{display:block;max-height:56px;max-width:min(180px,26vw);object-fit:contain}.nvb-content-header--logo-right{flex-direction:row-reverse}\n"],dependencies:[{kind:"directive",type:K,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"pipe",type:I,name:"dynamicText"}],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:ot,decorators:[{type:A,args:[{selector:"runtime-content-header",changeDetection:E.OnPush,imports:[K,I],template:"@if (hasRenderableContent()) {\n <header\n class=\"nvb-content-header\"\n [ngClass]=\"{\n 'nvb-content-header--logo-right': logoAlign() === 'right',\n }\"\n >\n @if (showLogo()) {\n <div class=\"nvb-content-header__logo-wrap\">\n <img\n class=\"nvb-content-header__logo\"\n [src]=\"$safeNavigationMigration(model()?.logo)\"\n [alt]=\"model()?.label || 'Form logo'\"\n />\n </div>\n }\n\n <div class=\"nvb-content-header__text\">\n @if (showTitle()) {\n <h3 class=\"nvb-content-header__title\">\n {{ $safeNavigationMigration(model()?.label) | dynamicText: model() }}\n </h3>\n }\n @if (showDescription()) {\n <p class=\"nvb-content-header__description\">\n {{ $safeNavigationMigration(model()?.description) | dynamicText: model() }}\n </p>\n }\n </div>\n </header>\n}\n",styles:[":host{width:100%;padding:5px;border-bottom:1px solid var(--nvb-color-neutral-300);background-color:var(--nvb-color-neutral-000)}.nvb-content-header{padding:5px;width:100%;display:flex;align-items:center;gap:14px;-webkit-user-select:none;user-select:none}.nvb-content-header__title{margin:0;color:var(--nvb-color-neutral-600);line-height:normal}.nvb-content-header__description{margin:4px 0 0;color:var(--nvb-color-neutral-500);font-size:var(--nvb-text-md)}.nvb-content-header__text{min-width:0;flex:1 1 auto}.nvb-content-header__logo-wrap{flex:0 0 auto;display:inline-flex;align-items:center}.nvb-content-header__logo{display:block;max-height:56px;max-width:min(180px,26vw);object-fit:contain}.nvb-content-header--logo-right{flex-direction:row-reverse}\n"]}]}],propDecorators:{model:[{type:l.Input,args:[{isSignal:true,alias:"model",required:false}]}]}});var Fn=class{onChange;offsetX=0;offsetY=0;startX=0;startY=0;dragging=false;moveHandler=null;upHandler=null;constructor(s){this.onChange=s}isDragging(){return this.dragging}transform(){if(this.offsetX===0&&this.offsetY===0)return null;return`translate(${this.offsetX}px, ${this.offsetY}px)`}reset(){if(this.offsetX===0&&this.offsetY===0)return;this.offsetX=0;this.offsetY=0;this.onChange()}start(s){if(s.button!==0||this.dragging)return;if(s.target?.closest('button, a, input, select, textarea, [contenteditable="true"]'))return;s.preventDefault();this.dragging=true;this.startX=s.clientX-this.offsetX;this.startY=s.clientY-this.offsetY;this.moveHandler=e=>{this.offsetX=e.clientX-this.startX;this.offsetY=e.clientY-this.startY;this.onChange()};this.upHandler=()=>this.stop();document.addEventListener("pointermove",this.moveHandler);document.addEventListener("pointerup",this.upHandler);document.addEventListener("pointercancel",this.upHandler);this.onChange()}stop(){if(this.moveHandler){document.removeEventListener("pointermove",this.moveHandler);this.moveHandler=null}if(this.upHandler){document.removeEventListener("pointerup",this.upHandler);document.removeEventListener("pointercancel",this.upHandler);this.upHandler=null}if(!this.dragging)return;this.dragging=false;this.onChange()}};const rt={desktop:"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"4.5\" width=\"18\" height=\"12\" rx=\"2\"></rect><path d=\"M9 19.5h6\"></path><path d=\"M12 16.5v3\"></path></svg>",tablet:"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"6\" y=\"2.5\" width=\"12\" height=\"19\" rx=\"2.5\"></rect><path d=\"M11 18.5h2\"></path></svg>",mobile:"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"7\" y=\"2.5\" width=\"10\" height=\"19\" rx=\"2.5\"></rect><path d=\"M11 18.5h2\"></path></svg>"};var se=class jt{viewportSettings=p(null,...ngDevMode?[{debugName:"viewportSettings"}]:[]);runtimePreviewSettings=p(null,...ngDevMode?[{debugName:"runtimePreviewSettings"}]:[]);pages=h([],...ngDevMode?[{debugName:"pages"}]:[]);settings=h(null,...ngDevMode?[{debugName:"settings"}]:[]);headerModel=h(null,...ngDevMode?[{debugName:"headerModel"}]:[]);dynamicTextPipe=new I;languages=h([],...ngDevMode?[{debugName:"languages"}]:[]);selectedLanguage=h("en",...ngDevMode?[{debugName:"selectedLanguage"}]:[]);currentPageIndex=h(0,...ngDevMode?[{debugName:"currentPageIndex"}]:[]);deviceMode=h("desktop",...ngDevMode?[{debugName:"deviceMode"}]:[]);validationSummary=h(null,...ngDevMode?[{debugName:"validationSummary"}]:[]);validationIssueCount=h(0,...ngDevMode?[{debugName:"validationIssueCount"}]:[]);validationIssueEntries=h([],...ngDevMode?[{debugName:"validationIssueEntries"}]:[]);validationPanelOpen=h(false,...ngDevMode?[{debugName:"validationPanelOpen"}]:[]);submittedJson=h(null,...ngDevMode?[{debugName:"submittedJson"}]:[]);pageVisibilityVersion=h(0,...ngDevMode?[{debugName:"pageVisibilityVersion"}]:[]);dialogOpen=h(true,...ngDevMode?[{debugName:"dialogOpen"}]:[]);dialogClosing=h(false,...ngDevMode?[{debugName:"dialogClosing"}]:[]);dialogDragVersion=h(0,...ngDevMode?[{debugName:"dialogDragVersion"}]:[]);dialogDrag=new Fn(()=>this.dialogDragVersion.update(e=>e+1));frameWidthOverridePx=h(null,...ngDevMode?[{debugName:"frameWidthOverridePx"}]:[]);isFrameResizing=h(false,...ngDevMode?[{debugName:"isFrameResizing"}]:[]);measuredFrameWidthPx=h(null,...ngDevMode?[{debugName:"measuredFrameWidthPx"}]:[]);desktopDeviceIconSvg=rt.desktop;tabletDeviceIconSvg=rt.tablet;mobileDeviceIconSvg=rt.mobile;dialogShellRef=In("previewDialogShell",...ngDevMode?[{debugName:"dialogShellRef"}]:[]);dialogTopLayerEffect=S(()=>{mn(this.dialogShellRef()?.nativeElement)},...ngDevMode?[{debugName:"dialogTopLayerEffect"}]:[]);previewContentHost;previewFrameShell;frameResizeMoveHandler=null;frameResizeUpHandler=null;frameResizeObserver=null;runtimeViewportResizeHandler=()=>{this.syncRuntimeDeviceMode()};validationSyncInProgress=false;validationSyncQueued=false;visiblePageEntries=y(()=>{this.pageVisibilityVersion();return this.pages().map((e,t)=>({page:e,sourceIndex:t})).filter(e=>this.isPageVisible(e.page))},...ngDevMode?[{debugName:"visiblePageEntries"}]:[]);visiblePages=y(()=>{const e=this.visiblePageEntries();if(!e.length)return[];if(this.renderAllVisiblePages()||this.isCanvasMode())return e.map(t=>t.page);return[e[Math.min(this.currentPageIndex(),e.length-1)].page]},...ngDevMode?[{debugName:"visiblePages"}]:[]);renderAllVisiblePages=y(()=>{if(!this.isRuntimeMode())return false;return Boolean(this.runtimePreviewSettings()?.renderAllPages)},...ngDevMode?[{debugName:"renderAllVisiblePages"}]:[]);validationIssuePageGroups=y(()=>{const e=new Map;this.validationIssueEntries().forEach(t=>{const n=t.pageSourceIndex;const o=`${n}|${t.pageName??"__none__"}`;const i=t.pageName||this.uiTranslationService.translate("preview.page.unknown","Unknown page");const r=e.get(o);if(r){r.issues.push(t);r.totalErrors+=t.errors.length;return}e.set(o,{pageName:i,sourceIndex:n,visibleIndex:t.pageVisibleIndex,issues:[t],totalErrors:t.errors.length})});return Array.from(e.values()).sort((t,n)=>t.sourceIndex-n.sourceIndex)},...ngDevMode?[{debugName:"validationIssuePageGroups"}]:[]);showValidationIssuesModal=y(()=>{const e=this.runtimePreviewSettings()?.showValidationIssuesModal;const t=this.settings()?.["showValidationIssuesModal"];return this.resolveBooleanPreference(e,t,false)},...ngDevMode?[{debugName:"showValidationIssuesModal"}]:[]);showValidationPanel=y(()=>{return this.showValidationIssuesModal()&&this.validationPanelOpen()&&this.validationIssueEntries().length>0},...ngDevMode?[{debugName:"showValidationPanel"}]:[]);isRuntimeMode=y(()=>{return String(this.runtimePreviewSettings()?.mode??"").trim().toLowerCase()==="runtime"},...ngDevMode?[{debugName:"isRuntimeMode"}]:[]);showToc=y(()=>{if(this.isCanvasMode())return false;const e=this.runtimePreviewSettings();if(typeof e?.showToc==="boolean")return e.showToc;return Boolean(this.settings()?.["showToc"])},...ngDevMode?[{debugName:"showToc"}]:[]);useStepNavigation=y(()=>{const e=this.runtimePreviewSettings();if(String(e?.navigationMode??"").trim().toLowerCase()==="stepper")return true;return String(this.settings()?.["pageNavigationMode"]??"").trim().toLowerCase()==="stepper"},...ngDevMode?[{debugName:"useStepNavigation"}]:[]);allowStepWithoutValidation=y(()=>{const e=this.runtimePreviewSettings();if(typeof e?.allowStepWithoutValidation==="boolean")return e.allowStepWithoutValidation;return Boolean(this.settings()?.["allowStepWithoutValidation"])},...ngDevMode?[{debugName:"allowStepWithoutValidation"}]:[]);pageNavigationPosition=y(()=>{const e=this.runtimePreviewSettings()?.pageNavigationPosition;const t=this.settings()?.["pageNavigationPosition"];return this.resolveControlPosition(e,t,"top")},...ngDevMode?[{debugName:"pageNavigationPosition"}]:[]);stepperPosition=y(()=>{const e=this.runtimePreviewSettings()?.stepperPosition;const t=this.settings()?.["stepperPosition"];return this.resolveControlPosition(e,t,"top")},...ngDevMode?[{debugName:"stepperPosition"}]:[]);actionButtonsPosition=y(()=>{const e=this.runtimePreviewSettings()?.actionButtonsPosition;const t=this.settings()?.["actionButtonsPosition"];return this.resolveControlPosition(e,t,"top")},...ngDevMode?[{debugName:"actionButtonsPosition"}]:[]);showValidateActionButton=y(()=>{const e=this.runtimePreviewSettings()?.showValidateButton;const t=this.settings()?.["showValidateButton"];return this.resolveBooleanPreference(e,t,true)},...ngDevMode?[{debugName:"showValidateActionButton"}]:[]);showSubmitActionButton=y(()=>{const e=this.runtimePreviewSettings()?.showSubmitButton;const t=this.settings()?.["showSubmitButton"];return this.resolveBooleanPreference(e,t,true)},...ngDevMode?[{debugName:"showSubmitActionButton"}]:[]);headerActions=y(()=>this.normalizeChromeActions(this.runtimePreviewSettings()?.headerActions),...ngDevMode?[{debugName:"headerActions"}]:[]);footerActions=y(()=>this.normalizeChromeActions(this.runtimePreviewSettings()?.footerActions),...ngDevMode?[{debugName:"footerActions"}]:[]);hasActionButtons=y(()=>{return this.showValidateActionButton()||this.showSubmitActionButton()},...ngDevMode?[{debugName:"hasActionButtons"}]:[]);showTopActions=y(()=>{return this.hasActionButtons()&&this.hasPosition(this.actionButtonsPosition(),"top")},...ngDevMode?[{debugName:"showTopActions"}]:[]);showBottomActions=y(()=>{return this.hasActionButtons()&&this.hasPosition(this.actionButtonsPosition(),"bottom")},...ngDevMode?[{debugName:"showBottomActions"}]:[]);showTopPagination=y(()=>{return this.hasPosition(this.pageNavigationPosition(),"top")},...ngDevMode?[{debugName:"showTopPagination"}]:[]);showBottomPagination=y(()=>{return this.hasPosition(this.pageNavigationPosition(),"bottom")},...ngDevMode?[{debugName:"showBottomPagination"}]:[]);showTopStepper=y(()=>{return this.useStepNavigation()&&this.hasPosition(this.stepperPosition(),"top")},...ngDevMode?[{debugName:"showTopStepper"}]:[]);showBottomStepper=y(()=>{return this.useStepNavigation()&&this.hasPosition(this.stepperPosition(),"bottom")},...ngDevMode?[{debugName:"showBottomStepper"}]:[]);isGlobalReadOnlyMode=y(()=>{return this.normalizeInteractionStatus(this.settings()?.["status"])==="readonly"},...ngDevMode?[{debugName:"isGlobalReadOnlyMode"}]:[]);structureService=g(j);previewRendererService=g(H);validatorService=g(te);ngxViewBuilderApiService=g(P);dataService=g(O);elementActionService=g(he);eventService=g(L);uiTranslationService=g(ee);dataRefreshScheduled=false;dataValueChangedHandler=()=>{if(this.dataRefreshScheduled)return;this.dataRefreshScheduled=true;setTimeout(()=>{this.dataRefreshScheduled=false;this.pageVisibilityVersion.update(e=>e+1);this.ensureCurrentPageIndexInRange();this.applyInteractionState();this.applyNumberingContext();if(this.validatorService.isValidationDisplayEnabled())this.syncValidationAfterDataChange()},0)};dataMutatedHandler=e=>{const t=String(e?.trigger??"").trim().toLowerCase();if(t!=="programmatic"&&t!=="load")return;this.dataValueChangedHandler()};languageChangedHandler=()=>{this.rebuildPreview();this.refreshViewModel()};structureChangedHandler=()=>{this.refreshViewModel()};interactionRefreshScheduled=false;propertyChangedHandler=e=>{this.resetInteractionStateCacheForPropertyChange(e?.payload);if(this.interactionRefreshScheduled)return;this.interactionRefreshScheduled=true;setTimeout(()=>{this.interactionRefreshScheduled=false;this.pageVisibilityVersion.update(t=>t+1);this.applyInteractionState();this.applyNumberingContext()},0)};ngOnInit(){this.dataService.onValueChanged.add(this.dataValueChangedHandler);this.dataService.onDataMutated.add(this.dataMutatedHandler);this.ngxViewBuilderApiService.onLanguageChanged.add(this.languageChangedHandler);this.ngxViewBuilderApiService.onStructureChanged.add(this.structureChangedHandler);this.eventService.afterPropertyChanged.add(this.propertyChangedHandler);if(typeof window!=="undefined")window.addEventListener("resize",this.runtimeViewportResizeHandler);this.syncRuntimeDeviceMode();this.rebuildPreview();this.refreshViewModel()}ngAfterViewInit(){queueMicrotask(()=>this.initializeFrameMeasurement())}ngOnDestroy(){$e(null);if(typeof window!=="undefined")window.removeEventListener("resize",this.runtimeViewportResizeHandler);this.dataService.onValueChanged.remove(this.dataValueChangedHandler);this.dataService.onDataMutated.remove(this.dataMutatedHandler);this.ngxViewBuilderApiService.onLanguageChanged.remove(this.languageChangedHandler);this.ngxViewBuilderApiService.onStructureChanged.remove(this.structureChangedHandler);this.eventService.afterPropertyChanged.remove(this.propertyChangedHandler);this.removeFrameResizeListeners();this.frameResizeObserver?.disconnect();this.frameResizeObserver=null;if(this.dialogCloseTimeoutId!==null){clearTimeout(this.dialogCloseTimeoutId);this.dialogCloseTimeoutId=null}this.dialogDrag.stop()}dialogCloseTimeoutId=null;dialogCloseAnimationDurationMs=180;beginDialogCloseAnimation(){if(this.dialogCloseTimeoutId!==null)clearTimeout(this.dialogCloseTimeoutId);this.dialogClosing.set(true);this.dialogCloseTimeoutId=setTimeout(()=>{this.dialogClosing.set(false);this.dialogCloseTimeoutId=null},this.dialogCloseAnimationDurationMs)}clearDialogCloseAnimation(){if(this.dialogCloseTimeoutId!==null){clearTimeout(this.dialogCloseTimeoutId);this.dialogCloseTimeoutId=null}this.dialogClosing.set(false)}setDeviceMode(e){this.deviceMode.set(e);this.frameWidthOverridePx.set(null)}currentFrameWidthLabel(){const e=this.measuredFrameWidthPx();if(typeof e==="number"&&e>0)return`${Math.round(e)} px`;const t=this.resolvedFrameWidthStyle();if(t.endsWith("px")){const n=parseFloat(t.slice(0,-2));if(!Number.isNaN(n))return`${Math.round(n)} px`}return t}visiblePageLabel(e,t){const n=this.getElement(String(e?.page?.name??"").trim());const o=String(n?.["title"]??"").trim();if(o)return o;const i=String(n?.["label"]??"").trim();if(i)return i;const r=String(e?.page?.name??"").trim();if(r)return r;return`${this.uiTranslationService.translate("preview.page.fallback","Page")} ${t+1}`}visiblePageStepDescription(e,t){const n=this.getElement(String(e?.page?.name??"").trim());const o=String(n?.["description"]??"").trim();if(o)return o;return null}showStepperAt(e){return e==="top"?this.showTopStepper():this.showBottomStepper()}showPaginationAt(e){return e==="top"?this.showTopPagination():this.showBottomPagination()}showActionsAt(e){return(e==="top"?this.showTopActions():this.showBottomActions())||this.customActionsAt(e).length>0}customActionsAt(e){return e==="top"?this.headerActions():this.footerActions()}hasFormChromeAt(e){if(this.isCanvasMode())return false;return this.showStepperAt(e)||this.showPaginationAt(e)||this.showActionsAt(e)}async previousPage(){const e=Math.max(this.currentPageIndex()-1,0);await this.goToPage(e)}async nextPage(){const e=Math.max(this.visiblePageEntries().length-1,0);const t=Math.min(this.currentPageIndex()+1,e);await this.goToPage(t)}async onCurrentPageSelectEvent(e){const t=e.target;const n=Number(t?.value);if(Number.isNaN(n))return;await this.goToPage(n)}async onTocPageClick(e){await this.goToPage(e)}isStepCurrent(e){return this.currentPageIndex()===e}isStepCompleted(e){return e<this.currentPageIndex()}isStepLocked(e){if(!this.useStepNavigation())return false;if(this.allowStepWithoutValidation()||this.isGlobalReadOnlyMode())return false;return e>this.currentPageIndex()+1}async onStepClick(e){await this.goToPage(e)}closeValidationPanel(){this.validationPanelOpen.set(false)}async onValidationIssueClick(e){if(!e)return;const t=Number.isFinite(e.pageSourceIndex)&&e.pageSourceIndex<Number.MAX_SAFE_INTEGER?this.visiblePageEntries().findIndex(o=>o.sourceIndex===e.pageSourceIndex):-1;const n=e.pageVisibleIndex>=0?e.pageVisibleIndex:t>=0?t:this.findVisiblePageIndexByName(e.pageName);if(n>=0)this.setCurrentPage(n);await this.focusValidationIssue(e)}async validate(){this.validatorService.setValidationDisplayEnabled(true);await this.validatorService.evaluateAllValidators();const e=this.collectValidationIssueEntries();return this.applyValidationState(e,true)}async submit(){const e=await this.validate();const t=this.collectValidationIssues();const n=this.structureService.buildSubmitPayload();this.submittedJson.set(JSON.stringify(n??{},null,2));this.ngxViewBuilderApiService.notifyComplete(e,n,t);if(e)this.dataService.markPristine()}onLanguageSelectEvent(e){const t=e.target;const n=String(t?.value??"").trim();if(!n||n===this.selectedLanguage())return;this.selectedLanguage.set(n);this.ngxViewBuilderApiService.setLanguage(n);this.rebuildPreview();this.refreshViewModel()}frameWidthStyle(){const e=this.viewportSettings()??{};const t=this.deviceMode();if(t==="mobile")return`${e.mobile??390}px`;if(t==="tablet")return`${e.tablet??834}px`;if(typeof e.desktop==="number")return`${e.desktop}px`;return ge(this.settings()?.width,this.settings()?.widthUnit,"1182px").css}resolvedFrameWidthStyle(){if(this.isRuntimeMode()){if(this.isDialogMode()||this.isCanvasMode())return"100%";return this.runtimeFrameWidthStyle()}const e=this.frameWidthOverridePx();if(typeof e==="number"&&e>0)return`${e}px`;return this.frameWidthStyle()}runtimeFrameWidthStyle(){const e=this.viewportSettings()??{};const t=this.deviceMode();if(t==="mobile"&&typeof e.mobile==="number")return`${e.mobile}px`;if(t==="tablet"&&typeof e.tablet==="number")return`${e.tablet}px`;if(typeof e.desktop==="number")return`${e.desktop}px`;return ge(this.settings()?.width,this.settings()?.widthUnit,"1182px").css}onFrameResizeMouseDown(e){const t=this.previewContentHost?.nativeElement;const n=this.previewFrameShell?.nativeElement;if(!t||!n)return;e.preventDefault();e.stopPropagation();const o=e.clientX;const i=t.getBoundingClientRect();const r=n.getBoundingClientRect();const a=r.width>0?r.width:this.resolveCssWidthInPixels(this.resolvedFrameWidthStyle(),i.width);this.removeFrameResizeListeners();this.isFrameResizing.set(true);this.frameResizeMoveHandler=c=>{const b=t.getBoundingClientRect().width;const v=c.clientX-o;const d=this.clampFrameWidth(a+v,b);this.frameWidthOverridePx.set(d)};this.frameResizeUpHandler=()=>{this.isFrameResizing.set(false);this.removeFrameResizeListeners()};document.addEventListener("mousemove",this.frameResizeMoveHandler);document.addEventListener("mouseup",this.frameResizeUpHandler)}resetFrameWidth(){this.frameWidthOverridePx.set(null)}isCanvasMode(){return String(this.settings()?.["renderMode"]??"page").trim().toLowerCase()==="canvas"}isDialogMode(){return String(this.settings()?.["renderMode"]??"page").trim().toLowerCase()==="dialog"}dialogWidthStyle(){return ge(this.settings()?.["dialogWidth"],this.settings()?.["dialogWidthUnit"],"720px").css}dialogMaxWidthStyle(){return this.normalizeCssSize(this.settings()?.["dialogMaxWidth"],"96%")??"96%"}dialogMaxHeightStyle(){return this.normalizeCssSize(this.settings()?.["dialogMaxHeight"],"90vh")??"90vh"}dialogPaddingStyle(){return this.normalizeCssSize(this.settings()?.["dialogPadding"],"16px")??"16px"}dialogFontSizeStyle(){return this.normalizeCssSize(this.settings()?.["dialogFontSize"],"14px")??"14px"}resolveElementSpacing(){return this.normalizeCssSize(this.settings()?.["elementSpacing"],"10px")??"10px"}resolveContentPadding(){if(this.removeContentPadding()||this.isCanvasMode())return"0px";return this.normalizeCssSize(this.settings()?.["contentPadding"])}removeContentPadding(){return Boolean(this.settings()?.["removeContentPadding"])}hasVisibleHeader(){const e=this.headerModel();if(!e)return false;return this.resolveHeaderVisibility(e.showLogo,e.logo)||this.resolveHeaderVisibility(e.showTitle,e.label)||this.resolveHeaderVisibility(e.showDescription,e.description)}showDialogCloseButton(){return Boolean(this.settings()?.["dialogShowCloseButton"])}isDialogDraggable(){return Boolean(this.settings()?.["dialogDraggable"])}dialogDragTransform(){this.dialogDragVersion();return this.isDialogDraggable()?this.dialogDrag.transform():null}isDialogDragging(){this.dialogDragVersion();return this.dialogDrag.isDragging()}onDialogDragStart(e){if(!this.isDialogDraggable())return;this.dialogDrag.start(e)}dialogTitle(){const e=this.resolveConfiguredSettingText("dialogTitle");if(e!==null)return this.resolveDialogText(e)||"Forma";const t=String(this.headerModel()?.label??"").trim();return this.resolveDialogText(t)||"Forma"}dialogDescription(){const e=this.resolveConfiguredSettingText("dialogDescription");if(e!==null)return this.resolveDialogText(e);return this.resolveDialogText(String(this.headerModel()?.description??"").trim())}resolveDialogText(e){this.pageVisibilityVersion();if(!e.includes("{"))return e;return this.dynamicTextPipe.transform(e,this.headerModel()).trim()}dialogFooterActions(){const e=this.settings()?.["dialogFooterActions"];if(!Array.isArray(e))return[];return e}hasDialogFooterActions(){return this.dialogFooterActions().length>0}dialogFooterActionsAlign(){return this.normalizeDialogFooterActionsAlign(this.settings()?.["dialogFooterActionsAlign"])}dialogFooterActionLabel(e,t){const n=String(e?.label??"").trim();if(n)return n;return`Action ${t+1}`}dialogFooterActionIcon(e){return String(e?.icon??"").trim()}dialogFooterActionClasses(e){const t=this.shouldUseCustomActionButtonStyle(e);const n=t?this.normalizeActionButtonVariant(e?.buttonVariant):"outlined";const o=t?this.normalizeActionButtonTone(e?.buttonTone):"neutral";return{"nvb-preview-dialog-action--filled":n==="filled","nvb-preview-dialog-action--outlined":n==="outlined","nvb-preview-dialog-action--text":n==="text","nvb-preview-dialog-action--primary":o==="primary","nvb-preview-dialog-action--risk":o==="risk","nvb-preview-dialog-action--neutral":o==="neutral","nvb-preview-dialog-action--icon-only":!String(e?.label??"").trim()&&Boolean(String(e?.icon??"").trim())}}chromeActionClasses(e){const t=this.shouldUseCustomActionButtonStyle(e)?this.normalizeActionButtonVariant(e?.buttonVariant):"outlined";const n=this.shouldUseCustomActionButtonStyle(e)?this.normalizeActionButtonTone(e?.buttonTone):"neutral";return{"nvb-preview-toolbar__button--primary":t==="filled"||n==="primary"}}async onChromeActionClick(e){const t=this.resolveDialogActionElement();if(!t)return;await this.elementActionService.runAction(t,e,{value:null,item:null,row:null,pageIndex:this.currentPageIndex(),pageNumber:this.currentPageNumber()})}async onDialogFooterActionClick(e){const t=this.resolveDialogActionElement();if(!t)return;await this.elementActionService.runAction(t,e,{value:null,item:null,row:null,dialogTitle:this.dialogTitle(),dialogDescription:this.dialogDescription()})}shouldUseCustomActionButtonStyle(e){if(typeof e?.useCustomButtonStyle==="boolean")return e.useCustomButtonStyle;const t=String(e?.buttonVariant??"").trim().toLowerCase();const n=String(e?.buttonTone??"").trim().toLowerCase();return t.length>0&&t!=="outlined"||n.length>0&&n!=="neutral"&&n!=="default"}reopenDialog(){this.clearDialogCloseAnimation();this.dialogDrag.reset();this.dialogOpen.set(true)}async onDialogCloseClick(){const e=Array.isArray(this.settings()?.["dialogCloseEvents"])?[...this.settings()?.["dialogCloseEvents"]]:[];const t=this.resolveDialogActionElement();const n=this.visiblePageEntries();const o=n[this.currentPageIndex()]??n[0]??null;if(t&&e.length>0)await this.elementActionService.runActions(t,e,"click",{value:null,item:null,row:null});this.dialogOpen.set(false);this.beginDialogCloseAnimation();this.ngxViewBuilderApiService.notifyDialogClosed(o?.sourceIndex??-1,o?.page?.name??null,this.dialogTitle(),"close-button")}currentPageNumber(){if(this.pagesCount()===0)return 0;return this.currentPageIndex()+1}pagesCount(){return this.visiblePageEntries().length}getElement(e){return this.structureService.getPreviewElement(e)}normalizeChromeActions(e){if(!Array.isArray(e))return[];return e.filter(t=>t&&typeof t==="object")}applyNumberingContext(){ln({visiblePageEntries:this.visiblePageEntries(),getElement:e=>this.structureService.flatModelMap[e]??this.getElement(e)})}resolveRowJustify(e){return String(e?.["contentJustify"]??"").trim()||null}resolveRowAlign(e){return String(e?.["contentAlign"]??"").trim()||null}resolveRowGap(e){return this.normalizeCssSize(e?.["contentGap"])}resolveRowStyle(e){const t=this.normalizeContentDisplay(e?.["contentDisplay"]);const n=t==="grid";return{display:t,"flex-direction":n?null:this.normalizeFlexDirection(e?.["flexDirection"]),"flex-wrap":n?null:"wrap","justify-content":this.resolveRowJustify(e),"align-items":this.resolveRowAlign(e),gap:this.resolveRowGap(e),"margin-top":this.resolveRowGap(e)?"0px":null,"grid-template-columns":n?this.normalizeCssTemplate(e?.["gridTemplateColumns"]):null,"grid-auto-rows":n?this.normalizeCssTemplate(e?.["gridAutoRows"]):null}}resolveColumnStyle(e,t){const n=this.normalizeContentDisplay(e?.["contentDisplay"])==="flex"&&this.normalizeFlexDirection(e?.["flexDirection"])==="column";return Xe({width:t?.width,tabletWidth:t?.["tabletWidth"],mobileWidth:t?.["mobileWidth"]||(this.isCanvasMode()&&!t?.fitContent?"100%":""),fitContent:Boolean(t?.fitContent),isTablet:this.deviceMode()==="tablet",isMobile:this.deviceMode()==="mobile",isVerticalFlexLayout:n})}setCurrentPage(e){const t=this.visiblePageEntries();const n=Math.max(t.length-1,0);const o=Math.max(0,Math.min(e,n));if(o===this.currentPageIndex())return;this.currentPageIndex.set(o);const i=t[o];this.ngxViewBuilderApiService.notifyCurrentPageChanged(i?.sourceIndex??-1,i?.page?.name??null)}async goToPage(e){const t=this.visiblePageEntries();const n=Math.max(t.length-1,0);const o=Math.max(0,Math.min(e,n));if(o===this.currentPageIndex())return;if(!await this.canNavigateToPage(o))return;this.setCurrentPage(o)}async canNavigateToPage(e){if(e<=this.currentPageIndex())return true;if(!this.useStepNavigation())return true;if(this.isStepLocked(e)){this.validationSummary.set("preview.step.blocked");return false}if(this.allowStepWithoutValidation()||this.isGlobalReadOnlyMode())return true;return await this.validate()}refreshViewModel(){const e=this.structureService.getPreviewStructure();if(!e)return;const t=Array.isArray(e.pages)?e.pages:[];this.pages.set([...t]);this.settings.set(e.settings??null);this.headerModel.set(e.header??null);const n=e.localization?.languages??[];const o=String(e.settings?.language??"en").trim()||"en";const i=Array.from(new Set([o,...n]));this.languages.set(i);this.selectedLanguage.set(o);this.dialogOpen.set(true);this.validatorService.setValidationDisplayEnabled(false);this.validationIssueEntries.set([]);this.validationPanelOpen.set(false);this.validationIssueCount.set(0);this.validationSummary.set(null);this.applyInteractionState();this.ensureCurrentPageIndexInRange();this.applyNumberingContext()}rebuildPreview(){const e=this.ngxViewBuilderApiService.getStructure();if(!e)return;this.previewRendererService.toModel(e)}collectValidationIssues(){return this.toPublicValidationIssues(this.collectValidationIssueEntries())}applyValidationState(e,t){const n=this.toPublicValidationIssues(e);const o=n.length===0;const i=n.reduce((r,a)=>r+a.errors.length,0);this.validationIssueEntries.set(e);this.validationIssueCount.set(i);this.validationSummary.set(o?"preview.validation.valid":"preview.validation.invalid");if(o||!this.showValidationIssuesModal())this.validationPanelOpen.set(false);else if(t)this.validationPanelOpen.set(true);this.ngxViewBuilderApiService.notifyValidationResult(o,n);return o}toPublicValidationIssues(e){return e.map(t=>({elementName:t.elementName,dataPath:t.dataPath,errors:[...t.errors]}))}async syncValidationAfterDataChange(){if(this.validationSyncInProgress){this.validationSyncQueued=true;return}this.validationSyncInProgress=true;try{await this.validatorService.evaluateAllValidators();const e=this.collectValidationIssueEntries();this.applyValidationState(e,false)}finally{this.validationSyncInProgress=false;if(this.validationSyncQueued){this.validationSyncQueued=false;this.syncValidationAfterDataChange()}}}collectValidationIssueEntries(){const e=this.buildTopLevelElementPageLookup();return Object.values(this.structureService.flatModelMap??{}).filter(t=>{const n=t;if(!n)return false;if(Boolean(n["__pfInteractionLocked"]))return false;if(n.hidden||n.disabled)return false;return Array.isArray(n.errors)&&n.errors.length>0}).map(t=>{const n=this.resolveElementPageLocation(t,e);return{elementName:String(t.name??"").trim(),elementLabel:String(t.label??t.name??"").trim(),dataPath:String(t.dataPath??"").trim(),errors:[...t.errors??[]],pageName:n.pageName,pageSourceIndex:n.pageSourceIndex,pageVisibleIndex:n.pageVisibleIndex}}).sort((t,n)=>{if(t.pageSourceIndex!==n.pageSourceIndex)return t.pageSourceIndex-n.pageSourceIndex;if(t.pageVisibleIndex!==n.pageVisibleIndex)return t.pageVisibleIndex-n.pageVisibleIndex;return String(t.elementLabel??t.elementName).localeCompare(String(n.elementLabel??n.elementName))})}buildTopLevelElementPageLookup(){const e=new Map;const t=new Map;this.visiblePageEntries().forEach((n,o)=>{const i=String(n.page?.name??"").trim();if(!i)return;t.set(i,o)});this.pages().forEach((n,o)=>{const i=String(n?.name??"").trim();if(!i)return;const r=new Set;this.collectRowElementRefs(n.rows,r);const a=t.get(i)??-1;r.forEach(c=>{if(e.has(c))return;e.set(c,{pageName:i,pageSourceIndex:o,pageVisibleIndex:a})})});return e}collectRowElementRefs(e,t){if(!Array.isArray(e))return;e.forEach(n=>{n?.columns?.forEach(o=>{const i=String(o?.elementRef??"").trim();if(i)t.add(i);this.collectRowElementRefs(o?.rows,t);const r=o?.tabRows??{};Object.keys(r).forEach(a=>{this.collectRowElementRefs(r[a],t)})})})}resolveElementPageLocation(e,t){const n=this.resolveElementPageName(e);if(n)return{pageName:n,pageSourceIndex:this.findPageSourceIndexByName(n),pageVisibleIndex:this.findVisiblePageIndexByName(n)};const o=this.resolveTopLevelOwnerName(e);if(o&&t.has(o))return t.get(o);const i=this.resolveRootToken(e?.dataPath);if(i&&t.has(i))return t.get(i);const r=this.resolveRootToken(e?.schemaPath);if(r&&t.has(r))return t.get(r);return{pageName:null,pageSourceIndex:Number.MAX_SAFE_INTEGER,pageVisibleIndex:-1}}resolveTopLevelOwnerName(e){const t=new Set;let n=e;let o=String(e?.name??"").trim();while(n&&!t.has(n)){t.add(n);const i=String(n.name??"").trim();if(i)o=i;n=n.parentElement??null}return o||null}resolveRootToken(e){const t=String(e??"").trim();if(!t)return"";const n=t.match(/^[^.\[]+/);return String(n?.[0]??"").trim()}resolveElementPageName(e){const t=new Set;let n=e;while(n&&!t.has(n)){t.add(n);if(String(n.type??"").trim().toLowerCase()==="page")return String(n.name??"").trim()||null;n=n.parentElement??null}return null}findVisiblePageIndexByName(e){const t=String(e??"").trim();if(!t)return-1;return this.visiblePageEntries().findIndex(n=>String(n.page?.name??"").trim()===t)}findPageSourceIndexByName(e){const t=String(e??"").trim();if(!t)return Number.MAX_SAFE_INTEGER;const n=this.pages().findIndex(o=>String(o?.name??"").trim()===t);return n>=0?n:Number.MAX_SAFE_INTEGER}async focusValidationIssue(e){const t=await this.waitForIssueContainer(e);if(!t)return;t.scrollIntoView({behavior:"smooth",block:"center",inline:"nearest"});(t.querySelector('input:not([type="hidden"]):not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex="-1"])')??t).focus({preventScroll:true})}async waitForIssueContainer(e,t=20){for(let n=0;n<t;n++){await new Promise(r=>requestAnimationFrame(()=>r()));const o=this.previewFrameShell?.nativeElement??this.previewContentHost?.nativeElement??null;if(!o)return null;const i=this.findIssueContainer(o,e);if(i)return i;await new Promise(r=>setTimeout(r,25))}return null}findIssueContainer(e,t){const n=String(t.dataPath??"").trim()?e.querySelector(`[data-nvb-data-path="${this.escapeSelector(String(t.dataPath??"").trim())}"]`):null;const o=String(t.elementName??"").trim()?e.querySelector(`[data-nvb-element-name="${this.escapeSelector(String(t.elementName??"").trim())}"]`):null;return n??o}escapeSelector(e){return String(e??"").replace(/["\\]/g,"\\$&")}isPageVisible(e){const t=this.getElement(e?.name);if(!t)return true;return!t.hidden}ensureCurrentPageIndexInRange(){const e=this.visiblePageEntries().length;if(e<=0){this.currentPageIndex.set(0);return}if(this.currentPageIndex()>=e)this.currentPageIndex.set(e-1)}resolveDialogActionElement(){const e=this.visiblePageEntries();const t=e[this.currentPageIndex()]??e[0]??null;const n=String(t?.page?.name??"").trim();if(!n)return null;return this.getElement(n)??null}applyInteractionState(){const e=this.structureService.getPreviewStructure();if(!e)return;const t=new Set;const n=this.normalizeInteractionStatus(e.settings?.["status"])==="readonly";this.pages().forEach(o=>{const i=this.getElement(o?.name);const r=this.normalizeInteractionStatus(i?.["status"]??o?.status)==="readonly";const a=this.applyElementInteractionState(i,{readOnly:n,disabled:false},{readOnly:r||Boolean(o?.["readOnly"]),disabled:Boolean(o?.["disabled"])});if(i)t.add(i);this.applyRowsInteractionState(o.rows,a.propagate,t)});Object.values(this.structureService.flatModelMap??{}).forEach(o=>{const i=o;if(t.has(i))return;if(this.isManagedByDynamicPanel(i))return;this.restoreElementInteractionState(i)})}isManagedByDynamicPanel(e){const t=e?.parentElement?.type;return t===_.DYNAMIC_PANEL||t===_.DYNAMIC_TABLE}resetInteractionStateCacheForPropertyChange(e){const t=e??{};const n=String(t["key"]??"").trim();if(n!=="readOnly"&&n!=="disabled"&&n!=="inheritParentState"&&n!=="ignoreParentState"&&n!=="status")return;const o=String(t["elementName"]??"").trim();if(!o)return;const i=this.getElement(o);if(!i)return;if(n==="readOnly"){i.readOnly=Boolean(t["value"]);delete i["status"]}if(n==="disabled")i.disabled=Boolean(t["value"]);if(n==="inheritParentState"){i["inheritParentState"]=Boolean(t["value"]);delete i["ignoreParentState"]}if(n==="ignoreParentState"){i["ignoreParentState"]=Boolean(t["value"]);delete i["inheritParentState"]}delete i["__pfBaseReadOnly"];delete i["__pfBaseDisabled"]}applyRowsInteractionState(e,t,n){if(!Array.isArray(e))return;e.forEach(o=>{o?.columns?.forEach(i=>{const r=String(i?.elementRef??"").trim();if(!r)return;const a=this.getElement(r);const c=this.applyElementInteractionState(a,t);if(a)n.add(a);this.applyRowsInteractionState(i?.rows,c.propagate,n);const b=i?.tabRows??{};Object.keys(b).forEach(v=>{this.applyRowsInteractionState(b[v],c.propagate,n)})})})}applyElementInteractionState(e,t,n={}){if(!e)return{propagate:t};if(typeof e["__pfBaseReadOnly"]!=="boolean")e["__pfBaseReadOnly"]=Boolean(e.readOnly);if(typeof e["__pfBaseDisabled"]!=="boolean")e["__pfBaseDisabled"]=Boolean(e.disabled);const o=Boolean(e["__pfBaseReadOnly"]);const i=Boolean(e["__pfBaseDisabled"]);const r=Boolean(e["__pfLogicReadOnly"]);const a=Boolean(e["__pfLogicDisabled"]);const c=this.resolveInheritParentState(e);const b=Boolean(t.readOnly)&&c;const v=Boolean(t.disabled)&&c;const d=Boolean(n.readOnly)||this.normalizeInteractionStatus(e?.["status"])==="readonly"||o||r;const u=Boolean(n.disabled)||i||a;const m={readOnly:b||d,disabled:v||u};const f=m.readOnly||m.disabled;e.readOnly=m.readOnly;e.disabled=m.disabled;e["__pfInteractionLocked"]=f;e["__pfInteractionReadonly"]=m.readOnly;e["__pfInteractionDisabled"]=m.disabled;e["__pfAncestorReadonly"]=b;e["__pfAncestorDisabled"]=v;return{propagate:m}}restoreElementInteractionState(e){if(!e)return;if(typeof e["__pfBaseReadOnly"]==="boolean")e.readOnly=Boolean(e["__pfBaseReadOnly"])||Boolean(e["__pfLogicReadOnly"]);if(typeof e["__pfBaseDisabled"]==="boolean")e.disabled=Boolean(e["__pfBaseDisabled"]);e["__pfInteractionLocked"]=Boolean(e.readOnly)||Boolean(e.disabled)||Boolean(e["__pfLogicReadOnly"])||Boolean(e["__pfLogicDisabled"]);e["__pfInteractionReadonly"]=false;e["__pfInteractionDisabled"]=false}resolveInheritParentState(e){const t=e?.["inheritParentState"];if(t!==void 0&&t!==null)return Boolean(t);return!Boolean(e?.["ignoreParentState"])}initializeFrameMeasurement(){const e=this.previewFrameShell?.nativeElement;if(!e||typeof ResizeObserver==="undefined"){this.updateMeasuredFrameWidth();return}this.frameResizeObserver?.disconnect();this.frameResizeObserver=new ResizeObserver(()=>{this.updateMeasuredFrameWidth()});this.frameResizeObserver.observe(e);this.updateMeasuredFrameWidth()}updateMeasuredFrameWidth(){const e=this.previewFrameShell?.nativeElement?.getBoundingClientRect().width??0;this.measuredFrameWidthPx.set(e>0?e:null);$e(e>0?e:null);this.syncRuntimeDeviceMode()}syncRuntimeDeviceMode(){if(!this.isRuntimeMode())return;const e=this.resolveRuntimeDeviceMode();if(this.deviceMode()!==e)this.deviceMode.set(e)}resolveRuntimeDeviceMode(){if(ne())return"mobile";if(Ue())return"tablet";return"desktop"}removeFrameResizeListeners(){if(this.frameResizeMoveHandler){document.removeEventListener("mousemove",this.frameResizeMoveHandler);this.frameResizeMoveHandler=null}if(this.frameResizeUpHandler){document.removeEventListener("mouseup",this.frameResizeUpHandler);this.frameResizeUpHandler=null}}clampFrameWidth(e,t){const n=this.resolveMinFrameWidth();const o=Math.max(n,Math.floor(t-12));return Math.round(Math.min(Math.max(e,n),o))}resolveMinFrameWidth(){if(this.deviceMode()==="mobile")return 280;if(this.deviceMode()==="tablet")return 420;return 520}resolveCssWidthInPixels(e,t){const n=String(e??"").trim().toLowerCase();if(!n)return this.resolveMinFrameWidth();if(n.endsWith("%")){const i=parseFloat(n.slice(0,-1));if(!Number.isNaN(i))return t*i/100}if(n.endsWith("px")){const i=parseFloat(n.slice(0,-2));if(!Number.isNaN(i))return i}const o=parseFloat(n);if(!Number.isNaN(o))return o;return this.resolveMinFrameWidth()}resolveControlPosition(e,t,n){const o=this.normalizeControlPosition(e);if(o)return o;const i=this.normalizeControlPosition(t);if(i)return i;return n}resolveBooleanPreference(e,t,n){if(typeof e==="boolean")return e;if(typeof t==="boolean")return t;return n}hasPosition(e,t){if(e==="both")return true;return e===t}normalizeControlPosition(e){const t=String(e??"").trim().toLowerCase();if(t==="top"||t==="bottom"||t==="both"||t==="none")return t;return null}normalizeInteractionStatus(e){return String(e??"").trim().toLowerCase()==="readonly"?"readonly":"default"}normalizeCssSize(e,t=null){return xn(e)??t}normalizeContentDisplay(e){return String(e??"").trim().toLowerCase()==="grid"?"grid":"flex"}normalizeFlexDirection(e){return String(e??"").trim().toLowerCase()==="column"?"column":"row"}normalizeCssTemplate(e){return String(e??"").trim()||null}normalizeActionButtonVariant(e){const t=String(e??"").trim().toLowerCase();if(t==="filled"||t==="solid")return"filled";if(t==="text")return"text";return"outlined"}normalizeActionButtonTone(e){const t=String(e??"").trim().toLowerCase();if(t==="primary")return"primary";if(t==="risk"||t==="danger"||t==="error")return"risk";return"neutral"}resolveHeaderVisibility(e,t){if(typeof e==="boolean")return e;return String(t??"").trim().length>0}normalizeDialogFooterActionsAlign(e){const t=String(e??"").trim().toLowerCase();if(t==="left")return"left";if(t==="center"||t==="centre")return"center";return"right"}isContainerElement(e){switch(String(e??"").trim()){case _.PAGE:case _.PANEL:case _.OBJECT_PANEL:case _.DYNAMIC_PANEL:case _.TABS:case _.TABS_PRO:case _.ACCORDION:case _.PROGRESS_FLOW:case _.SPLITTER:case _.DIALOG:case _.EMPTY_BLOCK:return true;default:return false}}resolveConfiguredSettingText(e){const t=this.settings();if(!t||!Object.prototype.hasOwnProperty.call(t,e))return null;return String(t[e]??"").trim()}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:jt,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:jt,isStandalone:true,selector:"runtime-preview",inputs:{viewportSettings:{classPropertyName:"viewportSettings",publicName:"viewportSettings",isSignal:true,isRequired:false,transformFunction:null},runtimePreviewSettings:{classPropertyName:"runtimePreviewSettings",publicName:"runtimePreviewSettings",isSignal:true,isRequired:false,transformFunction:null}},viewQueries:[{propertyName:"dialogShellRef",first:true,predicate:["previewDialogShell"],descendants:true,isSignal:true},{propertyName:"previewContentHost",first:true,predicate:["previewContentHost"],descendants:true},{propertyName:"previewFrameShell",first:true,predicate:["previewFrameShell"],descendants:true}],ngImport:l,template:"<section\n class=\"nvb-preview-root\"\n [ngClass]=\"{\n 'nvb-preview-root--runtime': isRuntimeMode(),\n 'nvb-preview-root--export-all-pages': renderAllVisiblePages(),\n 'nvb-preview-root--no-padding': removeContentPadding(),\n 'nvb-preview-root--canvas': isCanvasMode(),\n }\"\n [style.--nvb-preview-shell-inset]=\"resolveContentPadding()\"\n data-testid=\"preview-root\"\n>\n @if (!isRuntimeMode()) {\n <header class=\"nvb-preview-header\" data-testid=\"preview-toolbar\">\n <div class=\"nvb-preview-header__side\">\n <nvb-select\n class=\"nvb-preview-toolbar__select nvb-preview-toolbar__select--compact\"\n [value]=\"currentPageIndex()\"\n (change)=\"onCurrentPageSelectEvent($event)\"\n data-testid=\"preview-page-select-header\"\n [disabled]=\"pagesCount() === 0\"\n [attr.aria-label]=\"'preview.page.select' | uiT: 'Preview page'\"\n >\n @for (entry of visiblePageEntries(); track entry.page.name; let i = $index) {\n <option [value]=\"i\">\n {{ visiblePageLabel(entry, i) | dynamicText: getElement(entry.page.name) }}\n </option>\n }\n </nvb-select>\n </div>\n\n <div class=\"nvb-preview-header__center\">\n <div\n class=\"nvb-preview-device-switch\"\n role=\"group\"\n [attr.aria-label]=\"'preview.device.group' | uiT: 'Preview device'\"\n >\n <button\n type=\"button\"\n class=\"nvb-preview-device-switch__button\"\n [class.nvb-preview-device-switch__button--active]=\"deviceMode() === 'desktop'\"\n (click)=\"setDeviceMode('desktop')\"\n data-testid=\"preview-device-desktop\"\n [attr.aria-label]=\"'preview.device.desktop' | uiT: 'Desktop'\"\n [attr.title]=\"'preview.device.desktop' | uiT: 'Desktop'\"\n >\n <nvb-icon [svg]=\"desktopDeviceIconSvg\"></nvb-icon>\n </button>\n <button\n type=\"button\"\n class=\"nvb-preview-device-switch__button\"\n [class.nvb-preview-device-switch__button--active]=\"deviceMode() === 'tablet'\"\n (click)=\"setDeviceMode('tablet')\"\n data-testid=\"preview-device-tablet\"\n [attr.aria-label]=\"'preview.device.tablet' | uiT: 'Tablet'\"\n [attr.title]=\"'preview.device.tablet' | uiT: 'Tablet'\"\n >\n <nvb-icon [svg]=\"tabletDeviceIconSvg\"></nvb-icon>\n </button>\n <button\n type=\"button\"\n class=\"nvb-preview-device-switch__button\"\n [class.nvb-preview-device-switch__button--active]=\"deviceMode() === 'mobile'\"\n (click)=\"setDeviceMode('mobile')\"\n data-testid=\"preview-device-mobile\"\n [attr.aria-label]=\"'preview.device.mobile' | uiT: 'Mobile'\"\n [attr.title]=\"'preview.device.mobile' | uiT: 'Mobile'\"\n >\n <nvb-icon [svg]=\"mobileDeviceIconSvg\"></nvb-icon>\n </button>\n </div>\n\n <span class=\"nvb-preview-header__width\" data-testid=\"preview-frame-width\">\n {{ currentFrameWidthLabel() }}\n </span>\n </div>\n\n <div class=\"nvb-preview-header__side nvb-preview-header__side--end\">\n <nvb-select\n class=\"nvb-preview-toolbar__select nvb-preview-toolbar__select--compact\"\n [value]=\"selectedLanguage()\"\n (change)=\"onLanguageSelectEvent($event)\"\n data-testid=\"preview-language-select\"\n [disabled]=\"languages().length <= 1\"\n [attr.aria-label]=\"'preview.language.select' | uiT: 'Preview language'\"\n >\n @for (language of languages(); track language) {\n <option [value]=\"language\">{{ language }}</option>\n }\n </nvb-select>\n </div>\n </header>\n }\n\n <div\n class=\"nvb-preview-stage\"\n [ngClass]=\"{\n 'nvb-preview-stage--with-toc': showToc(),\n 'nvb-preview-stage--with-validation-panel': showValidationPanel(),\n }\"\n data-testid=\"preview-stage\"\n >\n @if (showValidationPanel()) {\n <aside class=\"nvb-preview-validation-panel\" data-testid=\"preview-validation-panel\">\n <header class=\"nvb-preview-validation-panel__header\">\n <h4 class=\"nvb-preview-validation-panel__title\">\n {{ 'preview.validation.panel.title' | uiT: 'Validation issues' }}\n </h4>\n <button\n type=\"button\"\n class=\"nvb-preview-validation-panel__close\"\n (click)=\"closeValidationPanel()\"\n [attr.aria-label]=\"'preview.validation.panel.close' | uiT: 'Close validation panel'\"\n data-testid=\"preview-validation-panel-close\"\n >\n <nvb-icon name=\"close\"></nvb-icon>\n </button>\n </header>\n\n <div class=\"nvb-preview-validation-panel__body\">\n @for (\n group of validationIssuePageGroups();\n track group.pageName + '-' + group.sourceIndex\n ) {\n <section class=\"nvb-preview-validation-group\">\n <h5 class=\"nvb-preview-validation-group__title\">\n {{ group.sourceIndex + 1 }}. {{ group.pageName }}\n <span class=\"nvb-preview-validation-group__meta\">({{ group.totalErrors }})</span>\n </h5>\n\n <ul class=\"nvb-preview-validation-group__list\">\n @for (issue of group.issues; track issue.dataPath + '-' + issue.elementName) {\n <li>\n <button\n type=\"button\"\n class=\"nvb-preview-validation-issue\"\n (click)=\"onValidationIssueClick(issue)\"\n [attr.title]=\"issue.errors.join('\\n')\"\n [attr.data-testid]=\"\n 'preview-validation-issue-' + (issue.dataPath || issue.elementName)\n \"\n >\n <span class=\"nvb-preview-validation-issue__name\">\n {{ issue.elementLabel || issue.elementName || issue.dataPath }}\n </span>\n <span class=\"nvb-preview-validation-issue__count\">{{ issue.errors.length }}</span>\n </button>\n </li>\n }\n </ul>\n </section>\n }\n </div>\n </aside>\n }\n\n @if (showToc()) {\n <aside class=\"nvb-preview-toc\" data-testid=\"preview-toc\">\n <h4 class=\"nvb-preview-toc__title\">{{ 'preview.toc.title' | uiT: 'Pages' }}</h4>\n <div class=\"nvb-preview-toc__list\">\n @for (entry of visiblePageEntries(); track entry.page.name; let i = $index) {\n <button\n type=\"button\"\n class=\"nvb-preview-toc__item\"\n [class.nvb-preview-toc__item--active]=\"currentPageIndex() === i\"\n [disabled]=\"isStepLocked(i)\"\n (click)=\"onTocPageClick(i)\"\n [attr.data-testid]=\"'preview-toc-item-' + i\"\n >\n <span class=\"nvb-preview-toc__name\">\n {{ visiblePageLabel(entry, i) | dynamicText: getElement(entry.page.name) }}\n </span>\n </button>\n }\n </div>\n </aside>\n }\n\n <div class=\"nvb-preview-stage__content\" #previewContentHost>\n <div\n class=\"nvb-preview-frame-shell\"\n #previewFrameShell\n [class.nvb-preview-frame-shell--resizing]=\"isFrameResizing()\"\n [class.nvb-preview-frame-shell--runtime]=\"isRuntimeMode()\"\n [style.width]=\"resolvedFrameWidthStyle()\"\n >\n <div class=\"nvb-preview-frame\" [attr.data-device]=\"deviceMode()\" data-testid=\"preview-frame\">\n @if (isDialogMode()) {\n @if (dialogOpen() || dialogClosing()) {\n <div\n class=\"nvb-preview-dialog-shell nvb-preview-dialog-shell--open\"\n #previewDialogShell\n [class.nvb-preview-dialog-shell--closing]=\"dialogClosing()\"\n [class.nvb-preview-dialog-shell--draggable]=\"isDialogDraggable()\"\n role=\"dialog\"\n aria-labelledby=\"preview-dialog-title\"\n [attr.aria-describedby]=\"dialogDescription() ? 'preview-dialog-description' : null\"\n >\n <section\n class=\"nvb-preview-dialog\"\n [class.nvb-preview-dialog--draggable]=\"isDialogDraggable()\"\n [class.nvb-preview-dialog--dragging]=\"isDialogDragging()\"\n [style.width]=\"dialogWidthStyle()\"\n [style.max-width]=\"dialogMaxWidthStyle()\"\n [style.max-height]=\"dialogMaxHeightStyle()\"\n [style.font-size]=\"dialogFontSizeStyle()\"\n [style.transform]=\"dialogDragTransform()\"\n >\n <header class=\"nvb-preview-dialog__header\" (pointerdown)=\"onDialogDragStart($event)\">\n <div class=\"nvb-preview-dialog__heading\">\n <div class=\"nvb-preview-dialog__title\" id=\"preview-dialog-title\">\n {{ dialogTitle() }}\n </div>\n @if (dialogDescription()) {\n <p class=\"nvb-preview-dialog__description\" id=\"preview-dialog-description\">\n {{ dialogDescription() }}\n </p>\n }\n </div>\n\n @if (showDialogCloseButton()) {\n <button\n type=\"button\"\n class=\"nvb-preview-dialog__close\"\n data-testid=\"preview-dialog-close\"\n (click)=\"onDialogCloseClick()\"\n [attr.aria-label]=\"'preview.dialog.close' | uiT: 'Close dialog'\"\n >\n <nvb-icon name=\"close\"></nvb-icon>\n </button>\n }\n </header>\n\n <div class=\"nvb-preview-dialog__body\">\n <ng-container\n *ngTemplateOutlet=\"formShellTemplate; context: { dialogMode: true }\"\n ></ng-container>\n </div>\n\n @if (hasDialogFooterActions()) {\n <footer class=\"nvb-preview-dialog__footer\">\n <div\n class=\"nvb-preview-dialog__footer-actions\"\n [ngClass]=\"'nvb-preview-dialog__footer-actions--' + dialogFooterActionsAlign()\"\n >\n @for (\n action of dialogFooterActions();\n track action.id || $index;\n let i = $index\n ) {\n <button\n type=\"button\"\n class=\"nvb-preview-dialog-action\"\n [ngClass]=\"dialogFooterActionClasses(action)\"\n (click)=\"onDialogFooterActionClick(action)\"\n [attr.data-testid]=\"'preview-dialog-footer-action-' + i\"\n [attr.aria-label]=\"dialogFooterActionLabel(action, i)\"\n [attr.title]=\"dialogFooterActionLabel(action, i)\"\n >\n @if (dialogFooterActionIcon(action)) {\n <nvb-icon [name]=\"dialogFooterActionIcon(action)\"></nvb-icon>\n }\n @if (action.label) {\n <span>{{ action.label }}</span>\n }\n </button>\n }\n </div>\n </footer>\n }\n </section>\n </div>\n }\n @if (!dialogOpen() && !dialogClosing() && !isRuntimeMode()) {\n <button\n type=\"button\"\n class=\"nvb-preview-dialog__open\"\n data-testid=\"preview-dialog-open\"\n (click)=\"reopenDialog()\"\n >\n {{ 'preview.dialog.open' | uiT: 'Open form' }}\n </button>\n }\n } @else {\n <ng-container\n *ngTemplateOutlet=\"formShellTemplate; context: { dialogMode: false }\"\n ></ng-container>\n }\n </div>\n\n @if (!isRuntimeMode()) {\n <button\n type=\"button\"\n class=\"nvb-preview-frame__resizer\"\n (mousedown)=\"onFrameResizeMouseDown($event)\"\n (dblclick)=\"resetFrameWidth()\"\n [attr.title]=\"'preview.resize' | uiT: 'Resize preview width'\"\n [attr.aria-label]=\"'preview.resize' | uiT: 'Resize preview width'\"\n data-testid=\"preview-frame-resizer\"\n >\n <span class=\"nvb-preview-frame__resizer-grip\"></span>\n </button>\n }\n </div>\n </div>\n </div>\n\n @if (!isRuntimeMode() && submittedJson()) {\n <section class=\"nvb-preview-result\" data-testid=\"preview-submit-json\">\n <h4>{{ 'preview.result' | uiT: 'Pateikimo JSON' }}</h4>\n <pre>{{ submittedJson() }}</pre>\n </section>\n }\n</section>\n\n<ng-template #formShellTemplate let-dialogMode=\"dialogMode\">\n <div class=\"nvb-preview-form-shell\" [class.nvb-preview-form-shell--dialog]=\"dialogMode\">\n <ng-container\n *ngTemplateOutlet=\"formChromeTemplate; context: { placement: 'top' }\"\n ></ng-container>\n\n <div\n class=\"nvb-preview-form-body\"\n [class.nvb-preview-form-body--dialog]=\"dialogMode\"\n [style.padding]=\"dialogMode ? dialogPaddingStyle() : null\"\n >\n <div\n class=\"nvb-view\"\n [class.nvb-view--dialog]=\"dialogMode\"\n [style.--nvb-form-element-spacing]=\"isCanvasMode() ? '0px' : resolveElementSpacing()\"\n [style.--nvb-section-element-spacing]=\"resolveElementSpacing()\"\n >\n @if (!dialogMode && !isCanvasMode() && headerModel() && hasVisibleHeader()) {\n <runtime-content-header [model]=\"headerModel()\"></runtime-content-header>\n }\n\n <main style=\"width: 100%\">\n @for (page of visiblePages(); track page.name; let i = $index; let isLast = $last) {\n @let pageElement = getElement(page.name);\n <div\n class=\"nvb-preview-page-render\"\n [class.nvb-preview-page-render--export-break]=\"renderAllVisiblePages() && !isLast\"\n [attr.data-preview-page-index]=\"i\"\n >\n <runtime-container-outlet\n [model]=\"pageElement\"\n [pageIsEmpty]=\"page.rows.length > 0\"\n [pageRows]=\"page.rows\"\n [isMobileView]=\"deviceMode() === 'mobile'\"\n [rowsTemplate]=\"rowsTemplate\"\n [projectedContext]=\"{ rows: page.rows, parentElement: pageElement }\"\n ></runtime-container-outlet>\n </div>\n }\n </main>\n </div>\n </div>\n\n <ng-container\n *ngTemplateOutlet=\"formChromeTemplate; context: { placement: 'bottom' }\"\n ></ng-container>\n </div>\n</ng-template>\n\n<ng-template #formChromeTemplate let-placement=\"placement\">\n @if (hasFormChromeAt(placement)) {\n <section\n class=\"nvb-preview-form-chrome\"\n [ngClass]=\"{ 'nvb-preview-form-chrome--bottom': placement === 'bottom' }\"\n [attr.data-testid]=\"'preview-form-chrome-' + placement\"\n >\n @if (showStepperAt(placement)) {\n <nav\n class=\"nvb-preview-steps nvb-preview-steps--embedded\"\n [attr.aria-label]=\"'preview.steps' | uiT: 'Page steps'\"\n [attr.data-testid]=\"'preview-steps-' + placement\"\n >\n <ol class=\"nvb-preview-steps__list\">\n @for (\n entry of visiblePageEntries();\n track entry.page.name;\n let i = $index;\n let isLast = $last\n ) {\n <li\n class=\"nvb-preview-steps__item\"\n [ngClass]=\"{\n 'nvb-preview-steps__item--current': isStepCurrent(i),\n 'nvb-preview-steps__item--done': isStepCompleted(i),\n 'nvb-preview-steps__item--locked': isStepLocked(i),\n }\"\n >\n <button\n type=\"button\"\n class=\"nvb-preview-step\"\n [disabled]=\"isStepLocked(i)\"\n (click)=\"onStepClick(i)\"\n [attr.data-testid]=\"'preview-step-' + placement + '-' + i\"\n >\n <span class=\"nvb-preview-step__marker\">{{ i + 1 }}</span>\n <span class=\"nvb-preview-step__body\">\n <span class=\"nvb-preview-step__label\">\n {{ visiblePageLabel(entry, i) | dynamicText: getElement(entry.page.name) }}\n </span>\n @if (visiblePageStepDescription(entry, i); as description) {\n <span class=\"nvb-preview-step__value\">\n {{ description | dynamicText: getElement(entry.page.name) }}\n </span>\n }\n </span>\n </button>\n\n @if (!isLast) {\n <span class=\"nvb-preview-step__connector\" aria-hidden=\"true\"></span>\n }\n </li>\n }\n </ol>\n </nav>\n }\n\n @if (showPaginationAt(placement) || showActionsAt(placement)) {\n <div\n class=\"nvb-preview-form-toolbar\"\n [class.nvb-preview-form-toolbar--actions-only]=\"\n showActionsAt(placement) && !showPaginationAt(placement)\n \"\n >\n @if (showPaginationAt(placement)) {\n <div class=\"nvb-preview-toolbar__group\">\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button\"\n (click)=\"previousPage()\"\n [disabled]=\"pagesCount() === 0 || currentPageIndex() === 0\"\n [attr.data-testid]=\"'preview-page-prev-' + placement\"\n [attr.aria-label]=\"'preview.prev.aria' | uiT: 'Previous page'\"\n >\n {{ 'preview.prev' | uiT: 'Prev' }}\n </button>\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button\"\n (click)=\"nextPage()\"\n [disabled]=\"pagesCount() === 0 || currentPageIndex() >= pagesCount() - 1\"\n [attr.data-testid]=\"'preview-page-next-' + placement\"\n [attr.aria-label]=\"'preview.next.aria' | uiT: 'Next page'\"\n >\n {{ 'preview.next' | uiT: 'Next' }}\n </button>\n </div>\n }\n\n @if (showActionsAt(placement)) {\n <div class=\"nvb-preview-toolbar__group\">\n @if (showValidateActionButton()) {\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button\"\n (click)=\"validate()\"\n [attr.data-testid]=\"'preview-validate-' + placement\"\n [attr.aria-label]=\"'preview.validate.aria' | uiT: 'Validate page'\"\n >\n {{ 'preview.validate' | uiT: 'Validuoti' }}\n </button>\n }\n @if (showSubmitActionButton()) {\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button nvb-preview-toolbar__button--primary\"\n (click)=\"submit()\"\n [attr.data-testid]=\"'preview-submit-' + placement\"\n [attr.aria-label]=\"'preview.submit.aria' | uiT: 'Submit page'\"\n >\n {{ 'preview.submit' | uiT: 'Pateikti' }}\n </button>\n }\n @for (\n action of customActionsAt(placement);\n track action.id || $index;\n let i = $index\n ) {\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button\"\n [ngClass]=\"chromeActionClasses(action)\"\n (click)=\"onChromeActionClick(action)\"\n [attr.data-testid]=\"'preview-custom-action-' + placement + '-' + i\"\n [attr.aria-label]=\"dialogFooterActionLabel(action, i)\"\n [attr.title]=\"dialogFooterActionLabel(action, i)\"\n >\n @if (dialogFooterActionIcon(action)) {\n <nvb-icon [name]=\"dialogFooterActionIcon(action)\"></nvb-icon>\n }\n <span>{{ dialogFooterActionLabel(action, i) }}</span>\n </button>\n }\n </div>\n }\n </div>\n }\n </section>\n }\n</ng-template>\n\n<ng-template #rowsTemplate let-rows=\"rows\" let-parentElement=\"parentElement\">\n @for (row of rows; track $index) {\n <div class=\"nvb-row\" [ngStyle]=\"resolveRowStyle(parentElement)\">\n @for (column of row.columns; track column.elementRef) {\n @let element = getElement(column.elementRef);\n\n @if (element) {\n <div\n class=\"nvb-column\"\n [ngClass]=\"{ 'nvb-column--hidden': element.hidden }\"\n [ngStyle]=\"resolveColumnStyle(parentElement, element)\"\n >\n @if (isContainerElement(element.type)) {\n <runtime-container-outlet\n [model]=\"element\"\n [column]=\"column\"\n [isMobileView]=\"deviceMode() === 'mobile'\"\n [rowsTemplate]=\"rowsTemplate\"\n [projectedContext]=\"{ rows: column.rows, parentElement: element }\"\n ></runtime-container-outlet>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"layoutTemplate; context: { $implicit: element }\"\n ></ng-container>\n }\n </div>\n }\n }\n </div>\n }\n</ng-template>\n\n<ng-template #layoutTemplate let-element>\n <runtime-lazy-element-outlet [model]=\"element\"></runtime-lazy-element-outlet>\n</ng-template>\n",styles:[':host{width:100%;height:100%;min-height:0;display:block}.nvb-preview-root{--nvb-preview-btn-height: var(--nvb-control-height);--nvb-preview-btn-font-size: var(--nvb-control-font-size);--nvb-preview-btn-radius: var(--nvb-control-radius);--nvb-preview-btn-padding-x: var(--nvb-control-padding-x);--nvb-preview-shell-inset: 12px;display:flex;flex-direction:column;gap:10px;height:100%;min-height:0;padding:10px;background:color-mix(in oklab,var(--nvb-color-neutral-050) 84%,white)}.nvb-preview-root--runtime{--nvb-preview-shell-inset: 14px;padding:0;background:transparent}.nvb-preview-root--no-padding{--nvb-preview-shell-inset: 0px;padding:0}.nvb-preview-root--export-all-pages{height:auto;min-height:0}.nvb-preview-root--canvas{--nvb-preview-shell-inset: 0px;--nvb-page-padding: 0px;--nvb-page-gap: 0px;--nvb-page-margin-bottom: 0px;--nvb-page-radius: 0px;--nvb-page-surface: transparent;--nvb-page-border-color: transparent;--nvb-page-header-display: none;--nvb-page-content-padding: 0px;padding:0}.nvb-preview-root--canvas .nvb-preview-frame,.nvb-preview-root--canvas .nvb-preview-stage--with-toc .nvb-preview-frame{border:0;border-radius:0;box-shadow:none}.nvb-preview-root--canvas.nvb-preview-root--runtime .nvb-preview-frame{background:transparent}.nvb-preview-header{--nvb-preview-btn-height: 32px;--nvb-preview-btn-font-size: 12px;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:12px;border:1px solid var(--nvb-card-border-color, var(--nvb-color-neutral-200));border-radius:var(--nvb-card-radius, var(--nvb-radius-sm));box-shadow:var(--nvb-card-shadow);padding:6px 12px;background:var(--nvb-card-bg, var(--nvb-color-neutral-000))}.nvb-preview-header__side{min-width:0;display:flex;align-items:center}.nvb-preview-header__side--end{justify-content:flex-end}.nvb-preview-header__center{min-width:0;display:inline-flex;align-items:center;justify-content:center;gap:10px}.nvb-preview-header__width{color:var(--nvb-color-neutral-600);font-size:12px;font-weight:600;line-height:1;white-space:nowrap}.nvb-preview-device-switch{display:inline-flex;align-items:center;gap:2px;padding:3px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-md);background:color-mix(in oklab,var(--nvb-color-neutral-050) 82%,var(--nvb-color-neutral-000))}.nvb-preview-device-switch__button{width:30px;height:24px;border:1px solid transparent;border-radius:calc(var(--nvb-radius-md) - 1px);background:transparent;color:var(--nvb-color-neutral-600);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;transition:border-color .14s ease,background-color .14s ease,color .14s ease}.nvb-preview-device-switch__button nvb-icon{width:16px;height:16px}.nvb-preview-device-switch__button:not(:disabled):hover{color:var(--nvb-color-primary-700);background:var(--nvb-color-primary-050)}.nvb-preview-device-switch__button--active{border-color:var(--nvb-color-primary-500);background:var(--nvb-color-primary-050);color:var(--nvb-color-primary-700)}.nvb-preview-toolbar__group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.nvb-preview-toolbar__button{box-sizing:border-box;border:1px solid var(--nvb-button-border-color, var(--nvb-color-neutral-300));border-radius:var(--nvb-button-radius, var(--nvb-preview-btn-radius));min-height:var(--nvb-button-height-sm, 32px);padding:var(--nvb-button-padding-sm, 0 10px);background:var(--nvb-button-bg, var(--nvb-color-neutral-000));color:var(--nvb-button-text-color, var(--nvb-color-neutral-700));cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--nvb-button-gap, 6px);font-size:var(--nvb-button-font-size-sm, var(--nvb-preview-btn-font-size));font-weight:600;line-height:20px;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif));white-space:nowrap;transition:background-color .2s ease,border-color .2s ease,color .2s ease,opacity .2s ease,box-shadow .2s ease}.nvb-preview-toolbar__button:not(:disabled):hover{border-color:var(--nvb-color-neutral-400);background:var(--nvb-button-hover-bg, var(--nvb-color-primary-050));color:var(--nvb-color-neutral-900)}.nvb-preview-toolbar__button:disabled{opacity:.6;cursor:not-allowed}.nvb-preview-toolbar__button--active{border-color:var(--nvb-color-primary-500);color:var(--nvb-color-primary-700);background:var(--nvb-color-primary-050)}.nvb-preview-toolbar__button--primary{border-color:var(--nvb-button-primary-bg, var(--nvb-color-primary-600));background:var(--nvb-button-primary-bg, var(--nvb-color-primary-600));color:var(--nvb-color-neutral-000)}.nvb-preview-toolbar__button--primary:not(:disabled):hover{border-color:var(--nvb-button-primary-hover-bg, var(--nvb-color-primary-700));background:var(--nvb-button-primary-hover-bg, var(--nvb-color-primary-700));color:var(--nvb-color-neutral-000)}.nvb-preview-toolbar__label{color:var(--nvb-color-neutral-700);font-size:13px;font-weight:600}.nvb-preview-toolbar__select{border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-preview-btn-radius);min-height:var(--nvb-preview-btn-height);padding:0 10px;background:color-mix(in oklab,var(--nvb-color-neutral-050) 82%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-700);font-size:var(--nvb-preview-btn-font-size);font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif));min-width:78px}.nvb-preview-toolbar__select--compact{width:min(220px,100%);min-width:120px}.nvb-preview-validation{margin:0;color:var(--nvb-color-neutral-700);font-size:13px}.nvb-preview-validation--inline{padding:8px 10px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-sm);background:color-mix(in oklab,var(--nvb-color-neutral-050) 82%,var(--nvb-color-neutral-000))}.nvb-preview-steps{--nvb-preview-step-accent: var(--nvb-color-primary-600, #2563eb);--nvb-preview-step-surface: var(--nvb-color-neutral-000, #ffffff);--nvb-preview-step-border: color-mix( in oklab, var(--nvb-color-neutral-300, #d4d4d8) 82%, var(--nvb-color-neutral-000, #ffffff) );--nvb-preview-step-border-strong: color-mix( in oklab, var(--nvb-color-neutral-400, #a1a1aa) 84%, var(--nvb-color-neutral-000, #ffffff) );display:block;border:1px solid var(--nvb-preview-step-border);border-radius:var(--nvb-radius-xl);padding:14px 16px;background:var(--nvb-preview-step-surface)}.nvb-preview-steps__list{list-style:none;margin:-4px -4px 0;padding:4px 4px 0;display:flex;flex-direction:row;align-items:flex-start;flex-wrap:nowrap;gap:0;overflow-x:auto}.nvb-preview-steps__item{position:relative;flex:1 1 0;min-width:60px;display:flex;flex-direction:column;align-items:center}.nvb-preview-step{width:100%;border:0;background:transparent;color:var(--nvb-color-neutral-800, #27272a);min-height:auto;padding:0 8px 16px;display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer;text-align:center;font-size:14px;font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif));transition:color .16s ease,opacity .16s ease}.nvb-preview-steps__item:not(.nvb-preview-steps__item--done) .nvb-preview-step:hover:not(:disabled) .nvb-preview-step__marker{border-color:var(--nvb-preview-step-accent);color:var(--nvb-preview-step-accent)}.nvb-preview-step:focus-visible{outline:none}.nvb-preview-step:focus-visible .nvb-preview-step__marker{box-shadow:0 0 0 3px color-mix(in oklab,var(--nvb-preview-step-accent) 20%,transparent)}.nvb-preview-step__marker{width:34px;height:34px;border-radius:var(--nvb-radius-full);border:2px solid var(--nvb-preview-step-border-strong);background:var(--nvb-preview-step-surface);color:var(--nvb-color-neutral-500, #71717a);display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;line-height:1;position:relative;z-index:1;transition:border-color .16s ease,background-color .16s ease,color .16s ease,box-shadow .16s ease}.nvb-preview-step__body{min-width:0;display:flex;flex-direction:column;align-items:center;gap:4px;padding-top:0}.nvb-preview-step__label{font-size:13px;font-weight:600;color:var(--nvb-color-neutral-700, #3f3f46);text-align:center;line-height:1.4}.nvb-preview-step__value{font-size:12px;font-weight:400;color:var(--nvb-color-neutral-600, #52525b);text-align:center;line-height:1.4}.nvb-preview-step__connector{position:absolute;top:16px;left:50%;width:100%;height:2px;background:var(--nvb-preview-step-border);z-index:0;pointer-events:none;right:auto;border-radius:var(--nvb-radius-full)}.nvb-preview-steps__item--current .nvb-preview-step__marker{border-color:var(--nvb-preview-step-accent);color:var(--nvb-preview-step-accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--nvb-preview-step-accent) 14%,transparent)}.nvb-preview-steps__item--current .nvb-preview-step__label{color:var(--nvb-color-primary-700, #1d4ed8)}.nvb-preview-steps__item--done .nvb-preview-step__marker{border-color:var(--nvb-preview-step-accent);background:var(--nvb-preview-step-accent);color:var(--nvb-color-neutral-000, #ffffff)}.nvb-preview-steps__item--done .nvb-preview-step:hover:not(:disabled) .nvb-preview-step__marker,.nvb-preview-steps__item--done .nvb-preview-step:focus-visible .nvb-preview-step__marker{border-color:var(--nvb-preview-step-accent);background:var(--nvb-preview-step-accent);color:var(--nvb-color-neutral-000, #ffffff)}.nvb-preview-steps__item--done .nvb-preview-step__connector{background:color-mix(in oklab,var(--nvb-preview-step-accent) 35%,var(--nvb-preview-step-border))}.nvb-preview-steps__item--locked .nvb-preview-step__marker,.nvb-preview-step:disabled{opacity:.58;cursor:not-allowed}.nvb-preview-steps--embedded{width:100%}.nvb-preview-steps__item:last-child{min-width:60px}.nvb-preview-steps__item:last-child .nvb-preview-step__connector{display:none}.nvb-preview-stage{flex:1;min-height:0;overflow:hidden;position:relative;border:1px solid var(--nvb-card-border-color, var(--nvb-color-neutral-200));border-radius:var(--nvb-card-radius, var(--nvb-radius-sm));background-color:color-mix(in oklab,var(--nvb-color-neutral-050) 60%,var(--nvb-color-neutral-000));background-image:radial-gradient(var(--nvb-color-neutral-200) 1px,transparent 1px);background-size:16px 16px;display:flex;gap:12px;align-items:stretch;padding:12px}.nvb-preview-stage--with-toc{display:grid;grid-template-columns:auto minmax(0,1fr);gap:0;padding:0}.nvb-preview-stage--with-validation-panel,.nvb-preview-stage--with-validation-panel.nvb-preview-stage--with-toc{position:relative}.nvb-preview-stage__content{flex:1;min-height:0;min-width:0;display:flex;justify-content:center;align-items:stretch;overflow-x:auto;overflow-y:hidden;padding-right:6px}.nvb-preview-stage--with-toc .nvb-preview-stage__content{padding-right:0}.nvb-preview-validation-panel{position:absolute;top:10px;left:10px;width:min(340px,100% - 20px);max-height:calc(100% - 20px);z-index:2147483600;border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-dialog-radius);background:var(--nvb-color-neutral-000);box-shadow:0 18px 34px #0f172a29;min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr)}.nvb-preview-validation-panel__header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--nvb-color-neutral-200);background:var(--nvb-color-neutral-050)}.nvb-preview-validation-panel__title{margin:0;color:var(--nvb-color-neutral-700);font-size:13px;line-height:1.2}.nvb-preview-validation-panel__close{width:28px;height:28px;min-width:28px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-700);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0}.nvb-preview-validation-panel__close:hover{background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900)}.nvb-preview-validation-panel__body{min-height:0;overflow:auto;padding:10px;display:grid;gap:10px}.nvb-preview-validation-group{border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);padding:8px}.nvb-preview-validation-group__title{margin:0 0 8px;color:var(--nvb-color-neutral-700);font-size:12px;line-height:1.3}.nvb-preview-validation-group__meta{color:var(--nvb-color-neutral-500)}.nvb-preview-validation-group__list{margin:0;padding:0;list-style:none;display:grid;gap:6px}.nvb-preview-validation-issue{width:100%;border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-700);min-height:32px;padding:6px 8px;display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;cursor:pointer}.nvb-preview-validation-issue:hover{border-color:var(--nvb-color-neutral-400);background:var(--nvb-color-neutral-050)}.nvb-preview-validation-issue__name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1.2}.nvb-preview-validation-issue__count{flex-shrink:0;min-width:20px;min-height:20px;border-radius:var(--nvb-radius-full);background:var(--nvb-color-risk-100);color:var(--nvb-color-risk-700);display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.nvb-preview-frame-shell{position:relative;height:100%;min-height:0;min-width:0;max-width:100%;transition:box-shadow .14s ease}.nvb-preview-frame-shell--runtime{width:100%;height:100%}.nvb-preview-frame-shell--resizing{box-shadow:0 0 0 2px color-mix(in oklab,var(--nvb-color-primary-500) 45%,transparent)}.nvb-preview-toc{width:240px;max-width:100%;height:100%;max-height:100%;border:1px solid var(--nvb-color-neutral-300);border-radius:0;background:var(--nvb-color-neutral-000);padding:10px;display:grid;grid-template-rows:auto minmax(0,1fr);gap:8px;min-height:0;overflow:hidden}.nvb-preview-toc__title{margin:0;font-size:13px;color:var(--nvb-color-neutral-700)}.nvb-preview-toc__list{display:grid;gap:6px;overflow:auto;min-height:0;height:100%;align-content:start;overscroll-behavior:contain}.nvb-preview-toc__item{border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-md);background:color-mix(in oklab,var(--nvb-color-neutral-050) 82%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-700);min-height:var(--nvb-preview-btn-height);padding:0 8px;display:flex;align-items:center;gap:6px;cursor:pointer;text-align:left;font-size:var(--nvb-preview-btn-font-size);font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif))}.nvb-preview-toc__item--active{border-color:var(--nvb-color-primary-500);background:var(--nvb-color-primary-050);color:var(--nvb-color-primary-700)}.nvb-preview-toc__item:disabled{opacity:.6;cursor:not-allowed}.nvb-preview-toc__name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.nvb-preview-frame{width:100%;height:100%;min-height:0;display:flex;flex-direction:column;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-lg);background:var(--nvb-color-neutral-000);box-shadow:0 2px 10px #00000014;overflow:hidden}.nvb-preview-stage--with-toc .nvb-preview-frame{border-radius:0}.nvb-preview-form-shell{flex:1;width:100%;height:100%;min-height:0;display:flex;flex-direction:column}.nvb-preview-form-chrome{flex-shrink:0;display:grid;gap:8px;padding:10px var(--nvb-preview-shell-inset);border-bottom:1px solid var(--nvb-color-neutral-200);background:transparent}.nvb-preview-form-chrome--bottom{border-top:1px solid var(--nvb-color-neutral-200);border-bottom:none;background:transparent}.nvb-preview-form-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.nvb-preview-form-toolbar--actions-only{justify-content:flex-end}.nvb-preview-form-body{flex:1;min-height:0;overflow:auto;padding:var(--nvb-preview-shell-inset)}.nvb-preview-form-body--dialog{flex:1 1 auto;min-height:0;overflow:visible;overscroll-behavior:contain;padding:16px}.nvb-preview-root--runtime .nvb-preview-stage{padding:0;border:none;background:transparent;overflow:visible}.nvb-preview-root--runtime .nvb-preview-stage__content{padding-right:0;justify-content:center;overflow:visible}.nvb-preview-root--runtime .nvb-preview-frame{border-radius:0;border:none;box-shadow:none;background:transparent;overflow:visible}.nvb-preview-root--runtime .nvb-preview-frame-shell{height:auto;min-height:0}.nvb-preview-root--export-all-pages .nvb-preview-stage,.nvb-preview-root--export-all-pages .nvb-preview-stage__content,.nvb-preview-root--export-all-pages .nvb-preview-frame-shell,.nvb-preview-root--export-all-pages .nvb-preview-frame,.nvb-preview-root--export-all-pages .nvb-preview-form-shell,.nvb-preview-root--export-all-pages .nvb-preview-form-body,.nvb-preview-root--export-all-pages .nvb-view{height:auto;min-height:0;overflow:visible}.nvb-preview-root--export-all-pages .nvb-preview-stage__content{display:block}.nvb-preview-root--export-all-pages .nvb-preview-frame-shell,.nvb-preview-page-render{width:100%}.nvb-preview-page-render--export-break{break-after:page;page-break-after:always;margin-bottom:16px}.nvb-preview-frame__resizer{position:absolute;top:0;right:0;width:12px;height:100%;border:none;background:transparent;cursor:ew-resize;padding:0;z-index:3}.nvb-preview-frame__resizer-grip{position:absolute;top:50%;right:3px;transform:translateY(-50%);width:4px;height:46px;border-radius:var(--nvb-radius-full);background:color-mix(in oklab,var(--nvb-color-neutral-400) 70%,transparent);transition:background-color .14s ease}.nvb-preview-frame__resizer:hover .nvb-preview-frame__resizer-grip,.nvb-preview-frame-shell--resizing .nvb-preview-frame__resizer-grip{background:color-mix(in oklab,var(--nvb-color-primary-500) 65%,transparent)}.nvb-preview-frame[data-device=mobile]{border-radius:22px}.nvb-preview-frame[data-device=mobile] .nvb-preview-form-toolbar{width:100%;align-items:stretch}.nvb-preview-frame[data-device=mobile] .nvb-preview-toolbar__group{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nvb-preview-frame[data-device=mobile] .nvb-preview-toolbar__button{width:100%;min-width:0}.nvb-preview-frame[data-device=mobile] .nvb-preview-toolbar__group .nvb-preview-toolbar__button:only-child{grid-column:1/-1}.nvb-preview-dialog-shell{position:fixed;inset:0;z-index:2147483000;width:auto;height:auto;max-width:none;max-height:none;margin:0;border:0;padding:24px;display:flex;justify-content:center;align-items:center;color:inherit;background-color:#0f172a5c;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);overflow:auto;overscroll-behavior:contain}.nvb-preview-dialog-shell--draggable{background-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;pointer-events:none;overflow:visible}.nvb-preview-dialog-shell--draggable .nvb-preview-dialog{pointer-events:auto}.nvb-preview-dialog--draggable .nvb-preview-dialog__header{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.nvb-preview-dialog--dragging .nvb-preview-dialog__header{cursor:grabbing}.nvb-preview-dialog{--nvb-floating-overlay-z-index: 2147483010;--nvb-page-margin-bottom: 0px;position:relative;display:flex;flex-direction:column;border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-dialog-radius);background:var(--nvb-color-neutral-000);box-shadow:var(--nvb-shadow-16);overflow:hidden;max-height:min(90vh,100vh - 48px);min-height:0;outline:0}.nvb-preview-dialog__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 24px 12px;border-bottom:1px solid var(--nvb-color-neutral-200);background:var(--nvb-color-neutral-000);flex-shrink:0}.nvb-preview-dialog__heading{min-width:0}.nvb-preview-dialog__title{margin:0;color:var(--nvb-color-neutral-900);font-size:16px;font-weight:600;line-height:22px}.nvb-preview-dialog__description{margin:4px 0 0;color:var(--nvb-color-neutral-600);font-size:13px;line-height:18px}.nvb-preview-dialog__close{width:32px;height:32px;min-height:32px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-700);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;padding:0;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.nvb-preview-dialog__close:hover{background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900)}.nvb-preview-dialog__close:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-preview-dialog__close nvb-icon{width:16px;height:16px}.nvb-preview-dialog__body{width:100%;min-height:0;display:flex;flex:1 1 auto;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable both-edges}.nvb-preview-root--runtime .nvb-preview-dialog{max-height:min(90vh,100vh - 48px)}.nvb-preview-root--runtime .nvb-preview-dialog__body{overflow-x:hidden;overflow-y:auto}.nvb-preview-dialog__footer{flex-shrink:0;padding:16px 24px 24px;border-top:1px solid var(--nvb-color-neutral-200);background:var(--nvb-color-neutral-000)}.nvb-preview-dialog__footer-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.nvb-preview-dialog__footer-actions--left{justify-content:flex-start}.nvb-preview-dialog__footer-actions--center{justify-content:center}.nvb-preview-dialog__footer-actions--right{justify-content:flex-end}.nvb-preview-dialog-action{min-height:var(--nvb-preview-btn-height);padding:0 12px;border-radius:var(--nvb-preview-btn-radius);border:1px solid var(--nvb-color-neutral-300);background:transparent;color:var(--nvb-color-neutral-700);display:inline-flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;font-size:var(--nvb-preview-btn-font-size);font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif));transition:border-color .14s ease,background-color .14s ease,color .14s ease}.nvb-preview-dialog-action nvb-icon{width:16px;height:16px}.nvb-preview-dialog-action--icon-only{min-width:var(--nvb-preview-btn-height);padding:0}.nvb-preview-dialog-action--filled.nvb-preview-dialog-action--primary{border-color:var(--nvb-color-primary-500);background:var(--nvb-color-primary-500);color:var(--nvb-color-neutral-000)}.nvb-preview-dialog-action--filled.nvb-preview-dialog-action--risk{border-color:var(--nvb-color-risk-500);background:var(--nvb-color-risk-500);color:var(--nvb-color-neutral-000)}.nvb-preview-dialog-action--filled.nvb-preview-dialog-action--neutral{border-color:var(--nvb-color-neutral-700);background:var(--nvb-color-neutral-700);color:var(--nvb-color-neutral-000)}.nvb-preview-dialog-action--outlined.nvb-preview-dialog-action--primary{border-color:var(--nvb-color-primary-500);color:var(--nvb-color-primary-700);background:transparent}.nvb-preview-dialog-action--outlined.nvb-preview-dialog-action--risk{border-color:var(--nvb-color-risk-500);color:var(--nvb-color-risk-700);background:transparent}.nvb-preview-dialog-action--outlined.nvb-preview-dialog-action--neutral{border-color:var(--nvb-color-neutral-300);color:var(--nvb-color-neutral-700);background:transparent}.nvb-preview-dialog-action--text{border-color:transparent;background:transparent;padding-inline:8px}.nvb-preview-dialog-action--text.nvb-preview-dialog-action--primary{color:var(--nvb-color-primary-700)}.nvb-preview-dialog-action--text.nvb-preview-dialog-action--risk{color:var(--nvb-color-risk-700)}.nvb-preview-dialog-action--text.nvb-preview-dialog-action--neutral{color:var(--nvb-color-neutral-700)}.nvb-preview-dialog-action:not(:disabled):hover{background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);filter:none}.nvb-preview-dialog-action:disabled{opacity:.6;cursor:not-allowed}.nvb-preview-dialog__open{border:1px solid var(--nvb-color-primary-500);border-radius:var(--nvb-preview-btn-radius);background:var(--nvb-color-primary-500);color:var(--nvb-color-neutral-000);min-height:var(--nvb-preview-btn-height);padding:0 14px;cursor:pointer;margin-top:6px;font-size:var(--nvb-preview-btn-font-size);font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif))}.nvb-view{display:flex;justify-content:flex-start;align-items:stretch;flex-direction:column;gap:10px;width:100%;min-height:100%}.nvb-view--dialog{padding:0}.nvb-preview-form-shell--dialog{height:auto;min-height:0}.nvb-preview-form-body--dialog{flex:1 1 auto;min-height:0;overflow:visible;overscroll-behavior:contain}.nvb-row{display:flex;flex-wrap:wrap;width:100%;position:relative;align-items:flex-start;gap:var(--nvb-form-element-spacing, 10px)}.nvb-row+.nvb-row{margin-top:var(--nvb-form-element-spacing, 10px)}.nvb-column{min-width:0;max-width:100%;box-sizing:border-box;position:relative;gap:10px}.nvb-column--hidden{display:none}.nvb-preview-result{border:1px solid var(--nvb-card-border-color, var(--nvb-color-neutral-200));border-radius:var(--nvb-card-radius, var(--nvb-radius-sm));background:var(--nvb-card-bg, var(--nvb-color-neutral-000));box-shadow:var(--nvb-card-shadow);padding:10px;min-height:0}.nvb-preview-result h4{margin:0 0 8px;color:var(--nvb-color-neutral-700)}.nvb-preview-result pre{margin:0;max-height:260px;overflow:auto;background:var(--nvb-color-neutral-000);border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-md);padding:8px;color:var(--nvb-color-neutral-700)}@media(max-width:1100px){.nvb-preview-header{grid-template-columns:1fr;justify-items:stretch}.nvb-preview-header__side,.nvb-preview-header__side--end,.nvb-preview-header__center{justify-content:center}.nvb-preview-toolbar__select--compact{width:min(100%,320px)}.nvb-preview-validation-panel{top:8px;left:8px;width:min(340px,100% - 16px);max-height:calc(100% - 16px)}.nvb-preview-stage--with-toc{grid-template-columns:1fr}.nvb-preview-toc{width:100%;max-height:170px}.nvb-preview-dialog-shell--open{padding:12px}.nvb-preview-dialog-shell--open .nvb-preview-dialog{max-height:calc(100vh - 24px)}}@media(max-width:767px){.nvb-preview-dialog-shell--open{inset:0;padding:0;min-height:100dvh;align-items:stretch}.nvb-preview-dialog-shell--open .nvb-preview-dialog{width:100vw!important;max-width:100vw!important;min-height:100dvh;max-height:100dvh;border:none;border-radius:0;box-shadow:none}.nvb-preview-dialog--draggable{transform:none!important}.nvb-preview-dialog--draggable .nvb-preview-dialog__header{cursor:default}.nvb-preview-dialog-shell--open .nvb-preview-dialog__header,.nvb-preview-dialog-shell--open .nvb-preview-dialog__body,.nvb-preview-dialog-shell--open .nvb-preview-dialog__footer,.nvb-preview-dialog-shell--open .nvb-preview-form-shell--dialog,.nvb-preview-dialog-shell--open .nvb-preview-form-body--dialog,.nvb-preview-dialog-shell--open .nvb-view--dialog{border-radius:0}}\n'],dependencies:[{kind:"component",type:He,selector:"nvb-select",inputs:["value","disabled","required","filterable","filterThreshold","allowCustomValue","placeholder","testId"],outputs:["valueChange","change","focus","blur"]},{kind:"directive",type:F,selector:"[ngTemplateOutlet]",inputs:["ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector"]},{kind:"directive",type:K,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:B,selector:"[ngStyle]",inputs:["ngStyle"]},{kind:"component",type:$,selector:"nvb-icon",inputs:["name","svg","ariaLabel"]},{kind:"component",type:le,selector:"runtime-container-outlet",inputs:["model","column","pageRows","pageIsEmpty","isMobileView","rowsTemplate","projectedContext"]},{kind:"component",type:ot,selector:"runtime-content-header",inputs:["model"]},{kind:"component",type:J,selector:"runtime-lazy-element-outlet",inputs:["model"]},{kind:"pipe",type:V,name:"uiT"},{kind:"pipe",type:I,name:"dynamicText"}],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:se,decorators:[{type:A,args:[{selector:"runtime-preview",changeDetection:E.OnPush,imports:[He,F,K,B,$,le,ot,J,V,I],template:"<section\n class=\"nvb-preview-root\"\n [ngClass]=\"{\n 'nvb-preview-root--runtime': isRuntimeMode(),\n 'nvb-preview-root--export-all-pages': renderAllVisiblePages(),\n 'nvb-preview-root--no-padding': removeContentPadding(),\n 'nvb-preview-root--canvas': isCanvasMode(),\n }\"\n [style.--nvb-preview-shell-inset]=\"resolveContentPadding()\"\n data-testid=\"preview-root\"\n>\n @if (!isRuntimeMode()) {\n <header class=\"nvb-preview-header\" data-testid=\"preview-toolbar\">\n <div class=\"nvb-preview-header__side\">\n <nvb-select\n class=\"nvb-preview-toolbar__select nvb-preview-toolbar__select--compact\"\n [value]=\"currentPageIndex()\"\n (change)=\"onCurrentPageSelectEvent($event)\"\n data-testid=\"preview-page-select-header\"\n [disabled]=\"pagesCount() === 0\"\n [attr.aria-label]=\"'preview.page.select' | uiT: 'Preview page'\"\n >\n @for (entry of visiblePageEntries(); track entry.page.name; let i = $index) {\n <option [value]=\"i\">\n {{ visiblePageLabel(entry, i) | dynamicText: getElement(entry.page.name) }}\n </option>\n }\n </nvb-select>\n </div>\n\n <div class=\"nvb-preview-header__center\">\n <div\n class=\"nvb-preview-device-switch\"\n role=\"group\"\n [attr.aria-label]=\"'preview.device.group' | uiT: 'Preview device'\"\n >\n <button\n type=\"button\"\n class=\"nvb-preview-device-switch__button\"\n [class.nvb-preview-device-switch__button--active]=\"deviceMode() === 'desktop'\"\n (click)=\"setDeviceMode('desktop')\"\n data-testid=\"preview-device-desktop\"\n [attr.aria-label]=\"'preview.device.desktop' | uiT: 'Desktop'\"\n [attr.title]=\"'preview.device.desktop' | uiT: 'Desktop'\"\n >\n <nvb-icon [svg]=\"desktopDeviceIconSvg\"></nvb-icon>\n </button>\n <button\n type=\"button\"\n class=\"nvb-preview-device-switch__button\"\n [class.nvb-preview-device-switch__button--active]=\"deviceMode() === 'tablet'\"\n (click)=\"setDeviceMode('tablet')\"\n data-testid=\"preview-device-tablet\"\n [attr.aria-label]=\"'preview.device.tablet' | uiT: 'Tablet'\"\n [attr.title]=\"'preview.device.tablet' | uiT: 'Tablet'\"\n >\n <nvb-icon [svg]=\"tabletDeviceIconSvg\"></nvb-icon>\n </button>\n <button\n type=\"button\"\n class=\"nvb-preview-device-switch__button\"\n [class.nvb-preview-device-switch__button--active]=\"deviceMode() === 'mobile'\"\n (click)=\"setDeviceMode('mobile')\"\n data-testid=\"preview-device-mobile\"\n [attr.aria-label]=\"'preview.device.mobile' | uiT: 'Mobile'\"\n [attr.title]=\"'preview.device.mobile' | uiT: 'Mobile'\"\n >\n <nvb-icon [svg]=\"mobileDeviceIconSvg\"></nvb-icon>\n </button>\n </div>\n\n <span class=\"nvb-preview-header__width\" data-testid=\"preview-frame-width\">\n {{ currentFrameWidthLabel() }}\n </span>\n </div>\n\n <div class=\"nvb-preview-header__side nvb-preview-header__side--end\">\n <nvb-select\n class=\"nvb-preview-toolbar__select nvb-preview-toolbar__select--compact\"\n [value]=\"selectedLanguage()\"\n (change)=\"onLanguageSelectEvent($event)\"\n data-testid=\"preview-language-select\"\n [disabled]=\"languages().length <= 1\"\n [attr.aria-label]=\"'preview.language.select' | uiT: 'Preview language'\"\n >\n @for (language of languages(); track language) {\n <option [value]=\"language\">{{ language }}</option>\n }\n </nvb-select>\n </div>\n </header>\n }\n\n <div\n class=\"nvb-preview-stage\"\n [ngClass]=\"{\n 'nvb-preview-stage--with-toc': showToc(),\n 'nvb-preview-stage--with-validation-panel': showValidationPanel(),\n }\"\n data-testid=\"preview-stage\"\n >\n @if (showValidationPanel()) {\n <aside class=\"nvb-preview-validation-panel\" data-testid=\"preview-validation-panel\">\n <header class=\"nvb-preview-validation-panel__header\">\n <h4 class=\"nvb-preview-validation-panel__title\">\n {{ 'preview.validation.panel.title' | uiT: 'Validation issues' }}\n </h4>\n <button\n type=\"button\"\n class=\"nvb-preview-validation-panel__close\"\n (click)=\"closeValidationPanel()\"\n [attr.aria-label]=\"'preview.validation.panel.close' | uiT: 'Close validation panel'\"\n data-testid=\"preview-validation-panel-close\"\n >\n <nvb-icon name=\"close\"></nvb-icon>\n </button>\n </header>\n\n <div class=\"nvb-preview-validation-panel__body\">\n @for (\n group of validationIssuePageGroups();\n track group.pageName + '-' + group.sourceIndex\n ) {\n <section class=\"nvb-preview-validation-group\">\n <h5 class=\"nvb-preview-validation-group__title\">\n {{ group.sourceIndex + 1 }}. {{ group.pageName }}\n <span class=\"nvb-preview-validation-group__meta\">({{ group.totalErrors }})</span>\n </h5>\n\n <ul class=\"nvb-preview-validation-group__list\">\n @for (issue of group.issues; track issue.dataPath + '-' + issue.elementName) {\n <li>\n <button\n type=\"button\"\n class=\"nvb-preview-validation-issue\"\n (click)=\"onValidationIssueClick(issue)\"\n [attr.title]=\"issue.errors.join('\\n')\"\n [attr.data-testid]=\"\n 'preview-validation-issue-' + (issue.dataPath || issue.elementName)\n \"\n >\n <span class=\"nvb-preview-validation-issue__name\">\n {{ issue.elementLabel || issue.elementName || issue.dataPath }}\n </span>\n <span class=\"nvb-preview-validation-issue__count\">{{ issue.errors.length }}</span>\n </button>\n </li>\n }\n </ul>\n </section>\n }\n </div>\n </aside>\n }\n\n @if (showToc()) {\n <aside class=\"nvb-preview-toc\" data-testid=\"preview-toc\">\n <h4 class=\"nvb-preview-toc__title\">{{ 'preview.toc.title' | uiT: 'Pages' }}</h4>\n <div class=\"nvb-preview-toc__list\">\n @for (entry of visiblePageEntries(); track entry.page.name; let i = $index) {\n <button\n type=\"button\"\n class=\"nvb-preview-toc__item\"\n [class.nvb-preview-toc__item--active]=\"currentPageIndex() === i\"\n [disabled]=\"isStepLocked(i)\"\n (click)=\"onTocPageClick(i)\"\n [attr.data-testid]=\"'preview-toc-item-' + i\"\n >\n <span class=\"nvb-preview-toc__name\">\n {{ visiblePageLabel(entry, i) | dynamicText: getElement(entry.page.name) }}\n </span>\n </button>\n }\n </div>\n </aside>\n }\n\n <div class=\"nvb-preview-stage__content\" #previewContentHost>\n <div\n class=\"nvb-preview-frame-shell\"\n #previewFrameShell\n [class.nvb-preview-frame-shell--resizing]=\"isFrameResizing()\"\n [class.nvb-preview-frame-shell--runtime]=\"isRuntimeMode()\"\n [style.width]=\"resolvedFrameWidthStyle()\"\n >\n <div class=\"nvb-preview-frame\" [attr.data-device]=\"deviceMode()\" data-testid=\"preview-frame\">\n @if (isDialogMode()) {\n @if (dialogOpen() || dialogClosing()) {\n <div\n class=\"nvb-preview-dialog-shell nvb-preview-dialog-shell--open\"\n #previewDialogShell\n [class.nvb-preview-dialog-shell--closing]=\"dialogClosing()\"\n [class.nvb-preview-dialog-shell--draggable]=\"isDialogDraggable()\"\n role=\"dialog\"\n aria-labelledby=\"preview-dialog-title\"\n [attr.aria-describedby]=\"dialogDescription() ? 'preview-dialog-description' : null\"\n >\n <section\n class=\"nvb-preview-dialog\"\n [class.nvb-preview-dialog--draggable]=\"isDialogDraggable()\"\n [class.nvb-preview-dialog--dragging]=\"isDialogDragging()\"\n [style.width]=\"dialogWidthStyle()\"\n [style.max-width]=\"dialogMaxWidthStyle()\"\n [style.max-height]=\"dialogMaxHeightStyle()\"\n [style.font-size]=\"dialogFontSizeStyle()\"\n [style.transform]=\"dialogDragTransform()\"\n >\n <header class=\"nvb-preview-dialog__header\" (pointerdown)=\"onDialogDragStart($event)\">\n <div class=\"nvb-preview-dialog__heading\">\n <div class=\"nvb-preview-dialog__title\" id=\"preview-dialog-title\">\n {{ dialogTitle() }}\n </div>\n @if (dialogDescription()) {\n <p class=\"nvb-preview-dialog__description\" id=\"preview-dialog-description\">\n {{ dialogDescription() }}\n </p>\n }\n </div>\n\n @if (showDialogCloseButton()) {\n <button\n type=\"button\"\n class=\"nvb-preview-dialog__close\"\n data-testid=\"preview-dialog-close\"\n (click)=\"onDialogCloseClick()\"\n [attr.aria-label]=\"'preview.dialog.close' | uiT: 'Close dialog'\"\n >\n <nvb-icon name=\"close\"></nvb-icon>\n </button>\n }\n </header>\n\n <div class=\"nvb-preview-dialog__body\">\n <ng-container\n *ngTemplateOutlet=\"formShellTemplate; context: { dialogMode: true }\"\n ></ng-container>\n </div>\n\n @if (hasDialogFooterActions()) {\n <footer class=\"nvb-preview-dialog__footer\">\n <div\n class=\"nvb-preview-dialog__footer-actions\"\n [ngClass]=\"'nvb-preview-dialog__footer-actions--' + dialogFooterActionsAlign()\"\n >\n @for (\n action of dialogFooterActions();\n track action.id || $index;\n let i = $index\n ) {\n <button\n type=\"button\"\n class=\"nvb-preview-dialog-action\"\n [ngClass]=\"dialogFooterActionClasses(action)\"\n (click)=\"onDialogFooterActionClick(action)\"\n [attr.data-testid]=\"'preview-dialog-footer-action-' + i\"\n [attr.aria-label]=\"dialogFooterActionLabel(action, i)\"\n [attr.title]=\"dialogFooterActionLabel(action, i)\"\n >\n @if (dialogFooterActionIcon(action)) {\n <nvb-icon [name]=\"dialogFooterActionIcon(action)\"></nvb-icon>\n }\n @if (action.label) {\n <span>{{ action.label }}</span>\n }\n </button>\n }\n </div>\n </footer>\n }\n </section>\n </div>\n }\n @if (!dialogOpen() && !dialogClosing() && !isRuntimeMode()) {\n <button\n type=\"button\"\n class=\"nvb-preview-dialog__open\"\n data-testid=\"preview-dialog-open\"\n (click)=\"reopenDialog()\"\n >\n {{ 'preview.dialog.open' | uiT: 'Open form' }}\n </button>\n }\n } @else {\n <ng-container\n *ngTemplateOutlet=\"formShellTemplate; context: { dialogMode: false }\"\n ></ng-container>\n }\n </div>\n\n @if (!isRuntimeMode()) {\n <button\n type=\"button\"\n class=\"nvb-preview-frame__resizer\"\n (mousedown)=\"onFrameResizeMouseDown($event)\"\n (dblclick)=\"resetFrameWidth()\"\n [attr.title]=\"'preview.resize' | uiT: 'Resize preview width'\"\n [attr.aria-label]=\"'preview.resize' | uiT: 'Resize preview width'\"\n data-testid=\"preview-frame-resizer\"\n >\n <span class=\"nvb-preview-frame__resizer-grip\"></span>\n </button>\n }\n </div>\n </div>\n </div>\n\n @if (!isRuntimeMode() && submittedJson()) {\n <section class=\"nvb-preview-result\" data-testid=\"preview-submit-json\">\n <h4>{{ 'preview.result' | uiT: 'Pateikimo JSON' }}</h4>\n <pre>{{ submittedJson() }}</pre>\n </section>\n }\n</section>\n\n<ng-template #formShellTemplate let-dialogMode=\"dialogMode\">\n <div class=\"nvb-preview-form-shell\" [class.nvb-preview-form-shell--dialog]=\"dialogMode\">\n <ng-container\n *ngTemplateOutlet=\"formChromeTemplate; context: { placement: 'top' }\"\n ></ng-container>\n\n <div\n class=\"nvb-preview-form-body\"\n [class.nvb-preview-form-body--dialog]=\"dialogMode\"\n [style.padding]=\"dialogMode ? dialogPaddingStyle() : null\"\n >\n <div\n class=\"nvb-view\"\n [class.nvb-view--dialog]=\"dialogMode\"\n [style.--nvb-form-element-spacing]=\"isCanvasMode() ? '0px' : resolveElementSpacing()\"\n [style.--nvb-section-element-spacing]=\"resolveElementSpacing()\"\n >\n @if (!dialogMode && !isCanvasMode() && headerModel() && hasVisibleHeader()) {\n <runtime-content-header [model]=\"headerModel()\"></runtime-content-header>\n }\n\n <main style=\"width: 100%\">\n @for (page of visiblePages(); track page.name; let i = $index; let isLast = $last) {\n @let pageElement = getElement(page.name);\n <div\n class=\"nvb-preview-page-render\"\n [class.nvb-preview-page-render--export-break]=\"renderAllVisiblePages() && !isLast\"\n [attr.data-preview-page-index]=\"i\"\n >\n <runtime-container-outlet\n [model]=\"pageElement\"\n [pageIsEmpty]=\"page.rows.length > 0\"\n [pageRows]=\"page.rows\"\n [isMobileView]=\"deviceMode() === 'mobile'\"\n [rowsTemplate]=\"rowsTemplate\"\n [projectedContext]=\"{ rows: page.rows, parentElement: pageElement }\"\n ></runtime-container-outlet>\n </div>\n }\n </main>\n </div>\n </div>\n\n <ng-container\n *ngTemplateOutlet=\"formChromeTemplate; context: { placement: 'bottom' }\"\n ></ng-container>\n </div>\n</ng-template>\n\n<ng-template #formChromeTemplate let-placement=\"placement\">\n @if (hasFormChromeAt(placement)) {\n <section\n class=\"nvb-preview-form-chrome\"\n [ngClass]=\"{ 'nvb-preview-form-chrome--bottom': placement === 'bottom' }\"\n [attr.data-testid]=\"'preview-form-chrome-' + placement\"\n >\n @if (showStepperAt(placement)) {\n <nav\n class=\"nvb-preview-steps nvb-preview-steps--embedded\"\n [attr.aria-label]=\"'preview.steps' | uiT: 'Page steps'\"\n [attr.data-testid]=\"'preview-steps-' + placement\"\n >\n <ol class=\"nvb-preview-steps__list\">\n @for (\n entry of visiblePageEntries();\n track entry.page.name;\n let i = $index;\n let isLast = $last\n ) {\n <li\n class=\"nvb-preview-steps__item\"\n [ngClass]=\"{\n 'nvb-preview-steps__item--current': isStepCurrent(i),\n 'nvb-preview-steps__item--done': isStepCompleted(i),\n 'nvb-preview-steps__item--locked': isStepLocked(i),\n }\"\n >\n <button\n type=\"button\"\n class=\"nvb-preview-step\"\n [disabled]=\"isStepLocked(i)\"\n (click)=\"onStepClick(i)\"\n [attr.data-testid]=\"'preview-step-' + placement + '-' + i\"\n >\n <span class=\"nvb-preview-step__marker\">{{ i + 1 }}</span>\n <span class=\"nvb-preview-step__body\">\n <span class=\"nvb-preview-step__label\">\n {{ visiblePageLabel(entry, i) | dynamicText: getElement(entry.page.name) }}\n </span>\n @if (visiblePageStepDescription(entry, i); as description) {\n <span class=\"nvb-preview-step__value\">\n {{ description | dynamicText: getElement(entry.page.name) }}\n </span>\n }\n </span>\n </button>\n\n @if (!isLast) {\n <span class=\"nvb-preview-step__connector\" aria-hidden=\"true\"></span>\n }\n </li>\n }\n </ol>\n </nav>\n }\n\n @if (showPaginationAt(placement) || showActionsAt(placement)) {\n <div\n class=\"nvb-preview-form-toolbar\"\n [class.nvb-preview-form-toolbar--actions-only]=\"\n showActionsAt(placement) && !showPaginationAt(placement)\n \"\n >\n @if (showPaginationAt(placement)) {\n <div class=\"nvb-preview-toolbar__group\">\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button\"\n (click)=\"previousPage()\"\n [disabled]=\"pagesCount() === 0 || currentPageIndex() === 0\"\n [attr.data-testid]=\"'preview-page-prev-' + placement\"\n [attr.aria-label]=\"'preview.prev.aria' | uiT: 'Previous page'\"\n >\n {{ 'preview.prev' | uiT: 'Prev' }}\n </button>\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button\"\n (click)=\"nextPage()\"\n [disabled]=\"pagesCount() === 0 || currentPageIndex() >= pagesCount() - 1\"\n [attr.data-testid]=\"'preview-page-next-' + placement\"\n [attr.aria-label]=\"'preview.next.aria' | uiT: 'Next page'\"\n >\n {{ 'preview.next' | uiT: 'Next' }}\n </button>\n </div>\n }\n\n @if (showActionsAt(placement)) {\n <div class=\"nvb-preview-toolbar__group\">\n @if (showValidateActionButton()) {\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button\"\n (click)=\"validate()\"\n [attr.data-testid]=\"'preview-validate-' + placement\"\n [attr.aria-label]=\"'preview.validate.aria' | uiT: 'Validate page'\"\n >\n {{ 'preview.validate' | uiT: 'Validuoti' }}\n </button>\n }\n @if (showSubmitActionButton()) {\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button nvb-preview-toolbar__button--primary\"\n (click)=\"submit()\"\n [attr.data-testid]=\"'preview-submit-' + placement\"\n [attr.aria-label]=\"'preview.submit.aria' | uiT: 'Submit page'\"\n >\n {{ 'preview.submit' | uiT: 'Pateikti' }}\n </button>\n }\n @for (\n action of customActionsAt(placement);\n track action.id || $index;\n let i = $index\n ) {\n <button\n type=\"button\"\n class=\"nvb-preview-toolbar__button\"\n [ngClass]=\"chromeActionClasses(action)\"\n (click)=\"onChromeActionClick(action)\"\n [attr.data-testid]=\"'preview-custom-action-' + placement + '-' + i\"\n [attr.aria-label]=\"dialogFooterActionLabel(action, i)\"\n [attr.title]=\"dialogFooterActionLabel(action, i)\"\n >\n @if (dialogFooterActionIcon(action)) {\n <nvb-icon [name]=\"dialogFooterActionIcon(action)\"></nvb-icon>\n }\n <span>{{ dialogFooterActionLabel(action, i) }}</span>\n </button>\n }\n </div>\n }\n </div>\n }\n </section>\n }\n</ng-template>\n\n<ng-template #rowsTemplate let-rows=\"rows\" let-parentElement=\"parentElement\">\n @for (row of rows; track $index) {\n <div class=\"nvb-row\" [ngStyle]=\"resolveRowStyle(parentElement)\">\n @for (column of row.columns; track column.elementRef) {\n @let element = getElement(column.elementRef);\n\n @if (element) {\n <div\n class=\"nvb-column\"\n [ngClass]=\"{ 'nvb-column--hidden': element.hidden }\"\n [ngStyle]=\"resolveColumnStyle(parentElement, element)\"\n >\n @if (isContainerElement(element.type)) {\n <runtime-container-outlet\n [model]=\"element\"\n [column]=\"column\"\n [isMobileView]=\"deviceMode() === 'mobile'\"\n [rowsTemplate]=\"rowsTemplate\"\n [projectedContext]=\"{ rows: column.rows, parentElement: element }\"\n ></runtime-container-outlet>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"layoutTemplate; context: { $implicit: element }\"\n ></ng-container>\n }\n </div>\n }\n }\n </div>\n }\n</ng-template>\n\n<ng-template #layoutTemplate let-element>\n <runtime-lazy-element-outlet [model]=\"element\"></runtime-lazy-element-outlet>\n</ng-template>\n",styles:[':host{width:100%;height:100%;min-height:0;display:block}.nvb-preview-root{--nvb-preview-btn-height: var(--nvb-control-height);--nvb-preview-btn-font-size: var(--nvb-control-font-size);--nvb-preview-btn-radius: var(--nvb-control-radius);--nvb-preview-btn-padding-x: var(--nvb-control-padding-x);--nvb-preview-shell-inset: 12px;display:flex;flex-direction:column;gap:10px;height:100%;min-height:0;padding:10px;background:color-mix(in oklab,var(--nvb-color-neutral-050) 84%,white)}.nvb-preview-root--runtime{--nvb-preview-shell-inset: 14px;padding:0;background:transparent}.nvb-preview-root--no-padding{--nvb-preview-shell-inset: 0px;padding:0}.nvb-preview-root--export-all-pages{height:auto;min-height:0}.nvb-preview-root--canvas{--nvb-preview-shell-inset: 0px;--nvb-page-padding: 0px;--nvb-page-gap: 0px;--nvb-page-margin-bottom: 0px;--nvb-page-radius: 0px;--nvb-page-surface: transparent;--nvb-page-border-color: transparent;--nvb-page-header-display: none;--nvb-page-content-padding: 0px;padding:0}.nvb-preview-root--canvas .nvb-preview-frame,.nvb-preview-root--canvas .nvb-preview-stage--with-toc .nvb-preview-frame{border:0;border-radius:0;box-shadow:none}.nvb-preview-root--canvas.nvb-preview-root--runtime .nvb-preview-frame{background:transparent}.nvb-preview-header{--nvb-preview-btn-height: 32px;--nvb-preview-btn-font-size: 12px;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:12px;border:1px solid var(--nvb-card-border-color, var(--nvb-color-neutral-200));border-radius:var(--nvb-card-radius, var(--nvb-radius-sm));box-shadow:var(--nvb-card-shadow);padding:6px 12px;background:var(--nvb-card-bg, var(--nvb-color-neutral-000))}.nvb-preview-header__side{min-width:0;display:flex;align-items:center}.nvb-preview-header__side--end{justify-content:flex-end}.nvb-preview-header__center{min-width:0;display:inline-flex;align-items:center;justify-content:center;gap:10px}.nvb-preview-header__width{color:var(--nvb-color-neutral-600);font-size:12px;font-weight:600;line-height:1;white-space:nowrap}.nvb-preview-device-switch{display:inline-flex;align-items:center;gap:2px;padding:3px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-md);background:color-mix(in oklab,var(--nvb-color-neutral-050) 82%,var(--nvb-color-neutral-000))}.nvb-preview-device-switch__button{width:30px;height:24px;border:1px solid transparent;border-radius:calc(var(--nvb-radius-md) - 1px);background:transparent;color:var(--nvb-color-neutral-600);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;transition:border-color .14s ease,background-color .14s ease,color .14s ease}.nvb-preview-device-switch__button nvb-icon{width:16px;height:16px}.nvb-preview-device-switch__button:not(:disabled):hover{color:var(--nvb-color-primary-700);background:var(--nvb-color-primary-050)}.nvb-preview-device-switch__button--active{border-color:var(--nvb-color-primary-500);background:var(--nvb-color-primary-050);color:var(--nvb-color-primary-700)}.nvb-preview-toolbar__group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.nvb-preview-toolbar__button{box-sizing:border-box;border:1px solid var(--nvb-button-border-color, var(--nvb-color-neutral-300));border-radius:var(--nvb-button-radius, var(--nvb-preview-btn-radius));min-height:var(--nvb-button-height-sm, 32px);padding:var(--nvb-button-padding-sm, 0 10px);background:var(--nvb-button-bg, var(--nvb-color-neutral-000));color:var(--nvb-button-text-color, var(--nvb-color-neutral-700));cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--nvb-button-gap, 6px);font-size:var(--nvb-button-font-size-sm, var(--nvb-preview-btn-font-size));font-weight:600;line-height:20px;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif));white-space:nowrap;transition:background-color .2s ease,border-color .2s ease,color .2s ease,opacity .2s ease,box-shadow .2s ease}.nvb-preview-toolbar__button:not(:disabled):hover{border-color:var(--nvb-color-neutral-400);background:var(--nvb-button-hover-bg, var(--nvb-color-primary-050));color:var(--nvb-color-neutral-900)}.nvb-preview-toolbar__button:disabled{opacity:.6;cursor:not-allowed}.nvb-preview-toolbar__button--active{border-color:var(--nvb-color-primary-500);color:var(--nvb-color-primary-700);background:var(--nvb-color-primary-050)}.nvb-preview-toolbar__button--primary{border-color:var(--nvb-button-primary-bg, var(--nvb-color-primary-600));background:var(--nvb-button-primary-bg, var(--nvb-color-primary-600));color:var(--nvb-color-neutral-000)}.nvb-preview-toolbar__button--primary:not(:disabled):hover{border-color:var(--nvb-button-primary-hover-bg, var(--nvb-color-primary-700));background:var(--nvb-button-primary-hover-bg, var(--nvb-color-primary-700));color:var(--nvb-color-neutral-000)}.nvb-preview-toolbar__label{color:var(--nvb-color-neutral-700);font-size:13px;font-weight:600}.nvb-preview-toolbar__select{border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-preview-btn-radius);min-height:var(--nvb-preview-btn-height);padding:0 10px;background:color-mix(in oklab,var(--nvb-color-neutral-050) 82%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-700);font-size:var(--nvb-preview-btn-font-size);font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif));min-width:78px}.nvb-preview-toolbar__select--compact{width:min(220px,100%);min-width:120px}.nvb-preview-validation{margin:0;color:var(--nvb-color-neutral-700);font-size:13px}.nvb-preview-validation--inline{padding:8px 10px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-sm);background:color-mix(in oklab,var(--nvb-color-neutral-050) 82%,var(--nvb-color-neutral-000))}.nvb-preview-steps{--nvb-preview-step-accent: var(--nvb-color-primary-600, #2563eb);--nvb-preview-step-surface: var(--nvb-color-neutral-000, #ffffff);--nvb-preview-step-border: color-mix( in oklab, var(--nvb-color-neutral-300, #d4d4d8) 82%, var(--nvb-color-neutral-000, #ffffff) );--nvb-preview-step-border-strong: color-mix( in oklab, var(--nvb-color-neutral-400, #a1a1aa) 84%, var(--nvb-color-neutral-000, #ffffff) );display:block;border:1px solid var(--nvb-preview-step-border);border-radius:var(--nvb-radius-xl);padding:14px 16px;background:var(--nvb-preview-step-surface)}.nvb-preview-steps__list{list-style:none;margin:-4px -4px 0;padding:4px 4px 0;display:flex;flex-direction:row;align-items:flex-start;flex-wrap:nowrap;gap:0;overflow-x:auto}.nvb-preview-steps__item{position:relative;flex:1 1 0;min-width:60px;display:flex;flex-direction:column;align-items:center}.nvb-preview-step{width:100%;border:0;background:transparent;color:var(--nvb-color-neutral-800, #27272a);min-height:auto;padding:0 8px 16px;display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer;text-align:center;font-size:14px;font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif));transition:color .16s ease,opacity .16s ease}.nvb-preview-steps__item:not(.nvb-preview-steps__item--done) .nvb-preview-step:hover:not(:disabled) .nvb-preview-step__marker{border-color:var(--nvb-preview-step-accent);color:var(--nvb-preview-step-accent)}.nvb-preview-step:focus-visible{outline:none}.nvb-preview-step:focus-visible .nvb-preview-step__marker{box-shadow:0 0 0 3px color-mix(in oklab,var(--nvb-preview-step-accent) 20%,transparent)}.nvb-preview-step__marker{width:34px;height:34px;border-radius:var(--nvb-radius-full);border:2px solid var(--nvb-preview-step-border-strong);background:var(--nvb-preview-step-surface);color:var(--nvb-color-neutral-500, #71717a);display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;line-height:1;position:relative;z-index:1;transition:border-color .16s ease,background-color .16s ease,color .16s ease,box-shadow .16s ease}.nvb-preview-step__body{min-width:0;display:flex;flex-direction:column;align-items:center;gap:4px;padding-top:0}.nvb-preview-step__label{font-size:13px;font-weight:600;color:var(--nvb-color-neutral-700, #3f3f46);text-align:center;line-height:1.4}.nvb-preview-step__value{font-size:12px;font-weight:400;color:var(--nvb-color-neutral-600, #52525b);text-align:center;line-height:1.4}.nvb-preview-step__connector{position:absolute;top:16px;left:50%;width:100%;height:2px;background:var(--nvb-preview-step-border);z-index:0;pointer-events:none;right:auto;border-radius:var(--nvb-radius-full)}.nvb-preview-steps__item--current .nvb-preview-step__marker{border-color:var(--nvb-preview-step-accent);color:var(--nvb-preview-step-accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--nvb-preview-step-accent) 14%,transparent)}.nvb-preview-steps__item--current .nvb-preview-step__label{color:var(--nvb-color-primary-700, #1d4ed8)}.nvb-preview-steps__item--done .nvb-preview-step__marker{border-color:var(--nvb-preview-step-accent);background:var(--nvb-preview-step-accent);color:var(--nvb-color-neutral-000, #ffffff)}.nvb-preview-steps__item--done .nvb-preview-step:hover:not(:disabled) .nvb-preview-step__marker,.nvb-preview-steps__item--done .nvb-preview-step:focus-visible .nvb-preview-step__marker{border-color:var(--nvb-preview-step-accent);background:var(--nvb-preview-step-accent);color:var(--nvb-color-neutral-000, #ffffff)}.nvb-preview-steps__item--done .nvb-preview-step__connector{background:color-mix(in oklab,var(--nvb-preview-step-accent) 35%,var(--nvb-preview-step-border))}.nvb-preview-steps__item--locked .nvb-preview-step__marker,.nvb-preview-step:disabled{opacity:.58;cursor:not-allowed}.nvb-preview-steps--embedded{width:100%}.nvb-preview-steps__item:last-child{min-width:60px}.nvb-preview-steps__item:last-child .nvb-preview-step__connector{display:none}.nvb-preview-stage{flex:1;min-height:0;overflow:hidden;position:relative;border:1px solid var(--nvb-card-border-color, var(--nvb-color-neutral-200));border-radius:var(--nvb-card-radius, var(--nvb-radius-sm));background-color:color-mix(in oklab,var(--nvb-color-neutral-050) 60%,var(--nvb-color-neutral-000));background-image:radial-gradient(var(--nvb-color-neutral-200) 1px,transparent 1px);background-size:16px 16px;display:flex;gap:12px;align-items:stretch;padding:12px}.nvb-preview-stage--with-toc{display:grid;grid-template-columns:auto minmax(0,1fr);gap:0;padding:0}.nvb-preview-stage--with-validation-panel,.nvb-preview-stage--with-validation-panel.nvb-preview-stage--with-toc{position:relative}.nvb-preview-stage__content{flex:1;min-height:0;min-width:0;display:flex;justify-content:center;align-items:stretch;overflow-x:auto;overflow-y:hidden;padding-right:6px}.nvb-preview-stage--with-toc .nvb-preview-stage__content{padding-right:0}.nvb-preview-validation-panel{position:absolute;top:10px;left:10px;width:min(340px,100% - 20px);max-height:calc(100% - 20px);z-index:2147483600;border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-dialog-radius);background:var(--nvb-color-neutral-000);box-shadow:0 18px 34px #0f172a29;min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr)}.nvb-preview-validation-panel__header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--nvb-color-neutral-200);background:var(--nvb-color-neutral-050)}.nvb-preview-validation-panel__title{margin:0;color:var(--nvb-color-neutral-700);font-size:13px;line-height:1.2}.nvb-preview-validation-panel__close{width:28px;height:28px;min-width:28px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-700);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0}.nvb-preview-validation-panel__close:hover{background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900)}.nvb-preview-validation-panel__body{min-height:0;overflow:auto;padding:10px;display:grid;gap:10px}.nvb-preview-validation-group{border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);padding:8px}.nvb-preview-validation-group__title{margin:0 0 8px;color:var(--nvb-color-neutral-700);font-size:12px;line-height:1.3}.nvb-preview-validation-group__meta{color:var(--nvb-color-neutral-500)}.nvb-preview-validation-group__list{margin:0;padding:0;list-style:none;display:grid;gap:6px}.nvb-preview-validation-issue{width:100%;border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-700);min-height:32px;padding:6px 8px;display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;cursor:pointer}.nvb-preview-validation-issue:hover{border-color:var(--nvb-color-neutral-400);background:var(--nvb-color-neutral-050)}.nvb-preview-validation-issue__name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1.2}.nvb-preview-validation-issue__count{flex-shrink:0;min-width:20px;min-height:20px;border-radius:var(--nvb-radius-full);background:var(--nvb-color-risk-100);color:var(--nvb-color-risk-700);display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.nvb-preview-frame-shell{position:relative;height:100%;min-height:0;min-width:0;max-width:100%;transition:box-shadow .14s ease}.nvb-preview-frame-shell--runtime{width:100%;height:100%}.nvb-preview-frame-shell--resizing{box-shadow:0 0 0 2px color-mix(in oklab,var(--nvb-color-primary-500) 45%,transparent)}.nvb-preview-toc{width:240px;max-width:100%;height:100%;max-height:100%;border:1px solid var(--nvb-color-neutral-300);border-radius:0;background:var(--nvb-color-neutral-000);padding:10px;display:grid;grid-template-rows:auto minmax(0,1fr);gap:8px;min-height:0;overflow:hidden}.nvb-preview-toc__title{margin:0;font-size:13px;color:var(--nvb-color-neutral-700)}.nvb-preview-toc__list{display:grid;gap:6px;overflow:auto;min-height:0;height:100%;align-content:start;overscroll-behavior:contain}.nvb-preview-toc__item{border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-md);background:color-mix(in oklab,var(--nvb-color-neutral-050) 82%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-700);min-height:var(--nvb-preview-btn-height);padding:0 8px;display:flex;align-items:center;gap:6px;cursor:pointer;text-align:left;font-size:var(--nvb-preview-btn-font-size);font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif))}.nvb-preview-toc__item--active{border-color:var(--nvb-color-primary-500);background:var(--nvb-color-primary-050);color:var(--nvb-color-primary-700)}.nvb-preview-toc__item:disabled{opacity:.6;cursor:not-allowed}.nvb-preview-toc__name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.nvb-preview-frame{width:100%;height:100%;min-height:0;display:flex;flex-direction:column;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-lg);background:var(--nvb-color-neutral-000);box-shadow:0 2px 10px #00000014;overflow:hidden}.nvb-preview-stage--with-toc .nvb-preview-frame{border-radius:0}.nvb-preview-form-shell{flex:1;width:100%;height:100%;min-height:0;display:flex;flex-direction:column}.nvb-preview-form-chrome{flex-shrink:0;display:grid;gap:8px;padding:10px var(--nvb-preview-shell-inset);border-bottom:1px solid var(--nvb-color-neutral-200);background:transparent}.nvb-preview-form-chrome--bottom{border-top:1px solid var(--nvb-color-neutral-200);border-bottom:none;background:transparent}.nvb-preview-form-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.nvb-preview-form-toolbar--actions-only{justify-content:flex-end}.nvb-preview-form-body{flex:1;min-height:0;overflow:auto;padding:var(--nvb-preview-shell-inset)}.nvb-preview-form-body--dialog{flex:1 1 auto;min-height:0;overflow:visible;overscroll-behavior:contain;padding:16px}.nvb-preview-root--runtime .nvb-preview-stage{padding:0;border:none;background:transparent;overflow:visible}.nvb-preview-root--runtime .nvb-preview-stage__content{padding-right:0;justify-content:center;overflow:visible}.nvb-preview-root--runtime .nvb-preview-frame{border-radius:0;border:none;box-shadow:none;background:transparent;overflow:visible}.nvb-preview-root--runtime .nvb-preview-frame-shell{height:auto;min-height:0}.nvb-preview-root--export-all-pages .nvb-preview-stage,.nvb-preview-root--export-all-pages .nvb-preview-stage__content,.nvb-preview-root--export-all-pages .nvb-preview-frame-shell,.nvb-preview-root--export-all-pages .nvb-preview-frame,.nvb-preview-root--export-all-pages .nvb-preview-form-shell,.nvb-preview-root--export-all-pages .nvb-preview-form-body,.nvb-preview-root--export-all-pages .nvb-view{height:auto;min-height:0;overflow:visible}.nvb-preview-root--export-all-pages .nvb-preview-stage__content{display:block}.nvb-preview-root--export-all-pages .nvb-preview-frame-shell,.nvb-preview-page-render{width:100%}.nvb-preview-page-render--export-break{break-after:page;page-break-after:always;margin-bottom:16px}.nvb-preview-frame__resizer{position:absolute;top:0;right:0;width:12px;height:100%;border:none;background:transparent;cursor:ew-resize;padding:0;z-index:3}.nvb-preview-frame__resizer-grip{position:absolute;top:50%;right:3px;transform:translateY(-50%);width:4px;height:46px;border-radius:var(--nvb-radius-full);background:color-mix(in oklab,var(--nvb-color-neutral-400) 70%,transparent);transition:background-color .14s ease}.nvb-preview-frame__resizer:hover .nvb-preview-frame__resizer-grip,.nvb-preview-frame-shell--resizing .nvb-preview-frame__resizer-grip{background:color-mix(in oklab,var(--nvb-color-primary-500) 65%,transparent)}.nvb-preview-frame[data-device=mobile]{border-radius:22px}.nvb-preview-frame[data-device=mobile] .nvb-preview-form-toolbar{width:100%;align-items:stretch}.nvb-preview-frame[data-device=mobile] .nvb-preview-toolbar__group{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.nvb-preview-frame[data-device=mobile] .nvb-preview-toolbar__button{width:100%;min-width:0}.nvb-preview-frame[data-device=mobile] .nvb-preview-toolbar__group .nvb-preview-toolbar__button:only-child{grid-column:1/-1}.nvb-preview-dialog-shell{position:fixed;inset:0;z-index:2147483000;width:auto;height:auto;max-width:none;max-height:none;margin:0;border:0;padding:24px;display:flex;justify-content:center;align-items:center;color:inherit;background-color:#0f172a5c;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);overflow:auto;overscroll-behavior:contain}.nvb-preview-dialog-shell--draggable{background-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;pointer-events:none;overflow:visible}.nvb-preview-dialog-shell--draggable .nvb-preview-dialog{pointer-events:auto}.nvb-preview-dialog--draggable .nvb-preview-dialog__header{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.nvb-preview-dialog--dragging .nvb-preview-dialog__header{cursor:grabbing}.nvb-preview-dialog{--nvb-floating-overlay-z-index: 2147483010;--nvb-page-margin-bottom: 0px;position:relative;display:flex;flex-direction:column;border:1px solid var(--nvb-color-neutral-200);border-radius:var(--nvb-dialog-radius);background:var(--nvb-color-neutral-000);box-shadow:var(--nvb-shadow-16);overflow:hidden;max-height:min(90vh,100vh - 48px);min-height:0;outline:0}.nvb-preview-dialog__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 24px 12px;border-bottom:1px solid var(--nvb-color-neutral-200);background:var(--nvb-color-neutral-000);flex-shrink:0}.nvb-preview-dialog__heading{min-width:0}.nvb-preview-dialog__title{margin:0;color:var(--nvb-color-neutral-900);font-size:16px;font-weight:600;line-height:22px}.nvb-preview-dialog__description{margin:4px 0 0;color:var(--nvb-color-neutral-600);font-size:13px;line-height:18px}.nvb-preview-dialog__close{width:32px;height:32px;min-height:32px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-700);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;padding:0;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.nvb-preview-dialog__close:hover{background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900)}.nvb-preview-dialog__close:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-preview-dialog__close nvb-icon{width:16px;height:16px}.nvb-preview-dialog__body{width:100%;min-height:0;display:flex;flex:1 1 auto;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable both-edges}.nvb-preview-root--runtime .nvb-preview-dialog{max-height:min(90vh,100vh - 48px)}.nvb-preview-root--runtime .nvb-preview-dialog__body{overflow-x:hidden;overflow-y:auto}.nvb-preview-dialog__footer{flex-shrink:0;padding:16px 24px 24px;border-top:1px solid var(--nvb-color-neutral-200);background:var(--nvb-color-neutral-000)}.nvb-preview-dialog__footer-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.nvb-preview-dialog__footer-actions--left{justify-content:flex-start}.nvb-preview-dialog__footer-actions--center{justify-content:center}.nvb-preview-dialog__footer-actions--right{justify-content:flex-end}.nvb-preview-dialog-action{min-height:var(--nvb-preview-btn-height);padding:0 12px;border-radius:var(--nvb-preview-btn-radius);border:1px solid var(--nvb-color-neutral-300);background:transparent;color:var(--nvb-color-neutral-700);display:inline-flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;font-size:var(--nvb-preview-btn-font-size);font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif));transition:border-color .14s ease,background-color .14s ease,color .14s ease}.nvb-preview-dialog-action nvb-icon{width:16px;height:16px}.nvb-preview-dialog-action--icon-only{min-width:var(--nvb-preview-btn-height);padding:0}.nvb-preview-dialog-action--filled.nvb-preview-dialog-action--primary{border-color:var(--nvb-color-primary-500);background:var(--nvb-color-primary-500);color:var(--nvb-color-neutral-000)}.nvb-preview-dialog-action--filled.nvb-preview-dialog-action--risk{border-color:var(--nvb-color-risk-500);background:var(--nvb-color-risk-500);color:var(--nvb-color-neutral-000)}.nvb-preview-dialog-action--filled.nvb-preview-dialog-action--neutral{border-color:var(--nvb-color-neutral-700);background:var(--nvb-color-neutral-700);color:var(--nvb-color-neutral-000)}.nvb-preview-dialog-action--outlined.nvb-preview-dialog-action--primary{border-color:var(--nvb-color-primary-500);color:var(--nvb-color-primary-700);background:transparent}.nvb-preview-dialog-action--outlined.nvb-preview-dialog-action--risk{border-color:var(--nvb-color-risk-500);color:var(--nvb-color-risk-700);background:transparent}.nvb-preview-dialog-action--outlined.nvb-preview-dialog-action--neutral{border-color:var(--nvb-color-neutral-300);color:var(--nvb-color-neutral-700);background:transparent}.nvb-preview-dialog-action--text{border-color:transparent;background:transparent;padding-inline:8px}.nvb-preview-dialog-action--text.nvb-preview-dialog-action--primary{color:var(--nvb-color-primary-700)}.nvb-preview-dialog-action--text.nvb-preview-dialog-action--risk{color:var(--nvb-color-risk-700)}.nvb-preview-dialog-action--text.nvb-preview-dialog-action--neutral{color:var(--nvb-color-neutral-700)}.nvb-preview-dialog-action:not(:disabled):hover{background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);filter:none}.nvb-preview-dialog-action:disabled{opacity:.6;cursor:not-allowed}.nvb-preview-dialog__open{border:1px solid var(--nvb-color-primary-500);border-radius:var(--nvb-preview-btn-radius);background:var(--nvb-color-primary-500);color:var(--nvb-color-neutral-000);min-height:var(--nvb-preview-btn-height);padding:0 14px;cursor:pointer;margin-top:6px;font-size:var(--nvb-preview-btn-font-size);font-weight:600;font-family:var(--nvb-font-family, var(--nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif))}.nvb-view{display:flex;justify-content:flex-start;align-items:stretch;flex-direction:column;gap:10px;width:100%;min-height:100%}.nvb-view--dialog{padding:0}.nvb-preview-form-shell--dialog{height:auto;min-height:0}.nvb-preview-form-body--dialog{flex:1 1 auto;min-height:0;overflow:visible;overscroll-behavior:contain}.nvb-row{display:flex;flex-wrap:wrap;width:100%;position:relative;align-items:flex-start;gap:var(--nvb-form-element-spacing, 10px)}.nvb-row+.nvb-row{margin-top:var(--nvb-form-element-spacing, 10px)}.nvb-column{min-width:0;max-width:100%;box-sizing:border-box;position:relative;gap:10px}.nvb-column--hidden{display:none}.nvb-preview-result{border:1px solid var(--nvb-card-border-color, var(--nvb-color-neutral-200));border-radius:var(--nvb-card-radius, var(--nvb-radius-sm));background:var(--nvb-card-bg, var(--nvb-color-neutral-000));box-shadow:var(--nvb-card-shadow);padding:10px;min-height:0}.nvb-preview-result h4{margin:0 0 8px;color:var(--nvb-color-neutral-700)}.nvb-preview-result pre{margin:0;max-height:260px;overflow:auto;background:var(--nvb-color-neutral-000);border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-md);padding:8px;color:var(--nvb-color-neutral-700)}@media(max-width:1100px){.nvb-preview-header{grid-template-columns:1fr;justify-items:stretch}.nvb-preview-header__side,.nvb-preview-header__side--end,.nvb-preview-header__center{justify-content:center}.nvb-preview-toolbar__select--compact{width:min(100%,320px)}.nvb-preview-validation-panel{top:8px;left:8px;width:min(340px,100% - 16px);max-height:calc(100% - 16px)}.nvb-preview-stage--with-toc{grid-template-columns:1fr}.nvb-preview-toc{width:100%;max-height:170px}.nvb-preview-dialog-shell--open{padding:12px}.nvb-preview-dialog-shell--open .nvb-preview-dialog{max-height:calc(100vh - 24px)}}@media(max-width:767px){.nvb-preview-dialog-shell--open{inset:0;padding:0;min-height:100dvh;align-items:stretch}.nvb-preview-dialog-shell--open .nvb-preview-dialog{width:100vw!important;max-width:100vw!important;min-height:100dvh;max-height:100dvh;border:none;border-radius:0;box-shadow:none}.nvb-preview-dialog--draggable{transform:none!important}.nvb-preview-dialog--draggable .nvb-preview-dialog__header{cursor:default}.nvb-preview-dialog-shell--open .nvb-preview-dialog__header,.nvb-preview-dialog-shell--open .nvb-preview-dialog__body,.nvb-preview-dialog-shell--open .nvb-preview-dialog__footer,.nvb-preview-dialog-shell--open .nvb-preview-form-shell--dialog,.nvb-preview-dialog-shell--open .nvb-preview-form-body--dialog,.nvb-preview-dialog-shell--open .nvb-view--dialog{border-radius:0}}\n']}]}],propDecorators:{viewportSettings:[{type:l.Input,args:[{isSignal:true,alias:"viewportSettings",required:false}]}],runtimePreviewSettings:[{type:l.Input,args:[{isSignal:true,alias:"runtimePreviewSettings",required:false}]}],dialogShellRef:[{type:l.ViewChild,args:["previewDialogShell",{isSignal:true}]}],previewContentHost:[{type:Qe,args:["previewContentHost"]}],previewFrameShell:[{type:Qe,args:["previewFrameShell"]}]}});var ce=class{_structureJson=null;_sourceJson=null;_migrationResult=null;_schemaBlocked=false;_dataJson=null;_defaultStructure={schemaVersion:1,pages:[{name:"page1",rows:[]}],header:null,elements:{page1:{name:"page1",label:"Page 1",type:"page"}},settings:{width:"1182",widthUnit:"px",language:"en",renderMode:"page",dialogWidth:"720px",dialogWidthUnit:"px",dialogFontSize:"14px",dialogMaxWidth:"96%",dialogMaxHeight:"90vh",dialogPadding:"16px",dialogShowCloseButton:true,dialogCloseEvents:[],pageNavigationPosition:"top",stepperPosition:"top",actionButtonsPosition:"top",showValidateButton:true,showSubmitButton:true,showValidationIssuesModal:false},localization:{defaultLanguage:"en",languages:["en"],texts:{}}};constructor(){this._structureJson=z(this._defaultStructure)}setJson(s){const e=String(s??"").trim();this._sourceJson=null;this._migrationResult=null;this._schemaBlocked=false;if(!e){this._structureJson=z(this._defaultStructure);return}try{const t=JSON.parse(e);const n=t&&typeof t==="object"&&!Array.isArray(t)?this.migrateStructureJson(t):null;if(this._schemaBlocked){this._structureJson=t;return}const o=n?this.normalizeStructure(n):null;this._structureJson=o??z(this._defaultStructure)}catch(t){console.error(t);this._structureJson=z(this._defaultStructure)}}getJson(){return this._structureJson||this._defaultStructure}isSchemaBlocked(){return this._schemaBlocked}getSourceJson(){return this._sourceJson}getMigrationResult(){return this._migrationResult}migrateStructureJson(s){const e=wn();const t=[...un,...e.migrations??[]];const{structure:n,result:o}=pn(s,t,e);this._migrationResult=o;this._schemaBlocked=o.unsupported&&n===null;if(o.migrated||o.unsupported)this._sourceJson=s;return n?Yr(n):n}setDataJson(s){const e=String(s??"").trim();if(!e){this._dataJson={};return}try{this._dataJson=JSON.parse(e)}catch(t){console.error(t);this._dataJson={}}}getDataJson(){return this._dataJson}normalizeStructure(s){if(!s||typeof s!=="object"||Array.isArray(s))return null;const e=s;const t=Array.isArray(e.pages)?e.pages:[];if(t.length===0)return null;const n=t.map((b,v)=>{if(!b||typeof b!=="object")return null;const d=b;const u=`page${v+1}`;const m=String(d["name"]??"").trim();return{...d,name:m||u,rows:Array.isArray(d["rows"])?d["rows"]:[]}}).filter(b=>b!==null);if(n.length===0)return null;const o=e.elements&&typeof e.elements==="object"&&!Array.isArray(e.elements)?{...e.elements}:{};n.forEach((b,v)=>{const d=`Page ${v+1}`;const u=o[b.name];if(!u||typeof u!=="object"){o[b.name]={name:b.name,label:d,type:"page"};return}const m=String(u.name??"").trim();const f=String(u.label??"").trim();o[b.name]={...u,name:m||b.name,label:f||d,type:"page"}});const i=z(this._defaultStructure.settings);const r=e.settings&&typeof e.settings==="object"&&!Array.isArray(e.settings)?{...i,...e.settings}:i;const a=z(this._defaultStructure.localization);const c=e.localization&&typeof e.localization==="object"&&!Array.isArray(e.localization)?{...a,...e.localization}:a;return{...e,schemaVersion:1,pages:n,elements:o,settings:r,localization:c,dataSources:Array.isArray(e.dataSources)?e.dataSources:[]}}};function it(s,e){if(!s||!e||s===e)return()=>void 0;const t=[];for(const n of Object.keys(s)){const o=s[n];const i=e[n];if(!(o instanceof cn)||!(i instanceof cn)||o===i)continue;t.push(o.add(r=>{i.fire(r)}))}return()=>{for(const n of t)n();t.length=0}}var Ce=class Ht{iconSvgService=g(Oe);instrument(e){this.instrumentInteractiveElements(e);this.ensureUniqueDataTestIds(e);this.instrumentImages(e);this.instrumentInputs(e);this.iconSvgService.applyLegacyMaterialIcons(e);this.iconSvgService.applyIconSlots(e)}instrumentInteractiveElements(e){const t=e.querySelectorAll('button, a[href], input:not([type="hidden"]), select, option, textarea, [role="button"], [tabindex]');const n=new Set;t.forEach((o,i)=>{let r=String(o.id??"").trim();if(!r||n.has(r)){const a=r;r=this.buildDomId(o,i,n);o.id=r;if(a&&a!==r)this.rebindLabelFor(o,a,r)}n.add(r);if(o.getAttribute("data-nvb-dom-id")!==r)o.setAttribute("data-nvb-dom-id",r);if(!o.getAttribute("data-testid"))o.setAttribute("data-testid",this.buildTestId(o,i));if(!o.getAttribute("aria-label")&&!o.getAttribute("aria-labelledby")){const a=this.resolveAriaLabel(o);if(a){if(o.getAttribute("aria-label")!==a)o.setAttribute("aria-label",a)}}})}ensureUniqueDataTestIds(e){const t=e.querySelectorAll("[data-testid]");const n=new Set;t.forEach((o,i)=>{const r=String(o.getAttribute("data-testid")??"").trim();if(!r)return;let a=r;if(n.has(a)){const c=this.slugify(r)||`node-${i+1}`;a=c;let b=2;while(n.has(a)){a=`${c}-${b}`;b++}}n.add(a);if(a!==r)o.setAttribute("data-testid",a)})}instrumentImages(e){e.querySelectorAll("img").forEach(t=>{if(!t.getAttribute("alt"))t.setAttribute("alt","")})}instrumentInputs(e){e.querySelectorAll("input, textarea, select").forEach(t=>{if(!t.getAttribute("autocomplete"))t.setAttribute("autocomplete","off")})}resolveAriaLabel(e){const t=e.getAttribute("title");if(t&&t.trim())return t.trim();const n=(e.textContent??"").trim();if(n)return n;if(e instanceof HTMLInputElement){const r=e.getAttribute("placeholder");if(r&&r.trim())return r.trim();if(e.name)return e.name}const o=String(e.getAttribute("data-testid")??"").trim();if(o)return this.toReadableLabel(o);const i=e.id||e.getAttribute("name");if(i&&i.trim())return i.trim();return null}buildTestId(e,t){const n=e.tagName.toLowerCase();const o=this.resolveContextElementName(e);const i=this.resolveRoleToken(e);const r=this.resolveIdentityToken(e,t);const a=[o,i||n,r].filter(b=>String(b??"").trim().length>0).join("-");const c=this.slugify(a);if(!c)return`nvb-${n}-${t+1}`;return`nvb-${c}`}buildDomId(e,t,n){const o=e.getAttribute("data-testid")||e.getAttribute("name")||e.id||`${e.tagName.toLowerCase()}-${t+1}`;const i=`nvb-node-${this.slugify(o||"node")||t+1}`;let r=i;let a=2;while(n.has(r)){r=`${i}-${a}`;a++}return r}rebindLabelFor(e,t,n){const o=this.escapeSelector(t);const i=e.parentElement?.querySelector(`label[for="${o}"]`);if(i){i.setAttribute("for",n);return}const r=e.getRootNode().querySelectorAll?.(`label[for="${o}"]`);if(r&&r.length===1)r[0].setAttribute("for",n)}escapeSelector(e){return e.replace(/["\\]/g,"\\$&")}slugify(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+/,"").replace(/-+$/,"").slice(0,50)}toReadableLabel(e){return String(e??"").replace(/[_-]+/g," ").replace(/\s+/g," ").trim()}resolveContextElementName(e){const t=e.closest("[data-nvb-element-name]");const n=String(t?.getAttribute("data-nvb-element-name")??"").trim();return n?this.slugify(n):""}resolveRoleToken(e){if(e instanceof HTMLInputElement){const n=String(e.type??"input").trim().toLowerCase();return n?`input-${n}`:"input"}const t=String(e.getAttribute("role")??"").trim().toLowerCase();if(t)return t;return e.tagName.toLowerCase()}resolveIdentityToken(e,t){const n=String(e.id??"").trim();if(n)return this.slugify(n);const o=String(e.getAttribute("name")??"").trim();if(o)return this.slugify(o);const i=String(e.getAttribute("value")??"").trim();if(i)return this.slugify(i);const r=String(e.getAttribute("data-value")??"").trim();if(r)return this.slugify(r);const a=String(e.getAttribute("placeholder")??"").trim();if(a)return this.slugify(a);const c=String(e.textContent??"").trim();if(c)return this.slugify(c);return String(t+1)}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Ht,deps:[],target:l.ɵɵFactoryTarget.Injectable});static ɵprov=l.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Ht,providedIn:"root"})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Ce,decorators:[{type:q,args:[{providedIn:"root"}]}]});var G=class $t{confirmDialogService=g(je);closeAnimationDurationMs=160;closeTimeoutId=null;cachedState=h(null,...ngDevMode?[{debugName:"cachedState"}]:[]);isClosing=h(false,...ngDevMode?[{debugName:"isClosing"}]:[]);state=this.cachedState.asReadonly();backdropRef=In("confirmBackdrop",...ngDevMode?[{debugName:"backdropRef"}]:[]);topLayerEffect=S(()=>{mn(this.backdropRef()?.nativeElement)},...ngDevMode?[{debugName:"topLayerEffect"}]:[]);constructor(){S(()=>{const e=this.confirmDialogService.state();if(e?.isVisible){if(this.closeTimeoutId!==null){clearTimeout(this.closeTimeoutId);this.closeTimeoutId=null}this.cachedState.set(e);this.isClosing.set(false);return}if(!this.cachedState())return;this.isClosing.set(true);this.closeTimeoutId=setTimeout(()=>{this.cachedState.set(null);this.isClosing.set(false);this.closeTimeoutId=null},this.closeAnimationDurationMs)})}ngOnDestroy(){if(this.closeTimeoutId!==null){clearTimeout(this.closeTimeoutId);this.closeTimeoutId=null}}onEscapePressed(){if(!this.state()?.isVisible)return;this.confirmDialogService.cancel()}onBackdropClick(){this.confirmDialogService.cancel()}onCancelClick(){this.confirmDialogService.cancel()}onConfirmClick(){this.confirmDialogService.confirm()}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:$t,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:$t,isStandalone:true,selector:"confirm-dialog",host:{listeners:{"document:keydown.escape":"onEscapePressed()"}},viewQueries:[{propertyName:"backdropRef",first:true,predicate:["confirmBackdrop"],descendants:true,isSignal:true}],ngImport:l,template:"@if (state()?.isVisible) {\n <div\n class=\"nvb-confirm-backdrop\"\n data-testid=\"nvb-confirm-dialog-backdrop\"\n #confirmBackdrop\n [class.nvb-confirm-backdrop--closing]=\"isClosing()\"\n (click)=\"onBackdropClick()\"\n >\n <section\n class=\"nvb-confirm-dialog\"\n [class.nvb-confirm-dialog--closing]=\"isClosing()\"\n role=\"alertdialog\"\n data-testid=\"nvb-confirm-dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"nvb-confirm-dialog-title\"\n aria-describedby=\"nvb-confirm-dialog-message\"\n (click)=\"$event.stopPropagation()\"\n >\n <header class=\"nvb-confirm-dialog__header\" id=\"nvb-confirm-dialog-title\">\n {{ state()?.title || ('confirm.title' | uiT: 'Confirmation') }}\n </header>\n\n <div class=\"nvb-confirm-dialog__body\" id=\"nvb-confirm-dialog-message\">\n {{ state()?.message || ('confirm.message' | uiT: 'Are you sure you want to continue?') }}\n </div>\n\n <footer class=\"nvb-confirm-dialog__actions\">\n <button\n type=\"button\"\n class=\"nvb-confirm-dialog__button\"\n data-testid=\"nvb-confirm-dialog-cancel\"\n (click)=\"onCancelClick()\"\n >\n {{ state()?.cancelLabel || ('confirm.cancel' | uiT: 'Cancel') }}\n </button>\n <button\n type=\"button\"\n class=\"nvb-confirm-dialog__button nvb-confirm-dialog__button--primary\"\n data-testid=\"nvb-confirm-dialog-confirm\"\n (click)=\"onConfirmClick()\"\n >\n {{ state()?.confirmLabel || ('confirm.confirm' | uiT: 'Continue') }}\n </button>\n </footer>\n </section>\n </div>\n}\n",styles:[":host{position:fixed;inset:0;pointer-events:none;z-index:2147483601}.nvb-confirm-backdrop{position:fixed;inset:0;width:auto;height:auto;max-width:none;max-height:none;margin:0;border:0;color:inherit;background:#0f172a5c;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);display:flex;align-items:center;justify-content:center;padding:16px;pointer-events:auto}.nvb-confirm-dialog{--nvb-floating-overlay-z-index: 2147483610;width:min(100%,480px);max-height:min(80vh,100vh - 32px);min-height:0;border-radius:var(--nvb-dialog-radius);border:1px solid var(--nvb-color-neutral-200);background:var(--nvb-color-neutral-000);box-shadow:var(--nvb-shadow-16);overflow:hidden;display:flex;flex-direction:column}.nvb-confirm-dialog__header{padding:20px 24px 8px;font-size:16px;line-height:22px;font-weight:600;color:var(--nvb-color-neutral-900);flex-shrink:0}.nvb-confirm-dialog__body{padding:0 24px 20px;color:var(--nvb-color-neutral-600);font-size:13px;line-height:18px;overflow:auto;flex:1 1 auto;min-height:0}.nvb-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:8px;padding:0 24px 24px;flex-shrink:0}.nvb-confirm-dialog__button{min-width:96px;min-height:32px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-button-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-700);padding:0 12px;cursor:pointer;font-size:13px;font-weight:600;line-height:20px;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.nvb-confirm-dialog__button:hover{background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400)}.nvb-confirm-dialog__button:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-confirm-dialog__button--primary{border-color:var(--nvb-color-primary-600);background:var(--nvb-color-primary-600);color:var(--nvb-color-neutral-000)}.nvb-confirm-dialog__button--primary:hover{border-color:var(--nvb-color-primary-700);background:var(--nvb-color-primary-700)}\n"],dependencies:[{kind:"pipe",type:V,name:"uiT"}],changeDetection:l.ChangeDetectionStrategy.Eager})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:G,decorators:[{type:A,args:[{selector:"confirm-dialog",imports:[V],changeDetection:E.Eager,template:"@if (state()?.isVisible) {\n <div\n class=\"nvb-confirm-backdrop\"\n data-testid=\"nvb-confirm-dialog-backdrop\"\n #confirmBackdrop\n [class.nvb-confirm-backdrop--closing]=\"isClosing()\"\n (click)=\"onBackdropClick()\"\n >\n <section\n class=\"nvb-confirm-dialog\"\n [class.nvb-confirm-dialog--closing]=\"isClosing()\"\n role=\"alertdialog\"\n data-testid=\"nvb-confirm-dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"nvb-confirm-dialog-title\"\n aria-describedby=\"nvb-confirm-dialog-message\"\n (click)=\"$event.stopPropagation()\"\n >\n <header class=\"nvb-confirm-dialog__header\" id=\"nvb-confirm-dialog-title\">\n {{ state()?.title || ('confirm.title' | uiT: 'Confirmation') }}\n </header>\n\n <div class=\"nvb-confirm-dialog__body\" id=\"nvb-confirm-dialog-message\">\n {{ state()?.message || ('confirm.message' | uiT: 'Are you sure you want to continue?') }}\n </div>\n\n <footer class=\"nvb-confirm-dialog__actions\">\n <button\n type=\"button\"\n class=\"nvb-confirm-dialog__button\"\n data-testid=\"nvb-confirm-dialog-cancel\"\n (click)=\"onCancelClick()\"\n >\n {{ state()?.cancelLabel || ('confirm.cancel' | uiT: 'Cancel') }}\n </button>\n <button\n type=\"button\"\n class=\"nvb-confirm-dialog__button nvb-confirm-dialog__button--primary\"\n data-testid=\"nvb-confirm-dialog-confirm\"\n (click)=\"onConfirmClick()\"\n >\n {{ state()?.confirmLabel || ('confirm.confirm' | uiT: 'Continue') }}\n </button>\n </footer>\n </section>\n </div>\n}\n",styles:[":host{position:fixed;inset:0;pointer-events:none;z-index:2147483601}.nvb-confirm-backdrop{position:fixed;inset:0;width:auto;height:auto;max-width:none;max-height:none;margin:0;border:0;color:inherit;background:#0f172a5c;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);display:flex;align-items:center;justify-content:center;padding:16px;pointer-events:auto}.nvb-confirm-dialog{--nvb-floating-overlay-z-index: 2147483610;width:min(100%,480px);max-height:min(80vh,100vh - 32px);min-height:0;border-radius:var(--nvb-dialog-radius);border:1px solid var(--nvb-color-neutral-200);background:var(--nvb-color-neutral-000);box-shadow:var(--nvb-shadow-16);overflow:hidden;display:flex;flex-direction:column}.nvb-confirm-dialog__header{padding:20px 24px 8px;font-size:16px;line-height:22px;font-weight:600;color:var(--nvb-color-neutral-900);flex-shrink:0}.nvb-confirm-dialog__body{padding:0 24px 20px;color:var(--nvb-color-neutral-600);font-size:13px;line-height:18px;overflow:auto;flex:1 1 auto;min-height:0}.nvb-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:8px;padding:0 24px 24px;flex-shrink:0}.nvb-confirm-dialog__button{min-width:96px;min-height:32px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-button-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-700);padding:0 12px;cursor:pointer;font-size:13px;font-weight:600;line-height:20px;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.nvb-confirm-dialog__button:hover{background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400)}.nvb-confirm-dialog__button:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-confirm-dialog__button--primary{border-color:var(--nvb-color-primary-600);background:var(--nvb-color-primary-600);color:var(--nvb-color-neutral-000)}.nvb-confirm-dialog__button--primary:hover{border-color:var(--nvb-color-primary-700);background:var(--nvb-color-primary-700)}\n"]}]}],ctorParameters:()=>[],propDecorators:{backdropRef:[{type:l.ViewChild,args:["confirmBackdrop",{isSignal:true}]}],onEscapePressed:[{type:rl,args:["document:keydown.escape"]}]}});const Y=[O,j,Ne,L,ee,fn,pe,te,ue,Be,H,Le,fe,ae,je,he,Pi,P,Ko,bn];var X=class Ut{model=p(null,...ngDevMode?[{debugName:"model"}]:[]);pageJson=p(null,...ngDevMode?[{debugName:"pageJson"}]:[]);dataJson=p(null,...ngDevMode?[{debugName:"dataJson"}]:[]);language=p(null,...ngDevMode?[{debugName:"language"}]:[]);theme=p(null,...ngDevMode?[{debugName:"theme"}]:[]);uiDictionaries=p(null,...ngDevMode?[{debugName:"uiDictionaries"}]:[]);contentTranslations=p(null,...ngDevMode?[{debugName:"contentTranslations"}]:[]);cssVariables=p(null,...ngDevMode?[{debugName:"cssVariables"}]:[]);externalConfig=p(null,...ngDevMode?[{debugName:"externalConfig"}]:[]);externalConfigUrl=p(null,...ngDevMode?[{debugName:"externalConfigUrl"}]:[]);viewportSettings=p(null,...ngDevMode?[{debugName:"viewportSettings"}]:[]);activeTab=p(null,...ngDevMode?[{debugName:"activeTab"}]:[]);hideHeaderTabs=p(true,...ngDevMode?[{debugName:"hideHeaderTabs"}]:[]);headerActions=p(null,...ngDevMode?[{debugName:"headerActions"}]:[]);runtimeSettings=p(null,...ngDevMode?[{debugName:"runtimeSettings"}]:[]);valueChanged=w();structureChanged=w();tabChanged=w();languageChanged=w();saveRequested=w();headerActionRequested=w();tableSettingsChanged=w();tableSettingsApplied=w();tableSettingsRequested=w();tableSettingsSaveRequested=w();tableFiltersChanged=w();tableFiltersApplied=w();tableSavedFiltersChanged=w();tableSavedFiltersRequested=w();tableSavedFilterSaveRequested=w();resolvedViewportSettings=y(()=>{return this.viewportSettings()??this.runtimeSettings()?.viewportSettings??null},...ngDevMode?[{debugName:"resolvedViewportSettings"}]:[]);resolvedPreviewSettings=y(()=>{const e=this.runtimeSettings()?.preview;if(!e)return{mode:"runtime"};const t=String(e.mode??"").trim().toLowerCase();if(t==="default"||t==="runtime")return e;return{...e,mode:"runtime"}},...ngDevMode?[{debugName:"resolvedPreviewSettings"}]:[]);documentRef=g(Vn);renderer=g(Dn);hostElement=g(Ze);ngxViewBuilderApiService=g(P);hostNgxViewBuilderApiService=g(P,{skipSelf:true,optional:true});disposeApiEventBridge=null;runtimeVariablesService=g(fe);domInstrumentationService=g(Ce);previewRendererService=g(H);dataService=g(O);dataSourceService=g(ue);runtimeRenderSettingsService=g(ae);runtimeLazyElementLoaderService=g(An);internalModel=new ce;lastStructureJson=null;lastDataJson=null;customCssStyleElement=null;cssVariablesStyleElement=null;customCssLinkElements=new Map;markupSecurityService=g(Fe);mutationObserver=null;inheritedThemeObserver=null;themeSwitchRafHandle=null;externalConfigRequestId=0;isInstrumentingDom=false;activeThemeMode="dark";lastAppliedThemePreset=null;customThemeDefinition=null;appliedCssVariableKeys=new Set;appliedCssVariablesSnapshot={};isRuntimeInitialized=false;isViewInitialized=false;pendingAfterRenderNotify=false;renderRequestId=0;apiValueChangedHandler=e=>{this.valueChanged.emit(e)};apiStructureChangedHandler=e=>{this.structureChanged.emit(e.structure)};apiLanguageChangedHandler=e=>{this.languageChanged.emit(e.language)};apiTabChangedHandler=e=>{this.tabChanged.emit(e.tab)};apiTableSettingsChangedHandler=e=>{this.tableSettingsChanged.emit(e);this.tableSettingsApplied.emit(e)};apiTableSettingsRequestedHandler=e=>{this.tableSettingsRequested.emit(e)};apiTableSettingsSaveRequestedHandler=e=>{this.tableSettingsSaveRequested.emit(e)};apiTableFiltersChangedHandler=e=>{this.tableFiltersChanged.emit(e);this.tableFiltersApplied.emit(e)};apiTableSavedFiltersChangedHandler=e=>{this.tableSavedFiltersChanged.emit(e)};apiTableSavedFiltersRequestedHandler=e=>{this.tableSavedFiltersRequested.emit(e)};apiTableSavedFilterSaveRequestedHandler=e=>{this.tableSavedFilterSaveRequested.emit(e)};apiCssVariablesChangedHandler=e=>{this.applyCssVariables(e.cssVariables)};apiCustomCssChangedHandler=e=>{this.applyCustomCss(e.cssText)};apiCustomCssUrlsChangedHandler=e=>{this.applyCustomCssUrls(e.urls)};apiThemeModeChangedHandler=e=>{this.applyThemePreset(e.theme)};apiCustomThemeChangedHandler=e=>{this.customThemeDefinition=e.theme;this.applyThemePreset(this.activeThemeMode,true);this.reapplyHostCssVariables()};constructor(){this.ngxViewBuilderApiService.onValueChanged.add(this.apiValueChangedHandler);this.ngxViewBuilderApiService.onStructureChanged.add(this.apiStructureChangedHandler);this.ngxViewBuilderApiService.onLanguageChanged.add(this.apiLanguageChangedHandler);this.ngxViewBuilderApiService.onTabChanged.add(this.apiTabChangedHandler);this.ngxViewBuilderApiService.onTableSettingsChanged.add(this.apiTableSettingsChangedHandler);this.ngxViewBuilderApiService.onTableSettingsRequested.add(this.apiTableSettingsRequestedHandler);this.ngxViewBuilderApiService.onTableSettingsSaveRequested.add(this.apiTableSettingsSaveRequestedHandler);this.ngxViewBuilderApiService.onTableFiltersChanged.add(this.apiTableFiltersChangedHandler);this.ngxViewBuilderApiService.onTableSavedFiltersChanged.add(this.apiTableSavedFiltersChangedHandler);this.ngxViewBuilderApiService.onTableSavedFiltersRequested.add(this.apiTableSavedFiltersRequestedHandler);this.ngxViewBuilderApiService.onTableSavedFilterSaveRequested.add(this.apiTableSavedFilterSaveRequestedHandler);this.ngxViewBuilderApiService.onCssVariablesChanged.add(this.apiCssVariablesChangedHandler);this.ngxViewBuilderApiService.onCustomCssChanged.add(this.apiCustomCssChangedHandler);this.ngxViewBuilderApiService.onCustomCssUrlsChanged.add(this.apiCustomCssUrlsChangedHandler);this.ngxViewBuilderApiService.onThemeModeChanged.add(this.apiThemeModeChangedHandler);this.ngxViewBuilderApiService.onCustomThemeChanged.add(this.apiCustomThemeChangedHandler);const e=this.ngxViewBuilderApiService.getCssVariables();if(Object.keys(e).length>0)this.applyCssVariables(e);this.applyCustomCss(this.ngxViewBuilderApiService.getCustomCss());this.applyCustomCssUrls(this.ngxViewBuilderApiService.getCustomCssUrls());this.customThemeDefinition=this.ngxViewBuilderApiService.getCustomTheme();const t=this.ngxViewBuilderApiService.getThemeMode();if(t)this.applyThemePreset(t);S(()=>{const n=this.resolveRuntimeState();if(!n)return;if(!this.isRuntimeInitialized){this.applyModelDerivedSettings(n.model);return}const o=n.structureJson!==this.lastStructureJson;const i=n.dataJson!==this.lastDataJson;if(!o&&!i){this.applyModelDerivedSettings(n.model);return}this.lastStructureJson=n.structureJson;this.lastDataJson=n.dataJson;this.applyModelDerivedSettings(n.model);this.renderRuntime(n.model)});S(()=>{const n=this.uiDictionaries();if(n)this.ngxViewBuilderApiService.setUiDictionaries(n)});S(()=>{const n=this.contentTranslations();if(n)this.ngxViewBuilderApiService.setContentTranslations(n)});S(()=>{const n=String(this.language()??"").trim();if(n)this.ngxViewBuilderApiService.setLanguage(n)});S(()=>{const n=this.theme()??this.runtimeSettings()?.theme??null;if(n){this.applyThemePreset(n);this.reapplyHostCssVariables();return}this.syncThemeFromHostIfNeeded();this.reapplyHostCssVariables()});S(()=>{const n=this.runtimeSettings();if(!n)return;this.applyBuilderSettings(n);const o=this.resolveRuntimeState();if(o)this.applyModelDerivedSettings(o.model)});S(()=>{const n=this.externalConfig();if(!n)return;this.applyExternalConfig(n)});S(()=>{const n=String(this.externalConfigUrl()??"").trim();if(!n)return;this.loadExternalConfig(n)})}ngOnInit(){M.isEditor.set(false);M.allowRuntimeVariableDataSources.set(true);this.disposeApiEventBridge=it(this.ngxViewBuilderApiService,this.hostNgxViewBuilderApiService);this.runtimeVariablesService.startSync();this.applyDefaultCssVariables(this.activeThemeMode);this.renderer.setAttribute(this.hostElement.nativeElement,"data-theme",this.activeThemeMode);this.setupInheritedThemeSync();this.isRuntimeInitialized=true;queueMicrotask(()=>{const e=this.resolveRuntimeState();if(!e)return;this.lastStructureJson=e.structureJson;this.lastDataJson=e.dataJson;this.applyModelDerivedSettings(e.model);this.renderRuntime(e.model)})}ngAfterViewInit(){this.isViewInitialized=true;this.reapplyRuntimeThemeArtifacts();this.setupDomInstrumentation();this.instrumentDomSoon(D.PREVIEW)}ngOnDestroy(){M.allowRuntimeVariableDataSources.set(false);this.disposeApiEventBridge?.();this.disposeApiEventBridge=null;this.ngxViewBuilderApiService.onValueChanged.remove(this.apiValueChangedHandler);this.ngxViewBuilderApiService.onStructureChanged.remove(this.apiStructureChangedHandler);this.ngxViewBuilderApiService.onLanguageChanged.remove(this.apiLanguageChangedHandler);this.ngxViewBuilderApiService.onTabChanged.remove(this.apiTabChangedHandler);this.ngxViewBuilderApiService.onTableSettingsChanged.remove(this.apiTableSettingsChangedHandler);this.ngxViewBuilderApiService.onTableSettingsRequested.remove(this.apiTableSettingsRequestedHandler);this.ngxViewBuilderApiService.onTableSettingsSaveRequested.remove(this.apiTableSettingsSaveRequestedHandler);this.ngxViewBuilderApiService.onTableFiltersChanged.remove(this.apiTableFiltersChangedHandler);this.ngxViewBuilderApiService.onTableSavedFiltersChanged.remove(this.apiTableSavedFiltersChangedHandler);this.ngxViewBuilderApiService.onTableSavedFiltersRequested.remove(this.apiTableSavedFiltersRequestedHandler);this.ngxViewBuilderApiService.onTableSavedFilterSaveRequested.remove(this.apiTableSavedFilterSaveRequestedHandler);this.ngxViewBuilderApiService.onCssVariablesChanged.remove(this.apiCssVariablesChangedHandler);this.ngxViewBuilderApiService.onCustomCssChanged.remove(this.apiCustomCssChangedHandler);this.ngxViewBuilderApiService.onCustomCssUrlsChanged.remove(this.apiCustomCssUrlsChangedHandler);this.ngxViewBuilderApiService.onThemeModeChanged.remove(this.apiThemeModeChangedHandler);this.ngxViewBuilderApiService.onCustomThemeChanged.remove(this.apiCustomThemeChangedHandler);this.runtimeVariablesService.stopSync();this.mutationObserver?.disconnect();this.inheritedThemeObserver?.disconnect();this.mutationObserver=null;this.inheritedThemeObserver=null;this.customCssStyleElement?.remove();this.customCssStyleElement=null;this.cssVariablesStyleElement?.remove();this.cssVariablesStyleElement=null;this.customCssLinkElements.forEach(e=>e.remove());this.customCssLinkElements.clear();if(this.themeSwitchRafHandle!==null){cancelAnimationFrame(this.themeSwitchRafHandle);this.themeSwitchRafHandle=null}this.renderer.removeClass(this.hostElement.nativeElement,"nvb-theme-switching")}setTableSettings(e,t,n){this.ngxViewBuilderApiService.setTableSettings(e,t,n)}setLanguage(e){this.ngxViewBuilderApiService.setLanguage(e)}getLanguage(){return this.ngxViewBuilderApiService.getLanguage()}getTableSettings(e){return this.ngxViewBuilderApiService.getTableSettings(e)}setTableFilters(e,t,n){this.ngxViewBuilderApiService.setTableFilters(e,t,n)}getTableFilters(e){return this.ngxViewBuilderApiService.getTableFilters(e)}setTableSavedFilters(e,t,n){this.ngxViewBuilderApiService.setTableSavedFilters(e,t,n)}getTableSavedFilters(e){return this.ngxViewBuilderApiService.getTableSavedFilters(e)}async renderRuntime(e){const t=e?.getJson?.();if(!t)return;const n=++this.renderRequestId;const o=this.deepCloneData(t);if(!this.runtimeRenderSettingsService.isLazyElementRenderingEnabled()){await this.preloadRuntimeElementComponents(o);if(n!==this.renderRequestId)return}this.ngxViewBuilderApiService.notifyBeforeRender(D.PREVIEW);this.ngxViewBuilderApiService.captureStructureSource(o);this.previewRendererService.toModel(o);this.runtimeVariablesService.setMappings(Array.isArray(o.settings?.variables)?o.settings.variables:[],false);this.dataService.setData(this.deepCloneData(this.ensureDataObject(e.getDataJson?.()??{})));this.runtimeVariablesService.refresh();this.ngxViewBuilderApiService.notifyTabChanged(D.PREVIEW);this.ngxViewBuilderApiService.notifyRender(D.PREVIEW);this.pendingAfterRenderNotify=true;queueMicrotask(()=>{this.dataSourceService.applyPendingReturnReloads()});if(this.isViewInitialized)this.instrumentDomSoon(D.PREVIEW)}async preloadRuntimeElementComponents(e){await this.runtimeLazyElementLoaderService.preloadStructure(e)}applyModelDerivedSettings(e){const t=e?.getJson?.()?.settings;if(!t||typeof t!=="object")return;Je(t);const n=this.runtimeSettings()?.lazyElementRendering;const o=t["lazyElementRendering"];this.runtimeRenderSettingsService.setLazyElementRenderingEnabled(typeof n==="boolean"?n:o);if(!this.uiDictionaries()){const r=t["uiDictionaries"];if(r)this.ngxViewBuilderApiService.setUiDictionaries(r)}const i=Boolean(this.theme()||this.runtimeSettings()?.theme);if(!Boolean(this.cssVariables()||this.runtimeSettings()?.cssVariables)&&!i){const r=t["themeVariables"];if(r)this.ngxViewBuilderApiService.setCssVariables(r)}if(!i){const r=t["theme"];if(r)this.applyThemePreset(r)}if(!this.language()){const r=String(t["language"]??"").trim();if(r)this.ngxViewBuilderApiService.setLanguage(r)}if(!this.runtimeSettings()?.templateActionMap){const r=t["templateActionMap"];if(r)this.ngxViewBuilderApiService.setTemplateActionMap(r)}if(!this.runtimeSettings()?.customCss){const r=t["customCss"];if(r!==void 0)this.ngxViewBuilderApiService.setCustomCss(r)}if(!this.runtimeSettings()?.customTheme){const r=t["customTheme"];if(r!==void 0)this.ngxViewBuilderApiService.setCustomTheme(r)}if(!this.runtimeSettings()?.customCssUrls){const r=t["customCssUrls"];if(Array.isArray(r))this.ngxViewBuilderApiService.setCustomCssUrls(r)}if(!this.runtimeSettings()?.extensions){const r=t["extensions"];if(r)this.ngxViewBuilderApiService.registerExtensions(r)}}applyBuilderSettings(e){if(typeof e.lazyElementRendering==="boolean")this.runtimeRenderSettingsService.setLazyElementRenderingEnabled(e.lazyElementRendering);if(e.uiDictionaries)this.ngxViewBuilderApiService.setUiDictionaries(e.uiDictionaries);if(e.contentTranslations)this.ngxViewBuilderApiService.setContentTranslations(e.contentTranslations);if(!Boolean(this.theme())){if(e.theme)this.applyThemePreset(e.theme);else this.syncThemeFromHostIfNeeded()}if(e.cssVariables)this.ngxViewBuilderApiService.setCssVariables(e.cssVariables);if(e.customTheme!==void 0)this.ngxViewBuilderApiService.setCustomTheme(e.customTheme);if(e.templateActionMap)this.ngxViewBuilderApiService.setTemplateActionMap(e.templateActionMap);if(Array.isArray(e.runtimeVariables))this.ngxViewBuilderApiService.setRuntimeVariableDefinitions(e.runtimeVariables,true);if(e.runtimeVariableContext&&typeof e.runtimeVariableContext==="object")this.ngxViewBuilderApiService.setRuntimeVariableContext(e.runtimeVariableContext,true);if(e.extensions)this.ngxViewBuilderApiService.registerExtensions(e.extensions);const t=e.defaultDataSources??e.dataSourceDefinitions;if(Array.isArray(t))this.ngxViewBuilderApiService.setDefaultDataSources(t);if(e.customCss!==void 0)this.ngxViewBuilderApiService.setCustomCss(e.customCss);if(e.customCssUrls!==void 0)this.ngxViewBuilderApiService.setCustomCssUrls(e.customCssUrls);if(e.language)this.ngxViewBuilderApiService.setLanguage(e.language);if(e.locale)this.ngxViewBuilderApiService.setApplicationLocale(e.locale);if(e.propertyHints)this.ngxViewBuilderApiService.setPropertyHints(e.propertyHints);if(e.propertyTypeHints)this.ngxViewBuilderApiService.setPropertyTypeHints(e.propertyTypeHints);this.reapplyHostCssVariables()}applyExternalConfig(e){const t=e.settings??e;this.applyBuilderSettings(t);if(e.templateActionMap)this.ngxViewBuilderApiService.setTemplateActionMap(e.templateActionMap);if(e.customCss!==void 0)this.ngxViewBuilderApiService.setCustomCss(e.customCss);if(e.customTheme!==void 0)this.ngxViewBuilderApiService.setCustomTheme(e.customTheme);if(e.customCssUrls!==void 0)this.ngxViewBuilderApiService.setCustomCssUrls(e.customCssUrls);if(e.extensions)this.ngxViewBuilderApiService.registerExtensions(e.extensions)}async loadExternalConfig(e){const t=++this.externalConfigRequestId;try{const n=await fetch(e,{cache:"no-store"});if(!n.ok)throw new Error(`HTTP ${n.status}`);const o=await n.json();if(t!==this.externalConfigRequestId)return;if(!o||typeof o!=="object")return;if(Object.prototype.hasOwnProperty.call(o,"settings")||Object.prototype.hasOwnProperty.call(o,"templateActionMap")||Object.prototype.hasOwnProperty.call(o,"customCss")||Object.prototype.hasOwnProperty.call(o,"customCssUrls")||Object.prototype.hasOwnProperty.call(o,"extensions")){this.applyExternalConfig(o);return}this.applyBuilderSettings(o)}catch(n){console.warn("[NgxViewBuilderRenderer] Failed to load external config.",{configUrl:e,error:n instanceof Error?n.message:n})}}applyCustomCss(e){const t=this.markupSecurityService.sanitizeCssText(String(e??""));const n=this.getStyleRoot();if(!n)return;if(!t.trim()){if(this.customCssStyleElement){this.customCssStyleElement.remove();this.customCssStyleElement=null}return}if(!this.customCssStyleElement){this.customCssStyleElement=this.documentRef.createElement("style");this.customCssStyleElement.setAttribute("data-ngx-view-builder-custom-css","true")}if(this.customCssStyleElement.parentNode!==n)n.appendChild(this.customCssStyleElement);this.customCssStyleElement.textContent=t}applyCustomCssUrls(e){const t=this.getStyleRoot();if(!t)return;const n=Array.from(new Set((e??[]).map(i=>this.markupSecurityService.sanitizeIframeUrl(String(i??"").trim())).filter(i=>Boolean(i))));const o=new Set(n);Array.from(this.customCssLinkElements.keys()).forEach(i=>{if(o.has(i))return;this.customCssLinkElements.get(i)?.remove();this.customCssLinkElements.delete(i)});n.forEach(i=>{if(this.customCssLinkElements.has(i)){const a=this.customCssLinkElements.get(i)??null;if(a&&a.parentNode!==t)t.appendChild(a);return}const r=this.documentRef.createElement("link");r.rel="stylesheet";r.href=i;r.setAttribute("data-ngx-view-builder-custom-css-url",i);t.appendChild(r);this.customCssLinkElements.set(i,r)})}applyCssVariables(e){if(!e||typeof e!=="object")return;this.syncThemeArtifactsRoot();const t=Object.keys(e);const n={};t.forEach(i=>{n[i]=String(e[i])});if(Object.keys(this.appliedCssVariablesSnapshot).length===t.length&&t.every(i=>this.appliedCssVariablesSnapshot[i]===n[i]))return;this.applyCssVariablesToElement(this.hostElement.nativeElement,n,this.appliedCssVariableKeys);const o=this.hostElement.nativeElement.shadowRoot?.querySelector(".nvb-root");this.applyCssVariablesToElement(o,n,this.appliedCssVariableKeys);this.updateCssVariableStyleElement(n);this.appliedCssVariableKeys=new Set(t);this.appliedCssVariablesSnapshot=n}applyDefaultCssVariables(e){const t=this.resolveThemePresetVariables(e);Object.keys(t).forEach(n=>{const o=this.hostElement.nativeElement.style.getPropertyValue(n);if(o&&String(o).trim().length>0)return;this.renderer.setStyle(this.hostElement.nativeElement,n,t[n])})}applyThemePreset(e,t=false){const n=this.normalizeThemeMode(e);if(!t&&this.lastAppliedThemePreset===n)return;this.activeThemeMode=n;this.renderer.setAttribute(this.hostElement.nativeElement,"data-theme",n);this.renderer.removeClass(this.hostElement.nativeElement,"nvb-theme-light");this.renderer.removeClass(this.hostElement.nativeElement,"nvb-theme-dark");this.renderer.addClass(this.hostElement.nativeElement,`nvb-theme-${n}`);this.scheduleThemeSwitchUnlock();this.lastAppliedThemePreset=n;const o=this.resolveThemePresetVariables(n);this.applyCssVariables(o);this.ngxViewBuilderApiService.setThemeMode(n);this.ngxViewBuilderApiService.setCssVariables(o)}reapplyHostCssVariables(){const e=this.cssVariables()??this.runtimeSettings()?.cssVariables??null;if(!e||typeof e!=="object")return;this.ngxViewBuilderApiService.setCssVariables(e)}reapplyRuntimeThemeArtifacts(){this.syncThemeArtifactsRoot();this.applyCustomCss(this.ngxViewBuilderApiService.getCustomCss());this.applyCustomCssUrls(this.ngxViewBuilderApiService.getCustomCssUrls());this.updateCssVariableStyleElement(this.appliedCssVariablesSnapshot)}getStyleRoot(){return this.hostElement.nativeElement.shadowRoot??this.hostElement.nativeElement}syncThemeArtifactsRoot(){const e=this.getStyleRoot();if(!e)return;if(this.customCssStyleElement&&this.customCssStyleElement.parentNode!==e)e.appendChild(this.customCssStyleElement);if(this.cssVariablesStyleElement&&this.cssVariablesStyleElement.parentNode!==e)e.appendChild(this.cssVariablesStyleElement);this.customCssLinkElements.forEach(t=>{if(t.parentNode!==e)e.appendChild(t)})}applyCssVariablesToElement(e,t,n){if(!e)return;Object.keys(t).forEach(o=>{this.renderer.setStyle(e,o,t[o])});n.forEach(o=>{if(!Object.prototype.hasOwnProperty.call(t,o))this.renderer.removeStyle(e,o)})}updateCssVariableStyleElement(e){const t=this.getStyleRoot();if(!t)return;const n=Object.keys(e);if(n.length===0){this.cssVariablesStyleElement?.remove();this.cssVariablesStyleElement=null;return}if(!this.cssVariablesStyleElement){this.cssVariablesStyleElement=this.documentRef.createElement("style");this.cssVariablesStyleElement.setAttribute("data-ngx-view-builder-css-variables","true")}if(this.cssVariablesStyleElement.parentNode!==t)t.appendChild(this.cssVariablesStyleElement);const o=n.map(i=>`${i}: ${e[i]};`).join(" ");this.cssVariablesStyleElement.textContent=`:host { ${o} } .nvb-root { ${o} }`}resolveThemePresetVariables(e){const t=dn(e);const n=this.customThemeDefinition;if(!n)return t;const o={...n.shared??{}};const i=e==="dark"?{...n.dark??{}}:{...n.light??{}};if(Object.keys(o).length===0&&Object.keys(i).length===0)return t;if(n.mergeWithDefaults===false)return{...o,...i};return{...t,...o,...i}}scheduleThemeSwitchUnlock(){this.renderer.addClass(this.hostElement.nativeElement,"nvb-theme-switching");if(this.themeSwitchRafHandle!==null){cancelAnimationFrame(this.themeSwitchRafHandle);this.themeSwitchRafHandle=null}this.themeSwitchRafHandle=requestAnimationFrame(()=>{this.themeSwitchRafHandle=requestAnimationFrame(()=>{this.renderer.removeClass(this.hostElement.nativeElement,"nvb-theme-switching");this.themeSwitchRafHandle=null})})}setupInheritedThemeSync(){const e=this.documentRef?.documentElement;if(!e)return;this.syncThemeFromHostIfNeeded();this.inheritedThemeObserver?.disconnect();this.inheritedThemeObserver=new MutationObserver(()=>{this.syncThemeFromHostIfNeeded()});this.inheritedThemeObserver.observe(e,{attributes:true,attributeFilter:["data-theme"]})}syncThemeFromHostIfNeeded(){if(this.hasExplicitThemeOverride())return;const e=this.resolveInheritedThemeMode();this.applyThemePreset(e)}resolveInheritedThemeMode(){const e=this.documentRef?.documentElement?.getAttribute("data-theme");if(!String(e??"").trim())return this.activeThemeMode;return this.normalizeThemeMode(e)}hasExplicitThemeOverride(){if(this.theme())return true;if(this.runtimeSettings()?.theme)return true;return false}normalizeThemeMode(e){return String(e??"").trim().toLowerCase()==="dark"?"dark":"light"}setupDomInstrumentation(){const e=this.getInstrumentationRoot();if(!e)return;this.ngxViewBuilderApiService.registerRenderRoot(e);this.mutationObserver=new MutationObserver(()=>{this.instrumentDomSafely(e)});this.mutationObserver.observe(e,{subtree:true,childList:true,attributes:true});this.instrumentDomSafely(e)}instrumentDomSoon(e){queueMicrotask(()=>{const t=this.getInstrumentationRoot();if(!t)return;this.instrumentDomSafely(t);this.ngxViewBuilderApiService.registerRenderRoot(t);if(!e||!this.pendingAfterRenderNotify)return;this.pendingAfterRenderNotify=false;this.ngxViewBuilderApiService.notifyAfterRender(e)})}instrumentDomSafely(e){if(this.isInstrumentingDom)return;this.isInstrumentingDom=true;this.mutationObserver?.disconnect();try{this.domInstrumentationService.instrument(e)}finally{this.mutationObserver?.observe(e,{subtree:true,childList:true,attributes:true});this.isInstrumentingDom=false}}getInstrumentationRoot(){return this.hostElement.nativeElement.shadowRoot??this.hostElement.nativeElement}resolveRuntimeState(){const e=this.pageJson()!==null;const t=this.dataJson()!==null;const n=e||t;const o=this.model();const i=n?this.internalModel:o??this.internalModel;if(n&&o){if(!e){const a=this.serializeStructure(o.getJson?.());if(a)i.setJson(a)}if(!t)i.setDataJson(this.serializeData(o.getDataJson?.()??{}))}if(e){const a=this.normalizeStructureJsonInput(this.pageJson());if(!a)return null;i.setJson(a)}if(t){const a=this.normalizeDataJsonInput(this.dataJson());i.setDataJson(a??"{}")}const r=this.serializeStructure(i.getJson?.());if(!r)return null;return{model:i,structureJson:r,dataJson:this.serializeData(i.getDataJson?.()??{})}}normalizeStructureInput(e){if(!e)return null;if(typeof e==="string")try{const t=JSON.parse(e);return t&&typeof t==="object"?t:null}catch(t){console.warn("[NgxViewBuilderRenderer] Failed to parse pageJson.",{error:t instanceof Error?t.message:t});return null}return e}normalizeStructureJsonInput(e){const t=this.normalizeStructureInput(e);if(!t)return null;try{return JSON.stringify(t)}catch(n){console.warn("[NgxViewBuilderRenderer] Failed to serialize pageJson.",{error:n instanceof Error?n.message:n});return null}}normalizeDataInput(e){if(!e)return null;if(typeof e==="string")try{const t=JSON.parse(e);return t&&typeof t==="object"?t:null}catch(t){console.warn("[NgxViewBuilderRenderer] Failed to parse dataJson.",{error:t instanceof Error?t.message:t});return null}return e}normalizeDataJsonInput(e){const t=this.normalizeDataInput(e);if(!t)return null;try{return JSON.stringify(t)}catch(n){console.warn("[NgxViewBuilderRenderer] Failed to serialize dataJson.",{error:n instanceof Error?n.message:n});return null}}serializeStructure(e){if(!e)return null;try{return JSON.stringify(e)}catch(t){console.warn("[NgxViewBuilderRenderer] Failed to serialize runtime structure.",{error:t instanceof Error?t.message:t});return null}}serializeData(e){try{return JSON.stringify(this.ensureDataObject(e))}catch(t){console.warn("[NgxViewBuilderRenderer] Failed to serialize runtime data.",{error:t instanceof Error?t.message:t});return"{}"}}ensureDataObject(e){if(!e||typeof e!=="object"||Array.isArray(e))return{};return e}deepCloneData(e){if(e===null||e===void 0||typeof e!=="object")return e;try{if(typeof structuredClone==="function")return structuredClone(e)}catch{}try{return JSON.parse(JSON.stringify(e))}catch{return e}}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Ut,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.1.0",version:"22.2.1",type:Ut,isStandalone:true,selector:"ngx-view-builder-renderer",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:false,transformFunction:null},pageJson:{classPropertyName:"pageJson",publicName:"pageJson",isSignal:true,isRequired:false,transformFunction:null},dataJson:{classPropertyName:"dataJson",publicName:"dataJson",isSignal:true,isRequired:false,transformFunction:null},language:{classPropertyName:"language",publicName:"language",isSignal:true,isRequired:false,transformFunction:null},theme:{classPropertyName:"theme",publicName:"theme",isSignal:true,isRequired:false,transformFunction:null},uiDictionaries:{classPropertyName:"uiDictionaries",publicName:"uiDictionaries",isSignal:true,isRequired:false,transformFunction:null},contentTranslations:{classPropertyName:"contentTranslations",publicName:"contentTranslations",isSignal:true,isRequired:false,transformFunction:null},cssVariables:{classPropertyName:"cssVariables",publicName:"cssVariables",isSignal:true,isRequired:false,transformFunction:null},externalConfig:{classPropertyName:"externalConfig",publicName:"externalConfig",isSignal:true,isRequired:false,transformFunction:null},externalConfigUrl:{classPropertyName:"externalConfigUrl",publicName:"externalConfigUrl",isSignal:true,isRequired:false,transformFunction:null},viewportSettings:{classPropertyName:"viewportSettings",publicName:"viewportSettings",isSignal:true,isRequired:false,transformFunction:null},activeTab:{classPropertyName:"activeTab",publicName:"activeTab",isSignal:true,isRequired:false,transformFunction:null},hideHeaderTabs:{classPropertyName:"hideHeaderTabs",publicName:"hideHeaderTabs",isSignal:true,isRequired:false,transformFunction:null},headerActions:{classPropertyName:"headerActions",publicName:"headerActions",isSignal:true,isRequired:false,transformFunction:null},runtimeSettings:{classPropertyName:"runtimeSettings",publicName:"runtimeSettings",isSignal:true,isRequired:false,transformFunction:null}},outputs:{valueChanged:"valueChanged",structureChanged:"structureChanged",tabChanged:"tabChanged",languageChanged:"languageChanged",saveRequested:"saveRequested",headerActionRequested:"headerActionRequested",tableSettingsChanged:"tableSettingsChanged",tableSettingsApplied:"tableSettingsApplied",tableSettingsRequested:"tableSettingsRequested",tableSettingsSaveRequested:"tableSettingsSaveRequested",tableFiltersChanged:"tableFiltersChanged",tableFiltersApplied:"tableFiltersApplied",tableSavedFiltersChanged:"tableSavedFiltersChanged",tableSavedFiltersRequested:"tableSavedFiltersRequested",tableSavedFilterSaveRequested:"tableSavedFilterSaveRequested"},providers:Y,ngImport:l,template:'<section\n class="ngx-view-builder-renderer nvb-root"\n aria-label="Form renderer"\n data-testid="ngx-view-builder-renderer-root"\n>\n <runtime-preview\n [viewportSettings]="resolvedViewportSettings()"\n [runtimePreviewSettings]="resolvedPreviewSettings()"\n ></runtime-preview>\n</section>\n\n<confirm-dialog />\n',styles:['@layer reset,tokens,components,fpUtilities,elements;@layer reset{.nvb-root,.nvb-root *,.nvb-root *:before,.nvb-root *:after{margin:0;padding:0;box-sizing:border-box}.nvb-root{height:100%;line-height:1.5;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;font-family:sans-serif}.nvb-root ul,.nvb-root ol{list-style:none}.nvb-root a{text-decoration:none;color:inherit}.nvb-root img,.nvb-root picture,.nvb-root video,.nvb-root canvas,.nvb-root svg{display:block;max-width:100%;height:auto}.nvb-root input,.nvb-root button,.nvb-root textarea,.nvb-root select{font:inherit}.nvb-root button{border:none;background:none;cursor:pointer}.nvb-root table{border-collapse:collapse;border-spacing:0}}@layer tokens{@layer tokens{:host,.nvb-root{--nvb-font-family-base: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;--nvb-color-primary-050: oklch(98.04% .0104 251.42);--nvb-color-primary-100: oklch(95.63% .0247 251.98);--nvb-color-primary-200: oklch(91.21% .0518 252.79);--nvb-color-primary-300: oklch(84.55% .0888 253.67);--nvb-color-primary-400: oklch(75.39% .1293 254.94);--nvb-color-primary-500: oklch(64.21% .1552 256.62);--nvb-color-primary-600: oklch(56.71% .1412 257.44);--nvb-color-primary-700: oklch(48.29% .1191 258.32);--nvb-color-primary-800: oklch(40.54% .0992 258.96);--nvb-color-primary-900: oklch(31.48% .0762 259.64);--nvb-color-primary-950: oklch(24.86% .0581 260.47);--nvb-color-neutral-000: oklch(100% .0001 89.88);--nvb-color-neutral-050: oklch(98.38% .0035 247.86);--nvb-color-neutral-100: oklch(96.76% .007 247.9);--nvb-color-neutral-200: oklch(92.58% .0132 255.03);--nvb-color-neutral-300: oklch(86.94% .0199 253.37);--nvb-color-neutral-400: oklch(71% .0348 256.79);--nvb-color-neutral-500: oklch(55.64% .0398 256.82);--nvb-color-neutral-600: oklch(45.05% .0371 256.83);--nvb-color-neutral-700: oklch(37.52% .0394 256.85);--nvb-color-neutral-800: oklch(27.53% .0364 259.7);--nvb-color-neutral-900: oklch(20.64% .0388 265.55);--nvb-color-neutral-950: oklch(12.92% .0415 265.15);--nvb-color-risk-050: oklch(96.78% .0142 17.4);--nvb-color-risk-100: oklch(93.44% .0314 17.73);--nvb-color-risk-200: oklch(88.03% .0615 18.39);--nvb-color-risk-300: oklch(80.98% .1025 19.54);--nvb-color-risk-400: oklch(71.23% .1656 22.18);--nvb-color-risk-500: oklch(63.56% .2082 25.38);--nvb-color-risk-600: oklch(57.86% .2137 27.17);--nvb-color-risk-700: oklch(50.79% .1918 27.56);--nvb-color-risk-800: oklch(44.1% .1603 26.89);--nvb-color-risk-900: oklch(39.96% .1348 25.77);--nvb-color-risk-950: oklch(25.26% .0866 26);--nvb-color-caution-050: oklch(98.66% .0218 95.28);--nvb-color-caution-100: oklch(96.22% .0569 95.61);--nvb-color-caution-200: oklch(92.57% .1141 95.75);--nvb-color-caution-300: oklch(88.13% .1526 91.77);--nvb-color-caution-400: oklch(83.34% .1641 83.87);--nvb-color-caution-500: oklch(76.97% .1645 70.61);--nvb-color-caution-600: oklch(66.88% .1588 57.96);--nvb-color-caution-700: oklch(55.42% .1447 49.16);--nvb-color-caution-800: oklch(47.06% .1236 46.53);--nvb-color-caution-900: oklch(40.96% .1037 46.31);--nvb-color-caution-950: oklch(27.8% .0739 45.8);--nvb-color-warning-050: oklch(98.66% .0218 95.28);--nvb-color-warning-100: oklch(96.22% .0569 95.61);--nvb-color-warning-200: oklch(92.57% .1141 95.75);--nvb-color-warning-300: oklch(88.13% .1526 91.77);--nvb-color-warning-400: oklch(83.34% .1641 83.87);--nvb-color-warning-500: oklch(76.97% .1645 70.61);--nvb-color-warning-600: oklch(66.88% .1588 57.96);--nvb-color-warning-700: oklch(55.42% .1447 49.16);--nvb-color-warning-800: oklch(47.06% .1236 46.53);--nvb-color-warning-900: oklch(40.96% .1037 46.31);--nvb-color-warning-950: oklch(27.8% .0739 45.8);--nvb-color-success-050: oklch(98.36% .0162 155.55);--nvb-color-success-100: oklch(96.46% .0405 157.07);--nvb-color-success-200: oklch(92.46% .0811 155.98);--nvb-color-success-300: oklch(87.12% .137 154.59);--nvb-color-success-400: oklch(79.99% .1816 151.78);--nvb-color-success-500: oklch(72.05% .192 149.49);--nvb-color-success-600: oklch(62.3% .1688 149.18);--nvb-color-success-700: oklch(52.48% .1373 149.83);--nvb-color-success-800: oklch(44.61% .1073 151.49);--nvb-color-success-900: oklch(38.98% .0885 152.69);--nvb-color-success-950: oklch(26.61% .0625 153.04);--nvb-color-info-050: oklch(97.67% .0127 236.62);--nvb-color-info-100: oklch(95.35% .024 236.81);--nvb-color-info-200: oklch(89.99% .0556 231.68);--nvb-color-info-300: oklch(82.95% .1004 229.56);--nvb-color-info-400: oklch(75.84% .1373 231.6);--nvb-color-info-500: oklch(67.76% .1481 238.1);--nvb-color-info-600: oklch(58.63% .1366 241.18);--nvb-color-info-700: oklch(49.96% .1179 242.21);--nvb-color-info-800: oklch(43.8% .0988 240.83);--nvb-color-info-900: oklch(39.2% .0844 240.76);--nvb-color-info-950: oklch(29.47% .0635 243.15);--nvb-color-text-000: oklch(100% .0001 89.88);--nvb-color-text-050: oklch(98.38% .0035 247.86);--nvb-color-text-100: oklch(96.76% .007 247.9);--nvb-color-text-200: oklch(92.58% .0132 255.03);--nvb-color-text-300: oklch(86.94% .0199 253.37);--nvb-color-text-400: oklch(71% .0348 256.79);--nvb-color-text-500: oklch(55.64% .0398 256.82);--nvb-color-text-600: oklch(45.05% .0371 256.83);--nvb-color-text-700: oklch(37.52% .0394 256.85);--nvb-color-text-800: oklch(27.53% .0364 259.7);--nvb-color-text-900: oklch(20.64% .0388 265.55);--nvb-color-text-950: oklch(12.92% .0415 265.15);--nvb-radius-sm: 4px;--nvb-radius-md: 6px;--nvb-radius-lg: 8px;--nvb-radius-xl: 12px;--nvb-radius-full: 999px;--nvb-space-0: 2px;--nvb-space-1: 4px;--nvb-space-2: 6px;--nvb-space-3: 8px;--nvb-space-4: 10px;--nvb-space-5: 12px;--nvb-space-6: 16px;--nvb-space-7: 20px;--nvb-space-8: 24px;--nvb-space-9: 32px;--nvb-text-caption2: 10px;--nvb-text-caption1: 12px;--nvb-text-body1: 14px;--nvb-text-subtitle2: 16px;--nvb-text-subtitle1: 20px;--nvb-text-title3: 24px;--nvb-text-title2: 28px;--nvb-text-sm: var(--nvb-text-caption1);--nvb-text-base: var(--nvb-text-body1);--nvb-text-md: var(--nvb-text-body1);--nvb-text-lg: var(--nvb-text-subtitle2);--nvb-color-surface-mix-target: var(--nvb-color-neutral-000);--nvb-chart-single: var(--nvb-color-primary-500);--nvb-chart-1: #2a78d6;--nvb-chart-2: #eb6834;--nvb-chart-3: #1baf7a;--nvb-chart-4: #eda100;--nvb-chart-5: #e87ba4;--nvb-chart-6: #008300;--nvb-chart-7: #4a3aa7;--nvb-chart-8: #e34948;--nvb-chart-other: var(--nvb-color-neutral-400)}:host([data-theme="dark"]),:host(.nvb-dark),.nvb-root.nvb-dark,.nvb-root[data-theme=dark],.nvb-section-theme-dark{--nvb-font-family-base: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;--nvb-color-primary-050: oklch(24.86% .0581 260.47);--nvb-color-primary-100: oklch(31.48% .0762 259.64);--nvb-color-primary-200: oklch(40.54% .0992 258.96);--nvb-color-primary-300: oklch(48.29% .1191 258.32);--nvb-color-primary-400: oklch(56.71% .1412 257.44);--nvb-color-primary-500: oklch(64.21% .1552 256.62);--nvb-color-primary-600: oklch(75.39% .1293 254.94);--nvb-color-primary-700: oklch(84.55% .0888 253.67);--nvb-color-primary-800: oklch(91.21% .0518 252.79);--nvb-color-primary-900: oklch(95.63% .0247 251.98);--nvb-color-primary-950: oklch(98.04% .0104 251.42);--nvb-color-neutral-000: oklch(19% .006 286);--nvb-color-neutral-050: oklch(23% .007 286);--nvb-color-neutral-100: oklch(27% .008 286);--nvb-color-neutral-200: oklch(38% .009 286);--nvb-color-neutral-300: oklch(49.5% .01 286);--nvb-color-neutral-400: oklch(58% .01 286);--nvb-color-neutral-500: oklch(65% .009 286);--nvb-color-neutral-600: oklch(74% .007 286);--nvb-color-neutral-700: oklch(82% .005 286);--nvb-color-neutral-800: oklch(88% .004 286);--nvb-color-neutral-900: oklch(93% .003 286);--nvb-color-neutral-950: oklch(97% .002 286);--nvb-color-risk-050: oklch(25.26% .0866 26);--nvb-color-risk-100: oklch(39.96% .1348 25.77);--nvb-color-risk-200: oklch(44.1% .1603 26.89);--nvb-color-risk-300: oklch(50.79% .1918 27.56);--nvb-color-risk-400: oklch(57.86% .2137 27.17);--nvb-color-risk-500: oklch(63.56% .2082 25.38);--nvb-color-risk-600: oklch(71.23% .1656 22.18);--nvb-color-risk-700: oklch(80.98% .1025 19.54);--nvb-color-risk-800: oklch(88.03% .0615 18.39);--nvb-color-risk-900: oklch(93.44% .0314 17.73);--nvb-color-risk-950: oklch(96.78% .0142 17.4);--nvb-color-caution-050: oklch(27.8% .0739 45.8);--nvb-color-caution-100: oklch(40.96% .1037 46.31);--nvb-color-caution-200: oklch(47.06% .1236 46.53);--nvb-color-caution-300: oklch(55.42% .1447 49.16);--nvb-color-caution-400: oklch(66.88% .1588 57.96);--nvb-color-caution-500: oklch(76.97% .1645 70.61);--nvb-color-caution-600: oklch(83.34% .1641 83.87);--nvb-color-caution-700: oklch(88.13% .1526 91.77);--nvb-color-caution-800: oklch(92.57% .1141 95.75);--nvb-color-caution-900: oklch(96.22% .0569 95.61);--nvb-color-caution-950: oklch(98.66% .0218 95.28);--nvb-color-warning-050: oklch(27.8% .0739 45.8);--nvb-color-warning-100: oklch(40.96% .1037 46.31);--nvb-color-warning-200: oklch(47.06% .1236 46.53);--nvb-color-warning-300: oklch(55.42% .1447 49.16);--nvb-color-warning-400: oklch(66.88% .1588 57.96);--nvb-color-warning-500: oklch(76.97% .1645 70.61);--nvb-color-warning-600: oklch(83.34% .1641 83.87);--nvb-color-warning-700: oklch(88.13% .1526 91.77);--nvb-color-warning-800: oklch(92.57% .1141 95.75);--nvb-color-warning-900: oklch(96.22% .0569 95.61);--nvb-color-warning-950: oklch(98.66% .0218 95.28);--nvb-color-success-050: oklch(26.61% .0625 153.04);--nvb-color-success-100: oklch(38.98% .0885 152.69);--nvb-color-success-200: oklch(44.61% .1073 151.49);--nvb-color-success-300: oklch(52.48% .1373 149.83);--nvb-color-success-400: oklch(62.3% .1688 149.18);--nvb-color-success-500: oklch(72.05% .192 149.49);--nvb-color-success-600: oklch(79.99% .1816 151.78);--nvb-color-success-700: oklch(87.12% .137 154.59);--nvb-color-success-800: oklch(92.46% .0811 155.98);--nvb-color-success-900: oklch(96.46% .0405 157.07);--nvb-color-success-950: oklch(98.36% .0162 155.55);--nvb-color-info-050: oklch(29.47% .0635 243.15);--nvb-color-info-100: oklch(39.2% .0844 240.76);--nvb-color-info-200: oklch(43.8% .0988 240.83);--nvb-color-info-300: oklch(49.96% .1179 242.21);--nvb-color-info-400: oklch(58.63% .1366 241.18);--nvb-color-info-500: oklch(67.76% .1481 238.1);--nvb-color-info-600: oklch(75.84% .1373 231.6);--nvb-color-info-700: oklch(82.95% .1004 229.56);--nvb-color-info-800: oklch(89.99% .0556 231.68);--nvb-color-info-900: oklch(95.35% .024 236.81);--nvb-color-info-950: oklch(97.67% .0127 236.62);--nvb-color-text-000: oklch(19% .006 286);--nvb-color-text-050: oklch(23% .007 286);--nvb-color-text-100: oklch(27% .008 286);--nvb-color-text-200: oklch(38% .009 286);--nvb-color-text-300: oklch(49.5% .01 286);--nvb-color-text-400: oklch(58% .01 286);--nvb-color-text-500: oklch(65% .009 286);--nvb-color-text-600: oklch(74% .007 286);--nvb-color-text-700: oklch(82% .005 286);--nvb-color-text-800: oklch(88% .004 286);--nvb-color-text-900: oklch(93% .003 286);--nvb-color-text-950: oklch(97% .002 286);--nvb-radius-sm: 4px;--nvb-radius-md: 6px;--nvb-radius-lg: 8px;--nvb-radius-xl: 12px;--nvb-radius-full: 999px;--nvb-space-0: 2px;--nvb-space-1: 4px;--nvb-space-2: 6px;--nvb-space-3: 8px;--nvb-space-4: 10px;--nvb-space-5: 12px;--nvb-space-6: 16px;--nvb-space-7: 20px;--nvb-space-8: 24px;--nvb-space-9: 32px;--nvb-text-caption2: 10px;--nvb-text-caption1: 12px;--nvb-text-body1: 14px;--nvb-text-subtitle2: 16px;--nvb-text-subtitle1: 20px;--nvb-text-title3: 24px;--nvb-text-title2: 28px;--nvb-text-sm: var(--nvb-text-caption1);--nvb-text-base: var(--nvb-text-body1);--nvb-text-md: var(--nvb-text-body1);--nvb-text-lg: var(--nvb-text-subtitle2);--nvb-color-surface-mix-target: var(--nvb-color-neutral-050);--nvb-chart-single: var(--nvb-color-primary-500);--nvb-chart-1: #3987e5;--nvb-chart-2: #d95926;--nvb-chart-3: #199e70;--nvb-chart-4: #c98500;--nvb-chart-5: #d55181;--nvb-chart-6: #008300;--nvb-chart-7: #9085e9;--nvb-chart-8: #e66767;--nvb-chart-other: var(--nvb-color-neutral-500)}:host,.nvb-root{color-scheme:light;background-color:var(--nvb-surface, var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-800);scrollbar-color:var(--nvb-color-neutral-300) transparent}:host([data-theme="dark"]),:host(.nvb-dark),:host([data-theme="dark"]) .nvb-root,:host(.nvb-dark) .nvb-root,.nvb-root.nvb-dark,.nvb-root[data-theme=dark],.nvb-section-theme-dark{color-scheme:dark}}}@layer components{.nvb-root,.nvb-section-theme-dark{--nvb-button-height-lg: 40px;--nvb-button-height-ms: 32px;--nvb-button-height-sm: 32px;--nvb-button-height-sx: 28px;--nvb-button-padding-lg: 0 16px;--nvb-button-padding-ms: 0 12px;--nvb-button-padding-sm: 0 10px;--nvb-button-padding-sx: 0 8px;--nvb-button-font-size-lg: 14px;--nvb-button-font-size-ms: 13px;--nvb-button-font-size-sm: 13px;--nvb-button-font-size-sx: 12px;--nvb-button-radius: var(--nvb-radius-md);--nvb-button-gap: 6px;--nvb-button-border-color: var(--nvb-color-neutral-300);--nvb-button-bg: var(--nvb-color-neutral-000);--nvb-button-text-color: var(--nvb-color-neutral-800);--nvb-button-hover-bg: var(--nvb-color-neutral-050);--nvb-button-primary-bg: var(--nvb-color-primary-600);--nvb-button-primary-hover-bg: var(--nvb-color-primary-700);--nvb-button-danger-bg: var(--nvb-color-risk-050);--nvb-button-danger-text-color: var(--nvb-color-risk-700);--nvb-button-danger-border-color: var(--nvb-color-risk-300);--nvb-surface-bg: var(--nvb-color-neutral-000);--nvb-surface-muted-bg: color-mix(in oklab, var(--nvb-color-neutral-050) 84%, var(--nvb-color-neutral-000));--nvb-stroke-subtle: var(--nvb-color-neutral-200);--nvb-stroke-strong: var(--nvb-color-neutral-300);--nvb-shadow-2: 0 1px 2px color-mix(in oklab, var(--nvb-color-neutral-950) 6%, transparent);--nvb-shadow-8: 0 4px 8px color-mix(in oklab, var(--nvb-color-neutral-950) 10%, transparent), 0 12px 24px color-mix(in oklab, var(--nvb-color-neutral-950) 8%, transparent);--nvb-shadow-16: 0 8px 16px color-mix(in oklab, var(--nvb-color-neutral-950) 12%, transparent), 0 24px 48px color-mix(in oklab, var(--nvb-color-neutral-950) 14%, transparent);--nvb-dialog-radius: var(--nvb-radius-xl);--nvb-menu-radius: var(--nvb-radius-lg);--nvb-tablist-height: 40px;--nvb-card-bg: var(--nvb-color-neutral-000);--nvb-card-border-color: var(--nvb-color-neutral-200);--nvb-card-radius: var(--nvb-radius-lg);--nvb-card-shadow: var(--nvb-shadow-2);--nvb-card-padding: 12px}.nvb-root .nvb-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.nvb-root .nvb-button,.nvb-root .nvb-control__add-row-button{box-sizing:border-box;min-height:var(--nvb-button-height-ms);padding:var(--nvb-button-padding-ms);border:1px solid var(--nvb-button-border-color);border-radius:var(--nvb-button-radius);background:var(--nvb-button-bg);color:var(--nvb-button-text-color);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--nvb-button-gap);font-family:var(--nvb-font-family);font-size:var(--nvb-button-font-size-ms);font-weight:600;line-height:20px;white-space:nowrap;overflow:visible;transition:background-color .2s ease,border-color .2s ease,color .2s ease,opacity .2s ease,box-shadow .2s ease;box-shadow:none}.nvb-root .nvb-button:focus-visible,.nvb-root .nvb-control__add-row-button:focus-visible,.nvb-root .nvb-icon-button:focus-visible{outline:0;border-color:var(--nvb-input-focus-border-color, var(--nvb-color-primary-500));box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-button:hover:not(:disabled),.nvb-root .nvb-control__add-row-button:hover:not(:disabled){background:var(--nvb-button-hover-bg);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900);box-shadow:none}.nvb-root .nvb-button:disabled,.nvb-root .nvb-control__add-row-button:disabled{cursor:not-allowed;opacity:.5;box-shadow:none}.nvb-root .nvb-button--lg{min-height:var(--nvb-button-height-lg);padding:var(--nvb-button-padding-lg);font-size:var(--nvb-button-font-size-lg)}.nvb-root .nvb-button--ms,.nvb-root .nvb-button--md{min-height:var(--nvb-button-height-ms);padding:var(--nvb-button-padding-ms);font-size:var(--nvb-button-font-size-ms)}.nvb-root .nvb-button--sm{min-height:var(--nvb-button-height-sm);padding:var(--nvb-button-padding-sm);font-size:var(--nvb-button-font-size-sm)}.nvb-root .nvb-button--sx,.nvb-root .nvb-button--xs{min-height:var(--nvb-button-height-sx);padding:var(--nvb-button-padding-sx);font-size:var(--nvb-button-font-size-sx)}.nvb-root .nvb-button--left{justify-content:flex-start}.nvb-root .nvb-button--full{width:100%}.nvb-root .nvb-button--subtle{border-color:transparent;background:transparent;color:var(--nvb-color-neutral-700)}.nvb-root .nvb-button--subtle:hover:not(:disabled){border-color:transparent;background:color-mix(in oklab,var(--nvb-color-neutral-100) 72%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-900)}.nvb-root .nvb-button--neutral{background:var(--nvb-color-neutral-000)}.nvb-root .nvb-button--primary,.nvb-root .nvb-button--active{border-color:var(--nvb-color-primary-500);background:var(--nvb-button-primary-bg);color:var(--nvb-color-neutral-000);box-shadow:none}.nvb-root .nvb-button--primary-soft{border-color:transparent;background:color-mix(in oklab,var(--nvb-color-primary-050) 76%,var(--nvb-color-neutral-000));color:var(--nvb-color-primary-700)}.nvb-root .nvb-button--primary:hover:not(:disabled),.nvb-root .nvb-button--active:hover:not(:disabled){border-color:var(--nvb-color-primary-600);background:var(--nvb-button-primary-hover-bg);color:var(--nvb-color-neutral-000)}.nvb-root .nvb-button--primary-soft:hover:not(:disabled){border-color:var(--nvb-color-primary-500);background:color-mix(in oklab,var(--nvb-color-primary-050) 70%,var(--nvb-color-primary-100, var(--nvb-color-primary-050)));color:var(--nvb-color-primary-800)}.nvb-root .nvb-button--danger{border-color:var(--nvb-button-danger-border-color);background:var(--nvb-button-danger-bg);color:var(--nvb-button-danger-text-color)}.nvb-root .nvb-button--danger:hover:not(:disabled),.nvb-root .nvb-icon-button--danger:hover:not(:disabled){border-color:var(--nvb-color-risk-400);background:color-mix(in oklab,var(--nvb-color-risk-050) 70%,var(--nvb-color-risk-100, var(--nvb-color-risk-050)));color:var(--nvb-color-risk-800, var(--nvb-color-risk-700))}.nvb-root .nvb-button__icon,.nvb-root .nvb-control__add-row-button>.material-symbols-outlined{font-size:15px;line-height:1}.nvb-root .nvb-control__add-row-button{border-color:var(--nvb-control-button-border-color);background:var(--nvb-control-button-bg);color:var(--nvb-control-button-text-color);font-size:var(--nvb-control-font-size);height:var(--nvb-control-height);min-height:var(--nvb-control-height);padding:0 var(--nvb-control-padding-x)}.nvb-root .nvb-control__add-row-button:hover:not(:disabled){border-color:var(--nvb-control-button-hover-border-color);background:var(--nvb-control-button-hover-bg);color:var(--nvb-control-button-hover-text-color)}.nvb-root .nvb-control__add-row-button--compact{height:var(--nvb-control-height-sm);min-height:var(--nvb-control-height-sm);padding:0 10px;font-size:12px}.nvb-root .nvb-control__add-row-button--compact>.material-symbols-outlined{font-size:16px}.nvb-root .nvb-control__add-row-button--link{min-height:26px;padding:0;border-color:transparent;background:transparent;color:var(--nvb-color-primary-600);border-radius:var(--nvb-radius-md);font-size:14px;font-weight:600;justify-content:flex-start}.nvb-root .nvb-control__add-row-button--link:hover:not(:disabled){border-color:transparent;background:transparent;color:var(--nvb-color-primary-700)}.nvb-root .nvb-control__add-row-button--link.nvb-control__add-row-button--compact{padding:0 2px;font-size:12px}.nvb-root .nvb-control__add-row-button nvb-icon{width:16px;height:16px;display:inline-flex}.nvb-root .nvb-button__label{display:inline-flex;align-items:center;min-height:20px;line-height:20px;overflow:hidden;text-overflow:ellipsis}.nvb-root .nvb-icon-button{width:var(--nvb-button-height-ms);min-width:var(--nvb-button-height-ms);height:var(--nvb-button-height-ms);min-height:var(--nvb-button-height-ms);border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:background-color .16s ease,border-color .16s ease,color .16s ease,opacity .16s ease,box-shadow .16s ease;box-shadow:none}.nvb-root .nvb-icon-button:hover:not(:disabled){background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900)}.nvb-root .nvb-icon-button:disabled{cursor:not-allowed;opacity:.5;box-shadow:none}.nvb-root .nvb-icon-button--lg{width:var(--nvb-button-height-lg);min-width:var(--nvb-button-height-lg);height:var(--nvb-button-height-lg);min-height:var(--nvb-button-height-lg)}.nvb-root .nvb-icon-button--sm{width:var(--nvb-button-height-sm);min-width:var(--nvb-button-height-sm);height:var(--nvb-button-height-sm);min-height:var(--nvb-button-height-sm)}.nvb-root .nvb-icon-button--sx,.nvb-root .nvb-icon-button--xs{width:var(--nvb-button-height-sx);min-width:var(--nvb-button-height-sx);height:var(--nvb-button-height-sx);min-height:var(--nvb-button-height-sx);border-radius:var(--nvb-radius-md)}.nvb-root .nvb-icon-button--danger{border-color:var(--nvb-button-danger-border-color);background:var(--nvb-button-danger-bg);color:var(--nvb-button-danger-text-color)}.nvb-root .nvb-icon-button--ghost{border-color:transparent;background:transparent}.nvb-root .nvb-icon-button--ghost:hover:not(:disabled){border-color:transparent;background:color-mix(in oklab,var(--nvb-color-neutral-100) 72%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-800)}.nvb-root .nvb-icon-button--drag{cursor:grab}.nvb-root .nvb-icon-button--drag:active{cursor:grabbing;transform:scale(.98)}.nvb-root .nvb-icon-button span,.nvb-root .nvb-icon-button nvb-icon{font-size:18px;line-height:1}.nvb-root .nvb-control__add-row-button nvb-icon,.nvb-root .nvb-control__add-row-button .nvb-icon-svg{font-size:16px;line-height:1}.nvb-root .nvb-icon-button--sx span,.nvb-root .nvb-icon-button--sx nvb-icon,.nvb-root .nvb-icon-button--xs span,.nvb-root .nvb-icon-button--xs nvb-icon{font-size:15px}.nvb-root .nvb-search-field{position:relative}.nvb-root .nvb-search-field .nvb-search-field__icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);z-index:1;display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;color:var(--nvb-color-neutral-500);font-size:16px;line-height:1;pointer-events:none}.nvb-root .nvb-search-field .nvb-search-field__input{display:block;box-sizing:border-box;width:100%;height:32px;min-height:32px;padding:0 32px 0 36px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-input-radius, var(--nvb-radius-md));background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);font-size:12px;font-weight:400;line-height:20px;box-shadow:none;transition:border-color .12s ease,background-color .12s ease,box-shadow .12s ease}.nvb-root .nvb-search-field.nvb-search-field--no-icon .nvb-search-field__input{padding-left:12px}.nvb-root .nvb-search-field .nvb-search-field__input::placeholder{color:var(--nvb-color-neutral-400);font-weight:400}.nvb-root .nvb-search-field .nvb-search-field__input:focus,.nvb-root .nvb-search-field .nvb-search-field__input:focus-visible{outline:none;border-color:var(--nvb-color-primary-500);box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-search-field .nvb-search-field__clear{position:absolute;right:6px;top:50%;transform:translateY(-50%);z-index:2;color:var(--nvb-color-neutral-500)}}@layer fpUtilities{@layer fpUtilities{.nvb-root .nvb-hidden{display:none!important}.nvb-root .nvb-flex-center{display:flex;justify-content:center;align-items:center}.nvb-root .nvb-flex-left{display:flex;justify-content:flex-start;align-items:center}.nvb-root .nvb-flex-right{display:flex;justify-content:flex-end;align-items:center}.nvb-root .nvb-bg-primary-50{background-color:var(--nvb-color-primary-050)}.nvb-root .nvb-bg-primary-100{background-color:var(--nvb-color-primary-100)}.nvb-root .nvb-bg-primary-200{background-color:var(--nvb-color-primary-200)}.nvb-root .nvb-bg-primary-300{background-color:var(--nvb-color-primary-300)}.nvb-root .nvb-bg-primary-400{background-color:var(--nvb-color-primary-400)}.nvb-root .nvb-bg-primary-500{background-color:var(--nvb-color-primary-500)}.nvb-root .nvb-bg-primary-600{background-color:var(--nvb-color-primary-600)}.nvb-root .nvb-bg-primary-700{background-color:var(--nvb-color-primary-700)}.nvb-root .nvb-bg-primary-800{background-color:var(--nvb-color-primary-800)}.nvb-root .nvb-bg-primary-900{background-color:var(--nvb-color-primary-900)}.nvb-root .nvb-bg-primary-950{background-color:var(--nvb-color-primary-950)}.nvb-root .nvb-bg-neutral-000{background-color:var(--nvb-color-neutral-000)}.nvb-root .nvb-bg-neutral-050{background-color:var(--nvb-color-neutral-050)}.nvb-root .nvb-bg-neutral-100{background-color:var(--nvb-color-neutral-100)}.nvb-root .nvb-bg-neutral-200{background-color:var(--nvb-color-neutral-200)}.nvb-root .nvb-bg-neutral-300{background-color:var(--nvb-color-neutral-300)}.nvb-root .nvb-bg-neutral-400{background-color:var(--nvb-color-neutral-400)}.nvb-root .nvb-bg-neutral-500{background-color:var(--nvb-color-neutral-500)}.nvb-root .nvb-bg-neutral-600{background-color:var(--nvb-color-neutral-600)}.nvb-root .nvb-bg-neutral-700{background-color:var(--nvb-color-neutral-700)}.nvb-root .nvb-bg-neutral-800{background-color:var(--nvb-color-neutral-800)}.nvb-root .nvb-bg-neutral-900{background-color:var(--nvb-color-neutral-900)}.nvb-root .nvb-bg-neutral-950{background-color:var(--nvb-color-neutral-950)}.nvb-root .nvb-bg-risk-50{background-color:var(--nvb-color-risk-050)}.nvb-root .nvb-bg-risk-100{background-color:var(--nvb-color-risk-100)}.nvb-root .nvb-bg-risk-200{background-color:var(--nvb-color-risk-200)}.nvb-root .nvb-bg-risk-300{background-color:var(--nvb-color-risk-300)}.nvb-root .nvb-bg-risk-400{background-color:var(--nvb-color-risk-400)}.nvb-root .nvb-bg-risk-500{background-color:var(--nvb-color-risk-500)}.nvb-root .nvb-bg-risk-600{background-color:var(--nvb-color-risk-600)}.nvb-root .nvb-bg-risk-700{background-color:var(--nvb-color-risk-700)}.nvb-root .nvb-bg-risk-800{background-color:var(--nvb-color-risk-800)}.nvb-root .nvb-bg-risk-900{background-color:var(--nvb-color-risk-900)}.nvb-root .nvb-bg-risk-950{background-color:var(--nvb-color-risk-950)}.nvb-root .nvb-bg-warning-50{background-color:var(--nvb-color-warning-050)}.nvb-root .nvb-bg-warning-100{background-color:var(--nvb-color-warning-100)}.nvb-root .nvb-bg-warning-200{background-color:var(--nvb-color-warning-200)}.nvb-root .nvb-bg-warning-300{background-color:var(--nvb-color-warning-300)}.nvb-root .nvb-bg-warning-400{background-color:var(--nvb-color-warning-400)}.nvb-root .nvb-bg-warning-500{background-color:var(--nvb-color-warning-500)}.nvb-root .nvb-bg-warning-600{background-color:var(--nvb-color-warning-600)}.nvb-root .nvb-bg-warning-700{background-color:var(--nvb-color-warning-700)}.nvb-root .nvb-bg-warning-800{background-color:var(--nvb-color-warning-800)}.nvb-root .nvb-bg-warning-900{background-color:var(--nvb-color-warning-900)}.nvb-root .nvb-bg-warning-950{background-color:var(--nvb-color-warning-950)}.nvb-root .nvb-bg-success-50{background-color:var(--nvb-color-success-050)}.nvb-root .nvb-bg-success-100{background-color:var(--nvb-color-success-100)}.nvb-root .nvb-bg-success-200{background-color:var(--nvb-color-success-200)}.nvb-root .nvb-bg-success-300{background-color:var(--nvb-color-success-300)}.nvb-root .nvb-bg-success-400{background-color:var(--nvb-color-success-400)}.nvb-root .nvb-bg-success-500{background-color:var(--nvb-color-success-500)}.nvb-root .nvb-bg-success-600{background-color:var(--nvb-color-success-600)}.nvb-root .nvb-bg-success-700{background-color:var(--nvb-color-success-700)}.nvb-root .nvb-bg-success-800{background-color:var(--nvb-color-success-800)}.nvb-root .nvb-bg-success-900{background-color:var(--nvb-color-success-900)}.nvb-root .nvb-bg-success-950{background-color:var(--nvb-color-success-950)}.nvb-root .nvb-bg-info-50{background-color:var(--nvb-color-info-050)}.nvb-root .nvb-bg-info-100{background-color:var(--nvb-color-info-100)}.nvb-root .nvb-bg-info-200{background-color:var(--nvb-color-info-200)}.nvb-root .nvb-bg-info-300{background-color:var(--nvb-color-info-300)}.nvb-root .nvb-bg-info-400{background-color:var(--nvb-color-info-400)}.nvb-root .nvb-bg-info-500{background-color:var(--nvb-color-info-500)}.nvb-root .nvb-bg-info-600{background-color:var(--nvb-color-info-600)}.nvb-root .nvb-bg-info-700{background-color:var(--nvb-color-info-700)}.nvb-root .nvb-bg-info-800{background-color:var(--nvb-color-info-800)}.nvb-root .nvb-bg-info-900{background-color:var(--nvb-color-info-900)}.nvb-root .nvb-bg-info-950{background-color:var(--nvb-color-info-950)}.nvb-root .nvb-bg-text-000{background-color:var(--nvb-color-text-000)}.nvb-root .nvb-bg-text-050{background-color:var(--nvb-color-text-050)}.nvb-root .nvb-bg-text-100{background-color:var(--nvb-color-text-100)}.nvb-root .nvb-bg-text-200{background-color:var(--nvb-color-text-200)}.nvb-root .nvb-bg-text-300{background-color:var(--nvb-color-text-300)}.nvb-root .nvb-bg-text-400{background-color:var(--nvb-color-text-400)}.nvb-root .nvb-bg-text-500{background-color:var(--nvb-color-text-500)}.nvb-root .nvb-bg-text-600{background-color:var(--nvb-color-text-600)}.nvb-root .nvb-bg-text-700{background-color:var(--nvb-color-text-700)}.nvb-root .nvb-bg-text-800{background-color:var(--nvb-color-text-800)}.nvb-root .nvb-bg-text-900{background-color:var(--nvb-color-text-900)}.nvb-root .nvb-bg-text-950{background-color:var(--nvb-color-text-950)}.nvb-root .nvb-text-neutral-0{color:var(--nvb-color-neutral-000)}.nvb-root .nvb-text-neutral-50{color:var(--nvb-color-neutral-050)}.nvb-root .nvb-text-neutral-100{color:var(--nvb-color-neutral-100)}.nvb-root .nvb-text-neutral-200{color:var(--nvb-color-neutral-200)}.nvb-root .nvb-text-neutral-300{color:var(--nvb-color-neutral-300)}.nvb-root .nvb-text-neutral-400{color:var(--nvb-color-neutral-400)}.nvb-root .nvb-text-neutral-500{color:var(--nvb-color-neutral-500)}.nvb-root .nvb-text-neutral-600{color:var(--nvb-color-neutral-600)}.nvb-root .nvb-text-neutral-700{color:var(--nvb-color-neutral-700)}.nvb-root .nvb-text-neutral-800{color:var(--nvb-color-neutral-800)}.nvb-root .nvb-text-neutral-900{color:var(--nvb-color-neutral-900)}.nvb-root .nvb-text-neutral-950{color:var(--nvb-color-neutral-950)}.nvb-root .nvb-p-2{padding:var(--nvb-space-2)}.nvb-root .nvb-p-3{padding:var(--nvb-space-3)}}}@layer elements{.nvb-root{--nvb-control-height: 40px;--nvb-control-height-sm: 32px;--nvb-control-padding-x: 12px;--nvb-control-font-size: 14px;--nvb-control-font-weight: 400;--nvb-control-radius: var(--nvb-radius-md);--nvb-input-height: 40px;--nvb-input-padding-x: 12px;--nvb-input-font-size: 14px;--nvb-input-radius: var(--nvb-radius-md);--nvb-input-border-width: 1px;--nvb-input-border-color: var(--nvb-color-neutral-300);--nvb-input-bg: var(--nvb-color-neutral-000);--nvb-input-text-color: var(--nvb-color-neutral-800);--nvb-input-placeholder-color: var(--nvb-color-neutral-500);--nvb-input-focus-border-color: var(--nvb-color-primary-500);--nvb-input-disabled-bg: var(--nvb-color-neutral-100);--nvb-input-disabled-text-color: var(--nvb-color-neutral-500);--nvb-input-error-border-color: var(--nvb-color-risk-500);--nvb-input-error-focus-border-color: var(--nvb-color-risk-600);--nvb-textarea-min-height: 120px;--nvb-textarea-padding-x: 12px;--nvb-textarea-padding-y: 12px;--nvb-control-button-border-width: 1px;--nvb-control-button-border-color: var(--nvb-color-neutral-300);--nvb-control-button-bg: var(--nvb-color-neutral-000);--nvb-control-button-text-color: var(--nvb-color-primary-700);--nvb-control-button-hover-border-color: var(--nvb-color-primary-300);--nvb-control-button-hover-bg: color-mix( in oklab, var(--nvb-color-primary-050) 40%, var(--nvb-color-neutral-000) );--nvb-control-button-hover-text-color: var(--nvb-color-primary-800);--nvb-checkbox-size: 18px;--nvb-checkbox-border-width: 1.5px;--nvb-checkbox-radius: var(--nvb-radius-sm);--nvb-checkbox-border-color: var(--nvb-color-neutral-300);--nvb-checkbox-bg: var(--nvb-color-neutral-000);--nvb-checkbox-checked-bg: var(--nvb-color-primary-500);--nvb-checkbox-checked-border-color: var(--nvb-color-primary-500);--nvb-checkbox-check-color: var(--nvb-color-neutral-000);--nvb-checkbox-disabled-bg: var(--nvb-color-neutral-100);--nvb-checkbox-disabled-opacity: .5;--nvb-radio-size: 18px;--nvb-radio-border-width: 1.5px;--nvb-radio-border-color: var(--nvb-color-neutral-300);--nvb-radio-bg: var(--nvb-color-neutral-000);--nvb-radio-checked-border-color: var(--nvb-color-primary-500);--nvb-radio-dot-size: 8px;--nvb-radio-dot-color: var(--nvb-color-primary-500);--nvb-radio-disabled-bg: var(--nvb-color-neutral-100);--nvb-radio-disabled-opacity: .5;--nvb-focus-ring: 0 0 0 1px var(--nvb-color-neutral-000), 0 0 0 3px color-mix(in oklab, var(--nvb-color-primary-400) 55%, transparent);--nvb-font-family: var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif );font-family:var(--nvb-font-family);color:var(--nvb-color-text-800)}:where(.nvb-root input[type=text],.nvb-root input[type=number],.nvb-root input[type=email],.nvb-root input[type=search],.nvb-root input[type=tel],.nvb-root input[type=url],.nvb-root input[type=password],.nvb-root input[type=date],.nvb-root input[type=datetime-local],.nvb-root input[type=month],.nvb-root input[type=time],.nvb-root input[type=week],.nvb-root select,.nvb-root textarea){border:var(--nvb-input-border-width) solid var(--nvb-input-border-color);border-radius:var(--nvb-input-radius);background:var(--nvb-input-bg);color:var(--nvb-input-text-color);font-family:var(--nvb-font-family);font-size:var(--nvb-input-font-size);line-height:20px;box-shadow:none;transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}:where(.nvb-root input[type=text],.nvb-root input[type=number],.nvb-root input[type=email],.nvb-root input[type=search],.nvb-root input[type=tel],.nvb-root input[type=url],.nvb-root input[type=password],.nvb-root input[type=date],.nvb-root input[type=datetime-local],.nvb-root input[type=month],.nvb-root input[type=time],.nvb-root input[type=week],.nvb-root select){min-height:var(--nvb-input-height);padding:0 var(--nvb-input-padding-x)}:where(.nvb-root textarea){min-height:var(--nvb-textarea-min-height);padding:var(--nvb-textarea-padding-y) var(--nvb-textarea-padding-x);resize:vertical}:where(.nvb-root input[type=text]:focus,.nvb-root input[type=number]:focus,.nvb-root input[type=email]:focus,.nvb-root input[type=search]:focus,.nvb-root input[type=tel]:focus,.nvb-root input[type=url]:focus,.nvb-root input[type=password]:focus,.nvb-root input[type=date]:focus,.nvb-root input[type=datetime-local]:focus,.nvb-root input[type=month]:focus,.nvb-root input[type=time]:focus,.nvb-root input[type=week]:focus,.nvb-root select:focus,.nvb-root textarea:focus){border-color:var(--nvb-input-focus-border-color);box-shadow:var(--nvb-focus-ring);outline:0}:where(.nvb-root input::placeholder,.nvb-root textarea::placeholder){color:var(--nvb-input-placeholder-color);opacity:1}:where(.nvb-root input[type=text]:disabled,.nvb-root input[type=number]:disabled,.nvb-root input[type=email]:disabled,.nvb-root input[type=search]:disabled,.nvb-root input[type=tel]:disabled,.nvb-root input[type=url]:disabled,.nvb-root input[type=password]:disabled,.nvb-root input[type=date]:disabled,.nvb-root input[type=datetime-local]:disabled,.nvb-root input[type=month]:disabled,.nvb-root input[type=time]:disabled,.nvb-root input[type=week]:disabled,.nvb-root select:disabled,.nvb-root textarea:disabled){background-color:var(--nvb-input-disabled-bg);color:var(--nvb-input-disabled-text-color);cursor:not-allowed}.nvb-root [data-nvb-icon-rendered=true]{display:inline-flex;align-items:center;justify-content:center;line-height:1;vertical-align:middle}.nvb-root span[data-nvb-icon-rendered=true]{width:1em;height:1em;flex-shrink:0}.nvb-root [data-nvb-icon-rendered=true]>svg{width:1em;height:1em;display:block;fill:currentColor}.nvb-root .nvb-control__text-input,.nvb-root .nvb-control__attribute-input,.nvb-root .nvb-control__column-input{display:block;box-sizing:border-box;width:100%;min-height:var(--nvb-input-height);padding:0 var(--nvb-input-padding-x);font-size:var(--nvb-input-font-size);line-height:1.4;color:var(--nvb-input-text-color);border-radius:var(--nvb-input-radius);outline:none;font-family:var(--nvb-font-family);box-shadow:none;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease}.nvb-root .nvb-control__text-input,.nvb-root .nvb-control__attribute-input{border:var(--nvb-input-border-width) solid var(--nvb-input-border-color);background-color:var(--nvb-input-bg)}.nvb-root .nvb-control__column-input{border:var(--nvb-input-border-width) solid transparent;background-color:var(--nvb-input-bg)}.nvb-root .nvb-control__text-input:focus,.nvb-root .nvb-control__attribute-input:focus,.nvb-root .nvb-control__column-input:focus{border-color:var(--nvb-input-focus-border-color);box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-field--has-errors .nvb-control__text-input,.nvb-root .nvb-field--has-errors .nvb-control__attribute-input,.nvb-root .nvb-field--has-errors .nvb-control__column-input,.nvb-root .nvb-field--has-errors input[type=text],.nvb-root .nvb-field--has-errors input[type=number],.nvb-root .nvb-field--has-errors input[type=email],.nvb-root .nvb-field--has-errors input[type=search],.nvb-root .nvb-field--has-errors input[type=tel],.nvb-root .nvb-field--has-errors input[type=url],.nvb-root .nvb-field--has-errors input[type=password],.nvb-root .nvb-field--has-errors select,.nvb-root .nvb-field--has-errors textarea{border-color:var(--nvb-input-error-border-color)}.nvb-root .nvb-field--has-errors .nvb-control__text-input:focus,.nvb-root .nvb-field--has-errors .nvb-control__attribute-input:focus,.nvb-root .nvb-field--has-errors .nvb-control__column-input:focus,.nvb-root .nvb-field--has-errors input[type=text]:focus,.nvb-root .nvb-field--has-errors input[type=number]:focus,.nvb-root .nvb-field--has-errors input[type=email]:focus,.nvb-root .nvb-field--has-errors input[type=search]:focus,.nvb-root .nvb-field--has-errors input[type=tel]:focus,.nvb-root .nvb-field--has-errors input[type=url]:focus,.nvb-root .nvb-field--has-errors input[type=password]:focus,.nvb-root .nvb-field--has-errors select:focus,.nvb-root .nvb-field--has-errors textarea:focus{border-color:var(--nvb-input-error-focus-border-color)}.nvb-root .nvb-field--has-errors .nvb-control__checkbox-input,.nvb-root .nvb-field--has-errors .nvb-control__radio-input{border-color:var(--nvb-input-error-border-color)}.nvb-root .nvb-control__column-input:disabled{background-color:var(--nvb-input-disabled-bg);color:var(--nvb-input-disabled-text-color);cursor:not-allowed}.nvb-root :where(.nvb-page,.nvb-page__content,.nvb-panel,.nvb-panel__body,.nvb-panel__content,.nvb-row,.nvb-row-content,.nvb-column,.nvb-field,.nvb-field__content,select-element,multi-select-element,autocomplete-element,datepicker-element,date-range-element,phone-input-element,nvb-select):has(:where(.nvb-select-container--open,.nvb-multi-select-container--open,.nvb-autocomplete--open,.nvb-datepicker--open,.nvb-date-range--open,.nvb-select__control--open)){position:relative;z-index:var(--nvb-floating-overlay-container-z-index, 2147482990);overflow:visible}.nvb-root textarea.nvb-control__attribute-input,.nvb-root textarea.nvb-control__text-input,.nvb-root textarea.nvb-control__column-input{min-height:var(--nvb-textarea-min-height);padding:var(--nvb-textarea-padding-y) var(--nvb-textarea-padding-x);line-height:1.35}.nvb-root .nvb-control__checkbox-input{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:var(--nvb-checkbox-size);min-width:var(--nvb-checkbox-size);height:var(--nvb-checkbox-size);min-height:var(--nvb-checkbox-size);border:var(--nvb-checkbox-border-width) solid var(--nvb-checkbox-border-color);border-radius:var(--nvb-checkbox-radius);position:relative;display:inline-block;vertical-align:middle;background-color:var(--nvb-checkbox-bg);cursor:pointer;margin:0;padding:0;transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease}.nvb-root .nvb-control__checkbox-input:hover{border-color:var(--nvb-checkbox-checked-border-color)}.nvb-root .nvb-control__checkbox-input:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-control__checkbox-input:checked{background-color:var(--nvb-checkbox-checked-bg);border-color:var(--nvb-checkbox-checked-border-color)}.nvb-root .nvb-control__checkbox-input:checked:after{content:"";position:absolute;left:50%;top:45%;width:5px;height:8px;border:solid var(--nvb-checkbox-check-color);border-width:0 2px 2px 0;transform:translate(-50%,-50%) rotate(45deg);transform-origin:center}.nvb-root .nvb-control__checkbox-input:disabled{cursor:not-allowed;opacity:var(--nvb-checkbox-disabled-opacity);background-color:var(--nvb-checkbox-disabled-bg)}.nvb-root .nvb-control__radio-input{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:var(--nvb-radio-size);min-width:var(--nvb-radio-size);height:var(--nvb-radio-size);min-height:var(--nvb-radio-size);border:var(--nvb-radio-border-width) solid var(--nvb-radio-border-color);border-radius:50%;position:relative;display:inline-block;vertical-align:middle;background-color:var(--nvb-radio-bg);cursor:pointer;margin:0;padding:0;transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease}.nvb-root .nvb-control__radio-input:hover{border-color:var(--nvb-radio-checked-border-color)}.nvb-root .nvb-control__radio-input:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-control__radio-input:checked{border-color:var(--nvb-radio-checked-border-color)}.nvb-root .nvb-control__radio-input:checked:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:var(--nvb-radio-dot-size);height:var(--nvb-radio-dot-size);border-radius:50%;background-color:var(--nvb-radio-dot-color)}.nvb-root .nvb-control__radio-input:disabled{cursor:not-allowed;opacity:var(--nvb-radio-disabled-opacity);background-color:var(--nvb-radio-disabled-bg)}.nvb-root input[type=number]::-webkit-inner-spin-button,.nvb-root input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.nvb-root .nvb-select-button--buttons{display:inline-flex;flex-wrap:nowrap;align-items:stretch;width:fit-content;max-width:100%}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical{flex-direction:column}.nvb-root .nvb-select-button--buttons .nvb-select-button__option{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--nvb-control-height, 36px);padding:0 14px;border:1px solid var(--nvb-color-neutral-300);border-radius:0;background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);font-size:14px;font-weight:500;font-family:inherit;line-height:1;white-space:nowrap;cursor:pointer;z-index:0;transition:background-color .12s ease,border-color .12s ease,color .12s ease}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option+.nvb-select-button__option{margin-left:-1px}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option+.nvb-select-button__option{margin-top:-1px}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:first-child{border-radius:var(--nvb-radius-md) 0 0 var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:last-child{border-radius:0 var(--nvb-radius-md) var(--nvb-radius-md) 0}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:first-child:last-child{border-radius:var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:first-child{border-radius:var(--nvb-radius-md) var(--nvb-radius-md) 0 0}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:last-child{border-radius:0 0 var(--nvb-radius-md) var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:first-child:last-child{border-radius:var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:hover:not(:disabled){background:color-mix(in oklab,var(--nvb-color-neutral-100) 80%,var(--nvb-color-neutral-000));border-color:var(--nvb-color-neutral-400);z-index:1}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:focus-visible{outline:0;z-index:2;box-shadow:var(--nvb-focus-ring, 0 0 0 3px color-mix(in oklab, var(--nvb-color-primary-500) 18%, transparent))}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-primary-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-primary-500);color:var(--nvb-color-primary-700);font-weight:600;z-index:1}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-neutral.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-neutral-700) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-neutral-500);color:var(--nvb-color-neutral-900)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-success.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-success-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-success-500);color:var(--nvb-color-success-700)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-warning.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-warning-500) 12%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-warning-500);color:var(--nvb-color-warning-800)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-risk.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-risk-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-risk-500);color:var(--nvb-color-risk-700)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:disabled,.nvb-root .nvb-select-button--buttons .nvb-select-button__option--disabled{opacity:.55;cursor:not-allowed}.nvb-root .nvb-select-button--buttons.nvb-select-button--size-small .nvb-select-button__option{height:var(--nvb-control-height-sm, 28px);padding:0 10px;font-size:13px}.nvb-root .nvb-select-button--buttons.nvb-select-button--size-large .nvb-select-button__option{height:44px;padding:0 18px;font-size:15px}.nvb-root .nvb-select-button--segmented{display:inline-flex;flex-wrap:nowrap;align-items:stretch;gap:2px;width:fit-content;max-width:100%;padding:3px;border-radius:var(--nvb-radius-full);background:color-mix(in oklab,var(--nvb-color-neutral-100) 85%,var(--nvb-color-neutral-000));border:1px solid color-mix(in oklab,var(--nvb-color-neutral-300) 55%,transparent)}.nvb-root .nvb-select-button--segmented.nvb-select-button--vertical{flex-direction:column;border-radius:14px}.nvb-root .nvb-select-button--segmented .nvb-select-button__option{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--nvb-control-height, 36px);padding:0 16px;border:0;border-radius:var(--nvb-radius-full);background:transparent;color:var(--nvb-color-neutral-600);font-size:14px;font-weight:500;font-family:inherit;cursor:pointer;transition:background-color .12s ease,color .12s ease,box-shadow .12s ease}.nvb-root .nvb-select-button--segmented.nvb-select-button--vertical .nvb-select-button__option{border-radius:11px}.nvb-root .nvb-select-button--segmented .nvb-select-button__option:hover:not(:disabled){background:color-mix(in oklab,var(--nvb-color-neutral-000) 60%,transparent);color:var(--nvb-color-neutral-800)}.nvb-root .nvb-select-button--segmented .nvb-select-button__option--selected{background:var(--nvb-color-neutral-000, #ffffff);color:var(--nvb-color-neutral-900);font-weight:600;box-shadow:0 1px 3px #0000001f,0 1px 2px #00000014}.nvb-root .nvb-select-button--segmented .nvb-select-button__option:disabled,.nvb-root .nvb-select-button--segmented .nvb-select-button__option--disabled{opacity:.55;cursor:not-allowed}.nvb-root .nvb-select-button--segmented.nvb-select-button--size-small .nvb-select-button__option{min-height:var(--nvb-control-height-sm, 28px);padding:0 12px;font-size:13px}.nvb-root .nvb-select-button--segmented.nvb-select-button--size-large .nvb-select-button__option{min-height:44px;padding:0 20px;font-size:15px}}:host{display:block;width:100%;height:100%;max-height:100%;min-height:0;isolation:isolate;overflow:hidden;font-family:var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif );color:var(--nvb-color-neutral-700);background:transparent;color-scheme:light}:host([data-theme="dark"]){color-scheme:dark}:host *{box-sizing:border-box}:host button:focus-visible,:host input:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:2px solid var(--nvb-color-primary-500);outline-offset:1px}:host button,:host input,:host select,:host textarea{font-family:var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif )}:host(.nvb-theme-switching),:host(.nvb-theme-switching) *{transition:none!important;animation:none!important}.ngx-view-builder-renderer{width:100%;height:100%;min-height:0}.ngx-view-builder-renderer>runtime-preview{display:block;width:100%;height:100%;min-height:0}\n'],dependencies:[{kind:"component",type:se,selector:"runtime-preview",inputs:["viewportSettings","runtimePreviewSettings"]},{kind:"component",type:G,selector:"confirm-dialog"}],changeDetection:l.ChangeDetectionStrategy.Eager,encapsulation:l.ViewEncapsulation.ShadowDom})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:X,decorators:[{type:A,args:[{selector:"ngx-view-builder-renderer",imports:[se,G],encapsulation:Mn.ShadowDom,changeDetection:E.Eager,providers:Y,template:'<section\n class="ngx-view-builder-renderer nvb-root"\n aria-label="Form renderer"\n data-testid="ngx-view-builder-renderer-root"\n>\n <runtime-preview\n [viewportSettings]="resolvedViewportSettings()"\n [runtimePreviewSettings]="resolvedPreviewSettings()"\n ></runtime-preview>\n</section>\n\n<confirm-dialog />\n',styles:['@layer reset,tokens,components,fpUtilities,elements;@layer reset{.nvb-root,.nvb-root *,.nvb-root *:before,.nvb-root *:after{margin:0;padding:0;box-sizing:border-box}.nvb-root{height:100%;line-height:1.5;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;font-family:sans-serif}.nvb-root ul,.nvb-root ol{list-style:none}.nvb-root a{text-decoration:none;color:inherit}.nvb-root img,.nvb-root picture,.nvb-root video,.nvb-root canvas,.nvb-root svg{display:block;max-width:100%;height:auto}.nvb-root input,.nvb-root button,.nvb-root textarea,.nvb-root select{font:inherit}.nvb-root button{border:none;background:none;cursor:pointer}.nvb-root table{border-collapse:collapse;border-spacing:0}}@layer tokens{@layer tokens{:host,.nvb-root{--nvb-font-family-base: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;--nvb-color-primary-050: oklch(98.04% .0104 251.42);--nvb-color-primary-100: oklch(95.63% .0247 251.98);--nvb-color-primary-200: oklch(91.21% .0518 252.79);--nvb-color-primary-300: oklch(84.55% .0888 253.67);--nvb-color-primary-400: oklch(75.39% .1293 254.94);--nvb-color-primary-500: oklch(64.21% .1552 256.62);--nvb-color-primary-600: oklch(56.71% .1412 257.44);--nvb-color-primary-700: oklch(48.29% .1191 258.32);--nvb-color-primary-800: oklch(40.54% .0992 258.96);--nvb-color-primary-900: oklch(31.48% .0762 259.64);--nvb-color-primary-950: oklch(24.86% .0581 260.47);--nvb-color-neutral-000: oklch(100% .0001 89.88);--nvb-color-neutral-050: oklch(98.38% .0035 247.86);--nvb-color-neutral-100: oklch(96.76% .007 247.9);--nvb-color-neutral-200: oklch(92.58% .0132 255.03);--nvb-color-neutral-300: oklch(86.94% .0199 253.37);--nvb-color-neutral-400: oklch(71% .0348 256.79);--nvb-color-neutral-500: oklch(55.64% .0398 256.82);--nvb-color-neutral-600: oklch(45.05% .0371 256.83);--nvb-color-neutral-700: oklch(37.52% .0394 256.85);--nvb-color-neutral-800: oklch(27.53% .0364 259.7);--nvb-color-neutral-900: oklch(20.64% .0388 265.55);--nvb-color-neutral-950: oklch(12.92% .0415 265.15);--nvb-color-risk-050: oklch(96.78% .0142 17.4);--nvb-color-risk-100: oklch(93.44% .0314 17.73);--nvb-color-risk-200: oklch(88.03% .0615 18.39);--nvb-color-risk-300: oklch(80.98% .1025 19.54);--nvb-color-risk-400: oklch(71.23% .1656 22.18);--nvb-color-risk-500: oklch(63.56% .2082 25.38);--nvb-color-risk-600: oklch(57.86% .2137 27.17);--nvb-color-risk-700: oklch(50.79% .1918 27.56);--nvb-color-risk-800: oklch(44.1% .1603 26.89);--nvb-color-risk-900: oklch(39.96% .1348 25.77);--nvb-color-risk-950: oklch(25.26% .0866 26);--nvb-color-caution-050: oklch(98.66% .0218 95.28);--nvb-color-caution-100: oklch(96.22% .0569 95.61);--nvb-color-caution-200: oklch(92.57% .1141 95.75);--nvb-color-caution-300: oklch(88.13% .1526 91.77);--nvb-color-caution-400: oklch(83.34% .1641 83.87);--nvb-color-caution-500: oklch(76.97% .1645 70.61);--nvb-color-caution-600: oklch(66.88% .1588 57.96);--nvb-color-caution-700: oklch(55.42% .1447 49.16);--nvb-color-caution-800: oklch(47.06% .1236 46.53);--nvb-color-caution-900: oklch(40.96% .1037 46.31);--nvb-color-caution-950: oklch(27.8% .0739 45.8);--nvb-color-warning-050: oklch(98.66% .0218 95.28);--nvb-color-warning-100: oklch(96.22% .0569 95.61);--nvb-color-warning-200: oklch(92.57% .1141 95.75);--nvb-color-warning-300: oklch(88.13% .1526 91.77);--nvb-color-warning-400: oklch(83.34% .1641 83.87);--nvb-color-warning-500: oklch(76.97% .1645 70.61);--nvb-color-warning-600: oklch(66.88% .1588 57.96);--nvb-color-warning-700: oklch(55.42% .1447 49.16);--nvb-color-warning-800: oklch(47.06% .1236 46.53);--nvb-color-warning-900: oklch(40.96% .1037 46.31);--nvb-color-warning-950: oklch(27.8% .0739 45.8);--nvb-color-success-050: oklch(98.36% .0162 155.55);--nvb-color-success-100: oklch(96.46% .0405 157.07);--nvb-color-success-200: oklch(92.46% .0811 155.98);--nvb-color-success-300: oklch(87.12% .137 154.59);--nvb-color-success-400: oklch(79.99% .1816 151.78);--nvb-color-success-500: oklch(72.05% .192 149.49);--nvb-color-success-600: oklch(62.3% .1688 149.18);--nvb-color-success-700: oklch(52.48% .1373 149.83);--nvb-color-success-800: oklch(44.61% .1073 151.49);--nvb-color-success-900: oklch(38.98% .0885 152.69);--nvb-color-success-950: oklch(26.61% .0625 153.04);--nvb-color-info-050: oklch(97.67% .0127 236.62);--nvb-color-info-100: oklch(95.35% .024 236.81);--nvb-color-info-200: oklch(89.99% .0556 231.68);--nvb-color-info-300: oklch(82.95% .1004 229.56);--nvb-color-info-400: oklch(75.84% .1373 231.6);--nvb-color-info-500: oklch(67.76% .1481 238.1);--nvb-color-info-600: oklch(58.63% .1366 241.18);--nvb-color-info-700: oklch(49.96% .1179 242.21);--nvb-color-info-800: oklch(43.8% .0988 240.83);--nvb-color-info-900: oklch(39.2% .0844 240.76);--nvb-color-info-950: oklch(29.47% .0635 243.15);--nvb-color-text-000: oklch(100% .0001 89.88);--nvb-color-text-050: oklch(98.38% .0035 247.86);--nvb-color-text-100: oklch(96.76% .007 247.9);--nvb-color-text-200: oklch(92.58% .0132 255.03);--nvb-color-text-300: oklch(86.94% .0199 253.37);--nvb-color-text-400: oklch(71% .0348 256.79);--nvb-color-text-500: oklch(55.64% .0398 256.82);--nvb-color-text-600: oklch(45.05% .0371 256.83);--nvb-color-text-700: oklch(37.52% .0394 256.85);--nvb-color-text-800: oklch(27.53% .0364 259.7);--nvb-color-text-900: oklch(20.64% .0388 265.55);--nvb-color-text-950: oklch(12.92% .0415 265.15);--nvb-radius-sm: 4px;--nvb-radius-md: 6px;--nvb-radius-lg: 8px;--nvb-radius-xl: 12px;--nvb-radius-full: 999px;--nvb-space-0: 2px;--nvb-space-1: 4px;--nvb-space-2: 6px;--nvb-space-3: 8px;--nvb-space-4: 10px;--nvb-space-5: 12px;--nvb-space-6: 16px;--nvb-space-7: 20px;--nvb-space-8: 24px;--nvb-space-9: 32px;--nvb-text-caption2: 10px;--nvb-text-caption1: 12px;--nvb-text-body1: 14px;--nvb-text-subtitle2: 16px;--nvb-text-subtitle1: 20px;--nvb-text-title3: 24px;--nvb-text-title2: 28px;--nvb-text-sm: var(--nvb-text-caption1);--nvb-text-base: var(--nvb-text-body1);--nvb-text-md: var(--nvb-text-body1);--nvb-text-lg: var(--nvb-text-subtitle2);--nvb-color-surface-mix-target: var(--nvb-color-neutral-000);--nvb-chart-single: var(--nvb-color-primary-500);--nvb-chart-1: #2a78d6;--nvb-chart-2: #eb6834;--nvb-chart-3: #1baf7a;--nvb-chart-4: #eda100;--nvb-chart-5: #e87ba4;--nvb-chart-6: #008300;--nvb-chart-7: #4a3aa7;--nvb-chart-8: #e34948;--nvb-chart-other: var(--nvb-color-neutral-400)}:host([data-theme="dark"]),:host(.nvb-dark),.nvb-root.nvb-dark,.nvb-root[data-theme=dark],.nvb-section-theme-dark{--nvb-font-family-base: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;--nvb-color-primary-050: oklch(24.86% .0581 260.47);--nvb-color-primary-100: oklch(31.48% .0762 259.64);--nvb-color-primary-200: oklch(40.54% .0992 258.96);--nvb-color-primary-300: oklch(48.29% .1191 258.32);--nvb-color-primary-400: oklch(56.71% .1412 257.44);--nvb-color-primary-500: oklch(64.21% .1552 256.62);--nvb-color-primary-600: oklch(75.39% .1293 254.94);--nvb-color-primary-700: oklch(84.55% .0888 253.67);--nvb-color-primary-800: oklch(91.21% .0518 252.79);--nvb-color-primary-900: oklch(95.63% .0247 251.98);--nvb-color-primary-950: oklch(98.04% .0104 251.42);--nvb-color-neutral-000: oklch(19% .006 286);--nvb-color-neutral-050: oklch(23% .007 286);--nvb-color-neutral-100: oklch(27% .008 286);--nvb-color-neutral-200: oklch(38% .009 286);--nvb-color-neutral-300: oklch(49.5% .01 286);--nvb-color-neutral-400: oklch(58% .01 286);--nvb-color-neutral-500: oklch(65% .009 286);--nvb-color-neutral-600: oklch(74% .007 286);--nvb-color-neutral-700: oklch(82% .005 286);--nvb-color-neutral-800: oklch(88% .004 286);--nvb-color-neutral-900: oklch(93% .003 286);--nvb-color-neutral-950: oklch(97% .002 286);--nvb-color-risk-050: oklch(25.26% .0866 26);--nvb-color-risk-100: oklch(39.96% .1348 25.77);--nvb-color-risk-200: oklch(44.1% .1603 26.89);--nvb-color-risk-300: oklch(50.79% .1918 27.56);--nvb-color-risk-400: oklch(57.86% .2137 27.17);--nvb-color-risk-500: oklch(63.56% .2082 25.38);--nvb-color-risk-600: oklch(71.23% .1656 22.18);--nvb-color-risk-700: oklch(80.98% .1025 19.54);--nvb-color-risk-800: oklch(88.03% .0615 18.39);--nvb-color-risk-900: oklch(93.44% .0314 17.73);--nvb-color-risk-950: oklch(96.78% .0142 17.4);--nvb-color-caution-050: oklch(27.8% .0739 45.8);--nvb-color-caution-100: oklch(40.96% .1037 46.31);--nvb-color-caution-200: oklch(47.06% .1236 46.53);--nvb-color-caution-300: oklch(55.42% .1447 49.16);--nvb-color-caution-400: oklch(66.88% .1588 57.96);--nvb-color-caution-500: oklch(76.97% .1645 70.61);--nvb-color-caution-600: oklch(83.34% .1641 83.87);--nvb-color-caution-700: oklch(88.13% .1526 91.77);--nvb-color-caution-800: oklch(92.57% .1141 95.75);--nvb-color-caution-900: oklch(96.22% .0569 95.61);--nvb-color-caution-950: oklch(98.66% .0218 95.28);--nvb-color-warning-050: oklch(27.8% .0739 45.8);--nvb-color-warning-100: oklch(40.96% .1037 46.31);--nvb-color-warning-200: oklch(47.06% .1236 46.53);--nvb-color-warning-300: oklch(55.42% .1447 49.16);--nvb-color-warning-400: oklch(66.88% .1588 57.96);--nvb-color-warning-500: oklch(76.97% .1645 70.61);--nvb-color-warning-600: oklch(83.34% .1641 83.87);--nvb-color-warning-700: oklch(88.13% .1526 91.77);--nvb-color-warning-800: oklch(92.57% .1141 95.75);--nvb-color-warning-900: oklch(96.22% .0569 95.61);--nvb-color-warning-950: oklch(98.66% .0218 95.28);--nvb-color-success-050: oklch(26.61% .0625 153.04);--nvb-color-success-100: oklch(38.98% .0885 152.69);--nvb-color-success-200: oklch(44.61% .1073 151.49);--nvb-color-success-300: oklch(52.48% .1373 149.83);--nvb-color-success-400: oklch(62.3% .1688 149.18);--nvb-color-success-500: oklch(72.05% .192 149.49);--nvb-color-success-600: oklch(79.99% .1816 151.78);--nvb-color-success-700: oklch(87.12% .137 154.59);--nvb-color-success-800: oklch(92.46% .0811 155.98);--nvb-color-success-900: oklch(96.46% .0405 157.07);--nvb-color-success-950: oklch(98.36% .0162 155.55);--nvb-color-info-050: oklch(29.47% .0635 243.15);--nvb-color-info-100: oklch(39.2% .0844 240.76);--nvb-color-info-200: oklch(43.8% .0988 240.83);--nvb-color-info-300: oklch(49.96% .1179 242.21);--nvb-color-info-400: oklch(58.63% .1366 241.18);--nvb-color-info-500: oklch(67.76% .1481 238.1);--nvb-color-info-600: oklch(75.84% .1373 231.6);--nvb-color-info-700: oklch(82.95% .1004 229.56);--nvb-color-info-800: oklch(89.99% .0556 231.68);--nvb-color-info-900: oklch(95.35% .024 236.81);--nvb-color-info-950: oklch(97.67% .0127 236.62);--nvb-color-text-000: oklch(19% .006 286);--nvb-color-text-050: oklch(23% .007 286);--nvb-color-text-100: oklch(27% .008 286);--nvb-color-text-200: oklch(38% .009 286);--nvb-color-text-300: oklch(49.5% .01 286);--nvb-color-text-400: oklch(58% .01 286);--nvb-color-text-500: oklch(65% .009 286);--nvb-color-text-600: oklch(74% .007 286);--nvb-color-text-700: oklch(82% .005 286);--nvb-color-text-800: oklch(88% .004 286);--nvb-color-text-900: oklch(93% .003 286);--nvb-color-text-950: oklch(97% .002 286);--nvb-radius-sm: 4px;--nvb-radius-md: 6px;--nvb-radius-lg: 8px;--nvb-radius-xl: 12px;--nvb-radius-full: 999px;--nvb-space-0: 2px;--nvb-space-1: 4px;--nvb-space-2: 6px;--nvb-space-3: 8px;--nvb-space-4: 10px;--nvb-space-5: 12px;--nvb-space-6: 16px;--nvb-space-7: 20px;--nvb-space-8: 24px;--nvb-space-9: 32px;--nvb-text-caption2: 10px;--nvb-text-caption1: 12px;--nvb-text-body1: 14px;--nvb-text-subtitle2: 16px;--nvb-text-subtitle1: 20px;--nvb-text-title3: 24px;--nvb-text-title2: 28px;--nvb-text-sm: var(--nvb-text-caption1);--nvb-text-base: var(--nvb-text-body1);--nvb-text-md: var(--nvb-text-body1);--nvb-text-lg: var(--nvb-text-subtitle2);--nvb-color-surface-mix-target: var(--nvb-color-neutral-050);--nvb-chart-single: var(--nvb-color-primary-500);--nvb-chart-1: #3987e5;--nvb-chart-2: #d95926;--nvb-chart-3: #199e70;--nvb-chart-4: #c98500;--nvb-chart-5: #d55181;--nvb-chart-6: #008300;--nvb-chart-7: #9085e9;--nvb-chart-8: #e66767;--nvb-chart-other: var(--nvb-color-neutral-500)}:host,.nvb-root{color-scheme:light;background-color:var(--nvb-surface, var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-800);scrollbar-color:var(--nvb-color-neutral-300) transparent}:host([data-theme="dark"]),:host(.nvb-dark),:host([data-theme="dark"]) .nvb-root,:host(.nvb-dark) .nvb-root,.nvb-root.nvb-dark,.nvb-root[data-theme=dark],.nvb-section-theme-dark{color-scheme:dark}}}@layer components{.nvb-root,.nvb-section-theme-dark{--nvb-button-height-lg: 40px;--nvb-button-height-ms: 32px;--nvb-button-height-sm: 32px;--nvb-button-height-sx: 28px;--nvb-button-padding-lg: 0 16px;--nvb-button-padding-ms: 0 12px;--nvb-button-padding-sm: 0 10px;--nvb-button-padding-sx: 0 8px;--nvb-button-font-size-lg: 14px;--nvb-button-font-size-ms: 13px;--nvb-button-font-size-sm: 13px;--nvb-button-font-size-sx: 12px;--nvb-button-radius: var(--nvb-radius-md);--nvb-button-gap: 6px;--nvb-button-border-color: var(--nvb-color-neutral-300);--nvb-button-bg: var(--nvb-color-neutral-000);--nvb-button-text-color: var(--nvb-color-neutral-800);--nvb-button-hover-bg: var(--nvb-color-neutral-050);--nvb-button-primary-bg: var(--nvb-color-primary-600);--nvb-button-primary-hover-bg: var(--nvb-color-primary-700);--nvb-button-danger-bg: var(--nvb-color-risk-050);--nvb-button-danger-text-color: var(--nvb-color-risk-700);--nvb-button-danger-border-color: var(--nvb-color-risk-300);--nvb-surface-bg: var(--nvb-color-neutral-000);--nvb-surface-muted-bg: color-mix(in oklab, var(--nvb-color-neutral-050) 84%, var(--nvb-color-neutral-000));--nvb-stroke-subtle: var(--nvb-color-neutral-200);--nvb-stroke-strong: var(--nvb-color-neutral-300);--nvb-shadow-2: 0 1px 2px color-mix(in oklab, var(--nvb-color-neutral-950) 6%, transparent);--nvb-shadow-8: 0 4px 8px color-mix(in oklab, var(--nvb-color-neutral-950) 10%, transparent), 0 12px 24px color-mix(in oklab, var(--nvb-color-neutral-950) 8%, transparent);--nvb-shadow-16: 0 8px 16px color-mix(in oklab, var(--nvb-color-neutral-950) 12%, transparent), 0 24px 48px color-mix(in oklab, var(--nvb-color-neutral-950) 14%, transparent);--nvb-dialog-radius: var(--nvb-radius-xl);--nvb-menu-radius: var(--nvb-radius-lg);--nvb-tablist-height: 40px;--nvb-card-bg: var(--nvb-color-neutral-000);--nvb-card-border-color: var(--nvb-color-neutral-200);--nvb-card-radius: var(--nvb-radius-lg);--nvb-card-shadow: var(--nvb-shadow-2);--nvb-card-padding: 12px}.nvb-root .nvb-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.nvb-root .nvb-button,.nvb-root .nvb-control__add-row-button{box-sizing:border-box;min-height:var(--nvb-button-height-ms);padding:var(--nvb-button-padding-ms);border:1px solid var(--nvb-button-border-color);border-radius:var(--nvb-button-radius);background:var(--nvb-button-bg);color:var(--nvb-button-text-color);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--nvb-button-gap);font-family:var(--nvb-font-family);font-size:var(--nvb-button-font-size-ms);font-weight:600;line-height:20px;white-space:nowrap;overflow:visible;transition:background-color .2s ease,border-color .2s ease,color .2s ease,opacity .2s ease,box-shadow .2s ease;box-shadow:none}.nvb-root .nvb-button:focus-visible,.nvb-root .nvb-control__add-row-button:focus-visible,.nvb-root .nvb-icon-button:focus-visible{outline:0;border-color:var(--nvb-input-focus-border-color, var(--nvb-color-primary-500));box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-button:hover:not(:disabled),.nvb-root .nvb-control__add-row-button:hover:not(:disabled){background:var(--nvb-button-hover-bg);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900);box-shadow:none}.nvb-root .nvb-button:disabled,.nvb-root .nvb-control__add-row-button:disabled{cursor:not-allowed;opacity:.5;box-shadow:none}.nvb-root .nvb-button--lg{min-height:var(--nvb-button-height-lg);padding:var(--nvb-button-padding-lg);font-size:var(--nvb-button-font-size-lg)}.nvb-root .nvb-button--ms,.nvb-root .nvb-button--md{min-height:var(--nvb-button-height-ms);padding:var(--nvb-button-padding-ms);font-size:var(--nvb-button-font-size-ms)}.nvb-root .nvb-button--sm{min-height:var(--nvb-button-height-sm);padding:var(--nvb-button-padding-sm);font-size:var(--nvb-button-font-size-sm)}.nvb-root .nvb-button--sx,.nvb-root .nvb-button--xs{min-height:var(--nvb-button-height-sx);padding:var(--nvb-button-padding-sx);font-size:var(--nvb-button-font-size-sx)}.nvb-root .nvb-button--left{justify-content:flex-start}.nvb-root .nvb-button--full{width:100%}.nvb-root .nvb-button--subtle{border-color:transparent;background:transparent;color:var(--nvb-color-neutral-700)}.nvb-root .nvb-button--subtle:hover:not(:disabled){border-color:transparent;background:color-mix(in oklab,var(--nvb-color-neutral-100) 72%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-900)}.nvb-root .nvb-button--neutral{background:var(--nvb-color-neutral-000)}.nvb-root .nvb-button--primary,.nvb-root .nvb-button--active{border-color:var(--nvb-color-primary-500);background:var(--nvb-button-primary-bg);color:var(--nvb-color-neutral-000);box-shadow:none}.nvb-root .nvb-button--primary-soft{border-color:transparent;background:color-mix(in oklab,var(--nvb-color-primary-050) 76%,var(--nvb-color-neutral-000));color:var(--nvb-color-primary-700)}.nvb-root .nvb-button--primary:hover:not(:disabled),.nvb-root .nvb-button--active:hover:not(:disabled){border-color:var(--nvb-color-primary-600);background:var(--nvb-button-primary-hover-bg);color:var(--nvb-color-neutral-000)}.nvb-root .nvb-button--primary-soft:hover:not(:disabled){border-color:var(--nvb-color-primary-500);background:color-mix(in oklab,var(--nvb-color-primary-050) 70%,var(--nvb-color-primary-100, var(--nvb-color-primary-050)));color:var(--nvb-color-primary-800)}.nvb-root .nvb-button--danger{border-color:var(--nvb-button-danger-border-color);background:var(--nvb-button-danger-bg);color:var(--nvb-button-danger-text-color)}.nvb-root .nvb-button--danger:hover:not(:disabled),.nvb-root .nvb-icon-button--danger:hover:not(:disabled){border-color:var(--nvb-color-risk-400);background:color-mix(in oklab,var(--nvb-color-risk-050) 70%,var(--nvb-color-risk-100, var(--nvb-color-risk-050)));color:var(--nvb-color-risk-800, var(--nvb-color-risk-700))}.nvb-root .nvb-button__icon,.nvb-root .nvb-control__add-row-button>.material-symbols-outlined{font-size:15px;line-height:1}.nvb-root .nvb-control__add-row-button{border-color:var(--nvb-control-button-border-color);background:var(--nvb-control-button-bg);color:var(--nvb-control-button-text-color);font-size:var(--nvb-control-font-size);height:var(--nvb-control-height);min-height:var(--nvb-control-height);padding:0 var(--nvb-control-padding-x)}.nvb-root .nvb-control__add-row-button:hover:not(:disabled){border-color:var(--nvb-control-button-hover-border-color);background:var(--nvb-control-button-hover-bg);color:var(--nvb-control-button-hover-text-color)}.nvb-root .nvb-control__add-row-button--compact{height:var(--nvb-control-height-sm);min-height:var(--nvb-control-height-sm);padding:0 10px;font-size:12px}.nvb-root .nvb-control__add-row-button--compact>.material-symbols-outlined{font-size:16px}.nvb-root .nvb-control__add-row-button--link{min-height:26px;padding:0;border-color:transparent;background:transparent;color:var(--nvb-color-primary-600);border-radius:var(--nvb-radius-md);font-size:14px;font-weight:600;justify-content:flex-start}.nvb-root .nvb-control__add-row-button--link:hover:not(:disabled){border-color:transparent;background:transparent;color:var(--nvb-color-primary-700)}.nvb-root .nvb-control__add-row-button--link.nvb-control__add-row-button--compact{padding:0 2px;font-size:12px}.nvb-root .nvb-control__add-row-button nvb-icon{width:16px;height:16px;display:inline-flex}.nvb-root .nvb-button__label{display:inline-flex;align-items:center;min-height:20px;line-height:20px;overflow:hidden;text-overflow:ellipsis}.nvb-root .nvb-icon-button{width:var(--nvb-button-height-ms);min-width:var(--nvb-button-height-ms);height:var(--nvb-button-height-ms);min-height:var(--nvb-button-height-ms);border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:background-color .16s ease,border-color .16s ease,color .16s ease,opacity .16s ease,box-shadow .16s ease;box-shadow:none}.nvb-root .nvb-icon-button:hover:not(:disabled){background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900)}.nvb-root .nvb-icon-button:disabled{cursor:not-allowed;opacity:.5;box-shadow:none}.nvb-root .nvb-icon-button--lg{width:var(--nvb-button-height-lg);min-width:var(--nvb-button-height-lg);height:var(--nvb-button-height-lg);min-height:var(--nvb-button-height-lg)}.nvb-root .nvb-icon-button--sm{width:var(--nvb-button-height-sm);min-width:var(--nvb-button-height-sm);height:var(--nvb-button-height-sm);min-height:var(--nvb-button-height-sm)}.nvb-root .nvb-icon-button--sx,.nvb-root .nvb-icon-button--xs{width:var(--nvb-button-height-sx);min-width:var(--nvb-button-height-sx);height:var(--nvb-button-height-sx);min-height:var(--nvb-button-height-sx);border-radius:var(--nvb-radius-md)}.nvb-root .nvb-icon-button--danger{border-color:var(--nvb-button-danger-border-color);background:var(--nvb-button-danger-bg);color:var(--nvb-button-danger-text-color)}.nvb-root .nvb-icon-button--ghost{border-color:transparent;background:transparent}.nvb-root .nvb-icon-button--ghost:hover:not(:disabled){border-color:transparent;background:color-mix(in oklab,var(--nvb-color-neutral-100) 72%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-800)}.nvb-root .nvb-icon-button--drag{cursor:grab}.nvb-root .nvb-icon-button--drag:active{cursor:grabbing;transform:scale(.98)}.nvb-root .nvb-icon-button span,.nvb-root .nvb-icon-button nvb-icon{font-size:18px;line-height:1}.nvb-root .nvb-control__add-row-button nvb-icon,.nvb-root .nvb-control__add-row-button .nvb-icon-svg{font-size:16px;line-height:1}.nvb-root .nvb-icon-button--sx span,.nvb-root .nvb-icon-button--sx nvb-icon,.nvb-root .nvb-icon-button--xs span,.nvb-root .nvb-icon-button--xs nvb-icon{font-size:15px}.nvb-root .nvb-search-field{position:relative}.nvb-root .nvb-search-field .nvb-search-field__icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);z-index:1;display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;color:var(--nvb-color-neutral-500);font-size:16px;line-height:1;pointer-events:none}.nvb-root .nvb-search-field .nvb-search-field__input{display:block;box-sizing:border-box;width:100%;height:32px;min-height:32px;padding:0 32px 0 36px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-input-radius, var(--nvb-radius-md));background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);font-size:12px;font-weight:400;line-height:20px;box-shadow:none;transition:border-color .12s ease,background-color .12s ease,box-shadow .12s ease}.nvb-root .nvb-search-field.nvb-search-field--no-icon .nvb-search-field__input{padding-left:12px}.nvb-root .nvb-search-field .nvb-search-field__input::placeholder{color:var(--nvb-color-neutral-400);font-weight:400}.nvb-root .nvb-search-field .nvb-search-field__input:focus,.nvb-root .nvb-search-field .nvb-search-field__input:focus-visible{outline:none;border-color:var(--nvb-color-primary-500);box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-search-field .nvb-search-field__clear{position:absolute;right:6px;top:50%;transform:translateY(-50%);z-index:2;color:var(--nvb-color-neutral-500)}}@layer fpUtilities{@layer fpUtilities{.nvb-root .nvb-hidden{display:none!important}.nvb-root .nvb-flex-center{display:flex;justify-content:center;align-items:center}.nvb-root .nvb-flex-left{display:flex;justify-content:flex-start;align-items:center}.nvb-root .nvb-flex-right{display:flex;justify-content:flex-end;align-items:center}.nvb-root .nvb-bg-primary-50{background-color:var(--nvb-color-primary-050)}.nvb-root .nvb-bg-primary-100{background-color:var(--nvb-color-primary-100)}.nvb-root .nvb-bg-primary-200{background-color:var(--nvb-color-primary-200)}.nvb-root .nvb-bg-primary-300{background-color:var(--nvb-color-primary-300)}.nvb-root .nvb-bg-primary-400{background-color:var(--nvb-color-primary-400)}.nvb-root .nvb-bg-primary-500{background-color:var(--nvb-color-primary-500)}.nvb-root .nvb-bg-primary-600{background-color:var(--nvb-color-primary-600)}.nvb-root .nvb-bg-primary-700{background-color:var(--nvb-color-primary-700)}.nvb-root .nvb-bg-primary-800{background-color:var(--nvb-color-primary-800)}.nvb-root .nvb-bg-primary-900{background-color:var(--nvb-color-primary-900)}.nvb-root .nvb-bg-primary-950{background-color:var(--nvb-color-primary-950)}.nvb-root .nvb-bg-neutral-000{background-color:var(--nvb-color-neutral-000)}.nvb-root .nvb-bg-neutral-050{background-color:var(--nvb-color-neutral-050)}.nvb-root .nvb-bg-neutral-100{background-color:var(--nvb-color-neutral-100)}.nvb-root .nvb-bg-neutral-200{background-color:var(--nvb-color-neutral-200)}.nvb-root .nvb-bg-neutral-300{background-color:var(--nvb-color-neutral-300)}.nvb-root .nvb-bg-neutral-400{background-color:var(--nvb-color-neutral-400)}.nvb-root .nvb-bg-neutral-500{background-color:var(--nvb-color-neutral-500)}.nvb-root .nvb-bg-neutral-600{background-color:var(--nvb-color-neutral-600)}.nvb-root .nvb-bg-neutral-700{background-color:var(--nvb-color-neutral-700)}.nvb-root .nvb-bg-neutral-800{background-color:var(--nvb-color-neutral-800)}.nvb-root .nvb-bg-neutral-900{background-color:var(--nvb-color-neutral-900)}.nvb-root .nvb-bg-neutral-950{background-color:var(--nvb-color-neutral-950)}.nvb-root .nvb-bg-risk-50{background-color:var(--nvb-color-risk-050)}.nvb-root .nvb-bg-risk-100{background-color:var(--nvb-color-risk-100)}.nvb-root .nvb-bg-risk-200{background-color:var(--nvb-color-risk-200)}.nvb-root .nvb-bg-risk-300{background-color:var(--nvb-color-risk-300)}.nvb-root .nvb-bg-risk-400{background-color:var(--nvb-color-risk-400)}.nvb-root .nvb-bg-risk-500{background-color:var(--nvb-color-risk-500)}.nvb-root .nvb-bg-risk-600{background-color:var(--nvb-color-risk-600)}.nvb-root .nvb-bg-risk-700{background-color:var(--nvb-color-risk-700)}.nvb-root .nvb-bg-risk-800{background-color:var(--nvb-color-risk-800)}.nvb-root .nvb-bg-risk-900{background-color:var(--nvb-color-risk-900)}.nvb-root .nvb-bg-risk-950{background-color:var(--nvb-color-risk-950)}.nvb-root .nvb-bg-warning-50{background-color:var(--nvb-color-warning-050)}.nvb-root .nvb-bg-warning-100{background-color:var(--nvb-color-warning-100)}.nvb-root .nvb-bg-warning-200{background-color:var(--nvb-color-warning-200)}.nvb-root .nvb-bg-warning-300{background-color:var(--nvb-color-warning-300)}.nvb-root .nvb-bg-warning-400{background-color:var(--nvb-color-warning-400)}.nvb-root .nvb-bg-warning-500{background-color:var(--nvb-color-warning-500)}.nvb-root .nvb-bg-warning-600{background-color:var(--nvb-color-warning-600)}.nvb-root .nvb-bg-warning-700{background-color:var(--nvb-color-warning-700)}.nvb-root .nvb-bg-warning-800{background-color:var(--nvb-color-warning-800)}.nvb-root .nvb-bg-warning-900{background-color:var(--nvb-color-warning-900)}.nvb-root .nvb-bg-warning-950{background-color:var(--nvb-color-warning-950)}.nvb-root .nvb-bg-success-50{background-color:var(--nvb-color-success-050)}.nvb-root .nvb-bg-success-100{background-color:var(--nvb-color-success-100)}.nvb-root .nvb-bg-success-200{background-color:var(--nvb-color-success-200)}.nvb-root .nvb-bg-success-300{background-color:var(--nvb-color-success-300)}.nvb-root .nvb-bg-success-400{background-color:var(--nvb-color-success-400)}.nvb-root .nvb-bg-success-500{background-color:var(--nvb-color-success-500)}.nvb-root .nvb-bg-success-600{background-color:var(--nvb-color-success-600)}.nvb-root .nvb-bg-success-700{background-color:var(--nvb-color-success-700)}.nvb-root .nvb-bg-success-800{background-color:var(--nvb-color-success-800)}.nvb-root .nvb-bg-success-900{background-color:var(--nvb-color-success-900)}.nvb-root .nvb-bg-success-950{background-color:var(--nvb-color-success-950)}.nvb-root .nvb-bg-info-50{background-color:var(--nvb-color-info-050)}.nvb-root .nvb-bg-info-100{background-color:var(--nvb-color-info-100)}.nvb-root .nvb-bg-info-200{background-color:var(--nvb-color-info-200)}.nvb-root .nvb-bg-info-300{background-color:var(--nvb-color-info-300)}.nvb-root .nvb-bg-info-400{background-color:var(--nvb-color-info-400)}.nvb-root .nvb-bg-info-500{background-color:var(--nvb-color-info-500)}.nvb-root .nvb-bg-info-600{background-color:var(--nvb-color-info-600)}.nvb-root .nvb-bg-info-700{background-color:var(--nvb-color-info-700)}.nvb-root .nvb-bg-info-800{background-color:var(--nvb-color-info-800)}.nvb-root .nvb-bg-info-900{background-color:var(--nvb-color-info-900)}.nvb-root .nvb-bg-info-950{background-color:var(--nvb-color-info-950)}.nvb-root .nvb-bg-text-000{background-color:var(--nvb-color-text-000)}.nvb-root .nvb-bg-text-050{background-color:var(--nvb-color-text-050)}.nvb-root .nvb-bg-text-100{background-color:var(--nvb-color-text-100)}.nvb-root .nvb-bg-text-200{background-color:var(--nvb-color-text-200)}.nvb-root .nvb-bg-text-300{background-color:var(--nvb-color-text-300)}.nvb-root .nvb-bg-text-400{background-color:var(--nvb-color-text-400)}.nvb-root .nvb-bg-text-500{background-color:var(--nvb-color-text-500)}.nvb-root .nvb-bg-text-600{background-color:var(--nvb-color-text-600)}.nvb-root .nvb-bg-text-700{background-color:var(--nvb-color-text-700)}.nvb-root .nvb-bg-text-800{background-color:var(--nvb-color-text-800)}.nvb-root .nvb-bg-text-900{background-color:var(--nvb-color-text-900)}.nvb-root .nvb-bg-text-950{background-color:var(--nvb-color-text-950)}.nvb-root .nvb-text-neutral-0{color:var(--nvb-color-neutral-000)}.nvb-root .nvb-text-neutral-50{color:var(--nvb-color-neutral-050)}.nvb-root .nvb-text-neutral-100{color:var(--nvb-color-neutral-100)}.nvb-root .nvb-text-neutral-200{color:var(--nvb-color-neutral-200)}.nvb-root .nvb-text-neutral-300{color:var(--nvb-color-neutral-300)}.nvb-root .nvb-text-neutral-400{color:var(--nvb-color-neutral-400)}.nvb-root .nvb-text-neutral-500{color:var(--nvb-color-neutral-500)}.nvb-root .nvb-text-neutral-600{color:var(--nvb-color-neutral-600)}.nvb-root .nvb-text-neutral-700{color:var(--nvb-color-neutral-700)}.nvb-root .nvb-text-neutral-800{color:var(--nvb-color-neutral-800)}.nvb-root .nvb-text-neutral-900{color:var(--nvb-color-neutral-900)}.nvb-root .nvb-text-neutral-950{color:var(--nvb-color-neutral-950)}.nvb-root .nvb-p-2{padding:var(--nvb-space-2)}.nvb-root .nvb-p-3{padding:var(--nvb-space-3)}}}@layer elements{.nvb-root{--nvb-control-height: 40px;--nvb-control-height-sm: 32px;--nvb-control-padding-x: 12px;--nvb-control-font-size: 14px;--nvb-control-font-weight: 400;--nvb-control-radius: var(--nvb-radius-md);--nvb-input-height: 40px;--nvb-input-padding-x: 12px;--nvb-input-font-size: 14px;--nvb-input-radius: var(--nvb-radius-md);--nvb-input-border-width: 1px;--nvb-input-border-color: var(--nvb-color-neutral-300);--nvb-input-bg: var(--nvb-color-neutral-000);--nvb-input-text-color: var(--nvb-color-neutral-800);--nvb-input-placeholder-color: var(--nvb-color-neutral-500);--nvb-input-focus-border-color: var(--nvb-color-primary-500);--nvb-input-disabled-bg: var(--nvb-color-neutral-100);--nvb-input-disabled-text-color: var(--nvb-color-neutral-500);--nvb-input-error-border-color: var(--nvb-color-risk-500);--nvb-input-error-focus-border-color: var(--nvb-color-risk-600);--nvb-textarea-min-height: 120px;--nvb-textarea-padding-x: 12px;--nvb-textarea-padding-y: 12px;--nvb-control-button-border-width: 1px;--nvb-control-button-border-color: var(--nvb-color-neutral-300);--nvb-control-button-bg: var(--nvb-color-neutral-000);--nvb-control-button-text-color: var(--nvb-color-primary-700);--nvb-control-button-hover-border-color: var(--nvb-color-primary-300);--nvb-control-button-hover-bg: color-mix( in oklab, var(--nvb-color-primary-050) 40%, var(--nvb-color-neutral-000) );--nvb-control-button-hover-text-color: var(--nvb-color-primary-800);--nvb-checkbox-size: 18px;--nvb-checkbox-border-width: 1.5px;--nvb-checkbox-radius: var(--nvb-radius-sm);--nvb-checkbox-border-color: var(--nvb-color-neutral-300);--nvb-checkbox-bg: var(--nvb-color-neutral-000);--nvb-checkbox-checked-bg: var(--nvb-color-primary-500);--nvb-checkbox-checked-border-color: var(--nvb-color-primary-500);--nvb-checkbox-check-color: var(--nvb-color-neutral-000);--nvb-checkbox-disabled-bg: var(--nvb-color-neutral-100);--nvb-checkbox-disabled-opacity: .5;--nvb-radio-size: 18px;--nvb-radio-border-width: 1.5px;--nvb-radio-border-color: var(--nvb-color-neutral-300);--nvb-radio-bg: var(--nvb-color-neutral-000);--nvb-radio-checked-border-color: var(--nvb-color-primary-500);--nvb-radio-dot-size: 8px;--nvb-radio-dot-color: var(--nvb-color-primary-500);--nvb-radio-disabled-bg: var(--nvb-color-neutral-100);--nvb-radio-disabled-opacity: .5;--nvb-focus-ring: 0 0 0 1px var(--nvb-color-neutral-000), 0 0 0 3px color-mix(in oklab, var(--nvb-color-primary-400) 55%, transparent);--nvb-font-family: var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif );font-family:var(--nvb-font-family);color:var(--nvb-color-text-800)}:where(.nvb-root input[type=text],.nvb-root input[type=number],.nvb-root input[type=email],.nvb-root input[type=search],.nvb-root input[type=tel],.nvb-root input[type=url],.nvb-root input[type=password],.nvb-root input[type=date],.nvb-root input[type=datetime-local],.nvb-root input[type=month],.nvb-root input[type=time],.nvb-root input[type=week],.nvb-root select,.nvb-root textarea){border:var(--nvb-input-border-width) solid var(--nvb-input-border-color);border-radius:var(--nvb-input-radius);background:var(--nvb-input-bg);color:var(--nvb-input-text-color);font-family:var(--nvb-font-family);font-size:var(--nvb-input-font-size);line-height:20px;box-shadow:none;transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}:where(.nvb-root input[type=text],.nvb-root input[type=number],.nvb-root input[type=email],.nvb-root input[type=search],.nvb-root input[type=tel],.nvb-root input[type=url],.nvb-root input[type=password],.nvb-root input[type=date],.nvb-root input[type=datetime-local],.nvb-root input[type=month],.nvb-root input[type=time],.nvb-root input[type=week],.nvb-root select){min-height:var(--nvb-input-height);padding:0 var(--nvb-input-padding-x)}:where(.nvb-root textarea){min-height:var(--nvb-textarea-min-height);padding:var(--nvb-textarea-padding-y) var(--nvb-textarea-padding-x);resize:vertical}:where(.nvb-root input[type=text]:focus,.nvb-root input[type=number]:focus,.nvb-root input[type=email]:focus,.nvb-root input[type=search]:focus,.nvb-root input[type=tel]:focus,.nvb-root input[type=url]:focus,.nvb-root input[type=password]:focus,.nvb-root input[type=date]:focus,.nvb-root input[type=datetime-local]:focus,.nvb-root input[type=month]:focus,.nvb-root input[type=time]:focus,.nvb-root input[type=week]:focus,.nvb-root select:focus,.nvb-root textarea:focus){border-color:var(--nvb-input-focus-border-color);box-shadow:var(--nvb-focus-ring);outline:0}:where(.nvb-root input::placeholder,.nvb-root textarea::placeholder){color:var(--nvb-input-placeholder-color);opacity:1}:where(.nvb-root input[type=text]:disabled,.nvb-root input[type=number]:disabled,.nvb-root input[type=email]:disabled,.nvb-root input[type=search]:disabled,.nvb-root input[type=tel]:disabled,.nvb-root input[type=url]:disabled,.nvb-root input[type=password]:disabled,.nvb-root input[type=date]:disabled,.nvb-root input[type=datetime-local]:disabled,.nvb-root input[type=month]:disabled,.nvb-root input[type=time]:disabled,.nvb-root input[type=week]:disabled,.nvb-root select:disabled,.nvb-root textarea:disabled){background-color:var(--nvb-input-disabled-bg);color:var(--nvb-input-disabled-text-color);cursor:not-allowed}.nvb-root [data-nvb-icon-rendered=true]{display:inline-flex;align-items:center;justify-content:center;line-height:1;vertical-align:middle}.nvb-root span[data-nvb-icon-rendered=true]{width:1em;height:1em;flex-shrink:0}.nvb-root [data-nvb-icon-rendered=true]>svg{width:1em;height:1em;display:block;fill:currentColor}.nvb-root .nvb-control__text-input,.nvb-root .nvb-control__attribute-input,.nvb-root .nvb-control__column-input{display:block;box-sizing:border-box;width:100%;min-height:var(--nvb-input-height);padding:0 var(--nvb-input-padding-x);font-size:var(--nvb-input-font-size);line-height:1.4;color:var(--nvb-input-text-color);border-radius:var(--nvb-input-radius);outline:none;font-family:var(--nvb-font-family);box-shadow:none;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease}.nvb-root .nvb-control__text-input,.nvb-root .nvb-control__attribute-input{border:var(--nvb-input-border-width) solid var(--nvb-input-border-color);background-color:var(--nvb-input-bg)}.nvb-root .nvb-control__column-input{border:var(--nvb-input-border-width) solid transparent;background-color:var(--nvb-input-bg)}.nvb-root .nvb-control__text-input:focus,.nvb-root .nvb-control__attribute-input:focus,.nvb-root .nvb-control__column-input:focus{border-color:var(--nvb-input-focus-border-color);box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-field--has-errors .nvb-control__text-input,.nvb-root .nvb-field--has-errors .nvb-control__attribute-input,.nvb-root .nvb-field--has-errors .nvb-control__column-input,.nvb-root .nvb-field--has-errors input[type=text],.nvb-root .nvb-field--has-errors input[type=number],.nvb-root .nvb-field--has-errors input[type=email],.nvb-root .nvb-field--has-errors input[type=search],.nvb-root .nvb-field--has-errors input[type=tel],.nvb-root .nvb-field--has-errors input[type=url],.nvb-root .nvb-field--has-errors input[type=password],.nvb-root .nvb-field--has-errors select,.nvb-root .nvb-field--has-errors textarea{border-color:var(--nvb-input-error-border-color)}.nvb-root .nvb-field--has-errors .nvb-control__text-input:focus,.nvb-root .nvb-field--has-errors .nvb-control__attribute-input:focus,.nvb-root .nvb-field--has-errors .nvb-control__column-input:focus,.nvb-root .nvb-field--has-errors input[type=text]:focus,.nvb-root .nvb-field--has-errors input[type=number]:focus,.nvb-root .nvb-field--has-errors input[type=email]:focus,.nvb-root .nvb-field--has-errors input[type=search]:focus,.nvb-root .nvb-field--has-errors input[type=tel]:focus,.nvb-root .nvb-field--has-errors input[type=url]:focus,.nvb-root .nvb-field--has-errors input[type=password]:focus,.nvb-root .nvb-field--has-errors select:focus,.nvb-root .nvb-field--has-errors textarea:focus{border-color:var(--nvb-input-error-focus-border-color)}.nvb-root .nvb-field--has-errors .nvb-control__checkbox-input,.nvb-root .nvb-field--has-errors .nvb-control__radio-input{border-color:var(--nvb-input-error-border-color)}.nvb-root .nvb-control__column-input:disabled{background-color:var(--nvb-input-disabled-bg);color:var(--nvb-input-disabled-text-color);cursor:not-allowed}.nvb-root :where(.nvb-page,.nvb-page__content,.nvb-panel,.nvb-panel__body,.nvb-panel__content,.nvb-row,.nvb-row-content,.nvb-column,.nvb-field,.nvb-field__content,select-element,multi-select-element,autocomplete-element,datepicker-element,date-range-element,phone-input-element,nvb-select):has(:where(.nvb-select-container--open,.nvb-multi-select-container--open,.nvb-autocomplete--open,.nvb-datepicker--open,.nvb-date-range--open,.nvb-select__control--open)){position:relative;z-index:var(--nvb-floating-overlay-container-z-index, 2147482990);overflow:visible}.nvb-root textarea.nvb-control__attribute-input,.nvb-root textarea.nvb-control__text-input,.nvb-root textarea.nvb-control__column-input{min-height:var(--nvb-textarea-min-height);padding:var(--nvb-textarea-padding-y) var(--nvb-textarea-padding-x);line-height:1.35}.nvb-root .nvb-control__checkbox-input{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:var(--nvb-checkbox-size);min-width:var(--nvb-checkbox-size);height:var(--nvb-checkbox-size);min-height:var(--nvb-checkbox-size);border:var(--nvb-checkbox-border-width) solid var(--nvb-checkbox-border-color);border-radius:var(--nvb-checkbox-radius);position:relative;display:inline-block;vertical-align:middle;background-color:var(--nvb-checkbox-bg);cursor:pointer;margin:0;padding:0;transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease}.nvb-root .nvb-control__checkbox-input:hover{border-color:var(--nvb-checkbox-checked-border-color)}.nvb-root .nvb-control__checkbox-input:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-control__checkbox-input:checked{background-color:var(--nvb-checkbox-checked-bg);border-color:var(--nvb-checkbox-checked-border-color)}.nvb-root .nvb-control__checkbox-input:checked:after{content:"";position:absolute;left:50%;top:45%;width:5px;height:8px;border:solid var(--nvb-checkbox-check-color);border-width:0 2px 2px 0;transform:translate(-50%,-50%) rotate(45deg);transform-origin:center}.nvb-root .nvb-control__checkbox-input:disabled{cursor:not-allowed;opacity:var(--nvb-checkbox-disabled-opacity);background-color:var(--nvb-checkbox-disabled-bg)}.nvb-root .nvb-control__radio-input{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:var(--nvb-radio-size);min-width:var(--nvb-radio-size);height:var(--nvb-radio-size);min-height:var(--nvb-radio-size);border:var(--nvb-radio-border-width) solid var(--nvb-radio-border-color);border-radius:50%;position:relative;display:inline-block;vertical-align:middle;background-color:var(--nvb-radio-bg);cursor:pointer;margin:0;padding:0;transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease}.nvb-root .nvb-control__radio-input:hover{border-color:var(--nvb-radio-checked-border-color)}.nvb-root .nvb-control__radio-input:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-control__radio-input:checked{border-color:var(--nvb-radio-checked-border-color)}.nvb-root .nvb-control__radio-input:checked:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:var(--nvb-radio-dot-size);height:var(--nvb-radio-dot-size);border-radius:50%;background-color:var(--nvb-radio-dot-color)}.nvb-root .nvb-control__radio-input:disabled{cursor:not-allowed;opacity:var(--nvb-radio-disabled-opacity);background-color:var(--nvb-radio-disabled-bg)}.nvb-root input[type=number]::-webkit-inner-spin-button,.nvb-root input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.nvb-root .nvb-select-button--buttons{display:inline-flex;flex-wrap:nowrap;align-items:stretch;width:fit-content;max-width:100%}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical{flex-direction:column}.nvb-root .nvb-select-button--buttons .nvb-select-button__option{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--nvb-control-height, 36px);padding:0 14px;border:1px solid var(--nvb-color-neutral-300);border-radius:0;background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);font-size:14px;font-weight:500;font-family:inherit;line-height:1;white-space:nowrap;cursor:pointer;z-index:0;transition:background-color .12s ease,border-color .12s ease,color .12s ease}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option+.nvb-select-button__option{margin-left:-1px}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option+.nvb-select-button__option{margin-top:-1px}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:first-child{border-radius:var(--nvb-radius-md) 0 0 var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:last-child{border-radius:0 var(--nvb-radius-md) var(--nvb-radius-md) 0}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:first-child:last-child{border-radius:var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:first-child{border-radius:var(--nvb-radius-md) var(--nvb-radius-md) 0 0}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:last-child{border-radius:0 0 var(--nvb-radius-md) var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:first-child:last-child{border-radius:var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:hover:not(:disabled){background:color-mix(in oklab,var(--nvb-color-neutral-100) 80%,var(--nvb-color-neutral-000));border-color:var(--nvb-color-neutral-400);z-index:1}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:focus-visible{outline:0;z-index:2;box-shadow:var(--nvb-focus-ring, 0 0 0 3px color-mix(in oklab, var(--nvb-color-primary-500) 18%, transparent))}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-primary-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-primary-500);color:var(--nvb-color-primary-700);font-weight:600;z-index:1}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-neutral.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-neutral-700) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-neutral-500);color:var(--nvb-color-neutral-900)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-success.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-success-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-success-500);color:var(--nvb-color-success-700)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-warning.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-warning-500) 12%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-warning-500);color:var(--nvb-color-warning-800)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-risk.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-risk-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-risk-500);color:var(--nvb-color-risk-700)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:disabled,.nvb-root .nvb-select-button--buttons .nvb-select-button__option--disabled{opacity:.55;cursor:not-allowed}.nvb-root .nvb-select-button--buttons.nvb-select-button--size-small .nvb-select-button__option{height:var(--nvb-control-height-sm, 28px);padding:0 10px;font-size:13px}.nvb-root .nvb-select-button--buttons.nvb-select-button--size-large .nvb-select-button__option{height:44px;padding:0 18px;font-size:15px}.nvb-root .nvb-select-button--segmented{display:inline-flex;flex-wrap:nowrap;align-items:stretch;gap:2px;width:fit-content;max-width:100%;padding:3px;border-radius:var(--nvb-radius-full);background:color-mix(in oklab,var(--nvb-color-neutral-100) 85%,var(--nvb-color-neutral-000));border:1px solid color-mix(in oklab,var(--nvb-color-neutral-300) 55%,transparent)}.nvb-root .nvb-select-button--segmented.nvb-select-button--vertical{flex-direction:column;border-radius:14px}.nvb-root .nvb-select-button--segmented .nvb-select-button__option{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--nvb-control-height, 36px);padding:0 16px;border:0;border-radius:var(--nvb-radius-full);background:transparent;color:var(--nvb-color-neutral-600);font-size:14px;font-weight:500;font-family:inherit;cursor:pointer;transition:background-color .12s ease,color .12s ease,box-shadow .12s ease}.nvb-root .nvb-select-button--segmented.nvb-select-button--vertical .nvb-select-button__option{border-radius:11px}.nvb-root .nvb-select-button--segmented .nvb-select-button__option:hover:not(:disabled){background:color-mix(in oklab,var(--nvb-color-neutral-000) 60%,transparent);color:var(--nvb-color-neutral-800)}.nvb-root .nvb-select-button--segmented .nvb-select-button__option--selected{background:var(--nvb-color-neutral-000, #ffffff);color:var(--nvb-color-neutral-900);font-weight:600;box-shadow:0 1px 3px #0000001f,0 1px 2px #00000014}.nvb-root .nvb-select-button--segmented .nvb-select-button__option:disabled,.nvb-root .nvb-select-button--segmented .nvb-select-button__option--disabled{opacity:.55;cursor:not-allowed}.nvb-root .nvb-select-button--segmented.nvb-select-button--size-small .nvb-select-button__option{min-height:var(--nvb-control-height-sm, 28px);padding:0 12px;font-size:13px}.nvb-root .nvb-select-button--segmented.nvb-select-button--size-large .nvb-select-button__option{min-height:44px;padding:0 20px;font-size:15px}}:host{display:block;width:100%;height:100%;max-height:100%;min-height:0;isolation:isolate;overflow:hidden;font-family:var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif );color:var(--nvb-color-neutral-700);background:transparent;color-scheme:light}:host([data-theme="dark"]){color-scheme:dark}:host *{box-sizing:border-box}:host button:focus-visible,:host input:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:2px solid var(--nvb-color-primary-500);outline-offset:1px}:host button,:host input,:host select,:host textarea{font-family:var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif )}:host(.nvb-theme-switching),:host(.nvb-theme-switching) *{transition:none!important;animation:none!important}.ngx-view-builder-renderer{width:100%;height:100%;min-height:0}.ngx-view-builder-renderer>runtime-preview{display:block;width:100%;height:100%;min-height:0}\n']}]}],ctorParameters:()=>[],propDecorators:{model:[{type:l.Input,args:[{isSignal:true,alias:"model",required:false}]}],pageJson:[{type:l.Input,args:[{isSignal:true,alias:"pageJson",required:false}]}],dataJson:[{type:l.Input,args:[{isSignal:true,alias:"dataJson",required:false}]}],language:[{type:l.Input,args:[{isSignal:true,alias:"language",required:false}]}],theme:[{type:l.Input,args:[{isSignal:true,alias:"theme",required:false}]}],uiDictionaries:[{type:l.Input,args:[{isSignal:true,alias:"uiDictionaries",required:false}]}],contentTranslations:[{type:l.Input,args:[{isSignal:true,alias:"contentTranslations",required:false}]}],cssVariables:[{type:l.Input,args:[{isSignal:true,alias:"cssVariables",required:false}]}],externalConfig:[{type:l.Input,args:[{isSignal:true,alias:"externalConfig",required:false}]}],externalConfigUrl:[{type:l.Input,args:[{isSignal:true,alias:"externalConfigUrl",required:false}]}],viewportSettings:[{type:l.Input,args:[{isSignal:true,alias:"viewportSettings",required:false}]}],activeTab:[{type:l.Input,args:[{isSignal:true,alias:"activeTab",required:false}]}],hideHeaderTabs:[{type:l.Input,args:[{isSignal:true,alias:"hideHeaderTabs",required:false}]}],headerActions:[{type:l.Input,args:[{isSignal:true,alias:"headerActions",required:false}]}],runtimeSettings:[{type:l.Input,args:[{isSignal:true,alias:"runtimeSettings",required:false}]}],valueChanged:[{type:l.Output,args:["valueChanged"]}],structureChanged:[{type:l.Output,args:["structureChanged"]}],tabChanged:[{type:l.Output,args:["tabChanged"]}],languageChanged:[{type:l.Output,args:["languageChanged"]}],saveRequested:[{type:l.Output,args:["saveRequested"]}],headerActionRequested:[{type:l.Output,args:["headerActionRequested"]}],tableSettingsChanged:[{type:l.Output,args:["tableSettingsChanged"]}],tableSettingsApplied:[{type:l.Output,args:["tableSettingsApplied"]}],tableSettingsRequested:[{type:l.Output,args:["tableSettingsRequested"]}],tableSettingsSaveRequested:[{type:l.Output,args:["tableSettingsSaveRequested"]}],tableFiltersChanged:[{type:l.Output,args:["tableFiltersChanged"]}],tableFiltersApplied:[{type:l.Output,args:["tableFiltersApplied"]}],tableSavedFiltersChanged:[{type:l.Output,args:["tableSavedFiltersChanged"]}],tableSavedFiltersRequested:[{type:l.Output,args:["tableSavedFiltersRequested"]}],tableSavedFilterSaveRequested:[{type:l.Output,args:["tableSavedFilterSaveRequested"]}]}});var On=class Jt{model=p(null,...ngDevMode?[{debugName:"model"}]:[]);pageJson=p(null,...ngDevMode?[{debugName:"pageJson"}]:[]);dataJson=p(null,...ngDevMode?[{debugName:"dataJson"}]:[]);language=p(null,...ngDevMode?[{debugName:"language"}]:[]);theme=p(null,...ngDevMode?[{debugName:"theme"}]:[]);uiDictionaries=p(null,...ngDevMode?[{debugName:"uiDictionaries"}]:[]);contentTranslations=p(null,...ngDevMode?[{debugName:"contentTranslations"}]:[]);cssVariables=p(null,...ngDevMode?[{debugName:"cssVariables"}]:[]);externalConfig=p(null,...ngDevMode?[{debugName:"externalConfig"}]:[]);externalConfigUrl=p(null,...ngDevMode?[{debugName:"externalConfigUrl"}]:[]);viewportSettings=p(null,...ngDevMode?[{debugName:"viewportSettings"}]:[]);activeTab=p(null,...ngDevMode?[{debugName:"activeTab"}]:[]);hideHeaderTabs=p(true,...ngDevMode?[{debugName:"hideHeaderTabs"}]:[]);headerActions=p(null,...ngDevMode?[{debugName:"headerActions"}]:[]);runtimeSettings=p(null,...ngDevMode?[{debugName:"runtimeSettings"}]:[]);valueChanged=w();structureChanged=w();tabChanged=w();languageChanged=w();saveRequested=w();headerActionRequested=w();tableSettingsChanged=w();tableSettingsApplied=w();tableSettingsRequested=w();tableSettingsSaveRequested=w();tableFiltersChanged=w();tableFiltersApplied=w();tableSavedFiltersChanged=w();tableSavedFiltersRequested=w();tableSavedFilterSaveRequested=w();rendererComponent;runtimeModel=h(new ce,...ngDevMode?[{debugName:"runtimeModel"}]:[]);internalModel=new ce;boundModel=null;lastStructureJson=null;lastDataJson=null;lockedTab=D.PREVIEW;resolvedActiveTab=y(()=>{return this.activeTab()===D.PREVIEW?D.PREVIEW:this.lockedTab},...ngDevMode?[{debugName:"resolvedActiveTab"}]:[]);constructor(){S(()=>{const e=this.model()??this.internalModel;if(this.boundModel!==e){this.boundModel=e;this.lastStructureJson=null;this.lastDataJson=null}const t=this.normalizeStructureJsonInput(this.pageJson());if(t&&t!==this.lastStructureJson){e.setJson(t);this.lastStructureJson=t}const n=this.normalizeDataJsonInput(this.dataJson());if(n&&n!==this.lastDataJson){e.setDataJson(n);this.lastDataJson=n}if(this.runtimeModel()!==e)this.runtimeModel.set(e)})}builderModel(){return this.runtimeModel()}onValueChanged(e){this.valueChanged.emit(e)}onStructureChanged(e){this.structureChanged.emit(e)}onTabChanged(e){this.tabChanged.emit(e)}onLanguageChanged(e){this.languageChanged.emit(e)}onSaveRequested(){this.saveRequested.emit()}onHeaderActionRequested(e){this.headerActionRequested.emit(e)}onTableSettingsChanged(e){this.tableSettingsChanged.emit(e);this.tableSettingsApplied.emit(e)}onTableSettingsRequested(e){this.tableSettingsRequested.emit(e)}onTableSettingsSaveRequested(e){this.tableSettingsSaveRequested.emit(e)}onTableFiltersChanged(e){this.tableFiltersChanged.emit(e);this.tableFiltersApplied.emit(e)}onTableSavedFiltersChanged(e){this.tableSavedFiltersChanged.emit(e)}onTableSavedFiltersRequested(e){this.tableSavedFiltersRequested.emit(e)}onTableSavedFilterSaveRequested(e){this.tableSavedFilterSaveRequested.emit(e)}setTableSettings(e,t,n){this.rendererComponent?.setTableSettings(e,t,n)}getTableSettings(e){return this.rendererComponent?.getTableSettings(e)??null}setLanguage(e){this.rendererComponent?.setLanguage(e)}getLanguage(){return this.rendererComponent?.getLanguage()??""}setTableFilters(e,t,n){this.rendererComponent?.setTableFilters(e,t,n)}getTableFilters(e){return this.rendererComponent?.getTableFilters(e)??null}setTableSavedFilters(e,t,n){this.rendererComponent?.setTableSavedFilters(e,t,n)}getTableSavedFilters(e){return this.rendererComponent?.getTableSavedFilters(e)??null}normalizeStructureInput(e){if(!e)return null;if(typeof e==="string")try{const t=JSON.parse(e);return t&&typeof t==="object"?t:null}catch(t){console.warn("[NgxViewBuilder] Failed to parse pageJson.",{error:t instanceof Error?t.message:t});return null}return e}normalizeStructureJsonInput(e){const t=this.normalizeStructureInput(e);if(!t)return null;try{return JSON.stringify(t)}catch(n){console.warn("[NgxViewBuilder] Failed to serialize pageJson.",{error:n instanceof Error?n.message:n});return null}}normalizeDataInput(e){if(!e)return null;if(typeof e==="string")try{const t=JSON.parse(e);return t&&typeof t==="object"?t:null}catch(t){console.warn("[NgxViewBuilder] Failed to parse dataJson.",{error:t instanceof Error?t.message:t});return null}return e}normalizeDataJsonInput(e){const t=this.normalizeDataInput(e);if(!t)return null;try{return JSON.stringify(t)}catch(n){console.warn("[NgxViewBuilder] Failed to serialize dataJson.",{error:n instanceof Error?n.message:n});return null}}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Jt,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.1.0",version:"22.2.1",type:Jt,isStandalone:true,selector:"ngx-view-builder",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:false,transformFunction:null},pageJson:{classPropertyName:"pageJson",publicName:"pageJson",isSignal:true,isRequired:false,transformFunction:null},dataJson:{classPropertyName:"dataJson",publicName:"dataJson",isSignal:true,isRequired:false,transformFunction:null},language:{classPropertyName:"language",publicName:"language",isSignal:true,isRequired:false,transformFunction:null},theme:{classPropertyName:"theme",publicName:"theme",isSignal:true,isRequired:false,transformFunction:null},uiDictionaries:{classPropertyName:"uiDictionaries",publicName:"uiDictionaries",isSignal:true,isRequired:false,transformFunction:null},contentTranslations:{classPropertyName:"contentTranslations",publicName:"contentTranslations",isSignal:true,isRequired:false,transformFunction:null},cssVariables:{classPropertyName:"cssVariables",publicName:"cssVariables",isSignal:true,isRequired:false,transformFunction:null},externalConfig:{classPropertyName:"externalConfig",publicName:"externalConfig",isSignal:true,isRequired:false,transformFunction:null},externalConfigUrl:{classPropertyName:"externalConfigUrl",publicName:"externalConfigUrl",isSignal:true,isRequired:false,transformFunction:null},viewportSettings:{classPropertyName:"viewportSettings",publicName:"viewportSettings",isSignal:true,isRequired:false,transformFunction:null},activeTab:{classPropertyName:"activeTab",publicName:"activeTab",isSignal:true,isRequired:false,transformFunction:null},hideHeaderTabs:{classPropertyName:"hideHeaderTabs",publicName:"hideHeaderTabs",isSignal:true,isRequired:false,transformFunction:null},headerActions:{classPropertyName:"headerActions",publicName:"headerActions",isSignal:true,isRequired:false,transformFunction:null},runtimeSettings:{classPropertyName:"runtimeSettings",publicName:"runtimeSettings",isSignal:true,isRequired:false,transformFunction:null}},outputs:{valueChanged:"valueChanged",structureChanged:"structureChanged",tabChanged:"tabChanged",languageChanged:"languageChanged",saveRequested:"saveRequested",headerActionRequested:"headerActionRequested",tableSettingsChanged:"tableSettingsChanged",tableSettingsApplied:"tableSettingsApplied",tableSettingsRequested:"tableSettingsRequested",tableSettingsSaveRequested:"tableSettingsSaveRequested",tableFiltersChanged:"tableFiltersChanged",tableFiltersApplied:"tableFiltersApplied",tableSavedFiltersChanged:"tableSavedFiltersChanged",tableSavedFiltersRequested:"tableSavedFiltersRequested",tableSavedFilterSaveRequested:"tableSavedFilterSaveRequested"},viewQueries:[{propertyName:"rendererComponent",first:true,predicate:X,descendants:true}],ngImport:l,template:'<section class="ngx-view-builder-root" data-testid="ngx-view-builder-root">\n <ngx-view-builder-renderer\n [model]="builderModel()"\n [pageJson]="pageJson()"\n [dataJson]="dataJson()"\n [language]="language()"\n [theme]="theme()"\n [uiDictionaries]="uiDictionaries()"\n [contentTranslations]="contentTranslations()"\n [cssVariables]="cssVariables()"\n [externalConfig]="externalConfig()"\n [externalConfigUrl]="externalConfigUrl()"\n [viewportSettings]="viewportSettings()"\n [runtimeSettings]="runtimeSettings()"\n [activeTab]="resolvedActiveTab()"\n [headerActions]="headerActions()"\n [hideHeaderTabs]="hideHeaderTabs()"\n (valueChanged)="onValueChanged($event)"\n (structureChanged)="onStructureChanged($event)"\n (tabChanged)="onTabChanged($event)"\n (languageChanged)="onLanguageChanged($event)"\n (saveRequested)="onSaveRequested()"\n (headerActionRequested)="onHeaderActionRequested($event)"\n (tableSettingsChanged)="onTableSettingsChanged($event)"\n (tableSettingsRequested)="onTableSettingsRequested($event)"\n (tableSettingsSaveRequested)="onTableSettingsSaveRequested($event)"\n (tableFiltersChanged)="onTableFiltersChanged($event)"\n (tableSavedFiltersChanged)="onTableSavedFiltersChanged($event)"\n (tableSavedFiltersRequested)="onTableSavedFiltersRequested($event)"\n (tableSavedFilterSaveRequested)="onTableSavedFilterSaveRequested($event)"\n />\n</section>\n',styles:[":host{display:block;width:100%;height:100%;min-height:0}.ngx-view-builder-root{width:100%;height:100%;min-height:0}.ngx-view-builder-root>ngx-view-builder-renderer{display:block;width:100%;height:100%;min-height:0}\n"],dependencies:[{kind:"component",type:X,selector:"ngx-view-builder-renderer",inputs:["model","pageJson","dataJson","language","theme","uiDictionaries","contentTranslations","cssVariables","externalConfig","externalConfigUrl","viewportSettings","activeTab","hideHeaderTabs","headerActions","runtimeSettings"],outputs:["valueChanged","structureChanged","tabChanged","languageChanged","saveRequested","headerActionRequested","tableSettingsChanged","tableSettingsApplied","tableSettingsRequested","tableSettingsSaveRequested","tableFiltersChanged","tableFiltersApplied","tableSavedFiltersChanged","tableSavedFiltersRequested","tableSavedFilterSaveRequested"]}],changeDetection:l.ChangeDetectionStrategy.Eager})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:On,decorators:[{type:A,args:[{selector:"ngx-view-builder",imports:[X],changeDetection:E.Eager,template:'<section class="ngx-view-builder-root" data-testid="ngx-view-builder-root">\n <ngx-view-builder-renderer\n [model]="builderModel()"\n [pageJson]="pageJson()"\n [dataJson]="dataJson()"\n [language]="language()"\n [theme]="theme()"\n [uiDictionaries]="uiDictionaries()"\n [contentTranslations]="contentTranslations()"\n [cssVariables]="cssVariables()"\n [externalConfig]="externalConfig()"\n [externalConfigUrl]="externalConfigUrl()"\n [viewportSettings]="viewportSettings()"\n [runtimeSettings]="runtimeSettings()"\n [activeTab]="resolvedActiveTab()"\n [headerActions]="headerActions()"\n [hideHeaderTabs]="hideHeaderTabs()"\n (valueChanged)="onValueChanged($event)"\n (structureChanged)="onStructureChanged($event)"\n (tabChanged)="onTabChanged($event)"\n (languageChanged)="onLanguageChanged($event)"\n (saveRequested)="onSaveRequested()"\n (headerActionRequested)="onHeaderActionRequested($event)"\n (tableSettingsChanged)="onTableSettingsChanged($event)"\n (tableSettingsRequested)="onTableSettingsRequested($event)"\n (tableSettingsSaveRequested)="onTableSettingsSaveRequested($event)"\n (tableFiltersChanged)="onTableFiltersChanged($event)"\n (tableSavedFiltersChanged)="onTableSavedFiltersChanged($event)"\n (tableSavedFiltersRequested)="onTableSavedFiltersRequested($event)"\n (tableSavedFilterSaveRequested)="onTableSavedFilterSaveRequested($event)"\n />\n</section>\n',styles:[":host{display:block;width:100%;height:100%;min-height:0}.ngx-view-builder-root{width:100%;height:100%;min-height:0}.ngx-view-builder-root>ngx-view-builder-renderer{display:block;width:100%;height:100%;min-height:0}\n"]}]}],ctorParameters:()=>[],propDecorators:{model:[{type:l.Input,args:[{isSignal:true,alias:"model",required:false}]}],pageJson:[{type:l.Input,args:[{isSignal:true,alias:"pageJson",required:false}]}],dataJson:[{type:l.Input,args:[{isSignal:true,alias:"dataJson",required:false}]}],language:[{type:l.Input,args:[{isSignal:true,alias:"language",required:false}]}],theme:[{type:l.Input,args:[{isSignal:true,alias:"theme",required:false}]}],uiDictionaries:[{type:l.Input,args:[{isSignal:true,alias:"uiDictionaries",required:false}]}],contentTranslations:[{type:l.Input,args:[{isSignal:true,alias:"contentTranslations",required:false}]}],cssVariables:[{type:l.Input,args:[{isSignal:true,alias:"cssVariables",required:false}]}],externalConfig:[{type:l.Input,args:[{isSignal:true,alias:"externalConfig",required:false}]}],externalConfigUrl:[{type:l.Input,args:[{isSignal:true,alias:"externalConfigUrl",required:false}]}],viewportSettings:[{type:l.Input,args:[{isSignal:true,alias:"viewportSettings",required:false}]}],activeTab:[{type:l.Input,args:[{isSignal:true,alias:"activeTab",required:false}]}],hideHeaderTabs:[{type:l.Input,args:[{isSignal:true,alias:"hideHeaderTabs",required:false}]}],headerActions:[{type:l.Input,args:[{isSignal:true,alias:"headerActions",required:false}]}],runtimeSettings:[{type:l.Input,args:[{isSignal:true,alias:"runtimeSettings",required:false}]}],valueChanged:[{type:l.Output,args:["valueChanged"]}],structureChanged:[{type:l.Output,args:["structureChanged"]}],tabChanged:[{type:l.Output,args:["tabChanged"]}],languageChanged:[{type:l.Output,args:["languageChanged"]}],saveRequested:[{type:l.Output,args:["saveRequested"]}],headerActionRequested:[{type:l.Output,args:["headerActionRequested"]}],tableSettingsChanged:[{type:l.Output,args:["tableSettingsChanged"]}],tableSettingsApplied:[{type:l.Output,args:["tableSettingsApplied"]}],tableSettingsRequested:[{type:l.Output,args:["tableSettingsRequested"]}],tableSettingsSaveRequested:[{type:l.Output,args:["tableSettingsSaveRequested"]}],tableFiltersChanged:[{type:l.Output,args:["tableFiltersChanged"]}],tableFiltersApplied:[{type:l.Output,args:["tableFiltersApplied"]}],tableSavedFiltersChanged:[{type:l.Output,args:["tableSavedFiltersChanged"]}],tableSavedFiltersRequested:[{type:l.Output,args:["tableSavedFiltersRequested"]}],tableSavedFilterSaveRequested:[{type:l.Output,args:["tableSavedFilterSaveRequested"]}],rendererComponent:[{type:Qe,args:[X]}]}});const Te="preview";var Ln=class Kt{model=p(null,...ngDevMode?[{debugName:"model"}]:[]);pageJson=p(null,...ngDevMode?[{debugName:"pageJson"}]:[]);dataJson=p(null,...ngDevMode?[{debugName:"dataJson"}]:[]);language=p(null,...ngDevMode?[{debugName:"language"}]:[]);theme=p(null,...ngDevMode?[{debugName:"theme"}]:[]);uiDictionaries=p(null,...ngDevMode?[{debugName:"uiDictionaries"}]:[]);contentTranslations=p(null,...ngDevMode?[{debugName:"contentTranslations"}]:[]);cssVariables=p(null,...ngDevMode?[{debugName:"cssVariables"}]:[]);externalConfig=p(null,...ngDevMode?[{debugName:"externalConfig"}]:[]);externalConfigUrl=p(null,...ngDevMode?[{debugName:"externalConfigUrl"}]:[]);viewportSettings=p(null,...ngDevMode?[{debugName:"viewportSettings"}]:[]);runtimeSettings=p(null,...ngDevMode?[{debugName:"runtimeSettings"}]:[]);structureRendered=h(false,...ngDevMode?[{debugName:"structureRendered"}]:[]);valueChanged=w();structureChanged=w();languageChanged=w();tableSettingsChanged=w();tableSettingsApplied=w();tableSettingsRequested=w();tableSettingsSaveRequested=w();tableFiltersChanged=w();tableFiltersApplied=w();tableSavedFiltersChanged=w();tableSavedFiltersRequested=w();tableSavedFilterSaveRequested=w();resolvedViewportSettings=y(()=>{return this.viewportSettings()??this.runtimeSettings()?.viewportSettings??null},...ngDevMode?[{debugName:"resolvedViewportSettings"}]:[]);resolvedPreviewSettings=y(()=>{const e=this.runtimeSettings()?.preview;if(!e)return{mode:"runtime"};const t=String(e.mode??"").trim().toLowerCase();if(t==="default"||t==="runtime")return e;return{...e,mode:"runtime"}},...ngDevMode?[{debugName:"resolvedPreviewSettings"}]:[]);documentRef=g(Vn);renderer=g(Dn);hostElement=g(Ze);ngxViewBuilderApiService=g(P);hostNgxViewBuilderApiService=g(P,{skipSelf:true,optional:true});disposeApiEventBridge=null;runtimeVariablesService=g(fe);domInstrumentationService=g(Ce);previewRendererService=g(H);dataService=g(O);dataSourceService=g(ue);runtimeRenderSettingsService=g(ae);runtimeLazyElementLoaderService=g(An);internalModel=new ce;lastStructureJson=null;lastDataJson=null;customCssStyleElement=null;cssVariablesStyleElement=null;customCssLinkElements=new Map;markupSecurityService=g(Fe);mutationObserver=null;inheritedThemeObserver=null;themeSwitchRafHandle=null;externalConfigRequestId=0;isInstrumentingDom=false;activeThemeMode="dark";lastAppliedThemePreset=null;customThemeDefinition=null;appliedCssVariableKeys=new Set;appliedCssVariablesSnapshot={};isRuntimeInitialized=false;isViewInitialized=false;pendingAfterRenderNotify=false;renderRequestId=0;getDataSnapshot(){return this.cloneDataSnapshot(this.ngxViewBuilderApiService.getData()??{})}setLanguage(e){this.ngxViewBuilderApiService.setLanguage(e)}getLanguage(){return this.ngxViewBuilderApiService.getLanguage()}setTableSettings(e,t,n){this.ngxViewBuilderApiService.setTableSettings(e,t,n)}getTableSettings(e){return this.ngxViewBuilderApiService.getTableSettings(e)}setTableFilters(e,t,n){this.ngxViewBuilderApiService.setTableFilters(e,t,n)}getTableFilters(e){return this.ngxViewBuilderApiService.getTableFilters(e)}setTableSavedFilters(e,t,n){this.ngxViewBuilderApiService.setTableSavedFilters(e,t,n)}getTableSavedFilters(e){return this.ngxViewBuilderApiService.getTableSavedFilters(e)}flushPendingInputState(){const e=this.hostElement.nativeElement.shadowRoot?.activeElement;if(e instanceof HTMLElement&&typeof e.blur==="function")e.blur()}cloneDataSnapshot(e){try{if(typeof structuredClone==="function")return structuredClone(e)}catch{}return JSON.parse(JSON.stringify(e??{}))}apiValueChangedHandler=e=>{this.valueChanged.emit(e)};apiStructureChangedHandler=e=>{this.structureChanged.emit(e.structure)};apiLanguageChangedHandler=e=>{this.languageChanged.emit(e.language)};apiTableSettingsChangedHandler=e=>{this.tableSettingsChanged.emit(e);this.tableSettingsApplied.emit(e)};apiTableSettingsRequestedHandler=e=>{this.tableSettingsRequested.emit(e)};apiTableSettingsSaveRequestedHandler=e=>{this.tableSettingsSaveRequested.emit(e)};apiTableFiltersChangedHandler=e=>{this.tableFiltersChanged.emit(e);this.tableFiltersApplied.emit(e)};apiTableSavedFiltersChangedHandler=e=>{this.tableSavedFiltersChanged.emit(e)};apiTableSavedFiltersRequestedHandler=e=>{this.tableSavedFiltersRequested.emit(e)};apiTableSavedFilterSaveRequestedHandler=e=>{this.tableSavedFilterSaveRequested.emit(e)};apiCssVariablesChangedHandler=e=>{this.applyCssVariables({...this.resolveThemePresetVariables(this.activeThemeMode),...e.cssVariables})};apiCustomCssChangedHandler=e=>{this.applyCustomCss(e.cssText)};apiCustomCssUrlsChangedHandler=e=>{this.applyCustomCssUrls(e.urls)};apiThemeModeChangedHandler=e=>{this.applyThemePreset(e.theme)};apiCustomThemeChangedHandler=e=>{this.customThemeDefinition=e.theme;this.applyThemePreset(this.activeThemeMode,true);this.reapplyHostCssVariables()};constructor(){this.ngxViewBuilderApiService.onValueChanged.add(this.apiValueChangedHandler);this.ngxViewBuilderApiService.onStructureChanged.add(this.apiStructureChangedHandler);this.ngxViewBuilderApiService.onLanguageChanged.add(this.apiLanguageChangedHandler);this.ngxViewBuilderApiService.onTableSettingsChanged.add(this.apiTableSettingsChangedHandler);this.ngxViewBuilderApiService.onTableSettingsRequested.add(this.apiTableSettingsRequestedHandler);this.ngxViewBuilderApiService.onTableSettingsSaveRequested.add(this.apiTableSettingsSaveRequestedHandler);this.ngxViewBuilderApiService.onTableFiltersChanged.add(this.apiTableFiltersChangedHandler);this.ngxViewBuilderApiService.onTableSavedFiltersChanged.add(this.apiTableSavedFiltersChangedHandler);this.ngxViewBuilderApiService.onTableSavedFiltersRequested.add(this.apiTableSavedFiltersRequestedHandler);this.ngxViewBuilderApiService.onTableSavedFilterSaveRequested.add(this.apiTableSavedFilterSaveRequestedHandler);this.ngxViewBuilderApiService.onCssVariablesChanged.add(this.apiCssVariablesChangedHandler);this.ngxViewBuilderApiService.onCustomCssChanged.add(this.apiCustomCssChangedHandler);this.ngxViewBuilderApiService.onCustomCssUrlsChanged.add(this.apiCustomCssUrlsChangedHandler);this.ngxViewBuilderApiService.onThemeModeChanged.add(this.apiThemeModeChangedHandler);this.ngxViewBuilderApiService.onCustomThemeChanged.add(this.apiCustomThemeChangedHandler);const e=this.ngxViewBuilderApiService.getCssVariables();if(Object.keys(e).length>0)this.applyCssVariables(e);this.applyCustomCss(this.ngxViewBuilderApiService.getCustomCss());this.applyCustomCssUrls(this.ngxViewBuilderApiService.getCustomCssUrls());this.customThemeDefinition=this.ngxViewBuilderApiService.getCustomTheme();const t=this.ngxViewBuilderApiService.getThemeMode();if(t)this.applyThemePreset(t);S(()=>{const n=this.resolveRuntimeState();if(!n)return;if(!this.isRuntimeInitialized){this.applyModelDerivedSettings(n.model);return}const o=n.structureJson!==this.lastStructureJson;const i=n.dataJson!==this.lastDataJson;if(!o&&!i){this.applyModelDerivedSettings(n.model);return}this.lastStructureJson=n.structureJson;this.lastDataJson=n.dataJson;this.applyModelDerivedSettings(n.model);this.renderRuntime(n.model)});S(()=>{const n=this.uiDictionaries();if(n)this.ngxViewBuilderApiService.setUiDictionaries(n)});S(()=>{const n=this.contentTranslations();if(n)this.ngxViewBuilderApiService.setContentTranslations(n)});S(()=>{const n=String(this.language()??"").trim();if(n)this.ngxViewBuilderApiService.setLanguage(n)});S(()=>{const n=this.theme()??this.runtimeSettings()?.theme??null;if(n){this.applyThemePreset(n);this.reapplyHostCssVariables();return}this.syncThemeFromHostIfNeeded();this.reapplyHostCssVariables()});S(()=>{const n=this.runtimeSettings();if(!n)return;this.applyBuilderSettings(n);const o=this.resolveRuntimeState();if(o)this.applyModelDerivedSettings(o.model)});S(()=>{const n=this.externalConfig();if(!n)return;this.applyExternalConfig(n)});S(()=>{const n=String(this.externalConfigUrl()??"").trim();if(!n)return;this.loadExternalConfig(n)})}ngOnInit(){M.isEditor.set(false);M.isPreview.set(false);M.allowRuntimeVariableDataSources.set(true);this.disposeApiEventBridge=it(this.ngxViewBuilderApiService,this.hostNgxViewBuilderApiService);this.runtimeVariablesService.startSync();this.applyDefaultCssVariables(this.activeThemeMode);this.renderer.setAttribute(this.hostElement.nativeElement,"data-theme",this.activeThemeMode);this.setupInheritedThemeSync();this.isRuntimeInitialized=true;queueMicrotask(()=>{const e=this.resolveRuntimeState();if(!e)return;this.lastStructureJson=e.structureJson;this.lastDataJson=e.dataJson;this.applyModelDerivedSettings(e.model);this.renderRuntime(e.model)})}ngAfterViewInit(){this.isViewInitialized=true;this.reapplyRuntimeThemeArtifacts();this.setupDomInstrumentation();this.instrumentDomSoon()}ngOnDestroy(){M.isPreview.set(false);M.allowRuntimeVariableDataSources.set(false);this.disposeApiEventBridge?.();this.disposeApiEventBridge=null;this.ngxViewBuilderApiService.onValueChanged.remove(this.apiValueChangedHandler);this.ngxViewBuilderApiService.onStructureChanged.remove(this.apiStructureChangedHandler);this.ngxViewBuilderApiService.onLanguageChanged.remove(this.apiLanguageChangedHandler);this.ngxViewBuilderApiService.onTableSettingsChanged.remove(this.apiTableSettingsChangedHandler);this.ngxViewBuilderApiService.onTableSettingsRequested.remove(this.apiTableSettingsRequestedHandler);this.ngxViewBuilderApiService.onTableSettingsSaveRequested.remove(this.apiTableSettingsSaveRequestedHandler);this.ngxViewBuilderApiService.onTableFiltersChanged.remove(this.apiTableFiltersChangedHandler);this.ngxViewBuilderApiService.onTableSavedFiltersChanged.remove(this.apiTableSavedFiltersChangedHandler);this.ngxViewBuilderApiService.onTableSavedFiltersRequested.remove(this.apiTableSavedFiltersRequestedHandler);this.ngxViewBuilderApiService.onTableSavedFilterSaveRequested.remove(this.apiTableSavedFilterSaveRequestedHandler);this.ngxViewBuilderApiService.onCssVariablesChanged.remove(this.apiCssVariablesChangedHandler);this.ngxViewBuilderApiService.onCustomCssChanged.remove(this.apiCustomCssChangedHandler);this.ngxViewBuilderApiService.onCustomCssUrlsChanged.remove(this.apiCustomCssUrlsChangedHandler);this.ngxViewBuilderApiService.onThemeModeChanged.remove(this.apiThemeModeChangedHandler);this.ngxViewBuilderApiService.onCustomThemeChanged.remove(this.apiCustomThemeChangedHandler);this.runtimeVariablesService.stopSync();this.mutationObserver?.disconnect();this.inheritedThemeObserver?.disconnect();this.mutationObserver=null;this.inheritedThemeObserver=null;this.customCssStyleElement?.remove();this.customCssStyleElement=null;this.cssVariablesStyleElement?.remove();this.cssVariablesStyleElement=null;this.customCssLinkElements.forEach(e=>e.remove());this.customCssLinkElements.clear();if(this.themeSwitchRafHandle!==null){cancelAnimationFrame(this.themeSwitchRafHandle);this.themeSwitchRafHandle=null}this.renderer.removeClass(this.hostElement.nativeElement,"nvb-theme-switching")}async renderRuntime(e){const t=e?.getJson?.();if(!t)return;const n=++this.renderRequestId;const o=this.deepCloneData(t);if(!this.runtimeRenderSettingsService.isLazyElementRenderingEnabled()){await this.preloadRuntimeElementComponents(o);if(n!==this.renderRequestId)return}this.ngxViewBuilderApiService.notifyBeforeRender(Te);this.dataSourceService.resetObservableCache();this.ngxViewBuilderApiService.captureStructureSource(o);this.previewRendererService.toModel(o);this.structureRendered.set(true);this.runtimeVariablesService.setMappings(Array.isArray(o.settings?.variables)?o.settings.variables:[],false);this.dataService.setData(this.deepCloneData(this.ensureDataObject(e.getDataJson?.()??{})));this.runtimeVariablesService.refresh();this.ngxViewBuilderApiService.notifyTabChanged(Te);this.ngxViewBuilderApiService.notifyRender(Te);this.pendingAfterRenderNotify=true;queueMicrotask(()=>{this.dataSourceService.applyPendingReturnReloads()});if(this.isViewInitialized)this.instrumentDomSoon()}async preloadRuntimeElementComponents(e){await this.runtimeLazyElementLoaderService.preloadStructure(e)}applyModelDerivedSettings(e){const t=e?.getJson?.()?.settings;if(!t||typeof t!=="object")return;Je(t);const n=this.runtimeSettings()?.lazyElementRendering;const o=t["lazyElementRendering"];this.runtimeRenderSettingsService.setLazyElementRenderingEnabled(typeof n==="boolean"?n:o);if(!this.uiDictionaries()){const r=t["uiDictionaries"];if(r)this.ngxViewBuilderApiService.setUiDictionaries(r)}const i=Boolean(this.theme()||this.runtimeSettings()?.theme);if(!Boolean(this.cssVariables()||this.runtimeSettings()?.cssVariables)&&!i){const r=t["themeVariables"];if(r)this.ngxViewBuilderApiService.setCssVariables(r)}if(!i){const r=t["theme"];if(r)this.applyThemePreset(r)}if(!this.language()){const r=String(t["language"]??"").trim();if(r)this.ngxViewBuilderApiService.setLanguage(r)}if(!this.runtimeSettings()?.templateActionMap){const r=t["templateActionMap"];if(r)this.ngxViewBuilderApiService.setTemplateActionMap(r)}if(!this.runtimeSettings()?.customCss){const r=t["customCss"];if(r!==void 0)this.ngxViewBuilderApiService.setCustomCss(r)}if(!this.runtimeSettings()?.customTheme){const r=t["customTheme"];if(r!==void 0)this.ngxViewBuilderApiService.setCustomTheme(r)}if(!this.runtimeSettings()?.customCssUrls){const r=t["customCssUrls"];if(Array.isArray(r))this.ngxViewBuilderApiService.setCustomCssUrls(r)}if(!this.runtimeSettings()?.extensions){const r=t["extensions"];if(r)this.ngxViewBuilderApiService.registerExtensions(r)}}applyBuilderSettings(e){if(typeof e.lazyElementRendering==="boolean")this.runtimeRenderSettingsService.setLazyElementRenderingEnabled(e.lazyElementRendering);if(e.uiDictionaries)this.ngxViewBuilderApiService.setUiDictionaries(e.uiDictionaries);if(e.contentTranslations)this.ngxViewBuilderApiService.setContentTranslations(e.contentTranslations);if(!Boolean(this.theme())){if(e.theme)this.applyThemePreset(e.theme);else this.syncThemeFromHostIfNeeded()}if(e.cssVariables)this.ngxViewBuilderApiService.setCssVariables(e.cssVariables);if(e.customTheme!==void 0)this.ngxViewBuilderApiService.setCustomTheme(e.customTheme);if(e.templateActionMap)this.ngxViewBuilderApiService.setTemplateActionMap(e.templateActionMap);if(Array.isArray(e.runtimeVariables))this.ngxViewBuilderApiService.setRuntimeVariableDefinitions(e.runtimeVariables,true);if(e.runtimeVariableContext&&typeof e.runtimeVariableContext==="object")this.ngxViewBuilderApiService.setRuntimeVariableContext(e.runtimeVariableContext,true);if(e.extensions)this.ngxViewBuilderApiService.registerExtensions(e.extensions);const t=e.defaultDataSources??e.dataSourceDefinitions;if(Array.isArray(t))this.ngxViewBuilderApiService.setDefaultDataSources(t);if(e.customCss!==void 0)this.ngxViewBuilderApiService.setCustomCss(e.customCss);if(e.customCssUrls!==void 0)this.ngxViewBuilderApiService.setCustomCssUrls(e.customCssUrls);if(e.language)this.ngxViewBuilderApiService.setLanguage(e.language);if(e.locale)this.ngxViewBuilderApiService.setApplicationLocale(e.locale);if(e.propertyHints)this.ngxViewBuilderApiService.setPropertyHints(e.propertyHints);if(e.propertyTypeHints)this.ngxViewBuilderApiService.setPropertyTypeHints(e.propertyTypeHints);this.reapplyHostCssVariables()}applyExternalConfig(e){const t=e.settings??e;this.applyBuilderSettings(t);if(e.templateActionMap)this.ngxViewBuilderApiService.setTemplateActionMap(e.templateActionMap);if(e.customCss!==void 0)this.ngxViewBuilderApiService.setCustomCss(e.customCss);if(e.customTheme!==void 0)this.ngxViewBuilderApiService.setCustomTheme(e.customTheme);if(e.customCssUrls!==void 0)this.ngxViewBuilderApiService.setCustomCssUrls(e.customCssUrls);if(e.extensions)this.ngxViewBuilderApiService.registerExtensions(e.extensions)}async loadExternalConfig(e){const t=++this.externalConfigRequestId;try{const n=await fetch(e,{cache:"no-store"});if(!n.ok)throw new Error(`HTTP ${n.status}`);const o=await n.json();if(t!==this.externalConfigRequestId)return;if(!o||typeof o!=="object")return;if(Object.prototype.hasOwnProperty.call(o,"settings")||Object.prototype.hasOwnProperty.call(o,"templateActionMap")||Object.prototype.hasOwnProperty.call(o,"customCss")||Object.prototype.hasOwnProperty.call(o,"customCssUrls")||Object.prototype.hasOwnProperty.call(o,"extensions")){this.applyExternalConfig(o);return}this.applyBuilderSettings(o)}catch(n){console.warn("[NgxViewBuilderRuntime] Failed to load external config.",{configUrl:e,error:n instanceof Error?n.message:n})}}applyCustomCss(e){const t=this.markupSecurityService.sanitizeCssText(String(e??""));const n=this.getStyleRoot();if(!n)return;if(!t.trim()){if(this.customCssStyleElement){this.customCssStyleElement.remove();this.customCssStyleElement=null}return}if(!this.customCssStyleElement){this.customCssStyleElement=this.documentRef.createElement("style");this.customCssStyleElement.setAttribute("data-ngx-view-builder-custom-css","true")}if(this.customCssStyleElement.parentNode!==n)n.appendChild(this.customCssStyleElement);this.customCssStyleElement.textContent=t}applyCustomCssUrls(e){const t=this.getStyleRoot();if(!t)return;const n=Array.from(new Set((e??[]).map(i=>this.markupSecurityService.sanitizeIframeUrl(String(i??"").trim())).filter(i=>Boolean(i))));const o=new Set(n);Array.from(this.customCssLinkElements.keys()).forEach(i=>{if(o.has(i))return;this.customCssLinkElements.get(i)?.remove();this.customCssLinkElements.delete(i)});n.forEach(i=>{if(this.customCssLinkElements.has(i)){const a=this.customCssLinkElements.get(i)??null;if(a&&a.parentNode!==t)t.appendChild(a);return}const r=this.documentRef.createElement("link");r.rel="stylesheet";r.href=i;r.setAttribute("data-ngx-view-builder-custom-css-url",i);t.appendChild(r);this.customCssLinkElements.set(i,r)})}applyCssVariables(e){if(!e||typeof e!=="object")return;this.syncThemeArtifactsRoot();const t=Object.keys(e);const n={};t.forEach(i=>{n[i]=String(e[i])});if(Object.keys(this.appliedCssVariablesSnapshot).length===t.length&&t.every(i=>this.appliedCssVariablesSnapshot[i]===n[i]))return;this.applyCssVariablesToElement(this.hostElement.nativeElement,n,this.appliedCssVariableKeys);const o=this.hostElement.nativeElement.shadowRoot?.querySelector(".nvb-root");this.applyCssVariablesToElement(o,n,this.appliedCssVariableKeys);this.updateCssVariableStyleElement(n);this.appliedCssVariableKeys=new Set(t);this.appliedCssVariablesSnapshot=n}applyDefaultCssVariables(e){const t=this.resolveThemePresetVariables(e);Object.keys(t).forEach(n=>{const o=this.hostElement.nativeElement.style.getPropertyValue(n);if(o&&String(o).trim().length>0)return;this.renderer.setStyle(this.hostElement.nativeElement,n,t[n])})}applyThemePreset(e,t=false){const n=this.normalizeThemeMode(e);if(!t&&this.lastAppliedThemePreset===n)return;this.activeThemeMode=n;this.renderer.setAttribute(this.hostElement.nativeElement,"data-theme",n);this.renderer.removeClass(this.hostElement.nativeElement,"nvb-theme-light");this.renderer.removeClass(this.hostElement.nativeElement,"nvb-theme-dark");this.renderer.addClass(this.hostElement.nativeElement,`nvb-theme-${n}`);this.scheduleThemeSwitchUnlock();this.lastAppliedThemePreset=n;const o=this.resolveThemePresetVariables(n);this.applyCssVariables(o);this.ngxViewBuilderApiService.setThemeMode(n);this.ngxViewBuilderApiService.setCssVariables(o);this.reapplyHostCssVariables()}reapplyHostCssVariables(){const e=this.cssVariables()??this.runtimeSettings()?.cssVariables??null;if(!e||typeof e!=="object")return;this.ngxViewBuilderApiService.setCssVariables(e)}reapplyRuntimeThemeArtifacts(){this.syncThemeArtifactsRoot();this.applyCustomCss(this.ngxViewBuilderApiService.getCustomCss());this.applyCustomCssUrls(this.ngxViewBuilderApiService.getCustomCssUrls());this.updateCssVariableStyleElement(this.appliedCssVariablesSnapshot)}getStyleRoot(){return this.hostElement.nativeElement.shadowRoot??this.hostElement.nativeElement}syncThemeArtifactsRoot(){const e=this.getStyleRoot();if(!e)return;if(this.customCssStyleElement&&this.customCssStyleElement.parentNode!==e)e.appendChild(this.customCssStyleElement);if(this.cssVariablesStyleElement&&this.cssVariablesStyleElement.parentNode!==e)e.appendChild(this.cssVariablesStyleElement);this.customCssLinkElements.forEach(t=>{if(t.parentNode!==e)e.appendChild(t)})}applyCssVariablesToElement(e,t,n){if(!e)return;Object.keys(t).forEach(o=>{this.renderer.setStyle(e,o,t[o])});n.forEach(o=>{if(!Object.prototype.hasOwnProperty.call(t,o))this.renderer.removeStyle(e,o)})}updateCssVariableStyleElement(e){const t=this.getStyleRoot();if(!t)return;const n=Object.keys(e);if(n.length===0){this.cssVariablesStyleElement?.remove();this.cssVariablesStyleElement=null;return}if(!this.cssVariablesStyleElement){this.cssVariablesStyleElement=this.documentRef.createElement("style");this.cssVariablesStyleElement.setAttribute("data-ngx-view-builder-css-variables","true")}if(this.cssVariablesStyleElement.parentNode!==t)t.appendChild(this.cssVariablesStyleElement);const o=n.map(i=>`${i}: ${e[i]};`).join(" ");this.cssVariablesStyleElement.textContent=`:host { ${o} } .nvb-root { ${o} }`}resolveThemePresetVariables(e){const t=dn(e);const n=this.customThemeDefinition;if(!n)return t;const o={...n.shared??{}};const i=e==="dark"?{...n.dark??{}}:{...n.light??{}};if(Object.keys(o).length===0&&Object.keys(i).length===0)return t;if(n.mergeWithDefaults===false)return{...o,...i};return{...t,...o,...i}}scheduleThemeSwitchUnlock(){this.renderer.addClass(this.hostElement.nativeElement,"nvb-theme-switching");if(this.themeSwitchRafHandle!==null){cancelAnimationFrame(this.themeSwitchRafHandle);this.themeSwitchRafHandle=null}this.themeSwitchRafHandle=requestAnimationFrame(()=>{this.themeSwitchRafHandle=requestAnimationFrame(()=>{this.renderer.removeClass(this.hostElement.nativeElement,"nvb-theme-switching");this.themeSwitchRafHandle=null})})}setupInheritedThemeSync(){const e=this.documentRef?.documentElement;if(!e)return;this.syncThemeFromHostIfNeeded();this.inheritedThemeObserver?.disconnect();this.inheritedThemeObserver=new MutationObserver(()=>{this.syncThemeFromHostIfNeeded()});this.inheritedThemeObserver.observe(e,{attributes:true,attributeFilter:["data-theme"]})}syncThemeFromHostIfNeeded(){if(this.hasExplicitThemeOverride())return;const e=this.resolveInheritedThemeMode();this.applyThemePreset(e)}resolveInheritedThemeMode(){const e=this.documentRef?.documentElement?.getAttribute("data-theme");if(!String(e??"").trim())return this.activeThemeMode;return this.normalizeThemeMode(e)}hasExplicitThemeOverride(){if(this.theme())return true;if(this.runtimeSettings()?.theme)return true;return false}normalizeThemeMode(e){return String(e??"").trim().toLowerCase()==="dark"?"dark":"light"}setupDomInstrumentation(){const e=this.getInstrumentationRoot();if(!e)return;this.ngxViewBuilderApiService.registerRenderRoot(e);this.mutationObserver=new MutationObserver(()=>{this.instrumentDomSafely(e)});this.mutationObserver.observe(e,{subtree:true,childList:true,attributes:true});this.instrumentDomSafely(e)}instrumentDomSoon(){queueMicrotask(()=>{const e=this.getInstrumentationRoot();if(!e)return;this.instrumentDomSafely(e);this.ngxViewBuilderApiService.registerRenderRoot(e);if(!this.pendingAfterRenderNotify)return;this.pendingAfterRenderNotify=false;this.ngxViewBuilderApiService.notifyAfterRender(Te)})}instrumentDomSafely(e){if(this.isInstrumentingDom)return;this.isInstrumentingDom=true;this.mutationObserver?.disconnect();try{this.domInstrumentationService.instrument(e)}finally{this.mutationObserver?.observe(e,{subtree:true,childList:true,attributes:true});this.isInstrumentingDom=false}}getInstrumentationRoot(){return this.hostElement.nativeElement.shadowRoot??this.hostElement.nativeElement}resolveRuntimeState(){const e=this.pageJson()!==null;const t=this.dataJson()!==null;const n=e||t;const o=this.model();const i=n?this.internalModel:o??this.internalModel;if(n&&o){if(!e){const a=this.serializeStructure(o.getJson?.());if(a)i.setJson(a)}if(!t)i.setDataJson(this.serializeData(o.getDataJson?.()??{}))}if(e){const a=this.normalizeStructureJsonInput(this.pageJson());if(!a)return null;i.setJson(a)}if(t){const a=this.normalizeDataJsonInput(this.dataJson());i.setDataJson(a??"{}")}const r=this.serializeStructure(i.getJson?.());if(!r)return null;return{model:i,structureJson:r,dataJson:this.serializeData(i.getDataJson?.()??{})}}normalizeStructureInput(e){if(!e)return null;if(typeof e==="string")try{const t=JSON.parse(e);return t&&typeof t==="object"?t:null}catch(t){console.warn("[NgxViewBuilderRuntime] Failed to parse pageJson.",{error:t instanceof Error?t.message:t});return null}return e}normalizeStructureJsonInput(e){const t=this.normalizeStructureInput(e);if(!t)return null;try{return JSON.stringify(t)}catch(n){console.warn("[NgxViewBuilderRuntime] Failed to serialize pageJson.",{error:n instanceof Error?n.message:n});return null}}normalizeDataInput(e){if(!e)return null;if(typeof e==="string")try{const t=JSON.parse(e);return t&&typeof t==="object"?t:null}catch(t){console.warn("[NgxViewBuilderRuntime] Failed to parse dataJson.",{error:t instanceof Error?t.message:t});return null}return e}normalizeDataJsonInput(e){const t=this.normalizeDataInput(e);if(!t)return null;try{return JSON.stringify(t)}catch(n){console.warn("[NgxViewBuilderRuntime] Failed to serialize dataJson.",{error:n instanceof Error?n.message:n});return null}}serializeStructure(e){if(!e)return null;try{return JSON.stringify(e)}catch(t){console.warn("[NgxViewBuilderRuntime] Failed to serialize runtime structure.",{error:t instanceof Error?t.message:t});return null}}serializeData(e){try{return JSON.stringify(this.ensureDataObject(e))}catch(t){console.warn("[NgxViewBuilderRuntime] Failed to serialize runtime data.",{error:t instanceof Error?t.message:t});return"{}"}}ensureDataObject(e){if(!e||typeof e!=="object"||Array.isArray(e))return{};return e}deepCloneData(e){if(e===null||e===void 0||typeof e!=="object")return e;try{if(typeof structuredClone==="function")return structuredClone(e)}catch{}try{return JSON.parse(JSON.stringify(e))}catch{return e}}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Kt,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.1.0",version:"22.2.1",type:Kt,isStandalone:true,selector:"ngx-view-builder-runtime",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:false,transformFunction:null},pageJson:{classPropertyName:"pageJson",publicName:"pageJson",isSignal:true,isRequired:false,transformFunction:null},dataJson:{classPropertyName:"dataJson",publicName:"dataJson",isSignal:true,isRequired:false,transformFunction:null},language:{classPropertyName:"language",publicName:"language",isSignal:true,isRequired:false,transformFunction:null},theme:{classPropertyName:"theme",publicName:"theme",isSignal:true,isRequired:false,transformFunction:null},uiDictionaries:{classPropertyName:"uiDictionaries",publicName:"uiDictionaries",isSignal:true,isRequired:false,transformFunction:null},contentTranslations:{classPropertyName:"contentTranslations",publicName:"contentTranslations",isSignal:true,isRequired:false,transformFunction:null},cssVariables:{classPropertyName:"cssVariables",publicName:"cssVariables",isSignal:true,isRequired:false,transformFunction:null},externalConfig:{classPropertyName:"externalConfig",publicName:"externalConfig",isSignal:true,isRequired:false,transformFunction:null},externalConfigUrl:{classPropertyName:"externalConfigUrl",publicName:"externalConfigUrl",isSignal:true,isRequired:false,transformFunction:null},viewportSettings:{classPropertyName:"viewportSettings",publicName:"viewportSettings",isSignal:true,isRequired:false,transformFunction:null},runtimeSettings:{classPropertyName:"runtimeSettings",publicName:"runtimeSettings",isSignal:true,isRequired:false,transformFunction:null}},outputs:{valueChanged:"valueChanged",structureChanged:"structureChanged",languageChanged:"languageChanged",tableSettingsChanged:"tableSettingsChanged",tableSettingsApplied:"tableSettingsApplied",tableSettingsRequested:"tableSettingsRequested",tableSettingsSaveRequested:"tableSettingsSaveRequested",tableFiltersChanged:"tableFiltersChanged",tableFiltersApplied:"tableFiltersApplied",tableSavedFiltersChanged:"tableSavedFiltersChanged",tableSavedFiltersRequested:"tableSavedFiltersRequested",tableSavedFilterSaveRequested:"tableSavedFilterSaveRequested"},providers:Y,ngImport:l,template:'<section\n class="ngx-view-builder-renderer nvb-root"\n aria-label="Form runtime"\n data-testid="ngx-view-builder-renderer-root"\n>\n <runtime-preview\n [class.nvb-runtime-pending]="!structureRendered()"\n [viewportSettings]="resolvedViewportSettings()"\n [runtimePreviewSettings]="resolvedPreviewSettings()"\n ></runtime-preview>\n</section>\n\n<confirm-dialog />\n',styles:['@layer reset,tokens,components,fpUtilities,elements;@layer reset{.nvb-root,.nvb-root *,.nvb-root *:before,.nvb-root *:after{margin:0;padding:0;box-sizing:border-box}.nvb-root{height:100%;line-height:1.5;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;font-family:sans-serif}.nvb-root ul,.nvb-root ol{list-style:none}.nvb-root a{text-decoration:none;color:inherit}.nvb-root img,.nvb-root picture,.nvb-root video,.nvb-root canvas,.nvb-root svg{display:block;max-width:100%;height:auto}.nvb-root input,.nvb-root button,.nvb-root textarea,.nvb-root select{font:inherit}.nvb-root button{border:none;background:none;cursor:pointer}.nvb-root table{border-collapse:collapse;border-spacing:0}}@layer tokens{@layer tokens{:host,.nvb-root{--nvb-font-family-base: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;--nvb-color-primary-050: oklch(98.04% .0104 251.42);--nvb-color-primary-100: oklch(95.63% .0247 251.98);--nvb-color-primary-200: oklch(91.21% .0518 252.79);--nvb-color-primary-300: oklch(84.55% .0888 253.67);--nvb-color-primary-400: oklch(75.39% .1293 254.94);--nvb-color-primary-500: oklch(64.21% .1552 256.62);--nvb-color-primary-600: oklch(56.71% .1412 257.44);--nvb-color-primary-700: oklch(48.29% .1191 258.32);--nvb-color-primary-800: oklch(40.54% .0992 258.96);--nvb-color-primary-900: oklch(31.48% .0762 259.64);--nvb-color-primary-950: oklch(24.86% .0581 260.47);--nvb-color-neutral-000: oklch(100% .0001 89.88);--nvb-color-neutral-050: oklch(98.38% .0035 247.86);--nvb-color-neutral-100: oklch(96.76% .007 247.9);--nvb-color-neutral-200: oklch(92.58% .0132 255.03);--nvb-color-neutral-300: oklch(86.94% .0199 253.37);--nvb-color-neutral-400: oklch(71% .0348 256.79);--nvb-color-neutral-500: oklch(55.64% .0398 256.82);--nvb-color-neutral-600: oklch(45.05% .0371 256.83);--nvb-color-neutral-700: oklch(37.52% .0394 256.85);--nvb-color-neutral-800: oklch(27.53% .0364 259.7);--nvb-color-neutral-900: oklch(20.64% .0388 265.55);--nvb-color-neutral-950: oklch(12.92% .0415 265.15);--nvb-color-risk-050: oklch(96.78% .0142 17.4);--nvb-color-risk-100: oklch(93.44% .0314 17.73);--nvb-color-risk-200: oklch(88.03% .0615 18.39);--nvb-color-risk-300: oklch(80.98% .1025 19.54);--nvb-color-risk-400: oklch(71.23% .1656 22.18);--nvb-color-risk-500: oklch(63.56% .2082 25.38);--nvb-color-risk-600: oklch(57.86% .2137 27.17);--nvb-color-risk-700: oklch(50.79% .1918 27.56);--nvb-color-risk-800: oklch(44.1% .1603 26.89);--nvb-color-risk-900: oklch(39.96% .1348 25.77);--nvb-color-risk-950: oklch(25.26% .0866 26);--nvb-color-caution-050: oklch(98.66% .0218 95.28);--nvb-color-caution-100: oklch(96.22% .0569 95.61);--nvb-color-caution-200: oklch(92.57% .1141 95.75);--nvb-color-caution-300: oklch(88.13% .1526 91.77);--nvb-color-caution-400: oklch(83.34% .1641 83.87);--nvb-color-caution-500: oklch(76.97% .1645 70.61);--nvb-color-caution-600: oklch(66.88% .1588 57.96);--nvb-color-caution-700: oklch(55.42% .1447 49.16);--nvb-color-caution-800: oklch(47.06% .1236 46.53);--nvb-color-caution-900: oklch(40.96% .1037 46.31);--nvb-color-caution-950: oklch(27.8% .0739 45.8);--nvb-color-warning-050: oklch(98.66% .0218 95.28);--nvb-color-warning-100: oklch(96.22% .0569 95.61);--nvb-color-warning-200: oklch(92.57% .1141 95.75);--nvb-color-warning-300: oklch(88.13% .1526 91.77);--nvb-color-warning-400: oklch(83.34% .1641 83.87);--nvb-color-warning-500: oklch(76.97% .1645 70.61);--nvb-color-warning-600: oklch(66.88% .1588 57.96);--nvb-color-warning-700: oklch(55.42% .1447 49.16);--nvb-color-warning-800: oklch(47.06% .1236 46.53);--nvb-color-warning-900: oklch(40.96% .1037 46.31);--nvb-color-warning-950: oklch(27.8% .0739 45.8);--nvb-color-success-050: oklch(98.36% .0162 155.55);--nvb-color-success-100: oklch(96.46% .0405 157.07);--nvb-color-success-200: oklch(92.46% .0811 155.98);--nvb-color-success-300: oklch(87.12% .137 154.59);--nvb-color-success-400: oklch(79.99% .1816 151.78);--nvb-color-success-500: oklch(72.05% .192 149.49);--nvb-color-success-600: oklch(62.3% .1688 149.18);--nvb-color-success-700: oklch(52.48% .1373 149.83);--nvb-color-success-800: oklch(44.61% .1073 151.49);--nvb-color-success-900: oklch(38.98% .0885 152.69);--nvb-color-success-950: oklch(26.61% .0625 153.04);--nvb-color-info-050: oklch(97.67% .0127 236.62);--nvb-color-info-100: oklch(95.35% .024 236.81);--nvb-color-info-200: oklch(89.99% .0556 231.68);--nvb-color-info-300: oklch(82.95% .1004 229.56);--nvb-color-info-400: oklch(75.84% .1373 231.6);--nvb-color-info-500: oklch(67.76% .1481 238.1);--nvb-color-info-600: oklch(58.63% .1366 241.18);--nvb-color-info-700: oklch(49.96% .1179 242.21);--nvb-color-info-800: oklch(43.8% .0988 240.83);--nvb-color-info-900: oklch(39.2% .0844 240.76);--nvb-color-info-950: oklch(29.47% .0635 243.15);--nvb-color-text-000: oklch(100% .0001 89.88);--nvb-color-text-050: oklch(98.38% .0035 247.86);--nvb-color-text-100: oklch(96.76% .007 247.9);--nvb-color-text-200: oklch(92.58% .0132 255.03);--nvb-color-text-300: oklch(86.94% .0199 253.37);--nvb-color-text-400: oklch(71% .0348 256.79);--nvb-color-text-500: oklch(55.64% .0398 256.82);--nvb-color-text-600: oklch(45.05% .0371 256.83);--nvb-color-text-700: oklch(37.52% .0394 256.85);--nvb-color-text-800: oklch(27.53% .0364 259.7);--nvb-color-text-900: oklch(20.64% .0388 265.55);--nvb-color-text-950: oklch(12.92% .0415 265.15);--nvb-radius-sm: 4px;--nvb-radius-md: 6px;--nvb-radius-lg: 8px;--nvb-radius-xl: 12px;--nvb-radius-full: 999px;--nvb-space-0: 2px;--nvb-space-1: 4px;--nvb-space-2: 6px;--nvb-space-3: 8px;--nvb-space-4: 10px;--nvb-space-5: 12px;--nvb-space-6: 16px;--nvb-space-7: 20px;--nvb-space-8: 24px;--nvb-space-9: 32px;--nvb-text-caption2: 10px;--nvb-text-caption1: 12px;--nvb-text-body1: 14px;--nvb-text-subtitle2: 16px;--nvb-text-subtitle1: 20px;--nvb-text-title3: 24px;--nvb-text-title2: 28px;--nvb-text-sm: var(--nvb-text-caption1);--nvb-text-base: var(--nvb-text-body1);--nvb-text-md: var(--nvb-text-body1);--nvb-text-lg: var(--nvb-text-subtitle2);--nvb-color-surface-mix-target: var(--nvb-color-neutral-000);--nvb-chart-single: var(--nvb-color-primary-500);--nvb-chart-1: #2a78d6;--nvb-chart-2: #eb6834;--nvb-chart-3: #1baf7a;--nvb-chart-4: #eda100;--nvb-chart-5: #e87ba4;--nvb-chart-6: #008300;--nvb-chart-7: #4a3aa7;--nvb-chart-8: #e34948;--nvb-chart-other: var(--nvb-color-neutral-400)}:host([data-theme="dark"]),:host(.nvb-dark),.nvb-root.nvb-dark,.nvb-root[data-theme=dark],.nvb-section-theme-dark{--nvb-font-family-base: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;--nvb-color-primary-050: oklch(24.86% .0581 260.47);--nvb-color-primary-100: oklch(31.48% .0762 259.64);--nvb-color-primary-200: oklch(40.54% .0992 258.96);--nvb-color-primary-300: oklch(48.29% .1191 258.32);--nvb-color-primary-400: oklch(56.71% .1412 257.44);--nvb-color-primary-500: oklch(64.21% .1552 256.62);--nvb-color-primary-600: oklch(75.39% .1293 254.94);--nvb-color-primary-700: oklch(84.55% .0888 253.67);--nvb-color-primary-800: oklch(91.21% .0518 252.79);--nvb-color-primary-900: oklch(95.63% .0247 251.98);--nvb-color-primary-950: oklch(98.04% .0104 251.42);--nvb-color-neutral-000: oklch(19% .006 286);--nvb-color-neutral-050: oklch(23% .007 286);--nvb-color-neutral-100: oklch(27% .008 286);--nvb-color-neutral-200: oklch(38% .009 286);--nvb-color-neutral-300: oklch(49.5% .01 286);--nvb-color-neutral-400: oklch(58% .01 286);--nvb-color-neutral-500: oklch(65% .009 286);--nvb-color-neutral-600: oklch(74% .007 286);--nvb-color-neutral-700: oklch(82% .005 286);--nvb-color-neutral-800: oklch(88% .004 286);--nvb-color-neutral-900: oklch(93% .003 286);--nvb-color-neutral-950: oklch(97% .002 286);--nvb-color-risk-050: oklch(25.26% .0866 26);--nvb-color-risk-100: oklch(39.96% .1348 25.77);--nvb-color-risk-200: oklch(44.1% .1603 26.89);--nvb-color-risk-300: oklch(50.79% .1918 27.56);--nvb-color-risk-400: oklch(57.86% .2137 27.17);--nvb-color-risk-500: oklch(63.56% .2082 25.38);--nvb-color-risk-600: oklch(71.23% .1656 22.18);--nvb-color-risk-700: oklch(80.98% .1025 19.54);--nvb-color-risk-800: oklch(88.03% .0615 18.39);--nvb-color-risk-900: oklch(93.44% .0314 17.73);--nvb-color-risk-950: oklch(96.78% .0142 17.4);--nvb-color-caution-050: oklch(27.8% .0739 45.8);--nvb-color-caution-100: oklch(40.96% .1037 46.31);--nvb-color-caution-200: oklch(47.06% .1236 46.53);--nvb-color-caution-300: oklch(55.42% .1447 49.16);--nvb-color-caution-400: oklch(66.88% .1588 57.96);--nvb-color-caution-500: oklch(76.97% .1645 70.61);--nvb-color-caution-600: oklch(83.34% .1641 83.87);--nvb-color-caution-700: oklch(88.13% .1526 91.77);--nvb-color-caution-800: oklch(92.57% .1141 95.75);--nvb-color-caution-900: oklch(96.22% .0569 95.61);--nvb-color-caution-950: oklch(98.66% .0218 95.28);--nvb-color-warning-050: oklch(27.8% .0739 45.8);--nvb-color-warning-100: oklch(40.96% .1037 46.31);--nvb-color-warning-200: oklch(47.06% .1236 46.53);--nvb-color-warning-300: oklch(55.42% .1447 49.16);--nvb-color-warning-400: oklch(66.88% .1588 57.96);--nvb-color-warning-500: oklch(76.97% .1645 70.61);--nvb-color-warning-600: oklch(83.34% .1641 83.87);--nvb-color-warning-700: oklch(88.13% .1526 91.77);--nvb-color-warning-800: oklch(92.57% .1141 95.75);--nvb-color-warning-900: oklch(96.22% .0569 95.61);--nvb-color-warning-950: oklch(98.66% .0218 95.28);--nvb-color-success-050: oklch(26.61% .0625 153.04);--nvb-color-success-100: oklch(38.98% .0885 152.69);--nvb-color-success-200: oklch(44.61% .1073 151.49);--nvb-color-success-300: oklch(52.48% .1373 149.83);--nvb-color-success-400: oklch(62.3% .1688 149.18);--nvb-color-success-500: oklch(72.05% .192 149.49);--nvb-color-success-600: oklch(79.99% .1816 151.78);--nvb-color-success-700: oklch(87.12% .137 154.59);--nvb-color-success-800: oklch(92.46% .0811 155.98);--nvb-color-success-900: oklch(96.46% .0405 157.07);--nvb-color-success-950: oklch(98.36% .0162 155.55);--nvb-color-info-050: oklch(29.47% .0635 243.15);--nvb-color-info-100: oklch(39.2% .0844 240.76);--nvb-color-info-200: oklch(43.8% .0988 240.83);--nvb-color-info-300: oklch(49.96% .1179 242.21);--nvb-color-info-400: oklch(58.63% .1366 241.18);--nvb-color-info-500: oklch(67.76% .1481 238.1);--nvb-color-info-600: oklch(75.84% .1373 231.6);--nvb-color-info-700: oklch(82.95% .1004 229.56);--nvb-color-info-800: oklch(89.99% .0556 231.68);--nvb-color-info-900: oklch(95.35% .024 236.81);--nvb-color-info-950: oklch(97.67% .0127 236.62);--nvb-color-text-000: oklch(19% .006 286);--nvb-color-text-050: oklch(23% .007 286);--nvb-color-text-100: oklch(27% .008 286);--nvb-color-text-200: oklch(38% .009 286);--nvb-color-text-300: oklch(49.5% .01 286);--nvb-color-text-400: oklch(58% .01 286);--nvb-color-text-500: oklch(65% .009 286);--nvb-color-text-600: oklch(74% .007 286);--nvb-color-text-700: oklch(82% .005 286);--nvb-color-text-800: oklch(88% .004 286);--nvb-color-text-900: oklch(93% .003 286);--nvb-color-text-950: oklch(97% .002 286);--nvb-radius-sm: 4px;--nvb-radius-md: 6px;--nvb-radius-lg: 8px;--nvb-radius-xl: 12px;--nvb-radius-full: 999px;--nvb-space-0: 2px;--nvb-space-1: 4px;--nvb-space-2: 6px;--nvb-space-3: 8px;--nvb-space-4: 10px;--nvb-space-5: 12px;--nvb-space-6: 16px;--nvb-space-7: 20px;--nvb-space-8: 24px;--nvb-space-9: 32px;--nvb-text-caption2: 10px;--nvb-text-caption1: 12px;--nvb-text-body1: 14px;--nvb-text-subtitle2: 16px;--nvb-text-subtitle1: 20px;--nvb-text-title3: 24px;--nvb-text-title2: 28px;--nvb-text-sm: var(--nvb-text-caption1);--nvb-text-base: var(--nvb-text-body1);--nvb-text-md: var(--nvb-text-body1);--nvb-text-lg: var(--nvb-text-subtitle2);--nvb-color-surface-mix-target: var(--nvb-color-neutral-050);--nvb-chart-single: var(--nvb-color-primary-500);--nvb-chart-1: #3987e5;--nvb-chart-2: #d95926;--nvb-chart-3: #199e70;--nvb-chart-4: #c98500;--nvb-chart-5: #d55181;--nvb-chart-6: #008300;--nvb-chart-7: #9085e9;--nvb-chart-8: #e66767;--nvb-chart-other: var(--nvb-color-neutral-500)}:host,.nvb-root{color-scheme:light;background-color:var(--nvb-surface, var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-800);scrollbar-color:var(--nvb-color-neutral-300) transparent}:host([data-theme="dark"]),:host(.nvb-dark),:host([data-theme="dark"]) .nvb-root,:host(.nvb-dark) .nvb-root,.nvb-root.nvb-dark,.nvb-root[data-theme=dark],.nvb-section-theme-dark{color-scheme:dark}}}@layer components{.nvb-root,.nvb-section-theme-dark{--nvb-button-height-lg: 40px;--nvb-button-height-ms: 32px;--nvb-button-height-sm: 32px;--nvb-button-height-sx: 28px;--nvb-button-padding-lg: 0 16px;--nvb-button-padding-ms: 0 12px;--nvb-button-padding-sm: 0 10px;--nvb-button-padding-sx: 0 8px;--nvb-button-font-size-lg: 14px;--nvb-button-font-size-ms: 13px;--nvb-button-font-size-sm: 13px;--nvb-button-font-size-sx: 12px;--nvb-button-radius: var(--nvb-radius-md);--nvb-button-gap: 6px;--nvb-button-border-color: var(--nvb-color-neutral-300);--nvb-button-bg: var(--nvb-color-neutral-000);--nvb-button-text-color: var(--nvb-color-neutral-800);--nvb-button-hover-bg: var(--nvb-color-neutral-050);--nvb-button-primary-bg: var(--nvb-color-primary-600);--nvb-button-primary-hover-bg: var(--nvb-color-primary-700);--nvb-button-danger-bg: var(--nvb-color-risk-050);--nvb-button-danger-text-color: var(--nvb-color-risk-700);--nvb-button-danger-border-color: var(--nvb-color-risk-300);--nvb-surface-bg: var(--nvb-color-neutral-000);--nvb-surface-muted-bg: color-mix(in oklab, var(--nvb-color-neutral-050) 84%, var(--nvb-color-neutral-000));--nvb-stroke-subtle: var(--nvb-color-neutral-200);--nvb-stroke-strong: var(--nvb-color-neutral-300);--nvb-shadow-2: 0 1px 2px color-mix(in oklab, var(--nvb-color-neutral-950) 6%, transparent);--nvb-shadow-8: 0 4px 8px color-mix(in oklab, var(--nvb-color-neutral-950) 10%, transparent), 0 12px 24px color-mix(in oklab, var(--nvb-color-neutral-950) 8%, transparent);--nvb-shadow-16: 0 8px 16px color-mix(in oklab, var(--nvb-color-neutral-950) 12%, transparent), 0 24px 48px color-mix(in oklab, var(--nvb-color-neutral-950) 14%, transparent);--nvb-dialog-radius: var(--nvb-radius-xl);--nvb-menu-radius: var(--nvb-radius-lg);--nvb-tablist-height: 40px;--nvb-card-bg: var(--nvb-color-neutral-000);--nvb-card-border-color: var(--nvb-color-neutral-200);--nvb-card-radius: var(--nvb-radius-lg);--nvb-card-shadow: var(--nvb-shadow-2);--nvb-card-padding: 12px}.nvb-root .nvb-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.nvb-root .nvb-button,.nvb-root .nvb-control__add-row-button{box-sizing:border-box;min-height:var(--nvb-button-height-ms);padding:var(--nvb-button-padding-ms);border:1px solid var(--nvb-button-border-color);border-radius:var(--nvb-button-radius);background:var(--nvb-button-bg);color:var(--nvb-button-text-color);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--nvb-button-gap);font-family:var(--nvb-font-family);font-size:var(--nvb-button-font-size-ms);font-weight:600;line-height:20px;white-space:nowrap;overflow:visible;transition:background-color .2s ease,border-color .2s ease,color .2s ease,opacity .2s ease,box-shadow .2s ease;box-shadow:none}.nvb-root .nvb-button:focus-visible,.nvb-root .nvb-control__add-row-button:focus-visible,.nvb-root .nvb-icon-button:focus-visible{outline:0;border-color:var(--nvb-input-focus-border-color, var(--nvb-color-primary-500));box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-button:hover:not(:disabled),.nvb-root .nvb-control__add-row-button:hover:not(:disabled){background:var(--nvb-button-hover-bg);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900);box-shadow:none}.nvb-root .nvb-button:disabled,.nvb-root .nvb-control__add-row-button:disabled{cursor:not-allowed;opacity:.5;box-shadow:none}.nvb-root .nvb-button--lg{min-height:var(--nvb-button-height-lg);padding:var(--nvb-button-padding-lg);font-size:var(--nvb-button-font-size-lg)}.nvb-root .nvb-button--ms,.nvb-root .nvb-button--md{min-height:var(--nvb-button-height-ms);padding:var(--nvb-button-padding-ms);font-size:var(--nvb-button-font-size-ms)}.nvb-root .nvb-button--sm{min-height:var(--nvb-button-height-sm);padding:var(--nvb-button-padding-sm);font-size:var(--nvb-button-font-size-sm)}.nvb-root .nvb-button--sx,.nvb-root .nvb-button--xs{min-height:var(--nvb-button-height-sx);padding:var(--nvb-button-padding-sx);font-size:var(--nvb-button-font-size-sx)}.nvb-root .nvb-button--left{justify-content:flex-start}.nvb-root .nvb-button--full{width:100%}.nvb-root .nvb-button--subtle{border-color:transparent;background:transparent;color:var(--nvb-color-neutral-700)}.nvb-root .nvb-button--subtle:hover:not(:disabled){border-color:transparent;background:color-mix(in oklab,var(--nvb-color-neutral-100) 72%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-900)}.nvb-root .nvb-button--neutral{background:var(--nvb-color-neutral-000)}.nvb-root .nvb-button--primary,.nvb-root .nvb-button--active{border-color:var(--nvb-color-primary-500);background:var(--nvb-button-primary-bg);color:var(--nvb-color-neutral-000);box-shadow:none}.nvb-root .nvb-button--primary-soft{border-color:transparent;background:color-mix(in oklab,var(--nvb-color-primary-050) 76%,var(--nvb-color-neutral-000));color:var(--nvb-color-primary-700)}.nvb-root .nvb-button--primary:hover:not(:disabled),.nvb-root .nvb-button--active:hover:not(:disabled){border-color:var(--nvb-color-primary-600);background:var(--nvb-button-primary-hover-bg);color:var(--nvb-color-neutral-000)}.nvb-root .nvb-button--primary-soft:hover:not(:disabled){border-color:var(--nvb-color-primary-500);background:color-mix(in oklab,var(--nvb-color-primary-050) 70%,var(--nvb-color-primary-100, var(--nvb-color-primary-050)));color:var(--nvb-color-primary-800)}.nvb-root .nvb-button--danger{border-color:var(--nvb-button-danger-border-color);background:var(--nvb-button-danger-bg);color:var(--nvb-button-danger-text-color)}.nvb-root .nvb-button--danger:hover:not(:disabled),.nvb-root .nvb-icon-button--danger:hover:not(:disabled){border-color:var(--nvb-color-risk-400);background:color-mix(in oklab,var(--nvb-color-risk-050) 70%,var(--nvb-color-risk-100, var(--nvb-color-risk-050)));color:var(--nvb-color-risk-800, var(--nvb-color-risk-700))}.nvb-root .nvb-button__icon,.nvb-root .nvb-control__add-row-button>.material-symbols-outlined{font-size:15px;line-height:1}.nvb-root .nvb-control__add-row-button{border-color:var(--nvb-control-button-border-color);background:var(--nvb-control-button-bg);color:var(--nvb-control-button-text-color);font-size:var(--nvb-control-font-size);height:var(--nvb-control-height);min-height:var(--nvb-control-height);padding:0 var(--nvb-control-padding-x)}.nvb-root .nvb-control__add-row-button:hover:not(:disabled){border-color:var(--nvb-control-button-hover-border-color);background:var(--nvb-control-button-hover-bg);color:var(--nvb-control-button-hover-text-color)}.nvb-root .nvb-control__add-row-button--compact{height:var(--nvb-control-height-sm);min-height:var(--nvb-control-height-sm);padding:0 10px;font-size:12px}.nvb-root .nvb-control__add-row-button--compact>.material-symbols-outlined{font-size:16px}.nvb-root .nvb-control__add-row-button--link{min-height:26px;padding:0;border-color:transparent;background:transparent;color:var(--nvb-color-primary-600);border-radius:var(--nvb-radius-md);font-size:14px;font-weight:600;justify-content:flex-start}.nvb-root .nvb-control__add-row-button--link:hover:not(:disabled){border-color:transparent;background:transparent;color:var(--nvb-color-primary-700)}.nvb-root .nvb-control__add-row-button--link.nvb-control__add-row-button--compact{padding:0 2px;font-size:12px}.nvb-root .nvb-control__add-row-button nvb-icon{width:16px;height:16px;display:inline-flex}.nvb-root .nvb-button__label{display:inline-flex;align-items:center;min-height:20px;line-height:20px;overflow:hidden;text-overflow:ellipsis}.nvb-root .nvb-icon-button{width:var(--nvb-button-height-ms);min-width:var(--nvb-button-height-ms);height:var(--nvb-button-height-ms);min-height:var(--nvb-button-height-ms);border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:background-color .16s ease,border-color .16s ease,color .16s ease,opacity .16s ease,box-shadow .16s ease;box-shadow:none}.nvb-root .nvb-icon-button:hover:not(:disabled){background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900)}.nvb-root .nvb-icon-button:disabled{cursor:not-allowed;opacity:.5;box-shadow:none}.nvb-root .nvb-icon-button--lg{width:var(--nvb-button-height-lg);min-width:var(--nvb-button-height-lg);height:var(--nvb-button-height-lg);min-height:var(--nvb-button-height-lg)}.nvb-root .nvb-icon-button--sm{width:var(--nvb-button-height-sm);min-width:var(--nvb-button-height-sm);height:var(--nvb-button-height-sm);min-height:var(--nvb-button-height-sm)}.nvb-root .nvb-icon-button--sx,.nvb-root .nvb-icon-button--xs{width:var(--nvb-button-height-sx);min-width:var(--nvb-button-height-sx);height:var(--nvb-button-height-sx);min-height:var(--nvb-button-height-sx);border-radius:var(--nvb-radius-md)}.nvb-root .nvb-icon-button--danger{border-color:var(--nvb-button-danger-border-color);background:var(--nvb-button-danger-bg);color:var(--nvb-button-danger-text-color)}.nvb-root .nvb-icon-button--ghost{border-color:transparent;background:transparent}.nvb-root .nvb-icon-button--ghost:hover:not(:disabled){border-color:transparent;background:color-mix(in oklab,var(--nvb-color-neutral-100) 72%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-800)}.nvb-root .nvb-icon-button--drag{cursor:grab}.nvb-root .nvb-icon-button--drag:active{cursor:grabbing;transform:scale(.98)}.nvb-root .nvb-icon-button span,.nvb-root .nvb-icon-button nvb-icon{font-size:18px;line-height:1}.nvb-root .nvb-control__add-row-button nvb-icon,.nvb-root .nvb-control__add-row-button .nvb-icon-svg{font-size:16px;line-height:1}.nvb-root .nvb-icon-button--sx span,.nvb-root .nvb-icon-button--sx nvb-icon,.nvb-root .nvb-icon-button--xs span,.nvb-root .nvb-icon-button--xs nvb-icon{font-size:15px}.nvb-root .nvb-search-field{position:relative}.nvb-root .nvb-search-field .nvb-search-field__icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);z-index:1;display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;color:var(--nvb-color-neutral-500);font-size:16px;line-height:1;pointer-events:none}.nvb-root .nvb-search-field .nvb-search-field__input{display:block;box-sizing:border-box;width:100%;height:32px;min-height:32px;padding:0 32px 0 36px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-input-radius, var(--nvb-radius-md));background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);font-size:12px;font-weight:400;line-height:20px;box-shadow:none;transition:border-color .12s ease,background-color .12s ease,box-shadow .12s ease}.nvb-root .nvb-search-field.nvb-search-field--no-icon .nvb-search-field__input{padding-left:12px}.nvb-root .nvb-search-field .nvb-search-field__input::placeholder{color:var(--nvb-color-neutral-400);font-weight:400}.nvb-root .nvb-search-field .nvb-search-field__input:focus,.nvb-root .nvb-search-field .nvb-search-field__input:focus-visible{outline:none;border-color:var(--nvb-color-primary-500);box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-search-field .nvb-search-field__clear{position:absolute;right:6px;top:50%;transform:translateY(-50%);z-index:2;color:var(--nvb-color-neutral-500)}}@layer fpUtilities{@layer fpUtilities{.nvb-root .nvb-hidden{display:none!important}.nvb-root .nvb-flex-center{display:flex;justify-content:center;align-items:center}.nvb-root .nvb-flex-left{display:flex;justify-content:flex-start;align-items:center}.nvb-root .nvb-flex-right{display:flex;justify-content:flex-end;align-items:center}.nvb-root .nvb-bg-primary-50{background-color:var(--nvb-color-primary-050)}.nvb-root .nvb-bg-primary-100{background-color:var(--nvb-color-primary-100)}.nvb-root .nvb-bg-primary-200{background-color:var(--nvb-color-primary-200)}.nvb-root .nvb-bg-primary-300{background-color:var(--nvb-color-primary-300)}.nvb-root .nvb-bg-primary-400{background-color:var(--nvb-color-primary-400)}.nvb-root .nvb-bg-primary-500{background-color:var(--nvb-color-primary-500)}.nvb-root .nvb-bg-primary-600{background-color:var(--nvb-color-primary-600)}.nvb-root .nvb-bg-primary-700{background-color:var(--nvb-color-primary-700)}.nvb-root .nvb-bg-primary-800{background-color:var(--nvb-color-primary-800)}.nvb-root .nvb-bg-primary-900{background-color:var(--nvb-color-primary-900)}.nvb-root .nvb-bg-primary-950{background-color:var(--nvb-color-primary-950)}.nvb-root .nvb-bg-neutral-000{background-color:var(--nvb-color-neutral-000)}.nvb-root .nvb-bg-neutral-050{background-color:var(--nvb-color-neutral-050)}.nvb-root .nvb-bg-neutral-100{background-color:var(--nvb-color-neutral-100)}.nvb-root .nvb-bg-neutral-200{background-color:var(--nvb-color-neutral-200)}.nvb-root .nvb-bg-neutral-300{background-color:var(--nvb-color-neutral-300)}.nvb-root .nvb-bg-neutral-400{background-color:var(--nvb-color-neutral-400)}.nvb-root .nvb-bg-neutral-500{background-color:var(--nvb-color-neutral-500)}.nvb-root .nvb-bg-neutral-600{background-color:var(--nvb-color-neutral-600)}.nvb-root .nvb-bg-neutral-700{background-color:var(--nvb-color-neutral-700)}.nvb-root .nvb-bg-neutral-800{background-color:var(--nvb-color-neutral-800)}.nvb-root .nvb-bg-neutral-900{background-color:var(--nvb-color-neutral-900)}.nvb-root .nvb-bg-neutral-950{background-color:var(--nvb-color-neutral-950)}.nvb-root .nvb-bg-risk-50{background-color:var(--nvb-color-risk-050)}.nvb-root .nvb-bg-risk-100{background-color:var(--nvb-color-risk-100)}.nvb-root .nvb-bg-risk-200{background-color:var(--nvb-color-risk-200)}.nvb-root .nvb-bg-risk-300{background-color:var(--nvb-color-risk-300)}.nvb-root .nvb-bg-risk-400{background-color:var(--nvb-color-risk-400)}.nvb-root .nvb-bg-risk-500{background-color:var(--nvb-color-risk-500)}.nvb-root .nvb-bg-risk-600{background-color:var(--nvb-color-risk-600)}.nvb-root .nvb-bg-risk-700{background-color:var(--nvb-color-risk-700)}.nvb-root .nvb-bg-risk-800{background-color:var(--nvb-color-risk-800)}.nvb-root .nvb-bg-risk-900{background-color:var(--nvb-color-risk-900)}.nvb-root .nvb-bg-risk-950{background-color:var(--nvb-color-risk-950)}.nvb-root .nvb-bg-warning-50{background-color:var(--nvb-color-warning-050)}.nvb-root .nvb-bg-warning-100{background-color:var(--nvb-color-warning-100)}.nvb-root .nvb-bg-warning-200{background-color:var(--nvb-color-warning-200)}.nvb-root .nvb-bg-warning-300{background-color:var(--nvb-color-warning-300)}.nvb-root .nvb-bg-warning-400{background-color:var(--nvb-color-warning-400)}.nvb-root .nvb-bg-warning-500{background-color:var(--nvb-color-warning-500)}.nvb-root .nvb-bg-warning-600{background-color:var(--nvb-color-warning-600)}.nvb-root .nvb-bg-warning-700{background-color:var(--nvb-color-warning-700)}.nvb-root .nvb-bg-warning-800{background-color:var(--nvb-color-warning-800)}.nvb-root .nvb-bg-warning-900{background-color:var(--nvb-color-warning-900)}.nvb-root .nvb-bg-warning-950{background-color:var(--nvb-color-warning-950)}.nvb-root .nvb-bg-success-50{background-color:var(--nvb-color-success-050)}.nvb-root .nvb-bg-success-100{background-color:var(--nvb-color-success-100)}.nvb-root .nvb-bg-success-200{background-color:var(--nvb-color-success-200)}.nvb-root .nvb-bg-success-300{background-color:var(--nvb-color-success-300)}.nvb-root .nvb-bg-success-400{background-color:var(--nvb-color-success-400)}.nvb-root .nvb-bg-success-500{background-color:var(--nvb-color-success-500)}.nvb-root .nvb-bg-success-600{background-color:var(--nvb-color-success-600)}.nvb-root .nvb-bg-success-700{background-color:var(--nvb-color-success-700)}.nvb-root .nvb-bg-success-800{background-color:var(--nvb-color-success-800)}.nvb-root .nvb-bg-success-900{background-color:var(--nvb-color-success-900)}.nvb-root .nvb-bg-success-950{background-color:var(--nvb-color-success-950)}.nvb-root .nvb-bg-info-50{background-color:var(--nvb-color-info-050)}.nvb-root .nvb-bg-info-100{background-color:var(--nvb-color-info-100)}.nvb-root .nvb-bg-info-200{background-color:var(--nvb-color-info-200)}.nvb-root .nvb-bg-info-300{background-color:var(--nvb-color-info-300)}.nvb-root .nvb-bg-info-400{background-color:var(--nvb-color-info-400)}.nvb-root .nvb-bg-info-500{background-color:var(--nvb-color-info-500)}.nvb-root .nvb-bg-info-600{background-color:var(--nvb-color-info-600)}.nvb-root .nvb-bg-info-700{background-color:var(--nvb-color-info-700)}.nvb-root .nvb-bg-info-800{background-color:var(--nvb-color-info-800)}.nvb-root .nvb-bg-info-900{background-color:var(--nvb-color-info-900)}.nvb-root .nvb-bg-info-950{background-color:var(--nvb-color-info-950)}.nvb-root .nvb-bg-text-000{background-color:var(--nvb-color-text-000)}.nvb-root .nvb-bg-text-050{background-color:var(--nvb-color-text-050)}.nvb-root .nvb-bg-text-100{background-color:var(--nvb-color-text-100)}.nvb-root .nvb-bg-text-200{background-color:var(--nvb-color-text-200)}.nvb-root .nvb-bg-text-300{background-color:var(--nvb-color-text-300)}.nvb-root .nvb-bg-text-400{background-color:var(--nvb-color-text-400)}.nvb-root .nvb-bg-text-500{background-color:var(--nvb-color-text-500)}.nvb-root .nvb-bg-text-600{background-color:var(--nvb-color-text-600)}.nvb-root .nvb-bg-text-700{background-color:var(--nvb-color-text-700)}.nvb-root .nvb-bg-text-800{background-color:var(--nvb-color-text-800)}.nvb-root .nvb-bg-text-900{background-color:var(--nvb-color-text-900)}.nvb-root .nvb-bg-text-950{background-color:var(--nvb-color-text-950)}.nvb-root .nvb-text-neutral-0{color:var(--nvb-color-neutral-000)}.nvb-root .nvb-text-neutral-50{color:var(--nvb-color-neutral-050)}.nvb-root .nvb-text-neutral-100{color:var(--nvb-color-neutral-100)}.nvb-root .nvb-text-neutral-200{color:var(--nvb-color-neutral-200)}.nvb-root .nvb-text-neutral-300{color:var(--nvb-color-neutral-300)}.nvb-root .nvb-text-neutral-400{color:var(--nvb-color-neutral-400)}.nvb-root .nvb-text-neutral-500{color:var(--nvb-color-neutral-500)}.nvb-root .nvb-text-neutral-600{color:var(--nvb-color-neutral-600)}.nvb-root .nvb-text-neutral-700{color:var(--nvb-color-neutral-700)}.nvb-root .nvb-text-neutral-800{color:var(--nvb-color-neutral-800)}.nvb-root .nvb-text-neutral-900{color:var(--nvb-color-neutral-900)}.nvb-root .nvb-text-neutral-950{color:var(--nvb-color-neutral-950)}.nvb-root .nvb-p-2{padding:var(--nvb-space-2)}.nvb-root .nvb-p-3{padding:var(--nvb-space-3)}}}@layer elements{.nvb-root{--nvb-control-height: 40px;--nvb-control-height-sm: 32px;--nvb-control-padding-x: 12px;--nvb-control-font-size: 14px;--nvb-control-font-weight: 400;--nvb-control-radius: var(--nvb-radius-md);--nvb-input-height: 40px;--nvb-input-padding-x: 12px;--nvb-input-font-size: 14px;--nvb-input-radius: var(--nvb-radius-md);--nvb-input-border-width: 1px;--nvb-input-border-color: var(--nvb-color-neutral-300);--nvb-input-bg: var(--nvb-color-neutral-000);--nvb-input-text-color: var(--nvb-color-neutral-800);--nvb-input-placeholder-color: var(--nvb-color-neutral-500);--nvb-input-focus-border-color: var(--nvb-color-primary-500);--nvb-input-disabled-bg: var(--nvb-color-neutral-100);--nvb-input-disabled-text-color: var(--nvb-color-neutral-500);--nvb-input-error-border-color: var(--nvb-color-risk-500);--nvb-input-error-focus-border-color: var(--nvb-color-risk-600);--nvb-textarea-min-height: 120px;--nvb-textarea-padding-x: 12px;--nvb-textarea-padding-y: 12px;--nvb-control-button-border-width: 1px;--nvb-control-button-border-color: var(--nvb-color-neutral-300);--nvb-control-button-bg: var(--nvb-color-neutral-000);--nvb-control-button-text-color: var(--nvb-color-primary-700);--nvb-control-button-hover-border-color: var(--nvb-color-primary-300);--nvb-control-button-hover-bg: color-mix( in oklab, var(--nvb-color-primary-050) 40%, var(--nvb-color-neutral-000) );--nvb-control-button-hover-text-color: var(--nvb-color-primary-800);--nvb-checkbox-size: 18px;--nvb-checkbox-border-width: 1.5px;--nvb-checkbox-radius: var(--nvb-radius-sm);--nvb-checkbox-border-color: var(--nvb-color-neutral-300);--nvb-checkbox-bg: var(--nvb-color-neutral-000);--nvb-checkbox-checked-bg: var(--nvb-color-primary-500);--nvb-checkbox-checked-border-color: var(--nvb-color-primary-500);--nvb-checkbox-check-color: var(--nvb-color-neutral-000);--nvb-checkbox-disabled-bg: var(--nvb-color-neutral-100);--nvb-checkbox-disabled-opacity: .5;--nvb-radio-size: 18px;--nvb-radio-border-width: 1.5px;--nvb-radio-border-color: var(--nvb-color-neutral-300);--nvb-radio-bg: var(--nvb-color-neutral-000);--nvb-radio-checked-border-color: var(--nvb-color-primary-500);--nvb-radio-dot-size: 8px;--nvb-radio-dot-color: var(--nvb-color-primary-500);--nvb-radio-disabled-bg: var(--nvb-color-neutral-100);--nvb-radio-disabled-opacity: .5;--nvb-focus-ring: 0 0 0 1px var(--nvb-color-neutral-000), 0 0 0 3px color-mix(in oklab, var(--nvb-color-primary-400) 55%, transparent);--nvb-font-family: var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif );font-family:var(--nvb-font-family);color:var(--nvb-color-text-800)}:where(.nvb-root input[type=text],.nvb-root input[type=number],.nvb-root input[type=email],.nvb-root input[type=search],.nvb-root input[type=tel],.nvb-root input[type=url],.nvb-root input[type=password],.nvb-root input[type=date],.nvb-root input[type=datetime-local],.nvb-root input[type=month],.nvb-root input[type=time],.nvb-root input[type=week],.nvb-root select,.nvb-root textarea){border:var(--nvb-input-border-width) solid var(--nvb-input-border-color);border-radius:var(--nvb-input-radius);background:var(--nvb-input-bg);color:var(--nvb-input-text-color);font-family:var(--nvb-font-family);font-size:var(--nvb-input-font-size);line-height:20px;box-shadow:none;transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}:where(.nvb-root input[type=text],.nvb-root input[type=number],.nvb-root input[type=email],.nvb-root input[type=search],.nvb-root input[type=tel],.nvb-root input[type=url],.nvb-root input[type=password],.nvb-root input[type=date],.nvb-root input[type=datetime-local],.nvb-root input[type=month],.nvb-root input[type=time],.nvb-root input[type=week],.nvb-root select){min-height:var(--nvb-input-height);padding:0 var(--nvb-input-padding-x)}:where(.nvb-root textarea){min-height:var(--nvb-textarea-min-height);padding:var(--nvb-textarea-padding-y) var(--nvb-textarea-padding-x);resize:vertical}:where(.nvb-root input[type=text]:focus,.nvb-root input[type=number]:focus,.nvb-root input[type=email]:focus,.nvb-root input[type=search]:focus,.nvb-root input[type=tel]:focus,.nvb-root input[type=url]:focus,.nvb-root input[type=password]:focus,.nvb-root input[type=date]:focus,.nvb-root input[type=datetime-local]:focus,.nvb-root input[type=month]:focus,.nvb-root input[type=time]:focus,.nvb-root input[type=week]:focus,.nvb-root select:focus,.nvb-root textarea:focus){border-color:var(--nvb-input-focus-border-color);box-shadow:var(--nvb-focus-ring);outline:0}:where(.nvb-root input::placeholder,.nvb-root textarea::placeholder){color:var(--nvb-input-placeholder-color);opacity:1}:where(.nvb-root input[type=text]:disabled,.nvb-root input[type=number]:disabled,.nvb-root input[type=email]:disabled,.nvb-root input[type=search]:disabled,.nvb-root input[type=tel]:disabled,.nvb-root input[type=url]:disabled,.nvb-root input[type=password]:disabled,.nvb-root input[type=date]:disabled,.nvb-root input[type=datetime-local]:disabled,.nvb-root input[type=month]:disabled,.nvb-root input[type=time]:disabled,.nvb-root input[type=week]:disabled,.nvb-root select:disabled,.nvb-root textarea:disabled){background-color:var(--nvb-input-disabled-bg);color:var(--nvb-input-disabled-text-color);cursor:not-allowed}.nvb-root [data-nvb-icon-rendered=true]{display:inline-flex;align-items:center;justify-content:center;line-height:1;vertical-align:middle}.nvb-root span[data-nvb-icon-rendered=true]{width:1em;height:1em;flex-shrink:0}.nvb-root [data-nvb-icon-rendered=true]>svg{width:1em;height:1em;display:block;fill:currentColor}.nvb-root .nvb-control__text-input,.nvb-root .nvb-control__attribute-input,.nvb-root .nvb-control__column-input{display:block;box-sizing:border-box;width:100%;min-height:var(--nvb-input-height);padding:0 var(--nvb-input-padding-x);font-size:var(--nvb-input-font-size);line-height:1.4;color:var(--nvb-input-text-color);border-radius:var(--nvb-input-radius);outline:none;font-family:var(--nvb-font-family);box-shadow:none;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease}.nvb-root .nvb-control__text-input,.nvb-root .nvb-control__attribute-input{border:var(--nvb-input-border-width) solid var(--nvb-input-border-color);background-color:var(--nvb-input-bg)}.nvb-root .nvb-control__column-input{border:var(--nvb-input-border-width) solid transparent;background-color:var(--nvb-input-bg)}.nvb-root .nvb-control__text-input:focus,.nvb-root .nvb-control__attribute-input:focus,.nvb-root .nvb-control__column-input:focus{border-color:var(--nvb-input-focus-border-color);box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-field--has-errors .nvb-control__text-input,.nvb-root .nvb-field--has-errors .nvb-control__attribute-input,.nvb-root .nvb-field--has-errors .nvb-control__column-input,.nvb-root .nvb-field--has-errors input[type=text],.nvb-root .nvb-field--has-errors input[type=number],.nvb-root .nvb-field--has-errors input[type=email],.nvb-root .nvb-field--has-errors input[type=search],.nvb-root .nvb-field--has-errors input[type=tel],.nvb-root .nvb-field--has-errors input[type=url],.nvb-root .nvb-field--has-errors input[type=password],.nvb-root .nvb-field--has-errors select,.nvb-root .nvb-field--has-errors textarea{border-color:var(--nvb-input-error-border-color)}.nvb-root .nvb-field--has-errors .nvb-control__text-input:focus,.nvb-root .nvb-field--has-errors .nvb-control__attribute-input:focus,.nvb-root .nvb-field--has-errors .nvb-control__column-input:focus,.nvb-root .nvb-field--has-errors input[type=text]:focus,.nvb-root .nvb-field--has-errors input[type=number]:focus,.nvb-root .nvb-field--has-errors input[type=email]:focus,.nvb-root .nvb-field--has-errors input[type=search]:focus,.nvb-root .nvb-field--has-errors input[type=tel]:focus,.nvb-root .nvb-field--has-errors input[type=url]:focus,.nvb-root .nvb-field--has-errors input[type=password]:focus,.nvb-root .nvb-field--has-errors select:focus,.nvb-root .nvb-field--has-errors textarea:focus{border-color:var(--nvb-input-error-focus-border-color)}.nvb-root .nvb-field--has-errors .nvb-control__checkbox-input,.nvb-root .nvb-field--has-errors .nvb-control__radio-input{border-color:var(--nvb-input-error-border-color)}.nvb-root .nvb-control__column-input:disabled{background-color:var(--nvb-input-disabled-bg);color:var(--nvb-input-disabled-text-color);cursor:not-allowed}.nvb-root :where(.nvb-page,.nvb-page__content,.nvb-panel,.nvb-panel__body,.nvb-panel__content,.nvb-row,.nvb-row-content,.nvb-column,.nvb-field,.nvb-field__content,select-element,multi-select-element,autocomplete-element,datepicker-element,date-range-element,phone-input-element,nvb-select):has(:where(.nvb-select-container--open,.nvb-multi-select-container--open,.nvb-autocomplete--open,.nvb-datepicker--open,.nvb-date-range--open,.nvb-select__control--open)){position:relative;z-index:var(--nvb-floating-overlay-container-z-index, 2147482990);overflow:visible}.nvb-root textarea.nvb-control__attribute-input,.nvb-root textarea.nvb-control__text-input,.nvb-root textarea.nvb-control__column-input{min-height:var(--nvb-textarea-min-height);padding:var(--nvb-textarea-padding-y) var(--nvb-textarea-padding-x);line-height:1.35}.nvb-root .nvb-control__checkbox-input{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:var(--nvb-checkbox-size);min-width:var(--nvb-checkbox-size);height:var(--nvb-checkbox-size);min-height:var(--nvb-checkbox-size);border:var(--nvb-checkbox-border-width) solid var(--nvb-checkbox-border-color);border-radius:var(--nvb-checkbox-radius);position:relative;display:inline-block;vertical-align:middle;background-color:var(--nvb-checkbox-bg);cursor:pointer;margin:0;padding:0;transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease}.nvb-root .nvb-control__checkbox-input:hover{border-color:var(--nvb-checkbox-checked-border-color)}.nvb-root .nvb-control__checkbox-input:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-control__checkbox-input:checked{background-color:var(--nvb-checkbox-checked-bg);border-color:var(--nvb-checkbox-checked-border-color)}.nvb-root .nvb-control__checkbox-input:checked:after{content:"";position:absolute;left:50%;top:45%;width:5px;height:8px;border:solid var(--nvb-checkbox-check-color);border-width:0 2px 2px 0;transform:translate(-50%,-50%) rotate(45deg);transform-origin:center}.nvb-root .nvb-control__checkbox-input:disabled{cursor:not-allowed;opacity:var(--nvb-checkbox-disabled-opacity);background-color:var(--nvb-checkbox-disabled-bg)}.nvb-root .nvb-control__radio-input{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:var(--nvb-radio-size);min-width:var(--nvb-radio-size);height:var(--nvb-radio-size);min-height:var(--nvb-radio-size);border:var(--nvb-radio-border-width) solid var(--nvb-radio-border-color);border-radius:50%;position:relative;display:inline-block;vertical-align:middle;background-color:var(--nvb-radio-bg);cursor:pointer;margin:0;padding:0;transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease}.nvb-root .nvb-control__radio-input:hover{border-color:var(--nvb-radio-checked-border-color)}.nvb-root .nvb-control__radio-input:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-control__radio-input:checked{border-color:var(--nvb-radio-checked-border-color)}.nvb-root .nvb-control__radio-input:checked:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:var(--nvb-radio-dot-size);height:var(--nvb-radio-dot-size);border-radius:50%;background-color:var(--nvb-radio-dot-color)}.nvb-root .nvb-control__radio-input:disabled{cursor:not-allowed;opacity:var(--nvb-radio-disabled-opacity);background-color:var(--nvb-radio-disabled-bg)}.nvb-root input[type=number]::-webkit-inner-spin-button,.nvb-root input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.nvb-root .nvb-select-button--buttons{display:inline-flex;flex-wrap:nowrap;align-items:stretch;width:fit-content;max-width:100%}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical{flex-direction:column}.nvb-root .nvb-select-button--buttons .nvb-select-button__option{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--nvb-control-height, 36px);padding:0 14px;border:1px solid var(--nvb-color-neutral-300);border-radius:0;background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);font-size:14px;font-weight:500;font-family:inherit;line-height:1;white-space:nowrap;cursor:pointer;z-index:0;transition:background-color .12s ease,border-color .12s ease,color .12s ease}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option+.nvb-select-button__option{margin-left:-1px}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option+.nvb-select-button__option{margin-top:-1px}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:first-child{border-radius:var(--nvb-radius-md) 0 0 var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:last-child{border-radius:0 var(--nvb-radius-md) var(--nvb-radius-md) 0}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:first-child:last-child{border-radius:var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:first-child{border-radius:var(--nvb-radius-md) var(--nvb-radius-md) 0 0}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:last-child{border-radius:0 0 var(--nvb-radius-md) var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:first-child:last-child{border-radius:var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:hover:not(:disabled){background:color-mix(in oklab,var(--nvb-color-neutral-100) 80%,var(--nvb-color-neutral-000));border-color:var(--nvb-color-neutral-400);z-index:1}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:focus-visible{outline:0;z-index:2;box-shadow:var(--nvb-focus-ring, 0 0 0 3px color-mix(in oklab, var(--nvb-color-primary-500) 18%, transparent))}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-primary-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-primary-500);color:var(--nvb-color-primary-700);font-weight:600;z-index:1}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-neutral.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-neutral-700) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-neutral-500);color:var(--nvb-color-neutral-900)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-success.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-success-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-success-500);color:var(--nvb-color-success-700)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-warning.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-warning-500) 12%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-warning-500);color:var(--nvb-color-warning-800)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-risk.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-risk-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-risk-500);color:var(--nvb-color-risk-700)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:disabled,.nvb-root .nvb-select-button--buttons .nvb-select-button__option--disabled{opacity:.55;cursor:not-allowed}.nvb-root .nvb-select-button--buttons.nvb-select-button--size-small .nvb-select-button__option{height:var(--nvb-control-height-sm, 28px);padding:0 10px;font-size:13px}.nvb-root .nvb-select-button--buttons.nvb-select-button--size-large .nvb-select-button__option{height:44px;padding:0 18px;font-size:15px}.nvb-root .nvb-select-button--segmented{display:inline-flex;flex-wrap:nowrap;align-items:stretch;gap:2px;width:fit-content;max-width:100%;padding:3px;border-radius:var(--nvb-radius-full);background:color-mix(in oklab,var(--nvb-color-neutral-100) 85%,var(--nvb-color-neutral-000));border:1px solid color-mix(in oklab,var(--nvb-color-neutral-300) 55%,transparent)}.nvb-root .nvb-select-button--segmented.nvb-select-button--vertical{flex-direction:column;border-radius:14px}.nvb-root .nvb-select-button--segmented .nvb-select-button__option{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--nvb-control-height, 36px);padding:0 16px;border:0;border-radius:var(--nvb-radius-full);background:transparent;color:var(--nvb-color-neutral-600);font-size:14px;font-weight:500;font-family:inherit;cursor:pointer;transition:background-color .12s ease,color .12s ease,box-shadow .12s ease}.nvb-root .nvb-select-button--segmented.nvb-select-button--vertical .nvb-select-button__option{border-radius:11px}.nvb-root .nvb-select-button--segmented .nvb-select-button__option:hover:not(:disabled){background:color-mix(in oklab,var(--nvb-color-neutral-000) 60%,transparent);color:var(--nvb-color-neutral-800)}.nvb-root .nvb-select-button--segmented .nvb-select-button__option--selected{background:var(--nvb-color-neutral-000, #ffffff);color:var(--nvb-color-neutral-900);font-weight:600;box-shadow:0 1px 3px #0000001f,0 1px 2px #00000014}.nvb-root .nvb-select-button--segmented .nvb-select-button__option:disabled,.nvb-root .nvb-select-button--segmented .nvb-select-button__option--disabled{opacity:.55;cursor:not-allowed}.nvb-root .nvb-select-button--segmented.nvb-select-button--size-small .nvb-select-button__option{min-height:var(--nvb-control-height-sm, 28px);padding:0 12px;font-size:13px}.nvb-root .nvb-select-button--segmented.nvb-select-button--size-large .nvb-select-button__option{min-height:44px;padding:0 20px;font-size:15px}}:host{display:block;width:100%;height:100%;max-height:100%;min-height:0;isolation:isolate;overflow:hidden;font-family:var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif );color:var(--nvb-color-neutral-700);background:transparent;color-scheme:light}:host([data-theme="dark"]){color-scheme:dark}:host *{box-sizing:border-box}:host button:focus-visible,:host input:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:2px solid var(--nvb-color-primary-500);outline-offset:1px}:host button,:host input,:host select,:host textarea{font-family:var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif )}:host(.nvb-theme-switching),:host(.nvb-theme-switching) *{transition:none!important;animation:none!important}.ngx-view-builder-renderer{width:100%;height:100%;min-height:0}.ngx-view-builder-renderer>runtime-preview{display:block;width:100%;height:100%;min-height:0}.nvb-runtime-pending{visibility:hidden}\n'],dependencies:[{kind:"component",type:se,selector:"runtime-preview",inputs:["viewportSettings","runtimePreviewSettings"]},{kind:"component",type:G,selector:"confirm-dialog"}],changeDetection:l.ChangeDetectionStrategy.Eager,encapsulation:l.ViewEncapsulation.ShadowDom})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Ln,decorators:[{type:A,args:[{selector:"ngx-view-builder-runtime",imports:[se,G],encapsulation:Mn.ShadowDom,changeDetection:E.Eager,providers:Y,template:'<section\n class="ngx-view-builder-renderer nvb-root"\n aria-label="Form runtime"\n data-testid="ngx-view-builder-renderer-root"\n>\n <runtime-preview\n [class.nvb-runtime-pending]="!structureRendered()"\n [viewportSettings]="resolvedViewportSettings()"\n [runtimePreviewSettings]="resolvedPreviewSettings()"\n ></runtime-preview>\n</section>\n\n<confirm-dialog />\n',styles:['@layer reset,tokens,components,fpUtilities,elements;@layer reset{.nvb-root,.nvb-root *,.nvb-root *:before,.nvb-root *:after{margin:0;padding:0;box-sizing:border-box}.nvb-root{height:100%;line-height:1.5;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;font-family:sans-serif}.nvb-root ul,.nvb-root ol{list-style:none}.nvb-root a{text-decoration:none;color:inherit}.nvb-root img,.nvb-root picture,.nvb-root video,.nvb-root canvas,.nvb-root svg{display:block;max-width:100%;height:auto}.nvb-root input,.nvb-root button,.nvb-root textarea,.nvb-root select{font:inherit}.nvb-root button{border:none;background:none;cursor:pointer}.nvb-root table{border-collapse:collapse;border-spacing:0}}@layer tokens{@layer tokens{:host,.nvb-root{--nvb-font-family-base: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;--nvb-color-primary-050: oklch(98.04% .0104 251.42);--nvb-color-primary-100: oklch(95.63% .0247 251.98);--nvb-color-primary-200: oklch(91.21% .0518 252.79);--nvb-color-primary-300: oklch(84.55% .0888 253.67);--nvb-color-primary-400: oklch(75.39% .1293 254.94);--nvb-color-primary-500: oklch(64.21% .1552 256.62);--nvb-color-primary-600: oklch(56.71% .1412 257.44);--nvb-color-primary-700: oklch(48.29% .1191 258.32);--nvb-color-primary-800: oklch(40.54% .0992 258.96);--nvb-color-primary-900: oklch(31.48% .0762 259.64);--nvb-color-primary-950: oklch(24.86% .0581 260.47);--nvb-color-neutral-000: oklch(100% .0001 89.88);--nvb-color-neutral-050: oklch(98.38% .0035 247.86);--nvb-color-neutral-100: oklch(96.76% .007 247.9);--nvb-color-neutral-200: oklch(92.58% .0132 255.03);--nvb-color-neutral-300: oklch(86.94% .0199 253.37);--nvb-color-neutral-400: oklch(71% .0348 256.79);--nvb-color-neutral-500: oklch(55.64% .0398 256.82);--nvb-color-neutral-600: oklch(45.05% .0371 256.83);--nvb-color-neutral-700: oklch(37.52% .0394 256.85);--nvb-color-neutral-800: oklch(27.53% .0364 259.7);--nvb-color-neutral-900: oklch(20.64% .0388 265.55);--nvb-color-neutral-950: oklch(12.92% .0415 265.15);--nvb-color-risk-050: oklch(96.78% .0142 17.4);--nvb-color-risk-100: oklch(93.44% .0314 17.73);--nvb-color-risk-200: oklch(88.03% .0615 18.39);--nvb-color-risk-300: oklch(80.98% .1025 19.54);--nvb-color-risk-400: oklch(71.23% .1656 22.18);--nvb-color-risk-500: oklch(63.56% .2082 25.38);--nvb-color-risk-600: oklch(57.86% .2137 27.17);--nvb-color-risk-700: oklch(50.79% .1918 27.56);--nvb-color-risk-800: oklch(44.1% .1603 26.89);--nvb-color-risk-900: oklch(39.96% .1348 25.77);--nvb-color-risk-950: oklch(25.26% .0866 26);--nvb-color-caution-050: oklch(98.66% .0218 95.28);--nvb-color-caution-100: oklch(96.22% .0569 95.61);--nvb-color-caution-200: oklch(92.57% .1141 95.75);--nvb-color-caution-300: oklch(88.13% .1526 91.77);--nvb-color-caution-400: oklch(83.34% .1641 83.87);--nvb-color-caution-500: oklch(76.97% .1645 70.61);--nvb-color-caution-600: oklch(66.88% .1588 57.96);--nvb-color-caution-700: oklch(55.42% .1447 49.16);--nvb-color-caution-800: oklch(47.06% .1236 46.53);--nvb-color-caution-900: oklch(40.96% .1037 46.31);--nvb-color-caution-950: oklch(27.8% .0739 45.8);--nvb-color-warning-050: oklch(98.66% .0218 95.28);--nvb-color-warning-100: oklch(96.22% .0569 95.61);--nvb-color-warning-200: oklch(92.57% .1141 95.75);--nvb-color-warning-300: oklch(88.13% .1526 91.77);--nvb-color-warning-400: oklch(83.34% .1641 83.87);--nvb-color-warning-500: oklch(76.97% .1645 70.61);--nvb-color-warning-600: oklch(66.88% .1588 57.96);--nvb-color-warning-700: oklch(55.42% .1447 49.16);--nvb-color-warning-800: oklch(47.06% .1236 46.53);--nvb-color-warning-900: oklch(40.96% .1037 46.31);--nvb-color-warning-950: oklch(27.8% .0739 45.8);--nvb-color-success-050: oklch(98.36% .0162 155.55);--nvb-color-success-100: oklch(96.46% .0405 157.07);--nvb-color-success-200: oklch(92.46% .0811 155.98);--nvb-color-success-300: oklch(87.12% .137 154.59);--nvb-color-success-400: oklch(79.99% .1816 151.78);--nvb-color-success-500: oklch(72.05% .192 149.49);--nvb-color-success-600: oklch(62.3% .1688 149.18);--nvb-color-success-700: oklch(52.48% .1373 149.83);--nvb-color-success-800: oklch(44.61% .1073 151.49);--nvb-color-success-900: oklch(38.98% .0885 152.69);--nvb-color-success-950: oklch(26.61% .0625 153.04);--nvb-color-info-050: oklch(97.67% .0127 236.62);--nvb-color-info-100: oklch(95.35% .024 236.81);--nvb-color-info-200: oklch(89.99% .0556 231.68);--nvb-color-info-300: oklch(82.95% .1004 229.56);--nvb-color-info-400: oklch(75.84% .1373 231.6);--nvb-color-info-500: oklch(67.76% .1481 238.1);--nvb-color-info-600: oklch(58.63% .1366 241.18);--nvb-color-info-700: oklch(49.96% .1179 242.21);--nvb-color-info-800: oklch(43.8% .0988 240.83);--nvb-color-info-900: oklch(39.2% .0844 240.76);--nvb-color-info-950: oklch(29.47% .0635 243.15);--nvb-color-text-000: oklch(100% .0001 89.88);--nvb-color-text-050: oklch(98.38% .0035 247.86);--nvb-color-text-100: oklch(96.76% .007 247.9);--nvb-color-text-200: oklch(92.58% .0132 255.03);--nvb-color-text-300: oklch(86.94% .0199 253.37);--nvb-color-text-400: oklch(71% .0348 256.79);--nvb-color-text-500: oklch(55.64% .0398 256.82);--nvb-color-text-600: oklch(45.05% .0371 256.83);--nvb-color-text-700: oklch(37.52% .0394 256.85);--nvb-color-text-800: oklch(27.53% .0364 259.7);--nvb-color-text-900: oklch(20.64% .0388 265.55);--nvb-color-text-950: oklch(12.92% .0415 265.15);--nvb-radius-sm: 4px;--nvb-radius-md: 6px;--nvb-radius-lg: 8px;--nvb-radius-xl: 12px;--nvb-radius-full: 999px;--nvb-space-0: 2px;--nvb-space-1: 4px;--nvb-space-2: 6px;--nvb-space-3: 8px;--nvb-space-4: 10px;--nvb-space-5: 12px;--nvb-space-6: 16px;--nvb-space-7: 20px;--nvb-space-8: 24px;--nvb-space-9: 32px;--nvb-text-caption2: 10px;--nvb-text-caption1: 12px;--nvb-text-body1: 14px;--nvb-text-subtitle2: 16px;--nvb-text-subtitle1: 20px;--nvb-text-title3: 24px;--nvb-text-title2: 28px;--nvb-text-sm: var(--nvb-text-caption1);--nvb-text-base: var(--nvb-text-body1);--nvb-text-md: var(--nvb-text-body1);--nvb-text-lg: var(--nvb-text-subtitle2);--nvb-color-surface-mix-target: var(--nvb-color-neutral-000);--nvb-chart-single: var(--nvb-color-primary-500);--nvb-chart-1: #2a78d6;--nvb-chart-2: #eb6834;--nvb-chart-3: #1baf7a;--nvb-chart-4: #eda100;--nvb-chart-5: #e87ba4;--nvb-chart-6: #008300;--nvb-chart-7: #4a3aa7;--nvb-chart-8: #e34948;--nvb-chart-other: var(--nvb-color-neutral-400)}:host([data-theme="dark"]),:host(.nvb-dark),.nvb-root.nvb-dark,.nvb-root[data-theme=dark],.nvb-section-theme-dark{--nvb-font-family-base: "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;--nvb-color-primary-050: oklch(24.86% .0581 260.47);--nvb-color-primary-100: oklch(31.48% .0762 259.64);--nvb-color-primary-200: oklch(40.54% .0992 258.96);--nvb-color-primary-300: oklch(48.29% .1191 258.32);--nvb-color-primary-400: oklch(56.71% .1412 257.44);--nvb-color-primary-500: oklch(64.21% .1552 256.62);--nvb-color-primary-600: oklch(75.39% .1293 254.94);--nvb-color-primary-700: oklch(84.55% .0888 253.67);--nvb-color-primary-800: oklch(91.21% .0518 252.79);--nvb-color-primary-900: oklch(95.63% .0247 251.98);--nvb-color-primary-950: oklch(98.04% .0104 251.42);--nvb-color-neutral-000: oklch(19% .006 286);--nvb-color-neutral-050: oklch(23% .007 286);--nvb-color-neutral-100: oklch(27% .008 286);--nvb-color-neutral-200: oklch(38% .009 286);--nvb-color-neutral-300: oklch(49.5% .01 286);--nvb-color-neutral-400: oklch(58% .01 286);--nvb-color-neutral-500: oklch(65% .009 286);--nvb-color-neutral-600: oklch(74% .007 286);--nvb-color-neutral-700: oklch(82% .005 286);--nvb-color-neutral-800: oklch(88% .004 286);--nvb-color-neutral-900: oklch(93% .003 286);--nvb-color-neutral-950: oklch(97% .002 286);--nvb-color-risk-050: oklch(25.26% .0866 26);--nvb-color-risk-100: oklch(39.96% .1348 25.77);--nvb-color-risk-200: oklch(44.1% .1603 26.89);--nvb-color-risk-300: oklch(50.79% .1918 27.56);--nvb-color-risk-400: oklch(57.86% .2137 27.17);--nvb-color-risk-500: oklch(63.56% .2082 25.38);--nvb-color-risk-600: oklch(71.23% .1656 22.18);--nvb-color-risk-700: oklch(80.98% .1025 19.54);--nvb-color-risk-800: oklch(88.03% .0615 18.39);--nvb-color-risk-900: oklch(93.44% .0314 17.73);--nvb-color-risk-950: oklch(96.78% .0142 17.4);--nvb-color-caution-050: oklch(27.8% .0739 45.8);--nvb-color-caution-100: oklch(40.96% .1037 46.31);--nvb-color-caution-200: oklch(47.06% .1236 46.53);--nvb-color-caution-300: oklch(55.42% .1447 49.16);--nvb-color-caution-400: oklch(66.88% .1588 57.96);--nvb-color-caution-500: oklch(76.97% .1645 70.61);--nvb-color-caution-600: oklch(83.34% .1641 83.87);--nvb-color-caution-700: oklch(88.13% .1526 91.77);--nvb-color-caution-800: oklch(92.57% .1141 95.75);--nvb-color-caution-900: oklch(96.22% .0569 95.61);--nvb-color-caution-950: oklch(98.66% .0218 95.28);--nvb-color-warning-050: oklch(27.8% .0739 45.8);--nvb-color-warning-100: oklch(40.96% .1037 46.31);--nvb-color-warning-200: oklch(47.06% .1236 46.53);--nvb-color-warning-300: oklch(55.42% .1447 49.16);--nvb-color-warning-400: oklch(66.88% .1588 57.96);--nvb-color-warning-500: oklch(76.97% .1645 70.61);--nvb-color-warning-600: oklch(83.34% .1641 83.87);--nvb-color-warning-700: oklch(88.13% .1526 91.77);--nvb-color-warning-800: oklch(92.57% .1141 95.75);--nvb-color-warning-900: oklch(96.22% .0569 95.61);--nvb-color-warning-950: oklch(98.66% .0218 95.28);--nvb-color-success-050: oklch(26.61% .0625 153.04);--nvb-color-success-100: oklch(38.98% .0885 152.69);--nvb-color-success-200: oklch(44.61% .1073 151.49);--nvb-color-success-300: oklch(52.48% .1373 149.83);--nvb-color-success-400: oklch(62.3% .1688 149.18);--nvb-color-success-500: oklch(72.05% .192 149.49);--nvb-color-success-600: oklch(79.99% .1816 151.78);--nvb-color-success-700: oklch(87.12% .137 154.59);--nvb-color-success-800: oklch(92.46% .0811 155.98);--nvb-color-success-900: oklch(96.46% .0405 157.07);--nvb-color-success-950: oklch(98.36% .0162 155.55);--nvb-color-info-050: oklch(29.47% .0635 243.15);--nvb-color-info-100: oklch(39.2% .0844 240.76);--nvb-color-info-200: oklch(43.8% .0988 240.83);--nvb-color-info-300: oklch(49.96% .1179 242.21);--nvb-color-info-400: oklch(58.63% .1366 241.18);--nvb-color-info-500: oklch(67.76% .1481 238.1);--nvb-color-info-600: oklch(75.84% .1373 231.6);--nvb-color-info-700: oklch(82.95% .1004 229.56);--nvb-color-info-800: oklch(89.99% .0556 231.68);--nvb-color-info-900: oklch(95.35% .024 236.81);--nvb-color-info-950: oklch(97.67% .0127 236.62);--nvb-color-text-000: oklch(19% .006 286);--nvb-color-text-050: oklch(23% .007 286);--nvb-color-text-100: oklch(27% .008 286);--nvb-color-text-200: oklch(38% .009 286);--nvb-color-text-300: oklch(49.5% .01 286);--nvb-color-text-400: oklch(58% .01 286);--nvb-color-text-500: oklch(65% .009 286);--nvb-color-text-600: oklch(74% .007 286);--nvb-color-text-700: oklch(82% .005 286);--nvb-color-text-800: oklch(88% .004 286);--nvb-color-text-900: oklch(93% .003 286);--nvb-color-text-950: oklch(97% .002 286);--nvb-radius-sm: 4px;--nvb-radius-md: 6px;--nvb-radius-lg: 8px;--nvb-radius-xl: 12px;--nvb-radius-full: 999px;--nvb-space-0: 2px;--nvb-space-1: 4px;--nvb-space-2: 6px;--nvb-space-3: 8px;--nvb-space-4: 10px;--nvb-space-5: 12px;--nvb-space-6: 16px;--nvb-space-7: 20px;--nvb-space-8: 24px;--nvb-space-9: 32px;--nvb-text-caption2: 10px;--nvb-text-caption1: 12px;--nvb-text-body1: 14px;--nvb-text-subtitle2: 16px;--nvb-text-subtitle1: 20px;--nvb-text-title3: 24px;--nvb-text-title2: 28px;--nvb-text-sm: var(--nvb-text-caption1);--nvb-text-base: var(--nvb-text-body1);--nvb-text-md: var(--nvb-text-body1);--nvb-text-lg: var(--nvb-text-subtitle2);--nvb-color-surface-mix-target: var(--nvb-color-neutral-050);--nvb-chart-single: var(--nvb-color-primary-500);--nvb-chart-1: #3987e5;--nvb-chart-2: #d95926;--nvb-chart-3: #199e70;--nvb-chart-4: #c98500;--nvb-chart-5: #d55181;--nvb-chart-6: #008300;--nvb-chart-7: #9085e9;--nvb-chart-8: #e66767;--nvb-chart-other: var(--nvb-color-neutral-500)}:host,.nvb-root{color-scheme:light;background-color:var(--nvb-surface, var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-800);scrollbar-color:var(--nvb-color-neutral-300) transparent}:host([data-theme="dark"]),:host(.nvb-dark),:host([data-theme="dark"]) .nvb-root,:host(.nvb-dark) .nvb-root,.nvb-root.nvb-dark,.nvb-root[data-theme=dark],.nvb-section-theme-dark{color-scheme:dark}}}@layer components{.nvb-root,.nvb-section-theme-dark{--nvb-button-height-lg: 40px;--nvb-button-height-ms: 32px;--nvb-button-height-sm: 32px;--nvb-button-height-sx: 28px;--nvb-button-padding-lg: 0 16px;--nvb-button-padding-ms: 0 12px;--nvb-button-padding-sm: 0 10px;--nvb-button-padding-sx: 0 8px;--nvb-button-font-size-lg: 14px;--nvb-button-font-size-ms: 13px;--nvb-button-font-size-sm: 13px;--nvb-button-font-size-sx: 12px;--nvb-button-radius: var(--nvb-radius-md);--nvb-button-gap: 6px;--nvb-button-border-color: var(--nvb-color-neutral-300);--nvb-button-bg: var(--nvb-color-neutral-000);--nvb-button-text-color: var(--nvb-color-neutral-800);--nvb-button-hover-bg: var(--nvb-color-neutral-050);--nvb-button-primary-bg: var(--nvb-color-primary-600);--nvb-button-primary-hover-bg: var(--nvb-color-primary-700);--nvb-button-danger-bg: var(--nvb-color-risk-050);--nvb-button-danger-text-color: var(--nvb-color-risk-700);--nvb-button-danger-border-color: var(--nvb-color-risk-300);--nvb-surface-bg: var(--nvb-color-neutral-000);--nvb-surface-muted-bg: color-mix(in oklab, var(--nvb-color-neutral-050) 84%, var(--nvb-color-neutral-000));--nvb-stroke-subtle: var(--nvb-color-neutral-200);--nvb-stroke-strong: var(--nvb-color-neutral-300);--nvb-shadow-2: 0 1px 2px color-mix(in oklab, var(--nvb-color-neutral-950) 6%, transparent);--nvb-shadow-8: 0 4px 8px color-mix(in oklab, var(--nvb-color-neutral-950) 10%, transparent), 0 12px 24px color-mix(in oklab, var(--nvb-color-neutral-950) 8%, transparent);--nvb-shadow-16: 0 8px 16px color-mix(in oklab, var(--nvb-color-neutral-950) 12%, transparent), 0 24px 48px color-mix(in oklab, var(--nvb-color-neutral-950) 14%, transparent);--nvb-dialog-radius: var(--nvb-radius-xl);--nvb-menu-radius: var(--nvb-radius-lg);--nvb-tablist-height: 40px;--nvb-card-bg: var(--nvb-color-neutral-000);--nvb-card-border-color: var(--nvb-color-neutral-200);--nvb-card-radius: var(--nvb-radius-lg);--nvb-card-shadow: var(--nvb-shadow-2);--nvb-card-padding: 12px}.nvb-root .nvb-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.nvb-root .nvb-button,.nvb-root .nvb-control__add-row-button{box-sizing:border-box;min-height:var(--nvb-button-height-ms);padding:var(--nvb-button-padding-ms);border:1px solid var(--nvb-button-border-color);border-radius:var(--nvb-button-radius);background:var(--nvb-button-bg);color:var(--nvb-button-text-color);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--nvb-button-gap);font-family:var(--nvb-font-family);font-size:var(--nvb-button-font-size-ms);font-weight:600;line-height:20px;white-space:nowrap;overflow:visible;transition:background-color .2s ease,border-color .2s ease,color .2s ease,opacity .2s ease,box-shadow .2s ease;box-shadow:none}.nvb-root .nvb-button:focus-visible,.nvb-root .nvb-control__add-row-button:focus-visible,.nvb-root .nvb-icon-button:focus-visible{outline:0;border-color:var(--nvb-input-focus-border-color, var(--nvb-color-primary-500));box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-button:hover:not(:disabled),.nvb-root .nvb-control__add-row-button:hover:not(:disabled){background:var(--nvb-button-hover-bg);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900);box-shadow:none}.nvb-root .nvb-button:disabled,.nvb-root .nvb-control__add-row-button:disabled{cursor:not-allowed;opacity:.5;box-shadow:none}.nvb-root .nvb-button--lg{min-height:var(--nvb-button-height-lg);padding:var(--nvb-button-padding-lg);font-size:var(--nvb-button-font-size-lg)}.nvb-root .nvb-button--ms,.nvb-root .nvb-button--md{min-height:var(--nvb-button-height-ms);padding:var(--nvb-button-padding-ms);font-size:var(--nvb-button-font-size-ms)}.nvb-root .nvb-button--sm{min-height:var(--nvb-button-height-sm);padding:var(--nvb-button-padding-sm);font-size:var(--nvb-button-font-size-sm)}.nvb-root .nvb-button--sx,.nvb-root .nvb-button--xs{min-height:var(--nvb-button-height-sx);padding:var(--nvb-button-padding-sx);font-size:var(--nvb-button-font-size-sx)}.nvb-root .nvb-button--left{justify-content:flex-start}.nvb-root .nvb-button--full{width:100%}.nvb-root .nvb-button--subtle{border-color:transparent;background:transparent;color:var(--nvb-color-neutral-700)}.nvb-root .nvb-button--subtle:hover:not(:disabled){border-color:transparent;background:color-mix(in oklab,var(--nvb-color-neutral-100) 72%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-900)}.nvb-root .nvb-button--neutral{background:var(--nvb-color-neutral-000)}.nvb-root .nvb-button--primary,.nvb-root .nvb-button--active{border-color:var(--nvb-color-primary-500);background:var(--nvb-button-primary-bg);color:var(--nvb-color-neutral-000);box-shadow:none}.nvb-root .nvb-button--primary-soft{border-color:transparent;background:color-mix(in oklab,var(--nvb-color-primary-050) 76%,var(--nvb-color-neutral-000));color:var(--nvb-color-primary-700)}.nvb-root .nvb-button--primary:hover:not(:disabled),.nvb-root .nvb-button--active:hover:not(:disabled){border-color:var(--nvb-color-primary-600);background:var(--nvb-button-primary-hover-bg);color:var(--nvb-color-neutral-000)}.nvb-root .nvb-button--primary-soft:hover:not(:disabled){border-color:var(--nvb-color-primary-500);background:color-mix(in oklab,var(--nvb-color-primary-050) 70%,var(--nvb-color-primary-100, var(--nvb-color-primary-050)));color:var(--nvb-color-primary-800)}.nvb-root .nvb-button--danger{border-color:var(--nvb-button-danger-border-color);background:var(--nvb-button-danger-bg);color:var(--nvb-button-danger-text-color)}.nvb-root .nvb-button--danger:hover:not(:disabled),.nvb-root .nvb-icon-button--danger:hover:not(:disabled){border-color:var(--nvb-color-risk-400);background:color-mix(in oklab,var(--nvb-color-risk-050) 70%,var(--nvb-color-risk-100, var(--nvb-color-risk-050)));color:var(--nvb-color-risk-800, var(--nvb-color-risk-700))}.nvb-root .nvb-button__icon,.nvb-root .nvb-control__add-row-button>.material-symbols-outlined{font-size:15px;line-height:1}.nvb-root .nvb-control__add-row-button{border-color:var(--nvb-control-button-border-color);background:var(--nvb-control-button-bg);color:var(--nvb-control-button-text-color);font-size:var(--nvb-control-font-size);height:var(--nvb-control-height);min-height:var(--nvb-control-height);padding:0 var(--nvb-control-padding-x)}.nvb-root .nvb-control__add-row-button:hover:not(:disabled){border-color:var(--nvb-control-button-hover-border-color);background:var(--nvb-control-button-hover-bg);color:var(--nvb-control-button-hover-text-color)}.nvb-root .nvb-control__add-row-button--compact{height:var(--nvb-control-height-sm);min-height:var(--nvb-control-height-sm);padding:0 10px;font-size:12px}.nvb-root .nvb-control__add-row-button--compact>.material-symbols-outlined{font-size:16px}.nvb-root .nvb-control__add-row-button--link{min-height:26px;padding:0;border-color:transparent;background:transparent;color:var(--nvb-color-primary-600);border-radius:var(--nvb-radius-md);font-size:14px;font-weight:600;justify-content:flex-start}.nvb-root .nvb-control__add-row-button--link:hover:not(:disabled){border-color:transparent;background:transparent;color:var(--nvb-color-primary-700)}.nvb-root .nvb-control__add-row-button--link.nvb-control__add-row-button--compact{padding:0 2px;font-size:12px}.nvb-root .nvb-control__add-row-button nvb-icon{width:16px;height:16px;display:inline-flex}.nvb-root .nvb-button__label{display:inline-flex;align-items:center;min-height:20px;line-height:20px;overflow:hidden;text-overflow:ellipsis}.nvb-root .nvb-icon-button{width:var(--nvb-button-height-ms);min-width:var(--nvb-button-height-ms);height:var(--nvb-button-height-ms);min-height:var(--nvb-button-height-ms);border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-control-radius);background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:background-color .16s ease,border-color .16s ease,color .16s ease,opacity .16s ease,box-shadow .16s ease;box-shadow:none}.nvb-root .nvb-icon-button:hover:not(:disabled){background:var(--nvb-color-neutral-050);border-color:var(--nvb-color-neutral-400);color:var(--nvb-color-neutral-900)}.nvb-root .nvb-icon-button:disabled{cursor:not-allowed;opacity:.5;box-shadow:none}.nvb-root .nvb-icon-button--lg{width:var(--nvb-button-height-lg);min-width:var(--nvb-button-height-lg);height:var(--nvb-button-height-lg);min-height:var(--nvb-button-height-lg)}.nvb-root .nvb-icon-button--sm{width:var(--nvb-button-height-sm);min-width:var(--nvb-button-height-sm);height:var(--nvb-button-height-sm);min-height:var(--nvb-button-height-sm)}.nvb-root .nvb-icon-button--sx,.nvb-root .nvb-icon-button--xs{width:var(--nvb-button-height-sx);min-width:var(--nvb-button-height-sx);height:var(--nvb-button-height-sx);min-height:var(--nvb-button-height-sx);border-radius:var(--nvb-radius-md)}.nvb-root .nvb-icon-button--danger{border-color:var(--nvb-button-danger-border-color);background:var(--nvb-button-danger-bg);color:var(--nvb-button-danger-text-color)}.nvb-root .nvb-icon-button--ghost{border-color:transparent;background:transparent}.nvb-root .nvb-icon-button--ghost:hover:not(:disabled){border-color:transparent;background:color-mix(in oklab,var(--nvb-color-neutral-100) 72%,var(--nvb-color-neutral-000));color:var(--nvb-color-neutral-800)}.nvb-root .nvb-icon-button--drag{cursor:grab}.nvb-root .nvb-icon-button--drag:active{cursor:grabbing;transform:scale(.98)}.nvb-root .nvb-icon-button span,.nvb-root .nvb-icon-button nvb-icon{font-size:18px;line-height:1}.nvb-root .nvb-control__add-row-button nvb-icon,.nvb-root .nvb-control__add-row-button .nvb-icon-svg{font-size:16px;line-height:1}.nvb-root .nvb-icon-button--sx span,.nvb-root .nvb-icon-button--sx nvb-icon,.nvb-root .nvb-icon-button--xs span,.nvb-root .nvb-icon-button--xs nvb-icon{font-size:15px}.nvb-root .nvb-search-field{position:relative}.nvb-root .nvb-search-field .nvb-search-field__icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);z-index:1;display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;color:var(--nvb-color-neutral-500);font-size:16px;line-height:1;pointer-events:none}.nvb-root .nvb-search-field .nvb-search-field__input{display:block;box-sizing:border-box;width:100%;height:32px;min-height:32px;padding:0 32px 0 36px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-input-radius, var(--nvb-radius-md));background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);font-size:12px;font-weight:400;line-height:20px;box-shadow:none;transition:border-color .12s ease,background-color .12s ease,box-shadow .12s ease}.nvb-root .nvb-search-field.nvb-search-field--no-icon .nvb-search-field__input{padding-left:12px}.nvb-root .nvb-search-field .nvb-search-field__input::placeholder{color:var(--nvb-color-neutral-400);font-weight:400}.nvb-root .nvb-search-field .nvb-search-field__input:focus,.nvb-root .nvb-search-field .nvb-search-field__input:focus-visible{outline:none;border-color:var(--nvb-color-primary-500);box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-search-field .nvb-search-field__clear{position:absolute;right:6px;top:50%;transform:translateY(-50%);z-index:2;color:var(--nvb-color-neutral-500)}}@layer fpUtilities{@layer fpUtilities{.nvb-root .nvb-hidden{display:none!important}.nvb-root .nvb-flex-center{display:flex;justify-content:center;align-items:center}.nvb-root .nvb-flex-left{display:flex;justify-content:flex-start;align-items:center}.nvb-root .nvb-flex-right{display:flex;justify-content:flex-end;align-items:center}.nvb-root .nvb-bg-primary-50{background-color:var(--nvb-color-primary-050)}.nvb-root .nvb-bg-primary-100{background-color:var(--nvb-color-primary-100)}.nvb-root .nvb-bg-primary-200{background-color:var(--nvb-color-primary-200)}.nvb-root .nvb-bg-primary-300{background-color:var(--nvb-color-primary-300)}.nvb-root .nvb-bg-primary-400{background-color:var(--nvb-color-primary-400)}.nvb-root .nvb-bg-primary-500{background-color:var(--nvb-color-primary-500)}.nvb-root .nvb-bg-primary-600{background-color:var(--nvb-color-primary-600)}.nvb-root .nvb-bg-primary-700{background-color:var(--nvb-color-primary-700)}.nvb-root .nvb-bg-primary-800{background-color:var(--nvb-color-primary-800)}.nvb-root .nvb-bg-primary-900{background-color:var(--nvb-color-primary-900)}.nvb-root .nvb-bg-primary-950{background-color:var(--nvb-color-primary-950)}.nvb-root .nvb-bg-neutral-000{background-color:var(--nvb-color-neutral-000)}.nvb-root .nvb-bg-neutral-050{background-color:var(--nvb-color-neutral-050)}.nvb-root .nvb-bg-neutral-100{background-color:var(--nvb-color-neutral-100)}.nvb-root .nvb-bg-neutral-200{background-color:var(--nvb-color-neutral-200)}.nvb-root .nvb-bg-neutral-300{background-color:var(--nvb-color-neutral-300)}.nvb-root .nvb-bg-neutral-400{background-color:var(--nvb-color-neutral-400)}.nvb-root .nvb-bg-neutral-500{background-color:var(--nvb-color-neutral-500)}.nvb-root .nvb-bg-neutral-600{background-color:var(--nvb-color-neutral-600)}.nvb-root .nvb-bg-neutral-700{background-color:var(--nvb-color-neutral-700)}.nvb-root .nvb-bg-neutral-800{background-color:var(--nvb-color-neutral-800)}.nvb-root .nvb-bg-neutral-900{background-color:var(--nvb-color-neutral-900)}.nvb-root .nvb-bg-neutral-950{background-color:var(--nvb-color-neutral-950)}.nvb-root .nvb-bg-risk-50{background-color:var(--nvb-color-risk-050)}.nvb-root .nvb-bg-risk-100{background-color:var(--nvb-color-risk-100)}.nvb-root .nvb-bg-risk-200{background-color:var(--nvb-color-risk-200)}.nvb-root .nvb-bg-risk-300{background-color:var(--nvb-color-risk-300)}.nvb-root .nvb-bg-risk-400{background-color:var(--nvb-color-risk-400)}.nvb-root .nvb-bg-risk-500{background-color:var(--nvb-color-risk-500)}.nvb-root .nvb-bg-risk-600{background-color:var(--nvb-color-risk-600)}.nvb-root .nvb-bg-risk-700{background-color:var(--nvb-color-risk-700)}.nvb-root .nvb-bg-risk-800{background-color:var(--nvb-color-risk-800)}.nvb-root .nvb-bg-risk-900{background-color:var(--nvb-color-risk-900)}.nvb-root .nvb-bg-risk-950{background-color:var(--nvb-color-risk-950)}.nvb-root .nvb-bg-warning-50{background-color:var(--nvb-color-warning-050)}.nvb-root .nvb-bg-warning-100{background-color:var(--nvb-color-warning-100)}.nvb-root .nvb-bg-warning-200{background-color:var(--nvb-color-warning-200)}.nvb-root .nvb-bg-warning-300{background-color:var(--nvb-color-warning-300)}.nvb-root .nvb-bg-warning-400{background-color:var(--nvb-color-warning-400)}.nvb-root .nvb-bg-warning-500{background-color:var(--nvb-color-warning-500)}.nvb-root .nvb-bg-warning-600{background-color:var(--nvb-color-warning-600)}.nvb-root .nvb-bg-warning-700{background-color:var(--nvb-color-warning-700)}.nvb-root .nvb-bg-warning-800{background-color:var(--nvb-color-warning-800)}.nvb-root .nvb-bg-warning-900{background-color:var(--nvb-color-warning-900)}.nvb-root .nvb-bg-warning-950{background-color:var(--nvb-color-warning-950)}.nvb-root .nvb-bg-success-50{background-color:var(--nvb-color-success-050)}.nvb-root .nvb-bg-success-100{background-color:var(--nvb-color-success-100)}.nvb-root .nvb-bg-success-200{background-color:var(--nvb-color-success-200)}.nvb-root .nvb-bg-success-300{background-color:var(--nvb-color-success-300)}.nvb-root .nvb-bg-success-400{background-color:var(--nvb-color-success-400)}.nvb-root .nvb-bg-success-500{background-color:var(--nvb-color-success-500)}.nvb-root .nvb-bg-success-600{background-color:var(--nvb-color-success-600)}.nvb-root .nvb-bg-success-700{background-color:var(--nvb-color-success-700)}.nvb-root .nvb-bg-success-800{background-color:var(--nvb-color-success-800)}.nvb-root .nvb-bg-success-900{background-color:var(--nvb-color-success-900)}.nvb-root .nvb-bg-success-950{background-color:var(--nvb-color-success-950)}.nvb-root .nvb-bg-info-50{background-color:var(--nvb-color-info-050)}.nvb-root .nvb-bg-info-100{background-color:var(--nvb-color-info-100)}.nvb-root .nvb-bg-info-200{background-color:var(--nvb-color-info-200)}.nvb-root .nvb-bg-info-300{background-color:var(--nvb-color-info-300)}.nvb-root .nvb-bg-info-400{background-color:var(--nvb-color-info-400)}.nvb-root .nvb-bg-info-500{background-color:var(--nvb-color-info-500)}.nvb-root .nvb-bg-info-600{background-color:var(--nvb-color-info-600)}.nvb-root .nvb-bg-info-700{background-color:var(--nvb-color-info-700)}.nvb-root .nvb-bg-info-800{background-color:var(--nvb-color-info-800)}.nvb-root .nvb-bg-info-900{background-color:var(--nvb-color-info-900)}.nvb-root .nvb-bg-info-950{background-color:var(--nvb-color-info-950)}.nvb-root .nvb-bg-text-000{background-color:var(--nvb-color-text-000)}.nvb-root .nvb-bg-text-050{background-color:var(--nvb-color-text-050)}.nvb-root .nvb-bg-text-100{background-color:var(--nvb-color-text-100)}.nvb-root .nvb-bg-text-200{background-color:var(--nvb-color-text-200)}.nvb-root .nvb-bg-text-300{background-color:var(--nvb-color-text-300)}.nvb-root .nvb-bg-text-400{background-color:var(--nvb-color-text-400)}.nvb-root .nvb-bg-text-500{background-color:var(--nvb-color-text-500)}.nvb-root .nvb-bg-text-600{background-color:var(--nvb-color-text-600)}.nvb-root .nvb-bg-text-700{background-color:var(--nvb-color-text-700)}.nvb-root .nvb-bg-text-800{background-color:var(--nvb-color-text-800)}.nvb-root .nvb-bg-text-900{background-color:var(--nvb-color-text-900)}.nvb-root .nvb-bg-text-950{background-color:var(--nvb-color-text-950)}.nvb-root .nvb-text-neutral-0{color:var(--nvb-color-neutral-000)}.nvb-root .nvb-text-neutral-50{color:var(--nvb-color-neutral-050)}.nvb-root .nvb-text-neutral-100{color:var(--nvb-color-neutral-100)}.nvb-root .nvb-text-neutral-200{color:var(--nvb-color-neutral-200)}.nvb-root .nvb-text-neutral-300{color:var(--nvb-color-neutral-300)}.nvb-root .nvb-text-neutral-400{color:var(--nvb-color-neutral-400)}.nvb-root .nvb-text-neutral-500{color:var(--nvb-color-neutral-500)}.nvb-root .nvb-text-neutral-600{color:var(--nvb-color-neutral-600)}.nvb-root .nvb-text-neutral-700{color:var(--nvb-color-neutral-700)}.nvb-root .nvb-text-neutral-800{color:var(--nvb-color-neutral-800)}.nvb-root .nvb-text-neutral-900{color:var(--nvb-color-neutral-900)}.nvb-root .nvb-text-neutral-950{color:var(--nvb-color-neutral-950)}.nvb-root .nvb-p-2{padding:var(--nvb-space-2)}.nvb-root .nvb-p-3{padding:var(--nvb-space-3)}}}@layer elements{.nvb-root{--nvb-control-height: 40px;--nvb-control-height-sm: 32px;--nvb-control-padding-x: 12px;--nvb-control-font-size: 14px;--nvb-control-font-weight: 400;--nvb-control-radius: var(--nvb-radius-md);--nvb-input-height: 40px;--nvb-input-padding-x: 12px;--nvb-input-font-size: 14px;--nvb-input-radius: var(--nvb-radius-md);--nvb-input-border-width: 1px;--nvb-input-border-color: var(--nvb-color-neutral-300);--nvb-input-bg: var(--nvb-color-neutral-000);--nvb-input-text-color: var(--nvb-color-neutral-800);--nvb-input-placeholder-color: var(--nvb-color-neutral-500);--nvb-input-focus-border-color: var(--nvb-color-primary-500);--nvb-input-disabled-bg: var(--nvb-color-neutral-100);--nvb-input-disabled-text-color: var(--nvb-color-neutral-500);--nvb-input-error-border-color: var(--nvb-color-risk-500);--nvb-input-error-focus-border-color: var(--nvb-color-risk-600);--nvb-textarea-min-height: 120px;--nvb-textarea-padding-x: 12px;--nvb-textarea-padding-y: 12px;--nvb-control-button-border-width: 1px;--nvb-control-button-border-color: var(--nvb-color-neutral-300);--nvb-control-button-bg: var(--nvb-color-neutral-000);--nvb-control-button-text-color: var(--nvb-color-primary-700);--nvb-control-button-hover-border-color: var(--nvb-color-primary-300);--nvb-control-button-hover-bg: color-mix( in oklab, var(--nvb-color-primary-050) 40%, var(--nvb-color-neutral-000) );--nvb-control-button-hover-text-color: var(--nvb-color-primary-800);--nvb-checkbox-size: 18px;--nvb-checkbox-border-width: 1.5px;--nvb-checkbox-radius: var(--nvb-radius-sm);--nvb-checkbox-border-color: var(--nvb-color-neutral-300);--nvb-checkbox-bg: var(--nvb-color-neutral-000);--nvb-checkbox-checked-bg: var(--nvb-color-primary-500);--nvb-checkbox-checked-border-color: var(--nvb-color-primary-500);--nvb-checkbox-check-color: var(--nvb-color-neutral-000);--nvb-checkbox-disabled-bg: var(--nvb-color-neutral-100);--nvb-checkbox-disabled-opacity: .5;--nvb-radio-size: 18px;--nvb-radio-border-width: 1.5px;--nvb-radio-border-color: var(--nvb-color-neutral-300);--nvb-radio-bg: var(--nvb-color-neutral-000);--nvb-radio-checked-border-color: var(--nvb-color-primary-500);--nvb-radio-dot-size: 8px;--nvb-radio-dot-color: var(--nvb-color-primary-500);--nvb-radio-disabled-bg: var(--nvb-color-neutral-100);--nvb-radio-disabled-opacity: .5;--nvb-focus-ring: 0 0 0 1px var(--nvb-color-neutral-000), 0 0 0 3px color-mix(in oklab, var(--nvb-color-primary-400) 55%, transparent);--nvb-font-family: var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif );font-family:var(--nvb-font-family);color:var(--nvb-color-text-800)}:where(.nvb-root input[type=text],.nvb-root input[type=number],.nvb-root input[type=email],.nvb-root input[type=search],.nvb-root input[type=tel],.nvb-root input[type=url],.nvb-root input[type=password],.nvb-root input[type=date],.nvb-root input[type=datetime-local],.nvb-root input[type=month],.nvb-root input[type=time],.nvb-root input[type=week],.nvb-root select,.nvb-root textarea){border:var(--nvb-input-border-width) solid var(--nvb-input-border-color);border-radius:var(--nvb-input-radius);background:var(--nvb-input-bg);color:var(--nvb-input-text-color);font-family:var(--nvb-font-family);font-size:var(--nvb-input-font-size);line-height:20px;box-shadow:none;transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}:where(.nvb-root input[type=text],.nvb-root input[type=number],.nvb-root input[type=email],.nvb-root input[type=search],.nvb-root input[type=tel],.nvb-root input[type=url],.nvb-root input[type=password],.nvb-root input[type=date],.nvb-root input[type=datetime-local],.nvb-root input[type=month],.nvb-root input[type=time],.nvb-root input[type=week],.nvb-root select){min-height:var(--nvb-input-height);padding:0 var(--nvb-input-padding-x)}:where(.nvb-root textarea){min-height:var(--nvb-textarea-min-height);padding:var(--nvb-textarea-padding-y) var(--nvb-textarea-padding-x);resize:vertical}:where(.nvb-root input[type=text]:focus,.nvb-root input[type=number]:focus,.nvb-root input[type=email]:focus,.nvb-root input[type=search]:focus,.nvb-root input[type=tel]:focus,.nvb-root input[type=url]:focus,.nvb-root input[type=password]:focus,.nvb-root input[type=date]:focus,.nvb-root input[type=datetime-local]:focus,.nvb-root input[type=month]:focus,.nvb-root input[type=time]:focus,.nvb-root input[type=week]:focus,.nvb-root select:focus,.nvb-root textarea:focus){border-color:var(--nvb-input-focus-border-color);box-shadow:var(--nvb-focus-ring);outline:0}:where(.nvb-root input::placeholder,.nvb-root textarea::placeholder){color:var(--nvb-input-placeholder-color);opacity:1}:where(.nvb-root input[type=text]:disabled,.nvb-root input[type=number]:disabled,.nvb-root input[type=email]:disabled,.nvb-root input[type=search]:disabled,.nvb-root input[type=tel]:disabled,.nvb-root input[type=url]:disabled,.nvb-root input[type=password]:disabled,.nvb-root input[type=date]:disabled,.nvb-root input[type=datetime-local]:disabled,.nvb-root input[type=month]:disabled,.nvb-root input[type=time]:disabled,.nvb-root input[type=week]:disabled,.nvb-root select:disabled,.nvb-root textarea:disabled){background-color:var(--nvb-input-disabled-bg);color:var(--nvb-input-disabled-text-color);cursor:not-allowed}.nvb-root [data-nvb-icon-rendered=true]{display:inline-flex;align-items:center;justify-content:center;line-height:1;vertical-align:middle}.nvb-root span[data-nvb-icon-rendered=true]{width:1em;height:1em;flex-shrink:0}.nvb-root [data-nvb-icon-rendered=true]>svg{width:1em;height:1em;display:block;fill:currentColor}.nvb-root .nvb-control__text-input,.nvb-root .nvb-control__attribute-input,.nvb-root .nvb-control__column-input{display:block;box-sizing:border-box;width:100%;min-height:var(--nvb-input-height);padding:0 var(--nvb-input-padding-x);font-size:var(--nvb-input-font-size);line-height:1.4;color:var(--nvb-input-text-color);border-radius:var(--nvb-input-radius);outline:none;font-family:var(--nvb-font-family);box-shadow:none;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease}.nvb-root .nvb-control__text-input,.nvb-root .nvb-control__attribute-input{border:var(--nvb-input-border-width) solid var(--nvb-input-border-color);background-color:var(--nvb-input-bg)}.nvb-root .nvb-control__column-input{border:var(--nvb-input-border-width) solid transparent;background-color:var(--nvb-input-bg)}.nvb-root .nvb-control__text-input:focus,.nvb-root .nvb-control__attribute-input:focus,.nvb-root .nvb-control__column-input:focus{border-color:var(--nvb-input-focus-border-color);box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-field--has-errors .nvb-control__text-input,.nvb-root .nvb-field--has-errors .nvb-control__attribute-input,.nvb-root .nvb-field--has-errors .nvb-control__column-input,.nvb-root .nvb-field--has-errors input[type=text],.nvb-root .nvb-field--has-errors input[type=number],.nvb-root .nvb-field--has-errors input[type=email],.nvb-root .nvb-field--has-errors input[type=search],.nvb-root .nvb-field--has-errors input[type=tel],.nvb-root .nvb-field--has-errors input[type=url],.nvb-root .nvb-field--has-errors input[type=password],.nvb-root .nvb-field--has-errors select,.nvb-root .nvb-field--has-errors textarea{border-color:var(--nvb-input-error-border-color)}.nvb-root .nvb-field--has-errors .nvb-control__text-input:focus,.nvb-root .nvb-field--has-errors .nvb-control__attribute-input:focus,.nvb-root .nvb-field--has-errors .nvb-control__column-input:focus,.nvb-root .nvb-field--has-errors input[type=text]:focus,.nvb-root .nvb-field--has-errors input[type=number]:focus,.nvb-root .nvb-field--has-errors input[type=email]:focus,.nvb-root .nvb-field--has-errors input[type=search]:focus,.nvb-root .nvb-field--has-errors input[type=tel]:focus,.nvb-root .nvb-field--has-errors input[type=url]:focus,.nvb-root .nvb-field--has-errors input[type=password]:focus,.nvb-root .nvb-field--has-errors select:focus,.nvb-root .nvb-field--has-errors textarea:focus{border-color:var(--nvb-input-error-focus-border-color)}.nvb-root .nvb-field--has-errors .nvb-control__checkbox-input,.nvb-root .nvb-field--has-errors .nvb-control__radio-input{border-color:var(--nvb-input-error-border-color)}.nvb-root .nvb-control__column-input:disabled{background-color:var(--nvb-input-disabled-bg);color:var(--nvb-input-disabled-text-color);cursor:not-allowed}.nvb-root :where(.nvb-page,.nvb-page__content,.nvb-panel,.nvb-panel__body,.nvb-panel__content,.nvb-row,.nvb-row-content,.nvb-column,.nvb-field,.nvb-field__content,select-element,multi-select-element,autocomplete-element,datepicker-element,date-range-element,phone-input-element,nvb-select):has(:where(.nvb-select-container--open,.nvb-multi-select-container--open,.nvb-autocomplete--open,.nvb-datepicker--open,.nvb-date-range--open,.nvb-select__control--open)){position:relative;z-index:var(--nvb-floating-overlay-container-z-index, 2147482990);overflow:visible}.nvb-root textarea.nvb-control__attribute-input,.nvb-root textarea.nvb-control__text-input,.nvb-root textarea.nvb-control__column-input{min-height:var(--nvb-textarea-min-height);padding:var(--nvb-textarea-padding-y) var(--nvb-textarea-padding-x);line-height:1.35}.nvb-root .nvb-control__checkbox-input{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:var(--nvb-checkbox-size);min-width:var(--nvb-checkbox-size);height:var(--nvb-checkbox-size);min-height:var(--nvb-checkbox-size);border:var(--nvb-checkbox-border-width) solid var(--nvb-checkbox-border-color);border-radius:var(--nvb-checkbox-radius);position:relative;display:inline-block;vertical-align:middle;background-color:var(--nvb-checkbox-bg);cursor:pointer;margin:0;padding:0;transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease}.nvb-root .nvb-control__checkbox-input:hover{border-color:var(--nvb-checkbox-checked-border-color)}.nvb-root .nvb-control__checkbox-input:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-control__checkbox-input:checked{background-color:var(--nvb-checkbox-checked-bg);border-color:var(--nvb-checkbox-checked-border-color)}.nvb-root .nvb-control__checkbox-input:checked:after{content:"";position:absolute;left:50%;top:45%;width:5px;height:8px;border:solid var(--nvb-checkbox-check-color);border-width:0 2px 2px 0;transform:translate(-50%,-50%) rotate(45deg);transform-origin:center}.nvb-root .nvb-control__checkbox-input:disabled{cursor:not-allowed;opacity:var(--nvb-checkbox-disabled-opacity);background-color:var(--nvb-checkbox-disabled-bg)}.nvb-root .nvb-control__radio-input{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:var(--nvb-radio-size);min-width:var(--nvb-radio-size);height:var(--nvb-radio-size);min-height:var(--nvb-radio-size);border:var(--nvb-radio-border-width) solid var(--nvb-radio-border-color);border-radius:50%;position:relative;display:inline-block;vertical-align:middle;background-color:var(--nvb-radio-bg);cursor:pointer;margin:0;padding:0;transition:border-color .14s ease,background-color .14s ease,box-shadow .14s ease}.nvb-root .nvb-control__radio-input:hover{border-color:var(--nvb-radio-checked-border-color)}.nvb-root .nvb-control__radio-input:focus-visible{outline:0;box-shadow:var(--nvb-focus-ring)}.nvb-root .nvb-control__radio-input:checked{border-color:var(--nvb-radio-checked-border-color)}.nvb-root .nvb-control__radio-input:checked:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:var(--nvb-radio-dot-size);height:var(--nvb-radio-dot-size);border-radius:50%;background-color:var(--nvb-radio-dot-color)}.nvb-root .nvb-control__radio-input:disabled{cursor:not-allowed;opacity:var(--nvb-radio-disabled-opacity);background-color:var(--nvb-radio-disabled-bg)}.nvb-root input[type=number]::-webkit-inner-spin-button,.nvb-root input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.nvb-root .nvb-select-button--buttons{display:inline-flex;flex-wrap:nowrap;align-items:stretch;width:fit-content;max-width:100%}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical{flex-direction:column}.nvb-root .nvb-select-button--buttons .nvb-select-button__option{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--nvb-control-height, 36px);padding:0 14px;border:1px solid var(--nvb-color-neutral-300);border-radius:0;background:var(--nvb-color-neutral-000);color:var(--nvb-color-neutral-800);font-size:14px;font-weight:500;font-family:inherit;line-height:1;white-space:nowrap;cursor:pointer;z-index:0;transition:background-color .12s ease,border-color .12s ease,color .12s ease}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option+.nvb-select-button__option{margin-left:-1px}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option+.nvb-select-button__option{margin-top:-1px}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:first-child{border-radius:var(--nvb-radius-md) 0 0 var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:last-child{border-radius:0 var(--nvb-radius-md) var(--nvb-radius-md) 0}.nvb-root .nvb-select-button--buttons.nvb-select-button--horizontal .nvb-select-button__option:first-child:last-child{border-radius:var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:first-child{border-radius:var(--nvb-radius-md) var(--nvb-radius-md) 0 0}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:last-child{border-radius:0 0 var(--nvb-radius-md) var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons.nvb-select-button--vertical .nvb-select-button__option:first-child:last-child{border-radius:var(--nvb-radius-md)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:hover:not(:disabled){background:color-mix(in oklab,var(--nvb-color-neutral-100) 80%,var(--nvb-color-neutral-000));border-color:var(--nvb-color-neutral-400);z-index:1}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:focus-visible{outline:0;z-index:2;box-shadow:var(--nvb-focus-ring, 0 0 0 3px color-mix(in oklab, var(--nvb-color-primary-500) 18%, transparent))}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-primary-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-primary-500);color:var(--nvb-color-primary-700);font-weight:600;z-index:1}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-neutral.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-neutral-700) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-neutral-500);color:var(--nvb-color-neutral-900)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-success.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-success-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-success-500);color:var(--nvb-color-success-700)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-warning.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-warning-500) 12%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-warning-500);color:var(--nvb-color-warning-800)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option--tone-risk.nvb-select-button__option--selected{background:color-mix(in oklab,var(--nvb-color-risk-500) 10%,var(--nvb-color-neutral-000, white));border-color:var(--nvb-color-risk-500);color:var(--nvb-color-risk-700)}.nvb-root .nvb-select-button--buttons .nvb-select-button__option:disabled,.nvb-root .nvb-select-button--buttons .nvb-select-button__option--disabled{opacity:.55;cursor:not-allowed}.nvb-root .nvb-select-button--buttons.nvb-select-button--size-small .nvb-select-button__option{height:var(--nvb-control-height-sm, 28px);padding:0 10px;font-size:13px}.nvb-root .nvb-select-button--buttons.nvb-select-button--size-large .nvb-select-button__option{height:44px;padding:0 18px;font-size:15px}.nvb-root .nvb-select-button--segmented{display:inline-flex;flex-wrap:nowrap;align-items:stretch;gap:2px;width:fit-content;max-width:100%;padding:3px;border-radius:var(--nvb-radius-full);background:color-mix(in oklab,var(--nvb-color-neutral-100) 85%,var(--nvb-color-neutral-000));border:1px solid color-mix(in oklab,var(--nvb-color-neutral-300) 55%,transparent)}.nvb-root .nvb-select-button--segmented.nvb-select-button--vertical{flex-direction:column;border-radius:14px}.nvb-root .nvb-select-button--segmented .nvb-select-button__option{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--nvb-control-height, 36px);padding:0 16px;border:0;border-radius:var(--nvb-radius-full);background:transparent;color:var(--nvb-color-neutral-600);font-size:14px;font-weight:500;font-family:inherit;cursor:pointer;transition:background-color .12s ease,color .12s ease,box-shadow .12s ease}.nvb-root .nvb-select-button--segmented.nvb-select-button--vertical .nvb-select-button__option{border-radius:11px}.nvb-root .nvb-select-button--segmented .nvb-select-button__option:hover:not(:disabled){background:color-mix(in oklab,var(--nvb-color-neutral-000) 60%,transparent);color:var(--nvb-color-neutral-800)}.nvb-root .nvb-select-button--segmented .nvb-select-button__option--selected{background:var(--nvb-color-neutral-000, #ffffff);color:var(--nvb-color-neutral-900);font-weight:600;box-shadow:0 1px 3px #0000001f,0 1px 2px #00000014}.nvb-root .nvb-select-button--segmented .nvb-select-button__option:disabled,.nvb-root .nvb-select-button--segmented .nvb-select-button__option--disabled{opacity:.55;cursor:not-allowed}.nvb-root .nvb-select-button--segmented.nvb-select-button--size-small .nvb-select-button__option{min-height:var(--nvb-control-height-sm, 28px);padding:0 12px;font-size:13px}.nvb-root .nvb-select-button--segmented.nvb-select-button--size-large .nvb-select-button__option{min-height:44px;padding:0 20px;font-size:15px}}:host{display:block;width:100%;height:100%;max-height:100%;min-height:0;isolation:isolate;overflow:hidden;font-family:var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif );color:var(--nvb-color-neutral-700);background:transparent;color-scheme:light}:host([data-theme="dark"]){color-scheme:dark}:host *{box-sizing:border-box}:host button:focus-visible,:host input:focus-visible,:host select:focus-visible,:host textarea:focus-visible{outline:2px solid var(--nvb-color-primary-500);outline-offset:1px}:host button,:host input,:host select,:host textarea{font-family:var( --nvb-font-family-base, "Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif )}:host(.nvb-theme-switching),:host(.nvb-theme-switching) *{transition:none!important;animation:none!important}.ngx-view-builder-renderer{width:100%;height:100%;min-height:0}.ngx-view-builder-renderer>runtime-preview{display:block;width:100%;height:100%;min-height:0}.nvb-runtime-pending{visibility:hidden}\n']}]}],ctorParameters:()=>[],propDecorators:{model:[{type:l.Input,args:[{isSignal:true,alias:"model",required:false}]}],pageJson:[{type:l.Input,args:[{isSignal:true,alias:"pageJson",required:false}]}],dataJson:[{type:l.Input,args:[{isSignal:true,alias:"dataJson",required:false}]}],language:[{type:l.Input,args:[{isSignal:true,alias:"language",required:false}]}],theme:[{type:l.Input,args:[{isSignal:true,alias:"theme",required:false}]}],uiDictionaries:[{type:l.Input,args:[{isSignal:true,alias:"uiDictionaries",required:false}]}],contentTranslations:[{type:l.Input,args:[{isSignal:true,alias:"contentTranslations",required:false}]}],cssVariables:[{type:l.Input,args:[{isSignal:true,alias:"cssVariables",required:false}]}],externalConfig:[{type:l.Input,args:[{isSignal:true,alias:"externalConfig",required:false}]}],externalConfigUrl:[{type:l.Input,args:[{isSignal:true,alias:"externalConfigUrl",required:false}]}],viewportSettings:[{type:l.Input,args:[{isSignal:true,alias:"viewportSettings",required:false}]}],runtimeSettings:[{type:l.Input,args:[{isSignal:true,alias:"runtimeSettings",required:false}]}],valueChanged:[{type:l.Output,args:["valueChanged"]}],structureChanged:[{type:l.Output,args:["structureChanged"]}],languageChanged:[{type:l.Output,args:["languageChanged"]}],tableSettingsChanged:[{type:l.Output,args:["tableSettingsChanged"]}],tableSettingsApplied:[{type:l.Output,args:["tableSettingsApplied"]}],tableSettingsRequested:[{type:l.Output,args:["tableSettingsRequested"]}],tableSettingsSaveRequested:[{type:l.Output,args:["tableSettingsSaveRequested"]}],tableFiltersChanged:[{type:l.Output,args:["tableFiltersChanged"]}],tableFiltersApplied:[{type:l.Output,args:["tableFiltersApplied"]}],tableSavedFiltersChanged:[{type:l.Output,args:["tableSavedFiltersChanged"]}],tableSavedFiltersRequested:[{type:l.Output,args:["tableSavedFiltersRequested"]}],tableSavedFilterSaveRequested:[{type:l.Output,args:["tableSavedFilterSaveRequested"]}]}});var qn=class Wt{http=g(zn);backendUrl=p("http://127.0.0.1:8010",...ngDevMode?[{debugName:"backendUrl"}]:[]);validatePath=p("/validate",...ngDevMode?[{debugName:"validatePath"}]:[]);appUrl=p(null,...ngDevMode?[{debugName:"appUrl"}]:[]);pageJson=p(null,...ngDevMode?[{debugName:"pageJson"}]:[]);dataJson=p(null,...ngDevMode?[{debugName:"dataJson"}]:[]);options=p(null,...ngDevMode?[{debugName:"options"}]:[]);waitMs=p(300,...ngDevMode?[{debugName:"waitMs"}]:[]);timeoutMs=p(45e3,...ngDevMode?[{debugName:"timeoutMs"}]:[]);headlessApiKey=p("__NGX_VIEW_BUILDER__",...ngDevMode?[{debugName:"headlessApiKey"}]:[]);sessionHeaderName=p("x-session-key",...ngDevMode?[{debugName:"sessionHeaderName"}]:[]);sessionKey=p(null,...ngDevMode?[{debugName:"sessionKey"}]:[]);requestHeaders=p(null,...ngDevMode?[{debugName:"requestHeaders"}]:[]);autoValidateOnInit=p(true,...ngDevMode?[{debugName:"autoValidateOnInit"}]:[]);autoValidateDelayMs=p(0,...ngDevMode?[{debugName:"autoValidateDelayMs"}]:[]);busy=h(false,...ngDevMode?[{debugName:"busy"}]:[]);lastResponse=h(null,...ngDevMode?[{debugName:"lastResponse"}]:[]);lastError=h(null,...ngDevMode?[{debugName:"lastError"}]:[]);validated=w();validationError=w();ngOnInit(){if(!this.autoValidateOnInit())return;const e=this.resolvePositiveInteger(this.autoValidateDelayMs(),0);if(e>0){setTimeout(()=>{this.runAutoValidation()},e);return}queueMicrotask(()=>{this.runAutoValidation()})}async validate(e){const t=this.resolveRequest(e);this.busy.set(true);this.lastError.set(null);try{const n=await et(this.http.post(t.url,t.body,{headers:t.headers}));const o=this.normalizeResponse(n);this.lastResponse.set(o);this.validated.emit(o);return o}catch(n){const o=this.normalizeError(n);this.lastError.set(o);this.validationError.emit(o);throw o}finally{this.busy.set(false)}}resolveRequest(e){const t={backendUrl:e?.backendUrl??this.backendUrl(),validatePath:e?.validatePath??this.validatePath(),appUrl:e?.appUrl??this.appUrl(),pageJson:e?.pageJson??this.pageJson(),dataJson:e?.dataJson??this.dataJson(),options:e?.options??this.options(),waitMs:e?.waitMs??this.waitMs(),timeoutMs:e?.timeoutMs??this.timeoutMs(),headlessApiKey:e?.headlessApiKey??this.headlessApiKey(),sessionHeaderName:e?.sessionHeaderName??this.sessionHeaderName(),sessionKey:e?.sessionKey??this.sessionKey(),requestHeaders:e?.requestHeaders??this.requestHeaders(),autoValidateOnInit:e?.autoValidateOnInit??this.autoValidateOnInit(),autoValidateDelayMs:e?.autoValidateDelayMs??this.autoValidateDelayMs()};if(t.pageJson===null||t.pageJson===void 0)throw{status:0,message:"pageJson is required. Provide [pageJson] input or pass it to validate({ pageJson })."};const n={pageJson:t.pageJson,dataJson:t.dataJson??{}};const o=this.normalizeString(t.appUrl);if(o)n["appUrl"]=o;const i=t.options&&typeof t.options==="object"?this.cloneData(t.options):null;if(i&&Object.keys(i).length>0)n["options"]=i;n["waitMs"]=this.resolvePositiveInteger(t.waitMs,0);n["timeoutMs"]=this.resolvePositiveInteger(t.timeoutMs,45e3);const r=this.normalizeString(t.headlessApiKey);if(r)n["headlessApiKey"]=r;const a=this.resolveSessionHeaderName(t.sessionHeaderName);const c=this.normalizeString(t.sessionKey);if(a&&c)n["sessionHeaderName"]=a;const b=this.buildHeaders(t.requestHeaders,a,c);return{url:this.resolveValidateUrl(t.backendUrl,t.validatePath),body:n,headers:b}}resolveValidateUrl(e,t){const n=this.normalizeString(t);if(/^https?:\/\//i.test(n))return n.replace(/\/+$/,"");return`${this.normalizeUrl(e)||"http://127.0.0.1:8010"}${n?n.startsWith("/")?n:`/${n}`:"/validate"}`}buildHeaders(e,t,n){let o=new bl;Object.entries(e??{}).forEach(([i,r])=>{const a=this.normalizeString(i);if(!a)return;o=o.set(a,String(r??""))});if(n)o=o.set(t,n);return o}resolveSessionHeaderName(e){return this.normalizeString(e)}resolvePositiveInteger(e,t){const n=Number(e);if(!Number.isFinite(n))return t;if(n<0)return t;return Math.floor(n)}normalizeResponse(e){const t=Array.isArray(e?.issues)?e.issues.filter(n=>Boolean(n&&typeof n==="object")):[];return{ok:Boolean(e?.ok),isValid:Boolean(e?.isValid),issues:t,result:e?.result&&typeof e.result==="object"?this.cloneData(e.result):void 0}}normalizeError(e){if(e&&typeof e==="object"&&"status"in e&&"message"in e)return e;if(e instanceof cl){const t=e.error;const n=typeof t==="string"?t:typeof t?.error==="string"?t.error:"";return{status:Number(e.status||0),message:n||e.message||"Validation request failed.",responseBody:t}}if(e instanceof Error)return{status:0,message:e.message};return{status:0,message:"Validation request failed."}}normalizeUrl(e){return this.normalizeString(e).replace(/\/+$/,"")}normalizeString(e){return String(e??"").trim()}cloneData(e){if(e===null||e===void 0||typeof e!=="object")return e;try{if(typeof structuredClone==="function")return structuredClone(e)}catch{}return JSON.parse(JSON.stringify(e))}async runAutoValidation(){try{await this.validate()}catch{return}}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Wt,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.1.0",version:"22.2.1",type:Wt,isStandalone:true,selector:"ngx-view-builder-validator",inputs:{backendUrl:{classPropertyName:"backendUrl",publicName:"backendUrl",isSignal:true,isRequired:false,transformFunction:null},validatePath:{classPropertyName:"validatePath",publicName:"validatePath",isSignal:true,isRequired:false,transformFunction:null},appUrl:{classPropertyName:"appUrl",publicName:"appUrl",isSignal:true,isRequired:false,transformFunction:null},pageJson:{classPropertyName:"pageJson",publicName:"pageJson",isSignal:true,isRequired:false,transformFunction:null},dataJson:{classPropertyName:"dataJson",publicName:"dataJson",isSignal:true,isRequired:false,transformFunction:null},options:{classPropertyName:"options",publicName:"options",isSignal:true,isRequired:false,transformFunction:null},waitMs:{classPropertyName:"waitMs",publicName:"waitMs",isSignal:true,isRequired:false,transformFunction:null},timeoutMs:{classPropertyName:"timeoutMs",publicName:"timeoutMs",isSignal:true,isRequired:false,transformFunction:null},headlessApiKey:{classPropertyName:"headlessApiKey",publicName:"headlessApiKey",isSignal:true,isRequired:false,transformFunction:null},sessionHeaderName:{classPropertyName:"sessionHeaderName",publicName:"sessionHeaderName",isSignal:true,isRequired:false,transformFunction:null},sessionKey:{classPropertyName:"sessionKey",publicName:"sessionKey",isSignal:true,isRequired:false,transformFunction:null},requestHeaders:{classPropertyName:"requestHeaders",publicName:"requestHeaders",isSignal:true,isRequired:false,transformFunction:null},autoValidateOnInit:{classPropertyName:"autoValidateOnInit",publicName:"autoValidateOnInit",isSignal:true,isRequired:false,transformFunction:null},autoValidateDelayMs:{classPropertyName:"autoValidateDelayMs",publicName:"autoValidateDelayMs",isSignal:true,isRequired:false,transformFunction:null}},outputs:{validated:"validated",validationError:"validationError"},ngImport:l,template:"",styles:[""],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:qn,decorators:[{type:A,args:[{selector:"ngx-view-builder-validator",changeDetection:E.OnPush,template:""}]}],propDecorators:{backendUrl:[{type:l.Input,args:[{isSignal:true,alias:"backendUrl",required:false}]}],validatePath:[{type:l.Input,args:[{isSignal:true,alias:"validatePath",required:false}]}],appUrl:[{type:l.Input,args:[{isSignal:true,alias:"appUrl",required:false}]}],pageJson:[{type:l.Input,args:[{isSignal:true,alias:"pageJson",required:false}]}],dataJson:[{type:l.Input,args:[{isSignal:true,alias:"dataJson",required:false}]}],options:[{type:l.Input,args:[{isSignal:true,alias:"options",required:false}]}],waitMs:[{type:l.Input,args:[{isSignal:true,alias:"waitMs",required:false}]}],timeoutMs:[{type:l.Input,args:[{isSignal:true,alias:"timeoutMs",required:false}]}],headlessApiKey:[{type:l.Input,args:[{isSignal:true,alias:"headlessApiKey",required:false}]}],sessionHeaderName:[{type:l.Input,args:[{isSignal:true,alias:"sessionHeaderName",required:false}]}],sessionKey:[{type:l.Input,args:[{isSignal:true,alias:"sessionKey",required:false}]}],requestHeaders:[{type:l.Input,args:[{isSignal:true,alias:"requestHeaders",required:false}]}],autoValidateOnInit:[{type:l.Input,args:[{isSignal:true,alias:"autoValidateOnInit",required:false}]}],autoValidateDelayMs:[{type:l.Input,args:[{isSignal:true,alias:"autoValidateDelayMs",required:false}]}],validated:[{type:l.Output,args:["validated"]}],validationError:[{type:l.Output,args:["validationError"]}]}});var jn=class extends de{rowColumn=[];onRowColumnValueChange=new ol;constructor(s){super();if(s)Object.assign(this,s)}};vl([ur()],jn.prototype,"onRowColumnValueChange",void 0);var ml=class extends de{rowIndex;parent;column;constructor(s){super();if(s)Object.assign(this,s)}};var hl=class extends de{items=[{label:"Tab 1",value:"Tab 1 content"},{label:"Tab 2",value:"Tab 2 content"}];activeIndex=0;fullWidthTabs=false;lazyContent=true;constructor(s){super();if(s)Object.assign(this,s);if(!Array.isArray(this.items))this.items=[];const e=Number(this.activeIndex);this.activeIndex=Number.isFinite(e)&&e>=0?Math.floor(e):0;this.fullWidthTabs=Boolean(this.fullWidthTabs);this.lazyContent=Boolean(this.lazyContent)}};const fl="__NGX_VIEW_BUILDER__";var at=class Gt{ngxViewBuilderApiService=g(P);registerGlobalApi(e){const t=this.resolveGlobalHost();if(!t)return false;const n=this.resolveGlobalKey(e);const o=t[n];if(!e?.replaceExisting&&o&&typeof o==="object")return false;t[n]={validateData:async i=>{const r=i??{};return await this.ngxViewBuilderApiService.validateData(r.formJson,r.dataJson,{emitValidationEvent:false,...r.options??{}})},ping:()=>"ok"};return true}unregisterGlobalApi(e){const t=this.resolveGlobalHost();if(!t)return false;const n=this.resolveGlobalKey(e);if(!(n in t))return false;delete t[n];return true}getGlobalApi(e){const t=this.resolveGlobalHost();if(!t)return null;const n=t[this.resolveGlobalKey(e)];if(!n||typeof n!=="object")return null;return n}resolveGlobalKey(e){return String(e?.globalKey??"").trim()||fl}resolveGlobalHost(){if(typeof globalThis==="undefined")return null;return globalThis}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Gt,deps:[],target:l.ɵɵFactoryTarget.Injectable});static ɵprov=l.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Gt,providedIn:"root"})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:at,decorators:[{type:q,args:[{providedIn:"root"}]}]});var lt=class Yt{injector=g(il);runtimeServicesPreloaded=false;load(e){if(e?.preloadRuntimeServices)this.preloadRuntimeServices();if(e?.exposeHeadlessValidationApi)this.injector.get(at).registerGlobalApi({globalKey:e.headlessValidationApiKey,replaceExisting:true})}preloadRuntimeServices(){if(this.runtimeServicesPreloaded)return;this.injector.get(j);this.injector.get(pe);this.injector.get(te);this.injector.get(P);this.runtimeServicesPreloaded=true}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Yt,deps:[],target:l.ɵɵFactoryTarget.Injectable});static ɵprov=l.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Yt,providedIn:"root"})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:lt,decorators:[{type:q,args:[{providedIn:"root"}]}]});function wl(s){return _e([{provide:nl,multi:true,useValue:()=>{g(lt).load(s)}}])}function yl(s){return _e([{provide:el,multi:true,deps:[P],useFactory:e=>{return async()=>{const t=typeof s==="function"?await s():s;await e.registerExtensionsAsync(t)}}}])}function Hn(s){return _e((Array.isArray(s)?s:[s]).filter(e=>Boolean(e)).map(e=>({provide:sn,multi:true,useValue:e})))}function xl(...s){return Hn(s)}const kl=1;const Sl=1;const $n="templates";const st=["panel","objectPanel","dialog","splitter","dynamicPanel","emptyBlock","messageCard","statsCard","listGrid"];const ct=["tabs","tabsPro","accordion","progressFlow"];const Re=["required","minlength","maxlength","min","max","pattern","email","strictoptions","custom"];const Ee=["navigate","dataSource","toast","dialog","setValue","setElementProperty","transitionProcess","setProcessState","refreshRuntimeVariables"];const Ae=["navigate","dataSource","sendMessage","setValue","setOptions","reloadElements","toast","dialog","validate","submit"];var bt=class be{ngxViewBuilderApiService=g(P);elementFocusService=g(ie);eventService=g(L);selection=null;trackSelection=this.eventService.onElementFocus.add(e=>{const t=e?.payload;const n=String(t?.["name"]??"").trim();if(!t||!n||String(t["propertyType"]??"")==="tableColumn"){this.selection=null;return}const o=String(t["schemaPath"]??"").trim();const i=o?o.replace(/\.template\./g,"."):n;const r=String(t["label"]??"").trim();this.selection={name:n,path:i,type:String(t["type"]??""),...r&&r!==n?{label:r}:{}}});templateEngineService=g(Le);featurePackRegistry=g(hn);aiBuildRevealService=g(Cn);lastGroupedBatch=null;armed=false;actionOps=null;auditLog=[];pendingTemplateNotifications=new Map;static AUDIT_LIMIT=200;isAvailable(){return this.armed&&this.ngxViewBuilderApiService.isBuilderAttached()}getStructure(){if(!this.isAvailable())return null;return this.ngxViewBuilderApiService.getStructure()}getData(){if(!this.isAvailable())return{};return this.ngxViewBuilderApiService.getData()}getElement(e){const t=this.getStructure();return t?this.resolveRef(t,e)?.element??null:null}getElementProperty(e,t){const n=this.getElement(e);return n?n[String(t??"").trim()]:void 0}getTree(){const e=this.getStructure();if(!e)return null;return this.buildTree(e)}describeElementTypes(e){const t=this.ngxViewBuilderApiService.getBuilderAdapter();if(!t)return[];const n=String(e??"").trim();return(t.getRegisteredElements()??[]).filter(o=>!n||String(o?.type??"")===n).map(o=>{const i=String(o?.type??"");return{type:i,label:String(o?.label??i),group:String(o?.groupCode??"")||void 0,container:this.resolveContainerKind(i),properties:this.describeProperties(t.getElementProperties(i))}})}describeTemplates(e){const t=$n;const n=this.featurePackRegistry.hasCapability(t);const o={available:n,capability:t,hosts:this.describeTemplateHosts(),templates:[]};if(!n)o.reason="The templates feature pack is not registered, so template reference properties are hidden. Build with registered element types instead, or ask the host to add provideNgxViewBuilderTemplates().";const i=this.getStructure();if(!i)return o;const r=String(e??"").trim();o.templates=this.templateEngineService.getTemplates(i).filter(a=>!r||String(a?.name??"").trim()===r).map(a=>this.describeTemplate(a));return o}getSystemInstructions(){const e=this.help();const t=this.describeTemplates();const n=["You are driving a live ngx-view-builder instance through its AI API.",`You reach it over MCP, one tool per method, against a paired builder session (contract version ${e.version}).`,"","This is not a code generator. Commands you send change the view on screen immediately,","so build by calling execute(), never by printing JSON and asking someone to paste it.","","Working order:","1. available() tells you whether the builder is on screen. Everything else is closed when it is false.","2. getTree() for the current layout, describeElementTypes() for the types and their properties.","3. execute(commands, { dryRun: true }) to check a batch, then execute(commands) to apply it."," An array of commands is atomic: if one fails, none of them apply.","4. Saving is the user's call. Build the view, then stop.","","Rules:",...e.guidelines.map(o=>`- ${o}`),"",`Capabilities in this builder: ${e.capabilities.length>0?e.capabilities.join(", "):"none"}.`];if(t.available){const o=t.templates.map(i=>i.name);n.push("The templates feature pack is active, so the template library is the right place for repeated card markup.",`Templates on hand: ${o.length>0?o.join(", "):"none yet"}.`,"Reuse one by name when it matches. Create a missing one with upsertTemplate, then bind it with useTemplate.")}else n.push("The templates feature pack is not active. Do not write template references: build from element types.");n.push("",`Commands: ${e.commands.map(o=>o.op).join(", ")}.`);return n.join("\n")}help(){const e=this.isAvailable();return{version:1,available:e,reason:e?void 0:"The builder is not on screen. This API only runs while <ngx-view-builder-designer> is mounted.",methods:["available()","help()","getSystemInstructions()","describeElementTypes(type?)","describeTemplates(name?)","getTree()","getStructure()","getElement(name)","getElementProperty(name, propertyKey)","getData()","getAuditLog()","execute(commands, options?)"],notes:["execute() takes one command or an array. An array is atomic: one failing command applies none of them.","Mutation commands are folded into a draft first, then committed in a single structure update. Action commands (switchTab, focusElement, setData, validate) run after the commit, in order.","options.dryRun runs every check and reports what would change without committing.","options.group names one build that spans several batches. Consecutive batches with the same group, with no edit by the person in between, fold into one undo step.","Pass `name` on addElement to make the command idempotent, so a retry does not create a second element.","parent is a container element name. Leave it out to place at page level. Tab style containers also need `tab`.","Each added element gets its own row unless the target names an existing `row`, which is how two fields end up side by side. Use getTree() row indexes or addRow first.","Call describeElementTypes() before writing properties. Unknown property keys are reported as warnings, not errors.","Saving is deliberately not part of this API. Commit the view yourself once you are happy with it."],guidelines:["Build from the registered element types first. Call describeElementTypes() and pick the type that already does the job, rather than assembling the same thing out of markup.",'A table column that shows a status, a badge, a toggle or a checkbox is a hosted element: set the column `type` to "element" and its `elementType` to the element that renders it, such as "badge". Reach for a column template only when no element covers it, or when the user asks for custom markup.',"customHtml and template markup are the last resort, not the first. They carry no options, no validation and no events, so anything built from them has to be rebuilt by hand later.",'When the templates capability is present and the user names a card ("a person card"), call describeTemplates() first. Reuse the template that already carries that name instead of creating a second one under a near identical name.',"Create a missing template with upsertTemplate and bind it with useTemplate. useTemplate resolves the right reference property for the element type, so do not set `cardTemplateName` and friends by hand.","Templates hold presentation. Data still comes from the element and its data source, so map slots through the template field map rather than baking values into the markup.",'A "button" carries its caption in `text` and has no field label: set `label` to "" so no label row is drawn above it (with `text` empty the button falls back to showing the label). A solid button on a dark fill, which is the default "primary" tone and also "success", "info" and "risk" or any dark `color`, gets light text: set `textColor` to "var(--nvb-color-neutral-000)". Host stylesheets can otherwise leave the caption dark on the dark fill.','Every visible word belongs to one property. Input fields carry their caption in `label`, written for people ("Company code", never a technical name). Elements that show their own text have no label row: `label` is "" on buttons (caption in `text`), badges (`text`), statsCard (`title`, `valueText`), messageCard (`title`, `descriptionText`), pageTitle (`title`, `subtitle`), image (`alt`, `caption`), chart, divider, spacer, emptyBlock, customHtml and richTextViewer. A singleCheckbox puts its statement in `checkboxLabel`.','Layout like a designer: related short fields side by side in one row with `mobileWidth: "100%"` so they stack on a phone. Elements in one row need no `width`: without one they share the row evenly and stretch with it; `width: "50%"` adds nothing and makes the second one wrap, because % ignores the gap. Only an uneven split gets a width, on one element; button bars and alignment in an `emptyBlock` grid; one primary button per area, secondary ones `outline`/`neutral`; theme colors as `var(--nvb-color-...)` with text that contrasts with its fill. Names are meaningful camelCase data keys, never `el1`. Live logic sets `logicExecutionMode: "onChange"`. Dashboards set `showValidateButton` and `showSubmitButton` to false.',"The person is at the builder and can answer. When you are genuinely unsure about something that changes what they get (which control for a choice: radio, select, selectButton or autocomplete; which kind of table; one page or steps; what is required; what happens on submit; where options or data come from), ask before building that part: one short message with every open question, concrete options and your recommendation. Decide small, reversible details yourself (label wording, layout, tones, names) and name those choices in your summary.",'A "table" starts basic unless the person asked for more: columns, paging and quick search. Detailed search and export default to on, so set `showDetailedSearch` and `showExport` to false; add detailed search, export, column settings, saved filters, selection, expandable rows or inline editing only on request (suggest them instead). Row actions go in the three-dots menu, `rowActionsDisplayMode: "dropdown"`, unless separate buttons are explicitly asked for, with `showActionsHeaderLabel: false`. When the person does not say how a record opens, it opens from one "Preview" action in that menu, not from a row click; when they do say, build it their way.','A "table" gets a row of its own at full width. Below a 768px container it switches to stacked mobile cards, so it must never land in mobile view on a desktop page: do not put it beside another element, inside a narrow column, a side panel or a small dialog, and do not give it a `width`. Leave `responsiveMode` on "auto" so it stacks only on a real phone; "stack" forces cards everywhere and is only for an explicit request.','Build a new view the way a person would watch it come together: section by section, top to bottom. Up to about eight elements go in one execute() batch; anything larger is sent as a few batches, one per section (header and first fields, each further group of fields, then the buttons), each sent as soon as it is ready. Give every batch of that build the same `group` option (e.g. "build-contact-form"), so undo still takes the whole build back in one step. The person sees the first section appear right away instead of waiting for the whole form. A change to an existing view stays one batch.',"When a group of fields should answer as one object (an address, a contact), put them in an \"objectPanel\" (addElement with parent set to the panel). Its children are defined in the panel's own template, so their names only have to be unique inside that panel: a billing and a shipping panel can both have \"city\". Every element inside it stores its value at \"<objectPanel>.<element>\", so the data is { address: { city, street } }, expressions refer to {address.city}, and inside the panel {panel.city} means the sibling.",'A child of a "dynamicPanel" or "objectPanel" is addressed by its dotted path from the top, which getTree() shows as "path": "billing.city", "customer.address.city". Use that path as `name` in getElement, updateElement, deleteElement, moveElement, renameElement, duplicateElement and useTemplate, and as `parent` to place elements inside it. A bare name works when only one panel has it.'],capabilities:this.resolveCapabilities(),featurePacks:this.describeFeaturePacks(),tabs:Object.values(D),commands:this.describeCommands()}}resolveCapabilities(){const e=new Set;this.featurePackRegistry.featurePacks().forEach(t=>{(t?.capabilities??[]).forEach(n=>{const o=String(n??"").trim();if(o)e.add(o)})});return Array.from(e).sort((t,n)=>t.localeCompare(n))}describeFeaturePacks(){return this.featurePackRegistry.featurePacks().map(e=>({id:String(e?.id??""),title:String(e?.title??""),capabilities:[...e?.capabilities??[]].map(t=>String(t??""))}))}describeTemplate(e){const t=String(e?.content??"");const n={name:String(e?.name??"").trim(),slots:this.templateEngineService.extractTemplateFieldSlots(t),hasCss:String(e?.css??"").trim().length>0,contentPreview:t.length>240?`${t.slice(0,240)}...`:t};const o=String(e?.title??"").trim();if(o)n.title=o;const i=String(e?.description??"").trim();if(i)n.description=i;return n}describeTemplateHosts(){const e=[];this.describeElementTypes().forEach(t=>{t.properties.filter(n=>n.type==="templateName").forEach(n=>{e.push({type:t.type,property:n.key,fieldMap:this.resolveTemplateFieldMapKey(n.key)})})});return e}resolveTemplateFieldMapKey(e){const t=String(e??"").trim();if(!t)return"templateFieldMap";if(t.endsWith("Name"))return`${t.slice(0,-4)}FieldMap`;return`${t}FieldMap`}async execute(e,t){const n=await this.executeInternal(e,t);this.recordAudit(e,n);return n}getAuditLog(){return this.auditLog.map(e=>({...e,changed:[...e.changed]}))}recordAudit(e,t){const n=Array.isArray(e)?e:[e];this.auditLog.push({timestamp:Date.now(),ops:n.map(o=>String(o?.op??"")),ok:t.ok,dryRun:t.dryRun,applied:t.applied,changed:[...t.changed],errorCount:t.errors.length,warningCount:t.warnings.length});if(this.auditLog.length>be.AUDIT_LIMIT)this.auditLog.splice(0,this.auditLog.length-be.AUDIT_LIMIT)}async executeInternal(e,t){const n=Boolean(t?.dryRun);this.pendingTemplateNotifications.clear();const o={ok:false,version:1,dryRun:n,applied:0,changed:[],errors:[],warnings:[]};if(!this.isAvailable()){o.errors.push({index:0,code:"apiClosed",message:"The builder is not on screen, so the AI API is closed.",hint:"Ask the user to open the builder. The API is live only while <ngx-view-builder-designer> is on screen with settings.mcp configured."});return o}const i=Array.isArray(e)?e:[e];if(i.length===0){o.ok=true;return o}const r=this.ngxViewBuilderApiService.getStructure();if(!r){o.errors.push({index:0,code:"noStructure",message:"No structure is loaded in the builder."});return o}const a=this.clone(r);const c=new Set;const b=[];let v=0;i.forEach((d,u)=>{if(o.errors.length>0)return;const m=String(d?.op??"").trim();if(!m){o.errors.push({index:u,code:"badCommand",message:"Command is missing an `op` field.",hint:"Call help() for the list of operations."});return}if(this.isActionOp(m)){b.push({index:u,command:d});return}if(this.applyMutation(a,d,u,o,c))v+=1});if(o.errors.length>0)return o;if(v>0)Kr(a);o.changed=[...c];if(!n&&v>0){const d=this.ngxViewBuilderApiService.getBuilderAdapter();const u=String(t?.group??"").trim();const m=!!u&&this.lastGroupedBatch?.group===u&&this.lastGroupedBatch.marker!==null&&this.lastGroupedBatch.marker===(d?.historyMarker?.()??null);if(!m)d?.captureHistoryCheckpoint();const f=this.collectAddedElementNames(r,a);this.ngxViewBuilderApiService.setStructure(a);this.flushTemplateNotifications();d?.captureHistoryCheckpoint(m?{replaceLast:true}:void 0);this.lastGroupedBatch=u?{group:u,marker:d?.historyMarker?.()??null}:null;this.aiBuildRevealService.play(f)}this.pendingTemplateNotifications.clear();o.applied=n?0:v;for(const d of b){await this.runAction(d.command,d.index,o,n);if(o.errors.length>0)return o}o.ok=true;if(t?.returnStructure)o.structure=this.ngxViewBuilderApiService.getStructure()??a;if(t?.returnTree)o.tree=this.buildTree(n?a:this.ngxViewBuilderApiService.getStructure()??a);return o}collectAddedElementNames(e,t){const n=new Set([...Object.keys(e?.elements??{}),...this.collectLaidOutElementNames(e)]);return this.collectLaidOutElementNames(t).filter(o=>!n.has(o))}collectLaidOutElementNames(e){const t=[];const n=new Set;const o=i=>{(Array.isArray(i)?i:[]).forEach(r=>{const a=r?.columns;(Array.isArray(a)?a:[]).forEach(c=>{const b=c;const v=String(b?.elementRef??"");if(v&&!n.has(v)){n.add(v);t.push(v)}o(b?.rows);if(b?.tabRows&&typeof b.tabRows==="object")Object.values(b.tabRows).forEach(o)})})};(e?.pages??[]).forEach(i=>o(i?.rows));return t}arm(){this.armed=true}disarm(){this.armed=false}async invoke(e,t){const n=this.createSurface();const o=n[e];if(typeof o!=="function")throw new Error(`Unknown AI API method '${e}'. Known methods: ${Object.keys(n).filter(i=>typeof n[i]==="function").join(", ")}.`);return await o(...t)}createSurface(){return{version:1,available:()=>this.isAvailable(),help:()=>this.help(),getSystemInstructions:()=>this.getSystemInstructions(),describeElementTypes:e=>this.describeElementTypes(e),describeTemplates:e=>this.describeTemplates(e),getTree:()=>this.getTree(),getStructure:()=>this.getStructure(),getElement:e=>this.getElement(e),getElementProperty:(e,t)=>this.getElementProperty(e,t),getData:()=>this.getData(),getSelection:()=>this.selection,getAuditLog:()=>this.getAuditLog(),execute:(e,t)=>this.execute(e,t)}}applyMutation(e,t,n,o,i){const r=t;const a=String(r["op"]??"");switch(a){case"addElement":return this.opAddElement(e,r,n,o,i);case"insertJson":return this.opInsertJson(e,r,n,o,i);case"upsertTemplate":return this.opUpsertTemplate(e,r,n,o);case"useTemplate":return this.opUseTemplate(e,r,n,o,i);case"updateElement":return this.opUpdateElement(e,r,n,o,i);case"deleteElement":return this.opDeleteElement(e,r,n,o,i);case"moveElement":return this.opMoveElement(e,r,n,o,i);case"renameElement":return this.opRenameElement(e,r,n,o,i);case"duplicateElement":return this.opDuplicateElement(e,r,n,o,i);case"addRow":return this.opAddRow(e,r,n,o,i);case"deleteRow":return this.opDeleteRow(e,r,n,o,i);case"updatePage":return this.opUpdatePage(e,r,n,o,i);case"upsertFragment":return this.opUpsertSettingsEntry(e,r,n,o,i,{op:a,collection:"fragments",payloadKey:"fragment",idKey:"id"});case"deleteFragment":return this.opDeleteSettingsEntry(e,r,n,o,i,{op:a,collection:"fragments",idKey:"id"});case"setProcess":return this.opSetProcess(e,r,i);case"addPage":return this.opAddPage(e,r,n,o,i);case"deletePage":return this.opDeletePage(e,r,n,o,i);case"renamePage":return this.opRenamePage(e,r,n,o,i);case"setSettings":return this.opSetSettings(e,r,i);case"setHeader":return this.opSetHeader(e,r,i);case"upsertDataSource":return this.opUpsertDataSource(e,r,n,o,i);case"deleteDataSource":return this.opDeleteDataSource(e,r,n,o,i);case"upsertVariable":return this.opUpsertSettingsEntry(e,r,n,o,i,{op:a,collection:"variables",payloadKey:"variable",idKey:"name"});case"deleteVariable":return this.opDeleteSettingsEntry(e,r,n,o,i,{op:a,collection:"variables",idKey:"name"});case"upsertTrigger":return this.opUpsertSettingsEntry(e,r,n,o,i,{op:a,collection:"triggers",payloadKey:"trigger",idKey:"id"});case"deleteTrigger":return this.opDeleteSettingsEntry(e,r,n,o,i,{op:a,collection:"triggers",idKey:"id"});case"upsertRule":return this.opUpsertSettingsEntry(e,r,n,o,i,{op:a,collection:"rules",payloadKey:"rule",idKey:"id"});case"deleteRule":return this.opDeleteSettingsEntry(e,r,n,o,i,{op:a,collection:"rules",idKey:"id"});case"setLocalization":return this.opSetLocalization(e,r,i);case"replaceStructure":return this.opReplaceStructure(e,r,n,o,i);default:o.errors.push({index:n,op:a,code:"unknownOp",message:`Unknown operation '${a}'.`,hint:"Call help() for the list of operations."});return false}}opAddElement(e,t,n,o,i){const r=String(t["type"]??"").trim();if(!r){this.fail(o,n,"addElement","badCommand","addElement needs a `type`.",{hint:"Call describeElementTypes() for the available types."});return false}if(!this.isKnownType(r)){this.fail(o,n,"addElement","unknownType",`Unknown element type '${r}'.`,{hint:this.suggestType(r)});return false}const a=String(t["name"]??"").trim();if(a&&!this.isValidName(a)){this.fail(o,n,"addElement","invalidName",`'${a}' is not a usable element name.`,{hint:"Use letters, digits and underscores, starting with a letter."});return false}const c=this.childDefinitions(e,String(t["parent"]??"").trim());if(a&&c[a]){this.fail(o,n,"addElement","nameTaken",`An element named '${a}' already exists.`,{hint:"Use updateElement to change it, or pick another name."});return false}const b=this.resolveTargetRows(e,t,n,"addElement",o);if(!b)return false;const v=a||this.nextFreeName(new Set([...Object.keys(e.elements??{}),...Object.keys(c)]));const d=this.asRecord(t["properties"]);this.warnUnknownProperties(r,d,n,"addElement",o);this.validatePropertyValues(r,d,n,"addElement",o);const u={...d,name:v,type:r,label:Cl(r,v,t["label"]??d["label"],Boolean(a))};if(r==="button"){const m=u;const f=String(t["label"]??d["label"]??"").trim();if(!String(m["text"]??"").trim())m["text"]=f||(a?Un(v):"");m["label"]=""}c[v]=u;this.insertColumn(b,{elementRef:v},t);i.add(v);return true}opInsertJson(e,t,n,o,i){return this.insertSubtree(e,t,n,o,i)!==null}insertSubtree(e,t,n,o,i){const r=String(t["root"]??"").trim();const a=this.asRecord(t["elements"]);if(!r||Object.keys(a).length===0){this.fail(o,n,"insertJson","badCommand","insertJson needs `root` and a non empty `elements` map.");return null}if(!a[r]){this.fail(o,n,"insertJson","badCommand",`Root '${r}' is not present in \`elements\`.`);return null}const c=this.resolveTargetRows(e,t,n,"insertJson",o);if(!c)return null;const b=t["rename"]!==false;const v=this.childDefinitions(e,String(t["parent"]??"").trim());const d=new Set(Object.keys(v));const u={};for(const T of Object.keys(a)){if(!d.has(T)){u[T]=T;d.add(T);continue}if(!b){this.fail(o,n,"insertJson","nameTaken",`An element named '${T}' already exists.`,{hint:"Leave `rename` unset to let the insert rename colliding elements."});return null}const R=this.nextFreeName(d);u[T]=R;d.add(R)}const m={};for(const T of Object.keys(a)){const R=this.clone(a[T]);this.replaceNamesDeep(R,u);const ve=u[T];R["name"]=ve;const U=String(R["type"]??"").trim();if(!U){this.fail(o,n,"insertJson","badCommand",`Element '${T}' has no \`type\`.`);return null}if(!this.isKnownType(U)){this.fail(o,n,"insertJson","unknownType",`Element '${T}' has unknown type '${U}'.`,{hint:this.suggestType(U)});return null}this.warnUnknownProperties(U,R,n,"insertJson",o);this.validatePropertyValues(U,R,n,"insertJson",o);if(R["label"]===void 0||R["label"]===null)R["label"]=ve;m[ve]=R;i.add(ve)}Object.assign(v,m);const f=this.remapRows(this.clone(t["rows"]??[]),u);const x=t["tabRows"];const k=x?Object.keys(x).reduce((T,R)=>{T[R]=this.remapRows(this.clone(x[R]??[]),u);return T},{}):void 0;const C={elementRef:u[r]};if(f.length>0)C.rows=f;if(k)C.tabRows=k;this.insertColumn(c,C,t);return u[r]}opUpsertTemplate(e,t,n,o){if(!this.requireTemplatesCapability(n,"upsertTemplate",o))return false;const i=String(t["name"]??"").trim();if(!i){this.fail(o,n,"upsertTemplate","badCommand","upsertTemplate needs a `name`.",{hint:"The name is what useTemplate and the properties sidebar reference."});return false}const r=String(t["content"]??"");if(!r.trim()){this.fail(o,n,"upsertTemplate","badCommand","upsertTemplate needs `content`.",{hint:"Write field slots as row[0], row[1] and map them with useTemplate."});return false}const a={name:i,content:r};const c=String(t["css"]??"");if(c.trim())a.css=c;const b=String(t["title"]??"").trim();if(b)a.title=b;const v=String(t["description"]??"").trim();if(v)a.description=v;if(Array.isArray(t["tags"]))a.tags=t["tags"].map(d=>String(d??"").trim()).filter(Boolean);this.templateEngineService.upsertTemplate(a,e);this.pendingTemplateNotifications.set(i,a);return true}opUseTemplate(e,t,n,o,i){if(!this.requireTemplatesCapability(n,"useTemplate",o))return false;const r=String(t["name"]??"").trim();const a=this.resolveRef(e,r)?.element;if(!a){this.fail(o,n,"useTemplate","unknownElement",`No element named '${r}'.`,{hint:this.describeRef(e,r)});return false}const c=String(t["template"]??"").trim();if(c&&!this.templateEngineService.getTemplateByName(c,e)){const m=this.templateEngineService.getTemplateNames(e);this.fail(o,n,"useTemplate","unknownTemplate",`No template named '${c}'.`,{hint:m.length>0?`Known templates: ${m.join(", ")}. Create a new one with upsertTemplate first.`:"The library is empty. Create the template with upsertTemplate first."});return false}const b=t["fieldMap"]===void 0?null:this.asRecord(t["fieldMap"]);const v=String(t["column"]??"").trim();if(v)return this.applyColumnTemplate(a,r,v,c,b,n,o,i);const d=String(a["type"]??"").trim();const u=this.resolveTemplatePropertyKey(d,String(t["property"]??"").trim(),n,o);if(!u)return false;a[u]=c;if(b)a[this.resolveTemplateFieldMapKey(u)]=b;else if(!c)a[this.resolveTemplateFieldMapKey(u)]={};i.add(r);return true}applyColumnTemplate(e,t,n,o,i,r,a,c){const b=Array.isArray(e["columnsConfig"])?e["columnsConfig"]:null;if(!b){this.fail(a,r,"useTemplate","badCommand",`'${t}' has no columnsConfig, so it has no columns to bind a template to.`,{hint:"Drop `column` to bind the template to the element itself."});return false}const v=b.find(d=>String(d?.["key"]??"").trim()===n||String(d?.["name"]??"").trim()===n||String(d?.["field"]??"").trim()===n||String(d?.["label"]??"").trim()===n);if(!v){const d=b.map(u=>String(u?.["key"]??u?.["name"]??"").trim()).filter(Boolean);this.fail(a,r,"useTemplate","badCommand",`'${t}' has no column '${n}'.`,{hint:d.length>0?`Known columns: ${d.join(", ")}`:void 0});return false}v["templateName"]=o;if(i)v["templateFieldMap"]=i;else if(!o)v["templateFieldMap"]={};if(o)a.warnings.push(`[${r}] useTemplate: '${n}' now renders custom markup. A status, badge or toggle column is better served by column type "element" with the matching elementType.`);c.add(t);return true}resolveTemplatePropertyKey(e,t,n,o){if(t)return t;const i=this.describeTemplateHosts().filter(r=>r.type===e);if(i.length===0){this.fail(o,n,"useTemplate","unknownProperty",`Element type '${e}' has no template reference property.`,{hint:"describeTemplates().hosts lists the types that can host a template."});return null}if(i.length>1){this.fail(o,n,"useTemplate","badCommand",`Element type '${e}' has more than one template slot.`,{hint:`Pass \`property\`, one of: ${i.map(r=>r.property).join(", ")}`});return null}return i[0].property}requireTemplatesCapability(e,t,n){if(this.featurePackRegistry.hasCapability("templates"))return true;this.fail(n,e,t,"capabilityMissing","The templates feature pack is not registered in this builder.",{hint:"Template reference properties stay hidden without it, so the binding would never render. Build from registered element types, or ask the host to add provideNgxViewBuilderTemplates()."});return false}flushTemplateNotifications(){const e=Array.from(this.pendingTemplateNotifications.values());this.pendingTemplateNotifications.clear();e.forEach(t=>{this.ngxViewBuilderApiService.saveTemplate(t)})}opUpdateElement(e,t,n,o,i){const r=this.resolveRef(e,t["name"]);if(!r){const d=String(t["name"]??"").trim();this.fail(o,n,"updateElement","unknownElement",`No element named '${d}'.`,{hint:this.describeRef(e,d)});return false}const a=r.name;const c=r.element;const b=this.asRecord(t["properties"]);this.warnUnknownProperties(String(c.type??""),b,n,"updateElement",o);this.validatePropertyValues(String(c.type??""),b,n,"updateElement",o);const v=t["merge"]!==false?{...c,...b}:{...b,name:a,type:c.type};v.name=a;r.map[a]=v;i.add(r.path);return true}opDeleteElement(e,t,n,o,i){const r=this.resolveRef(e,t["name"]);if(!r){const v=String(t["name"]??"").trim();this.fail(o,n,"deleteElement","unknownElement",`No element named '${v}'.`,{hint:this.describeRef(e,v)});return false}const a=this.findColumnInScope(r.scope,r.map,r.name);const c=new Set([r.name]);if(a&&!N(r.element.type)){this.collectRefsInScope(a.column.rows??[],r.map,c);Object.values(a.column.tabRows??{}).forEach(v=>{this.collectRefsInScope(v??[],r.map,c)})}if(a)this.detachColumn(a);const b=r.owner?r.path.slice(0,r.path.length-r.name.length):"";c.forEach(v=>{delete r.map[v];i.add(`${b}${v}`)});return true}opMoveElement(e,t,n,o,i){const r=String(t["name"]??"").trim();const a=this.resolveRef(e,r);const c=a?this.findColumnInScope(a.scope,a.map,a.name):null;if(!a||!c){this.fail(o,n,"moveElement","unknownElement",`'${r}' is not placed in any page.`,{hint:this.describeRef(e,r)});return false}const b=String(t["parent"]??"").trim();const v=b?this.resolveRef(e,b):null;const d=new Set([a.name]);if(!N(a.element.type)){this.collectRefsInScope(c.column.rows??[],a.map,d);Object.values(c.column.tabRows??{}).forEach(k=>this.collectRefsInScope(k??[],a.map,d))}const u=Boolean(v)&&(v.map===a.map&&d.has(v.name)||v.path.startsWith(`${a.path}.`));if(b&&(u||!v&&this.isDescendantOf(e,b,r))){this.fail(o,n,"moveElement","cycle",`'${b}' sits inside '${r}', so it cannot become its parent.`);return false}const m=this.childDefinitions(e,b);if(m!==a.map){const k=[...d].find(C=>m[C]);if(k){this.fail(o,n,"moveElement","nameTaken",`The target already has an element named '${k}'.`,{hint:"Rename one of them first with renameElement."});return false}}const f=this.clone(c.column);this.detachColumn(c);const x=this.resolveTargetRows(e,t,n,"moveElement",o);if(!x)return false;if(m!==a.map)d.forEach(k=>{if(a.map[k]){m[k]=a.map[k];delete a.map[k]}});this.insertColumn(x,f,t);i.add(a.path);return true}opRenameElement(e,t,n,o,i){const r=String(t["name"]??"").trim();const a=String(t["newName"]??"").trim();const c=this.resolveRef(e,r);if(!c){this.fail(o,n,"renameElement","unknownElement",`No element named '${r}'.`,{hint:this.describeRef(e,r)});return false}if(!this.isValidName(a)){this.fail(o,n,"renameElement","invalidName",`'${a}' is not a usable name.`,{hint:"Use letters, digits and underscores, starting with a letter."});return false}if(c.map[a]){this.fail(o,n,"renameElement","nameTaken",c.owner?`This panel already has an element named '${a}'.`:`An element named '${a}' already exists.`);return false}if(c.owner){const b={};Object.keys(c.map).forEach(d=>{b[d===c.name?a:d]=d===c.name?{...c.map[d],name:a}:c.map[d]});Object.keys(c.map).forEach(d=>delete c.map[d]);Object.assign(c.map,b);c.scope.forEach(d=>this.renameRefsInScope(d,c.map,c.name,a));Object.values(c.map).forEach(d=>this.replaceNamesDeep(d,{[c.name]:a}));c.map[a].name=a;const v=c.path.slice(0,c.path.length-c.name.length);i.add(c.path);i.add(`${v}${a}`);return true}this.renameDeep(e,r,a);i.add(r);i.add(a);return true}opDuplicateElement(e,t,n,o,i){const r=String(t["name"]??"").trim();const a=this.resolveRef(e,r);if(!a){this.fail(o,n,"duplicateElement","unknownElement",`No element named '${r}'.`,{hint:this.describeRef(e,r)});return false}const c=a.name;const b=this.findColumnInScope(a.scope,a.map,a.name);const v=new Set([c]);if(b&&!N(a.element.type)){this.collectRefsInScope(b.column.rows??[],a.map,v);Object.values(b.column.tabRows??{}).forEach(x=>{this.collectRefsInScope(x??[],a.map,v)})}const d={};v.forEach(x=>{if(a.map[x])d[x]=this.clone(a.map[x])});const u=String(t["newName"]??"").trim();const m={op:"insertJson",root:c,elements:d,rows:b?this.clone(b.column.rows??[]):[],tabRows:b?.column.tabRows?this.clone(b.column.tabRows):void 0,parent:t["parent"]??(a.owner?this.parentPathOf(e,a):this.resolveParentName(e,c)),page:t["page"]??(this.findColumn(e,c)?.pageName||void 0),tab:t["tab"]??null,index:t["index"]??null};const f=this.insertSubtree(e,m,n,o,i);if(f===null)return false;if(!u)return true;if(!this.isValidName(u)){this.fail(o,n,"duplicateElement","invalidName",`'${u}' is not a usable element name.`,{hint:"Use letters, digits and underscores, starting with a letter."});return false}if(a.map[u]){this.fail(o,n,"duplicateElement","nameTaken",`An element named '${u}' already exists.`);return false}if(a.owner){const x=a.path.slice(0,a.path.length-a.name.length);return this.opRenameElement(e,{name:`${x}${f}`,newName:u},n,o,i)}this.renameDeep(e,f,u);i.delete(f);i.add(u);return true}opAddRow(e,t,n,o,i){const r=this.resolveTargetRows(e,t,n,"addRow",o);if(!r)return false;const a=this.asIndex(t["index"]);const c={columns:[]};if(a===null||a>=r.length)r.push(c);else r.splice(Math.max(0,a),0,c);i.add(String(t["parent"]??t["page"]??"layout"));return true}opDeleteRow(e,t,n,o,i){const r=this.resolveTargetRows(e,t,n,"deleteRow",o);if(!r)return false;const a=this.asIndex(t["row"]);if(a===null||!r[a]){this.fail(o,n,"deleteRow","badCommand",`There is no row ${t["row"]} here.`,{hint:`This container has ${r.length} row(s).`});return false}const c=new Set;const b=this.childDefinitions(e,String(t["parent"]??"").trim());this.collectRefsInScope([r[a]],b,c);if(c.size>0&&t["force"]!==true){this.fail(o,n,"deleteRow","badCommand",`Row ${a} still holds ${[...c].join(", ")}.`,{hint:"Move those elements out first, or pass force: true to delete them with it."});return false}r.splice(a,1);c.forEach(v=>{delete b[v];i.add(v)});i.add("layout");return true}opUpdatePage(e,t,n,o,i){const r=String(t["name"]??"").trim();const a=(e.pages??[]).find(b=>b?.name===r);if(!a){this.fail(o,n,"updatePage","unknownPage",`No page named '${r}'.`,{hint:`Known pages: ${(e.pages??[]).map(b=>b?.name).join(", ")}`});return false}const c=this.asRecord(t["properties"]);Object.keys(c).forEach(b=>{if(b==="rows"||b==="name")return;a[b]=c[b]});if(e.elements?.[r])e.elements[r]={...e.elements[r],...c,name:r};i.add(r);return true}opSetProcess(e,t,n){const o=e.settings??{};if(t["process"]===null){delete o["process"];e.settings={...o};n.add("process");return true}const i=this.asRecord(t["process"]);const r=t["merge"]===false?{}:this.asRecord(o["process"]);e.settings={...o,process:{...r,...i}};n.add("process");return true}opAddPage(e,t,n,o,i){const r=String(t["name"]??"").trim();if(!r){this.fail(o,n,"addPage","badCommand","addPage needs a `name`.");return false}e.pages=Array.isArray(e.pages)?e.pages:[];if(e.pages.some(b=>b?.name===r)){this.fail(o,n,"addPage","nameTaken",`A page named '${r}' already exists.`);return false}if(e.elements?.[r]){this.fail(o,n,"addPage","nameTaken",`An element named '${r}' already exists.`,{hint:"A page needs an element entry of the same name, so the two share a namespace."});return false}const a={name:r,rows:[]};const c=this.asIndex(t["index"]);if(c===null||c>=e.pages.length)e.pages.push(a);else e.pages.splice(Math.max(0,c),0,a);e.elements={...e.elements??{},[r]:{name:r,type:"page",label:String(t["label"]??r)}};i.add(r);return true}opDeletePage(e,t,n,o,i){const r=String(t["name"]??"").trim();const a=(e.pages??[]).findIndex(b=>b?.name===r);if(a<0){this.fail(o,n,"deletePage","unknownPage",`No page named '${r}'.`,{hint:`Known pages: ${(e.pages??[]).map(b=>b?.name).join(", ")}`});return false}if((e.pages??[]).length<=1){this.fail(o,n,"deletePage","badCommand","A structure needs at least one page.");return false}const c=new Set;this.collectRefs(e.pages[a].rows??[],c);c.add(r);e.pages.splice(a,1);c.forEach(b=>{delete e.elements[b];i.add(b)});i.add(r);return true}opRenamePage(e,t,n,o,i){const r=String(t["name"]??"").trim();const a=String(t["newName"]??"").trim();const c=(e.pages??[]).find(b=>b?.name===r);if(!c){this.fail(o,n,"renamePage","unknownPage",`No page named '${r}'.`);return false}if(!a){this.fail(o,n,"renamePage","badCommand","renamePage needs a `newName`.");return false}if((e.pages??[]).some(b=>b?.name===a)){this.fail(o,n,"renamePage","nameTaken",`A page named '${a}' already exists.`);return false}if(e.elements?.[a]){this.fail(o,n,"renamePage","nameTaken",`An element named '${a}' already exists.`);return false}c.name=a;if(e.elements?.[r])this.renameDeep(e,r,a);i.add(r);i.add(a);return true}opSetSettings(e,t,n){const o=this.asRecord(t["settings"]);e.settings=t["merge"]===false?o:{...e.settings??{},...o};n.add("settings");return true}opSetHeader(e,t,n){if(t["header"]===null){delete e.header;n.add("header");return true}const o=this.asRecord(t["header"]);e.header=t["merge"]===false?o:{...e.header??{},...o};n.add("header");return true}opUpsertDataSource(e,t,n,o,i){const r=this.asRecord(t["dataSource"]);const a=String(r["name"]??"").trim();if(!a){this.fail(o,n,"upsertDataSource","badCommand","upsertDataSource needs `dataSource.name`.");return false}e.dataSources=Array.isArray(e.dataSources)?e.dataSources:[];const c=e.dataSources.findIndex(v=>v?.name===a);const b={title:a,type:"rest",params:{},...c>=0?e.dataSources[c]:{},...r};if(c>=0)e.dataSources[c]=b;else e.dataSources.push(b);i.add(a);return true}opDeleteDataSource(e,t,n,o,i){const r=String(t["name"]??"").trim();const a=(e.dataSources??[]).findIndex(c=>c?.name===r);if(a<0){this.fail(o,n,"deleteDataSource","badCommand",`No data source named '${r}'.`);return false}e.dataSources.splice(a,1);i.add(r);return true}opUpsertSettingsEntry(e,t,n,o,i,r){const a=this.asRecord(t[r.payloadKey]);const c=String(a[r.idKey]??"").trim();if(!c){this.fail(o,n,r.op,"badCommand",`${r.op} needs \`${r.payloadKey}.${r.idKey}\`.`);return false}const b=e.settings??{};const v=Array.isArray(b[r.collection])?[...b[r.collection]]:[];const d=a["actions"];if(Array.isArray(d))d.forEach((m,f)=>{const x=String(m?.["type"]??"").trim();if(!x||Ee.includes(x))return;const k=this.closestMatch(x,Ee);o.warnings.push(`[${n}] ${r.op}: actions[${f}] has unknown automation action '${x}'.`+(k?` Did you mean '${k}'?`:"")+` Known: ${Ee.join(", ")}.`)});const u=v.findIndex(m=>String(m?.[r.idKey]??"")===c);v[u>=0?u:v.length]=u>=0?{...v[u],...a}:a;e.settings={...b,[r.collection]:v};i.add(c);return true}opDeleteSettingsEntry(e,t,n,o,i,r){const a=String(t[r.idKey]??"").trim();const c=e.settings??{};const b=Array.isArray(c[r.collection])?[...c[r.collection]]:[];const v=b.findIndex(d=>String(d?.[r.idKey]??"")===a);if(v<0){this.fail(o,n,r.op,"badCommand",`No ${r.collection} entry with ${r.idKey} '${a}'.`,{hint:`Known: ${b.map(d=>d?.[r.idKey]).join(", ")||"none"}`});return false}b.splice(v,1);e.settings={...c,[r.collection]:b};i.add(a);return true}opSetLocalization(e,t,n){const o=t["merge"]===false;const i=o?{defaultLanguage:"en",languages:[],texts:{}}:{defaultLanguage:e.localization?.defaultLanguage??"en",languages:[...e.localization?.languages??[]],texts:{...e.localization?.texts??{}}};const r=String(t["defaultLanguage"]??"").trim()||i.defaultLanguage;const a=Array.isArray(t["languages"])?t["languages"].map(v=>String(v).trim()).filter(Boolean):i.languages;const c=this.asRecord(t["texts"]);const b={...i.texts};Object.keys(c).forEach(v=>{b[v]=o?{...c[v]}:{...b[v]??{},...c[v]}});e.localization={defaultLanguage:r,languages:a.length>0?a:[r],texts:b};n.add("localization");return true}opReplaceStructure(e,t,n,o,i){const r=t["structure"];if(!r||typeof r!=="object"||!Array.isArray(r.pages)){this.fail(o,n,"replaceStructure","invalidStructure","replaceStructure needs a structure object with a `pages` array.");return false}const a=this.clone(r);e.pages=a.pages;e.elements=a.elements??{};e.settings=a.settings??e.settings;e.header=a.header??e.header;e.dataSources=a.dataSources??e.dataSources;e.localization=a.localization??e.localization;e.schemaVersion=a.schemaVersion??e.schemaVersion;i.add("structure");return true}async runAction(e,t,n,o){const i=e;const r=String(i["op"]??"");if(o){n.warnings.push(`dryRun skipped action '${r}'.`);return}try{switch(r){case"switchTab":{const a=String(i["tab"]??"").trim();if(!Object.values(D).includes(a)){this.fail(n,t,r,"badCommand",`Unknown tab '${a}'.`,{hint:`Known tabs: ${Object.values(D).join(", ")}`});return}this.ngxViewBuilderApiService.switchToTab(a);return}case"focusElement":{const a=String(i["name"]??"").trim();const c=this.ngxViewBuilderApiService.getElementModel(a);if(!c){this.fail(n,t,r,"unknownElement",`No element named '${a}'.`);return}this.elementFocusService.setFocus(c);return}case"setData":{const a=this.asRecord(i["data"]);const c=this.ngxViewBuilderApiService.getStructure();const b=new Set(Object.keys(c?.elements??{}));const v={};Object.keys(a).forEach(d=>{if(!b.has(d))v[d]=a[d]});if(Object.keys(v).length>0||b.size===0)this.ngxViewBuilderApiService.setData(v);for(const d of Object.keys(a))if(b.has(d))await this.ngxViewBuilderApiService.setElementValue(d,a[d]);return}case"setTheme":{const a=String(i["mode"]??"").trim();if(a)this.ngxViewBuilderApiService.setThemeMode(a);if(i["cssVariables"]!==void 0)this.ngxViewBuilderApiService.setCssVariables(this.asRecord(i["cssVariables"]));if(i["customCss"]!==void 0)this.ngxViewBuilderApiService.setCustomCss(i["customCss"]);if(Array.isArray(i["customCssUrls"]))this.ngxViewBuilderApiService.setCustomCssUrls(i["customCssUrls"]);if(i["customTheme"]!==void 0)this.ngxViewBuilderApiService.setCustomTheme(i["customTheme"]);return}case"saveTemplate":this.ngxViewBuilderApiService.saveTemplate(this.asRecord(i["template"]),String(i["previousCode"]??"")||void 0);return;case"deleteTemplate":this.ngxViewBuilderApiService.deleteTemplate(String(i["code"]??"").trim());return;case"saveSidebarGroup":this.ngxViewBuilderApiService.saveSidebarGroup(this.asRecord(i["group"]),String(i["previousCode"]??"")||void 0);return;case"deleteSidebarGroup":this.ngxViewBuilderApiService.deleteSidebarGroup(String(i["code"]??"").trim());return;case"setTableSettings":this.ngxViewBuilderApiService.setTableSettings(String(i["table"]??"").trim(),i["settings"]??[]);return;case"setTableFilters":this.ngxViewBuilderApiService.setTableFilters(String(i["table"]??"").trim(),i["filters"]??[]);return;case"setRuntimeVariableContext":this.ngxViewBuilderApiService.setRuntimeVariableContext(this.asRecord(i["values"]),i["merge"]!==false);return;case"reloadDataSource":await this.ngxViewBuilderApiService.reloadDataSource(String(i["name"]??"").trim());return;case"undo":case"redo":{const a=this.ngxViewBuilderApiService.getBuilderAdapter();if(!(r==="undo"?a?.undo():a?.redo()))n.warnings.push(`[${t}] ${r}: nothing to ${r}.`);return}case"setLanguage":{const a=String(i["language"]??"").trim();if(!a){this.fail(n,t,r,"badCommand","setLanguage needs a `language`.");return}this.ngxViewBuilderApiService.setLanguage(a);return}case"setUiTranslations":{const a=this.asRecord(i["dictionaries"]);this.ngxViewBuilderApiService.setUiTranslations(a,i["merge"]!==false);return}case"validate":{const a=this.ngxViewBuilderApiService.getStructure();if(!a){this.fail(n,t,r,"noStructure","No structure is loaded.");return}const c=i["data"]===void 0||i["data"]===null?this.ngxViewBuilderApiService.getData():this.asRecord(i["data"]);const b=await this.ngxViewBuilderApiService.validateData(a,c,{emitValidationEvent:false,includeHidden:Boolean(i["includeHidden"]),includeDisabled:Boolean(i["includeDisabled"])});n.validation=[...n.validation??[],{isValid:b.isValid,issues:b.issues??[]}];return}default:this.fail(n,t,r,"unknownOp",`Unknown operation '${r}'.`)}}catch(a){this.fail(n,t,r,"actionFailed",a instanceof Error?a.message:`Action '${r}' failed.`)}}childDefinitions(e,t){e.elements=e.elements??{};const n=t?this.resolveRef(e,t):null;if(!n)return e.elements;const o=n.element;if(N(o["type"])){if(!o["template"]||typeof o["template"]!=="object"||Array.isArray(o["template"]))o["template"]={};return o["template"]}return n.map}resolveTargetRows(e,t,n,o,i){const r=String(t?.parent??"").trim();if(!r){const u=Array.isArray(e.pages)?e.pages:[];const m=String(t?.page??"").trim();const f=m?u.find(x=>x?.name===m):u[0];if(!f){this.fail(i,n,o,"unknownPage",m?`No page named '${m}'.`:"The structure has no pages.",{hint:`Known pages: ${u.map(x=>x?.name).join(", ")}`});return null}f.rows=Array.isArray(f.rows)?f.rows:[];return f.rows}const a=this.resolveRef(e,r);if(!a){this.fail(i,n,o,"unknownElement",`No element named '${r}'.`,{hint:this.describeRef(e,r)});return null}const c=String(a.element.type??"");const b=this.resolveContainerKind(c);if(!b){this.fail(i,n,o,"notAContainer",`'${r}' is a '${c}' and cannot hold children.`,{hint:`Containers are: ${[...st,...ct].join(", ")}`});return null}const v=this.findColumnInScope(a.scope,a.map,a.name);if(!v){this.fail(i,n,o,"unknownElement",`'${r}' exists but is not placed in any page.`);return null}if(b==="rows"){v.column.rows=Array.isArray(v.column.rows)?v.column.rows:[];return v.column.rows}const d=String(t?.tab??"").trim();v.column.tabRows=v.column.tabRows&&typeof v.column.tabRows==="object"?v.column.tabRows:{};if(!d){const u=Object.keys(v.column.tabRows);this.fail(i,n,o,"missingTab",`'${r}' is a '${c}' and needs a \`tab\`.`,{hint:u.length>0?`Known sections: ${u.join(", ")}`:"Add a section to it first."});return null}v.column.tabRows[d]=Array.isArray(v.column.tabRows[d])?v.column.tabRows[d]:[];return v.column.tabRows[d]}insertColumn(e,t,n){const o=this.asIndex(n?.row);if(o!==null&&e[o]){const a=e[o];a.columns=Array.isArray(a.columns)?a.columns:[];const c=this.asIndex(n?.column);if(c===null||c>=a.columns.length)a.columns.push(t);else a.columns.splice(Math.max(0,c),0,t);return}const i=this.asIndex(n?.index);const r={columns:[t]};if(i===null||i>=e.length){e.push(r);return}e.splice(Math.max(0,i),0,r)}detachColumn(e){const t=e.rows[e.rowIndex];if(!t)return;t.columns.splice(e.columnIndex,1);if(t.columns.length===0)e.rows.splice(e.rowIndex,1)}resolveRef(e,t){const n=String(t??"").trim().split(".").map(c=>c.trim()).filter(Boolean);if(n.length===0)return null;let o=e.elements??{};let i=null;let r=(Array.isArray(e.pages)?e.pages:[]).map(c=>c?.rows??[]);let a="";for(let c=0;c<n.length;c+=1){const b=n[c];const v=o[b];if(!v){if(n.length===1){const m=this.templatePathsOf(e,b);return m.length===1?this.resolveRef(e,m[0]):null}return null}a=a?`${a}.${b}`:b;if(c===n.length-1)return{map:o,name:b,element:v,owner:i,scope:r,path:a};const d=v["template"];if(!N(v.type)||!d||typeof d!=="object")return null;const u=this.findColumnInScope(r,o,b);r=u?[u.column.rows??[],...Object.values(u.column.tabRows??{})]:[];i=v;o=d}return null}templatePathsOf(e,t){const n=[];const o=(i,r,a)=>{if(a>8)return;Object.entries(i??{}).forEach(([c,b])=>{const v=b?.["template"];if(!b||!N(b.type)||!v||typeof v!=="object")return;const d=r?`${r}.${c}`:c;const u=v;if(u[t])n.push(`${d}.${t}`);o(u,d,a+1)})};o(e.elements??{},"",0);return n}describeRef(e,t){const n=String(t??"").trim();const o=n.includes(".")?[]:this.templatePathsOf(e,n);if(o.length>1)return`'${n}' exists in several panels; name one by its path: ${o.join(", ")}.`;return this.suggestElement(e,n)}findColumnInScope(e,t,n){const o=i=>{if(!Array.isArray(i))return null;for(let r=0;r<i.length;r+=1){const a=i[r]?.columns??[];for(let c=0;c<a.length;c+=1){const b=a[c];if(b?.elementRef===n)return{rows:i,rowIndex:r,columnIndex:c,column:b,pageName:""};if(N(t[b?.elementRef??""]?.type))continue;const v=o(b?.rows??[])??Object.values(b?.tabRows??{}).reduce((d,u)=>d??o(u??[]),null);if(v)return v}}return null};for(const i of e){const r=o(i);if(r)return r}return null}collectRefsInScope(e,t,n){(Array.isArray(e)?e:[]).forEach(o=>{(o?.columns??[]).forEach(i=>{const r=String(i?.elementRef??"").trim();if(r)n.add(r);if(N(t[r]?.type))return;this.collectRefsInScope(i?.rows??[],t,n);Object.values(i?.tabRows??{}).forEach(a=>{this.collectRefsInScope(a??[],t,n)})})})}renameRefsInScope(e,t,n,o){(Array.isArray(e)?e:[]).forEach(i=>{(i?.columns??[]).forEach(r=>{if(r.elementRef===n)r.elementRef=o;if(N(t[r.elementRef]?.type))return;this.renameRefsInScope(r.rows??[],t,n,o);Object.values(r.tabRows??{}).forEach(a=>this.renameRefsInScope(a??[],t,n,o))})})}parentPathOf(e,t){const n=this.findColumnInScope(t.scope,t.map,t.name);const o=t.owner?t.path.slice(0,t.path.length-t.name.length-1):"";if(!n)return o||null;const i=Object.keys(t.map).find(r=>{if(r===t.name)return false;const a=this.findColumnInScope(t.scope,t.map,r);return Boolean(a)&&[a.column.rows??[],...Object.values(a.column.tabRows??{})].includes(n.rows)});if(i)return o?`${o}.${i}`:i;return o||null}findColumn(e,t){const n=Array.isArray(e.pages)?e.pages:[];for(const o of n){const i=this.findColumnInRows(o?.rows??[],t,o?.name??"");if(i)return i}return null}findColumnInRows(e,t,n){if(!Array.isArray(e))return null;for(let o=0;o<e.length;o+=1){const i=e[o]?.columns??[];for(let r=0;r<i.length;r+=1){const a=i[r];if(a?.elementRef===t)return{rows:e,rowIndex:o,columnIndex:r,column:a,pageName:n};const c=this.findColumnInRows(a?.rows??[],t,n);if(c)return c;const b=a?.tabRows??{};for(const v of Object.keys(b)){const d=this.findColumnInRows(b[v]??[],t,n);if(d)return d}}}return null}resolveParentName(e,t){const n=Array.isArray(e.pages)?e.pages:[];for(const o of n){const i=this.findParentInRows(o?.rows??[],t,null);if(i!==void 0)return i}return null}findParentInRows(e,t,n){if(!Array.isArray(e))return;for(const o of e)for(const i of o?.columns??[]){if(i?.elementRef===t)return n;const r=this.findParentInRows(i?.rows??[],t,i?.elementRef??null);if(r!==void 0)return r;const a=i?.tabRows??{};for(const c of Object.keys(a)){const b=this.findParentInRows(a[c]??[],t,i?.elementRef??null);if(b!==void 0)return b}}}isDescendantOf(e,t,n){const o=this.findColumn(e,n);if(!o)return false;const i=new Set;this.collectRefs(o.column.rows??[],i);Object.values(o.column.tabRows??{}).forEach(r=>{this.collectRefs(r??[],i)});return t===n||i.has(t)}collectRefs(e,t){if(!Array.isArray(e))return;e.forEach(n=>{(n?.columns??[]).forEach(o=>{const i=String(o?.elementRef??"").trim();if(i)t.add(i);this.collectRefs(o?.rows??[],t);Object.values(o?.tabRows??{}).forEach(r=>{this.collectRefs(r??[],t)})})})}remapRows(e,t){if(!Array.isArray(e))return[];return e.map(n=>({...n,columns:(n?.columns??[]).map(o=>{const i={...o,elementRef:t[o?.elementRef??""]??o?.elementRef};if(Array.isArray(o?.rows))i.rows=this.remapRows(o.rows,t);if(o?.tabRows&&typeof o.tabRows==="object")i.tabRows=Object.keys(o.tabRows).reduce((r,a)=>{r[a]=this.remapRows(o.tabRows[a]??[],t);return r},{});return i})}))}renameDeep(e,t,n){if(!e.elements[t])return;const o={};Object.keys(e.elements).forEach(r=>{if(r===t){o[n]={...e.elements[r],name:n};return}o[r]=e.elements[r]});e.elements=o;const i={[t]:n};(e.pages??[]).forEach(r=>this.renameRefsInScope(r?.rows??[],e.elements,t,n));Object.keys(e.elements).forEach(r=>{this.replaceNamesDeep(e.elements[r],i)});e.elements[n].name=n}replaceNamesDeep(e,t){const n=Object.entries(t).filter(([r,a])=>r&&a&&r!==a);if(n.length===0||!e||typeof e!=="object")return;const o=r=>{if(typeof r==="string")return n.reduce((a,[c,b])=>a.replace(new RegExp(`\\b${this.escapeRegExp(c)}\\b`,"g"),b),r);if(Array.isArray(r))return r.map(a=>o(a));if(r&&typeof r==="object"){const a=r;Object.keys(a).forEach(c=>{a[c]=o(a[c])});return a}return r};const i=e;Object.keys(i).forEach(r=>{if(r==="name")return;i[r]=o(i[r])})}buildTree(e){const t=new Set;const n=(Array.isArray(e.pages)?e.pages:[]).map((i,r)=>({name:String(i?.name??""),index:r,children:this.buildNodes(e,i?.rows??[],t,void 0,e.elements??{},"")}));const o=new Set(n.map(i=>i.name));return{pages:n,orphans:Object.keys(e.elements??{}).filter(i=>!t.has(i)&&!o.has(i)),elementCount:Object.keys(e.elements??{}).length}}buildNodes(e,t,n,o,i,r){const a=[];(Array.isArray(t)?t:[]).forEach(c=>{(c?.columns??[]).forEach(b=>{const v=String(b?.elementRef??"").trim();if(!v)return;if(!r)n.add(v);const d=i?.[v];const u={name:v,type:String(d?.type??"unknown")};if(r)u.path=`${r}.${v}`;const m=d?.["template"];const f=N(d?.type)&&m&&typeof m==="object";const x=f?m:i;const k=f?r?`${r}.${v}`:v:r;const C=String(d?.label??"").trim();if(C&&C!==v)u.label=C;if(o)u.tab=o;const T=this.buildNodes(e,b?.rows??[],n,void 0,x,k);Object.keys(b?.tabRows??{}).forEach(R=>{T.push(...this.buildNodes(e,b.tabRows[R]??[],n,R,x,k))});if(T.length>0)u.children=T;a.push(u)})});return a}describeProperties(e){if(!e||typeof e!=="object")return[];return Object.keys(e).filter(t=>!e[t]?.hidden).map(t=>{const n=e[t];const o={key:t,type:String(n?.type??"unknown")};if(n?.label)o.label=n.label;if(n?.category)o.category=n.category;if(n?.hint)o.hint=n.hint;if(n?.value!==void 0)o.default=n.value;if(Array.isArray(n?.choices)&&n.choices.length>0)o.choices=n.choices.map(i=>({label:String(i?.label??""),value:i?.value}));return o})}resolveContainerKind(e){if(ct.includes(e))return"tabRows";if(st.includes(e))return"rows";return null}isKnownType(e){const t=this.ngxViewBuilderApiService.getBuilderAdapter();if(!t)return false;return(t.getRegisteredElements()??[]).some(n=>n?.type===e)}suggestType(e){const t=(this.ngxViewBuilderApiService.getBuilderAdapter()?.getRegisteredElements()??[]).map(o=>String(o?.type??""));const n=this.closestMatch(e,t);return n?`Did you mean '${n}'? Call describeElementTypes() for the full list.`:"Call describeElementTypes() for the available types."}suggestElement(e,t){const n=Object.keys(e.elements??{});const o=this.closestMatch(t,n);return o?`Did you mean '${o}'? Call getTree() to see what exists.`:"Call getTree() to see what exists."}warnUnknownProperties(e,t,n,o,i,r=""){const a=this.ngxViewBuilderApiService.getBuilderAdapter();if(!a||!e)return;const c=Object.keys(a.getElementProperties(e)??{});if(c.length===0)return;Object.keys(t).forEach(b=>{if(c.includes(b)||b==="name"||b==="type"||b==="label")return;const v=this.closestMatch(b,c);i.warnings.push(`[${n}] ${o}: '${e}' has no registered property '${r?`${r}.${b}`:b}'.`+(v?` Did you mean '${v}'?`:""))})}warnPreferRegisteredElements(e,t,n,o,i,r){if(e==="customHtml")i.warnings.push(`[${n}] ${o}: ${r}customHtml renders raw markup, with no options, validation or events. Call describeElementTypes() and use the element that already does this, unless custom markup was asked for.`);const a=t["columnsConfig"];if(!Array.isArray(a))return;a.forEach((c,b)=>{const v=c;if(!v||typeof v!=="object")return;const d=String(v["templateName"]??"").trim().length>0;const u=String(v["type"]??"").trim();if(d&&u!=="element")i.warnings.push(`[${n}] ${o}: ${r}columnsConfig[${b}] renders through a template. A status, badge, toggle or checkbox column is better as type "element" with the matching elementType, such as "badge", so it keeps its options and events.`)})}validatePropertyValues(e,t,n,o,i,r=""){const a=r?`${r}.`:"";this.warnPreferRegisteredElements(e,t,n,o,i,a);const c=t["options"];if(c!==void 0){if(!Array.isArray(c))i.warnings.push(`[${n}] ${o}: ${a}options must be an array.`);else c.forEach((d,u)=>{const m=d;if(!m||typeof m!=="object"||m["value"]===void 0)i.warnings.push(`[${n}] ${o}: ${a}options[${u}] needs a \`value\`, and normally a \`label\`.`)})}const b=t["validators"];if(b!==void 0){if(!Array.isArray(b))i.warnings.push(`[${n}] ${o}: ${a}validators must be an array.`);else b.forEach((d,u)=>{const m=d??{};const f=String(m["type"]??"").trim().toLowerCase();const x=`${a}validators[${u}]`;if(!f){i.warnings.push(`[${n}] ${o}: ${x} needs a \`type\`.`);return}if(!Re.includes(f)){const k=this.closestMatch(f,Re);i.warnings.push(`[${n}] ${o}: ${x} has unknown type '${m["type"]}'.`+(k?` Did you mean '${k}'?`:"")+` Known: ${Re.join(", ")}.`);return}if(f==="custom"&&!String(m["condition"]??"").trim())i.warnings.push(`[${n}] ${o}: ${x} is a custom validator and needs a \`condition\` expression that is true when the value is invalid.`)})}const v=t["events"];if(v!==void 0){if(!Array.isArray(v))i.warnings.push(`[${n}] ${o}: ${a}events must be an array.`);else v.forEach((d,u)=>{const m=String((d??{})["type"]??"").trim();const f=`${a}events[${u}]`;if(!m){i.warnings.push(`[${n}] ${o}: ${f} needs a \`type\`.`);return}if(!Ae.includes(m)){const x=this.closestMatch(m,Ae);i.warnings.push(`[${n}] ${o}: ${f} has unknown action type '${m}'.`+(x?` Did you mean '${x}'?`:"")+` Known: ${Ae.join(", ")}.`)}})}this.validateNestedElements(e,t,n,o,i,a)}validateNestedElements(e,t,n,o,i,r){const a=t["columns"];if(Array.isArray(a))a.forEach((b,v)=>{this.validateNestedElement(b,n,o,i,`${r}columns[${v}]`)});const c=t["template"];if(c&&typeof c==="object"&&!Array.isArray(c))Object.keys(c).forEach(b=>{this.validateNestedElement(c[b],n,o,i,`${r}template.${b}`)})}validateNestedElement(e,t,n,o,i){const r=e??{};if(!r||typeof r!=="object"){o.warnings.push(`[${t}] ${n}: ${i} is not an element object.`);return}const a=String(r["type"]??"").trim();if(!a)return;if(!this.isKnownType(a)){o.warnings.push(`[${t}] ${n}: ${i} has unknown element type '${a}'. ${this.suggestType(a)}`);return}if(!String(r["name"]??"").trim())o.warnings.push(`[${t}] ${n}: ${i} needs a \`name\`.`);this.warnUnknownProperties(a,r,t,n,o,i);this.validatePropertyValues(a,r,t,n,o,i)}closestMatch(e,t){const n=e.toLowerCase();let o=null;let i=Number.POSITIVE_INFINITY;t.forEach(a=>{const c=this.editDistance(n,a.toLowerCase());if(c<i){i=c;o=a}});const r=Math.max(2,Math.floor(n.length/2));return i<=r?o:null}editDistance(e,t){if(e===t)return 0;const n=e.length+1;const o=t.length+1;let i=Array.from({length:o},(r,a)=>a);for(let r=1;r<n;r+=1){const a=[r];for(let c=1;c<o;c+=1)a[c]=Math.min(i[c]+1,a[c-1]+1,i[c-1]+(e[r-1]===t[c-1]?0:1));i=a}return i[o-1]}nextElementName(e){return this.nextFreeName(new Set(Object.keys(e.elements??{})))}nextFreeName(e){let t=1;while(e.has(`el${t}`))t+=1;return`el${t}`}isValidName(e){return/^[A-Za-z][A-Za-z0-9_]*$/.test(e)}asRecord(e){return e&&typeof e==="object"&&!Array.isArray(e)?{...e}:{}}asIndex(e){const t=Number(e);return Number.isFinite(t)&&t>=0?Math.floor(t):null}escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}clone(e){return JSON.parse(JSON.stringify(e??null))}fail(e,t,n,o,i,r){const a={index:t,op:n,code:o,message:i};if(r?.path)a.path=r.path;if(r?.hint)a.hint=r.hint;e.errors.push(a)}isActionOp(e){if(!this.actionOps)this.actionOps=new Set(this.describeCommands().filter(t=>t.kind==="action").map(t=>String(t.op)));return this.actionOps.has(e)}describeCommands(){return[{op:"addElement",kind:"mutation",summary:"Creates an element and places it in the layout.",params:{type:"required, see describeElementTypes()",name:"optional, makes the command idempotent",label:"optional",properties:"optional element body",parent:"optional container element name, omit for page level",page:"optional page name, defaults to the first page",tab:"required when parent is a tab style container",index:"optional row position"},example:{op:"addElement",type:"text",parent:"panel1",properties:{label:"Email",required:true}}},{op:"insertJson",kind:"mutation",summary:"Inserts a whole subtree: elements keyed by name, plus its nested layout.",params:{root:"required, which key in `elements` is the top of the subtree",elements:"required map of name to element body",rows:"optional nested layout under the root",tabRows:"optional nested layout per section",rename:"default true, renames colliding names"},example:{op:"insertJson",root:"card",elements:{card:{type:"panel",label:"Address"},city:{type:"text",label:"City"}},rows:[{columns:[{elementRef:"city"}]}]}},{op:"upsertTemplate",kind:"mutation",summary:"Creates or replaces a library template. Needs the templates feature pack. Lands in the draft, so a useTemplate in the same batch can already reference it.",params:{name:"required, the name useTemplate references",content:"required markup, field slots written as row[0], row[1]",css:"optional, scoped to the template",title:"optional",description:"optional",tags:"optional string list"},example:{op:"upsertTemplate",name:"person card",content:'<div class="nvb-person"><b>{{row[0]}}</b><span>{{row[1]}}</span></div>',css:".person { display: grid; gap: 4px; }"}},{op:"useTemplate",kind:"mutation",summary:"Points an element at a library template and maps its slots. Resolves the reference property for the element type, so cardTemplateName and friends do not have to be set by hand.",params:{name:"required element name",template:"required template name, empty clears the binding",fieldMap:'optional slot to data path, e.g. { "0": "firstName" }',column:"optional table column, binds that column instead of the element",property:"optional explicit *TemplateName key, for a type with several slots"},example:{op:"useTemplate",name:"peopleGrid",template:"person card",fieldMap:{"0":"fullName","1":"email"}}},{op:"updateElement",kind:"mutation",summary:"Patches an element body.",params:{name:"required",properties:"required",merge:"default true"},example:{op:"updateElement",name:"el3",properties:{label:"Full name"}}},{op:"deleteElement",kind:"mutation",summary:"Removes an element, its layout slot and everything nested under it.",params:{name:"required"},example:{op:"deleteElement",name:"el3"}},{op:"moveElement",kind:"mutation",summary:"Moves an element, keeping its children, to another parent or position.",params:{name:"required",parent:"optional",page:"optional",tab:"optional",index:"optional"},example:{op:"moveElement",name:"el3",parent:"panel1",index:0}},{op:"renameElement",kind:"mutation",summary:"Renames an element and rewrites every reference to it.",params:{name:"required",newName:"required"},example:{op:"renameElement",name:"el3",newName:"customerEmail"}},{op:"duplicateElement",kind:"mutation",summary:"Copies an element with its subtree.",params:{name:"required",newName:"optional",parent:"optional",index:"optional"},example:{op:"duplicateElement",name:"panel1"}},{op:"addRow",kind:"mutation",summary:"Adds an empty row, so later commands can drop several elements into it.",params:{parent:"optional",page:"optional",tab:"optional",index:"optional"},example:{op:"addRow",parent:"panel1"}},{op:"deleteRow",kind:"mutation",summary:"Removes a row. Refuses a non empty row unless force is true.",params:{row:"required row index",parent:"optional",force:"default false"},example:{op:"deleteRow",parent:"panel1",row:2}},{op:"updatePage",kind:"mutation",summary:"Patches page properties such as label, status, readOnly and disabled.",params:{name:"required",properties:"required"},example:{op:"updatePage",name:"Step 1",properties:{readOnly:true}}},{op:"upsertFragment",kind:"mutation",summary:"Creates or updates a reusable fragment in settings.fragments, by id.",params:{fragment:"required, needs an `id`"},example:{op:"upsertFragment",fragment:{id:"addressBlock"}}},{op:"deleteFragment",kind:"mutation",summary:"Removes a fragment.",params:{id:"required"},example:{op:"deleteFragment",id:"addressBlock"}},{op:"setProcess",kind:"mutation",summary:"Sets the process definition in settings.process, or removes it with null.",params:{process:"required, null removes it",merge:"default true"},example:{op:"setProcess",process:{steps:[]}}},{op:"addPage",kind:"mutation",summary:"Adds an empty page.",params:{name:"required",index:"optional"},example:{op:"addPage",name:"Step 2"}},{op:"deletePage",kind:"mutation",summary:"Removes a page and every element on it.",params:{name:"required"},example:{op:"deletePage",name:"Step 2"}},{op:"renamePage",kind:"mutation",summary:"Renames a page.",params:{name:"required",newName:"required"},example:{op:"renamePage",name:"Page 1",newName:"Details"}},{op:"setSettings",kind:"mutation",summary:"Patches structure settings.",params:{settings:"required",merge:"default true"},example:{op:"setSettings",settings:{width:"960px"}}},{op:"setHeader",kind:"mutation",summary:"Patches the view header, or removes it with null.",params:{header:"required, null removes it",merge:"default true"},example:{op:"setHeader",header:{label:"Registration",showTitle:true}}},{op:"upsertDataSource",kind:"mutation",summary:"Creates or updates a data source by name.",params:{dataSource:"required, needs a `name`"},example:{op:"upsertDataSource",dataSource:{name:"countries",type:"rest",params:{url:"/api/countries"}}}},{op:"deleteDataSource",kind:"mutation",summary:"Removes a data source.",params:{name:"required"},example:{op:"deleteDataSource",name:"countries"}},{op:"replaceStructure",kind:"mutation",summary:"Replaces the whole view JSON.",params:{structure:"required"},example:{op:"replaceStructure",structure:{settings:{},pages:[],elements:{}}}},{op:"switchTab",kind:"action",summary:"Moves the builder to another tab, preview included.",params:{tab:`one of ${Object.values(D).join(", ")}`},example:{op:"switchTab",tab:"preview"}},{op:"focusElement",kind:"action",summary:"Selects an element so its properties open in the sidebar.",params:{name:"required"},example:{op:"focusElement",name:"el3"}},{op:"setData",kind:"action",summary:"Replaces the working data the preview renders with.",params:{data:"required"},example:{op:"setData",data:{customerEmail:"a@b.lt"}}},{op:"upsertVariable",kind:"mutation",summary:"Creates or updates a runtime variable in settings.variables, by name. sourceType picks constant, expression or dataSource.",params:{variable:"required, needs a `name`"},example:{op:"upsertVariable",variable:{name:"isAdult",sourceType:"expression",expression:"{age} >= 18",includeInDataJson:true}}},{op:"deleteVariable",kind:"mutation",summary:"Removes a runtime variable.",params:{name:"required"},example:{op:"deleteVariable",name:"isAdult"}},{op:"upsertTrigger",kind:"mutation",summary:"Creates or updates a trigger in settings.triggers, by id.",params:{trigger:"required, needs an `id`"},example:{op:"upsertTrigger",trigger:{id:"onLoad",event:"init",actions:[]}}},{op:"deleteTrigger",kind:"mutation",summary:"Removes a trigger.",params:{id:"required"},example:{op:"deleteTrigger",id:"onLoad"}},{op:"upsertRule",kind:"mutation",summary:"Creates or updates a rule in settings.rules, by id.",params:{rule:"required, needs an `id`"},example:{op:"upsertRule",rule:{id:"adultOnly",condition:"{age} >= 18",actions:[]}}},{op:"deleteRule",kind:"mutation",summary:"Removes a rule.",params:{id:"required"},example:{op:"deleteRule",id:"adultOnly"}},{op:"setLocalization",kind:"mutation",summary:"Sets content translations. Keys are structure paths; the structure itself holds the default language.",params:{defaultLanguage:"optional",languages:"optional list of supported languages",texts:"language then structure path, e.g. elements.firstName.label",merge:"default true"},example:{op:"setLocalization",defaultLanguage:"en",languages:["en","de"],texts:{de:{"elements.firstName.label":"Vorname"}}}},{op:"setLanguage",kind:"action",summary:"Switches the active language, which re-applies content translations.",params:{language:'required, e.g. "de"'},example:{op:"setLanguage",language:"de"}},{op:"setUiTranslations",kind:"action",summary:"Overrides built-in control text such as select placeholders, per language.",params:{dictionaries:"required, language then key",merge:"default true"},example:{op:"setUiTranslations",dictionaries:{en:{"select.placeholder":"Select"}}}},{op:"setTheme",kind:"action",summary:"Sets theme mode, CSS variables, custom CSS, stylesheet urls or a custom theme.",params:{mode:"optional, 'light' or 'dark'",cssVariables:"optional",customCss:"optional, null clears it",customCssUrls:"optional",customTheme:"optional"},example:{op:"setTheme",mode:"dark",cssVariables:{"--nvb-radius":"8px"}}},{op:"saveTemplate",kind:"action",summary:"Creates or updates a reusable template in the Templates tab.",params:{template:"required",previousCode:"optional, when renaming"},example:{op:"saveTemplate",template:{code:"addressCard",content:"<div></div>"}}},{op:"deleteTemplate",kind:"action",summary:"Removes a template.",params:{code:"required"},example:{op:"deleteTemplate",code:"addressCard"}},{op:"saveSidebarGroup",kind:"action",summary:"Saves a reusable element group into the builder sidebar library.",params:{group:"required",previousCode:"optional"},example:{op:"saveSidebarGroup",group:{id:"address",label:"Address block"}}},{op:"deleteSidebarGroup",kind:"action",summary:"Removes a sidebar library group.",params:{code:"required"},example:{op:"deleteSidebarGroup",code:"address"}},{op:"setTableSettings",kind:"action",summary:"Applies column visibility, order and width to a table.",params:{table:"required table or element name",settings:"required"},example:{op:"setTableSettings",table:"ordersTable",settings:[{key:"total",visible:true,order:0}]}},{op:"setTableFilters",kind:"action",summary:"Applies filters to a table.",params:{table:"required",filters:"required"},example:{op:"setTableFilters",table:"ordersTable",filters:[]}},{op:"setRuntimeVariableContext",kind:"action",summary:"Feeds external values that runtime variables can map from.",params:{values:"required",merge:"default true"},example:{op:"setRuntimeVariableContext",values:{tenantId:42}}},{op:"reloadDataSource",kind:"action",summary:"Re-runs a data source and refreshes whatever depends on it.",params:{name:"required"},example:{op:"reloadDataSource",name:"countries"}},{op:"undo",kind:"action",summary:"Steps the builder history back. Warns when there is nothing to undo.",params:{},example:{op:"undo"}},{op:"redo",kind:"action",summary:"Steps the builder history forward.",params:{},example:{op:"redo"}},{op:"validate",kind:"action",summary:"Validates the current view against data and reports issues.",params:{data:"optional, defaults to the current data",includeHidden:"default false",includeDisabled:"default false"},example:{op:"validate"}}]}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:be,deps:[],target:l.ɵɵFactoryTarget.Injectable});static ɵprov=l.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:be,providedIn:"root"})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:bt,decorators:[{type:q,args:[{providedIn:"root"}]}]});const _l=new Set(["avatar","badge","breadcrumbs","button","chart","customHtml","divider","emptyBlock","htmlSnippet","icon","iframe","image","messageCard","pageTitle","progressBar","richTextViewer","spacer","statsCard","toast","video"]);function Cl(s,e,t,n){if(t!==void 0&&t!==null)return String(t);if(_l.has(s))return"";return n?Un(e):e}function Un(s){const e=String(s??"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_\-.]+/g," ").trim().toLowerCase();return e?e.charAt(0).toUpperCase()+e.slice(1):""}const De="ngx-view-builder.mcp.session-key";const Jn=864e5;const Kn=4001;const Tl=4002;const Rl=4003;const El=4004;const Al=6e4;const Wn="ngx-view-builder.mcp.device-id";const Gn="wss://mcp.ngxviewbuilder.io/bridge";const Dl="0123456789ABCDEFGHJKMNPQRSTVWXYZ";const Ml=1e3;const Il=3e4;var Yn=class Xt{aiApi=g(bt);toast=g(pi);statusSignal=h("off",...ngDevMode?[{debugName:"statusSignal"}]:[]);keySignal=h(null,...ngDevMode?[{debugName:"keySignal"}]:[]);errorSignal=h(null,...ngDevMode?[{debugName:"errorSignal"}]:[]);pairedClientsSignal=h([],...ngDevMode?[{debugName:"pairedClientsSignal"}]:[]);bridgeUrlSignal=h(null,...ngDevMode?[{debugName:"bridgeUrlSignal"}]:[]);licenseProblemSignal=h(null,...ngDevMode?[{debugName:"licenseProblemSignal"}]:[]);disabledByHostSignal=h(false,...ngDevMode?[{debugName:"disabledByHostSignal"}]:[]);disabledByHost=this.disabledByHostSignal.asReadonly();setDisabledByHost(e){this.disabledByHostSignal.set(e);if(e)this.disconnect()}licenseProblem=this.licenseProblemSignal.asReadonly();status=this.statusSignal.asReadonly();sessionKey=this.keySignal.asReadonly();lastError=this.errorSignal.asReadonly();pairedClients=this.pairedClientsSignal.asReadonly();isPaired=y(()=>this.pairedClientsSignal().length>0,...ngDevMode?[{debugName:"isPaired"}]:[]);callsInFlightSignal=h(0,...ngDevMode?[{debugName:"callsInFlightSignal"}]:[]);aiBusy=y(()=>this.callsInFlightSignal()>0,...ngDevMode?[{debugName:"aiBusy"}]:[]);lastCallSignal=h(null,...ngDevMode?[{debugName:"lastCallSignal"}]:[]);aiActivity=this.lastCallSignal.asReadonly();keyIssuedByHostSignal=h(false,...ngDevMode?[{debugName:"keyIssuedByHostSignal"}]:[]);keyIssuedByHost=this.keyIssuedByHostSignal.asReadonly();clientUrl=y(()=>{const e=this.bridgeUrlSignal();return e?e.replace(/^ws/,"http").replace(/\/bridge\/?$/,"/mcp"):null},...ngDevMode?[{debugName:"clientUrl"}]:[]);socket=null;settings=null;startedFromSettingsSignal=h(false,...ngDevMode?[{debugName:"startedFromSettingsSignal"}]:[]);startedFromSettings=this.startedFromSettingsSignal.asReadonly();keyExpiryTimer=null;connectFromSettings(e,t){if(this.disabledByHostSignal())return;this.connect({url:Gn,licenseKey:e??void 0,client:t});this.startedFromSettingsSignal.set(true)}reconnectTimer=null;reconnectAttempt=0;connect(e){const t=String(e?.url??"").trim();if(!t||typeof WebSocket==="undefined"||this.disabledByHostSignal())return;this.disconnect();this.licenseProblemSignal.set(null);this.startedFromSettingsSignal.set(false);this.settings={...e,url:t};this.bridgeUrlSignal.set(t.replace(/^http/,"ws"));const n=e.sessionKey?.trim();this.keyIssuedByHostSignal.set(Boolean(n));const o=this.readStoredKey();this.keySignal.set(n||o?.key||this.generateKey());this.storeKey(this.keySignal(),n?null:o?.issuedAt);this.scheduleKeyExpiry();this.aiApi.arm();this.openSocket()}disconnect(){this.aiApi.disarm();this.clearReconnectTimer();this.clearKeyExpiryTimer();this.settings=null;this.startedFromSettingsSignal.set(false);const e=this.socket;this.socket=null;e?.close();this.statusSignal.set("off");this.pairedClientsSignal.set([])}regenerateKey(){if(!this.settings||this.keyIssuedByHost())return;this.send({type:"revoke"});this.storeKey(null);this.clearReconnectTimer();const e=this.socket;this.socket=null;e?.close();this.pairedClientsSignal.set([]);this.keySignal.set(this.generateKey());this.storeKey(this.keySignal());this.scheduleKeyExpiry();this.openSocket(true)}scheduleKeyExpiry(){this.clearKeyExpiryTimer();if(this.keyIssuedByHost())return;const e=this.readStoredKey()?.issuedAt??Date.now();const t=Math.max(0,e+Jn-Date.now());this.keyExpiryTimer=setTimeout(()=>{this.keyExpiryTimer=null;this.regenerateKey()},t)}clearKeyExpiryTimer(){if(this.keyExpiryTimer){clearTimeout(this.keyExpiryTimer);this.keyExpiryTimer=null}}openSocket(e=false){const t=this.settings;if(!t)return;if(!e||this.statusSignal()!=="connected")this.statusSignal.set("connecting");this.errorSignal.set(null);const n=new WebSocket(t.url.replace(/^http/,"ws"));this.socket=n;n.onopen=()=>{n.send(JSON.stringify({type:"hello",sessionKey:this.keySignal(),client:t.client,licenseKey:t.licenseKey?.trim()||void 0,deviceId:this.readDeviceId(),protocol:3}))};n.onmessage=o=>void this.onMessage(String(o.data));n.onerror=()=>{this.errorSignal.set("Could not reach the MCP server.")};n.onclose=o=>this.onClose(n,o)}onClose(e,t){if(this.socket!==e)return;this.socket=null;this.pairedClientsSignal.set([]);if(!this.settings){this.statusSignal.set("off");return}if(t.code===Rl){this.statusSignal.set("error");this.licenseProblemSignal.set(this.licenseProblemSignal()??t.reason??"AI access needs an active designer license.");this.errorSignal.set(this.licenseProblemSignal());return}if(t.code===El){this.statusSignal.set("error");this.licenseProblemSignal.set(this.licenseProblemSignal()??"All seats of this license are in use.");this.errorSignal.set(this.licenseProblemSignal());this.clearReconnectTimer();this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null;this.openSocket()},Al);return}if(t.code===Kn||t.code===Tl){if(this.keyIssuedByHost()){this.statusSignal.set("error");this.errorSignal.set(t.code===Kn?"Another tab is using this session key.":"The MCP server rejected the session key.");return}this.keySignal.set(this.generateKey());this.storeKey(this.keySignal());this.scheduleKeyExpiry()}this.statusSignal.set("error");this.errorSignal.set(this.errorSignal()??"The connection to the MCP server dropped.");this.scheduleReconnect()}scheduleReconnect(){this.clearReconnectTimer();const e=Math.min(Il,Ml*2**this.reconnectAttempt);this.reconnectAttempt+=1;this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null;this.openSocket()},e)}clearReconnectTimer(){if(this.reconnectTimer){clearTimeout(this.reconnectTimer);this.reconnectTimer=null}}async onMessage(e){let t;try{t=JSON.parse(e)}catch{return}if(t.type==="welcome"){const n=t.key??this.keySignal();if(n!==this.keySignal()){this.keySignal.set(n);this.storeKey(n)}this.statusSignal.set("connected");this.errorSignal.set(null);this.licenseProblemSignal.set(null);this.reconnectAttempt=0;return}if(t.type==="license"&&t.ok===false){this.licenseProblemSignal.set(t.message??"AI access needs an active designer license.");this.errorSignal.set(this.licenseProblemSignal());return}if(t.type==="paired"||t.type==="unpaired"){this.onPairingChange(t.type,t.client,Boolean(t.restored));return}if(t.type==="toast"){this.toast.show({title:t.title,message:t.message,variant:t.variant??"info"});return}if(t.type!=="rpc"||!t.id||!t.method)return;this.callsInFlightSignal.update(n=>n+1);this.lastCallSignal.set(Vl(t.method,t.params));try{const n=await this.aiApi.invoke(t.method,t.params??[]);this.send({type:"rpc_result",id:t.id,ok:true,result:n})}catch(n){this.send({type:"rpc_result",id:t.id,ok:false,error:{message:n instanceof Error?n.message:String(n)}})}finally{setTimeout(()=>this.callsInFlightSignal.update(n=>Math.max(0,n-1)),600)}}onPairingChange(e,t,n){const o={id:String(t?.id??t?.name??"client"),name:String(t?.name??"AI client"),version:t?.version??null};const i=this.pairedClientsSignal().filter(r=>r.id!==o.id);if(e==="paired"){this.pairedClientsSignal.set([...i,o]);if(!n)this.toast.show({title:"AI client connected",message:`${o.name} can now edit this builder.`,variant:"info"});return}if(i.length!==this.pairedClientsSignal().length){this.pairedClientsSignal.set(i);this.toast.show({title:"AI client disconnected",message:`${o.name} no longer has access to this builder.`,variant:"info"})}}generateKey(){const e=new Uint8Array(12);globalThis.crypto.getRandomValues(e);const t=Array.from(e,n=>Dl[n%32]);return`NVB-${t.slice(0,4).join("")}-${t.slice(4,8).join("")}-${t.slice(8,12).join("")}`}readDeviceId(){try{let e=localStorage.getItem(Wn);if(!e||!/^[A-Za-z0-9_-]{8,64}$/.test(e)){e=this.generateDeviceId();localStorage.setItem(Wn,e)}return e}catch{return}}generateDeviceId(){const e=new Uint8Array(16);crypto.getRandomValues(e);return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}readStoredKey(){try{const e=sessionStorage.getItem(De);if(!e)return;const t=e.startsWith("{")?JSON.parse(e):{key:e};const n=Number(t.issuedAt??Date.now());if(!t.key||Date.now()-n>=864e5){sessionStorage.removeItem(De);return}return{key:t.key,issuedAt:n}}catch{return}}storeKey(e,t){try{if(e)sessionStorage.setItem(De,JSON.stringify({key:e,issuedAt:t??Date.now()}));else sessionStorage.removeItem(De)}catch{}}send(e){if(this.socket?.readyState===WebSocket.OPEN)this.socket.send(JSON.stringify(e))}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Xt,deps:[],target:l.ɵɵFactoryTarget.Injectable});static ɵprov=l.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Xt,providedIn:"root"})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Yn,decorators:[{type:q,args:[{providedIn:"root"}]}]});function Vl(s,e){if(s==="execute")return(Array.isArray(e)?e[1]:void 0)?.dryRun?"checking":"building";if(/^(get|describe|help|available)/.test(s))return"reading";return"working"}var Xn=class Zt{http=g(zn);ngxViewBuilderApi=g(P);defaults={};configure(e){this.defaults={...this.defaults,...e??{}}}async validate(e){const t=e??{};return await et(this.http.post(`${this.resolveBackendUrl(t)}/playwright/validate`,{appUrl:this.resolveAppUrl(t),formJson:this.resolveFormJson(t),dataJson:this.resolveDataJson(t),options:t.options??{},waitMs:this.resolveNumber(t.waitMs,this.defaults.waitMs,300),timeoutMs:this.resolveNumber(t.timeoutMs,this.defaults.timeoutMs,45e3),theme:this.resolveTheme(t),language:this.resolveLanguage(t),runtimeSettings:this.resolveRuntimeSettings(t)}))}async export(e){const t=e??{};const n=await et(this.http.post(`${this.resolveBackendUrl(t)}/playwright/export`,{appUrl:this.resolveAppUrl(t),formJson:this.resolveFormJson(t),dataJson:this.resolveDataJson(t),waitMs:this.resolveNumber(t.waitMs,this.defaults.waitMs,400),timeoutMs:this.resolveNumber(t.timeoutMs,this.defaults.timeoutMs,45e3),theme:this.resolveTheme(t),language:this.resolveLanguage(t),runtimeSettings:this.resolveRuntimeSettings(t),selector:this.resolveSelector(t),fullPage:this.resolveFullPage(t),viewportWidth:this.resolveNumber(t.viewportWidth,this.defaults.viewportWidth,1366),viewportHeight:this.resolveNumber(t.viewportHeight,this.defaults.viewportHeight,900),format:this.resolveFormat(t.format),fileName:this.resolveFileName(t)}));if(t.download!==false)this.download(n);return n}async exportPdf(e){return await this.export({...e??{},format:"pdf"})}async exportPng(e){return await this.export({...e??{},format:"png"})}showValidationToast(e,t){const n=e?.issues?.length??0;const o=Boolean(e?.isValid);const i=t?.position??"top-right";const r=String(t?.title??"Serverio validacija").trim()||"Serverio validacija";let a="";if(o)a=String(t?.successMessage??"Testu serverio validacija klaidu neaptiko.").trim()||"Testu serverio validacija klaidu neaptiko.";else if(typeof t?.errorMessage==="function")a=String(t.errorMessage(n)??"").trim();else a=String(t?.errorMessage??`Testu serverio validacija aptiko klaidu: ${n}.`).trim()||`Testu serverio validacija aptiko klaidu: ${n}.`;this.ngxViewBuilderApi.showToast({variant:o?"success":"error",title:r,message:a,position:i,autoHide:true,autoHideMs:o?3200:12e4,showIcon:true,icon:o?"check":"error"})}download(e){const t=atob(String(e?.contentBase64??""));const n=new Uint8Array(t.length);for(let a=0;a<t.length;a++)n[a]=t.charCodeAt(a);const o=new Blob([n],{type:e?.mimeType||"application/octet-stream"});const i=URL.createObjectURL(o);const r=document.createElement("a");r.href=i;r.download=e?.fileName||"ngx-view-builder-export.bin";document.body.appendChild(r);r.click();r.remove();URL.revokeObjectURL(i)}resolveBackendUrl(e){return this.normalizeUrl(e.backendUrl??this.defaults.backendUrl)||"http://localhost:8010"}resolveAppUrl(e){const t=this.normalizeUrl(e.appUrl??this.defaults.appUrl);if(t)return t;if(typeof window!=="undefined"&&window.location?.href)return window.location.href;return"http://localhost:4200/filler-headless"}resolveFormJson(e){const t=e.formJson??this.defaults.formJson;if(t!==null&&t!==void 0)return z(t);return z(this.ngxViewBuilderApi.getStructure()??{})}resolveDataJson(e){const t=e.dataJson??this.defaults.dataJson;if(t!==null&&t!==void 0)return z(t);return z(this.ngxViewBuilderApi.getData()??{})}resolveTheme(e){return(e.theme??this.defaults.theme??this.ngxViewBuilderApi.getThemeMode())==="dark"?"dark":"light"}resolveLanguage(e){const t=String(e.language??this.defaults.language??"").trim();if(t)return t;const n=String(this.ngxViewBuilderApi.getStructure()?.settings?.language??"").trim();if(n)return n;if(typeof document!=="undefined"){const o=String(document.documentElement?.lang??"").trim();if(o)return o}return"en"}resolveRuntimeSettings(e){const t=e.runtimeSettings??this.defaults.runtimeSettings??null;return t?z(t):null}resolveSelector(e){return String(e.selector??this.defaults.selector??"").trim()||null}resolveFullPage(e){if(typeof e.fullPage==="boolean")return e.fullPage;if(typeof this.defaults.fullPage==="boolean")return this.defaults.fullPage;return false}resolveFormat(e){return e==="jpeg"||e==="pdf"?e:"png"}resolveFileName(e){const t=String(e.fileName??"").trim();if(t)return t;return`ngx-view-builder-export.${this.resolveFormat(e.format)}`}resolveNumber(e,t,n){const o=Number(e);if(Number.isFinite(o)&&o>0)return Math.floor(o);const i=Number(t);if(Number.isFinite(i)&&i>0)return Math.floor(i);return n}normalizeUrl(e){return String(e??"").trim().replace(/\/+$/,"")}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Zt,deps:[],target:l.ɵɵFactoryTarget.Injectable});static ɵprov=l.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Zt,providedIn:"root"})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Xn,decorators:[{type:q,args:[{providedIn:"root"}]}]});var vt;(function(s){s["Input"]="input";s["Change"]="change";s["Blur"]="blur";s["Focus"]="focus";s["Programmatic"]="programmatic";s["Load"]="load"})(vt||(vt={}));var dt;(function(s){s["Always"]="always";s["Click"]="click";s["Submit"]="submit";s["Input"]="input";s["Change"]="change";s["Blur"]="blur";s["Focus"]="focus";s["BeforeLoad"]="beforeLoad";s["OnLoad"]="onLoad";s["AfterLoad"]="afterLoad"})(dt||(dt={}));var ut;(function(s){s["Navigate"]="navigate";s["DataSource"]="dataSource";s["SendMessage"]="sendMessage";s["SetValue"]="setValue";s["SetOptions"]="setOptions";s["ReloadElements"]="reloadElements";s["Toast"]="toast";s["Dialog"]="dialog";s["Validate"]="validate";s["Submit"]="submit"})(ut||(ut={}));var pt;(function(s){s["Filled"]="filled";s["Outlined"]="outlined";s["Text"]="text"})(pt||(pt={}));var gt;(function(s){s["Primary"]="primary";s["Risk"]="risk";s["Neutral"]="neutral"})(gt||(gt={}));var mt;(function(s){s["Open"]="open";s["Close"]="close";s["Toggle"]="toggle"})(mt||(mt={}));var ht;(function(s){s["Error"]="error";s["Warning"]="warning";s["Info"]="info";s["Success"]="success"})(ht||(ht={}));var ft;(function(s){s["TopLeft"]="top-left";s["TopCenter"]="top-center";s["TopRight"]="top-right";s["BottomLeft"]="bottom-left";s["BottomCenter"]="bottom-center";s["BottomRight"]="bottom-right"})(ft||(ft={}));var wt;(function(s){s["None"]="none";s["Download"]="download";s["SetValue"]="setValue"})(wt||(wt={}));var yt;(function(s){s["ContextPath"]="contextPath";s["Template"]="template";s["Json"]="json";s["Expression"]="expression"})(yt||(yt={}));var xt;(function(s){s["Text"]="text";s["Number"]="number";s["Date"]="date";s["DateTime"]="dateTime";s["Boolean"]="boolean";s["Html"]="html";s["Status"]="status";s["ToggleSwitch"]="toggleSwitch";s["SingleCheckbox"]="singleCheckbox";s["Element"]="element"})(xt||(xt={}));var kt;(function(s){s["Auto"]="auto";s["Text"]="text";s["Number"]="number";s["Date"]="date";s["DateTime"]="dateTime";s["Boolean"]="boolean";s["Select"]="select";s["MultiSelect"]="multiSelect";s["Checkbox"]="checkbox";s["Toggle"]="toggle"})(kt||(kt={}));var St;(function(s){s["Static"]="static";s["DataSource"]="datasource"})(St||(St={}));var _t;(function(s){s["Dropdown"]="dropdown";s["IconButtons"]="iconButtons";s["Buttons"]="buttons"})(_t||(_t={}));var Ct;(function(s){s["Default"]="default";s["Borderless"]="borderless"})(Ct||(Ct={}));var Tt;(function(s){s["Left"]="left";s["Center"]="center";s["Right"]="right"})(Tt||(Tt={}));var Rt;(function(s){s["Action"]="action";s["DoubleClick"]="doubleClick"})(Rt||(Rt={}));var Et;(function(s){s["Auto"]="auto";s["Text"]="text";s["Number"]="number";s["Date"]="date";s["Textarea"]="textarea";s["Checkbox"]="checkbox";s["Toggle"]="toggle";s["Select"]="select"})(Et||(Et={}));var At;(function(s){s["Neutral"]="neutral";s["Success"]="success";s["Warning"]="warning";s["Risk"]="risk";s["Primary"]="primary";s["Danger"]="danger";s["Info"]="info"})(At||(At={}));var Dt;(function(s){s["Standalone"]="standalone";s["Builder"]="builder"})(Dt||(Dt={}));var Mt;(function(s){s["Navigate"]="navigate";s["DataSource"]="dataSource";s["Toast"]="toast";s["Dialog"]="dialog";s["SetValue"]="setValue";s["SetElementProperty"]="setElementProperty";s["TransitionProcess"]="transitionProcess";s["SetProcessState"]="setProcessState";s["RefreshRuntimeVariables"]="refreshRuntimeVariables"})(Mt||(Mt={}));var It;(function(s){s["BeforeLoad"]="beforeLoad";s["OnLoad"]="onLoad";s["AfterLoad"]="afterLoad";s["ValueChanged"]="valueChanged";s["PageChanged"]="pageChanged";s["DialogClosed"]="dialogClosed";s["Validated"]="validated";s["Completed"]="completed";s["SaveRequested"]="saveRequested"})(It||(It={}));var Vt;(function(s){s["Init"]="init";s["Change"]="change";s["Manual"]="manual";s["Always"]="always"})(Vt||(Vt={}));var Pt;(function(s){s["Default"]="default";s["Runtime"]="runtime"})(Pt||(Pt={}));const Pl="";const Nl=[{label:"Application locale",value:""},{label:"English (United States) - en-US",value:"en-US"},{label:"English (United Kingdom) - en-GB",value:"en-GB"},{label:"German (Germany) - de-DE",value:"de-DE"},{label:"French (France) - fr-FR",value:"fr-FR"},{label:"Spanish (Spain) - es-ES",value:"es-ES"},{label:"Italian (Italy) - it-IT",value:"it-IT"},{label:"Polish (Poland) - pl-PL",value:"pl-PL"},{label:"Lithuanian (Lithuania) - lt-LT",value:"lt-LT"},{label:"Latvian (Latvia) - lv-LV",value:"lv-LV"},{label:"Estonian (Estonia) - et-EE",value:"et-EE"},{label:"Dutch (Netherlands) - nl-NL",value:"nl-NL"},{label:"Swedish (Sweden) - sv-SE",value:"sv-SE"},{label:"Norwegian Bokmal (Norway) - nb-NO",value:"nb-NO"},{label:"Danish (Denmark) - da-DK",value:"da-DK"},{label:"Finnish (Finland) - fi-FI",value:"fi-FI"},{label:"Portuguese (Portugal) - pt-PT",value:"pt-PT"},{label:"Portuguese (Brazil) - pt-BR",value:"pt-BR"},{label:"Czech (Czechia) - cs-CZ",value:"cs-CZ"},{label:"Slovak (Slovakia) - sk-SK",value:"sk-SK"},{label:"Ukrainian (Ukraine) - uk-UA",value:"uk-UA"},{label:"Russian (Russia) - ru-RU",value:"ru-RU"},{label:"Chinese (China) - zh-CN",value:"zh-CN"},{label:"Japanese (Japan) - ja-JP",value:"ja-JP"}];var zl=class{value;label};function Bl(s={}){gn(s);return _e([])}var Z=class Qt{previewRendererService=g(H);structureService=g(j);dataService=g(O);uiTranslationService=g(ee);entries=new Map;entryNames=new Map;entryRows=new Map;entryColumns=new Map;rebuildScheduled=false;pendingData={};hasHostData=false;language="";contentTranslations=null;autoNameCounter=0;register(e,t){this.entries.set(e,t);this.entryRows.set(e,t);this.scheduleRebuild()}unregister(e){this.entryNames.delete(e);this.entryRows.delete(e);this.entryColumns.delete(e);if(!this.entries.delete(e))return;this.scheduleRebuild()}setData(e){this.hasHostData=true;this.pendingData=e&&typeof e==="object"?{...e}:{};this.dataService.setData({...this.pendingData});if(this.entries.size===0)return;this.previewRendererService.applyInitialData();this.previewRendererService.applyDependencies();this.previewRendererService.applyExpressions()}setLanguage(e){const t=String(e??"").trim();if(t===this.language)return;this.language=t;if(t)this.uiTranslationService.setLanguage(t);this.scheduleRebuild()}setContentTranslations(e){this.contentTranslations=e&&typeof e==="object"?e:null;this.scheduleRebuild()}getData(){return this.dataService.getData()??{}}getName(e){return this.entryNames.get(e)??""}scheduleRebuild(){if(this.rebuildScheduled)return;this.rebuildScheduled=true;queueMicrotask(()=>{this.rebuildScheduled=false;this.rebuild()})}rebuild(){if(this.entries.size===0)return;M.isEditor.set(false);const e={};this.entryNames.clear();this.entries.forEach((o,i)=>{const r=this.resolveName(i,e);this.entryNames.set(i,r);e[r]={...i.config,name:r,type:i.type}});const t=Object.keys(this.contentTranslations??{});const n={schemaVersion:1,settings:this.language?{language:this.language}:{},localization:this.contentTranslations?{defaultLanguage:this.language||t[0]||"en",languages:t,texts:this.contentTranslations}:void 0,pages:[{name:"nvbScope",rows:[]}],elements:e};this.previewRendererService.toModel(n);if(this.hasHostData)this.dataService.setData({...this.pendingData});queueMicrotask(()=>{this.previewRendererService.applyInitialData();this.previewRendererService.applyDependencies();this.previewRendererService.applyExpressions()});this.buildColumns();this.entryRows.forEach((o,i)=>{if(i.parent){o.set([]);return}const r=this.entryColumns.get(i)??null;o.set(r?[new me({parentIndex:0,columns:[r]})]:[])})}buildColumns(){this.entryColumns.clear();const e=t=>{const n=[];const o=new Map;this.entries.forEach((a,c)=>{if(c.parent!==t)return;const b=e(c);const v=String(c.tabValue??"").trim();if(!v){n.push(b);return}const d=o.get(v)??[];d.push(b);o.set(v,d)});const i=n.length>0?[new me({parentIndex:0,columns:n})]:[];const r=new vn({elementRef:this.entryNames.get(t)??"",parentIndex:0,rows:i});if(o.size>0){const a={};o.forEach((c,b)=>{a[b]=[new me({parentIndex:0,columns:c})]});r.tabRows=a;r.rows=a[o.keys().next().value]}this.entryColumns.set(t,r);return r};this.entries.forEach((t,n)=>{if(!n.parent)e(n)})}resolveName(e,t){const n=String(e.config?.["name"]??"").trim();if(n&&!t[n])return n;if(n)console.warn(`[NgxViewBuilder] Two elements in the same scope are named "${n}". The second one was renamed, and any expression pointing at that name will resolve to the first.`);let o=`nvbElement${++this.autoNameCounter}`;while(t[o])o=`nvbElement${++this.autoNameCounter}`;return o}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Qt,deps:[],target:l.ɵɵFactoryTarget.Injectable});static ɵprov=l.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Qt,providedIn:"root"})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Z,decorators:[{type:q,args:[{providedIn:"root"}]}]});var Nt=class en{data=ll({},...ngDevMode?[{debugName:"data"}]:[]);language=p(null,...ngDevMode?[{debugName:"language"}]:[]);translations=p(null,...ngDevMode?[{debugName:"translations"}]:[]);context=g(Z);dataService=g(O);disposeDataSubscription;constructor(){S(()=>{const t=this.data();if(Nn(t,this.context.getData()))return;this.context.setData(t)});S(()=>{this.context.setLanguage(this.language())});S(()=>{this.context.setContentTranslations(this.translations())});const e=()=>{const t={...this.context.getData()};if(Nn(t,this.data()))return;this.data.set(t)};this.dataService.onDataMutated.add(e);this.disposeDataSubscription=()=>this.dataService.onDataMutated.remove(e)}ngOnDestroy(){this.disposeDataSubscription()}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:en,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.1.0",version:"22.2.1",type:en,isStandalone:true,selector:"nvb-scope",inputs:{data:{classPropertyName:"data",publicName:"data",isSignal:true,isRequired:false,transformFunction:null},language:{classPropertyName:"language",publicName:"language",isSignal:true,isRequired:false,transformFunction:null},translations:{classPropertyName:"translations",publicName:"translations",isSignal:true,isRequired:false,transformFunction:null}},outputs:{data:"dataChange"},host:{classAttribute:"nvb-root"},providers:[...Y,Z],ngImport:l,template:"<ng-content />",isInline:true,styles:[":host{display:block}\n"],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Nt,decorators:[{type:A,args:[{selector:"nvb-scope",host:{class:"nvb-root"},changeDetection:E.OnPush,template:"<ng-content />",providers:[...Y,Z],styles:[":host{display:block}\n"]}]}],ctorParameters:()=>[],propDecorators:{data:[{type:l.Input,args:[{isSignal:true,alias:"data",required:false}]},{type:l.Output,args:["dataChange"]}],language:[{type:l.Input,args:[{isSignal:true,alias:"language",required:false}]}],translations:[{type:l.Input,args:[{isSignal:true,alias:"translations",required:false}]}]}});const Fl=new Set([_.PANEL,_.OBJECT_PANEL,_.TABS,_.TABS_PRO,_.ACCORDION,_.PROGRESS_FLOW,_.SPLITTER,_.DIALOG,_.EMPTY_BLOCK]);var Me=class tn{rows=p.required(...ngDevMode?[{debugName:"rows"}]:[]);structureService=g(j);eventService=g(L);propertyVersion=h(0,...ngDevMode?[{debugName:"propertyVersion"}]:[]);onPropertyChangedHandler=()=>{this.propertyVersion.update(e=>e+1)};constructor(){this.eventService.afterPropertyChanged.add(this.onPropertyChangedHandler)}ngOnDestroy(){this.eventService.afterPropertyChanged.remove(this.onPropertyChangedHandler)}getElement(e){this.propertyVersion();const t=String(e??"").trim();if(!t)return null;return this.structureService.flatModelMap[t]??this.structureService.getPreviewElement(t)??null}isContainer(e){return Fl.has(String(e??"").trim())}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:tn,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:tn,isStandalone:true,selector:"nvb-rows",inputs:{rows:{classPropertyName:"rows",publicName:"rows",isSignal:true,isRequired:true,transformFunction:null}},ngImport:l,template:"\n <ng-template #rowsTemplate let-rows=\"rows\">\n @for (row of rows; track $index) {\n <div class=\"nvb-rows__row\">\n @for (column of row.columns; track column.elementRef) {\n @let element = getElement(column.elementRef);\n @if (element) {\n <div class=\"nvb-rows__column\" [style.display]=\"element.hidden ? 'none' : null\">\n @if (isContainer(element.type)) {\n <runtime-container-outlet\n [model]=\"element\"\n [column]=\"column\"\n [rowsTemplate]=\"rowsTemplate\"\n [projectedContext]=\"{ rows: column.rows, parentElement: element }\"\n />\n } @else {\n <runtime-lazy-element-outlet [model]=\"element\" />\n }\n </div>\n }\n }\n </div>\n }\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"rowsTemplate; context: { rows: rows() }\" />\n ",isInline:true,styles:[":host{display:block}.nvb-rows__row{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--nvb-row-gap, 8px);width:100%}.nvb-rows__column{flex:1 1 auto;min-width:0}\n"],dependencies:[{kind:"directive",type:F,selector:"[ngTemplateOutlet]",inputs:["ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector"]},{kind:"component",type:le,selector:"runtime-container-outlet",inputs:["model","column","pageRows","pageIsEmpty","isMobileView","rowsTemplate","projectedContext"]},{kind:"component",type:J,selector:"runtime-lazy-element-outlet",inputs:["model"]}],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Me,decorators:[{type:A,args:[{selector:"nvb-rows",changeDetection:E.OnPush,imports:[F,le,J],template:"\n <ng-template #rowsTemplate let-rows=\"rows\">\n @for (row of rows; track $index) {\n <div class=\"nvb-rows__row\">\n @for (column of row.columns; track column.elementRef) {\n @let element = getElement(column.elementRef);\n @if (element) {\n <div class=\"nvb-rows__column\" [style.display]=\"element.hidden ? 'none' : null\">\n @if (isContainer(element.type)) {\n <runtime-container-outlet\n [model]=\"element\"\n [column]=\"column\"\n [rowsTemplate]=\"rowsTemplate\"\n [projectedContext]=\"{ rows: column.rows, parentElement: element }\"\n />\n } @else {\n <runtime-lazy-element-outlet [model]=\"element\" />\n }\n </div>\n }\n }\n </div>\n }\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"rowsTemplate; context: { rows: rows() }\" />\n ",styles:[":host{display:block}.nvb-rows__row{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--nvb-row-gap, 8px);width:100%}.nvb-rows__column{flex:1 1 auto;min-width:0}\n"]}]}],ctorParameters:()=>[],propDecorators:{rows:[{type:l.Input,args:[{isSignal:true,alias:"rows",required:true}]}]}});var zt=class nn{value=p.required(...ngDevMode?[{debugName:"value"}]:[]);static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:nn,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.1.0",version:"22.2.1",type:nn,isStandalone:true,selector:"nvb-tab",inputs:{value:{classPropertyName:"value",publicName:"value",isSignal:true,isRequired:true,transformFunction:null}},ngImport:l,template:"<ng-content />",isInline:true,styles:[":host{display:contents}\n"],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:zt,decorators:[{type:A,args:[{selector:"nvb-tab",changeDetection:E.OnPush,template:"<ng-content />",styles:[":host{display:contents}\n"]}]}],propDecorators:{value:[{type:l.Input,args:[{isSignal:true,alias:"value",required:true}]}]}});var Zn=class Ve{type=p.required(...ngDevMode?[{debugName:"type"}]:[]);config=p({},...ngDevMode?[{debugName:"config"}]:[]);action=w();valueChange=w();rows=h([],...ngDevMode?[{debugName:"rows"}]:[]);context=g(Z);scope=g(Nt,{optional:true});parent=g(Ve,{optional:true,skipSelf:true});tab=g(zt,{optional:true,skipSelf:true});entry={type:"",config:{},parent:this.parent?.entry??null,tabValue:null};elementActionService=g(he);dataService=g(O);hostRef=g(Ze);iconSvgService=g(Oe);iconObserver=null;renderingIcons=false;onDataMutatedHandler=e=>{const t=this.context.getName(this.entry);if(!t||String(e?.dataPath??"").trim()!==t)return;this.valueChange.emit({name:t,value:e?.newValue,previousValue:e?.oldValue})};onActionRunHandler=e=>{const t=this.context.getName(this.entry);const n=String(e?.element?.name??"").trim();if(!t||n!==t)return;this.action.emit(e)};constructor(){S(()=>{this.entry.type=this.type();this.entry.config=this.config()??{};this.entry.tabValue=this.tab?String(this.tab.value()??"").trim()||null:null;this.context.register(this.entry,this.rows)});this.elementActionService.onActionRun.add(this.onActionRunHandler);this.dataService.onDataMutated.add(this.onDataMutatedHandler)}ngAfterViewInit(){if(this.parent||typeof MutationObserver==="undefined")return;this.iconObserver=new MutationObserver(()=>this.renderIcons());this.iconObserver.observe(this.hostRef.nativeElement,{subtree:true,childList:true});this.renderIcons()}ngOnDestroy(){this.elementActionService.onActionRun.remove(this.onActionRunHandler);this.dataService.onDataMutated.remove(this.onDataMutatedHandler);this.context.unregister(this.entry);this.iconObserver?.disconnect();this.iconObserver=null}renderIcons(){if(this.renderingIcons)return;this.renderingIcons=true;const e=this.hostRef.nativeElement;this.iconObserver?.disconnect();try{this.iconSvgService.applyLegacyMaterialIcons(e);this.iconSvgService.applyIconSlots(e)}finally{this.iconObserver?.observe(e,{subtree:true,childList:true});this.renderingIcons=false}}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Ve,deps:[],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:Ve,isStandalone:true,selector:"nvb-element",inputs:{type:{classPropertyName:"type",publicName:"type",isSignal:true,isRequired:true,transformFunction:null},config:{classPropertyName:"config",publicName:"config",isSignal:true,isRequired:false,transformFunction:null}},outputs:{action:"action",valueChange:"valueChange"},host:{properties:{"class.nvb-root":"!scope"}},ngImport:l,template:"\n @if (rows().length > 0) {\n <nvb-rows [rows]=\"rows()\" />\n }\n <!-- Children are declarations, not output. They register themselves and render nothing. -->\n <ng-content />\n ",isInline:true,styles:[":host{display:block}\n"],dependencies:[{kind:"component",type:Me,selector:"nvb-rows",inputs:["rows"]}],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Zn,decorators:[{type:A,args:[{selector:"nvb-element",host:{"[class.nvb-root]":"!scope"},changeDetection:E.OnPush,imports:[Me],template:"\n @if (rows().length > 0) {\n <nvb-rows [rows]=\"rows()\" />\n }\n <!-- Children are declarations, not output. They register themselves and render nothing. -->\n <ng-content />\n ",styles:[":host{display:block}\n"]}]}],ctorParameters:()=>[],propDecorators:{type:[{type:l.Input,args:[{isSignal:true,alias:"type",required:true}]}],config:[{type:l.Input,args:[{isSignal:true,alias:"config",required:false}]}],action:[{type:l.Output,args:["action"]}],valueChange:[{type:l.Output,args:["valueChange"]}]}});var Qn=class on{elementFocusService;eventService;dragAndDropService;elementHoverService=g(En);model=p(...ngDevMode?[void 0,{debugName:"model"}]:[]);tid=qe(this.model,"nvb-page","page");pageRows=p(null,...ngDevMode?[{debugName:"pageRows"}]:[]);pageIsEmpty=p(false,...ngDevMode?[{debugName:"pageIsEmpty"}]:[]);isEditor=p(true,...ngDevMode?[{debugName:"isEditor"}]:[]);isMobileView=p(false,...ngDevMode?[{debugName:"isMobileView"}]:[]);focusedElementName=h(null,...ngDevMode?[{debugName:"focusedElementName"}]:[]);hoveredElementKey=this.elementHoverService.hoveredElementKey;hoveredElementName=null;onElementFocusHandler=e=>{this.focusedElementName.set(this.resolveFocusKey(e.payload))};constructor(e,t,n){this.elementFocusService=e;this.eventService=t;this.dragAndDropService=n}ngOnInit(){this.eventService.onElementFocus.add(this.onElementFocusHandler)}ngOnDestroy(){this.eventService.onElementFocus.remove(this.onElementFocusHandler)}onFocus(e){if(!this.isEditor())return;this.elementFocusService.setFocus(this.model());this.focusedElementName.set(this.resolveFocusKey(this.model()))}resolveFocusKey(e){return Ke(e)}isSelected(){return this.isEditor()&&this.focusedElementName()===this.resolveFocusKey(this.model())}onChromeMouseDown(e){e.stopPropagation()}requestPageAction(e,t){t.stopPropagation();const n=String(this.model()?.name??"").trim();if(n)this.eventService.onPageActionRequested.fire({payload:{action:e,pageName:n}})}onMouseOver(e){if(!this.isEditor())return;if(e.target?.closest("column"))return;this.elementHoverService.setHover(this.model())}onMouseLeave(){this.elementHoverService.clearHover(this.model())}onDragOver(e){e.preventDefault();this.hoveredElementName=this.model().uuid}onDragLeav(e){e.preventDefault();this.hoveredElementName=null}onDrop(e){e.preventDefault();this.dragAndDropService.onRowDrop(e,null,0,this.pageRows(),"top");this.hoveredElementName=null}pageStyle(){const e=this.normalizeCssSize(String(this.model()?.["pagePadding"]??"").trim());const t=this.normalizeCssSize(String(this.model()?.["mobilePadding"]??"").trim());return{padding:this.isMobileView()||this.isRealMobileViewport()?t||e:e,"background-color":String(this.model()?.["pageBackgroundColor"]??"").trim()||null}}normalizeCssSize(e){if(!e)return null;if(/^-?\d+(\.\d+)?$/.test(e))return`${e}px`;return e}isRealMobileViewport(){if(typeof window==="undefined"||typeof window.matchMedia!=="function")return false;return ne()}static ɵfac=l.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:on,deps:[{token:ie},{token:L},{token:oe}],target:l.ɵɵFactoryTarget.Component});static ɵcmp=l.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:on,isStandalone:true,selector:"page-element",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:false,transformFunction:null},pageRows:{classPropertyName:"pageRows",publicName:"pageRows",isSignal:true,isRequired:false,transformFunction:null},pageIsEmpty:{classPropertyName:"pageIsEmpty",publicName:"pageIsEmpty",isSignal:true,isRequired:false,transformFunction:null},isEditor:{classPropertyName:"isEditor",publicName:"isEditor",isSignal:true,isRequired:false,transformFunction:null},isMobileView:{classPropertyName:"isMobileView",publicName:"isMobileView",isSignal:true,isRequired:false,transformFunction:null}},host:{properties:{"attr.data-nvb-element-name":"model()?.name || null","attr.data-nvb-data-path":"model()?.dataPath || null","attr.data-nvb-element-type":"model()?.type || null","attr.data-testid":"(model()?.dataPath || model()?.name) ? 'nvb-element-' + (model()?.dataPath || model()?.name) : null"}},ngImport:l,template:"<div\n class=\"nvb-page\"\n (focus)=\"onFocus(model().name)\"\n (mouseover)=\"onMouseOver($event)\"\n (mouseleave)=\"onMouseLeave()\"\n [tabindex]=\"0\"\n [attr.data-testid]=\"tid('root')\"\n [class.nvb-page-backgraund]=\"!model().removeBackgraund\"\n [class.nvb-page--editor]=\"isEditor()\"\n [ngStyle]=\"pageStyle()\"\n [ngClass]=\"{\n 'nvb-page--focused': focusedElementName() === resolveFocusKey(model()),\n 'nvb-page--hovered':\n hoveredElementKey() === resolveFocusKey(model()) &&\n focusedElementName() !== resolveFocusKey(model()),\n }\"\n>\n @if (isSelected()) {\n <div class=\"nvb-page-chrome\" (mousedown)=\"onChromeMouseDown($event)\" [attr.data-testid]=\"tid('chrome')\">\n <span class=\"nvb-page-chrome__tag\">\n <span>{{ 'element.page' | uiT: 'Page' }}</span>\n <span class=\"nvb-page-chrome__name\">{{ model().name }}</span>\n </span>\n <span class=\"nvb-page-chrome__actions\">\n <button\n type=\"button\"\n class=\"nvb-page-chrome__button\"\n (click)=\"requestPageAction('duplicate', $event)\"\n [attr.aria-label]=\"'builder.duplicatePage' | uiT: 'Duplicate page'\"\n [title]=\"'builder.duplicatePage' | uiT: 'Duplicate page'\"\n [attr.data-testid]=\"tid('duplicate')\"\n >\n <nvb-icon name=\"content_copy\"></nvb-icon>\n </button>\n <button\n type=\"button\"\n class=\"nvb-page-chrome__button nvb-page-chrome__button--danger\"\n (click)=\"requestPageAction('delete', $event)\"\n [attr.aria-label]=\"'builder.deletePage' | uiT: 'Delete page'\"\n [title]=\"'builder.deletePage' | uiT: 'Delete page'\"\n [attr.data-testid]=\"tid('delete')\"\n >\n <nvb-icon name=\"delete\"></nvb-icon>\n </button>\n </span>\n </div>\n }\n @if (!model().hideHeader) {\n <header class=\"nvb-page__header\">\n @if (model().label) {\n <h4 class=\"nvb-page__header-title\">{{ model().label | dynamicText: model() }}</h4>\n }\n @if (model()['description']) {\n <p class=\"nvb-page__header-description\">\n {{ model()['description'] | dynamicText: model() }}\n </p>\n }\n </header>\n }\n @if (pageIsEmpty()) {\n <div class=\"nvb-page__content\">\n <ng-content></ng-content>\n </div>\n } @else {\n <div\n class=\"nvb-empty-page\"\n role=\"region\"\n [attr.aria-label]=\"\n 'page.emptyBuilder' | uiT: 'This page is empty. Double-click an element on the left to add it, or drag it here.'\n \"\n [ngClass]=\"{ 'nvb-top-drop-zone--overlay': hoveredElementName === model().name }\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeav($event)\"\n (drop)=\"onDrop($event)\"\n [attr.data-testid]=\"tid('empty')\"\n >\n <span class=\"material-symbols-outlined nvb-empty-page__icon\">note_stack_add </span>\n <p class=\"nvb-empty-page__text\">\n {{ 'page.emptyBuilder' | uiT: 'This page is empty. Double-click an element on the left to add it, or drag it here.' }}\n </p>\n <span class=\"nvb-sr-only\">\n {{\n 'builder.dropHint'\n | uiT\n : 'Drop an element here. In the builder, use keyboard focus and contextual actions when drag and drop is not convenient.'\n }}\n </span>\n </div>\n }\n</div>\n",styles:[".nvb-page{padding:var(--nvb-page-padding, 12px);margin-bottom:var(--nvb-page-margin-bottom, 25px);display:flex;flex-direction:column;gap:var(--nvb-page-gap, 8px);border-radius:var(--nvb-page-radius, var(--nvb-radius-md));position:relative;border:1px solid transparent;transition:border-color .12s ease,box-shadow .12s ease}.nvb-page__header{display:var(--nvb-page-header-display, block)}.nvb-page__header-title{color:var(--nvb-color-neutral-900);font-size:var(--nvb-text-subtitle2);line-height:22px}.nvb-page__header-description{color:color-mix(in oklab,var(--nvb-color-neutral-600) 84%,var(--nvb-color-surface-mix-target, white));font-size:var(--nvb-text-body1);line-height:20px}.nvb-page__footer{display:flex;justify-content:space-between}.nvb-page__footer-action{display:flex;justify-content:end;align-items:center;gap:15px}.nvb-page--focused{outline:2px solid var(--nvb-color-primary-500);outline-offset:2px}.nvb-page--editor.nvb-page--hovered:not(.nvb-page--focused){border-color:color-mix(in oklab,var(--nvb-color-neutral-300) 82%,var(--nvb-color-neutral-400));box-shadow:0 0 0 1px color-mix(in oklab,var(--nvb-color-neutral-300) 38%,transparent)}.nvb-page__content{display:flex;flex-wrap:wrap;z-index:1;padding:var(--nvb-page-content-padding, 4px)}.nvb-page-backgraund{background-color:var(--nvb-page-surface, color-mix(in oklab, var(--nvb-color-neutral-000) 90%, var(--nvb-color-neutral-050)));border:1px solid var(--nvb-page-border-color, color-mix(in oklab, var(--nvb-color-neutral-300) 78%, var(--nvb-color-surface-mix-target, white)))}.nvb-empty-page{background-color:var(--nvb-color-neutral-050);padding:50px;display:flex;justify-content:center;align-items:center;flex-direction:column;gap:8px;border:1px solid var(--nvb-color-neutral-200)}.nvb-empty-page__icon{font-size:60px;color:var(--nvb-color-neutral-600)}.nvb-empty-page__text{color:var(--nvb-color-neutral-600);font-size:var(--nvb-text-body1);line-height:20px}.nvb-empty-page.nvb-top-drop-zone--overlay{border-color:var(--nvb-color-primary-500);background-color:color-mix(in oklab,var(--nvb-color-primary-050) 58%,var(--nvb-color-neutral-050));box-shadow:inset 0 0 0 2px color-mix(in oklab,var(--nvb-color-primary-500) 42%,transparent)}.nvb-page-chrome{position:absolute;top:0;left:10px;right:10px;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:8px;transform:translateY(calc(-100% + 5px));pointer-events:none}.nvb-page-chrome>*{pointer-events:auto}.nvb-page-chrome__tag{display:inline-flex;align-items:baseline;gap:5px;max-width:60%;overflow:hidden;padding:1px 6px;border-radius:var(--nvb-radius-sm);background:var(--nvb-color-primary-500);color:var(--nvb-color-neutral-000, #fff);font-size:10.5px;font-weight:600;line-height:14px;white-space:nowrap}.nvb-page-chrome__name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:500;opacity:.78;overflow:hidden;text-overflow:ellipsis}.nvb-page-chrome__actions{margin-left:auto;display:inline-flex;gap:1px;padding:1px;border:1px solid color-mix(in oklab,var(--nvb-color-primary-500) 35%,var(--nvb-color-neutral-200));border-radius:var(--nvb-radius-md);background:var(--nvb-color-neutral-000);box-shadow:0 1px 3px color-mix(in oklab,var(--nvb-color-neutral-900) 10%,transparent)}.nvb-page-chrome__button{width:20px;height:20px;display:inline-grid;place-items:center;padding:0;border:0;border-radius:var(--nvb-radius-sm);background:transparent;color:var(--nvb-color-neutral-500);font-size:14px;cursor:pointer}.nvb-page-chrome__button:hover{background:var(--nvb-color-neutral-100);color:var(--nvb-color-neutral-900)}.nvb-page-chrome__button:focus-visible{outline:2px solid var(--nvb-color-primary-500);outline-offset:-1px}.nvb-page-chrome__button--danger:hover{background:color-mix(in oklab,var(--nvb-color-risk-500, #ef4444) 12%,transparent);color:var(--nvb-color-risk-700, #b91c1c)}\n"],dependencies:[{kind:"directive",type:K,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:B,selector:"[ngStyle]",inputs:["ngStyle"]},{kind:"component",type:$,selector:"nvb-icon",inputs:["name","svg","ariaLabel"]},{kind:"pipe",type:V,name:"uiT"},{kind:"pipe",type:I,name:"dynamicText"}],changeDetection:l.ChangeDetectionStrategy.OnPush})};l.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:l,type:Qn,decorators:[{type:A,args:[{selector:"page-element",changeDetection:E.OnPush,imports:[K,B,V,I,$],host:{...we},template:"<div\n class=\"nvb-page\"\n (focus)=\"onFocus(model().name)\"\n (mouseover)=\"onMouseOver($event)\"\n (mouseleave)=\"onMouseLeave()\"\n [tabindex]=\"0\"\n [attr.data-testid]=\"tid('root')\"\n [class.nvb-page-backgraund]=\"!model().removeBackgraund\"\n [class.nvb-page--editor]=\"isEditor()\"\n [ngStyle]=\"pageStyle()\"\n [ngClass]=\"{\n 'nvb-page--focused': focusedElementName() === resolveFocusKey(model()),\n 'nvb-page--hovered':\n hoveredElementKey() === resolveFocusKey(model()) &&\n focusedElementName() !== resolveFocusKey(model()),\n }\"\n>\n @if (isSelected()) {\n <div class=\"nvb-page-chrome\" (mousedown)=\"onChromeMouseDown($event)\" [attr.data-testid]=\"tid('chrome')\">\n <span class=\"nvb-page-chrome__tag\">\n <span>{{ 'element.page' | uiT: 'Page' }}</span>\n <span class=\"nvb-page-chrome__name\">{{ model().name }}</span>\n </span>\n <span class=\"nvb-page-chrome__actions\">\n <button\n type=\"button\"\n class=\"nvb-page-chrome__button\"\n (click)=\"requestPageAction('duplicate', $event)\"\n [attr.aria-label]=\"'builder.duplicatePage' | uiT: 'Duplicate page'\"\n [title]=\"'builder.duplicatePage' | uiT: 'Duplicate page'\"\n [attr.data-testid]=\"tid('duplicate')\"\n >\n <nvb-icon name=\"content_copy\"></nvb-icon>\n </button>\n <button\n type=\"button\"\n class=\"nvb-page-chrome__button nvb-page-chrome__button--danger\"\n (click)=\"requestPageAction('delete', $event)\"\n [attr.aria-label]=\"'builder.deletePage' | uiT: 'Delete page'\"\n [title]=\"'builder.deletePage' | uiT: 'Delete page'\"\n [attr.data-testid]=\"tid('delete')\"\n >\n <nvb-icon name=\"delete\"></nvb-icon>\n </button>\n </span>\n </div>\n }\n @if (!model().hideHeader) {\n <header class=\"nvb-page__header\">\n @if (model().label) {\n <h4 class=\"nvb-page__header-title\">{{ model().label | dynamicText: model() }}</h4>\n }\n @if (model()['description']) {\n <p class=\"nvb-page__header-description\">\n {{ model()['description'] | dynamicText: model() }}\n </p>\n }\n </header>\n }\n @if (pageIsEmpty()) {\n <div class=\"nvb-page__content\">\n <ng-content></ng-content>\n </div>\n } @else {\n <div\n class=\"nvb-empty-page\"\n role=\"region\"\n [attr.aria-label]=\"\n 'page.emptyBuilder' | uiT: 'This page is empty. Double-click an element on the left to add it, or drag it here.'\n \"\n [ngClass]=\"{ 'nvb-top-drop-zone--overlay': hoveredElementName === model().name }\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeav($event)\"\n (drop)=\"onDrop($event)\"\n [attr.data-testid]=\"tid('empty')\"\n >\n <span class=\"material-symbols-outlined nvb-empty-page__icon\">note_stack_add </span>\n <p class=\"nvb-empty-page__text\">\n {{ 'page.emptyBuilder' | uiT: 'This page is empty. Double-click an element on the left to add it, or drag it here.' }}\n </p>\n <span class=\"nvb-sr-only\">\n {{\n 'builder.dropHint'\n | uiT\n : 'Drop an element here. In the builder, use keyboard focus and contextual actions when drag and drop is not convenient.'\n }}\n </span>\n </div>\n }\n</div>\n",styles:[".nvb-page{padding:var(--nvb-page-padding, 12px);margin-bottom:var(--nvb-page-margin-bottom, 25px);display:flex;flex-direction:column;gap:var(--nvb-page-gap, 8px);border-radius:var(--nvb-page-radius, var(--nvb-radius-md));position:relative;border:1px solid transparent;transition:border-color .12s ease,box-shadow .12s ease}.nvb-page__header{display:var(--nvb-page-header-display, block)}.nvb-page__header-title{color:var(--nvb-color-neutral-900);font-size:var(--nvb-text-subtitle2);line-height:22px}.nvb-page__header-description{color:color-mix(in oklab,var(--nvb-color-neutral-600) 84%,var(--nvb-color-surface-mix-target, white));font-size:var(--nvb-text-body1);line-height:20px}.nvb-page__footer{display:flex;justify-content:space-between}.nvb-page__footer-action{display:flex;justify-content:end;align-items:center;gap:15px}.nvb-page--focused{outline:2px solid var(--nvb-color-primary-500);outline-offset:2px}.nvb-page--editor.nvb-page--hovered:not(.nvb-page--focused){border-color:color-mix(in oklab,var(--nvb-color-neutral-300) 82%,var(--nvb-color-neutral-400));box-shadow:0 0 0 1px color-mix(in oklab,var(--nvb-color-neutral-300) 38%,transparent)}.nvb-page__content{display:flex;flex-wrap:wrap;z-index:1;padding:var(--nvb-page-content-padding, 4px)}.nvb-page-backgraund{background-color:var(--nvb-page-surface, color-mix(in oklab, var(--nvb-color-neutral-000) 90%, var(--nvb-color-neutral-050)));border:1px solid var(--nvb-page-border-color, color-mix(in oklab, var(--nvb-color-neutral-300) 78%, var(--nvb-color-surface-mix-target, white)))}.nvb-empty-page{background-color:var(--nvb-color-neutral-050);padding:50px;display:flex;justify-content:center;align-items:center;flex-direction:column;gap:8px;border:1px solid var(--nvb-color-neutral-200)}.nvb-empty-page__icon{font-size:60px;color:var(--nvb-color-neutral-600)}.nvb-empty-page__text{color:var(--nvb-color-neutral-600);font-size:var(--nvb-text-body1);line-height:20px}.nvb-empty-page.nvb-top-drop-zone--overlay{border-color:var(--nvb-color-primary-500);background-color:color-mix(in oklab,var(--nvb-color-primary-050) 58%,var(--nvb-color-neutral-050));box-shadow:inset 0 0 0 2px color-mix(in oklab,var(--nvb-color-primary-500) 42%,transparent)}.nvb-page-chrome{position:absolute;top:0;left:10px;right:10px;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:8px;transform:translateY(calc(-100% + 5px));pointer-events:none}.nvb-page-chrome>*{pointer-events:auto}.nvb-page-chrome__tag{display:inline-flex;align-items:baseline;gap:5px;max-width:60%;overflow:hidden;padding:1px 6px;border-radius:var(--nvb-radius-sm);background:var(--nvb-color-primary-500);color:var(--nvb-color-neutral-000, #fff);font-size:10.5px;font-weight:600;line-height:14px;white-space:nowrap}.nvb-page-chrome__name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:500;opacity:.78;overflow:hidden;text-overflow:ellipsis}.nvb-page-chrome__actions{margin-left:auto;display:inline-flex;gap:1px;padding:1px;border:1px solid color-mix(in oklab,var(--nvb-color-primary-500) 35%,var(--nvb-color-neutral-200));border-radius:var(--nvb-radius-md);background:var(--nvb-color-neutral-000);box-shadow:0 1px 3px color-mix(in oklab,var(--nvb-color-neutral-900) 10%,transparent)}.nvb-page-chrome__button{width:20px;height:20px;display:inline-grid;place-items:center;padding:0;border:0;border-radius:var(--nvb-radius-sm);background:transparent;color:var(--nvb-color-neutral-500);font-size:14px;cursor:pointer}.nvb-page-chrome__button:hover{background:var(--nvb-color-neutral-100);color:var(--nvb-color-neutral-900)}.nvb-page-chrome__button:focus-visible{outline:2px solid var(--nvb-color-primary-500);outline-offset:-1px}.nvb-page-chrome__button--danger:hover{background:color-mix(in oklab,var(--nvb-color-risk-500, #ef4444) 12%,transparent);color:var(--nvb-color-risk-700, #b91c1c)}\n"]}]}],ctorParameters:()=>[{type:ie},{type:L},{type:oe}],propDecorators:{model:[{type:l.Input,args:[{isSignal:true,alias:"model",required:false}]}],pageRows:[{type:l.Input,args:[{isSignal:true,alias:"pageRows",required:false}]}],pageIsEmpty:[{type:l.Input,args:[{isSignal:true,alias:"pageIsEmpty",required:false}]}],isEditor:[{type:l.Input,args:[{isSignal:true,alias:"isEditor",required:false}]}],isMobileView:[{type:l.Input,args:[{isSignal:true,alias:"isMobileView",required:false}]}]}});export{Fa as ALIGN_CLASS_MAP,Ma as ALIGN_CLASS_PREFIX,Pl as APPLICATION_LOCALE_VALUE,Sn as AccordionElement,Oo as AccordionModel,Cn as AiBuildRevealService,bn as ApplicationLocaleService,ar as AutocompleteModel,go as AvatarModel,Ha as BLOCK_TAGS,un as BUILT_IN_STRUCTURE_MIGRATIONS,di as BUILT_IN_TABLE_CELL_ELEMENT_TYPES,fo as BadgeModel,ko as BreadcrumbsModel,ce as BuilderModel,Lo as BuilderPageDisplayModeEnum,Vi as BuilderTabRegistryService,cr as ButtonModel,Ka as COLOR_CLASS_PREFIX,Ei as CURRENT_SCHEMA_VERSION,po as ChartModel,hr as CheckboxInputModel,zl as ChoiceModel,uo as ColumnFragmentModeEnum,vn as ColumnModel,na as ComponentRegistryService,G as ConfirmDialog,ra as CreatorStructureService,Ho as CustomHtmlModel,Yo as DATA_JSON_CAPABLE_ELEMENT_TYPES,Va as DEFAULT_FONT,qa as DEFAULT_FONT_CLASS,Wa as DEFAULT_HIGHLIGHT_COLOR,Pa as DEFAULT_LINE_HEIGHT_VALUE,ji as DEFAULT_MOBILE_BREAKPOINT,Na as DEFAULT_SIZE_CLASS,$a as DEFAULT_SIZE_VALUE,Oi as DEFAULT_TABLET_BREAKPOINT,ja as DEFAULT_TABLE_COLUMNS,Ba as DEFAULT_TABLE_ROWS,za as DEFAULT_TEXT_COLOR,O as DataService,li as DataSourceModel,ue as DataSourceService,Pr as DatePickerModel,nr as DateRangeModel,Fn as DialogDragController,ye as DialogElement,Ao as DialogModel,Ro as DividerModel,Ce as DomInstrumentationService,oe as DragAndDropService,kn as DragAutoScrollService,Qi as DynamicPanel,sr as DynamicPanelModel,jn as DynamicTableColumnModel,jr as DynamicTableModel,ml as DynamicTableRowColumnModel,I as DynamicTextPipe,xi as ELEMENT_ROW_CONTEXT_KEY,or as ELEMENT_ROW_SCOPE_PATH_KEY,pr as EN_UI_DICTIONARY,Lr as EXCLUDE_FROM_DATA_JSON_KEY,gt as ElementActionButtonToneEnum,pt as ElementActionButtonVariantEnum,mt as ElementActionDialogOperationEnum,wt as ElementActionResponseModeEnum,he as ElementActionService,yt as ElementActionSetValueModeEnum,ft as ElementActionToastPositionEnum,ht as ElementActionToastVariantEnum,dt as ElementActionTriggerEnum,ut as ElementActionTypeEnum,de as ElementBaseModel,Ye as ElementContentBox,Ge as ElementContentRow,wo as ElementDataSourceUseForEnum,Fr as ElementDefaultsService,Tr as ElementExecutionModeEnum,ie as ElementFocusService,En as ElementHoverService,_ as ElementTypesEnum,ta as ElementsService,Se as EmptyBlockElement,Go as EmptyBlockModel,L as EventService,pe as ExpressionService,Da as FONT_CLASS_MAP,Ga as FONT_CLASS_PREFIX,hn as FeaturePackRegistryService,Fo as FileUploadModel,lt as ForgeInitializerService,Za as HIGHLIGHT_CLASS_PREFIX,Ia as HIGHLIGHT_SWATCHES,Xa as HISTORY_COALESCE_MS,ti as HeaderModel,D as HeaderTabEnum,Sa as INDENT_CLASS_PREFIX,sa as INLINE_TAGS,co as IconModel,Oe as IconSvgService,Mo as IframeModel,oo as ImageModel,Ya as LEGACY_LINE_HEIGHT_CLASS_MAP,Xr as LEGACY_SCHEMA_VERSION,_a as LEGACY_SIZE_CLASS_MAP,ba as LINE_HEIGHT_CLASS_MAP,ca as LINE_HEIGHT_CLASS_PREFIX,ya as LINE_HEIGHT_OPTION_VALUES,Nl as LOCALE_CHOICES,lo as ListBoxModel,Uo as ListGridModel,fn as LocalizationService,Qr as MANAGED_STRUCTURE_SETTING_KEYS,La as MARK_TAG_MAP,aa as MAX_HISTORY_ENTRIES,Oa as MAX_INDENT_LEVEL,Fe as MarkupSecurityService,mo as MessageCardModel,Ne as ModelService,ir as MultiSelectInputModel,Ae as NGX_VIEW_BUILDER_AI_ACTION_TYPES,kl as NGX_VIEW_BUILDER_AI_API_VERSION,Ee as NGX_VIEW_BUILDER_AI_AUTOMATION_ACTION_TYPES,st as NGX_VIEW_BUILDER_AI_ROW_CONTAINERS,ct as NGX_VIEW_BUILDER_AI_TAB_CONTAINERS,$n as NGX_VIEW_BUILDER_AI_TEMPLATES_CAPABILITY,Re as NGX_VIEW_BUILDER_AI_VALIDATOR_TYPES,No as NGX_VIEW_BUILDER_ANY_ELEMENT_TYPE,Sl as NGX_VIEW_BUILDER_BRIDGE_PROTOCOL_VERSION,Gn as NGX_VIEW_BUILDER_HOSTED_MCP_URL,Jn as NGX_VIEW_BUILDER_MCP_KEY_TTL_MS,sn as NGX_VIEW_BUILDER_PROJECT_LAYER,Mr as NGX_VIEW_BUILDER_UI_TRANSLATIONS,Rr as NVB_TEXT_CONTEXT_KEY,On as NgxViewBuilder,Mi as NgxViewBuilderActionExecutorService,bt as NgxViewBuilderAiApiService,ho as NgxViewBuilderAlignEnum,P as NgxViewBuilderApiService,Mt as NgxViewBuilderAutomationActionTypeEnum,Xn as NgxViewBuilderAutomationService,Dt as NgxViewBuilderBuilderTabRenderModeEnum,$o as NgxViewBuilderChromePositionEnum,jo as NgxViewBuilderDataSourceTypeEnum,ui as NgxViewBuilderDialogCloseReasonEnum,_i as NgxViewBuilderExecutionReasonEnum,at as NgxViewBuilderHeadlessService,Jo as NgxViewBuilderInteractionStatusEnum,Yn as NgxViewBuilderMcpBridgeService,Do as NgxViewBuilderPageNavigationModeEnum,Pt as NgxViewBuilderPreviewModeEnum,ci as NgxViewBuilderProcessService,to as NgxViewBuilderRenderModeEnum,Di as NgxViewBuilderRenderPhaseEnum,X as NgxViewBuilderRenderer,gi as NgxViewBuilderRuleExecutedBranchEnum,Vt as NgxViewBuilderRuleRunModeEnum,hi as NgxViewBuilderRulesEngineService,Ln as NgxViewBuilderRuntime,mi as NgxViewBuilderSaveRequestedSourceEnum,Ri as NgxViewBuilderTableSettingsSourceEnum,tr as NgxViewBuilderThemeModeEnum,wi as NgxViewBuilderTriggerEngineService,It as NgxViewBuilderTriggerEventEnum,qn as NgxViewBuilderValidator,Vr as NgxViewBuilderWebsocketMessageModeEnum,so as NumberInputModel,dr as NumberStepperModel,Zn as NvbElement,Z as NvbElementContextService,$ as NvbIcon,Ja as NvbRichTextEditor,Me as NvbRows,Nt as NvbScope,He as NvbSelect,ia as NvbStyleOutlet,zt as NvbTab,Ir as ObjectPanelModel,Po as PHONE_COUNTRY_OPTIONS,ro as PHONE_COUNTRY_PROPERTY_CHOICES,Qn as PageElement,br as PageTitleModel,We as PanelElement,Qo as PanelModel,qr as PhoneInputModel,H as PreviewRendererService,Xo as ProgressBarModel,xe as ProgressFlowElement,Bo as ProgressFlowModel,fi as PropertyModel,fa as RICH_TEXT_DEFAULT_TOOLBAR_TOOLS,wa as RICH_TEXT_TOOLBAR_ICONS,xa as RICH_TEXT_TOOLBAR_TOOLS,va as ROOT_BLOCK_TAGS,_r as RadioInputModel,Be as RendererService,qo as RichTextModel,yo as RouterOutletModel,me as RowModel,W as RuntimeDynamicPanel,fr as RuntimeVariableSourceTypeEnum,fe as RuntimeVariablesService,xo as SINGLE_OBJECT_CONTAINER_TYPES,pa as SIZE_CLASS_MAP,ha as SIZE_CLASS_PREFIX,ka as SIZE_OPTION_VALUES,Qa as SPECIAL_CHARACTERS,no as SelectButtonModel,Wo as SelectInputModel,ai as SettingsModel,io as SignaturePadModel,er as SingleCheckboxModel,zr as SliderModel,_o as SpacerModel,ke as SplitterElement,xr as SplitterModel,M as StateService,vo as StatsCardModel,ei as StructureMigrationService,si as StructureModel,j as StructureService,la as TABLE_BORDER_CLASS_PREFIX,Ta as TABLE_CELL_BACKGROUND_SWATCHES,ua as TABLE_CELL_VALIGN_CLASS_MAP,Ca as TABLE_CELL_VALIGN_CLASS_PREFIX,Ra as TABLE_CLASS,da as TABLE_PICKER_COLUMNS,ma as TABLE_PICKER_ROWS,Ua as TASK_ITEM_CHECKED_CLASS,ga as TASK_ITEM_CLASS,Aa as TASK_ITEM_MARKER_WIDTH,Ea as TASK_LIST_CLASS,Io as TEMPLATE_CONTAINER_TYPES,Ii as TableCellElementRegistryService,Tt as TableColumnAlignEnum,_t as TableColumnCellActionsDisplayModeEnum,xt as TableColumnTypeEnum,kt as TableFilterControlTypeEnum,St as TableFilterOptionsSourceTypeEnum,Rt as TableInlineEditStartModeEnum,Et as TableInlineEditorTypeEnum,wr as TableModel,Ct as TableRowActionsDropdownButtonStyleEnum,At as TableStatusToneEnum,re as TabsElement,eo as TabsModel,hl as TabsProModel,Le as TemplateEngineService,Er as TemplateStorageModeEnum,Br as TextAreaModel,ao as TextInputModel,To as TimePickerModel,Cr as ToastModel,gr as ToggleSwitchModel,Ci as TooltipComponent,V as UiTranslatePipe,ee as UiTranslationService,te as ValidatorService,vt as ValueChangeTriggerEnum,Hr as VideoModel,ze as applyDynamicPanelRowNumberingContext,vi as applyElementRowContext,ln as applyRuntimeNumberingContext,pn as applyStructureMigrations,Je as applyViewportBreakpoints,it as bridgeNgxViewBuilderApiEvents,kr as buildElementRowRuntimeContext,Ke as buildFocusKey,Xe as buildResponsiveColumnStyle,oi as clearStructureMigrationNotice,Nr as cloneRecord,z as cloneValue,vr as collectElementNames,Si as composeCssSize,gn as configureStructureMigrations,qe as createElementTestId,Ar as createUuid,Ki as describeDragEvent,ni as describeElementModel,Wi as describeEventTarget,$i as describeMouseEvent,Xi as elements,$r as emptyTemplateContainerValue,Fi as getMobileBreakpoint,yr as getRuntimeTextContext,wn as getStructureMigrationConfig,Ni as getTabletBreakpoint,Li as getViewportContentWidth,Vo as isDataJsonCapableElementType,Ui as isDragDebugEnabled,So as isGeneratedElementName,ne as isMobileViewport,zi as isMobileWidth,rr as isPlainRecord,Yi as isRelativeResponsiveWidth,Q as isSingleObjectContainerType,Ue as isTabletViewport,Hi as isTabletWidth,N as isTemplateContainerType,ii as lastStructureMigration,Ji as logDragDebug,Gi as logDragDebugThrottled,Jr as migrateStructure,Co as nextCopyName,Eo as nextNumberedName,Bi as normalizeBreakpoint,Ur as normalizeCssSizeUnit,xn as normalizeResponsiveCssSize,Sr as normalizeStringList,yl as provideNgxViewBuilderExtensions,Bl as provideNgxViewBuilderMigrations,Hn as provideNgxViewBuilderProjectLayer,xl as provideNgxViewBuilderProjectLayers,wl as provideNgxViewBuilderRuntime,Zo as provideNgxViewBuilderUiTranslations,ki as pruneStructureSettings,ri as readSchemaVersion,Wr as recordStructureMigration,Gr as resetStructureMigrationConfig,Or as resolveAllowedPhoneCountries,ge as resolveCssSizeSetting,Ti as resolveElementRowContext,mr as resolveElementRowScope,lr as resolveElementRowScopedPath,bi as resolveFixedViewport,zo as resolvePhoneCountry,ea as resolveResponsiveDisplayWidth,Zi as resolveResponsiveWidth,Dr as resolveRuntimeTextContextValue,Zr as resolveStructureSettings,rn as rowIndexOfCellPath,Ai as setElementRowContext,$e as setViewportContentWidth,an as templateRowPath,bo as toElementCodeName,yi as toTestIdToken};