survey-angular-ui 2.0.0-rc.0 → 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
package/base-angular.d.ts CHANGED
@@ -15,6 +15,9 @@ export declare abstract class BaseAngular<T extends Base = Base> extends Embedde
15
15
  private getIsRendering;
16
16
  private isDestroyed;
17
17
  ngOnDestroy(): void;
18
+ private makeBaseElementAngularCallback?;
19
+ protected isBaseElementSubsribed(stateElement: Base): boolean;
20
+ private getBaseElementCallbacks;
18
21
  private makeBaseElementAngular;
19
22
  private unMakeBaseElementAngular;
20
23
  protected update(key?: string): void;
@@ -601,10 +601,18 @@
601
601
  this.unMakeBaseElementAngular(this.getModel());
602
602
  this.previousModel = undefined;
603
603
  };
604
+ BaseAngular.prototype.isBaseElementSubsribed = function (stateElement) {
605
+ return !!stateElement.__ngImplemented;
606
+ };
607
+ BaseAngular.prototype.getBaseElementCallbacks = function (stateElement) {
608
+ var _a;
609
+ stateElement.__ngSubscribers = (_a = stateElement.__ngSubscribers) !== null && _a !== void 0 ? _a : [];
610
+ return (stateElement.__ngSubscribers);
611
+ };
604
612
  BaseAngular.prototype.makeBaseElementAngular = function (stateElement) {
605
613
  var _this = this;
606
- if (!!stateElement && !stateElement.__ngImplemented) {
607
- this.isModelSubsribed = true;
614
+ this.makeBaseElementAngularCallback = function () {
615
+ _this.isModelSubsribed = true;
608
616
  stateElement.__ngImplemented = true;
609
617
  stateElement.iteratePropertiesHash(function (hash, key) {
610
618
  var val = hash[key];
@@ -622,21 +630,41 @@
622
630
  }
623
631
  };
624
632
  stateElement.enableOnElementRerenderedEvent();
633
+ };
634
+ if (!!stateElement) {
635
+ if (!stateElement.__ngImplemented) {
636
+ this.makeBaseElementAngularCallback();
637
+ }
638
+ else {
639
+ this.getBaseElementCallbacks(stateElement).push(this.makeBaseElementAngularCallback);
640
+ }
625
641
  }
626
642
  };
627
643
  BaseAngular.prototype.unMakeBaseElementAngular = function (stateElement) {
628
- if (!!stateElement && this.isModelSubsribed) {
629
- this.isModelSubsribed = false;
630
- stateElement.__ngImplemented = false;
631
- stateElement.setPropertyValueCoreHandler = undefined;
632
- stateElement.iteratePropertiesHash(function (hash, key) {
633
- var val = hash[key];
634
- if (Array.isArray(val)) {
635
- var val = val;
636
- val["onArrayChanged"] = function () { };
644
+ if (!!stateElement) {
645
+ if (this.isModelSubsribed) {
646
+ this.isModelSubsribed = false;
647
+ stateElement.__ngImplemented = false;
648
+ stateElement.setPropertyValueCoreHandler = undefined;
649
+ stateElement.iteratePropertiesHash(function (hash, key) {
650
+ var val = hash[key];
651
+ if (Array.isArray(val)) {
652
+ var val = val;
653
+ val["onArrayChanged"] = function () { };
654
+ }
655
+ });
656
+ stateElement.disableOnElementRerenderedEvent();
657
+ var callbacks = this.getBaseElementCallbacks(stateElement);
658
+ var callback = callbacks.shift();
659
+ callback && callback();
660
+ }
661
+ else if (this.makeBaseElementAngularCallback) {
662
+ var callbacks = this.getBaseElementCallbacks(stateElement);
663
+ var index = callbacks.indexOf(this.makeBaseElementAngularCallback);
664
+ if (index > -1) {
665
+ callbacks.splice(index, 1);
637
666
  }
638
- });
639
- stateElement.disableOnElementRerenderedEvent();
667
+ }
640
668
  }
641
669
  };
642
670
  BaseAngular.prototype.update = function (key) {
@@ -1471,8 +1499,10 @@
1471
1499
  };
1472
1500
  RowComponent.prototype.ngOnDestroy = function () {
1473
1501
  _super.prototype.ngOnDestroy.call(this);
1474
- this.row.setRootElement(undefined);
1475
- this.stopLazyRendering();
1502
+ if (!this.isBaseElementSubsribed(this.row)) {
1503
+ this.row.setRootElement(undefined);
1504
+ this.stopLazyRendering();
1505
+ }
1476
1506
  };
1477
1507
  return RowComponent;
1478
1508
  }(BaseAngular));
@@ -1648,7 +1678,7 @@
1648
1678
 
1649
1679
  Survey.addIconsToThemeSet("v1", iconsV1.icons);
1650
1680
  Survey.addIconsToThemeSet("v2", iconsV2.icons);
1651
- Survey.SvgRegistry.registerIcons(iconsV1.icons);
1681
+ Survey.SvgRegistry.registerIcons(iconsV2.icons);
1652
1682
  var SurveyComponent = /** @class */ (function (_super) {
1653
1683
  __extends(SurveyComponent, _super);
1654
1684
  function SurveyComponent(changeDetectorRef) {
@@ -2211,14 +2241,15 @@
2211
2241
  return this.item;
2212
2242
  };
2213
2243
  return TagboxItemComponent;
2214
- }(BaseAngular));
2244
+ }(EmbeddedViewContentComponent));
2215
2245
  TagboxItemComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: TagboxItemComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
2216
- TagboxItemComponent.ɵcmp = i0__namespace.ɵɵ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__namespace, 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"] }] });
2246
+ TagboxItemComponent.ɵcmp = i0__namespace.ɵɵ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__namespace, 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"] }] });
2217
2247
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: TagboxItemComponent, decorators: [{
2218
2248
  type: i0.Component,
2219
2249
  args: [{
2220
2250
  selector: "sv-ng-tagbox-item, '[sv-ng-tagbox-item]'",
2221
2251
  templateUrl: "./tagbox-item.component.html",
2252
+ styleUrls: ["../../hide-host.scss"]
2222
2253
  }]
2223
2254
  }], propDecorators: { item: [{
2224
2255
  type: i0.Input
@@ -2802,7 +2833,7 @@
2802
2833
  return ImagePickerItemComponent;
2803
2834
  }(BaseAngular));
2804
2835
  ImagePickerItemComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ImagePickerItemComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
2805
- ImagePickerItemComponent.ɵcmp = i0__namespace.ɵɵ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__namespace, 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__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2836
+ ImagePickerItemComponent.ɵcmp = i0__namespace.ɵɵ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__namespace, 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__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2806
2837
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ImagePickerItemComponent, decorators: [{
2807
2838
  type: i0.Component,
2808
2839
  args: [{
@@ -2838,7 +2869,7 @@
2838
2869
  return ImagePickerQuestionComponent;
2839
2870
  }(QuestionAngular));
2840
2871
  ImagePickerQuestionComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ImagePickerQuestionComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
2841
- ImagePickerQuestionComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ImagePickerQuestionComponent, selector: "sv-ng-imagepicker-question", usesInheritance: true, ngImport: i0__namespace, 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__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
2872
+ ImagePickerQuestionComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ImagePickerQuestionComponent, selector: "sv-ng-imagepicker-question", usesInheritance: true, ngImport: i0__namespace, 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__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
2842
2873
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ImagePickerQuestionComponent, decorators: [{
2843
2874
  type: i0.Component,
2844
2875
  args: [{
@@ -4399,7 +4430,7 @@
4399
4430
  return PanelDynamicQuestionComponent;
4400
4431
  }(QuestionAngular));
4401
4432
  PanelDynamicQuestionComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PanelDynamicQuestionComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
4402
- PanelDynamicQuestionComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PanelDynamicQuestionComponent, selector: "sv-ng-paneldynamic-question", usesInheritance: true, ngImport: i0__namespace, 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__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
4433
+ PanelDynamicQuestionComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PanelDynamicQuestionComponent, selector: "sv-ng-paneldynamic-question", usesInheritance: true, ngImport: i0__namespace, 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__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
4403
4434
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PanelDynamicQuestionComponent, decorators: [{
4404
4435
  type: i0.Component,
4405
4436
  args: [{