survey-angular-ui 1.9.105 → 1.9.107

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 (36) hide show
  1. package/angular-ui.d.ts +3 -1
  2. package/angular-ui.module.d.ts +5 -3
  3. package/base-angular.d.ts +1 -1
  4. package/bundles/survey-angular-ui.umd.js +138 -43
  5. package/bundles/survey-angular-ui.umd.js.map +1 -1
  6. package/components/list/list.component.d.ts +1 -0
  7. package/components/loading-indicator/loading-indicator.component.d.ts +6 -0
  8. package/components/popup/popup-container.component.d.ts +2 -1
  9. package/components/popup/popup.component.d.ts +1 -0
  10. package/components/progress/default/progress.component.d.ts +2 -1
  11. package/errors.component.d.ts +2 -8
  12. package/esm2015/angular-ui.js +4 -2
  13. package/esm2015/angular-ui.module.js +7 -5
  14. package/esm2015/base-angular.js +4 -3
  15. package/esm2015/components/list/list.component.js +5 -1
  16. package/esm2015/components/loading-indicator/loading-indicator.component.js +17 -0
  17. package/esm2015/components/popup/modal-container.component.js +4 -1
  18. package/esm2015/components/popup/popup-container.component.js +13 -8
  19. package/esm2015/components/popup/popup.component.js +10 -1
  20. package/esm2015/components/progress/default/progress.component.js +5 -3
  21. package/esm2015/components-container.component.js +2 -2
  22. package/esm2015/errors.component.js +6 -22
  23. package/esm2015/popup.survey.component.js +5 -1
  24. package/esm2015/question.component.js +2 -2
  25. package/esm2015/questions/file.component.js +9 -8
  26. package/esm2015/questions/multipletext.component.js +3 -6
  27. package/esm2015/questions/multipletextitem.component.js +28 -5
  28. package/esm2015/questions/multipletextrow.component.js +28 -0
  29. package/esm2015/survey-content.component.js +4 -2
  30. package/fesm2015/survey-angular-ui.js +117 -46
  31. package/fesm2015/survey-angular-ui.js.map +1 -1
  32. package/package.json +1 -1
  33. package/popup.survey.component.d.ts +1 -0
  34. package/questions/multipletext.component.d.ts +1 -2
  35. package/questions/multipletextitem.component.d.ts +8 -3
  36. package/questions/multipletextrow.component.d.ts +11 -0
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { TemplateRef, Component, ViewChild, Directive, Input, ViewContainerRef, Injectable, ElementRef, HostBinding, HostListener, Pipe, NgModule } from '@angular/core';
3
3
  import * as Survey from 'survey-core';
4
- import { createPopupModalViewModel, settings, createDialogOptions, SvgRegistry, PopupSurveyModel, TooltipManager, LocalizableString, createPopupViewModel, DropdownListModel, Helpers, DropdownMultiSelectListModel, RendererFactory, ButtonGroupItemModel, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, getActionDropdownButtonTarget, ActionDropdownViewModel, SurveyProgressModel, SurveyProgressButtonsModel, TOCModel, SurveyModel } from 'survey-core';
4
+ import { createPopupModalViewModel, settings, createDialogOptions, SvgRegistry, PopupSurveyModel, LocalizableString, createPopupViewModel, DropdownListModel, Helpers, DropdownMultiSelectListModel, RendererFactory, ButtonGroupItemModel, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, getActionDropdownButtonTarget, ActionDropdownViewModel, SurveyProgressModel, SurveyProgressButtonsModel, TOCModel, SurveyModel } from 'survey-core';
5
5
  import { DomPortalOutlet, ComponentPortal } from '@angular/cdk/portal';
6
6
  import * as i2 from '@angular/common';
7
7
  import { CommonModule } from '@angular/common';
@@ -65,6 +65,7 @@ class BaseAngular extends EmbeddedViewContentComponent {
65
65
  ngOnDestroy() {
66
66
  this.isDestroyed = true;
67
67
  this.unMakeBaseElementAngular(this.getModel());
68
+ this.previousModel = undefined;
68
69
  }
69
70
  makeBaseElementAngular(stateElement) {
70
71
  if (!!stateElement && !stateElement.__ngImplemented) {
@@ -107,7 +108,7 @@ class BaseAngular extends EmbeddedViewContentComponent {
107
108
  this.beforeUpdate();
108
109
  if (key && this.getPropertiesToUpdateSync().indexOf(key) > -1) {
109
110
  this.detectChanges();
110
- this.afterUpdate();
111
+ this.afterUpdate(true);
111
112
  }
112
113
  else {
113
114
  queueMicrotask(() => {
@@ -137,7 +138,7 @@ class BaseAngular extends EmbeddedViewContentComponent {
137
138
  }
138
139
  this.setIsRendering(true);
139
140
  }
140
- afterUpdate() {
141
+ afterUpdate(isSync = false) {
141
142
  if (this.getShouldReattachChangeDetector()) {
142
143
  this.getChangeDetectorRef().reattach();
143
144
  }
@@ -345,19 +346,24 @@ class PopupBaseContainerComponent extends BaseAngular {
345
346
  return;
346
347
  popupModalModel.apply();
347
348
  }
349
+ getPropertiesToUpdateSync() {
350
+ return ["height"];
351
+ }
348
352
  getShouldReattachChangeDetector() {
349
353
  return false;
350
354
  }
351
355
  onModelChanged() {
352
356
  this.changeDetectorRef.detectChanges();
353
357
  }
354
- afterUpdate() {
355
- super.afterUpdate();
356
- if (!this.prevIsVisible && this.model.isVisible) {
357
- this.model.updateOnShowing();
358
- }
359
- if (this.prevIsVisible !== this.model.isVisible) {
360
- this.prevIsVisible = this.model.isVisible;
358
+ afterUpdate(isSync = false) {
359
+ super.afterUpdate(isSync);
360
+ if (!isSync) {
361
+ if (!this.prevIsVisible && this.model.isVisible) {
362
+ this.model.updateOnShowing();
363
+ }
364
+ if (this.prevIsVisible !== this.model.isVisible) {
365
+ this.prevIsVisible = this.model.isVisible;
366
+ }
361
367
  }
362
368
  }
363
369
  clickInside(event) {
@@ -426,6 +432,9 @@ class ModalComponent {
426
432
  };
427
433
  }
428
434
  ngOnDestroy() {
435
+ var _a, _b;
436
+ (_a = this.portalHost) === null || _a === void 0 ? void 0 : _a.detach();
437
+ (_b = this.model) === null || _b === void 0 ? void 0 : _b.dispose();
429
438
  if (this.functionDefined) {
430
439
  settings.showModal = undefined;
431
440
  settings.showDialog = undefined;
@@ -740,6 +749,8 @@ class SurveyContentComponent extends BaseAngular {
740
749
  ngOnDestroy() {
741
750
  super.ngOnDestroy();
742
751
  if (!!this.model) {
752
+ this.model.rootElement = undefined;
753
+ this.model.destroyResizeObserver();
743
754
  this.model.renderCallback = undefined;
744
755
  }
745
756
  }
@@ -755,7 +766,7 @@ class SurveyContentComponent extends BaseAngular {
755
766
  }
756
767
  }
757
768
  SurveyContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyContentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
758
- SurveyContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SurveyContentComponent, selector: "survey-content", inputs: { model: "model" }, viewQueries: [{ propertyName: "rootEl", first: true, predicate: ["surveyContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div #surveyContainer *ngIf=\"!!model\" [class]=\"model.getRootCss()\" [style]=\"model.themeVariables\">\n <div *ngIf=\"!!model.renderBackgroundImage\" [class]=\"model.css.rootBackgroundImage\" [style]=\"model.backgroundImageStyle\"></div>\n <form onsubmit=\"return false;\">\n <div class=\"sv_custom_header\" [hidden]=\"model.hasLogo\"></div>\n <div [class]=\"model.css.container\">\n <div *ngIf=\"model.renderedHasHeader\" [class]=\"model.css.header\" [survey]=\"model\" sv-ng-survey-header></div>\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'header', needRenderWrapper: false } }\"></ng-template>\n <div *ngIf=\"model.isShowingPage\" [class]=\"model.bodyContainerCss\">\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'left' } }\"></ng-template>\n <div [class]=\"model.bodyCss\" [style.maxWidth]=\"model.renderedWidth\" [id]=\"model.activePage ? model.activePage.id : ''\">\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'contentTop' } }\"></ng-template>\n <!-- ko if: activePage -->\n <ng-container *ngIf=\"model.activePage\">\n <sv-ng-page [model]=\"model.activePage\" [survey]=\"model\"></sv-ng-page>\n </ng-container>\n <!-- ko if: activePage.rows.length == 0 && $data.emptyPageTemplate -->\n <!-- ko template: { name: emptyPageTemplate, data: $data.emptyPageTemplateData || $data } -->\n <!-- /ko -->\n <!-- /ko -->\n <!-- /ko -->\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'contentBottom' } }\"></ng-template>\n </div>\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'right' } }\"></ng-template>\n </div>\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'footer', needRenderWrapper: false } }\"></ng-template>\n <div *ngIf=\"model.state === 'completed' && model.showCompletedPage\" [class]=\"model.completedCss\"\n [innerHtml]=\"model.processedCompletedHtml\"></div>\n <div *ngIf=\"model.state === 'completedbefore'\" [class]=\"model.css.body\"\n [innerHtml]=\"model.processedCompletedBeforeHtml\"></div>\n <div *ngIf=\"model.state === 'loading'\" [class]=\"model.css.body\" [innerHtml]=\"model.processedLoadingHtml\"></div>\n <div *ngIf=\"model.state === 'empty'\" [class]=\"model.css.bodyEmpty\">{{model.emptySurveyText}}</div>\n </div>\n </form>\n <sv-brand-info *ngIf=\"model.showBrandInfo\"></sv-brand-info>\n <sv-notifier [notifier]=\"model.notifier\"></sv-notifier>\n </div>\n</ng-template>", components: [{ type: SurveyHeaderComponent, selector: "'[sv-ng-survey-header]'", inputs: ["survey"] }, { type: PageComponent, selector: "page, sv-ng-page", inputs: ["model", "survey"] }, { type: BrandInfoComponent, selector: "sv-brand-info" }, { type: NotifierComponent, selector: "sv-notifier", inputs: ["notifier"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
769
+ SurveyContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SurveyContentComponent, selector: "survey-content", inputs: { model: "model" }, viewQueries: [{ propertyName: "rootEl", first: true, predicate: ["surveyContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div #surveyContainer *ngIf=\"!!model\" [class]=\"model.getRootCss()\" [style]=\"model.themeVariables\">\n <div *ngIf=\"!!model.renderBackgroundImage\" [class]=\"model.css.rootBackgroundImage\" [style]=\"model.backgroundImageStyle\"></div>\n <form onsubmit=\"return false;\">\n <div class=\"sv_custom_header\" [hidden]=\"model.hasLogo\"></div>\n <div [class]=\"model.css.container\">\n <div *ngIf=\"model.renderedHasHeader\" [class]=\"model.css.header\" [survey]=\"model\" sv-ng-survey-header></div>\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'header', needRenderWrapper: false } }\"></ng-template>\n <div *ngIf=\"model.isShowingPage\" [class]=\"model.bodyContainerCss\">\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'left' } }\"></ng-template>\n <div [class]=\"model.bodyCss\" [style.maxWidth]=\"model.renderedWidth\" [id]=\"model.activePage ? model.activePage.id : ''\">\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'contentTop' } }\"></ng-template>\n <!-- ko if: activePage -->\n <ng-container *ngIf=\"model.activePage\">\n <sv-ng-page [model]=\"model.activePage\" [survey]=\"model\"></sv-ng-page>\n </ng-container>\n <!-- ko if: activePage.rows.length == 0 && $data.emptyPageTemplate -->\n <!-- ko template: { name: emptyPageTemplate, data: $data.emptyPageTemplateData || $data } -->\n <!-- /ko -->\n <!-- /ko -->\n <!-- /ko -->\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'contentBottom' } }\"></ng-template>\n </div>\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'right' } }\"></ng-template>\n </div>\n <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'footer', needRenderWrapper: false } }\"></ng-template>\n <div *ngIf=\"model.state === 'completed' && model.showCompletedPage\" [class]=\"model.completedCss\"\n [innerHtml]=\"model.processedCompletedHtml\"></div>\n <div *ngIf=\"model.state === 'completedbefore'\" [class]=\"model.completedBeforeCss\"\n [innerHtml]=\"model.processedCompletedBeforeHtml\"></div>\n <div *ngIf=\"model.state === 'loading'\" [class]=\"model.loadingBodyCss\" [innerHtml]=\"model.processedLoadingHtml\"></div>\n <div *ngIf=\"model.state === 'empty'\" [class]=\"model.css.bodyEmpty\">{{model.emptySurveyText}}</div>\n </div>\n </form>\n <sv-brand-info *ngIf=\"model.showBrandInfo\"></sv-brand-info>\n <sv-notifier [notifier]=\"model.notifier\"></sv-notifier>\n </div>\n</ng-template>", components: [{ type: SurveyHeaderComponent, selector: "'[sv-ng-survey-header]'", inputs: ["survey"] }, { type: PageComponent, selector: "page, sv-ng-page", inputs: ["model", "survey"] }, { type: BrandInfoComponent, selector: "sv-brand-info" }, { type: NotifierComponent, selector: "sv-notifier", inputs: ["notifier"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
759
770
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyContentComponent, decorators: [{
760
771
  type: Component,
761
772
  args: [{
@@ -890,6 +901,10 @@ class PopupSurveyComponent extends BaseAngular {
890
901
  this.popup.isShowing = true;
891
902
  this.changeDetectorRef.detectChanges();
892
903
  }
904
+ ngOnDestroy() {
905
+ super.ngOnDestroy();
906
+ this.popup.dispose();
907
+ }
893
908
  }
894
909
  PopupSurveyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupSurveyComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
895
910
  PopupSurveyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PopupSurveyComponent, selector: "popup-survey", inputs: { model: "model", isExpanded: "isExpanded", allowClose: "allowClose", closeOnCompleteTimeout: "closeOnCompleteTimeout" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!!popup && popup.isShowing\" [class]=\"popup.cssRoot\" style=\"position: fixed; bottom: 3px; right: 10px;\" [style.width]=\"popup.renderedWidth\" [style.maxWidth]=\"popup.renderedWidth\">\n <div [class]=\"popup.cssHeaderRoot\">\n <span (click)=\"popup.changeExpandCollapse()\" style=\"width: 100%; cursor: pointer;\">\n <span style=\"padding-right:10px\" [class]=\"popup.cssHeaderTitle\">{{popup.locTitle.renderedHtml}}</span>\n <span aria-hidden=\"true\" [class]=\"popup.cssButton\"></span>\n </span>\n <span *ngIf=\"popup.allowClose\" (click)=\"popup.hide()\" [class]=\"popup.cssHeaderButton\" style=\"float: right; cursor: pointer; width: 24px; height: 24px; transform: rotate(45deg);\">\n <svg [iconName]=\"'icon-expanddetail'\" [size]=\"16\" sv-ng-svg-icon></svg>\n </span>\n <span *ngIf=\"popup.isExpanded\" (click)=\"popup.changeExpandCollapse()\" [class]=\"popup.cssHeaderButton\" style=\"float: right; cursor: pointer; width: 24px; height: 24px;\">\n <svg [iconName]=\"'icon-collapsedetail'\" [size]=\"16\" sv-ng-svg-icon></svg>\n </span>\n </div>\n <div *ngIf=\"popup.isExpanded\" [class]=\"popup.cssBody\" (scroll)=\"popup.onScroll()\">\n <survey [model]=\"popup.survey\"></survey>\n </div>\n</div>", styles: [""], components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: SurveyComponent, selector: "survey", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
@@ -951,19 +966,7 @@ function getComponentName(question) {
951
966
  }
952
967
 
953
968
  class ErrorsComponent {
954
- constructor(viewContainerRef) {
955
- this.viewContainerRef = viewContainerRef;
956
- }
957
- ngOnInit() {
958
- if (this.location == "tooltip") {
959
- this.tooltipManager = new TooltipManager(this.viewContainerRef.element.nativeElement);
960
- }
961
- }
962
- ngOnDestroy() {
963
- if (!!this.tooltipManager) {
964
- this.tooltipManager.dispose();
965
- }
966
- }
969
+ constructor() { }
967
970
  get role() {
968
971
  return "alert";
969
972
  }
@@ -977,21 +980,18 @@ class ErrorsComponent {
977
980
  return this.element.cssError;
978
981
  }
979
982
  }
980
- ErrorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorsComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
981
- ErrorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: { element: "element", location: "location" }, host: { properties: { "attr.role": "this.role", "id": "this.id", "attr.aria-live": "this.ariaLive", "class": "this.class" } }, viewQueries: [{ propertyName: "errorsContainerRef", first: true, predicate: ["errorsContainer"], descendants: true, static: true }], ngImport: i0, template: "<div *ngFor=\"let error of element.errors;\">\n <span\n [class]=\"element.cssClasses ? element.cssClasses.error.icon : 'panel-error-icon'\"\n aria-hidden=\"true\"\n ></span>\n <span [class]=\"element.cssClasses ? element.cssClasses.error.item : 'panel-error-item'\" [model]=\"error.locText\" sv-ng-string>\n </span>\n</div>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
983
+ ErrorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
984
+ ErrorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: { element: "element", location: "location" }, host: { properties: { "attr.role": "this.role", "id": "this.id", "attr.aria-live": "this.ariaLive", "class": "this.class" } }, ngImport: i0, template: "<div *ngFor=\"let error of element.errors;\">\n <span\n [class]=\"element.cssClasses ? element.cssClasses.error.icon : 'panel-error-icon'\"\n aria-hidden=\"true\"\n ></span>\n <span [class]=\"element.cssClasses ? element.cssClasses.error.item : 'panel-error-item'\" [model]=\"error.locText\" sv-ng-string>\n </span>\n</div>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
982
985
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorsComponent, decorators: [{
983
986
  type: Component,
984
987
  args: [{
985
988
  templateUrl: "./errors.component.html",
986
989
  selector: "'[sv-ng-errors]'"
987
990
  }]
988
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { element: [{
991
+ }], ctorParameters: function () { return []; }, propDecorators: { element: [{
989
992
  type: Input
990
993
  }], location: [{
991
994
  type: Input
992
- }], errorsContainerRef: [{
993
- type: ViewChild,
994
- args: ["errorsContainer", { static: true }]
995
995
  }], role: [{
996
996
  type: HostBinding,
997
997
  args: ["attr.role"]
@@ -1087,7 +1087,7 @@ class QuestionComponent extends EmbeddedViewContentComponent {
1087
1087
  }
1088
1088
  }
1089
1089
  QuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1090
- QuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: QuestionComponent, selector: "sv-ng-question", inputs: { model: "model" }, viewQueries: [{ propertyName: "rootEl", first: true, predicate: ["elementContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div *ngIf=\"!!model\" #elementContainer [class]=\"model.getRootCss()\" [style]=\"model.getRootStyle()\" [id]=\"model.id\" [attr.data-name]=\"model.name\" [attr.role]=\"model.ariaRole\" [attr.aria-required]=\"model.ariaRequired\" [attr.aria-invalid]=\"model.ariaInvalid\" [attr.aria-labelledby]=\"model.ariaLabelledBy\" [attr.aria-expanded]=\"model.ariaExpanded\">\n <div *ngIf=\"model.showErrorsAboveQuestion && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n <div [element]=\"model\" *ngIf=\"model.hasTitleOnLeftTop\" sv-ng-element-header></div>\n <div [class]=\"model.cssContent\" role=\"presentation\" [visible]=\"!model.isCollapsed\">\n <div *ngIf=\"model.showErrorOnTop && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n <ng-template [component]=\"{ name: getQuestionContentWrapperComponentName(), data: getQuestionContentWrapperComponentData(), default: 'skeleton-question' }\">\n </ng-template>\n <div *ngIf=\"model.hasComment\" [class]=\"model.getCommentAreaCss(false)\">\n <div [model]=\"model.locCommentText\" sv-ng-string></div>\n <sv-ng-comment [question]=\"model\"></sv-ng-comment>\n </div>\n <div *ngIf=\"model.showErrorOnBottom && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n <div *ngIf=\"model.isErrorsModeTooltip && model.hasVisibleErrors\" [element]=\"model\" [location]=\"'tooltip'\" sv-ng-errors></div>\n <div *ngIf=\"model.hasDescriptionUnderInput\" [class]=\"model.cssDescription\" [model]=\"model.locDescription\" sv-ng-string></div>\n </div>\n <div [element]=\"model\" *ngIf=\"model.hasTitleOnBottom\" sv-ng-element-header></div>\n <div *ngIf=\"model.showErrorsBelowQuestion && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n </div>\n</ng-template>", components: [{ type: ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: ["element", "location"] }, { type: ElementHeaderComponent, selector: "'[sv-ng-element-header]'", inputs: ["element"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: SurveyCommentComponent, selector: "sv-ng-comment, '[sv-ng-comment]'", inputs: ["question"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
1090
+ QuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: QuestionComponent, selector: "sv-ng-question", inputs: { model: "model" }, viewQueries: [{ propertyName: "rootEl", first: true, predicate: ["elementContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div *ngIf=\"!!model\" #elementContainer [class]=\"model.getRootCss()\" [style]=\"model.getRootStyle()\" [id]=\"model.id\" [attr.data-name]=\"model.name\" [attr.role]=\"model.ariaRole\" [attr.aria-required]=\"model.ariaRequired\" [attr.aria-invalid]=\"model.ariaInvalid\" [attr.aria-labelledby]=\"model.ariaLabelledBy\" [attr.aria-expanded]=\"model.ariaExpanded\">\n <div *ngIf=\"model.showErrorsAboveQuestion && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n <div [element]=\"model\" *ngIf=\"model.hasTitleOnLeftTop\" sv-ng-element-header></div>\n <div [class]=\"model.cssContent\" role=\"presentation\" [visible]=\"!model.isCollapsed\">\n <div *ngIf=\"model.showErrorOnTop && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n <ng-template [component]=\"{ name: getQuestionContentWrapperComponentName(), data: getQuestionContentWrapperComponentData(), default: 'skeleton-question' }\">\n </ng-template>\n <div *ngIf=\"model.hasComment\" [class]=\"model.getCommentAreaCss(false)\">\n <div [model]=\"model.locCommentText\" sv-ng-string></div>\n <sv-ng-comment [question]=\"model\"></sv-ng-comment>\n </div>\n <div *ngIf=\"model.showErrorOnBottom && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n <div *ngIf=\"model.hasDescriptionUnderInput\" [class]=\"model.cssDescription\" [model]=\"model.locDescription\" sv-ng-string></div>\n </div>\n <div [element]=\"model\" *ngIf=\"model.hasTitleOnBottom\" sv-ng-element-header></div>\n <div *ngIf=\"model.showErrorsBelowQuestion && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n </div>\n</ng-template>", components: [{ type: ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: ["element", "location"] }, { type: ElementHeaderComponent, selector: "'[sv-ng-element-header]'", inputs: ["element"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: SurveyCommentComponent, selector: "sv-ng-comment, '[sv-ng-comment]'", inputs: ["question"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
1091
1091
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionComponent, decorators: [{
1092
1092
  type: Component,
1093
1093
  args: [{
@@ -1183,6 +1183,10 @@ class PopupComponent extends BaseAngular {
1183
1183
  }
1184
1184
  onModelChanged() {
1185
1185
  var _a;
1186
+ if (this.model) {
1187
+ this.model.resetComponentElement();
1188
+ this.model.dispose();
1189
+ }
1186
1190
  this.model = createPopupViewModel(this.popupModel, (_a = this.viewContainerRef) === null || _a === void 0 ? void 0 : _a.element.nativeElement);
1187
1191
  }
1188
1192
  ngAfterViewInit() {
@@ -1195,6 +1199,11 @@ class PopupComponent extends BaseAngular {
1195
1199
  ngOnInit() {
1196
1200
  this.onModelChanged();
1197
1201
  }
1202
+ ngOnDestroy() {
1203
+ this.model.resetComponentElement();
1204
+ this.model.dispose();
1205
+ super.ngOnDestroy();
1206
+ }
1198
1207
  }
1199
1208
  PopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1200
1209
  PopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PopupComponent, selector: "sv-ng-popup, '[sv-ng-popup]'", inputs: { popupModel: "popupModel", getTarget: "getTarget" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #containerRef><sv-ng-popup-container [model]='model' ></sv-ng-popup-container></div>", isInline: true, components: [{ type: PopupBaseContainerComponent, selector: "sv-ng-popup-container, '[sv-ng-popup-container]'", inputs: ["model"] }] });
@@ -1882,7 +1891,7 @@ class ComponentsContainerComponent extends EmbeddedViewContentComponent {
1882
1891
  }
1883
1892
  }
1884
1893
  ComponentsContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ComponentsContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1885
- ComponentsContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ComponentsContainerComponent, selector: "sv-components-container, [sv-components-container], sv-ng-components-container", inputs: { survey: "survey", container: "container", needRenderWrapper: "needRenderWrapper" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <ng-container *ngIf=\"isNeedRenderWrapper\">\n <div *ngIf=\"components.length > 0\" class=\"sv-components-column\">\n <ng-container *ngFor=\"let component of components\">\n <ng-template [component]=\"{ name: component.component, data: { survey: survey, model: component.data } }\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isNeedRenderWrapper && components.length > 0\">\n <ng-container *ngFor=\"let component of components\">\n <ng-template [component]=\"{ name: component.component, data: { survey: survey, model: component.data } }\"></ng-template>\n </ng-container>\n </ng-container>\n</ng-template>", styles: [":host{display:none}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
1894
+ ComponentsContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ComponentsContainerComponent, selector: "sv-components-container, [sv-components-container], sv-ng-components-container", inputs: { survey: "survey", container: "container", needRenderWrapper: "needRenderWrapper" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <ng-container *ngIf=\"isNeedRenderWrapper\">\n <div *ngIf=\"components.length > 0\" class=\"sv-components-column\">\n <ng-container *ngFor=\"let component of components\">\n <ng-template [component]=\"{ name: component.component, data: { survey: survey, container: container, model: component.data } }\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isNeedRenderWrapper && components.length > 0\">\n <ng-container *ngFor=\"let component of components\">\n <ng-template [component]=\"{ name: component.component, data: { survey: survey, container: container, model: component.data } }\"></ng-template>\n </ng-container>\n </ng-container>\n</ng-template>", styles: [":host{display:none}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
1886
1895
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ComponentsContainerComponent, decorators: [{
1887
1896
  type: Component,
1888
1897
  args: [{
@@ -2168,6 +2177,10 @@ class ListComponent extends BaseAngular {
2168
2177
  this.model.initListContainerHtmlElement(this.listContainerElement.nativeElement);
2169
2178
  }
2170
2179
  }
2180
+ ngOnDestroy() {
2181
+ this.model.initListContainerHtmlElement(undefined);
2182
+ super.ngOnDestroy();
2183
+ }
2171
2184
  }
2172
2185
  ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2173
2186
  ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ListComponent, selector: "sv-ng-list, '[sv-ng-list]'", inputs: { model: "model" }, viewQueries: [{ propertyName: "listContainerElement", first: true, predicate: ["listContainerElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div [class]=\"model.cssClasses.root\" #listContainerElement>\n <div *ngIf=\"model.showFilter\" [class]=\"model.cssClasses.filter\">\n <div [class]=\"model.cssClasses.filterIcon\">\n <svg [iconName]=\"'icon-search'\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </div>\n <input type=\"text\" [class]=\"model.cssClasses.filterInput\" [(ngModel)]=\"model.filterString\"\n [attr.aria-label]=\"model.filterStringPlaceholder || ''\"\n [attr.placeholder]=\"model.filterStringPlaceholder || ''\" \n (keyup)=\"onGoToItems($event)\" />\n <button *ngIf=\"model.showSearchClearButton && !!model.filterString\" (click)=\"model.onClickSearchClearButton($event)\" [class]=\"model.cssClasses.searchClearButtonIcon\">\n <svg [iconName]=\"'icon-searchclear'\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </button>\n </div>\n <div [class]=\"model.cssClasses.emptyContainer\" [visible]=\"model.isEmpty\">\n <div [class]=\"model.cssClasses.emptyText\" [attr.aria-label]=\"model.emptyMessage || ''\">{{ model.emptyMessage }}</div>\n </div>\n <ul *ngIf=\"model.renderElements\" [class]=\"model.getListClass()\" role=\"listbox\" [attr.id]=\"model.elementId\" [visible]=\"!model.isEmpty\" (mousedown)=\"onMouseDown($event)\" (keydown)=\"onKeyDown($event)\" (mousemove)=\"onMouseMove($event)\">\n <sv-ng-list-item *ngFor=\"let item of model.renderedActions; trackBy: trackItemBy\" [listModel]=\"model\" [model]=\"item\"></sv-ng-list-item>\n <!--ko foreach: model.renderedActions -->\n <!-- ko component: { name: 'sv-list-item', params: { item: $data, model: $parent.model } } -->\n <!-- /ko -->\n <!-- /ko -->\n </ul>\n </div>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: ListItemComponent, selector: "sv-ng-list-item, '[sv-ng-list-item]'", inputs: ["element", "model", "listModel"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
@@ -2350,14 +2363,16 @@ class ProgressDefaultComponent extends EmbeddedViewContentComponent {
2350
2363
  }
2351
2364
  }
2352
2365
  ProgressDefaultComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressDefaultComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2353
- ProgressDefaultComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressDefaultComponent, selector: "sv-ng-progress-default", inputs: { model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div [class]=\"model.getProgressCssClasses()\">\n <div [class]=\"model.css.progressBar\" [style.width]=\"model.progressValue + '%'\"\n role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <span [class]=\"getProgressTextInBarCss(model.css)\">\n {{ model.progressText }}\n </span>\n </div>\n <span [class]=\"getProgressTextUnderBarCss(model.css)\"> {{ model.progressText }} </span>\n </div>\n</ng-template>" });
2366
+ ProgressDefaultComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressDefaultComponent, selector: "sv-ng-progress-default", inputs: { container: "container", model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div [class]=\"model.getProgressCssClasses(container)\">\n <div [class]=\"model.css.progressBar\" [style.width]=\"model.progressValue + '%'\"\n role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <span [class]=\"getProgressTextInBarCss(model.css)\">\n {{ model.progressText }}\n </span>\n </div>\n <span [class]=\"getProgressTextUnderBarCss(model.css)\"> {{ model.progressText }} </span>\n </div>\n</ng-template>" });
2354
2367
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressDefaultComponent, decorators: [{
2355
2368
  type: Component,
2356
2369
  args: [{
2357
2370
  selector: "sv-ng-progress-default",
2358
2371
  templateUrl: "./progress.component.html"
2359
2372
  }]
2360
- }], propDecorators: { model: [{
2373
+ }], propDecorators: { container: [{
2374
+ type: Input
2375
+ }], model: [{
2361
2376
  type: Input
2362
2377
  }] } });
2363
2378
  AngularComponentFactory.Instance.registerComponent("sv-progress-progress", ProgressDefaultComponent);
@@ -2545,6 +2560,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
2545
2560
  }] });
2546
2561
  AngularComponentFactory.Instance.registerComponent("matrix-question", MatrixQuestionComponent);
2547
2562
 
2563
+ class LoadingIndicatorComponent extends EmbeddedViewContentComponent {
2564
+ }
2565
+ LoadingIndicatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LoadingIndicatorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2566
+ LoadingIndicatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LoadingIndicatorComponent, selector: "sv-ng-loading-indicator", usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div class=\"sd-loading-indicator\">\n <svg [iconName]=\"'icon-loading'\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </div>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }] });
2567
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LoadingIndicatorComponent, decorators: [{
2568
+ type: Component,
2569
+ args: [{
2570
+ templateUrl: "./loading-indicator.component.html",
2571
+ selector: "sv-ng-loading-indicator",
2572
+ styleUrls: ["../../hide-host.scss"]
2573
+ }]
2574
+ }] });
2575
+
2548
2576
  class FileQuestionComponent extends QuestionAngular {
2549
2577
  constructor() {
2550
2578
  super(...arguments);
@@ -2554,7 +2582,7 @@ class FileQuestionComponent extends QuestionAngular {
2554
2582
  }
2555
2583
  }
2556
2584
  FileQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FileQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2557
- FileQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FileQuestionComponent, selector: "sv-ng-file-question", usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.fileRootCss\" #contentElement>\n <input\n [class]=\"model.cssClasses.fileInput\"\n *ngIf=\"!model.isReadOnly\"\n tabindex=\"-1\"\n type=\"file\"\n [attr.id]=\"model.inputId\"\n (change)=\"model.doChange($event)\"\n [attr.aria-required]=\"model.ariaRequired\"\n [attr.aria-label]=\"model.ariaLabel\"\n [attr.aria-invalid]=\"model.ariaInvalid\"\n [attr.aria-describedby]=\"model.ariaDescribedBy\"\n [attr.multiple]=\"model.multipleRendered\"\n [attr.title]=\"model.inputTitle\"\n [attr.accept]=\"model.acceptedTypes\"\n [attr.capture]=\"model.renderCapture\"\n />\n <input\n *ngIf=\"model.isReadOnly\"\n type=\"file\"\n disabled\n [class]=\"model.getReadOnlyFileCss()\"\n [attr.id]=\"model.inputId\"\n [attr.multiple]=\"model.multipleRendered\"\n [attr.placeholder]=\"model.title\"\n style=\"color: transparent\"\n />\n <div [class]=\"model.cssClasses.dragArea\"\n (dragenter)=\"model.onDragEnter($event)\"\n (drop)=\"model.onDrop($event)\"\n (dragover)=\"model.onDragOver($event)\"\n (dragleave)=\"model.onDragLeave($event)\"> \n <div\n [class]=\"model.getFileDecoratorCss()\"\n >\n <span [class]=\"model.cssClasses.dragAreaPlaceholder\">{{ model.renderedPlaceholder }}</span>\n <div [class]=\"model.cssClasses.wrapper\">\n <label\n *ngIf=\"!model.isReadOnly\"\n role=\"button\"\n tabindex=\"0\"\n [class]=\"model.getChooseFileCss()\"\n [attr.for]=\"model.inputId\"\n [attr.aria-label]=\"model.chooseButtonText\"\n [key2click]\n >\n <span>{{ model.chooseButtonText }}</span>\n <svg *ngIf=\"model.cssClasses.chooseFileIconId\" [title]=\"model.chooseButtonText\" [iconName]=\"model.cssClasses.chooseFileIconId\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </label>\n <span\n [class]=\"model.cssClasses.noFileChosen\"\n *ngIf=\"model.isEmpty()\"\n >{{ model.noFileChosenCaption }}</span\n >\n </div>\n </div>\n <button\n type=\"button\"\n *ngIf=\"model.showRemoveButton\"\n [class]=\"model.cssClasses.removeButton\"\n (click)=\"model.doClean($event)\"\n >\n <span>{{ model.clearButtonCaption }}</span>\n <svg *ngIf=\"model.cssClasses.removeButtonIconId\" [iconName]=\"model.cssClasses.removeButtonIconId\" [size]=\"'auto'\" [title]=\"model.clearButtonCaption\" sv-ng-svg-icon></svg>\n </button>\n <div [class]=\"model.cssClasses.fileList || undefined\" *ngIf=\"!model.isEmpty()\">\n <span\n *ngFor=\"let val of model.previewValue; index as index; trackBy: trackFilesFn\"\n [visible]=\"val && model.isPreviewVisible(index)\"\n [class]=\"model.cssClasses.preview\"\n >\n <div *ngIf=\"val.name && model.cssClasses.fileSign\" [class]=\"model.cssClasses.fileSign\">\n <a\n (click)=\"model.doDownloadFile($event, val)\"\n [attr.href]=\"val.content | safeUrl\"\n [attr.title]=\"val.name\"\n [attr.download]=\"val.name\"\n [style.width]=\"model.imageWidth\"\n >{{ val.name }}</a\n >\n </div>\n <div [class]=\"model.cssClasses.imageWrapper\">\n <img\n *ngIf=\"model.canPreviewImage(val)\"\n [attr.src]=\"val.content | safeUrl\"\n [style.height]=\"model.imageHeight\"\n [style.width]=\"model.imageWidth\"\n alt=\"File preview\"\n />\n <svg *ngIf=\"model.defaultImage(val)\" \n [iconName]=\"model.cssClasses.defaultImageIconId\" [partCss]=\"model.cssClasses.defaultImage\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n <div *ngIf=\"val.name && !model.isReadOnly\" [class]=\"model.cssClasses.removeFileButton\" (click)=\"model.doRemoveFile(val)\">\n <span\n [class]=\"model.cssClasses.removeFile\"\n >{{ model.removeFileCaption }}</span\n >\n <svg *ngIf=\"model.cssClasses.removeFileSvgIconId\" [title]=\"model.removeFileCaption\" [partCss]=\"model.cssClasses.removeFileSvg\" [iconName]=\"model.cssClasses.removeFileSvgIconId\" [size]=\"'auto'\" sv-ng-svg-icon ></svg>\n </div>\n </div>\n <div *ngIf=\"val.name && model.cssClasses.fileSignBottom\" [class]=\"model.cssClasses.fileSignBottom\">\n <a\n (click)=\"model.doDownloadFile($event, val)\"\n [attr.href]=\"val.content | safeUrl\"\n [attr.title]=\"val.name\"\n [attr.download]=\"val.name\"\n [style.width]=\"model.imageWidth\"\n >{{ val.name }}</a\n >\n </div>\n </span>\n </div>\n <button\n type=\"button\"\n *ngIf=\"model.showRemoveButtonBottom\"\n [class]=\"model.showRemoveButtonBottom\"\n (click)=\"model.doClean($event)\"\n >\n <span>{{ model.clearButtonCaption }}</span>\n <svg *ngIf=\"model.cssClasses.removeButtonIconId\" [iconName]=\"model.cssClasses.removeButtonIconId\" [size]=\"'auto'\" [title]=\"model.clearButtonCaption\" sv-ng-svg-icon></svg>\n </button>\n <sv-action-bar *ngIf=\"model.mobileFileNavigatorVisible\" [model]=\"model.mobileFileNavigator\"></sv-action-bar>\n </div>\n</div>", components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: Key2ClickDirective, selector: "[key2click]", inputs: ["key2click"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }], pipes: { "safeUrl": SafeUrlPipe } });
2585
+ FileQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FileQuestionComponent, selector: "sv-ng-file-question", usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.fileRootCss\" #contentElement>\n <input [class]=\"model.cssClasses.fileInput\" *ngIf=\"!model.isReadOnly\" tabindex=\"-1\" type=\"file\"\n [attr.id]=\"model.inputId\" (change)=\"model.doChange($event)\" [attr.aria-required]=\"model.ariaRequired\"\n [attr.aria-label]=\"model.ariaLabel\" [attr.aria-invalid]=\"model.ariaInvalid\"\n [attr.aria-describedby]=\"model.ariaDescribedBy\" [attr.multiple]=\"model.multipleRendered\"\n [attr.title]=\"model.inputTitle\" [attr.accept]=\"model.acceptedTypes\" [attr.capture]=\"model.renderCapture\" />\n <input *ngIf=\"model.isReadOnly\" type=\"file\" disabled [class]=\"model.getReadOnlyFileCss()\" [attr.id]=\"model.inputId\"\n [attr.multiple]=\"model.multipleRendered\" [attr.placeholder]=\"model.title\" style=\"color: transparent\" />\n <div [class]=\"model.cssClasses.dragArea\" (dragenter)=\"model.onDragEnter($event)\" (drop)=\"model.onDrop($event)\"\n (dragover)=\"model.onDragOver($event)\" (dragleave)=\"model.onDragLeave($event)\">\n <div [class]=\"model.getFileDecoratorCss()\">\n <ng-container *ngIf=\"model.showLoadingIndicator\">\n <sv-ng-loading-indicator></sv-ng-loading-indicator>\n </ng-container>\n <ng-container *ngIf=\"model.showChooseButton\">\n <span [class]=\"model.cssClasses.dragAreaPlaceholder\">{{ model.renderedPlaceholder }}</span>\n <div [class]=\"model.cssClasses.wrapper\">\n <label *ngIf=\"!model.isReadOnly\" role=\"button\" tabindex=\"0\" [class]=\"model.getChooseFileCss()\"\n [attr.for]=\"model.inputId\" [attr.aria-label]=\"model.chooseButtonText\" [key2click]>\n <span>{{ model.chooseButtonText }}</span>\n <svg *ngIf=\"model.cssClasses.chooseFileIconId\" [title]=\"model.chooseButtonText\"\n [iconName]=\"model.cssClasses.chooseFileIconId\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </label>\n <span [class]=\"model.cssClasses.noFileChosen\" *ngIf=\"model.isEmpty()\">{{ model.noFileChosenCaption }}</span>\n </div>\n </ng-container>\n </div>\n <button type=\"button\" *ngIf=\"model.showRemoveButton\" [class]=\"model.cssClasses.removeButton\"\n (click)=\"model.doClean($event)\">\n <span>{{ model.clearButtonCaption }}</span>\n <svg *ngIf=\"model.cssClasses.removeButtonIconId\" [iconName]=\"model.cssClasses.removeButtonIconId\" [size]=\"'auto'\"\n [title]=\"model.clearButtonCaption\" sv-ng-svg-icon></svg>\n </button>\n <div [class]=\"model.cssClasses.fileList || undefined\" *ngIf=\"model.allowShowPreview\">\n <span *ngFor=\"let val of model.previewValue; index as index; trackBy: trackFilesFn\"\n [visible]=\"val && model.isPreviewVisible(index)\" [class]=\"model.cssClasses.preview\">\n <div *ngIf=\"val.name && model.cssClasses.fileSign\" [class]=\"model.cssClasses.fileSign\">\n <a (click)=\"model.doDownloadFile($event, val)\" [attr.href]=\"val.content | safeUrl\" [attr.title]=\"val.name\"\n [attr.download]=\"val.name\" [style.width]=\"model.imageWidth\">{{ val.name }}</a>\n </div>\n <div [class]=\"model.cssClasses.imageWrapper\">\n <img *ngIf=\"model.canPreviewImage(val)\" [attr.src]=\"val.content | safeUrl\" [style.height]=\"model.imageHeight\"\n [style.width]=\"model.imageWidth\" alt=\"File preview\" />\n <svg *ngIf=\"model.defaultImage(val)\" [iconName]=\"model.cssClasses.defaultImageIconId\"\n [partCss]=\"model.cssClasses.defaultImage\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n <div *ngIf=\"val.name && !model.isReadOnly\" [class]=\"model.cssClasses.removeFileButton\"\n (click)=\"model.doRemoveFile(val)\">\n <span [class]=\"model.cssClasses.removeFile\">{{ model.removeFileCaption }}</span>\n <svg *ngIf=\"model.cssClasses.removeFileSvgIconId\" [title]=\"model.removeFileCaption\"\n [partCss]=\"model.cssClasses.removeFileSvg\" [iconName]=\"model.cssClasses.removeFileSvgIconId\"\n [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </div>\n </div>\n <div *ngIf=\"val.name && model.cssClasses.fileSignBottom\" [class]=\"model.cssClasses.fileSignBottom\">\n <a (click)=\"model.doDownloadFile($event, val)\" [attr.href]=\"val.content | safeUrl\" [attr.title]=\"val.name\"\n [attr.download]=\"val.name\" [style.width]=\"model.imageWidth\">{{ val.name }}</a>\n </div>\n </span>\n </div>\n <button type=\"button\" *ngIf=\"model.showRemoveButtonBottom\" [class]=\"model.showRemoveButtonBottom\"\n (click)=\"model.doClean($event)\">\n <span>{{ model.clearButtonCaption }}</span>\n <svg *ngIf=\"model.cssClasses.removeButtonIconId\" [iconName]=\"model.cssClasses.removeButtonIconId\" [size]=\"'auto'\"\n [title]=\"model.clearButtonCaption\" sv-ng-svg-icon></svg>\n </button>\n <sv-action-bar *ngIf=\"model.mobileFileNavigatorVisible\" [model]=\"model.mobileFileNavigator\"></sv-action-bar>\n </div>\n</div>", components: [{ type: LoadingIndicatorComponent, selector: "sv-ng-loading-indicator" }, { type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: Key2ClickDirective, selector: "[key2click]", inputs: ["key2click"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }], pipes: { "safeUrl": SafeUrlPipe } });
2558
2586
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FileQuestionComponent, decorators: [{
2559
2587
  type: Component,
2560
2588
  args: [{
@@ -2596,11 +2624,34 @@ AngularComponentFactory.Instance.registerComponent("signaturepad-question", Sign
2596
2624
 
2597
2625
  class MultipleTextItemComponent extends BaseAngular {
2598
2626
  getModel() {
2599
- return this.model.editor;
2627
+ if (!this.model.isErrorsCell) {
2628
+ return this.model.item.editor;
2629
+ }
2630
+ return null;
2631
+ }
2632
+ get item() {
2633
+ return this.model.item;
2634
+ }
2635
+ get editor() {
2636
+ return this.model.item.editor;
2637
+ }
2638
+ ngDoCheck() {
2639
+ super.ngDoCheck();
2640
+ if (this.model.isErrorsCell) {
2641
+ this.editor.registerFunctionOnPropertyValueChanged("errors", () => {
2642
+ this.update();
2643
+ }, "__ngSubscription");
2644
+ }
2645
+ }
2646
+ ngOnDestroy() {
2647
+ super.ngOnDestroy();
2648
+ if (this.model.isErrorsCell) {
2649
+ this.editor.unRegisterFunctionOnPropertyValueChanged("errors", "__ngSubscription");
2650
+ }
2600
2651
  }
2601
2652
  }
2602
2653
  MultipleTextItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2603
- MultipleTextItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MultipleTextItemComponent, selector: "'[sv-ng-multipletext-item]'", inputs: { question: "question", model: "model" }, usesInheritance: true, ngImport: i0, template: "<label [class]=\"question.getItemLabelCss(model)\">\n <span [class]=\"question.getItemTitleCss()\">\n <span *ngIf=\" model.editor.isRequireTextBeforeTitle || model.editor.isRequireTextOnStart\"\n [class]=\"question.cssClasses.requiredText\">{{ model.editor.requiredText }}</span>\n <sv-ng-string [model]=\"model.locTitle\"></sv-ng-string>\n <span\n *ngIf=\"model.editor.isRequireTextAfterTitle\"\n [class]=\"question.cssClasses.requiredText\"\n >{{ model.editor.requiredText }}</span\n >\n </span>\n <div [class]=\"question.getItemCss()\" (focusin)=\"model.focusIn()\">\n <div *ngIf=\"model.editor.showErrorOnTop && model.editor.hasVisibleErrors\" [element]=\"model.editor\" sv-ng-errors></div>\n <sv-ng-text-question [model]=\"model.editor\"></sv-ng-text-question>\n <div *ngIf=\"model.editor.showErrorOnBottom && model.editor.hasVisibleErrors\" [element]=\"model.editor\" sv-ng-errors></div>\n </div>\n <div *ngIf=\"model.editor.isErrorsModeTooltip && model.editor.hasVisibleErrors\" [element]=\"model.editor\" [location]=\"'tooltip'\" sv-ng-errors></div>\n</label>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: ["element", "location"] }, { type: TextQuestionComponent, selector: "sv-ng-text-question" }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2654
+ MultipleTextItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MultipleTextItemComponent, selector: "'[sv-ng-multipletext-item]'", inputs: { question: "question", model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!model.isErrorsCell\">\n <label [class]=\"question.getItemLabelCss(item)\">\n <span [class]=\"question.getItemTitleCss()\">\n <span *ngIf=\" item.editor.isRequireTextBeforeTitle || item.editor.isRequireTextOnStart\"\n [class]=\"question.cssClasses.requiredText\">{{ item.editor.requiredText }}</span>\n <sv-ng-string [model]=\"item.locTitle\"></sv-ng-string>\n <span *ngIf=\"item.editor.isRequireTextAfterTitle\">&nbsp;</span>\n <span *ngIf=\"item.editor.isRequireTextAfterTitle\" [class]=\"question.cssClasses.requiredText\" aria-hidden=\"true\">{{\n item.editor.requiredText }}</span>\n </span>\n <div [class]=\"question.getItemCss()\" (focusin)=\"item.focusIn()\">\n <sv-ng-text-question [model]=\"item.editor\"></sv-ng-text-question>\n </div>\n </label>\n</ng-container>\n<ng-container *ngIf=\"model.isErrorsCell\">\n <div *ngIf=\"item.editor.hasVisibleErrors\" [element]=\"item.editor\" sv-ng-errors></div>\n</ng-container>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: TextQuestionComponent, selector: "sv-ng-text-question" }, { type: ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: ["element", "location"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2604
2655
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextItemComponent, decorators: [{
2605
2656
  type: Component,
2606
2657
  args: [{
@@ -2613,6 +2664,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
2613
2664
  type: Input
2614
2665
  }] } });
2615
2666
 
2667
+ class MultipleTextRowComponent extends BaseAngular {
2668
+ getModel() {
2669
+ return this.model;
2670
+ }
2671
+ trackItemBy(_, cell) {
2672
+ return "item" + cell.item.editor.id;
2673
+ }
2674
+ }
2675
+ MultipleTextRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2676
+ MultipleTextRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MultipleTextRowComponent, selector: "sv-ng-multipletext-row", inputs: { question: "question", model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <tr [class]=\"question.cssClasses.row\" *ngIf=\"model.isVisible\">\n <ng-container *ngFor=\"let cell of model.cells; trackBy: trackItemBy\">\n <td [class]=\"cell.className\" [question]=\"question\" [model]=\"cell\" sv-ng-multipletext-item></td>\n </ng-container>\n </tr>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: MultipleTextItemComponent, selector: "'[sv-ng-multipletext-item]'", inputs: ["question", "model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
2677
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextRowComponent, decorators: [{
2678
+ type: Component,
2679
+ args: [{
2680
+ selector: "sv-ng-multipletext-row",
2681
+ templateUrl: "./multipletextrow.component.html",
2682
+ styleUrls: ["../hide-host.scss"]
2683
+ }]
2684
+ }], propDecorators: { question: [{
2685
+ type: Input
2686
+ }], model: [{
2687
+ type: Input
2688
+ }] } });
2689
+
2616
2690
  class MultipleTextComponent extends QuestionAngular {
2617
2691
  constructor() {
2618
2692
  super(...arguments);
@@ -2620,12 +2694,9 @@ class MultipleTextComponent extends QuestionAngular {
2620
2694
  return this.model.inputId + "rowkey" + index;
2621
2695
  };
2622
2696
  }
2623
- trackItemBy(_, item) {
2624
- return "item" + item.editor.id;
2625
- }
2626
2697
  }
2627
2698
  MultipleTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2628
- MultipleTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MultipleTextComponent, selector: "sv-ng-multipletext-question", usesInheritance: true, ngImport: i0, template: "<table [class]=\"model.cssClasses.root\" #contentElement>\n <tbody>\n <tr\n *ngFor=\"let row of model.getRows(); index as rowIndex; trackBy: trackRowBy\"\n [class]=\"model.cssClasses.row\"\n >\n <ng-container *ngFor=\"let item of row; trackBy: trackItemBy\" >\n <td [class]=\"model.cssClasses.cell\" [question]=\"model\" [model]=\"item\" sv-ng-multipletext-item></td>\n </ng-container>\n </tr>\n </tbody>\n</table>\n", components: [{ type: MultipleTextItemComponent, selector: "'[sv-ng-multipletext-item]'", inputs: ["question", "model"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
2699
+ MultipleTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MultipleTextComponent, selector: "sv-ng-multipletext-question", usesInheritance: true, ngImport: i0, template: "<table [class]=\"model.cssClasses.root\" #contentElement>\n <tbody>\n <ng-container *ngFor=\"let row of model.getRows(); index as rowIndex; trackBy: trackRowBy\">\n <sv-ng-multipletext-row [model]=\"row\" [question]=\"model\"></sv-ng-multipletext-row>\n </ng-container>\n </tbody>\n</table>", components: [{ type: MultipleTextRowComponent, selector: "sv-ng-multipletext-row", inputs: ["question", "model"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
2629
2700
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextComponent, decorators: [{
2630
2701
  type: Component,
2631
2702
  args: [{
@@ -3286,7 +3357,7 @@ SurveyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
3286
3357
  MultipleTextComponent, MultipleTextItemComponent, DynamicComponentDirective, RankingQuestionComponent, RankingItemComponent, PanelDynamicQuestionComponent, EmbeddedViewContentComponent, CustomWidgetComponent, MatrixCellComponent, MatrixTableComponent, MatrixDropdownComponent,
3287
3358
  MatrixDynamicComponent, MatrixDetailButtonComponent, MatrixDynamicRemoveButtonComponent, MatrixDynamicDragDropIconComponent, MatrixRequiredHeader, ExpressionComponent, SafeResourceUrlPipe, BrandInfoComponent,
3288
3359
  CustomQuestionComponent, CompositeQuestionComponent, ButtonGroupItemComponent, ButtonGroupQuestionComponent, MatrixRowComponent, ModalComponent, LogoImageComponent, SkeletonComponent, TimerPanelComponent, PaneldynamicRemoveButtonComponent,
3289
- NotifierComponent, ComponentsContainerComponent], imports: [CommonModule, FormsModule], exports: [VisibleDirective, Key2ClickDirective, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, ElementComponent, TemplateRendererComponent,
3360
+ NotifierComponent, ComponentsContainerComponent, MultipleTextRowComponent, LoadingIndicatorComponent], imports: [CommonModule, FormsModule], exports: [VisibleDirective, Key2ClickDirective, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, ElementComponent, TemplateRendererComponent,
3290
3361
  SurveyComponent, SurveyContentComponent, PopupSurveyComponent, PageComponent, PanelComponent, QuestionComponent, StringViewerComponent, SurveyStringComponent, StringEditorComponent,
3291
3362
  QuestionSkeletonComponent, TextQuestionComponent, RadiogroupComponent, RadiogroupItemComponent, CheckboxComponent, CheckboxItemComponent,
3292
3363
  CharacterCounterComponent,
@@ -3301,7 +3372,7 @@ SurveyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
3301
3372
  MultipleTextComponent, MultipleTextItemComponent, DynamicComponentDirective, RankingQuestionComponent, RankingItemComponent, PanelDynamicQuestionComponent, EmbeddedViewContentComponent, CustomWidgetComponent, MatrixCellComponent, MatrixTableComponent, MatrixDropdownComponent,
3302
3373
  MatrixDynamicComponent, MatrixDetailButtonComponent, MatrixDynamicRemoveButtonComponent, MatrixDynamicDragDropIconComponent, MatrixRequiredHeader, ExpressionComponent, SafeResourceUrlPipe,
3303
3374
  CustomQuestionComponent, CompositeQuestionComponent, ButtonGroupQuestionComponent, ModalComponent, LogoImageComponent, SkeletonComponent, TimerPanelComponent, PaneldynamicRemoveButtonComponent,
3304
- NotifierComponent, ComponentsContainerComponent] });
3375
+ NotifierComponent, ComponentsContainerComponent, MultipleTextRowComponent, LoadingIndicatorComponent] });
3305
3376
  SurveyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyModule, providers: [PopupService], imports: [[
3306
3377
  CommonModule, FormsModule
3307
3378
  ]] });
@@ -3323,7 +3394,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
3323
3394
  MultipleTextComponent, MultipleTextItemComponent, DynamicComponentDirective, RankingQuestionComponent, RankingItemComponent, PanelDynamicQuestionComponent, EmbeddedViewContentComponent, CustomWidgetComponent, MatrixCellComponent, MatrixTableComponent, MatrixDropdownComponent,
3324
3395
  MatrixDynamicComponent, MatrixDetailButtonComponent, MatrixDynamicRemoveButtonComponent, MatrixDynamicDragDropIconComponent, MatrixRequiredHeader, ExpressionComponent, SafeResourceUrlPipe, BrandInfoComponent,
3325
3396
  CustomQuestionComponent, CompositeQuestionComponent, ButtonGroupItemComponent, ButtonGroupQuestionComponent, MatrixRowComponent, ModalComponent, LogoImageComponent, SkeletonComponent, TimerPanelComponent, PaneldynamicRemoveButtonComponent,
3326
- NotifierComponent, ComponentsContainerComponent
3397
+ NotifierComponent, ComponentsContainerComponent, MultipleTextRowComponent, LoadingIndicatorComponent
3327
3398
  ],
3328
3399
  imports: [
3329
3400
  CommonModule, FormsModule
@@ -3344,7 +3415,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
3344
3415
  MultipleTextComponent, MultipleTextItemComponent, DynamicComponentDirective, RankingQuestionComponent, RankingItemComponent, PanelDynamicQuestionComponent, EmbeddedViewContentComponent, CustomWidgetComponent, MatrixCellComponent, MatrixTableComponent, MatrixDropdownComponent,
3345
3416
  MatrixDynamicComponent, MatrixDetailButtonComponent, MatrixDynamicRemoveButtonComponent, MatrixDynamicDragDropIconComponent, MatrixRequiredHeader, ExpressionComponent, SafeResourceUrlPipe,
3346
3417
  CustomQuestionComponent, CompositeQuestionComponent, ButtonGroupQuestionComponent, ModalComponent, LogoImageComponent, SkeletonComponent, TimerPanelComponent, PaneldynamicRemoveButtonComponent,
3347
- NotifierComponent, ComponentsContainerComponent
3418
+ NotifierComponent, ComponentsContainerComponent, MultipleTextRowComponent, LoadingIndicatorComponent
3348
3419
  ],
3349
3420
  providers: [PopupService],
3350
3421
  }]
@@ -3354,5 +3425,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
3354
3425
  * Generated bundle index. Do not edit.
3355
3426
  */
3356
3427
 
3357
- export { ActionBarComponent, ActionBarItemComponent, ActionBarItemDropdownComponent, ActionComponent, AngularComponentFactory, BaseAngular, BooleanCheckboxComponent, BooleanQuestionComponent, BooleanRadioComponent, BooleanRadioItemComponent, BrandInfoComponent, ButtonGroupQuestionComponent, CharacterCounterComponent, CheckboxComponent, CheckboxItemComponent, CommentQuestionComponent, ComponentsContainerComponent, CompositeQuestionComponent, CustomQuestionComponent, CustomWidgetComponent, DropdownComponent, DropdownOptionItemComponent, DropdownQuestionComponent, DropdownSelectComponent, DynamicComponentDirective, DynamicHeadComponent, ElementComponent, ElementHeaderComponent, ElementTitleComponent, EmbeddedViewContentComponent, ErrorsComponent, ExpressionComponent, FileQuestionComponent, HtmlQuestionComponent, ImagePickerItemComponent, ImagePickerQuestionComponent, ImageQuestionComponent, Key2ClickDirective, ListComponent, ListItemComponent, LogoImageComponent, MatrixCellComponent, MatrixDetailButtonComponent, MatrixDropdownComponent, MatrixDynamicComponent, MatrixDynamicDragDropIconComponent, MatrixDynamicRemoveButtonComponent, MatrixQuestionComponent, MatrixRequiredHeader, MatrixTableComponent, ModalComponent, MultipleTextComponent, MultipleTextItemComponent, NotifierComponent, PageComponent, PanelComponent, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, PanelDynamicQuestionComponent, PaneldynamicAction, PaneldynamicRemoveButtonComponent, PopupBaseContainerComponent, PopupComponent, PopupPointerComponent, PopupService, PopupSurveyComponent, ProgressButtonsComponent, ProgressDefaultComponent, ProgressTocComponent, QuestionAngular, QuestionComponent, QuestionSkeletonComponent, RadiogroupComponent, RadiogroupItemComponent, RankingItemComponent, RankingQuestionComponent, RatingDropdownComponent, RatingItemComponent, RatingItemSmileyComponent, RatingItemStarComponent, RatingQuestionComponent, RowComponent, SafeHtmlPipe, SafeResourceUrlPipe, SafeUrlPipe, SelectBaseComponent, SelectBaseItemComponent, SignaturePadQuestionComponent, SkeletonComponent, StringEditorComponent, StringViewerComponent, SurveyCommentComponent, SurveyCommentOtherComponent, SurveyComponent, SurveyContentComponent, SurveyHeaderComponent, SurveyModule, SurveyNavigationButton, SurveyStringComponent, SvgIconComponent, TagboxComponent, TagboxFilterComponent, TagboxItemComponent, TagboxQuestionComponent, TemplateRendererComponent, TextQuestionComponent, TimerPanelComponent, VisibleDirective, getComponentName };
3428
+ export { ActionBarComponent, ActionBarItemComponent, ActionBarItemDropdownComponent, ActionComponent, AngularComponentFactory, BaseAngular, BooleanCheckboxComponent, BooleanQuestionComponent, BooleanRadioComponent, BooleanRadioItemComponent, BrandInfoComponent, ButtonGroupQuestionComponent, CharacterCounterComponent, CheckboxComponent, CheckboxItemComponent, CommentQuestionComponent, ComponentsContainerComponent, CompositeQuestionComponent, CustomQuestionComponent, CustomWidgetComponent, DropdownComponent, DropdownOptionItemComponent, DropdownQuestionComponent, DropdownSelectComponent, DynamicComponentDirective, DynamicHeadComponent, ElementComponent, ElementHeaderComponent, ElementTitleComponent, EmbeddedViewContentComponent, ErrorsComponent, ExpressionComponent, FileQuestionComponent, HtmlQuestionComponent, ImagePickerItemComponent, ImagePickerQuestionComponent, ImageQuestionComponent, Key2ClickDirective, ListComponent, ListItemComponent, LoadingIndicatorComponent, LogoImageComponent, MatrixCellComponent, MatrixDetailButtonComponent, MatrixDropdownComponent, MatrixDynamicComponent, MatrixDynamicDragDropIconComponent, MatrixDynamicRemoveButtonComponent, MatrixQuestionComponent, MatrixRequiredHeader, MatrixTableComponent, ModalComponent, MultipleTextComponent, MultipleTextItemComponent, MultipleTextRowComponent, NotifierComponent, PageComponent, PanelComponent, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, PanelDynamicQuestionComponent, PaneldynamicAction, PaneldynamicRemoveButtonComponent, PopupBaseContainerComponent, PopupComponent, PopupPointerComponent, PopupService, PopupSurveyComponent, ProgressButtonsComponent, ProgressDefaultComponent, ProgressTocComponent, QuestionAngular, QuestionComponent, QuestionSkeletonComponent, RadiogroupComponent, RadiogroupItemComponent, RankingItemComponent, RankingQuestionComponent, RatingDropdownComponent, RatingItemComponent, RatingItemSmileyComponent, RatingItemStarComponent, RatingQuestionComponent, RowComponent, SafeHtmlPipe, SafeResourceUrlPipe, SafeUrlPipe, SelectBaseComponent, SelectBaseItemComponent, SignaturePadQuestionComponent, SkeletonComponent, StringEditorComponent, StringViewerComponent, SurveyCommentComponent, SurveyCommentOtherComponent, SurveyComponent, SurveyContentComponent, SurveyHeaderComponent, SurveyModule, SurveyNavigationButton, SurveyStringComponent, SvgIconComponent, TagboxComponent, TagboxFilterComponent, TagboxItemComponent, TagboxQuestionComponent, TemplateRendererComponent, TextQuestionComponent, TimerPanelComponent, VisibleDirective, getComponentName };
3358
3429
  //# sourceMappingURL=survey-angular-ui.js.map