@ngxviewbuilder/runtime 0.12.0 → 0.12.1

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 (60) hide show
  1. package/fesm2022/{ngxviewbuilder-runtime-autocomplete-element-D627PmE6.mjs → ngxviewbuilder-runtime-autocomplete-element-D1-b60Yg.mjs} +1 -1
  2. package/fesm2022/{ngxviewbuilder-runtime-avatar-element-Bq1dfv2w.mjs → ngxviewbuilder-runtime-avatar-element-BZGgAqHX.mjs} +1 -1
  3. package/fesm2022/{ngxviewbuilder-runtime-badge-element-C2f14QNw.mjs → ngxviewbuilder-runtime-badge-element-DwLNvH9z.mjs} +1 -1
  4. package/fesm2022/{ngxviewbuilder-runtime-breadcrumbs-element-DUD-zxsq.mjs → ngxviewbuilder-runtime-breadcrumbs-element-lBOlvfwd.mjs} +1 -1
  5. package/fesm2022/{ngxviewbuilder-runtime-button-element-DLKWXLDr.mjs → ngxviewbuilder-runtime-button-element-m24BQTuL.mjs} +1 -1
  6. package/fesm2022/{ngxviewbuilder-runtime-chart-element-B8SBRRoW.mjs → ngxviewbuilder-runtime-chart-element-BSWuWpXQ.mjs} +1 -1
  7. package/fesm2022/ngxviewbuilder-runtime-checkbox-element-CuDort0j.mjs +1 -0
  8. package/fesm2022/ngxviewbuilder-runtime-column-q9jO7OA7.mjs +43 -0
  9. package/fesm2022/{ngxviewbuilder-runtime-custom-html-element-BBZi5m3e.mjs → ngxviewbuilder-runtime-custom-html-element-B2TQNPbK.mjs} +2 -2
  10. package/fesm2022/{ngxviewbuilder-runtime-date-range-element-Dh0iamQ0.mjs → ngxviewbuilder-runtime-date-range-element-DYtVuNvd.mjs} +1 -1
  11. package/fesm2022/{ngxviewbuilder-runtime-datepicker-element-BzrNzV5m.mjs → ngxviewbuilder-runtime-datepicker-element-Dx9ryU_V.mjs} +1 -1
  12. package/fesm2022/{ngxviewbuilder-runtime-divider-element-DaWflvFL.mjs → ngxviewbuilder-runtime-divider-element-D4828e5R.mjs} +1 -1
  13. package/fesm2022/ngxviewbuilder-runtime-dynamic-text.pipe-BUJ4fCqt.mjs +1 -0
  14. package/fesm2022/{ngxviewbuilder-runtime-element-wrapper-FxbwPLem.mjs → ngxviewbuilder-runtime-element-wrapper-BUzRnWUH.mjs} +3 -3
  15. package/fesm2022/{ngxviewbuilder-runtime-file-upload-element-CVmIguAo.mjs → ngxviewbuilder-runtime-file-upload-element-Bx_JJxsl.mjs} +1 -1
  16. package/fesm2022/{ngxviewbuilder-runtime-icon-element-D1RfF2C0.mjs → ngxviewbuilder-runtime-icon-element-xkaer6fW.mjs} +1 -1
  17. package/fesm2022/{ngxviewbuilder-runtime-iframe-element-DeU-ENc8.mjs → ngxviewbuilder-runtime-iframe-element-DG-YEOXe.mjs} +1 -1
  18. package/fesm2022/{ngxviewbuilder-runtime-image-element-9xxf0IfB.mjs → ngxviewbuilder-runtime-image-element-sl9NYRt4.mjs} +1 -1
  19. package/fesm2022/{ngxviewbuilder-runtime-list-box-element-BDz4--85.mjs → ngxviewbuilder-runtime-list-box-element-BslR4TlH.mjs} +1 -1
  20. package/fesm2022/{ngxviewbuilder-runtime-list-grid-element-BIyp-dce.mjs → ngxviewbuilder-runtime-list-grid-element-vbn5afuD.mjs} +1 -1
  21. package/fesm2022/{ngxviewbuilder-runtime-message-card-element-D0JmZyvI.mjs → ngxviewbuilder-runtime-message-card-element-DV1boKqd.mjs} +1 -1
  22. package/fesm2022/ngxviewbuilder-runtime-multi-select-element-DO_dk2mB.mjs +1 -0
  23. package/fesm2022/ngxviewbuilder-runtime-number-element-BZouLH-5.mjs +1 -0
  24. package/fesm2022/{ngxviewbuilder-runtime-number-stepper-element-iBpT-zsi.mjs → ngxviewbuilder-runtime-number-stepper-element-WzMSnzXR.mjs} +1 -1
  25. package/fesm2022/ngxviewbuilder-runtime-nvb-select-xpsQ0a-_.mjs +1 -0
  26. package/fesm2022/{ngxviewbuilder-runtime-page-title-element-CYS9yCvk.mjs → ngxviewbuilder-runtime-page-title-element-BgA2xImq.mjs} +1 -1
  27. package/fesm2022/{ngxviewbuilder-runtime-phone-input-element-D4rPIZgc.mjs → ngxviewbuilder-runtime-phone-input-element-wJDjqRGH.mjs} +1 -1
  28. package/fesm2022/{ngxviewbuilder-runtime-progress-bar-element-D780Bz4H.mjs → ngxviewbuilder-runtime-progress-bar-element-Bdr0kdSH.mjs} +1 -1
  29. package/fesm2022/ngxviewbuilder-runtime-radio-element-KF9kHkJV.mjs +1 -0
  30. package/fesm2022/{ngxviewbuilder-runtime-rich-text-element-jeeNhKfo.mjs → ngxviewbuilder-runtime-rich-text-element-CGJRHzNG.mjs} +2 -2
  31. package/fesm2022/{ngxviewbuilder-runtime-router-outlet-element-DSIY_9ES.mjs → ngxviewbuilder-runtime-router-outlet-element-DcIc0_OQ.mjs} +1 -1
  32. package/fesm2022/{ngxviewbuilder-runtime-select-button-element-D3ECf6NN.mjs → ngxviewbuilder-runtime-select-button-element-DM0If-wo.mjs} +1 -1
  33. package/fesm2022/ngxviewbuilder-runtime-select-element-kOJtgDmJ.mjs +1 -0
  34. package/fesm2022/{ngxviewbuilder-runtime-signature-pad-element-DNWzJf8n.mjs → ngxviewbuilder-runtime-signature-pad-element-BDSkjOm4.mjs} +1 -1
  35. package/fesm2022/{ngxviewbuilder-runtime-single-checkbox-element-CwUV4QeU.mjs → ngxviewbuilder-runtime-single-checkbox-element-CCLuAW3g.mjs} +1 -1
  36. package/fesm2022/{ngxviewbuilder-runtime-slider-element-DG3yzEol.mjs → ngxviewbuilder-runtime-slider-element-DA0m8geD.mjs} +1 -1
  37. package/fesm2022/{ngxviewbuilder-runtime-spacer-element-DmK0-mBg.mjs → ngxviewbuilder-runtime-spacer-element-D4KgGuYS.mjs} +1 -1
  38. package/fesm2022/{ngxviewbuilder-runtime-stats-card-element-BwF1DgRq.mjs → ngxviewbuilder-runtime-stats-card-element-Bwt5GL25.mjs} +1 -1
  39. package/fesm2022/ngxviewbuilder-runtime-table-element-C0Pcf-Do.mjs +1 -0
  40. package/fesm2022/ngxviewbuilder-runtime-text-element-CVntVjD5.mjs +1 -0
  41. package/fesm2022/ngxviewbuilder-runtime-textarea-element-DkNUQ3Xk.mjs +1 -0
  42. package/fesm2022/{ngxviewbuilder-runtime-time-picker-element-DcaL0iul.mjs → ngxviewbuilder-runtime-time-picker-element-CKVMQjZ2.mjs} +1 -1
  43. package/fesm2022/{ngxviewbuilder-runtime-toast-element-Dz0k7DJQ.mjs → ngxviewbuilder-runtime-toast-element-C5TyVsu-.mjs} +1 -1
  44. package/fesm2022/ngxviewbuilder-runtime-toggle-switch-element-NcB3kYta.mjs +1 -0
  45. package/fesm2022/{ngxviewbuilder-runtime-video-element-Cn45kYTv.mjs → ngxviewbuilder-runtime-video-element-D_5W6_Rh.mjs} +1 -1
  46. package/fesm2022/ngxviewbuilder-runtime.mjs +1 -1
  47. package/package.json +1 -1
  48. package/types/ngxviewbuilder-runtime.d.ts +29 -0
  49. package/fesm2022/ngxviewbuilder-runtime-checkbox-element-BUc3LIZY.mjs +0 -1
  50. package/fesm2022/ngxviewbuilder-runtime-column-CQL6_3oR.mjs +0 -43
  51. package/fesm2022/ngxviewbuilder-runtime-dynamic-text.pipe-DJNHX-1z.mjs +0 -1
  52. package/fesm2022/ngxviewbuilder-runtime-multi-select-element-kVcNNhEt.mjs +0 -1
  53. package/fesm2022/ngxviewbuilder-runtime-number-element-DctiWuS1.mjs +0 -1
  54. package/fesm2022/ngxviewbuilder-runtime-nvb-select-BEN_kxMD.mjs +0 -1
  55. package/fesm2022/ngxviewbuilder-runtime-radio-element-CMnPn8dr.mjs +0 -1
  56. package/fesm2022/ngxviewbuilder-runtime-select-element-CL95ygLj.mjs +0 -1
  57. package/fesm2022/ngxviewbuilder-runtime-table-element-DEQz2d-s.mjs +0 -1
  58. package/fesm2022/ngxviewbuilder-runtime-text-element-CMGjmapD.mjs +0 -1
  59. package/fesm2022/ngxviewbuilder-runtime-textarea-element-BXIAOW-5.mjs +0 -1
  60. package/fesm2022/ngxviewbuilder-runtime-toggle-switch-element-D2X34AZt.mjs +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngxviewbuilder/runtime",
3
- "version": "0.12.0",
3
+ "version": "0.12.1",
4
4
  "description": "Native Angular runtime for NGX View Builder: renders forms, dashboards, data tables and guided flows defined as JSON.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://ngxviewbuilder.io",
@@ -8658,6 +8658,8 @@ export declare class NvbSelect implements ControlValueAccessor, AfterViewInit, O
8658
8658
  private optionsObserver;
8659
8659
  private removeGlobalListeners;
8660
8660
  private forwardedHostClasses;
8661
+ /** Host attributes mirrored onto each inner element, so only those are ever taken back. */
8662
+ private readonly forwardedHostAttributes;
8661
8663
  private internalValue;
8662
8664
  private filterMode;
8663
8665
  private filterThresholdValue;
@@ -8705,6 +8707,12 @@ export declare class NvbSelect implements ControlValueAccessor, AfterViewInit, O
8705
8707
  private syncProjectedState;
8706
8708
  private forwardHostClasses;
8707
8709
  private shouldForwardHostClass;
8710
+ /**
8711
+ * Mirrors the host's attributes (spellcheck, aria-label, the parent's `_ngcontent` scope
8712
+ * so its styles reach the trigger, ...) onto an inner element. Only what was forwarded
8713
+ * before is ever removed: the element's own attributes (`data-testid`, `aria-haspopup`,
8714
+ * `aria-expanded`, `tabindex`, `aria-hidden`) stay, which a test or a screen reader needs.
8715
+ */
8708
8716
  private forwardHostAttributesTo;
8709
8717
  private syncNativeValue;
8710
8718
  private syncDisabledState;
@@ -8785,6 +8793,11 @@ export declare class ElementContentRow implements OnInit, OnDestroy {
8785
8793
  model: import("@angular/core").InputSignal<RowModel>;
8786
8794
  rows: import("@angular/core").InputSignal<RowModel[]>;
8787
8795
  index: import("@angular/core").InputSignal<number>;
8796
+ /**
8797
+ * The row's test id token: the name of its first element, which stays the same across
8798
+ * reloads (the row's uuid is drawn fresh every time a view is opened).
8799
+ */
8800
+ rowTestToken(): string;
8788
8801
  isTemplateElement: import("@angular/core").InputSignal<boolean>;
8789
8802
  rowLength: import("@angular/core").InputSignal<number>;
8790
8803
  parentPath: import("@angular/core").InputSignal<string[]>;
@@ -10099,6 +10112,15 @@ export declare class DomInstrumentationService {
10099
10112
  private ensureUniqueDataTestIds;
10100
10113
  private instrumentImages;
10101
10114
  private instrumentInputs;
10115
+ /**
10116
+ * Only a control that has no name of its own gets a generated aria-label. An aria-label
10117
+ * replaces the name a screen reader would read, so text inside a button, a <label> tied
10118
+ * to an input or a hidden helper element must be left alone, and a container that only
10119
+ * takes programmatic focus (tabindex="-1") is not a control at all.
10120
+ */
10121
+ private needsAccessibleName;
10122
+ /** Text a screen reader would read from the node: aria-hidden parts left out. */
10123
+ private readableText;
10102
10124
  private resolveAriaLabel;
10103
10125
  private buildTestId;
10104
10126
  private buildDomId;
@@ -10636,6 +10658,13 @@ export declare function nextNumberedName(base: string, reserved: Set<string>, st
10636
10658
  export declare function nextCopyName(original: string, reserved: Set<string>): string;
10637
10659
  /** Whether `name` still looks generated for `type` (text3), or is a legacy `el7`. */
10638
10660
  export declare function isGeneratedElementName(name: string, type: string): boolean;
10661
+ /**
10662
+ * Element types that show their own content (a caption, a title, a picture, a chart) and
10663
+ * have no use for the field label row the wrapper draws above an element. Added without a
10664
+ * label (from the library or by an AI client), they get none, instead of their type or
10665
+ * technical name in bold above them.
10666
+ */
10667
+ export declare const NO_LABEL_ELEMENT_TYPES: Set<string>;
10639
10668
  export interface IResponsiveViewportState {
10640
10669
  isMobile?: boolean;
10641
10670
  isTablet?: boolean;
@@ -1 +0,0 @@
1
- import{t as v}from"./ngxviewbuilder-runtime-rolldown-runtime-DpJrqANO.mjs";import{an as m,d as h,g,in as d}from"./ngxviewbuilder-runtime-dynamic-text.pipe-DJNHX-1z.mjs";import{ft as f,i as p,rt as x,t as b}from"./ngxviewbuilder-runtime-element-wrapper-FxbwPLem.mjs";import*as o from"@angular/core";import{ChangeDetectionStrategy as y,Component as w,computed as u,inject as r,input as k,signal as l}from"@angular/core";var I=v({CheckboxElement:()=>s});var s=class c{model=k.required(...ngDevMode?[{debugName:"model"}]:[]);dataSourceLoaded=l(false,...ngDevMode?[{debugName:"dataSourceLoaded"}]:[]);isEditorView=l(d.isEditor(),...ngDevMode?[{debugName:"isEditorView"}]:[]);loadingPlaceholderItems=[0,1,2];dataVersion=l(0,...ngDevMode?[{debugName:"dataVersion"}]:[]);dataService=r(m);eventService=r(g);expressionService=r(h);elementActionService=r(x);visibleOptions=u(()=>{this.dataVersion();return(this.model().options??[]).filter(e=>this.passesOptionFilters(e)&&this.isOptionVisible(e))},...ngDevMode?[{debugName:"visibleOptions"}]:[]);dataSourceLoading=u(()=>Boolean(this.model().dataSource)&&!this.dataSourceLoaded()&&!this.isEditorView(),...ngDevMode?[{debugName:"dataSourceLoading"}]:[]);onDataSourceLoadedHandler=()=>{this.dataSourceLoaded.set(true);this.dataVersion.update(e=>e+1)};onDataValueChangedHandler=()=>{this.dataVersion.update(e=>e+1)};ngOnInit(){const e=!this.model().dataSource||!!this.model().dataSourceLoaded;this.dataSourceLoaded.set(e);this.model().afterDataSourceLoad.add(this.onDataSourceLoadedHandler);this.dataService.onValueChanged.add(this.onDataValueChangedHandler);this.eventService.afterPropertyChanged.add(this.onDataValueChangedHandler);this.isEditorView.set(d.isEditor())}ngOnDestroy(){this.model().afterDataSourceLoad.remove(this.onDataSourceLoadedHandler);this.dataService.onValueChanged.remove(this.onDataValueChangedHandler);this.eventService.afterPropertyChanged.remove(this.onDataValueChangedHandler)}selectOption(e){if(this.isInteractionLocked())return;const n=Array.isArray(this.model().value)?[...this.model().value]:[];const t=n.findIndex(i=>i===e.value);if(t>=0)n.splice(t,1);else n.push(e.value);this.model().setValue(n,"change");this.runActions("input",e);this.runActions("change",e)}onOptionFocus(e){if(this.isInteractionLocked())return;this.runActions("focus",e)}onOptionBlur(e){if(this.isInteractionLocked())return;this.runActions("blur",e)}valueChecked(e){return Array.isArray(this.model().value)&&this.model().value.includes(e.value)}resolveOptionInputId(e,n){return`${this.slugify(String(this.model()?.dataPath??"").trim()||String(this.model()?.name??"").trim()||"checkbox")}-option-${this.slugify(String(e?.value??n).trim()||String(n+1))}`}resolveOptionTestId(e,n){return`nvb-${p(String(this.model()?.dataPath??"").trim()||String(this.model()?.name??"").trim()||"checkbox")}-checkbox-${p(String(e?.value??n).trim()||String(n+1))}`}resolveOptionAriaLabel(e,n){const t=String(e?.label??"").trim();if(t)return t;return`Option ${n+1}`}isOptionVisible(e){const n=String(e?.visibleIf??"").trim();if(!n)return true;try{const t=n.replace(/{/g,"").replace(/}/g,"").trim();if(!t)return true;const i=this.expressionService.applyContextToExpression(t,this.model());return!!this.expressionService.runPropertyConditionSync(this.dataService.getData(),i)}catch{return true}}passesOptionFilters(e){const n=String(this.model().filterOptionsBy??"").trim()||String(this.model().dataSource?.filterOptionsBy??"").trim();const t=String(this.model().filterIfEqual??"").trim();const i=String(this.model().filterIfNotEqual??"").trim();if(!n&&!t&&!i)return true;const a=this.dataService.getData()??{};return f([e],n,a,{valuePath:"value",filterIfEqual:t,filterIfNotEqual:i}).length>0}runActions(e,n){const t=Array.isArray(this.model().value)?[...this.model().value]:[];const i=String(this.model().name??"").trim();const a={value:t,item:n??null,row:null};if(i)a[i]=t;this.elementActionService.runActions(this.model(),this.model().events??[],e,a)}isInteractionLocked(){const e=this.model();if(!e)return false;if(Boolean(e["__pfInteractionLocked"]))return true;return this.dataSourceLoading()||Boolean(e.disabled)||Boolean(e.readOnly)}slugify(e){return String(e??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+/,"").replace(/-+$/,"").slice(0,50)}static ɵfac=o.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"22.2.1",ngImport:o,type:c,deps:[],target:o.ɵɵFactoryTarget.Component});static ɵcmp=o.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"22.2.1",type:c,isStandalone:true,selector:"checkbox-element",inputs:{model:{classPropertyName:"model",publicName:"model",isSignal:true,isRequired:true,transformFunction:null}},ngImport:o,template:'<element-wrapper\n [model]="model()"\n [labelForInput]="null"\n groupRole="group"\n #fieldWrapper="elementWrapper"\n>\n @if (model().dataSource && !dataSourceLoaded()) {\n @if (isEditorView()) {\n <div class="nvb-empty-element-wrapper">\n <ul class="nvb-empty-row" [class.nvb-row]="model().showInline" [class.nvb-column]="!model().showInline">\n <li>\n <input type="checkbox" class="nvb-control__checkbox-input" tabindex="-1" aria-hidden="true" disabled />\n <hr class="nvb-empty-row__blank" />\n </li>\n <li>\n <input type="checkbox" class="nvb-control__checkbox-input" tabindex="-1" aria-hidden="true" disabled />\n <hr class="nvb-empty-row__blank" />\n </li>\n <li>\n <input type="checkbox" class="nvb-control__checkbox-input" tabindex="-1" aria-hidden="true" disabled />\n <hr class="nvb-empty-row__blank" />\n </li>\n </ul>\n <small class="nvb-element-title">\n <span class="material-symbols-outlined">database</span>\n {{ model()?.dataSource?.source?.title || model()?.dataSource?.name }}\n </small>\n </div>\n } @else {\n <ul\n [id]="fieldWrapper.controlId()"\n class="nvb-choice-list nvb-choice-list--loading"\n [class.nvb-choice-list--fit-content]="model().fitContent"\n [class.nvb-row]="model().showInline"\n [class.nvb-column]="!model().showInline"\n [attr.aria-describedby]="fieldWrapper.describedByIds()"\n aria-busy="true"\n aria-live="polite"\n role="status"\n >\n @for (placeholder of loadingPlaceholderItems; track placeholder) {\n <li class="nvb-choice-loading-item" aria-hidden="true">\n <span class="nvb-choice-loading-box"></span>\n <span class="nvb-choice-loading-line"></span>\n </li>\n }\n <span class="nvb-sr-only">Loading checkbox options...</span>\n </ul>\n }\n } @else {\n <ul\n [id]="fieldWrapper.controlId()"\n class="nvb-choice-list"\n [class.nvb-choice-list--fit-content]="model().fitContent"\n [class.nvb-row]="model().showInline"\n [class.nvb-column]="!this.model().showInline"\n [attr.aria-describedby]="fieldWrapper.describedByIds()"\n >\n @for (option of visibleOptions(); track option.value ?? $index; let optionIndex = $index) {\n <li class="nvb-input-wrapper">\n <input\n type="checkbox"\n [id]="resolveOptionInputId(option, optionIndex)"\n [attr.name]="model().name"\n [attr.value]="option.value"\n [attr.data-testid]="resolveOptionTestId(option, optionIndex)"\n [attr.aria-describedby]="fieldWrapper.describedByIds()"\n class="nvb-control__checkbox-input"\n [disabled]="model().disabled"\n (click)="selectOption(option)"\n (focus)="onOptionFocus(option)"\n (blur)="onOptionBlur(option)"\n [checked]="valueChecked(option)"\n />\n <label [for]="resolveOptionInputId(option, optionIndex)">{{ option.label }}</label>\n </li>\n }\n </ul>\n }\n</element-wrapper>\n',styles:[".nvb-input-wrapper{display:flex;gap:var(--nvb-space-3);justify-content:start;align-items:center;font-size:14px;line-height:20px}.nvb-input-wrapper .nvb-control__checkbox-input:disabled{cursor:not-allowed;opacity:.55}.nvb-input-wrapper .nvb-control__checkbox-input:disabled+label{color:var(--nvb-color-neutral-500)}.nvb-choice-list,ul{flex-wrap:wrap;display:flex;gap:var(--nvb-space-3);padding-top:0;margin:0}.nvb-row{flex-direction:row}.nvb-column{flex-direction:column}.nvb-choice-list--loading{width:100%}.nvb-choice-list--fit-content{width:fit-content;max-width:100%}.nvb-choice-loading-item{display:inline-flex;align-items:center;gap:var(--nvb-space-3);min-height:24px;min-width:min(180px,100%)}.nvb-column .nvb-choice-loading-item{width:100%}.nvb-choice-loading-box{width:16px;height:16px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-xs, var(--nvb-radius-sm));background:var(--nvb-color-neutral-000);flex:0 0 auto}.nvb-choice-loading-line{border-radius:var(--nvb-radius-full);background:linear-gradient(90deg,color-mix(in oklab,var(--nvb-color-neutral-100) 86%,var(--nvb-color-neutral-000)) 25%,var(--nvb-color-neutral-200) 50%,color-mix(in oklab,var(--nvb-color-neutral-100) 86%,var(--nvb-color-neutral-000)) 75%);background-size:200% 100%;height:12px;width:100%;max-width:132px;animation:checkbox-choice-shimmer 1.35s ease-in-out infinite}@keyframes checkbox-choice-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.nvb-meta-info{display:flex;flex-direction:column;gap:2px;font-size:small}.nvb-meta-info-wrapper{display:flex;gap:var(--nvb-space-7)}.nvb-empty-row{display:flex;gap:var(--nvb-space-3)}.nvb-empty-row li{display:flex;gap:var(--nvb-space-2);justify-content:start;align-items:center;font-size:14px;flex-grow:1}.nvb-empty-row__blank{border-color:var(--nvb-color-neutral-050);width:100%}.nvb-empty-row__title{color:var(--nvb-color-neutral-500)}.nvb-element-title{color:var(--nvb-color-neutral-400);display:flex;align-items:center;gap:var(--nvb-space-2)}.nvb-element-title span{font-size:20px}.nvb-empty-element-wrapper{display:flex;flex-direction:column;gap:var(--nvb-space-3)}\n"],dependencies:[{kind:"component",type:b,selector:"element-wrapper",inputs:["model","controlIdInput","labelForInput","groupRole","showTextWrapperInput"],exportAs:["elementWrapper"]}],changeDetection:o.ChangeDetectionStrategy.OnPush})};o.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"22.2.1",ngImport:o,type:s,decorators:[{type:w,args:[{selector:"checkbox-element",changeDetection:y.OnPush,imports:[b],template:'<element-wrapper\n [model]="model()"\n [labelForInput]="null"\n groupRole="group"\n #fieldWrapper="elementWrapper"\n>\n @if (model().dataSource && !dataSourceLoaded()) {\n @if (isEditorView()) {\n <div class="nvb-empty-element-wrapper">\n <ul class="nvb-empty-row" [class.nvb-row]="model().showInline" [class.nvb-column]="!model().showInline">\n <li>\n <input type="checkbox" class="nvb-control__checkbox-input" tabindex="-1" aria-hidden="true" disabled />\n <hr class="nvb-empty-row__blank" />\n </li>\n <li>\n <input type="checkbox" class="nvb-control__checkbox-input" tabindex="-1" aria-hidden="true" disabled />\n <hr class="nvb-empty-row__blank" />\n </li>\n <li>\n <input type="checkbox" class="nvb-control__checkbox-input" tabindex="-1" aria-hidden="true" disabled />\n <hr class="nvb-empty-row__blank" />\n </li>\n </ul>\n <small class="nvb-element-title">\n <span class="material-symbols-outlined">database</span>\n {{ model()?.dataSource?.source?.title || model()?.dataSource?.name }}\n </small>\n </div>\n } @else {\n <ul\n [id]="fieldWrapper.controlId()"\n class="nvb-choice-list nvb-choice-list--loading"\n [class.nvb-choice-list--fit-content]="model().fitContent"\n [class.nvb-row]="model().showInline"\n [class.nvb-column]="!model().showInline"\n [attr.aria-describedby]="fieldWrapper.describedByIds()"\n aria-busy="true"\n aria-live="polite"\n role="status"\n >\n @for (placeholder of loadingPlaceholderItems; track placeholder) {\n <li class="nvb-choice-loading-item" aria-hidden="true">\n <span class="nvb-choice-loading-box"></span>\n <span class="nvb-choice-loading-line"></span>\n </li>\n }\n <span class="nvb-sr-only">Loading checkbox options...</span>\n </ul>\n }\n } @else {\n <ul\n [id]="fieldWrapper.controlId()"\n class="nvb-choice-list"\n [class.nvb-choice-list--fit-content]="model().fitContent"\n [class.nvb-row]="model().showInline"\n [class.nvb-column]="!this.model().showInline"\n [attr.aria-describedby]="fieldWrapper.describedByIds()"\n >\n @for (option of visibleOptions(); track option.value ?? $index; let optionIndex = $index) {\n <li class="nvb-input-wrapper">\n <input\n type="checkbox"\n [id]="resolveOptionInputId(option, optionIndex)"\n [attr.name]="model().name"\n [attr.value]="option.value"\n [attr.data-testid]="resolveOptionTestId(option, optionIndex)"\n [attr.aria-describedby]="fieldWrapper.describedByIds()"\n class="nvb-control__checkbox-input"\n [disabled]="model().disabled"\n (click)="selectOption(option)"\n (focus)="onOptionFocus(option)"\n (blur)="onOptionBlur(option)"\n [checked]="valueChecked(option)"\n />\n <label [for]="resolveOptionInputId(option, optionIndex)">{{ option.label }}</label>\n </li>\n }\n </ul>\n }\n</element-wrapper>\n',styles:[".nvb-input-wrapper{display:flex;gap:var(--nvb-space-3);justify-content:start;align-items:center;font-size:14px;line-height:20px}.nvb-input-wrapper .nvb-control__checkbox-input:disabled{cursor:not-allowed;opacity:.55}.nvb-input-wrapper .nvb-control__checkbox-input:disabled+label{color:var(--nvb-color-neutral-500)}.nvb-choice-list,ul{flex-wrap:wrap;display:flex;gap:var(--nvb-space-3);padding-top:0;margin:0}.nvb-row{flex-direction:row}.nvb-column{flex-direction:column}.nvb-choice-list--loading{width:100%}.nvb-choice-list--fit-content{width:fit-content;max-width:100%}.nvb-choice-loading-item{display:inline-flex;align-items:center;gap:var(--nvb-space-3);min-height:24px;min-width:min(180px,100%)}.nvb-column .nvb-choice-loading-item{width:100%}.nvb-choice-loading-box{width:16px;height:16px;border:1px solid var(--nvb-color-neutral-300);border-radius:var(--nvb-radius-xs, var(--nvb-radius-sm));background:var(--nvb-color-neutral-000);flex:0 0 auto}.nvb-choice-loading-line{border-radius:var(--nvb-radius-full);background:linear-gradient(90deg,color-mix(in oklab,var(--nvb-color-neutral-100) 86%,var(--nvb-color-neutral-000)) 25%,var(--nvb-color-neutral-200) 50%,color-mix(in oklab,var(--nvb-color-neutral-100) 86%,var(--nvb-color-neutral-000)) 75%);background-size:200% 100%;height:12px;width:100%;max-width:132px;animation:checkbox-choice-shimmer 1.35s ease-in-out infinite}@keyframes checkbox-choice-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.nvb-meta-info{display:flex;flex-direction:column;gap:2px;font-size:small}.nvb-meta-info-wrapper{display:flex;gap:var(--nvb-space-7)}.nvb-empty-row{display:flex;gap:var(--nvb-space-3)}.nvb-empty-row li{display:flex;gap:var(--nvb-space-2);justify-content:start;align-items:center;font-size:14px;flex-grow:1}.nvb-empty-row__blank{border-color:var(--nvb-color-neutral-050);width:100%}.nvb-empty-row__title{color:var(--nvb-color-neutral-500)}.nvb-element-title{color:var(--nvb-color-neutral-400);display:flex;align-items:center;gap:var(--nvb-space-2)}.nvb-element-title span{font-size:20px}.nvb-empty-element-wrapper{display:flex;flex-direction:column;gap:var(--nvb-space-3)}\n"]}]}],propDecorators:{model:[{type:o.Input,args:[{isSignal:true,alias:"model",required:true}]}]}});export{I as n,s as t};