survey-angular-ui 2.0.0-rc.1 → 2.0.0-rc.10

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 (131) hide show
  1. package/base-angular.d.ts +3 -0
  2. package/bundles/survey-angular-ui.umd.js +52 -21
  3. package/bundles/survey-angular-ui.umd.js.map +1 -1
  4. package/components/tagbox/tagbox-item.component.d.ts +2 -2
  5. package/esm2015/base-angular.js +41 -13
  6. package/esm2015/components/tagbox/tagbox-item.component.js +5 -4
  7. package/esm2015/questions/imagepicker-item.component.js +2 -2
  8. package/esm2015/questions/imagepicker.component.js +2 -2
  9. package/esm2015/questions/paneldynamic.component.js +5 -5
  10. package/esm2015/row.component.js +5 -3
  11. package/esm2015/survey.component.js +2 -2
  12. package/fesm2015/survey-angular-ui.js +51 -20
  13. package/fesm2015/survey-angular-ui.js.map +1 -1
  14. package/package.json +2 -2
  15. package/components/cover/cover-cell.component.d.ts +0 -10
  16. package/components/cover/cover.component.d.ts +0 -12
  17. package/components/file-actions/choose-file.component.d.ts +0 -10
  18. package/esm2015/components/cover/cover-cell.component.js +0 -27
  19. package/esm2015/components/cover/cover.component.js +0 -31
  20. package/esm2015/components/file-actions/choose-file.component.js +0 -27
  21. package/esm2020/angular-ui.mjs +0 -103
  22. package/esm2020/angular-ui.module.mjs +0 -184
  23. package/esm2020/base-angular.mjs +0 -128
  24. package/esm2020/comment-other.component.mjs +0 -32
  25. package/esm2020/comment.component.mjs +0 -21
  26. package/esm2020/component-factory.mjs +0 -26
  27. package/esm2020/components/action-bar/action-bar-item-dropdown.component.mjs +0 -32
  28. package/esm2020/components/action-bar/action-bar-item.component.mjs +0 -22
  29. package/esm2020/components/action-bar/action-bar.component.mjs +0 -43
  30. package/esm2020/components/action-bar/action.component.mjs +0 -27
  31. package/esm2020/components/brand-info/brand-info.component.mjs +0 -13
  32. package/esm2020/components/dropdown/dropdown.component.mjs +0 -66
  33. package/esm2020/components/element-header/element-header.component.mjs +0 -32
  34. package/esm2020/components/element-title/dynamic-head.component.mjs +0 -20
  35. package/esm2020/components/element-title/element-title.component.mjs +0 -17
  36. package/esm2020/components/element-title/title-actions.component.mjs +0 -17
  37. package/esm2020/components/list/list-item.component.mjs +0 -48
  38. package/esm2020/components/list/list.component.mjs +0 -50
  39. package/esm2020/components/matrix-actions/detail-button/detail-button.component.mjs +0 -25
  40. package/esm2020/components/matrix-actions/drag-drop-icon/drag-drop-icon.mjs +0 -20
  41. package/esm2020/components/matrix-actions/remove-button/remove-button.component.mjs +0 -25
  42. package/esm2020/components/notifier/notifier.component.mjs +0 -22
  43. package/esm2020/components/paneldynamic-actions/paneldynamic-add-btn.component.mjs +0 -35
  44. package/esm2020/components/paneldynamic-actions/paneldynamic-next-btn.component.mjs +0 -18
  45. package/esm2020/components/paneldynamic-actions/paneldynamic-prev-btn.component.mjs +0 -18
  46. package/esm2020/components/paneldynamic-actions/paneldynamic-progress-text.component.mjs +0 -14
  47. package/esm2020/components/paneldynamic-actions/paneldynamic-remove-btn.component.mjs +0 -17
  48. package/esm2020/components/popup/modal-container.component.mjs +0 -42
  49. package/esm2020/components/popup/popup-container.component.mjs +0 -56
  50. package/esm2020/components/popup/popup-pointer.component.mjs +0 -22
  51. package/esm2020/components/popup/popup.component.mjs +0 -43
  52. package/esm2020/components/popup/popup.service.mjs +0 -26
  53. package/esm2020/components/progress/buttons/progress.component.mjs +0 -67
  54. package/esm2020/components/progress/default/progress.component.mjs +0 -27
  55. package/esm2020/components/renderAs/boolean-checkbox/boolean-checkbox.component.mjs +0 -21
  56. package/esm2020/components/renderAs/boolean-radio/boolean-radio-item.component.mjs +0 -22
  57. package/esm2020/components/renderAs/boolean-radio/boolean-radio.component.mjs +0 -18
  58. package/esm2020/components/renderAs/dropdown-select/dropdown-option-item.component.mjs +0 -23
  59. package/esm2020/components/renderAs/dropdown-select/dropdown-select.component.mjs +0 -38
  60. package/esm2020/components/renderAs/rating-dropdown/rating-dropdown.component.mjs +0 -18
  61. package/esm2020/components/skeleton/skeleton.component.mjs +0 -16
  62. package/esm2020/components/skeleton.component.mjs +0 -15
  63. package/esm2020/components/survey-actions/survey-nav-btn.component.mjs +0 -22
  64. package/esm2020/components/survey-header/logo-image.component.mjs +0 -20
  65. package/esm2020/components/survey-header/survey-header.component.mjs +0 -30
  66. package/esm2020/components/svg-icon/svg-icon.component.mjs +0 -68
  67. package/esm2020/components/tagbox/tagbox-filter.component.mjs +0 -22
  68. package/esm2020/components/tagbox/tagbox-item.component.mjs +0 -27
  69. package/esm2020/components/tagbox/tagbox.component.mjs +0 -44
  70. package/esm2020/components/timer-panel/timer-panel.component.mjs +0 -32
  71. package/esm2020/element.component.mjs +0 -55
  72. package/esm2020/embedded-view-content.component.mjs +0 -24
  73. package/esm2020/errors.component.mjs +0 -58
  74. package/esm2020/page.component.mjs +0 -35
  75. package/esm2020/panel.component.mjs +0 -38
  76. package/esm2020/popup.survey.component.mjs +0 -44
  77. package/esm2020/question.component.mjs +0 -54
  78. package/esm2020/question.mjs +0 -33
  79. package/esm2020/questions/boolean.component.mjs +0 -20
  80. package/esm2020/questions/button-group/button-group-item.component.mjs +0 -29
  81. package/esm2020/questions/button-group/button-group.component.mjs +0 -14
  82. package/esm2020/questions/checkbox-item.component.mjs +0 -24
  83. package/esm2020/questions/checkbox.component.mjs +0 -17
  84. package/esm2020/questions/comment.component.mjs +0 -18
  85. package/esm2020/questions/composite.component.mjs +0 -21
  86. package/esm2020/questions/custom.component.mjs +0 -27
  87. package/esm2020/questions/customwidget.component.mjs +0 -51
  88. package/esm2020/questions/dropdown.component.mjs +0 -17
  89. package/esm2020/questions/expression.component.mjs +0 -17
  90. package/esm2020/questions/file.component.mjs +0 -25
  91. package/esm2020/questions/html.component.mjs +0 -25
  92. package/esm2020/questions/image.component.mjs +0 -26
  93. package/esm2020/questions/imagepicker-item.component.mjs +0 -48
  94. package/esm2020/questions/imagepicker.component.mjs +0 -29
  95. package/esm2020/questions/matrix-row.component.mjs +0 -27
  96. package/esm2020/questions/matrix.component.mjs +0 -36
  97. package/esm2020/questions/matrixcell.component.mjs +0 -90
  98. package/esm2020/questions/matrixdropdown.component.mjs +0 -16
  99. package/esm2020/questions/matrixdynamic.component.mjs +0 -17
  100. package/esm2020/questions/matrixrequiredheader.component.mjs +0 -24
  101. package/esm2020/questions/matrixtable.component.mjs +0 -31
  102. package/esm2020/questions/multipletext.component.mjs +0 -25
  103. package/esm2020/questions/multipletextitem.component.mjs +0 -23
  104. package/esm2020/questions/paneldynamic.component.mjs +0 -79
  105. package/esm2020/questions/radiogroup-item.component.mjs +0 -18
  106. package/esm2020/questions/radiogroup.component.mjs +0 -22
  107. package/esm2020/questions/ranking-item.component.mjs +0 -24
  108. package/esm2020/questions/ranking.component.mjs +0 -31
  109. package/esm2020/questions/rating.component.mjs +0 -23
  110. package/esm2020/questions/selectbase-item.mjs +0 -33
  111. package/esm2020/questions/selectbase.component.mjs +0 -50
  112. package/esm2020/questions/signature.component.mjs +0 -17
  113. package/esm2020/questions/tagbox.component.mjs +0 -17
  114. package/esm2020/questions/text.component.mjs +0 -16
  115. package/esm2020/row.component.mjs +0 -58
  116. package/esm2020/string-editor.component.mjs +0 -26
  117. package/esm2020/string-viewer.component.mjs +0 -37
  118. package/esm2020/survey-angular-ui.mjs +0 -5
  119. package/esm2020/survey-content.component.mjs +0 -69
  120. package/esm2020/survey-string.component.mjs +0 -17
  121. package/esm2020/survey.component.mjs +0 -32
  122. package/esm2020/template-renderer.component.mjs +0 -23
  123. package/esm2020/utils/dynamic.directive.mjs +0 -52
  124. package/esm2020/utils/ng-key2click.directive.mjs +0 -69
  125. package/esm2020/utils/ng-show.directive.mjs +0 -27
  126. package/esm2020/utils/safe-html.pipe.mjs +0 -18
  127. package/esm2020/utils/safe-url.pipe.mjs +0 -33
  128. package/fesm2015/survey-angular-ui.mjs +0 -2864
  129. package/fesm2015/survey-angular-ui.mjs.map +0 -1
  130. package/fesm2020/survey-angular-ui.mjs +0 -2839
  131. package/fesm2020/survey-angular-ui.mjs.map +0 -1
@@ -69,8 +69,16 @@ class BaseAngular extends EmbeddedViewContentComponent {
69
69
  this.unMakeBaseElementAngular(this.getModel());
70
70
  this.previousModel = undefined;
71
71
  }
72
+ isBaseElementSubsribed(stateElement) {
73
+ return !!stateElement.__ngImplemented;
74
+ }
75
+ getBaseElementCallbacks(stateElement) {
76
+ var _a;
77
+ stateElement.__ngSubscribers = (_a = stateElement.__ngSubscribers) !== null && _a !== void 0 ? _a : [];
78
+ return (stateElement.__ngSubscribers);
79
+ }
72
80
  makeBaseElementAngular(stateElement) {
73
- if (!!stateElement && !stateElement.__ngImplemented) {
81
+ this.makeBaseElementAngularCallback = () => {
74
82
  this.isModelSubsribed = true;
75
83
  stateElement.__ngImplemented = true;
76
84
  stateElement.iteratePropertiesHash((hash, key) => {
@@ -89,21 +97,41 @@ class BaseAngular extends EmbeddedViewContentComponent {
89
97
  }
90
98
  };
91
99
  stateElement.enableOnElementRerenderedEvent();
100
+ };
101
+ if (!!stateElement) {
102
+ if (!stateElement.__ngImplemented) {
103
+ this.makeBaseElementAngularCallback();
104
+ }
105
+ else {
106
+ this.getBaseElementCallbacks(stateElement).push(this.makeBaseElementAngularCallback);
107
+ }
92
108
  }
93
109
  }
94
110
  unMakeBaseElementAngular(stateElement) {
95
- if (!!stateElement && this.isModelSubsribed) {
96
- this.isModelSubsribed = false;
97
- stateElement.__ngImplemented = false;
98
- stateElement.setPropertyValueCoreHandler = undefined;
99
- stateElement.iteratePropertiesHash((hash, key) => {
100
- var val = hash[key];
101
- if (Array.isArray(val)) {
102
- var val = val;
103
- val["onArrayChanged"] = () => { };
111
+ if (!!stateElement) {
112
+ if (this.isModelSubsribed) {
113
+ this.isModelSubsribed = false;
114
+ stateElement.__ngImplemented = false;
115
+ stateElement.setPropertyValueCoreHandler = undefined;
116
+ stateElement.iteratePropertiesHash((hash, key) => {
117
+ var val = hash[key];
118
+ if (Array.isArray(val)) {
119
+ var val = val;
120
+ val["onArrayChanged"] = () => { };
121
+ }
122
+ });
123
+ stateElement.disableOnElementRerenderedEvent();
124
+ const callbacks = this.getBaseElementCallbacks(stateElement);
125
+ const callback = callbacks.shift();
126
+ callback && callback();
127
+ }
128
+ else if (this.makeBaseElementAngularCallback) {
129
+ const callbacks = this.getBaseElementCallbacks(stateElement);
130
+ const index = callbacks.indexOf(this.makeBaseElementAngularCallback);
131
+ if (index > -1) {
132
+ callbacks.splice(index, 1);
104
133
  }
105
- });
106
- stateElement.disableOnElementRerenderedEvent();
134
+ }
107
135
  }
108
136
  }
109
137
  update(key) {
@@ -819,8 +847,10 @@ class RowComponent extends BaseAngular {
819
847
  }
820
848
  ngOnDestroy() {
821
849
  super.ngOnDestroy();
822
- this.row.setRootElement(undefined);
823
- this.stopLazyRendering();
850
+ if (!this.isBaseElementSubsribed(this.row)) {
851
+ this.row.setRootElement(undefined);
852
+ this.stopLazyRendering();
853
+ }
824
854
  }
825
855
  }
826
856
  RowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RowComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
@@ -977,7 +1007,7 @@ AngularComponentFactory.Instance.registerComponent("survey", SurveyContentCompon
977
1007
 
978
1008
  addIconsToThemeSet("v1", icons);
979
1009
  addIconsToThemeSet("v2", icons$1);
980
- SvgRegistry.registerIcons(icons);
1010
+ SvgRegistry.registerIcons(icons$1);
981
1011
  class SurveyComponent extends BaseAngular {
982
1012
  constructor(changeDetectorRef) {
983
1013
  super(changeDetectorRef);
@@ -1458,7 +1488,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1458
1488
  }] } });
1459
1489
  AngularComponentFactory.Instance.registerComponent("sv-tagbox-filter", TagboxFilterComponent);
1460
1490
 
1461
- class TagboxItemComponent extends BaseAngular {
1491
+ class TagboxItemComponent extends EmbeddedViewContentComponent {
1462
1492
  removeItem(event) {
1463
1493
  this.question.dropdownListModel.deselectItem(this.item.value);
1464
1494
  event.stopPropagation();
@@ -1468,12 +1498,13 @@ class TagboxItemComponent extends BaseAngular {
1468
1498
  }
1469
1499
  }
1470
1500
  TagboxItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1471
- TagboxItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TagboxItemComponent, selector: "sv-ng-tagbox-item, '[sv-ng-tagbox-item]'", inputs: { item: "item", question: "question" }, usesInheritance: true, ngImport: i0, template: "<div class=\"sv-tagbox__item\">\n <div class=\"sv-tagbox__item-text\" [model]=\"item.locText\" sv-ng-string></div> \n <div [class]=\"question.cssClasses.cleanItemButton\" (click)=\"removeItem($event)\">\n <svg [iconName]=\"question.cssClasses.cleanItemButtonIconId\" [partCss]=\"question.cssClasses.cleanItemButtonSvg\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </div>\n</div>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }] });
1501
+ TagboxItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TagboxItemComponent, selector: "sv-ng-tagbox-item, '[sv-ng-tagbox-item]'", inputs: { item: "item", question: "question" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n<div class=\"sv-tagbox__item\">\n <div class=\"sv-tagbox__item-text\" [model]=\"item.locText\" sv-ng-string></div> \n <div [class]=\"question.cssClasses.cleanItemButton\" (click)=\"removeItem($event)\">\n <svg [iconName]=\"question.cssClasses.cleanItemButtonIconId\" [partCss]=\"question.cssClasses.cleanItemButtonSvg\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </div>\n</div>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }] });
1472
1502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxItemComponent, decorators: [{
1473
1503
  type: Component,
1474
1504
  args: [{
1475
1505
  selector: "sv-ng-tagbox-item, '[sv-ng-tagbox-item]'",
1476
1506
  templateUrl: "./tagbox-item.component.html",
1507
+ styleUrls: ["../../hide-host.scss"]
1477
1508
  }]
1478
1509
  }], propDecorators: { item: [{
1479
1510
  type: Input
@@ -1956,7 +1987,7 @@ class ImagePickerItemComponent extends BaseAngular {
1956
1987
  }
1957
1988
  }
1958
1989
  ImagePickerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImagePickerItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1959
- ImagePickerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ImagePickerItemComponent, selector: "sv-ng-imagepicker-item", inputs: { question: "question", model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div [class]=\"question.getItemClass(model)\">\n <label [class]=\"question.cssClasses.label\">\n <input [type]=\"question.inputType\" [attr.name]=\"question.questionName\" [attr.value]=\"model.value\" [id]=\"question.getItemId(model)\" [attr.aria-required]=\"question.ariaRequired\" [attr.aria-label]=\"question.ariaLabel\" [attr.aria-invalid]=\"question.ariaInvalid\" [attr.aria-errormessage]=\"question.ariaErrormessage\"\n (change)=\"onChange($event)\" [checked]=\"question.isItemSelected(model)\" [disabled]=\"!question.getItemEnabled(model)\" [readonly]=\"question.isReadOnlyAttr\" [class]=\"question.cssClasses.itemControl\"\n />\n <div [class]=\"question.cssClasses.itemDecorator\">\n <div [class]=\"question.cssClasses.imageContainer\">\n <span *ngIf=\"question.cssClasses.checkedItemDecorator\" [class]=\"question.cssClasses.checkedItemDecorator\" aria-hidden=\"true\">\n <svg *ngIf=\"question.cssClasses.checkedItemSvgIconId\" [class]=\"question.cssClasses.checkedItemSvgIcon\" [iconName]=\"question.cssClasses.checkedItemSvgIconId\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </span>\n <img *ngIf=\"model.locImageLink.renderedHtml && !model.contentNotLoaded && question.contentMode === 'image'\" [class]=\"question.cssClasses.image\" [attr.src]=\"model.locImageLink.renderedHtml\" [attr.width]=\"question.renderedImageWidth\" [attr.height]=\"question.renderedImageHeight\" [attr.alt]=\"model.locText.renderedHtml\" [style.objectFit]=\"question.imageFit\" (load)=\"question.onContentLoaded(model, $event)\" (error)=\"model.onErrorHandler()\"/>\n <video *ngIf=\"model.locImageLink.renderedHtml && !model.contentNotLoaded && question.contentMode === 'video'\" controls [class]=\"question.cssClasses.image\" [attr.src]=\"model.locImageLink.renderedHtml\" [attr.width]=\"question.renderedImageWidth\" [attr.height]=\"question.renderedImageHeight\" [style.objectFit]=\"question.imageFit\" (loadedmetadata)=\"question.onContentLoaded(model, $event)\" (error)=\"model.onErrorHandler()\"></video>\n <div *ngIf=\"!model.locImageLink.renderedHtml || model.contentNotLoaded\" [class]=\"question.cssClasses.itemNoImage\" [style.width]=\"question.renderedImageWidth + 'px'\" [style.height]=\"question.renderedImageHeight + 'px'\" [style.objectFit]=\"question.imageFit\">\n <svg *ngIf=\"question.cssClasses.itemNoImageSvgIconId\" [class]=\"question.cssClasses.itemNoImageSvgIcon\" [iconName]=\"question.cssClasses.itemNoImageSvgIconId\" [size]=\"48\" sv-ng-svg-icon></svg>\n </div>\n </div>\n <span *ngIf=\"question.showLabel\" [class]=\"question.cssClasses.itemText\" [model]=\"model.locText\" sv-ng-string></span>\n </div>\n </label>\n </div>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1990
+ ImagePickerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ImagePickerItemComponent, selector: "sv-ng-imagepicker-item", inputs: { question: "question", model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <div [class]=\"question.getItemClass(model)\">\n <label [class]=\"question.cssClasses.label\">\n <input [type]=\"question.inputType\" [attr.name]=\"question.questionName\" [attr.value]=\"model.value\" [id]=\"question.getItemId(model)\" [attr.aria-required]=\"question.ariaRequired\" [attr.aria-label]=\"model.locText.renderedHtml\" [attr.aria-invalid]=\"question.ariaInvalid\" [attr.aria-errormessage]=\"question.ariaErrormessage\"\n (change)=\"onChange($event)\" [checked]=\"question.isItemSelected(model)\" [disabled]=\"!question.getItemEnabled(model)\" [readonly]=\"question.isReadOnlyAttr\" [class]=\"question.cssClasses.itemControl\"\n />\n <div [class]=\"question.cssClasses.itemDecorator\">\n <div [class]=\"question.cssClasses.imageContainer\">\n <span *ngIf=\"question.cssClasses.checkedItemDecorator\" [class]=\"question.cssClasses.checkedItemDecorator\" aria-hidden=\"true\">\n <svg *ngIf=\"question.cssClasses.checkedItemSvgIconId\" [class]=\"question.cssClasses.checkedItemSvgIcon\" [iconName]=\"question.cssClasses.checkedItemSvgIconId\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n </span>\n <img *ngIf=\"model.locImageLink.renderedHtml && !model.contentNotLoaded && question.contentMode === 'image'\" [class]=\"question.cssClasses.image\" [attr.src]=\"model.locImageLink.renderedHtml\" [attr.width]=\"question.renderedImageWidth\" [attr.height]=\"question.renderedImageHeight\" [attr.alt]=\"model.locText.renderedHtml\" [style.objectFit]=\"question.imageFit\" (load)=\"question.onContentLoaded(model, $event)\" (error)=\"model.onErrorHandler()\"/>\n <video *ngIf=\"model.locImageLink.renderedHtml && !model.contentNotLoaded && question.contentMode === 'video'\" controls [class]=\"question.cssClasses.image\" [attr.src]=\"model.locImageLink.renderedHtml\" [attr.width]=\"question.renderedImageWidth\" [attr.height]=\"question.renderedImageHeight\" [style.objectFit]=\"question.imageFit\" (loadedmetadata)=\"question.onContentLoaded(model, $event)\" (error)=\"model.onErrorHandler()\"></video>\n <div *ngIf=\"!model.locImageLink.renderedHtml || model.contentNotLoaded\" [class]=\"question.cssClasses.itemNoImage\" [style.width]=\"question.renderedImageWidth + 'px'\" [style.height]=\"question.renderedImageHeight + 'px'\" [style.objectFit]=\"question.imageFit\">\n <svg *ngIf=\"question.cssClasses.itemNoImageSvgIconId\" [class]=\"question.cssClasses.itemNoImageSvgIcon\" [iconName]=\"question.cssClasses.itemNoImageSvgIconId\" [size]=\"48\" sv-ng-svg-icon></svg>\n </div>\n </div>\n <span *ngIf=\"question.showLabel\" [class]=\"question.cssClasses.itemText\" [model]=\"model.locText\" sv-ng-string></span>\n </div>\n </label>\n </div>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1960
1991
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImagePickerItemComponent, decorators: [{
1961
1992
  type: Component,
1962
1993
  args: [{
@@ -1987,7 +2018,7 @@ class ImagePickerQuestionComponent extends QuestionAngular {
1987
2018
  }
1988
2019
  }
1989
2020
  ImagePickerQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImagePickerQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1990
- ImagePickerQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ImagePickerQuestionComponent, selector: "sv-ng-imagepicker-question", usesInheritance: true, ngImport: i0, template: " <fieldset [class]=\"model.getSelectBaseRootCss()\" #contentElement>\n <legend class=\"sv-hidden\">{{model.locTitle.renderedHtml}}</legend>\n <ng-container *ngIf=\"!model.hasColumns\">\n <ng-container *ngFor=\"let item of model.visibleChoices\">\n <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"model.hasColumns\">\n <div *ngFor=\"let column of model.columns\" [class]=\"model.getColumnClass()\" role=\"presentation\">\n <ng-container *ngFor=\"let item of column\">\n <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>", 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"] }] });
2021
+ ImagePickerQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ImagePickerQuestionComponent, selector: "sv-ng-imagepicker-question", usesInheritance: true, ngImport: i0, template: "<fieldset [class]=\"model.getSelectBaseRootCss()\" [style]=\"model.getContainerStyle()\" #contentElement>\n <legend class=\"sv-hidden\">{{model.locTitle.renderedHtml}}</legend>\n <ng-container *ngIf=\"!model.hasColumns\">\n <ng-container *ngFor=\"let item of model.visibleChoices\">\n <ng-template\n [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"model.hasColumns\">\n <div *ngFor=\"let column of model.columns\" [class]=\"model.getColumnClass()\" role=\"presentation\">\n <ng-container *ngFor=\"let item of column\">\n <ng-template\n [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n</fieldset>", 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"] }] });
1991
2022
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImagePickerQuestionComponent, decorators: [{
1992
2023
  type: Component,
1993
2024
  args: [{
@@ -3270,7 +3301,7 @@ class PanelDynamicQuestionComponent extends QuestionAngular {
3270
3301
  }
3271
3302
  }
3272
3303
  PanelDynamicQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3273
- PanelDynamicQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PanelDynamicQuestionComponent, selector: "sv-ng-paneldynamic-question", usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.cssClasses.root\" #contentElement>\n <div *ngIf=\"model.getShowNoEntriesPlaceholder()\" [class]=\"model.cssClasses.noEntriesPlaceholder\">\n <span [model]=\"model.locNoEntriesText\" sv-ng-string></span>\n <sv-ng-paneldynamic-add-btn *ngIf=\"model.canAddPanel\" [data]=\"{ question: model }\"></sv-ng-paneldynamic-add-btn>\n </div>\n <div [class]=\"model.cssClasses.progress\"\n *ngIf=\"!model.showLegacyNavigation && model.isProgressTopShowing && model.isRangeShowing\">\n <div [class]=\"model.cssClasses.progressBar\" [style]=\"{ width: model.progress }\" role=\"progressbar\"></div>\n </div>\n <ng-container [ngTemplateOutlet]=\"progress\"\n *ngIf=\"model.showLegacyNavigation && model.isProgressTopShowing\"></ng-container>\n <div [class]=\"model.cssClasses.panelsContainer\">\n <ng-container *ngFor=\"let panel of model.renderedPanels; index as index; trackBy: trackPanelBy\">\n <div [class]=\"model.getPanelWrapperCss(panel)\">\n <ng-template\n [component]=\"{ name: getPanelComponentName(panel), data: getPanelComponentData(panel) }\"></ng-template>\n <ng-container\n *ngIf=\"model.canRenderRemovePanelOnRight(panel)\">\n <ng-template\n [component]=\"{ name: 'sv-paneldynamic-remove-btn', data: { data: { panel, question: model }}}\"></ng-template>\n </ng-container>\n </div>\n <hr [class]=\"model.cssClasses.separator\" *ngIf=\"model.showSeparator(index)\" />\n </ng-container>\n </div>\n <ng-container [ngTemplateOutlet]=\"progress\"\n *ngIf=\"model.showLegacyNavigation && model.isProgressBottomShowing\"></ng-container>\n <sv-ng-paneldynamic-add-btn *ngIf=\"model.showLegacyNavigation && model.isRenderModeList\"\n [data]=\"{ question: model }\"></sv-ng-paneldynamic-add-btn>\n <ng-container [ngTemplateOutlet]=\"progressV2\" *ngIf=\"model.showNavigation\"></ng-container>\n</div>\n\n<ng-template #progressV2>\n <div [class]=\"model.cssClasses.footer\" *ngIf=\"!!model.cssClasses.footer\">\n <hr [class]=\"model.cssClasses.separator\" />\n <div [class]=\"model.cssClasses.progress\" *ngIf=\"model.isRangeShowing && model.isProgressBottomShowing\">\n <div [class]=\"model.cssClasses.progressBar\" [style]=\"{ width: model.progress }\" role=\"progressbar\"></div>\n </div>\n <div *ngIf=\"model.footerToolbar.visibleActions.length\" [class]=\"model.cssClasses.footerButtonsContainer\">\n <sv-ng-action-bar [model]=\"model.footerToolbar\"></sv-ng-action-bar>\n </div>\n </div>\n</ng-template>\n<ng-template #progress>\n <div [class]=\"this.progressCssClass\">\n <div style=\"clear: both\" [class]=\"this.progressCssClass\">\n <div [class]=\"model.cssClasses.progressContainer\">\n <sv-ng-paneldynamic-prev-btn [data]=\"{ question: model }\"></sv-ng-paneldynamic-prev-btn>\n <div [class]=\"model.cssClasses.progress\" *ngIf=\"model.isRangeShowing\">\n <div [class]=\"model.cssClasses.progressBar\" [style]=\"{ width: model.progress }\" role=\"progressbar\"></div>\n </div>\n <sv-ng-paneldynamic-next-btn [data]=\"{ question: model }\"></sv-ng-paneldynamic-next-btn>\n </div>\n <sv-ng-paneldynamic-add-btn [data]=\"{ question: model }\"></sv-ng-paneldynamic-add-btn>\n <sv-ng-paneldynamic-progress-text [data]=\"{ question: model }\"></sv-ng-paneldynamic-progress-text>\n </div>\n </div>\n</ng-template>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: PanelDynamicAddBtn, selector: "sv-ng-paneldynamic-add-btn" }, { type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }, { type: PanelDynamicPrevBtn, selector: "sv-ng-paneldynamic-prev-btn" }, { type: PanelDynamicNextBtn, selector: "sv-ng-paneldynamic-next-btn" }, { type: PanelDynamicProgressText, selector: "sv-ng-paneldynamic-progress-text" }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
3304
+ PanelDynamicQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PanelDynamicQuestionComponent, selector: "sv-ng-paneldynamic-question", usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.cssClasses.root\" #contentElement>\n <div *ngIf=\"model.hasTabbedMenu\" [class]=\"model.getTabsContainerCss()\">\n <sv-action-bar [model]=\"model.tabbedMenu\"></sv-action-bar>\n </div>\n <div *ngIf=\"model.getShowNoEntriesPlaceholder()\" [class]=\"model.cssClasses.noEntriesPlaceholder\">\n <span [model]=\"model.locNoEntriesText\" sv-ng-string></span>\n <sv-ng-paneldynamic-add-btn *ngIf=\"model.canAddPanel\" [data]=\"{ question: model }\"></sv-ng-paneldynamic-add-btn>\n </div>\n <div [class]=\"model.cssClasses.progress\"\n *ngIf=\"!model.showLegacyNavigation && model.isProgressTopShowing && model.isRangeShowing\">\n <div [class]=\"model.cssClasses.progressBar\" [style]=\"{ width: model.progress }\" role=\"progressbar\"></div>\n </div>\n <ng-container [ngTemplateOutlet]=\"progress\"\n *ngIf=\"model.showLegacyNavigation && model.isProgressTopShowing\"></ng-container>\n <div [class]=\"model.cssClasses.panelsContainer\">\n <ng-container *ngFor=\"let panel of model.renderedPanels; index as index; trackBy: trackPanelBy\">\n <div [class]=\"model.getPanelWrapperCss(panel)\">\n <ng-template\n [component]=\"{ name: getPanelComponentName(panel), data: getPanelComponentData(panel) }\"></ng-template>\n <ng-container *ngIf=\"model.canRenderRemovePanelOnRight(panel)\">\n <ng-template\n [component]=\"{ name: 'sv-paneldynamic-remove-btn', data: { data: { panel, question: model }}}\"></ng-template>\n </ng-container>\n </div>\n <hr [class]=\"model.cssClasses.separator\" *ngIf=\"model.showSeparator(index)\" />\n </ng-container>\n </div>\n <ng-container [ngTemplateOutlet]=\"progress\"\n *ngIf=\"model.showLegacyNavigation && model.isProgressBottomShowing\"></ng-container>\n <sv-ng-paneldynamic-add-btn *ngIf=\"model.showLegacyNavigation && model.isRenderModeList\"\n [data]=\"{ question: model }\"></sv-ng-paneldynamic-add-btn>\n <ng-container [ngTemplateOutlet]=\"progressV2\" *ngIf=\"model.showNavigation\"></ng-container>\n</div>\n\n<ng-template #progressV2>\n <div [class]=\"model.cssClasses.footer\" *ngIf=\"!!model.cssClasses.footer\">\n <hr [class]=\"model.cssClasses.separator\" />\n <div [class]=\"model.cssClasses.progress\" *ngIf=\"model.isRangeShowing && model.isProgressBottomShowing\">\n <div [class]=\"model.cssClasses.progressBar\" [style]=\"{ width: model.progress }\" role=\"progressbar\"></div>\n </div>\n <div *ngIf=\"model.footerToolbar.visibleActions.length\" [class]=\"model.cssClasses.footerButtonsContainer\">\n <sv-ng-action-bar [model]=\"model.footerToolbar\"></sv-ng-action-bar>\n </div>\n </div>\n</ng-template>\n<ng-template #progress>\n <div [class]=\"this.progressCssClass\">\n <div style=\"clear: both\" [class]=\"this.progressCssClass\">\n <div [class]=\"model.cssClasses.progressContainer\">\n <sv-ng-paneldynamic-prev-btn [data]=\"{ question: model }\"></sv-ng-paneldynamic-prev-btn>\n <div [class]=\"model.cssClasses.progress\" *ngIf=\"model.isRangeShowing\">\n <div [class]=\"model.cssClasses.progressBar\" [style]=\"{ width: model.progress }\" role=\"progressbar\"></div>\n </div>\n <sv-ng-paneldynamic-next-btn [data]=\"{ question: model }\"></sv-ng-paneldynamic-next-btn>\n </div>\n <sv-ng-paneldynamic-add-btn [data]=\"{ question: model }\"></sv-ng-paneldynamic-add-btn>\n <sv-ng-paneldynamic-progress-text [data]=\"{ question: model }\"></sv-ng-paneldynamic-progress-text>\n </div>\n </div>\n</ng-template>", components: [{ type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: PanelDynamicAddBtn, selector: "sv-ng-paneldynamic-add-btn" }, { type: PanelDynamicPrevBtn, selector: "sv-ng-paneldynamic-prev-btn" }, { type: PanelDynamicNextBtn, selector: "sv-ng-paneldynamic-next-btn" }, { type: PanelDynamicProgressText, selector: "sv-ng-paneldynamic-progress-text" }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
3274
3305
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicQuestionComponent, decorators: [{
3275
3306
  type: Component,
3276
3307
  args: [{