UNPKG

survey-angular-ui

Version:

survey.js is a JavaScript Survey Library. It is a modern way to add a survey to your website. It uses JSON for survey metadata and results.

3,985 lines 361 kB
import * as i0 from '@angular/core';
import { TemplateRef, Component, ViewChild, Directive, Input, Injectable, HostBinding, ElementRef, Pipe, HostListener, ViewContainerRef, NgModule } from '@angular/core';
import * as Survey from 'survey-core';
import { createPopupModalViewModel, settings, ScrollViewModel, SvgRegistry, addIconsToThemeSet, PopupSurveyModel, LocalizableString, createPopupViewModel, Helpers, DropdownMultiSelectListModel, RendererFactory, ButtonGroupItemModel, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, ActionDropdownViewModel, SurveyProgressModel, ProgressButtonsResponsivityManager, SurveyModel } from 'survey-core';
import { icons } from 'survey-core/icons/iconsV1';
import { icons as icons$1 } from 'survey-core/icons/iconsV2';
import { DomPortalOutlet, ComponentPortal } from '@angular/cdk/portal';
import * as i2 from '@angular/common';
import { CommonModule } from '@angular/common';
import * as i2$1 from '@angular/forms';
import { FormsModule } from '@angular/forms';
import * as i1 from '@angular/platform-browser';

class EmbeddedViewContentComponent {
    constructor(viewContainerRef) {
        this.viewContainerRef = viewContainerRef;
    }
    ngOnInit() {
        var _a;
        if (!!this.templateRef) {
            this.embeddedView = (_a = this.viewContainerRef) === null || _a === void 0 ? void 0 : _a.createEmbeddedView(this.templateRef);
        }
    }
}
EmbeddedViewContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EmbeddedViewContentComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
EmbeddedViewContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: EmbeddedViewContentComponent, selector: "ng-component", viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "", isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EmbeddedViewContentComponent, decorators: [{
            type: Component,
            args: [{
                    template: "",
                }]
        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { templateRef: [{
                type: ViewChild,
                args: ["template", { read: TemplateRef, static: true }]
            }] } });

class BaseAngular extends EmbeddedViewContentComponent {
    constructor(changeDetectorRef, viewContainerRef) {
        super(viewContainerRef);
        this.changeDetectorRef = changeDetectorRef;
        this.isModelSubsribed = false;
        this.isDestroyed = false;
    }
    get surveyModel() {
        return this.getModel().getSurvey();
    }
    ngDoCheck() {
        if (this.previousModel !== this.getModel()) {
            this.unMakeBaseElementAngular(this.previousModel);
            this.makeBaseElementAngular(this.getModel());
            this.onModelChanged();
            this.previousModel = this.getModel();
        }
        this.setIsRendering(true);
    }
    onModelChanged() { }
    setIsRendering(val) {
        const model = this.getModel();
        if (!!model) {
            model.isRendering = val;
        }
    }
    getIsRendering() {
        const model = this.getModel();
        return !!model && !!model.isRendering;
    }
    ngOnDestroy() {
        this.isDestroyed = true;
        this.unMakeBaseElementAngular(this.getModel());
        this.previousModel = undefined;
    }
    isBaseElementSubsribed(stateElement) {
        return !!stateElement.__ngImplemented;
    }
    getBaseElementCallbacks(stateElement) {
        var _a;
        stateElement.__ngSubscribers = (_a = stateElement.__ngSubscribers) !== null && _a !== void 0 ? _a : [];
        return (stateElement.__ngSubscribers);
    }
    makeBaseElementAngular(stateElement) {
        this.makeBaseElementAngularCallback = () => {
            this.isModelSubsribed = true;
            stateElement.__ngImplemented = true;
            stateElement.iteratePropertiesHash((hash, key) => {
                var val = hash[key];
                if (Array.isArray(val)) {
                    var val = val;
                    val["onArrayChanged"] = (arrayChanges) => {
                        this.update(key);
                    };
                }
            });
            stateElement.setPropertyValueCoreHandler = (hash, key, val) => {
                if (hash[key] !== val) {
                    hash[key] = val;
                    this.update(key);
                }
            };
            stateElement.enableOnElementRerenderedEvent();
        };
        if (!!stateElement) {
            if (!stateElement.__ngImplemented) {
                this.makeBaseElementAngularCallback();
            }
            else {
                this.getBaseElementCallbacks(stateElement).push(this.makeBaseElementAngularCallback);
            }
        }
    }
    unMakeBaseElementAngular(stateElement) {
        if (!!stateElement) {
            if (this.isModelSubsribed) {
                this.isModelSubsribed = false;
                stateElement.__ngImplemented = false;
                stateElement.setPropertyValueCoreHandler = undefined;
                stateElement.iteratePropertiesHash((hash, key) => {
                    var val = hash[key];
                    if (Array.isArray(val)) {
                        var val = val;
                        val["onArrayChanged"] = () => { };
                    }
                });
                stateElement.disableOnElementRerenderedEvent();
                const callbacks = this.getBaseElementCallbacks(stateElement);
                const callback = callbacks.shift();
                callback && callback();
            }
            else if (this.makeBaseElementAngularCallback) {
                const callbacks = this.getBaseElementCallbacks(stateElement);
                const index = callbacks.indexOf(this.makeBaseElementAngularCallback);
                if (index > -1) {
                    callbacks.splice(index, 1);
                }
            }
        }
    }
    update(key) {
        if (this.getIsRendering())
            return;
        this.beforeUpdate();
        if (key && this.getPropertiesToUpdateSync().indexOf(key) > -1) {
            this.detectChanges();
            this.afterUpdate(true);
        }
        else {
            queueMicrotask(() => {
                if (!this.isDestroyed) {
                    this.setIsRendering(true);
                    this.detectChanges();
                }
                this.afterUpdate();
            });
        }
    }
    getChangeDetectorRef() {
        return this.embeddedView ? this.embeddedView : this.changeDetectorRef;
    }
    getPropertiesToUpdateSync() {
        return [];
    }
    detectChanges() {
        this.getChangeDetectorRef().detectChanges();
    }
    getShouldReattachChangeDetector() {
        return true;
    }
    beforeUpdate() {
        this.setIsRendering(true);
    }
    afterUpdate(isSync = false) {
        this.setIsRendering(false);
        const model = this.getModel();
        if (model && !this.isDestroyed) {
            model.afterRerender();
        }
    }
    ngAfterViewChecked() {
        this.setIsRendering(false);
    }
}
BaseAngular.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseAngular, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
BaseAngular.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BaseAngular, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "", isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseAngular, decorators: [{
            type: Component,
            args: [{
                    template: ""
                }]
        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }]; } });

class AngularComponentFactory {
    constructor() {
        this.creatorHash = {};
    }
    registerComponent(typeName, componentType) {
        this.creatorHash[typeName] = componentType;
    }
    getAllTypes() {
        var result = new Array();
        for (var key in this.creatorHash) {
            result.push(key);
        }
        return result.sort();
    }
    isComponentRegistered(elementType) {
        return !!this.creatorHash[elementType];
    }
    create(containerRef, elementType, resolver) {
        var componentType = this.creatorHash[elementType];
        if (!componentType)
            return null;
        return containerRef.createComponent(resolver.resolveComponentFactory(componentType));
    }
}
AngularComponentFactory.Instance = new AngularComponentFactory();

class DynamicComponentDirective {
    constructor(containerRef, templateRef, resolver) {
        this.containerRef = containerRef;
        this.templateRef = templateRef;
        this.resolver = resolver;
    }
    ngOnChanges(changes) {
        var _a;
        const componentChanges = changes["component"];
        if (componentChanges.currentValue.name !== ((_a = componentChanges.previousValue) === null || _a === void 0 ? void 0 : _a.name) ||
            (componentChanges.currentValue.name === undefined && componentChanges.previousValue === undefined && !this.componentInstance)) {
            this.createComponent();
        }
        else {
            this.updateComponentData();
        }
    }
    createComponent() {
        this.containerRef.clear();
        if (AngularComponentFactory.Instance.isComponentRegistered(this.component.name)) {
            this.componentInstance = AngularComponentFactory.Instance.create(this.containerRef, this.component.name, this.resolver).instance;
        }
        else if (this.component.default) {
            this.componentInstance = AngularComponentFactory.Instance.create(this.containerRef, this.component.default, this.resolver).instance;
        }
        if (!this.componentInstance) {
            throw new Error(`Can't create component with name: ${this.component.name} and default: ${this.component.default}`);
        }
        else {
            this.componentInstance.contentTempl = this.templateRef;
        }
        this.updateComponentData();
    }
    updateComponentData() {
        const data = this.component.data;
        Object.keys(data).forEach((key) => {
            this.componentInstance[key] = data[key];
        });
    }
}
DynamicComponentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicComponentDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive });
DynamicComponentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: DynamicComponentDirective, selector: "[component]", inputs: { component: "component" }, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicComponentDirective, decorators: [{
            type: Directive,
            args: [{
                    selector: "[component]"
                }]
        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.ComponentFactoryResolver }]; }, propDecorators: { component: [{
                type: Input
            }] } });

class ActionComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
    get id() {
        return this.model.id || '';
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        this.model.updateModeCallback = undefined;
    }
    ngAfterViewInit() {
        this.model.updateModeCallback = (mode, callback) => {
            this.model.mode = mode;
            queueMicrotask(() => {
                var _a;
                callback(mode, (_a = this.containerRef) === null || _a === void 0 ? void 0 : _a.nativeElement);
            });
        };
        this.model.afterRender();
    }
}
ActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ActionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ActionComponent, selector: "sv-ng-action", inputs: { model: "model" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div [class]=\"model.getActionRootCss()\" [id]=\"id\" #container>\n    <div class=\"sv-action__content\">\n      <ng-container *ngIf=\"model.needSeparator\">\n        <div class=\"sv-action-bar-separator\"></div>\n      </ng-container>\n      <ng-template [component]=\"{ name: model.component, data: { model }, default: 'sv-action-bar-item'}\"></ng-template>\n    </div>\n  </div>\n</ng-template>", styles: [":host { display: none; }"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ActionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-action",
                    templateUrl: "./action.component.html",
                    styles: [":host { display: none; }"],
                }]
        }], propDecorators: { model: [{
                type: Input
            }], containerRef: [{
                type: ViewChild,
                args: ["container"]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-action", ActionComponent);

class ActionBarComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
    trackActionBy(_, action) {
        return action.renderedId;
    }
    get allowOnClick() {
        return this.handleClick !== undefined ? this.handleClick : true;
    }
    onModelChanged() {
        var _a;
        super.onModelChanged();
        (_a = this.previousModel) === null || _a === void 0 ? void 0 : _a.resetResponsivityManager();
        if (!!this.model.hasActions && !!this.container && !!this.container.nativeElement) {
            this.model.initResponsivityManager(this.container.nativeElement);
        }
    }
    onClick(event) {
        if (this.allowOnClick) {
            event.stopPropagation();
        }
    }
    ngAfterViewInit() {
        if (!!this.model.hasActions) {
            this.model.initResponsivityManager(this.container.nativeElement);
        }
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        this.model.resetResponsivityManager();
    }
}
ActionBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ActionBarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ActionBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: { model: "model", handleClick: "handleClick" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div *ngIf=\"model.hasActions\" [class]=\"model.getRootCss()\" (click)=\"onClick($event)\" #container>\n    <ng-container *ngFor=\"let action of model.renderedActions; trackBy: trackActionBy\">\n      <sv-ng-action [model]=\"action\"></sv-ng-action>\n    </ng-container>\n  </div>\n</ng-template>", styles: [":host { display: none }"], components: [{ type: ActionComponent, selector: "sv-ng-action", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ActionBarComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-action-bar, sv-ng-action-bar",
                    templateUrl: "./action-bar.component.html",
                    styles: [":host { display: none }"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }], handleClick: [{
                type: Input
            }], container: [{
                type: ViewChild,
                args: ["container"]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-action-bar", ActionBarComponent);

class VisibleDirective {
    constructor(el) {
        this.el = el;
    }
    ngOnChanges(changes) {
        changes["visible"].currentValue ? this.show() : this.hide();
    }
    hide() {
        this.el.nativeElement.style.display = "none";
    }
    show() {
        this.el.nativeElement.style.display = "";
    }
}
VisibleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VisibleDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
VisibleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: VisibleDirective, selector: "[visible]", inputs: { visible: "visible" }, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VisibleDirective, decorators: [{
            type: Directive,
            args: [{
                    selector: "[visible]"
                }]
        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { visible: [{
                type: Input
            }] } });

class PopupBaseContainerComponent extends BaseAngular {
    constructor(changeDetectorRef) {
        super(changeDetectorRef);
        this.changeDetectorRef.detach();
    }
    getModel() {
        return this.model;
    }
    get applyButtonText() {
        const popupModalModel = this.model;
        if (!popupModalModel)
            return null;
        return popupModalModel.applyButtonText;
    }
    apply() {
        const popupModalModel = this.model;
        if (!popupModalModel)
            return;
        popupModalModel.apply();
    }
    getPropertiesToUpdateSync() {
        return ["height"];
    }
    getShouldReattachChangeDetector() {
        return false;
    }
    onModelChanged() {
        this.changeDetectorRef.detectChanges();
    }
    afterUpdate(isSync = false) {
        super.afterUpdate(isSync);
        if (!isSync) {
            if (!this.model.isPositionSet && this.model.isVisible) {
                this.model.updateOnShowing();
            }
        }
    }
    clickInside(event) {
        event.stopPropagation();
    }
}
PopupBaseContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupBaseContainerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
PopupBaseContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PopupBaseContainerComponent, selector: "sv-ng-popup-container, '[sv-ng-popup-container]'", inputs: { model: "model" }, usesInheritance: true, ngImport: i0, template: "<div class=\"sv-popup\" tabindex=\"-1\" [class]=\"model.styleClass\" [visible]=\"model.isVisible\" (click)=\"model.clickOutside($event)\" (keydown)=\"model.onKeyDown($event)\">\n    <div class=\"sv-popup__container\" [style]=\"{ left: model.left, top: model.top, height: model.height, minWidth: model.minWidth, width: model.width }\" (click)=\"clickInside($event)\">\n        <ng-container *ngIf=\"model.showHeader\">\n            <ng-template [component]=\"{ name: model.popupHeaderTemplate, data: { model: model } }\"></ng-template>\n        </ng-container>\n        <div class=\"sv-popup__body-content\">\n            <div *ngIf=\"model.title\" class=\"sv-popup__body-header\">{{ model.title }}</div>\n            <div class=\"sv-popup__scrolling-content\">\n                <div class=\"sv-popup__content\">\n                    <ng-template [component]=\"{ name: model.contentComponentName, data: model.contentComponentData }\"></ng-template>\n                </div>\n            </div>\n            <div *ngIf=\"model.showFooter\" class=\"sv-popup__body-footer\">\n                <sv-ng-action-bar [model]=\"model.footerToolbar\"></sv-ng-action-bar>\n            </div>\n        </div>\n    </div>\n</div>", components: [{ type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }], directives: [{ type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupBaseContainerComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-popup-container, '[sv-ng-popup-container]'",
                    templateUrl: "./popup-container.component.html"
                }]
        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{
                type: Input
            }] } });

class PopupService {
    constructor(injector, applicationRef, componentFactoryResolver) {
        this.injector = injector;
        this.applicationRef = applicationRef;
        this.componentFactoryResolver = componentFactoryResolver;
    }
    createComponent(popupViewModel) {
        const portalHost = new DomPortalOutlet(popupViewModel.container, this.componentFactoryResolver, this.applicationRef, this.injector);
        const portal = new ComponentPortal(PopupBaseContainerComponent);
        const componentRef = portalHost.attach(portal);
        popupViewModel.setComponentElement(popupViewModel.container.children[0]);
        componentRef.instance.model = popupViewModel;
        componentRef.changeDetectorRef.detectChanges();
        return portalHost;
    }
}
PopupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupService, deps: [{ token: i0.Injector }, { token: i0.ApplicationRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable });
PopupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupService, decorators: [{
            type: Injectable
        }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ApplicationRef }, { type: i0.ComponentFactoryResolver }]; } });

class ModalComponent {
    constructor(popupService) {
        this.popupService = popupService;
        this.functionDefined = false;
    }
    showDialog(dialogOptions, rootElement) {
        const popupViewModel = this.model = createPopupModalViewModel(dialogOptions, rootElement);
        const onVisibilityChangedCallback = (_, options) => {
            if (!options.isVisible) {
                this.portalHost.detach();
                this.model.dispose();
            }
        };
        popupViewModel.onVisibilityChanged.add(onVisibilityChangedCallback);
        this.portalHost = this.popupService.createComponent(this.model);
        this.model.model.isVisible = true;
        return this.model;
    }
    ngOnInit() {
        this.functionDefined = true;
        settings.showDialog = (dialogOptions, rootElement) => {
            return this.showDialog(dialogOptions, rootElement);
        };
    }
    ngOnDestroy() {
        var _a, _b;
        (_a = this.portalHost) === null || _a === void 0 ? void 0 : _a.detach();
        (_b = this.model) === null || _b === void 0 ? void 0 : _b.dispose();
        if (this.functionDefined) {
            settings.showDialog = undefined;
        }
    }
}
ModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ModalComponent, deps: [{ token: PopupService }], target: i0.ɵɵFactoryTarget.Component });
ModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ModalComponent, selector: "sv-ng-modal-container", ngImport: i0, template: "", isInline: true, styles: [":host{display:none}\n"] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ModalComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-modal-container",
                    template: "",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], ctorParameters: function () { return [{ type: PopupService }]; } });

class ScrollComponent extends EmbeddedViewContentComponent {
    constructor(viewContainerRef) {
        super(viewContainerRef);
        this.model = new ScrollViewModel();
    }
    ngAfterViewInit() {
        var _a;
        this.model.setRootElement((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement);
    }
    ngOnDestroy() {
        this.model.setRootElement(undefined);
        this.model.unsubscribeRootElement();
    }
}
ScrollComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScrollComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
ScrollComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ScrollComponent, selector: "sv-scroll", inputs: { disabled: "disabled" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n    <ng-container *ngIf=\"!disabled\">\n        <div class=\"sv-scroll__wrapper\" #container>\n            <div class=\"sv-scroll__scroller sv-drag-target-skipped\" (scroll)=\"model.onScrollContainer()\">\n                <div class=\"sv-scroll__container\">\n                    <ng-container *ngTemplateOutlet=\"transparentTemplate\"></ng-container>\n                </div>\n            </div>\n            <div class=\"sv-scroll__scrollbar\" (scroll)=\"model.onScrollScrollbar()\">\n                <div class=\"sv-scroll__scrollbar-sizer\">\n                </div>\n            </div>\n        </div>\n    </ng-container>\n    <ng-container *ngIf=\"disabled\"><ng-container *ngTemplateOutlet=\"transparentTemplate\"></ng-container></ng-container>\n</ng-template>\n<ng-template #transparentTemplate>\n    <ng-content></ng-content>\n</ng-template>", styles: [":host { display: none; }"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScrollComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-scroll",
                    templateUrl: "./scroll.component.html",
                    styles: [":host { display: none; }"]
                }]
        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { disabled: [{
                type: Input
            }], container: [{
                type: ViewChild,
                args: ["container"]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-scroll", ScrollComponent);

class SvgBundleComponent {
    constructor() {
        this.onIconsChanged = () => {
            var _a;
            if (!!((_a = this.svgContainer) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
                this.svgContainer.nativeElement.innerHTML = SvgRegistry.iconsRenderedHtml();
            }
        };
    }
    ngOnInit() {
        this.onIconsChanged();
        SvgRegistry.onIconsChanged.add(this.onIconsChanged);
    }
    ngOnDestroy() {
        SvgRegistry.onIconsChanged.remove(this.onIconsChanged);
    }
}
SvgBundleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SvgBundleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
SvgBundleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SvgBundleComponent, selector: "sv-svg-bundle", viewQueries: [{ propertyName: "svgContainer", first: true, predicate: ["svgContainer"], descendants: true, static: true }], ngImport: i0, template: "<svg id='sv-icon-holder-global-container' #svgContainer></svg>", isInline: true, styles: [":host { display: none; }"] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SvgBundleComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-svg-bundle",
                    template: "<svg id='sv-icon-holder-global-container' #svgContainer></svg>",
                    styles: [":host { display: none; }"]
                }]
        }], propDecorators: { svgContainer: [{
                type: ViewChild,
                args: ["svgContainer", { static: true }]
            }] } });

class DynamicHeadComponent extends EmbeddedViewContentComponent {
    get ariaLabel() {
        return this.element.titleAriaLabel;
    }
}
DynamicHeadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicHeadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
DynamicHeadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DynamicHeadComponent, selector: "sv-ng-dynamic-head", inputs: { tagName: "tagName", element: "element" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <ng-container [ngSwitch]=\"tagName\">\n    <h1 *ngSwitchCase=\"'h1'\" [class]=\"element.cssTitle\" [attr.id]=\"element.ariaTitleId\" [attr.tabindex]=\"element.titleTabIndex\" [attr.aria-expanded]=\"element.titleAriaExpanded\" [attr.role]=\"element.titleAriaRole\" [attr.aria-label]=\"ariaLabel\"><ng-container *ngTemplateOutlet=\"titleContent\"></ng-container></h1>\n    <h2 *ngSwitchCase=\"'h2'\"[class]=\"element.cssTitle\" [attr.id]=\"element.ariaTitleId\" [attr.tabindex]=\"element.titleTabIndex\" [attr.aria-expanded]=\"element.titleAriaExpanded\" [attr.role]=\"element.titleAriaRole\" [attr.aria-label]=\"ariaLabel\"><ng-container *ngTemplateOutlet=\"titleContent\"></ng-container></h2>\n    <h3 *ngSwitchCase=\"'h3'\"[class]=\"element.cssTitle\" [attr.id]=\"element.ariaTitleId\" [attr.tabindex]=\"element.titleTabIndex\" [attr.aria-expanded]=\"element.titleAriaExpanded\" [attr.role]=\"element.titleAriaRole\" [attr.aria-label]=\"ariaLabel\"><ng-container *ngTemplateOutlet=\"titleContent\"></ng-container></h3>\n    <h4 *ngSwitchCase=\"'h4'\"[class]=\"element.cssTitle\" [attr.id]=\"element.ariaTitleId\" [attr.tabindex]=\"element.titleTabIndex\" [attr.aria-expanded]=\"element.titleAriaExpanded\" [attr.role]=\"element.titleAriaRole\" [attr.aria-label]=\"ariaLabel\"><ng-container *ngTemplateOutlet=\"titleContent\"></ng-container></h4>\n    <h5 *ngSwitchCase=\"'h5'\"[class]=\"element.cssTitle\" [attr.id]=\"element.ariaTitleId\" [attr.tabindex]=\"element.titleTabIndex\" [attr.aria-expanded]=\"element.titleAriaExpanded\" [attr.role]=\"element.titleAriaRole\" [attr.aria-label]=\"ariaLabel\"><ng-container *ngTemplateOutlet=\"titleContent\"></ng-container></h5>\n    <h6 *ngSwitchCase=\"'h6'\"[class]=\"element.cssTitle\" [attr.id]=\"element.ariaTitleId\" [attr.tabindex]=\"element.titleTabIndex\" [attr.aria-expanded]=\"element.titleAriaExpanded\" [attr.role]=\"element.titleAriaRole\" [attr.aria-label]=\"ariaLabel\"><ng-container *ngTemplateOutlet=\"titleContent\"></ng-container></h6>\n    <label *ngSwitchCase=\"'label'\"[class]=\"element.cssTitle\" [attr.id]=\"element.ariaTitleId\" [attr.tabindex]=\"element.titleTabIndex\" [attr.aria-expanded]=\"element.titleAriaExpanded\" [attr.role]=\"element.titleAriaRole\" [attr.aria-label]=\"ariaLabel\"><ng-container *ngTemplateOutlet=\"titleContent\"></ng-container></label>\n  </ng-container>\n  <ng-template #titleContent>\n    <ng-content></ng-content>\n  </ng-template>\n</ng-template>", styles: [":host{display:none}\n"], directives: [{ type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicHeadComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-dynamic-head",
                    templateUrl: "./dynamic-head.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { tagName: [{
                type: Input
            }], element: [{
                type: Input
            }] } });

class SvgIconComponent {
    constructor(viewContaierRef) {
        this.viewContaierRef = viewContaierRef;
    }
    createSvg() {
        if (!!this.iconName) {
            Survey.createSvg(this.size, this.width, this.height, this.iconName, this.viewContaierRef.element.nativeElement, this.title);
        }
    }
    get rootClass() {
        let className = "sv-svg-icon";
        if (!this.css && !!this.partCss) {
            className += " " + this.partCss;
        }
        else if (!!this.css) {
            className = this.css;
        }
        return className;
    }
    get rootRole() {
        return "presentation";
    }
    ngOnChanges() {
        const el = this.viewContaierRef.element.nativeElement;
        el.innerHTML = "";
        el.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "use"));
        this.createSvg();
    }
}
SvgIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SvgIconComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
SvgIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: { size: "size", width: "width", height: "height", iconName: "iconName", partCss: "partCss", css: "css", title: "title" }, host: { properties: { "class": "this.rootClass", "[attr.role]": "this.rootRole" } }, usesOnChanges: true, ngImport: i0, template: "", isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SvgIconComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "'[sv-ng-svg-icon]'",
                    template: ""
                }]
        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { size: [{
                type: Input
            }], width: [{
                type: Input
            }], height: [{
                type: Input
            }], iconName: [{
                type: Input
            }], partCss: [{
                type: Input
            }], css: [{
                type: Input
            }], title: [{
                type: Input
            }], rootClass: [{
                type: HostBinding,
                args: ["class"]
            }], rootRole: [{
                type: HostBinding,
                args: ["[attr.role]"]
            }] } });

class SurveyStringComponent {
}
SurveyStringComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyStringComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
SurveyStringComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: { model: "model" }, ngImport: i0, template: "<ng-template [component]='{ name: model.renderAs, data: { model: model.renderAsData } }'></ng-template>", isInline: true, directives: [{ type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyStringComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-string, '[sv-ng-string]'",
                    template: "<ng-template [component]='{ name: model.renderAs, data: { model: model.renderAsData } }'></ng-template>"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });

class ElementTitleActionsComponent extends EmbeddedViewContentComponent {
    get cssClasses() {
        return (this.element.isPanel ? this.element.cssClasses.panel : this.element.cssClasses) || {};
    }
}
ElementTitleActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementTitleActionsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ElementTitleActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ElementTitleActionsComponent, selector: "sv-ng-element-title-actions", inputs: { element: "element" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <ng-container *ngIf=\"!element.hasTitleActions\">\n    <ng-container *ngTemplateOutlet=\"elementTitleContent\"></ng-container>\n  </ng-container>\n  <ng-container *ngIf=\"element.hasTitleActions\">\n    <div class=\"sv-title-actions\">\n      <span class=\"sv-title-actions__title\">\n        <ng-container *ngTemplateOutlet=\"elementTitleContent\"></ng-container>\n      </span>\n      <sv-ng-action-bar [model]=\"element.getTitleToolbar()\"></sv-ng-action-bar>\n    </div>\n  </ng-container>\n  <ng-template #elementTitleContent>\n    <sv-ng-string *ngIf=\"element.isTitleRenderedAsString\" [model]=\"element.locTitle\"></sv-ng-string>\n    <ng-container *ngIf=\"!element.isTitleRenderedAsString\">\n      <span\n        *ngIf=\"element.isRequireTextOnStart\"\n        [class]=\"element.cssRequiredMark\"\n        [attr.aria-hidden]=\"true\"\n        >{{ element.requiredMark }}</span>\n      <span\n        *ngIf=\"element.no\"\n        style=\"position: static\"\n        [class]=\"element.cssTitleNumber\"\n        [attr.aria-hidden]=\"true\"\n        >{{ element.no }}</span>\n      <span *ngIf=\"element.no\">&nbsp;</span>\n      <span\n        *ngIf=\"element.isRequireTextBeforeTitle\"\n        [class]=\"element.cssRequiredMark\"\n        [attr.aria-hidden]=\"true\"\n        >{{ element.requiredMark }}</span>\n      <span *ngIf=\"element.isRequireTextBeforeTitle\">&nbsp;</span>\n      <sv-ng-string [model]=\"element.locTitle\"></sv-ng-string>\n      <span *ngIf=\"element.isRequireTextAfterTitle\">&nbsp;</span>\n      <span\n        *ngIf=\" element.isRequireTextAfterTitle\"\n        [class]=\"element.cssRequiredMark\"\n        [attr.aria-hidden]=\"true\"\n        >{{ element.requiredMark }}</span> \n  </ng-container>\n  </ng-template>\n</ng-template>", styles: [":host{display:none}\n"], 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"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementTitleActionsComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-element-title-actions",
                    templateUrl: "./title-actions.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { element: [{
                type: Input
            }] } });

class ElementTitleComponent extends EmbeddedViewContentComponent {
}
ElementTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ElementTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ElementTitleComponent, selector: "sv-ng-element-title", inputs: { element: "element" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <sv-ng-dynamic-head [tagName]=\"element.titleTagName\" [element]=\"element\" *ngIf=\"element.hasTitle\">\n    <svg *ngIf=\"!element.isExpanded && element.getCssTitleExpandableSvg()\" [iconName]=\"'icon-expand-16x16'\" [partCss]=\"element.getCssTitleExpandableSvg()\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n    <svg *ngIf=\"element.isExpanded && element.getCssTitleExpandableSvg()\" [iconName]=\"'icon-collapse-16x16'\" [partCss]=\"element.getCssTitleExpandableSvg()\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n    <sv-ng-element-title-actions [element]=\"element\"></sv-ng-element-title-actions>\n  </sv-ng-dynamic-head>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: DynamicHeadComponent, selector: "sv-ng-dynamic-head", inputs: ["tagName", "element"] }, { type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: ElementTitleActionsComponent, selector: "sv-ng-element-title-actions", inputs: ["element"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementTitleComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-element-title",
                    templateUrl: "./element-title.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { element: [{
                type: Input
            }] } });

class SurveyHeaderComponent {
    constructor(viewContainerRef, changeDetectorRef) {
        this.viewContainerRef = viewContainerRef;
        this.changeDetectorRef = changeDetectorRef;
    }
    ngAfterViewInit() {
        this.survey.afterRenderHeader(this.viewContainerRef.element.nativeElement);
        this.survey.locLogo.onChanged = () => {
            this.changeDetectorRef.detectChanges();
        };
    }
    ngOnDestroy() {
        this.survey.locLogo.onChanged = () => { };
    }
}
SurveyHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyHeaderComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
SurveyHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SurveyHeaderComponent, selector: "'[sv-ng-survey-header]'", inputs: { survey: "survey" }, ngImport: i0, template: "<ng-template *ngIf=\"survey.isLogoBefore\" [component]=\"{ name: survey.getElementWrapperComponentName(survey, 'logo-image'), data: { data: survey.getElementWrapperComponentData(survey, 'logo-image') } }\"></ng-template>\n<div\n  *ngIf=\"survey.renderedHasTitle\"\n  [class]=\"survey.css.headerText\"\n  [style.maxWidth]=\"survey.titleMaxWidth\"\n>\n  <sv-ng-element-title [element]=\"survey\"></sv-ng-element-title>\n  <div *ngIf=\"survey.renderedHasDescription\" [class]=\"survey.css.description\" [model]=\"survey.locDescription\" sv-ng-string></div>\n</div>\n\n<ng-template *ngIf=\"survey.isLogoAfter\" [component]=\"{ name: survey.getElementWrapperComponentName(survey, 'logo-image'), data: { data: survey.getElementWrapperComponentData(survey, 'logo-image') } }\"></ng-template>\n<div [class]=\"survey.css.headerClose\"></div>", components: [{ type: ElementTitleComponent, selector: "sv-ng-element-title", inputs: ["element"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyHeaderComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "'[sv-ng-survey-header]'",
                    templateUrl: "survey-header.component.html"
                }]
        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { survey: [{
                type: Input
            }] } });

class ErrorsComponent {
    constructor() { }
    get role() {
        return "alert";
    }
    get id() {
        return this.element.id + "_errors";
    }
    get ariaLive() {
        return "polite";
    }
    get class() {
        return this.element.cssError;
    }
}
ErrorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
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: "<ng-container *ngFor=\"let error of element.errors;\">\n  <ng-template [component]=\"{ name: element.survey.questionErrorComponent, data: { element: element, cssClasses: element.cssClasses, error: error } }\"></ng-template>\n</ng-container>\n", directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorsComponent, decorators: [{
            type: Component,
            args: [{
                    templateUrl: "./errors.component.html",
                    selector: "'[sv-ng-errors]'"
                }]
        }], ctorParameters: function () { return []; }, propDecorators: { element: [{
                type: Input
            }], location: [{
                type: Input
            }], role: [{
                type: HostBinding,
                args: ["attr.role"]
            }], id: [{
                type: HostBinding,
                args: ["id"]
            }], ariaLive: [{
                type: HostBinding,
                args: ["attr.aria-live"]
            }], class: [{
                type: HostBinding,
                args: ["class"]
            }] } });

class ElementComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
    get elementComponentName() {
        return this.model.isPanel ? "panel" : "question";
    }
    onModelChanged() {
        var _a;
        super.onModelChanged();
        if (this.previousModel) {
            this.previousModel.setWrapperElement(undefined);
        }
        if (this.model && ((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            this.model.setWrapperElement(this.container.nativeElement);
        }
    }
    get componentName() {
        const survey = this.surveyModel;
        if (!!survey) {
            const name = survey.getElementWrapperComponentName(this.model);
            if (!!name) {
                return name;
            }
        }
        return this.elementComponentName;
    }
    get rootStyle() {
        //use this if to check if cssClassses are calculated and allowRootStyle flag was set
        if (!!this.model.cssClasses) {
            return this.model.rootStyle;
        }
        else {
            return {};
        }
    }
    get componentData() {
        const survey = this.surveyModel;
        let data;
        if (!!survey) {
            data = survey.getElementWrapperComponentData(this.model);
        }
        return {
            componentName: this.elementComponentName,
            componentData: {
                model: this.model,
                data: data
            }
        };
    }
    ngAfterViewInit() {
        var _a;
        if (this.model && ((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            this.model.setWrapperElement(this.container.nativeElement);
        }
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        this.model.setWrapperElement(undefined);
    }
}
ElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ElementComponent, selector: "sv-ng-element", inputs: { model: "model" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n    <div *ngIf=\"!!model\" [class]=\"model.cssClasses.questionWrapper\" [style]=\"rootStyle\" (focusin)=\"model.focusIn()\" #container>\n        <ng-template [component]=\"{ name: componentName, data: componentData }\"></ng-template>\n    </div>\n</ng-template>", styles: [":host{display:none}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-element",
                    templateUrl: "./element.component.html",
                    styleUrls: ["./hide-host.scss"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }], container: [{
                type: ViewChild,
                args: ["container", { static: false, read: ElementRef }]
            }] } });

class RowComponent extends BaseAngular {
    constructor(cdr, vcr, ngZone) {
        super(cdr, vcr);
        this.ngZone = ngZone;
    }
    getModel() {
        return this.row;
    }
    trackElementBy(index, element) {
        return element.name + index;
    }
    ngAfterViewInit() {
        var _a;
        const el = (_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement;
        if (!!el) {
            this.row.setRootElement(el);
            if (!this.row.isNeedRender) {
                this.ngZone.runOutsideAngular(() => {
                    setTimeout(() => {
                        this.row.startLazyRendering(el);
                    }, 10);
                });
            }
        }
    }
    onModelChanged() {
        var _a;
        super.onModelChanged();
        if (!this.previousModel) {
            return;
        }
        else {
            this.previousModel.setRootElement(undefined);
            if ((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement) {
                this.row.setRootElement(this.container.nativeElement);
            }
            this.row.isNeedRender = this.previousModel.isNeedRender;
            this.stopLazyRendering();
        }
    }
    stopLazyRendering() {
        this.row.stopLazyRendering();
        this.row.isNeedRender = !this.row.isLazyRendering();
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        if (!this.isBaseElementSubsribed(this.row)) {
            this.row.setRootElement(undefined);
            this.stopLazyRendering();
        }
    }
}
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 });
RowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RowComponent, selector: "sv-ng-row", inputs: { row: "row" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div [class]=\"row.getRowCss()\" #container>\n    <ng-container *ngFor=\"let element of row.visibleElements; trackBy: trackElementBy\">\n      <sv-ng-element [model]=\"$any(element)\" *ngIf=\"row.isNeedRender\"></sv-ng-element>\n      <ng-template *ngIf=\"!row.isNeedRender && element.skeletonComponentName\" [component]=\"{ name: element.skeletonComponentName, data: { element: element } }\"></ng-template>\n    </ng-container>\n  </div>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: ElementComponent, selector: "sv-ng-element", inputs: ["model"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RowComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-row",
                    templateUrl: "./row.component.html",
                    styleUrls: ["./hide-host.scss"]
                }]
        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i0.NgZone }]; }, propDecorators: { row: [{
                type: Input
            }], container: [{
                type: ViewChild,
                args: ["container", { read: ElementRef }]
            }] } });

class PageComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
    onModelChanged() {
        if (!!this.pageContainerRef && this.pageContainerRef.nativeElement) {
            this.model.survey.afterRenderPage(this.pageContainerRef.nativeElement);
        }
    }
    ngAfterViewInit() {
        var _a, _b;
        (_a = this.model.survey) === null || _a === void 0 ? void 0 : _a.afterRenderPage((_b = this.pageContainerRef) === null || _b === void 0 ? void 0 : _b.nativeElement);
    }
}
PageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
PageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PageComponent, selector: "page, sv-ng-page", inputs: { model: "model", survey: "survey" }, viewQueries: [{ propertyName: "pageContainerRef", first: true, predicate: ["pageContainer"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <ng-container *ngIf=\"!!this.survey && !!this.model && this.model.isVisible && !!this.model.survey\">\n    <div [class]=\"model.cssRoot\" #pageContainer>\n      <sv-ng-element-title [element]=\"model\"></sv-ng-element-title>\n      <div *ngIf=\"model._showDescription\" [class]=\"model.cssClasses.page.description\">\n        <sv-ng-string [model]=\"model.locDescription\"></sv-ng-string>\n      </div>\n      <div *ngIf=\"model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n      <ng-container *ngFor=\"let row of model.visibleRows\">\n        <ng-template [component]=\"{ name: $any(model.survey).getRowWrapperComponentName(row), data: { componentData: $any(model.survey).getRowWrapperComponentData(row) } }\">\n          <sv-ng-row [row]=\"row\"></sv-ng-row>\n        </ng-template>\n      </ng-container>\n    </div>\n  </ng-container>  \n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: ElementTitleComponent, selector: "sv-ng-element-title", inputs: ["element"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: ["element", "location"] }, { type: RowComponent, selector: "sv-ng-row", inputs: ["row"] }], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PageComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "page, sv-ng-page",
                    templateUrl: "./page.component.html",
                    styleUrls: ["./hide-host.scss"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }], survey: [{
                type: Input
            }], pageContainerRef: [{
                type: ViewChild,
                args: ["pageContainer", { static: false, read: ElementRef }]
            }] } });

class BrandInfoComponent {
}
BrandInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BrandInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
BrandInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BrandInfoComponent, selector: "sv-brand-info", ngImport: i0, template: "<div class=\"sv-brand-info\">\n  <a class=\"sv-brand-info__logo\" href=\"https://surveyjs.io/?utm_source=built-in_links&utm_medium=online_survey_tool&utm_campaign=landing_page\"><img src=\"https://surveyjs.io/Content/Images/poweredby.svg\"/></a>\n  <div class=\"sv-brand-info__text\">Try and see how easy it is to <a href=\"https://surveyjs.io/create-survey?utm_source=built-in_links&utm_medium=online_survey_tool&utm_campaign=create_survey\">create a survey</a></div>\n  <div class=\"sv-brand-info__terms\"><a href=\"https://surveyjs.io/TermsOfUse\">Terms of Use & Privacy Statement</a></div>\n</div>" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BrandInfoComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-brand-info",
                    templateUrl: "./brand-info.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("sv-brand-info", BrandInfoComponent);

class NotifierComponent extends BaseAngular {
    getStateElement() {
        return this.notifier;
    }
    getModel() {
        return this.notifier;
    }
}
NotifierComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NotifierComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
NotifierComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NotifierComponent, selector: "sv-notifier", inputs: { notifier: "notifier" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <ng-container *ngIf=\"notifier.isDisplayed\">\n    <div [class]=\"notifier.css\" [style]=\"{ visibility: notifier.active ? 'visible' : 'hidden' }\" role=\"alert\" aria-live=\"polite\">\n      <span>{{notifier.message}}</span>\n      <sv-action-bar [model]=\"notifier.actionBar\"></sv-action-bar> \n    </div>\n  </ng-container>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NotifierComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-notifier",
                    templateUrl: "./notifier.component.html",
                    styles: [":host { display: none; }"]
                }]
        }], propDecorators: { notifier: [{
                type: Input
            }] } });

class SafeHtmlPipe {
    constructor(domSanitizer) {
        this.domSanitizer = domSanitizer;
    }
    transform(url) {
        return this.domSanitizer.bypassSecurityTrustHtml(url);
    }
}
SafeHtmlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
SafeHtmlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SafeHtmlPipe, name: "safeHtml" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SafeHtmlPipe, decorators: [{
            type: Pipe,
            args: [{ name: "safeHtml" }]
        }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } });

class SurveyContentComponent extends BaseAngular {
    constructor() {
        super(...arguments);
        this.isSurveyUpdated = false;
    }
    getModel() {
        return this.model;
    }
    onModelChanged() {
        if (!!this.previousModel) {
            this.previousModel.destroyResizeObserver();
            this.previousModel.renderCallback = undefined;
        }
        if (!!this.model) {
            this.model.renderCallback = () => {
                this.detectChanges();
            };
        }
        this.isSurveyUpdated = true;
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        if (!!this.model) {
            this.model.rootElement = undefined;
            this.model.destroyResizeObserver();
            this.model.renderCallback = undefined;
        }
    }
    ngAfterViewInit() {
        this.isSurveyUpdated = true;
    }
    ngAfterViewChecked() {
        if (!!this.model && this.isSurveyUpdated) {
            this.model.afterRenderSurvey(this.rootEl.nativeElement);
            this.model.startTimerFromUI();
        }
        super.ngAfterViewChecked();
    }
}
SurveyContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyContentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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\" [lang]=\"model.locale || 'en'\" [dir]=\"model.localeDir\">\n    <sv-scroll [disabled]=\"model.rootScrollDisabled\">\n      <sv-svg-bundle *ngIf=\"model.needRenderIcons\"></sv-svg-bundle>\n      <div [class]=\"model.wrapperFormCss\">\n        <div *ngIf=\"!!model.renderBackgroundImage\" [class]=\"model.css.rootBackgroundImage\" [style]=\"model.backgroundImageStyle\"></div>\n        <form onsubmit=\"return false;\">\n          <sv-scroll [disabled]=\"model.formScrollDisabled\">\n          <div class=\"sv_custom_header\" [hidden]=\"model.hasLogo\"></div>\n          <div [class]=\"model.css.container\">\n            <div *ngIf=\"model.headerView === 'basic' && 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=\"sv-components-column sv-components-column--expandable\">\n                <ng-template [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'center' } }\"></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                  <sv-brand-info *ngIf=\"model.showBrandInfo\"></sv-brand-info>\n                </div>\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 | safeHtml\"></div>\n            <ng-template *ngIf=\"model.state === 'completed' && model.showCompletedPage\" [component]=\"{ name: 'sv-components-container', data: { survey: model, container: 'completePage' } }\"></ng-template>\n            <div *ngIf=\"model.state === 'completedbefore'\" [class]=\"model.completedBeforeCss\"\n              [innerHtml]=\"model.processedCompletedBeforeHtml | safeHtml\"></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        </sv-scroll>\n        </form>\n        <sv-notifier [notifier]=\"model.notifier\"></sv-notifier>\n      </div>\n    </sv-scroll>\n  </div>\n</ng-template>", components: [{ type: ScrollComponent, selector: "sv-scroll", inputs: ["disabled"] }, { type: SvgBundleComponent, selector: "sv-svg-bundle" }, { 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"] }], pipes: { "safeHtml": SafeHtmlPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyContentComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "survey-content",
                    templateUrl: "./survey-content.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }], rootEl: [{
                type: ViewChild,
                args: ["surveyContainer", { static: false }]
            }] } });
AngularComponentFactory.Instance.registerComponent("survey", SurveyContentComponent);

addIconsToThemeSet("v1", icons);
addIconsToThemeSet("v2", icons$1);
SvgRegistry.registerIcons(icons$1);
class SurveyComponent extends BaseAngular {
    constructor(changeDetectorRef) {
        super(changeDetectorRef);
        changeDetectorRef.detach();
    }
    getModel() {
        return this.model;
    }
    getShouldReattachChangeDetector() {
        return false;
    }
    onModelChanged() {
        this.changeDetectorRef.detectChanges();
    }
}
SurveyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
SurveyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SurveyComponent, selector: "survey", inputs: { model: "model" }, usesInheritance: true, ngImport: i0, template: "<sv-ng-modal-container></sv-ng-modal-container><survey-content [model]='model'></survey-content>", isInline: true, components: [{ type: ModalComponent, selector: "sv-ng-modal-container" }, { type: SurveyContentComponent, selector: "survey-content", inputs: ["model"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "survey",
                    template: "<sv-ng-modal-container></sv-ng-modal-container><survey-content [model]='model'></survey-content>"
                }]
        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{
                type: Input
            }] } });

class PopupSurveyComponent extends BaseAngular {
    constructor(changeDetectorRef) {
        super(changeDetectorRef);
        changeDetectorRef.detach();
    }
    getModel() {
        return this.popup;
    }
    getShouldReattachChangeDetector() {
        return false;
    }
    getHeaderCss() {
        let headerCss = this.popup.cssHeaderRoot;
        if (this.popup.isCollapsed) {
            headerCss += " " + this.popup.cssRootCollapsedMod;
        }
        return headerCss;
    }
    closeHandler() {
        this.popup.hide();
        if (!!this.onClose) {
            this.onClose();
        }
    }
    ngOnChanges(changes) {
        var _a, _b;
        if (((_a = changes["model"]) === null || _a === void 0 ? void 0 : _a.currentValue) !== ((_b = changes["model"]) === null || _b === void 0 ? void 0 : _b.previousValue)) {
            this.popup = new PopupSurveyModel(null, this.model);
        }
        if (this.isExpanded !== undefined) {
            this.popup.isExpanded = this.isExpanded;
        }
        if (this.allowClose !== undefined) {
            this.popup.allowClose = this.allowClose;
        }
        if (this.allowFullScreen !== undefined) {
            this.popup.allowFullScreen = this.allowFullScreen;
        }
        if (this.closeOnCompleteTimeout !== undefined) {
            this.popup.closeOnCompleteTimeout = this.closeOnCompleteTimeout;
        }
        this.popup.isShowing = true;
        this.changeDetectorRef.detectChanges();
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        this.popup.dispose();
    }
}
PopupSurveyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupSurveyComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
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", allowFullScreen: "allowFullScreen", onClose: "onClose" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!!popup && popup.isShowing\" [class]=\"popup.cssRoot\" [style.width]=\"popup.renderedWidth\" [style.maxWidth]=\"popup.renderedWidth\" (scroll)=\"popup.onScroll()\">\n  <div [class]=\"popup.cssRootContent\">\n    <div [class]=\"getHeaderCss()\">\n      <div *ngIf=\"popup.isCollapsed && !!popup.locTitle\" [class]=\"popup.cssHeaderTitleCollapsed\">\n        {{popup.locTitle.renderedHtml}}\n      </div>\n      <div [class]=\"popup.cssHeaderButtonsContainer\">\n        <div *ngIf=\"popup.allowFullScreen\" [class]=\"popup.cssHeaderFullScreenButton\" (click)=\"popup.toggleFullScreen()\">\n          <svg *ngIf=\"popup.isFullScreen\" [iconName]=\"'icon-back-to-panel_16x16'\" [size]=\"16\" sv-ng-svg-icon></svg>\n          <svg *ngIf=\"!popup.isFullScreen\" [iconName]=\"'icon-full-screen_16x16'\" [size]=\"16\" sv-ng-svg-icon></svg>\n        </div>\n\n        <div [class]=\"popup.cssHeaderCollapseButton\" (click)=\"popup.changeExpandCollapse()\">\n            <svg *ngIf=\"popup.isExpanded\" [iconName]=\"'icon-minimize_16x16'\" [size]=\"16\" sv-ng-svg-icon></svg>\n            <svg *ngIf=\"popup.isCollapsed\" [iconName]=\"'icon-restore_16x16'\" [size]=\"16\" sv-ng-svg-icon></svg>\n        </div>\n\n        <div *ngIf=\"popup.allowClose\" [class]=\"popup.cssHeaderCloseButton\" (click)=\"closeHandler()\">\n          <svg [iconName]=\"'icon-close_16x16'\" [size]=\"16\" sv-ng-svg-icon></svg>\n        </div>\n      </div>\n  </div>\n  <div [class]=\"popup.cssBody\">\n    <survey [model]=\"popup.survey\"></survey>\n  </div>\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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupSurveyComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "popup-survey",
                    templateUrl: "./popup.survey.component.html",
                    styleUrls: ["./popup.survey.component.scss"]
                }]
        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{
                type: Input
            }], isExpanded: [{
                type: Input
            }], allowClose: [{
                type: Input
            }], closeOnCompleteTimeout: [{
                type: Input
            }], allowFullScreen: [{
                type: Input
            }], onClose: [{
                type: Input
            }] } });

class QuestionAngular extends BaseAngular {
    getModel() {
        return this.model;
    }
    ngAfterViewInit() {
        var _a;
        if (!!this.model) {
            this.model.afterRenderQuestionElement((_a = this.elementContentRef) === null || _a === void 0 ? void 0 : _a.nativeElement);
        }
    }
    ngOnDestroy() {
        var _a;
        if (!!this.model) {
            this.model.beforeDestroyQuestionElement((_a = this.elementContentRef) === null || _a === void 0 ? void 0 : _a.nativeElement);
        }
        super.ngOnDestroy();
    }
}
QuestionAngular.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionAngular, deps: null, target: i0.ɵɵFactoryTarget.Component });
QuestionAngular.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: QuestionAngular, selector: "ng-component", inputs: { model: "model" }, viewQueries: [{ propertyName: "elementContentRef", first: true, predicate: ["contentElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "", isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionAngular, decorators: [{
            type: Component,
            args: [{
                    template: ""
                }]
        }], propDecorators: { model: [{
                type: Input
            }], elementContentRef: [{
                type: ViewChild,
                args: ["contentElement"]
            }] } });
function getComponentName(question) {
    if (question.customWidget)
        return "survey-customwidget";
    if (question.isDefaultRendering()) {
        return question.getTemplate() + "-question";
    }
    return question.getComponentName();
}

class ElementHeaderComponent {
    constructor() {
    }
    get rootClass() {
        return this.element.cssHeader;
    }
    get width() {
        return this.element.titleWidth;
    }
    click(e) {
        if (this.element.clickTitleFunction !== undefined) {
            this.element.clickTitleFunction(e);
        }
    }
}
ElementHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
ElementHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ElementHeaderComponent, selector: "'[sv-ng-element-header]'", inputs: { element: "element" }, host: { listeners: { "click": "click($event)" }, properties: { "class": "this.rootClass", "style.width": "this.width" } }, ngImport: i0, template: "<sv-ng-element-title [element]=\"element\"></sv-ng-element-title>\n<div *ngIf=\"element.hasDescriptionUnderTitle\" [class]=\"element.cssDescription\" [model]=\"element.locDescription\" [attr.id]=\"element.ariaDescriptionId\" [style.display]=\"element.hasDescription ? '': 'none' \" sv-ng-string></div>\n<ng-container *ngIf=\"element.hasAdditionalTitleToolbar\">\n<sv-ng-action-bar [model]=\"element.additionalTitleToolbar\"></sv-ng-action-bar>\n</ng-container>", components: [{ type: ElementTitleComponent, selector: "sv-ng-element-title", inputs: ["element"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ElementHeaderComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "'[sv-ng-element-header]'",
                    templateUrl: "./element-header.component.html"
                }]
        }], ctorParameters: function () { return []; }, propDecorators: { element: [{
                type: Input
            }], rootClass: [{
                type: HostBinding,
                args: ["class"]
            }], width: [{
                type: HostBinding,
                args: ["style.width"]
            }], click: [{
                type: HostListener,
                args: ["click", ["$event"]]
            }] } });

class SurveyCommentComponent {
    constructor() {
    }
    get comment() {
        if (!this.question.comment)
            return "";
        return this.question.comment;
    }
}
SurveyCommentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyCommentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
SurveyCommentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SurveyCommentComponent, selector: "sv-ng-comment, '[sv-ng-comment]'", inputs: { question: "question" }, ngImport: i0, template: "<ng-container *ngIf=\"!question.isReadOnlyRenderDiv()\">\n  <ng-template [component]=\"{ name: 'sv-text-area', data: { model: question.commentTextAreaModel } }\"></ng-template>\n</ng-container>\n<div *ngIf=\"question.isReadOnlyRenderDiv()\">{{ question.comment }}</div>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyCommentComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-comment, '[sv-ng-comment]'",
                    templateUrl: "./comment.component.html",
                }]
        }], ctorParameters: function () { return []; }, propDecorators: { question: [{
                type: Input
            }] } });

class QuestionComponent extends EmbeddedViewContentComponent {
    getModel() {
        return this.model;
    }
    ngAfterViewInit() {
        var _a, _b;
        if (!!((_a = this.rootEl) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            this.model.afterRender((_b = this.rootEl) === null || _b === void 0 ? void 0 : _b.nativeElement);
        }
    }
    ngOnDestroy() {
        if (!!this.model) {
            this.model.destroyResizeObserver();
        }
    }
    getComponentName() { return getComponentName(this.model); }
    getQuestionContentWrapperComponentName() {
        return this.model.survey.getQuestionContentWrapperComponentName(this.model);
    }
    getQuestionContentWrapperComponentData() {
        return {
            componentData: {
                model: this.model,
                data: this.model.survey.getElementWrapperComponentData(this.model)
            }
        };
    }
}
QuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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-label]=\"model.ariaLabel\" [attr.aria-labelledby]=\"model.ariaLabelledBy\" [attr.aria-describedby]=\"model.ariaDescribedBy\" [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    <ng-template [component]=\"{ name: getQuestionContentWrapperComponentName(), data: getQuestionContentWrapperComponentData() }\">\n      <div [class]=\"model.cssContent\" role=\"presentation\" [visible]=\"model.renderedIsExpanded\">\n        <div *ngIf=\"model.showErrorOnTop && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n        <ng-template [component]=\"{ name: getComponentName(), data: { model: model }, default: 'skeleton-question' }\"></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\" [attr.id]=\"model.ariaDescriptionId\" [model]=\"model.locDescription\" sv-ng-string></div>\n      </div>\n    </ng-template>\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: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-question",
                    templateUrl: "./question.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }], rootEl: [{
                type: ViewChild,
                args: ["elementContainer"]
            }] } });
AngularComponentFactory.Instance.registerComponent("question", QuestionComponent);

class StringViewerComponent {
    constructor(changeDetectorRef) {
        this.changeDetectorRef = changeDetectorRef;
        this.className = "";
    }
    ngDoCheck() {
        if (this.model !== this.previousModel) {
            this.className = this.model.allowLineBreaks ? "sv-string-viewer sv-string-viewer--multiline" : "sv-string-viewer";
            if (!!this.previousModel) {
                this.clearOnChanged(this.previousModel);
            }
            if (!!this.model) {
                this.model.onChanged = () => { this.changeDetectorRef.detectChanges(); };
            }
            this.previousModel = this.model;
        }
    }
    clearOnChanged(model) {
        model.onChanged = () => { };
    }
    ngOnDestroy() {
        !!this.model && this.clearOnChanged(this.model);
    }
}
StringViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: StringViewerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
StringViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: StringViewerComponent, selector: "sv-ng-string-viewer, string-viewer, '[sv-ng-string-viewer]'", inputs: { model: "model" }, ngImport: i0, template: "<span *ngIf=\"!model.hasHtml\" [class]=\"className\">{{model.renderedHtml}}</span>\n<span *ngIf=\"model.hasHtml\" [class]=\"className\" [innerHtml]=\"model.renderedHtml | safeHtml\"></span>", styles: [""], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "safeHtml": SafeHtmlPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: StringViewerComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-string-viewer, string-viewer, '[sv-ng-string-viewer]'",
                    templateUrl: "./string-viewer.component.html",
                    styleUrls: ["./string-viewer.component.scss"]
                }]
        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent(LocalizableString.defaultRenderer, StringViewerComponent);

class TextAreaComponent extends EmbeddedViewContentComponent {
    get value() {
        return this.model.getTextValue() || "";
    }
    ngAfterViewInit() {
        var _a;
        if (!!this.model && !!((_a = this.elementContentRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            const element = this.elementContentRef.nativeElement;
            this.model.setElement(element);
        }
    }
    ngOnDestroy() {
        !!this.model && this.model.dispose();
    }
}
TextAreaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TextAreaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
TextAreaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TextAreaComponent, selector: "sv-text-area", inputs: { model: "model" }, viewQueries: [{ propertyName: "elementContentRef", first: true, predicate: ["contentElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n<textarea\n[readonly]=\"model.isReadOnlyAttr\"\n[disabled]=\"model.isDisabledAttr\"\n[id]=\"model.id\"\n[attr.maxlength]=\"model.maxLength\"\n[attr.cols]=\"model.cols\"\n[attr.rows]=\"model.rows\"\n[attr.placeholder]=\"model.placeholder\"\n[class]=\"model.className\"\n[value]=\"value\"\n(input)=\"model.onTextAreaInput($event)\"\n(keydown)=\"model.onTextAreaKeyDown($event)\"\n(focus)=\"model.onTextAreaFocus($event)\"\n(blur)=\"model.onTextAreaBlur($event)\"\n(change)=\"model.onTextAreaChange($event)\"\n[attr.aria-required]=\"model.ariaRequired\"\n[attr.aria-label]=\"model.ariaLabel\"\n[attr.aria-labelledby]=\"model.ariaLabelledBy\"\n[attr.aria-describedby]=\"model.ariaDescribedBy\"\n[attr.aria-invalid]=\"model.ariaInvalid\"\n[attr.aria-errormessage]=\"model.ariaErrormessage\"\n[style.resize]=\"model.question.resizeStyle\"\n#contentElement></textarea>\n</ng-template>", styles: [":host{display:none}\n"] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TextAreaComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-text-area",
                    templateUrl: "./text-area.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }], elementContentRef: [{
                type: ViewChild,
                args: ["contentElement"]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-text-area", TextAreaComponent);

class PopupPointerComponent extends BaseAngular {
    get popupModel() {
        return this.model;
    }
    getModel() {
        return this.model;
    }
}
PopupPointerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupPointerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
PopupPointerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PopupPointerComponent, selector: "sv-ng-popup-pointer, '[sv-ng-popup-pointer]'", inputs: { model: "model" }, usesInheritance: true, ngImport: i0, template: "<span class=\"sv-popup__pointer\" [style]=\"{ left: popupModel.pointerTarget.left, top: popupModel.pointerTarget.top }\"></span>" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupPointerComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-popup-pointer, '[sv-ng-popup-pointer]'",
                    templateUrl: "./popup-pointer.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("popup-pointer", PopupPointerComponent);

class PopupComponent extends BaseAngular {
    constructor(viewContainerRef, changeDetectorRef) {
        super(changeDetectorRef, viewContainerRef);
    }
    getModel() {
        return this.popupModel;
    }
    onModelChanged() {
        if (this.model) {
            this.model.resetComponentElement();
            this.model.dispose();
        }
        this.model = createPopupViewModel(this.popupModel);
        this.setContainerElement();
    }
    setContainerElement() {
        var _a;
        if (!!((_a = this.containerRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            const container = this.containerRef.nativeElement;
            this.model.setComponentElement(container.parentElement);
        }
    }
    ngAfterViewInit() {
        this.setContainerElement();
    }
    ngOnInit() {
        this.onModelChanged();
    }
    ngOnDestroy() {
        this.model.resetComponentElement();
        this.model.dispose();
        super.ngOnDestroy();
    }
}
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 });
PopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PopupComponent, selector: "sv-ng-popup, '[sv-ng-popup]'", inputs: { popupModel: "popupModel" }, 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PopupComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-popup, '[sv-ng-popup]'",
                    template: "<div #containerRef><sv-ng-popup-container [model]='model' ></sv-ng-popup-container></div>"
                }]
        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { popupModel: [{
                type: Input
            }], containerRef: [{
                type: ViewChild,
                args: ["containerRef"]
            }] } });

class QuestionSkeletonComponent {
}
QuestionSkeletonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
QuestionSkeletonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: QuestionSkeletonComponent, selector: "question-skeleton", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"sv-skeleton--not-implemented\">\n  <div>{{ model.getType() + \" question type renderer is not implemented yet.\" }}</div>\n  <div>{{ model.value }}</div>\n</div>\n", styles: [".sv-skeleton--not-implemented{width:100%;min-width:300px;min-height:40px;border:1px solid red;text-align:center}\n"] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionSkeletonComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "question-skeleton",
                    templateUrl: "./skeleton.component.html",
                    styleUrls: ["./skeleton.component.scss"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("skeleton-question", QuestionSkeletonComponent);

class DropdownComponent extends BaseAngular {
    get dropdownModel() {
        var _a;
        return (_a = this.model) === null || _a === void 0 ? void 0 : _a.dropdownListModel;
    }
    getModel() {
        return this.model.dropdownListModel;
    }
    ngOnInit() {
        super.ngOnInit();
    }
    click(event) {
        var _a;
        (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.onClick(event);
    }
    chevronPointerDown(event) {
        var _a;
        (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.chevronPointerDown(event);
    }
    clear(event) {
        var _a;
        (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.onClear(event);
    }
    keyhandler(event) {
        var _a;
        (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.keyHandler(event);
    }
    blur(event) {
        this.model.onBlur(event);
        this.updateInputDomElement();
    }
    focus(event) {
        this.model.onFocus(event);
    }
    inputChange(event) {
        this.detectChanges();
    }
    updateInputDomElement() {
        var _a;
        if (!!((_a = this.inputElementRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            const control = this.inputElementRef.nativeElement;
            const newValue = this.model.inputStringRendered;
            if (!Helpers.isTwoValueEquals(newValue, control.value, false, true, false)) {
                control.value = this.model.inputStringRendered || "";
            }
        }
    }
}
DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DropdownComponent, selector: "sv-ng-dropdown, '[sv-ng-dropdown]'", inputs: { model: "model" }, viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.cssClasses.selectWrapper\" (click)=\"click($event)\">\n    <div *ngIf=\"!model.isReadOnly\" [attr.tabindex]=\"dropdownModel.noTabIndex ? null : 0\" [class]=\"model.getControlClass()\"\n        [attr.disabled]=\"model.isDisabledAttr ? true : null\" (blur)=\"blur($event)\"\n        (keydown)=\"keyhandler($event)\" [attr.id]=\"model.inputId\" [attr.aria-required]=\"model.ariaRequired\"\n        [attr.aria-labelledby]=\"model.ariaLabelledBy\"\n        [attr.aria-label]=\"model.ariaLabel\" [attr.aria-invalid]=\"model.ariaInvalid\"\n        [attr.aria-errormessage]=\"model.ariaErrormessage\" [attr.role]=\"model.ariaRole\"\n        [attr.aria-controls]=\"dropdownModel.listElementId\"\n        [attr.aria-expanded]=\"model.ariaExpanded\"\n        [attr.aria-activedescendant]=\"dropdownModel.ariaActivedescendant\">\n        <div *ngIf=\"dropdownModel.showHintPrefix\" [class]=\"model.cssClasses.hintPrefix\">\n            <span>{{ dropdownModel.hintStringPrefix }}</span>\n        </div>\n        <div [class]=\"model.cssClasses.controlValue\">\n            <div *ngIf=\"dropdownModel.showHintString\" [class]=\"model.cssClasses.hintSuffix\">\n                <span style=\"visibility: hidden\">{{ dropdownModel.inputStringRendered }}</span>\n                <span>{{ dropdownModel.hintStringSuffix }}</span>\n            </div>\n            <ng-container *ngIf=\"dropdownModel.showInputFieldComponent\">\n                <ng-template [component]=\"{ name: model.inputFieldComponentName, data: { model: dropdownModel.getSelectedAction(), question: model } }\"></ng-template>\n            </ng-container>\n            <sv-ng-string *ngIf=\"model.showSelectedItemLocText\" [model]=\"model.selectedItemLocText\"></sv-ng-string>\n            <input #inputElement type=\"text\" autocomplete=\"off\" [(ngModel)]=\"dropdownModel.inputStringRendered\" [class]=\"model.cssClasses.filterStringInput\"\n            [attr.role]=\"dropdownModel.filterStringEnabled ? model.ariaRole : null\"\n            [attr.id]=\"model.getInputId()\"\n            [attr.inputmode]=\"dropdownModel.inputMode\"\n            [attr.tabindex]=\"dropdownModel.noTabIndex ? null : -1\"\n            [attr.disabled]=\"model.isDisabledAttr ? true : null\"\n            [attr.aria-controls]=\"dropdownModel.listElementId\"\n            [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n            [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n            [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\"\n            [attr.aria-expanded]=\"model.ariaExpanded\"\n            [attr.aria-activedescendant]=\"dropdownModel.ariaActivedescendant\"\n            [attr.placeholder]=\"dropdownModel.placeholderRendered\" \n            [attr.readonly]=\"dropdownModel.filterReadOnly ? true : null\" \n            (change)=\"inputChange($event)\" (blur)=\"blur($event)\" (focus)=\"focus($event)\"/>\n        </div>\n        <div *ngIf=\"(model.allowClear && model.cssClasses.cleanButtonIconId)\" aria-hidden=\"true\"\n            [class]=\"model.cssClasses.cleanButton\" (click)=\"clear($event)\" [visible]=\"model.showClearButton\">\n            <svg [iconName]=\"model.cssClasses.cleanButtonIconId\" [partCss]=\"model.cssClasses.cleanButtonSvg\" [title]=\"model.clearCaption\"\n                [size]=\"'auto'\" sv-ng-svg-icon></svg>\n        </div>\n    </div>\n    <sv-ng-popup *ngIf=\"!model.isReadOnly\" [popupModel]=\"dropdownModel.popupModel\"></sv-ng-popup>\n    <div *ngIf=\"model.isReadOnly\" [class]=\"model.getControlClass()\" [attr.id]=\"model.inputId\" \n    [attr.tabindex]=\"model.isDisabledAttr ? null : 0\"\n    [attr.disabled]=\"model.isDisabledAttr ? true : null\"\n    [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n    [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n    [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\">\n        <sv-ng-string *ngIf=\"model.selectedItemLocText\" [model]=\"model.selectedItemLocText\"></sv-ng-string>\n        <div>{{ model.readOnlyText }}</div>\n    </div>\n    <div *ngIf=\"model.cssClasses.chevronButtonIconId\" [class]=\"model.cssClasses.chevronButton\" (pointerdown)=\"chevronPointerDown($event)\" aria-hidden=\"true\">\n        <svg [iconName]=\"model.cssClasses.chevronButtonIconId\" [partCss]=\"model.cssClasses.chevronButtonSvg\" [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"] }, { type: PopupComponent, selector: "sv-ng-popup, '[sv-ng-popup]'", inputs: ["popupModel"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }, { 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-dropdown, '[sv-ng-dropdown]'",
                    templateUrl: "./dropdown.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }], inputElementRef: [{
                type: ViewChild,
                args: ["inputElement"]
            }] } });

class TagboxFilterComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
}
TagboxFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxFilterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
TagboxFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TagboxFilterComponent, selector: "sv-tagbox-filter", inputs: { model: "model", question: "question" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div [class]=\"question.cssClasses.hint\">\n    <div *ngIf=\"model.showHintPrefix\" [class]=\"question.cssClasses.hintPrefix\">\n        <span>{{ model.hintStringPrefix }}</span>\n    </div>\n    <div [class]=\"question.cssClasses.hintSuffixWrapper\">\n        <div *ngIf=\"model.showHintString\" [class]=\"question.cssClasses.hintSuffix\">\n            <span style=\"visibility: hidden\">{{ model.inputStringRendered }}</span>\n            <span>{{ model.hintStringSuffix }}</span>\n        </div>\n    <input\n      type=\"text\"\n      autocomplete=\"off\"\n      [(ngModel)]=\"model.inputStringRendered\"\n      [attr.id]=\"question.getInputId()\"\n      [class]=\"question.cssClasses.filterStringInput\"\n      [attr.inputmode]=\"model.inputMode\"\n      [attr.role]=\"model.filterStringEnabled ? question.ariaRole : null\"\n      [attr.readonly]=\"model.filterReadOnly ? true : null\"\n      [attr.disabled]=\"question.isDisabledAttr ? true : null\"\n      [attr.size]=\"!model.inputStringRendered ? 1 : null\"\n      [attr.aria-label]=\"question.a11y_input_ariaLabel\"\n      [attr.aria-labelledby]=\"question.a11y_input_ariaLabelledBy\"\n      [attr.aria-describedby]=\"question.a11y_input_ariaDescribedBy\"\n      [attr.aria-controls]=\"model.listElementId\"\n      [attr.aria-expanded]=\"question.ariaExpanded\"\n      [attr.aria-activedescendant]=\"model.ariaActivedescendant\"\n      [attr.placeholder]=\"model.filterStringPlaceholder\"\n      (keydown)=\"model.inputKeyHandler($event)\"\n      (blur)=\"question.onBlur($event)\"\n      (focus)=\"question.onFocus($event)\"\n    />\n    </div>\n  </div>\n</ng-template>\n", styles: [":host{display:none}\n"], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxFilterComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-tagbox-filter",
                    templateUrl: "./tagbox-filter.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }], question: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-tagbox-filter", TagboxFilterComponent);

class TagboxItemComponent extends EmbeddedViewContentComponent {
    removeItem(event) {
        this.question.dropdownListModel.deselectItem(this.item.value);
        event.stopPropagation();
    }
    getModel() {
        return this.item;
    }
}
TagboxItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-tagbox-item, '[sv-ng-tagbox-item]'",
                    templateUrl: "./tagbox-item.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { item: [{
                type: Input
            }], question: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-tagbox-item", TagboxItemComponent);

class TagboxComponent {
    get dropdownModel() {
        var _a;
        return (_a = this.model) === null || _a === void 0 ? void 0 : _a.dropdownListModel;
    }
    getModel() {
        return this.model;
    }
    ngOnInit() {
        if (!this.model.dropdownListModel) {
            this.model.dropdownListModel = new DropdownMultiSelectListModel(this.model);
        }
    }
    click(event) {
        var _a;
        (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.onClick(event);
    }
    chevronPointerDown(event) {
        var _a;
        (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.chevronPointerDown(event);
    }
    clear(event) {
        var _a;
        (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.onClear(event);
    }
    keyhandler(event) {
        var _a;
        (_a = this.dropdownModel) === null || _a === void 0 ? void 0 : _a.keyHandler(event);
    }
    blur(event) {
        var _a;
        (_a = this.model) === null || _a === void 0 ? void 0 : _a.onBlur(event);
    }
    focus(event) {
        var _a;
        (_a = this.model) === null || _a === void 0 ? void 0 : _a.onFocus(event);
    }
}
TagboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
TagboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TagboxComponent, selector: "sv-ng-tagbox, '[sv-ng-tagbox]'", inputs: { model: "model" }, ngImport: i0, template: "<div [class]=\"model.cssClasses.selectWrapper\" (click)=\"click($event)\">\n    <div *ngIf=\"!model.isReadOnly\" [attr.tabindex]=\"dropdownModel.noTabIndex ? null : 0\" [class]=\"model.getControlClass()\"\n        [attr.disabled]=\"model.isDisabledAttr ? true : null\" (blur)=\"blur($event)\"\n        (keydown)=\"keyhandler($event)\" [attr.id]=\"model.inputId\" [attr.aria-required]=\"model.ariaRequired\"\n        [attr.aria-label]=\"model.ariaLabel\" [attr.aria-invalid]=\"model.ariaInvalid\"\n        [attr.aria-errormessage]=\"model.ariaErrormessage\" [attr.role]=\"model.ariaRole\"\n        [attr.aria-controls]=\"dropdownModel.listElementId\"\n        [attr.aria-expanded]=\"model.ariaExpanded\"\n        [attr.aria-activedescendant]=\"dropdownModel.ariaActivedescendant\">\n        <div [class]=\"model.cssClasses.controlValue\">\n            <ng-container *ngIf=\"!model.isEmpty()\">\n                <sv-ng-tagbox-item *ngFor=\"let item of model.selectedChoices\" [item]=\"item\" [question]=\"model\">\n                </sv-ng-tagbox-item>\n            </ng-container>\n            <ng-template [component]=\"{ name: 'sv-tagbox-filter', data: { model: dropdownModel, question: model } }\"></ng-template>\n        </div>\n        <div *ngIf=\"(model.allowClear && model.cssClasses.cleanButtonIconId)\" [class]=\"model.cssClasses.cleanButton\"\n            (click)=\"clear($event)\" [visible]=\"model.showClearButton\" aria-hidden=\"true\">\n            <!-- ko component: { name: 'sv-svg-icon', params: { css: model.cssClasses.cleanButtonSvg, iconName: model.cssClasses.cleanButtonIconId, size: 'auto' } } -->\n            <!-- /ko -->\n            <svg [iconName]=\"model.cssClasses.cleanButtonIconId\" [partCss]=\"model.cssClasses.cleanButtonSvg\" [title]=\"model.clearCaption\"\n                [size]=\"'auto'\" sv-ng-svg-icon></svg>\n        </div>\n    </div>\n    <sv-ng-popup *ngIf=\"!model.isReadOnly\" [popupModel]=\"model.popupModel\"></sv-ng-popup>\n    <div *ngIf=\"model.isReadOnly\" [class]=\"model.getControlClass()\" [attr.id]=\"model.inputId\"\n    [attr.tabindex]=\"model.isDisabledAttr ? null : 0\"\n    [attr.disabled]=\"model.isDisabledAttr ? true : null\"\n    [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n    [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n    [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\">\n        <sv-ng-string *ngIf=\"model.locReadOnlyText\" [model]=\"model.locReadOnlyText\"></sv-ng-string>\n    </div>\n    <div *ngIf=\"model.cssClasses.chevronButtonIconId\" [class]=\"model.cssClasses.chevronButton\" (pointerdown)=\"chevronPointerDown($event)\" aria-hidden=\"true\">\n        <svg [iconName]=\"model.cssClasses.chevronButtonIconId\" [partCss]=\"model.cssClasses.chevronButtonSvg\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n    </div>\n</div>", components: [{ type: TagboxItemComponent, selector: "sv-ng-tagbox-item, '[sv-ng-tagbox-item]'", inputs: ["item", "question"] }, { type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: PopupComponent, selector: "sv-ng-popup, '[sv-ng-popup]'", inputs: ["popupModel"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], 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"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-tagbox, '[sv-ng-tagbox]'",
                    templateUrl: "./tagbox.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });

class DropdownOptionItemComponent extends BaseAngular {
    onModelChanged() {
        if (!this.item.locText)
            return;
        this.item.locText.onChanged = () => {
            this.detectChanges();
        };
    }
    getModel() {
        return this.item;
    }
}
DropdownOptionItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownOptionItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
DropdownOptionItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DropdownOptionItemComponent, selector: "sv-ng-dropdown-option-item, '[sv-ng-dropdown-option-item]'", inputs: { item: "item" }, usesInheritance: true, ngImport: i0, template: '<ng-template #template><option [value]="item.value" [disabled]="!item.isEnabled">{{ item.text }}</option><ng-template>', isInline: true, directives: [{ type: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownOptionItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-dropdown-option-item, '[sv-ng-dropdown-option-item]'",
                    template: '<ng-template #template><option [value]="item.value" [disabled]="!item.isEnabled">{{ item.text }}</option><ng-template>',
                }]
        }], propDecorators: { item: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-dropdown-option-item", DropdownOptionItemComponent);

class SurveyCommentOtherComponent {
    constructor() {
    }
    get otherValue() {
        const val = this.question.otherValue;
        return !!val ? val : "";
    }
    get textAreaModel() {
        return this.question.otherTextAreaModel;
    }
}
SurveyCommentOtherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyCommentOtherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
SurveyCommentOtherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: { question: "question" }, ngImport: i0, template: "<ng-container *ngIf=\"!question.isReadOnlyRenderDiv()\">\n  <ng-template [component]=\"{ name: 'sv-text-area', data: { model: textAreaModel } }\"></ng-template>\n</ng-container>\n<div *ngIf=\"question.isReadOnlyRenderDiv()\">{{ otherValue }}</div>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyCommentOtherComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-comment-other, '[sv-ng-comment-other]'",
                    templateUrl: "./comment-other.component.html",
                }]
        }], ctorParameters: function () { return []; }, propDecorators: { question: [{
                type: Input
            }] } });

class DropdownSelectComponent {
    get editableValue() {
        return this.model.renderedValue || "";
    }
    set editableValue(newValue) {
        if (newValue === "") {
            this.model.renderedValue = undefined;
        }
        else {
            this.model.renderedValue = newValue;
        }
    }
    click(event) {
        this.model.onClick(event);
    }
    keyup(event) {
        this.model.onKeyUp(event);
    }
}
DropdownSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
DropdownSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DropdownSelectComponent, selector: "sv-ng-dropdown-select-question", inputs: { model: "model" }, ngImport: i0, template: "<div [class]=\"model.renderCssRoot\">\n  <div [class]=\"model.cssClasses.selectWrapper\">\n    <select *ngIf=\"!model.isReadOnly\" [attr.id]=\"model.inputId\" [(ngModel)]=\"editableValue\"\n      [disabled]=\"model.isInputReadOnly\" (click)=\"click($event)\" (keyup)=\"keyup($event)\"\n      [class]=\"model.getControlClass()\" [attr.autocomplete]=\"model.autocomplete\" [required]=\"model.isRequired\"\n      [attr.aria-required]=\"model.ariaRequired\" [attr.aria-label]=\"model.ariaLabel\"\n      [attr.aria-invalid]=\"model.ariaInvalid\" [attr.aria-errormessage]=\"model.ariaErrormessage\">\n      <option *ngIf=\"model.allowClear\" value=\"\">{{ model.placeholder }}</option>\n      <ng-template *ngFor=\"let item of model.visibleChoices\"\n        [component]=\"{ name: 'sv-dropdown-option-item', data: { item } }\"></ng-template>\n    </select>\n    <div *ngIf=\"model.isReadOnly\" disabled [class]=\"model.getControlClass()\" [attr.id]=\"model.inputId\">{{\n      model.readOnlyText }}</div>\n    <div *ngIf=\"model.cssClasses.chevronButtonIconId\" [class]=\"model.cssClasses.chevronButton\" aria-hidden=\"true\">\n      <svg [iconName]=\"model.cssClasses.chevronButtonIconId\" [partCss]=\"model.cssClasses.chevronButtonSvg\"\n        [size]=\"'auto'\" sv-ng-svg-icon></svg>\n    </div>\n  </div>\n  <div *ngIf=\"model.isOtherSelected\" [class]=\"model.getCommentAreaCss(true)\"\n    [style.display]=\"model.isFlowLayout ? 'inline': '' \" [question]=\"model\" sv-ng-comment-other></div>\n</div>", components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: ["question"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: i2$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownSelectComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-dropdown-select-question",
                    templateUrl: "./dropdown-select.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("dropdown-select-question", DropdownSelectComponent);
RendererFactory.Instance.registerRenderer("dropdown", "select", "dropdown-select-question");

//temp: disables angular sanitizer, which breaks a links
class SafeUrlPipe {
    constructor(domSanitizer) {
        this.domSanitizer = domSanitizer;
    }
    transform(url) {
        return this.domSanitizer.bypassSecurityTrustUrl(url);
    }
}
SafeUrlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SafeUrlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
SafeUrlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SafeUrlPipe, name: "safeUrl" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SafeUrlPipe, decorators: [{
            type: Pipe,
            args: [{ name: "safeUrl" }]
        }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } });
class SafeResourceUrlPipe {
    constructor(domSanitizer) {
        this.domSanitizer = domSanitizer;
    }
    transform(url) {
        return this.domSanitizer.bypassSecurityTrustResourceUrl(url);
    }
}
SafeResourceUrlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SafeResourceUrlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
SafeResourceUrlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SafeResourceUrlPipe, name: "safeResourceUrl" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SafeResourceUrlPipe, decorators: [{
            type: Pipe,
            args: [{ name: "safeResourceUrl" }]
        }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } });

class LogoImageComponent extends EmbeddedViewContentComponent {
    get survey() {
        return this.data;
    }
}
LogoImageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LogoImageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
LogoImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LogoImageComponent, selector: "sv-logo-image", inputs: { data: "data" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div [class]=\"survey.logoClassNames\">\n    <img\n    [class]=\"survey.css.logoImage\"\n    [attr.src]=\"survey.locLogo.renderedHtml | safeUrl\"\n    [style.width]=\"survey.renderedStyleLogoWidth\"\n    [style.height]=\"survey.renderedStyleLogoHeight\"\n    [attr.width]=\"survey.renderedLogoWidth\"\n    [attr.height]=\"survey.renderedLogoHeight\"\n    [attr.alt]=\"survey.locTitle.renderedHtml\"\n    [style.objectFit]=\"survey.logoFit\"\n    />\n  </div>\n</ng-template>", styles: [":host{display:none}\n"], pipes: { "safeUrl": SafeUrlPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LogoImageComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-logo-image",
                    templateUrl: "./logo-image.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { data: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-logo-image", LogoImageComponent);

class CharacterCounterComponent extends BaseAngular {
    getModel() {
        return this.counter;
    }
}
CharacterCounterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CharacterCounterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
CharacterCounterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CharacterCounterComponent, selector: "sv-ng-character-counter", inputs: { counter: "counter", remainingCharacterCounter: "remainingCharacterCounter" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div [class]=\"remainingCharacterCounter\">{{ counter.remainingCharacterCounter }}</div>\n</ng-template>", styles: [":host { display: none; }"] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CharacterCounterComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-character-counter",
                    templateUrl: "./character-counter.component.html",
                    styles: [":host { display: none; }"],
                }]
        }], propDecorators: { counter: [{
                type: Input
            }], remainingCharacterCounter: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("character-counter", CharacterCounterComponent);

class TextQuestionComponent extends QuestionAngular {
    get value() {
        var _a;
        return (_a = this.model.inputValue) !== null && _a !== void 0 ? _a : "";
    }
    blur(event) {
        this.model.onBlur(event);
        this.updateInputDomElement();
    }
    updateInputDomElement() {
        var _a;
        if (!!((_a = this.inputElementRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            const control = this.inputElementRef.nativeElement;
            if (!Helpers.isTwoValueEquals(this.value, control.value, false, true, false)) {
                control.value = this.value;
            }
        }
    }
}
TextQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TextQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
TextQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TextQuestionComponent, selector: "sv-ng-text-question", viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "  <ng-container [ngTemplateOutlet]=\"input\" *ngIf=\"!model.dataListId && !model.isReadOnlyRenderDiv()\"></ng-container>\n  <div *ngIf=\"model.dataListId && !model.isReadOnlyRenderDiv()\">\n    <ng-container [ngTemplateOutlet]=\"input\"></ng-container>\n    <datalist [id]=\"model.dataListId\">\n      <option *ngFor=\"let dataListItem of model.dataList\" [value]=\"dataListItem\"></option>\n    </datalist>\n  </div>\n  <div *ngIf=\"model.isReadOnlyRenderDiv()\" #contentElement>{{ value }}</div>\n  <ng-template #input>\n    <input #inputElement [style]=\"model.inputStyle\" [class]=\"model.getControlClass()\" [attr.list]=\"model.dataListId\"\n    (change)=\"model.onChange($event)\" [value]=\"value\" [disabled]=\"model.isDisabledAttr\" [type]=\"model.inputType\" [id]=\"model.inputId\" [attr.placeholder]=\"model.renderedPlaceholder\"\n    (keyup)=\"model.onKeyUp($event)\" (keydown)=\"model.onKeyDown($event)\" (blur)=\"blur($event)\" (focus)=\"model.onFocus($event)\" (compositionupdate)=\"model.onCompositionUpdate($event)\" \n    [attr.size] = \"model.renderedInputSize\" [attr.maxlength]= \"model.getMaxLength()\" [attr.min]=\"model.renderedMin\" [readonly]=\"model.isReadOnlyAttr\"\n    [attr.max]=\"model.renderedMax\" [attr.step]=\"model.renderedStep\" [attr.max]=\"model.renderedMax\" [attr.aria-required]=\"model.a11y_input_ariaRequired\"\n    [attr.aria-label]=\"model.a11y_input_ariaLabel\" [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\" [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\"[attr.aria-invalid]=\"model.a11y_input_ariaInvalid\" [attr.aria-errormessage]=\"model.a11y_input_ariaErrormessage\" [attr.autocomplete]=\"model.autocomplete\" #contentElement/>\n    <sv-ng-character-counter *ngIf=\"model.getMaxLength()\" \n    [counter]=\"model.characterCounter\"\n    [remainingCharacterCounter]=\"model.cssClasses.remainingCharacterCounter\">\n  </sv-ng-character-counter>\n  </ng-template>", styles: [""], components: [{ type: CharacterCounterComponent, selector: "sv-ng-character-counter", inputs: ["counter", "remainingCharacterCounter"] }], 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: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TextQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-text-question",
                    templateUrl: "./text.component.html",
                    styleUrls: ["./text.component.scss"]
                }]
        }], propDecorators: { inputElementRef: [{
                type: ViewChild,
                args: ["inputElement"]
            }] } });
AngularComponentFactory.Instance.registerComponent("text-question", TextQuestionComponent);

class HtmlQuestionComponent extends QuestionAngular {
    onModelChanged() {
        super.onModelChanged();
        this.model.locHtml.onChanged = () => {
            this.detectChanges();
        };
    }
    ngOnDestroy() {
        this.model.locHtml.onChanged = () => { };
        super.ngOnDestroy();
    }
}
HtmlQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HtmlQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
HtmlQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: HtmlQuestionComponent, selector: "sv-ng-html-question", usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.renderCssRoot\" [innerHTML]=\"model.locHtml.renderedHtml | safeHtml\" #contentElement></div>", pipes: { "safeHtml": SafeHtmlPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HtmlQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-html-question",
                    templateUrl: "./html.component.html",
                    styleUrls: []
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("html-question", HtmlQuestionComponent);

class SelectBaseComponent extends QuestionAngular {
    constructor() {
        super(...arguments);
        this.inputType = "checkbox";
        this.showLegend = true;
    }
    getDefaultComponentName() {
        return "sv-ng-selectbase-item";
    }
    trackItemBy(_, item) {
        return item.value;
    }
    trackColumnBy(index) {
        return index;
    }
    getItemValueComponentName(item) {
        return this.model.getItemValueWrapperComponentName(item) || this.getDefaultComponentName();
    }
    getItemValueComponentData(item) {
        const itemComponentProperty = this.model.getPropertyByName("itemComponent");
        const isDefaultItemComponent = itemComponentProperty.isDefaultValue(this.model.itemComponent);
        const itemComponent = isDefaultItemComponent ? this.getDefaultComponentName() : this.model.itemComponent;
        return {
            componentName: itemComponent,
            componentData: {
                question: this.model,
                model: item,
                inputType: this.inputType,
                data: this.model.getItemValueWrapperComponentData(item)
            }
        };
    }
}
SelectBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SelectBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
SelectBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SelectBaseComponent, selector: "['sv-ng-selectbase']", inputs: { model: "model" }, usesInheritance: true, ngImport: i0, template: "<fieldset [class]=\"model.getSelectBaseRootCss()\" #contentElement \n  [attr.role]=\"model.a11y_input_ariaRole\"\n  [attr.aria-required]=\"model.a11y_input_ariaRequired\"\n  [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n  [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n  [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\"\n  [attr.aria-invalid]=\"model.a11y_input_ariaInvalid\"\n  [attr.aria-errormessage]=\"model.a11y_input_ariaErrormessage\"\n>\n  <legend *ngIf=\"showLegend\" class=\"sv-hidden\">{{model.locTitle.renderedHtml}}</legend>\n  <ng-container *ngIf=\"model.hasHeadItems\">\n    <ng-container *ngFor=\"let item of model.headItems; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </ng-container>\n  <ng-container *ngIf=\"!model.hasColumns && !model.blockedRow\">\n    <ng-container *ngFor=\"let item of model.bodyItems; trackBy: trackItemBy\" >\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </ng-container>\n  <div [class]=\"model.cssClasses.rootRow\" *ngIf=\"!model.hasColumns && model.blockedRow\">\n    <ng-container *ngFor=\"let item of model.dataChoices; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </div>\n  <ng-container *ngIf=\"model.hasColumns\">\n    <div [class]=\"model.cssClasses.rootMultiColumn\">\n      <div [class]=\"model.getColumnClass()\" *ngFor=\"let column of model.columns; trackBy: trackColumnBy\" role=\"presentation\">\n        <ng-container *ngFor=\"let item of column; trackBy: trackItemBy\">\n          <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n        </ng-container>\n      </div>\n    </div>\n  </ng-container>\n  <ng-container *ngIf=\"model.hasFootItems\">\n    <ng-container *ngFor=\"let item of model.footItems; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </ng-container>\n  <div *ngIf=\"model.isOtherSelected\" [class]=\"model.getCommentAreaCss(true)\" [question]=\"model\" sv-ng-comment-other></div>\n  <div *ngIf=\"model.showClearButtonInContent\">\n    <input\n      type=\"button\"\n      (click)=\"model.clearValue(true)\"\n      [value]=\"model.clearButtonCaption\"\n      [class]=\"model.cssClasses.clearButton\"\n    />\n  </div>\n</fieldset>", components: [{ type: SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: ["question"] }], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SelectBaseComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "['sv-ng-selectbase']",
                    templateUrl: "./selectbase.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("selectbase", SelectBaseComponent);

class RadiogroupComponent extends SelectBaseComponent {
    ngOnInit() {
        this.inputType = "radio";
        this.showLegend = false;
        super.ngOnInit();
    }
}
RadiogroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RadiogroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
RadiogroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RadiogroupComponent, selector: "sv-ng-radiogroup-question", usesInheritance: true, ngImport: i0, template: "<fieldset [class]=\"model.getSelectBaseRootCss()\" #contentElement \n  [attr.role]=\"model.a11y_input_ariaRole\"\n  [attr.aria-required]=\"model.a11y_input_ariaRequired\"\n  [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n  [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n  [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\"\n  [attr.aria-invalid]=\"model.a11y_input_ariaInvalid\"\n  [attr.aria-errormessage]=\"model.a11y_input_ariaErrormessage\"\n>\n  <legend *ngIf=\"showLegend\" class=\"sv-hidden\">{{model.locTitle.renderedHtml}}</legend>\n  <ng-container *ngIf=\"model.hasHeadItems\">\n    <ng-container *ngFor=\"let item of model.headItems; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </ng-container>\n  <ng-container *ngIf=\"!model.hasColumns && !model.blockedRow\">\n    <ng-container *ngFor=\"let item of model.bodyItems; trackBy: trackItemBy\" >\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </ng-container>\n  <div [class]=\"model.cssClasses.rootRow\" *ngIf=\"!model.hasColumns && model.blockedRow\">\n    <ng-container *ngFor=\"let item of model.dataChoices; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </div>\n  <ng-container *ngIf=\"model.hasColumns\">\n    <div [class]=\"model.cssClasses.rootMultiColumn\">\n      <div [class]=\"model.getColumnClass()\" *ngFor=\"let column of model.columns; trackBy: trackColumnBy\" role=\"presentation\">\n        <ng-container *ngFor=\"let item of column; trackBy: trackItemBy\">\n          <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n        </ng-container>\n      </div>\n    </div>\n  </ng-container>\n  <ng-container *ngIf=\"model.hasFootItems\">\n    <ng-container *ngFor=\"let item of model.footItems; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </ng-container>\n  <div *ngIf=\"model.isOtherSelected\" [class]=\"model.getCommentAreaCss(true)\" [question]=\"model\" sv-ng-comment-other></div>\n  <div *ngIf=\"model.showClearButtonInContent\">\n    <input\n      type=\"button\"\n      (click)=\"model.clearValue(true)\"\n      [value]=\"model.clearButtonCaption\"\n      [class]=\"model.cssClasses.clearButton\"\n    />\n  </div>\n</fieldset>", components: [{ type: SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: ["question"] }], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RadiogroupComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-radiogroup-question",
                    templateUrl: "./selectbase.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("radiogroup-question", RadiogroupComponent);

class RadiogroupItemComponent {
    constructor() {
    }
}
RadiogroupItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RadiogroupItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
RadiogroupItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RadiogroupItemComponent, selector: "sv-ng-radiogroup-item, '[sv-ng-radiogroup-item]'", inputs: { question: "question", model: "model" }, ngImport: i0, template: "<input type=\"radio\" [name]=\"question.questionName\" [attr.name]=\"question.questionName\" [id]=\"question.getItemId(model)\" [attr.aria-errormessage]=\"question.ariaErrormessage\" [class]=\"question.cssClasses.itemControl\"\n  [disabled]=\"!question.getItemEnabled(model)\" [readonly]=\"question.isReadOnlyAttr\" [(ngModel)]=\"question.renderedValue\" [attr.value]=\"model.value\" [value]=\"model.value\"\n/>\n<ng-content></ng-content>", styles: [""], directives: [{ type: i2$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RadiogroupItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-radiogroup-item, '[sv-ng-radiogroup-item]'",
                    templateUrl: "./radiogroup-item.component.html",
                    styleUrls: ["./radiogroup-item.component.scss"]
                }]
        }], ctorParameters: function () { return []; }, propDecorators: { question: [{
                type: Input
            }], model: [{
                type: Input
            }] } });

class CheckboxComponent extends SelectBaseComponent {
}
CheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
CheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CheckboxComponent, selector: "sv-ng-checkbox-question", usesInheritance: true, ngImport: i0, template: "<fieldset [class]=\"model.getSelectBaseRootCss()\" #contentElement \n  [attr.role]=\"model.a11y_input_ariaRole\"\n  [attr.aria-required]=\"model.a11y_input_ariaRequired\"\n  [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n  [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n  [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\"\n  [attr.aria-invalid]=\"model.a11y_input_ariaInvalid\"\n  [attr.aria-errormessage]=\"model.a11y_input_ariaErrormessage\"\n>\n  <legend *ngIf=\"showLegend\" class=\"sv-hidden\">{{model.locTitle.renderedHtml}}</legend>\n  <ng-container *ngIf=\"model.hasHeadItems\">\n    <ng-container *ngFor=\"let item of model.headItems; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </ng-container>\n  <ng-container *ngIf=\"!model.hasColumns && !model.blockedRow\">\n    <ng-container *ngFor=\"let item of model.bodyItems; trackBy: trackItemBy\" >\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </ng-container>\n  <div [class]=\"model.cssClasses.rootRow\" *ngIf=\"!model.hasColumns && model.blockedRow\">\n    <ng-container *ngFor=\"let item of model.dataChoices; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </div>\n  <ng-container *ngIf=\"model.hasColumns\">\n    <div [class]=\"model.cssClasses.rootMultiColumn\">\n      <div [class]=\"model.getColumnClass()\" *ngFor=\"let column of model.columns; trackBy: trackColumnBy\" role=\"presentation\">\n        <ng-container *ngFor=\"let item of column; trackBy: trackItemBy\">\n          <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n        </ng-container>\n      </div>\n    </div>\n  </ng-container>\n  <ng-container *ngIf=\"model.hasFootItems\">\n    <ng-container *ngFor=\"let item of model.footItems; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item) }\"></ng-template>\n    </ng-container>\n  </ng-container>\n  <div *ngIf=\"model.isOtherSelected\" [class]=\"model.getCommentAreaCss(true)\" [question]=\"model\" sv-ng-comment-other></div>\n  <div *ngIf=\"model.showClearButtonInContent\">\n    <input\n      type=\"button\"\n      (click)=\"model.clearValue(true)\"\n      [value]=\"model.clearButtonCaption\"\n      [class]=\"model.cssClasses.clearButton\"\n    />\n  </div>\n</fieldset>", components: [{ type: SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: ["question"] }], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckboxComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-checkbox-question",
                    templateUrl: "./selectbase.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("checkbox-question", CheckboxComponent);

class CheckboxItemComponent {
    constructor() {
    }
    onChange(event) {
        this.question["clickItemHandler"](this.model, event.target.checked);
    }
    onSelectAllChange(event) {
        this.question.toggleSelectAll();
    }
}
CheckboxItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckboxItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
CheckboxItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CheckboxItemComponent, selector: "sv-ng-checkbox-item, '[sv-ng-checkbox-item]'", inputs: { question: "question", model: "model" }, ngImport: i0, template: "<input type=\"checkbox\" [name]=\"question.name+model.id\" [id]=\"question.getItemId(model)\" [class]=\"question.cssClasses.itemControl\" [required]=\"question.hasRequiredError()\"\n  [disabled]=\"!question.getItemEnabled(model)\" [readonly]=\"question.isReadOnlyAttr\" [checked]=\"question.isItemSelected(model)\" [value]=\"model.value\" (change)=\"onChange($event)\"/>\n<ng-content></ng-content>", styles: [""] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckboxItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-checkbox-item, '[sv-ng-checkbox-item]'",
                    templateUrl: "./checkbox-item.component.html",
                    styleUrls: ["./checkbox-item.component.scss"]
                }]
        }], ctorParameters: function () { return []; }, propDecorators: { question: [{
                type: Input
            }], model: [{
                type: Input
            }] } });

class DropdownQuestionComponent extends QuestionAngular {
}
DropdownQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
DropdownQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DropdownQuestionComponent, selector: "sv-ng-dropdown-question", usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.renderCssRoot\" #contentElement>\n  <sv-ng-dropdown [model]=\"model\"></sv-ng-dropdown>\n  <div *ngIf=\"model.isOtherSelected\" [class]=\"model.getCommentAreaCss(true)\" [question]=\"model\" sv-ng-comment-other></div>\n</div>", components: [{ type: DropdownComponent, selector: "sv-ng-dropdown, '[sv-ng-dropdown]'", inputs: ["model"] }, { type: SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: ["question"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DropdownQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-dropdown-question",
                    templateUrl: "./dropdown.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("dropdown-question", DropdownQuestionComponent);

class TagboxQuestionComponent extends QuestionAngular {
}
TagboxQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
TagboxQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TagboxQuestionComponent, selector: "sv-ng-tagbox-question", usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.renderCssRoot\" #contentElement>\n  <sv-ng-tagbox [model]=\"model\"></sv-ng-tagbox>\n  <div *ngIf=\"model.isOtherSelected\" [class]=\"model.getCommentAreaCss(true)\" [question]=\"model\" sv-ng-comment-other></div>\n</div>", components: [{ type: TagboxComponent, selector: "sv-ng-tagbox, '[sv-ng-tagbox]'", inputs: ["model"] }, { type: SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: ["question"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TagboxQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-tagbox-question",
                    templateUrl: "./tagbox.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("tagbox-question", TagboxQuestionComponent);

class RatingQuestionComponent extends QuestionAngular {
    trackByFn(index) {
        return index;
    }
    onClick(event) {
        event.stopPropagation();
        this.model.setValueFromClick(event.target.value);
    }
}
RatingQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
RatingQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RatingQuestionComponent, selector: "sv-ng-rating-question", usesInheritance: true, ngImport: i0, template: "  <div [class]=\"model.ratingRootCss\" #contentElement>\n      <fieldset role=\"radiogroup\">\n          <legend role=\"presentation\" class=\"sv-hidden\"></legend>\n          <span *ngIf=\"model.hasMinLabel\" [class]=\"model.cssClasses.minText\" [model]=\"model.locMinRateDescription\" sv-ng-string>\n          </span>\n          <ng-template *ngFor=\"let item of model.renderedRateItems; index as index; trackBy: trackByFn\" [component]=\"{ name: model.itemComponent, data: {model: model, item: item, index: index }}\"></ng-template>\n          <span *ngIf=\"model.hasMaxLabel\" [class]=\"model.cssClasses.maxText\" [model]=\"model.locMaxRateDescription\" sv-ng-string></span>\n      </fieldset>\n  </div>\n", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-rating-question",
                    templateUrl: "./rating.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("rating-question", RatingQuestionComponent);

class BooleanQuestionComponent extends QuestionAngular {
    onChange(event) {
        this.model.booleanValue = event.target.value;
    }
}
BooleanQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BooleanQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
BooleanQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BooleanQuestionComponent, selector: "sv-ng-boolean-question", usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.cssClasses.root\" (keydown)=\"model.onKeyDownCore($event)\" #contentElement>\n    <label [class]=\"model.getItemCss()\">\n      <input\n        type=\"checkbox\"\n        [attr.name]=\"model.name\" [attr.id]=\"model.inputId\" \n        [attr.role]=\"model.a11y_input_ariaRole\"\n        [attr.aria-required]=\"model.a11y_input_ariaRequired\"\n        [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n        [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n        [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\"\n        [attr.aria-invalid]=\"model.a11y_input_ariaInvalid\"\n        [attr.aria-errormessage]=\"model.a11y_input_ariaErrormessage\"\n        [class]=\"model.cssClasses.control\" [disabled]=\"model.isDisabledAttr\" [readonly]=\"model.isReadOnlyAttr\"  [indeterminate]=\"model.isIndeterminate\" [value]=\"model.booleanValue\" [(ngModel)]=\"model.booleanValue\" />\n      <div [class]=\"model.cssClasses.sliderGhost\" (click)=\"model.onLabelClick($event, model.swapOrder)\">\n        <span [class]=\"model.getLabelCss(model.swapOrder)\" [model]=\"model.locLabelLeft\" sv-ng-string></span>\n      </div>\n      <div [class]=\"model.cssClasses.switch\" (click)=\"model.onSwitchClickModel($event)\">\n        <span [class]=\"model.cssClasses.slider\">\n            <span *ngIf=\"model.cssClasses.sliderText && model.isDeterminated\" [class]=\"model.cssClasses.sliderText\" [model]=\"model.getCheckedLabel()\" sv-ng-string></span>\n        </span>\n      </div>\n      <div [class]=\"model.cssClasses.sliderGhost\" (click)=\"model.onLabelClick($event, !model.swapOrder)\">\n        <span [class]=\"model.getLabelCss(!model.swapOrder)\" [model]=\"model.locLabelRight\"  sv-ng-string></span>\n      </div>\n    </label>\n</div>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BooleanQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-boolean-question",
                    templateUrl: "./boolean.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("boolean-question", BooleanQuestionComponent);

class ImagePickerItemComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
    onChange(event) {
        if (this.question.isReadOnlyAttr)
            return;
        if (this.question.multiSelect) {
            if (event.target.checked) {
                this.question.value = this.question.value.concat(event.target.value);
            }
            else {
                var currValue = this.question.value;
                currValue.splice(this.question.value.indexOf(event.target.value), 1);
                this.question.value = currValue;
            }
        }
        else {
            this.question.value = event.target.value;
        }
    }
    ngAfterViewInit() {
        this.model.locImageLink.onChanged = () => {
            this.detectChanges();
        };
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        this.model.locImageLink.onChanged = () => { };
    }
}
ImagePickerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImagePickerItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImagePickerItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-imagepicker-item",
                    templateUrl: "./imagepicker-item.component.html",
                    styles: [":host { display: none; }"]
                }]
        }], propDecorators: { question: [{
                type: Input
            }], model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-ng-imagepicker-item", ImagePickerItemComponent);

class ImagePickerQuestionComponent extends QuestionAngular {
    getItemValueComponentName(item) {
        return this.model.getItemValueWrapperComponentName(item) || "sv-ng-imagepicker-item";
    }
    getItemValueComponentData(item) {
        return {
            componentName: "sv-ng-imagepicker-item",
            componentData: {
                question: this.model,
                model: item,
                data: this.model.getItemValueWrapperComponentData(item)
            }
        };
    }
}
ImagePickerQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImagePickerQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImagePickerQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-imagepicker-question",
                    templateUrl: "./imagepicker.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("imagepicker-question", ImagePickerQuestionComponent);

class ButtonGroupItemComponent extends BaseAngular {
    ngOnChanges() {
        this.model = new ButtonGroupItemModel(this.question, this.item, this.index);
    }
    getModel() {
        return this.item;
    }
}
ButtonGroupItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ButtonGroupItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ButtonGroupItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ButtonGroupItemComponent, selector: "sv-button-group-item", inputs: { item: "item", question: "question", index: "index" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template #template>\n  <label [class]=\"model.css.label\" [attr.title]=\"model.caption.renderedHtml\">\n    <input type=\"radio\"\n      [attr.name]=\"model.name\" [attr.id]=\"model.id\" [attr.aria-required]=\"model.isRequired\" [attr.aria-label]=\"model.caption.renderedHtml\" [attr.aria-invalid]=\"model.hasErrors\" [attr.aria-errormessage]=\"model.describedBy\" [disabled]=\"model.readOnly\" [class]=\"model.css.control\" [(ngModel)]=\"question.renderedValue\" [attr.value]=\"model.value\" [value]=\"model.value\"/>\n    <div [class]=\"model.css.decorator\">\n      <svg *ngIf=\"model.iconName\" [iconName]=\"model.iconName\" [size]=\"model.iconSize\" [class]=\"model.css.icon\" sv-ng-svg-icon></svg>\n      <span [class]=\"model.css.caption\" *ngIf=\"model.showCaption\" [attr.title]=\"model.caption.renderedHtml\" sv-ng-string [model]=\"model.caption\">\n      </span>\n    </div>\n  </label>\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: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ButtonGroupItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-button-group-item",
                    templateUrl: "./button-group-item.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { item: [{
                type: Input
            }], question: [{
                type: Input
            }], index: [{
                type: Input
            }] } });

class ButtonGroupQuestionComponent extends QuestionAngular {
}
ButtonGroupQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ButtonGroupQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ButtonGroupQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ButtonGroupQuestionComponent, selector: "sv-ng-buttongroup-question", usesInheritance: true, ngImport: i0, template: "<div role=\"group\" [class]=\"model.cssClasses.root\">\n  <sv-button-group-item *ngFor=\"let item of model.visibleChoices; index as index\" [question]=\"model\" [item]=\"item\" [index]=\"index\" ></sv-button-group-item>\n</div>\n", components: [{ type: ButtonGroupItemComponent, selector: "sv-button-group-item", inputs: ["item", "question", "index"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ButtonGroupQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-buttongroup-question",
                    templateUrl: "./button-group.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("buttongroup-question", ButtonGroupQuestionComponent);

class ComponentsContainerComponent extends EmbeddedViewContentComponent {
    get components() {
        return this.survey.getContainerContent(this.container);
    }
    get isNeedRenderWrapper() {
        return this.needRenderWrapper === false ? false : true;
    }
}
ComponentsContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ComponentsContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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' + ' sv-components-container-' + container\">\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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ComponentsContainerComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-components-container, [sv-components-container], sv-ng-components-container",
                    templateUrl: "./components-container.component.html",
                    styleUrls: ["./hide-host.scss"]
                }]
        }], propDecorators: { survey: [{
                type: Input
            }], container: [{
                type: Input
            }], needRenderWrapper: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-components-container", ComponentsContainerComponent);

class Key2ClickDirective {
    constructor(el) {
        this.el = el;
        this.isSubscribed = false;
        this.options = Object.assign({}, Key2ClickDirective.defaultOptions);
        this.onkeyup = (evt) => {
            evt.preventDefault();
            evt.stopPropagation();
            doKey2ClickUp(evt, this.options);
            return false;
        };
        this.subscribeEventListeners();
    }
    onkeydown(evt) {
        doKey2ClickDown(evt, this.options);
    }
    blur(evt) {
        doKey2ClickBlur(evt);
    }
    get element() {
        return this.el.nativeElement;
    }
    subscribeEventListeners() {
        if (this.isSubscribed)
            return;
        this.element.tabIndex = 0;
        this.element.addEventListener("keyup", this.onkeyup.bind(this));
        this.element.addEventListener("keydown", this.onkeydown.bind(this));
        this.element.addEventListener("blur", this.blur);
        this.isSubscribed = true;
    }
    unsubscribeEventListeners() {
        if (!this.isSubscribed)
            return;
        this.element.tabIndex = -1;
        this.element.removeEventListener("keyup", this.onkeyup.bind(this));
        this.element.removeEventListener("keydown", this.onkeydown.bind(this));
        this.element.removeEventListener("blur", this.blur);
        this.isSubscribed = false;
    }
    ngOnChanges(changes) {
        const curValue = changes["key2click"].currentValue;
        if (curValue.disableTabStop) {
            this.unsubscribeEventListeners();
        }
        else {
            this.subscribeEventListeners();
        }
        this.options = Object.assign({}, Key2ClickDirective.defaultOptions, curValue);
    }
    ngOnDestroy() {
        this.unsubscribeEventListeners();
    }
}
Key2ClickDirective.defaultOptions = { processEsc: true, disableTabStop: false };
Key2ClickDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: Key2ClickDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
Key2ClickDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: Key2ClickDirective, selector: "[key2click]", inputs: { key2click: "key2click" }, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: Key2ClickDirective, decorators: [{
            type: Directive,
            args: [{
                    selector: "[key2click]"
                }]
        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { key2click: [{
                type: Input
            }] } });

class ActionBarItemComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
}
ActionBarItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ActionBarItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ActionBarItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ActionBarItemComponent, selector: "sv-action-bar-item", inputs: { model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <button type=\"button\" (click)=\"model.doAction($event)\" (mousedown)=\"model.doMouseDown($event)\" (focus)=\"model.doFocus($event)\" [key2click]=\"{ processEsc: false, disableTabStop: model.disableTabStop }\" [class]=\"model.getActionBarItemCss()\" [attr.title]=\"model.tooltip || model.title\" [attr.aria-checked]=\"model.ariaChecked\" [attr.aria-expanded]=\"model.ariaExpanded\" [attr.role]=\"model.ariaRole\" [disabled]=\"model.disabled\">\n    <svg *ngIf=\"model.iconName\" [iconName]=\"model.iconName\" [size]=\"model.iconSize\" [title]=\"model.tooltip || model.title\" [class]=\"model.cssClasses.itemIcon\" sv-ng-svg-icon></svg>\n    <span *ngIf=\"model.hasTitle\" [class]=\"model.getActionBarItemTitleCss()\">{{ model.title }}</span>\n  </button>\n<ng-template>", styles: [":host{display:none}\n"], components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }], directives: [{ type: Key2ClickDirective, selector: "[key2click]", inputs: ["key2click"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ActionBarItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-action-bar-item",
                    templateUrl: "./action-bar-item.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-action-bar-item", ActionBarItemComponent);

class ActionBarItemDropdownComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
    ngOnInit() {
        super.ngOnInit();
        this.viewModel = new ActionDropdownViewModel(this.model);
    }
    ngOnDestroy() {
        this.viewModel.dispose();
        super.ngOnDestroy();
    }
}
ActionBarItemDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ActionBarItemDropdownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ActionBarItemDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ActionBarItemDropdownComponent, selector: "sv-action-bar-item-dropdown", inputs: { model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n    <button type=\"button\" (click)=\"model.action(model, model.getIsTrusted($event))\" [key2click]=\"{ processEsc: false, disableTabStop: model.disableTabStop }\" [class]=\"model.getActionBarItemCss()\" [title]=\"model.tooltip || model.title\" [disabled]=\"model.disabled\" [attr.role]=\"model.ariaRole\">\n        <svg *ngIf=\"model.iconName\" [iconName]=\"model.iconName\" [size]=\"model.iconSize\" [title]=\"model.tooltip || model.title\" [class]=\"model.cssClasses.itemIcon\" sv-ng-svg-icon></svg>\n        <span *ngIf=\"model.hasTitle\" [class]=\"model.getActionBarItemTitleCss()\">{{ model.title }}</span>\n    </button>\n    <sv-ng-popup [popupModel]=\"model.popupModel\"></sv-ng-popup>\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: PopupComponent, selector: "sv-ng-popup, '[sv-ng-popup]'", inputs: ["popupModel"] }], directives: [{ type: Key2ClickDirective, selector: "[key2click]", inputs: ["key2click"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ActionBarItemDropdownComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-action-bar-item-dropdown",
                    templateUrl: "./action-bar-item-dropdown.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-action-bar-item-dropdown", ActionBarItemDropdownComponent);

class SelectBaseItemComponent extends BaseAngular {
    constructor() {
        super(...arguments);
        this.showLabel = true;
    }
    getModel() {
        return this.model;
    }
    onModelChanged() {
        var _a;
        super.onModelChanged();
        if (!this.question.isDesignMode) {
            if (this.previousModel) {
                this.previousModel.setRootElement(undefined);
            }
            if (this.model && ((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
                this.model.setRootElement(this.container.nativeElement);
            }
        }
    }
    ngAfterViewInit() {
        var _a;
        if (this.model && ((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement) && !this.question.isDesignMode) {
            this.model.setRootElement(this.container.nativeElement);
        }
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        if (this.model && !this.question.isDesignMode) {
            this.model.setRootElement(undefined);
        }
    }
}
SelectBaseItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SelectBaseItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
SelectBaseItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SelectBaseItemComponent, selector: "['sv-ng-selectbase-item'], sv-ng-selebase-item", inputs: { question: "question", model: "model", inputType: "inputType", showLabel: "showLabel" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div role=\"presentation\" [class]=\"question.getItemClass(model)\" #container>\n    <ng-container [ngSwitch]=\"inputType\">\n      <label *ngSwitchCase=\"'checkbox'\" [class]=\"question.getLabelClass(model)\" [model]=\"model\" [question]=\"question\"\n        sv-ng-checkbox-item>\n        <ng-container *ngTemplateOutlet=\"itemDecorator\"></ng-container>\n      </label>\n      <label *ngSwitchCase=\"'radio'\" (mousedown)=\"question.onMouseDown()\" [class]=\"question.getLabelClass(model)\"\n        [model]=\"model\" [question]=\"question\" sv-ng-radiogroup-item>\n        <ng-container *ngTemplateOutlet=\"itemDecorator\"></ng-container>\n      </label>\n    </ng-container>\n    <ng-template #itemDecorator>\n      <span *ngIf=\"question.cssClasses.materialDecorator\" [class]=\"question.cssClasses.materialDecorator\">\n        <svg *ngIf=\"question.itemSvgIcon\" [class]=\"question.cssClasses.itemDecorator\">\n          <use [attr.xlink:href]=\"question.itemSvgIcon\"></use>\n        </svg>\n      </span>\n      <span [class]=\"question.getControlLabelClass(model)\" *ngIf=\"!model.hideCaption\">\n        <sv-ng-string [model]=\"model.locText\"></sv-ng-string>\n      </span>\n    </ng-template>\n  </div>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: CheckboxItemComponent, selector: "sv-ng-checkbox-item, '[sv-ng-checkbox-item]'", inputs: ["question", "model"] }, { type: RadiogroupItemComponent, selector: "sv-ng-radiogroup-item, '[sv-ng-radiogroup-item]'", inputs: ["question", "model"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SelectBaseItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "['sv-ng-selectbase-item'], sv-ng-selebase-item",
                    templateUrl: "./selectbase-item.html",
                    styles: [":host { display: none; }"]
                }]
        }], propDecorators: { question: [{
                type: Input
            }], model: [{
                type: Input
            }], inputType: [{
                type: Input
            }], showLabel: [{
                type: Input
            }], container: [{
                type: ViewChild,
                args: ["container", { read: ElementRef }]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-ng-selectbase-item", SelectBaseItemComponent);

class SkeletonComponent extends EmbeddedViewContentComponent {
}
SkeletonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SkeletonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
SkeletonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SkeletonComponent, selector: "sv-skeleton", inputs: { element: "element" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div class=\"sv-skeleton-element\" [id]=\"element.id\" [style.height]=\"element.skeletonHeight\"></div>\n</ng-template>", styles: [":host{display:none}\n"] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SkeletonComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-skeleton",
                    templateUrl: "./skeleton.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { element: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-skeleton", SkeletonComponent);

class TimerPanelComponent extends BaseAngular {
    constructor() {
        super(...arguments);
        this.circleLengthValue = 440;
    }
    getStateElement() {
        return this.model;
    }
    getModel() {
        return this.model;
    }
    get circleLength() {
        return this.circleLengthValue;
    }
    get progress() {
        return -this.model.progress * this.circleLength;
    }
}
TimerPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TimerPanelComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
TimerPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TimerPanelComponent, selector: "sv-timerpanel", inputs: { model: "model" }, usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"model.isRunning && model.showTimerAsClock\" [class]=\"model.rootCss\">\n    <svg *ngIf=\"model.showProgress\" [class]=\"model.getProgressCss()\" [style.stroke-dasharray]=\"circleLength\" [style.stroke-dashoffset]=\"progress\" [size]=\"'auto'\" [iconName]=\"'icon-timercircle'\" sv-ng-svg-icon></svg>\n    <div [class]=\"model.textContainerCss\">\n        <span [class]=\"model.majorTextCss\">{{ model.clockMajorText }}</span>\n        <span *ngIf=\"model.clockMinorText\" [class]=\"model.minorTextCss\">{{ model.clockMinorText }}</span>\n    </div>\n</div>\n<div *ngIf=\"model.isRunning && !model.showTimerAsClock\" [class]='model.survey.getCss().timerRoot'>{{model.text}}</div>", components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TimerPanelComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-timerpanel",
                    templateUrl: "./timer-panel.component.html",
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-timerpanel", TimerPanelComponent);

class ListItemComponent extends BaseAngular {
    get elementId() {
        var _a;
        return (_a = this.model) === null || _a === void 0 ? void 0 : _a.elementId;
    }
    get ariaSelected() {
        return this.listModel.isItemSelected(this.model) || "";
    }
    get class() {
        return this.listModel.getItemClass(this.model);
    }
    get itemStyle() {
        return this.listModel.getItemStyle(this.model);
    }
    click(event) {
        this.listModel.onItemClick(this.model);
        event.stopPropagation();
    }
    pointerdown(event) {
        this.listModel.onPointerDown(event, this.model);
    }
    get itemComponent() {
        return this.model.component || this.listModel.itemComponent;
    }
    getModel() {
        return this.model;
    }
    ngAfterViewInit() {
        this.listModel.onLastItemRended(this.model);
    }
}
ListItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ListItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ListItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ListItemComponent, selector: "sv-ng-list-item, '[sv-ng-list-item]'", inputs: { element: "element", model: "model", listModel: "listModel" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <li role=\"option\" [key2click]=\"{ processEsc: false, disableTabStop: model.disableTabStop }\" [visible]=\"listModel.isItemVisible(model)\" [class]=\"class\" [attr.id]=\"elementId\" [attr.aria-selected]=\"ariaSelected ? 'true' : 'false'\" (click)=\"click($event)\" (pointerdown)=\"pointerdown($event)\">\n    <ng-container *ngIf=\"model.needSeparator\">\n    <div [class]=\"listModel.cssClasses.itemSeparator\"></div>\n    </ng-container>\n    <div [class]=\"listModel.cssClasses.itemBody\" [style]=\"itemStyle\" [attr.title]=\"model.getTooltip()\"\n    (mouseover)=\"listModel.onItemHover(model)\"\n    (mouseleave)=\"listModel.onItemLeave(model)\">\n    <ng-template [component]=\"{ name: itemComponent, data: { model: model, listModel: listModel } }\"></ng-template>\n    </div>\n  </li>\n</ng-template>", styles: [":host{display:none}\n"], directives: [{ type: Key2ClickDirective, selector: "[key2click]", inputs: ["key2click"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ListItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-list-item, '[sv-ng-list-item]'",
                    templateUrl: "./list-item.component.html",
                    styleUrls: ["../../hide-host.scss"],
                }]
        }], propDecorators: { element: [{
                type: Input
            }], model: [{
                type: Input
            }], listModel: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-list-item", ListItemComponent);

class ListComponent extends BaseAngular {
    constructor() {
        super(...arguments);
        this.trackItemBy = (_, item) => {
            return item.id;
        };
    }
    getModel() {
        return this.model;
    }
    onGoToItems(event) {
        this.model.goToItems(event);
    }
    onMouseDown(event) {
        event.preventDefault();
    }
    onKeyDown(event) {
        this.model.onKeyDown(event);
    }
    onMouseMove(event) {
        this.model.onMouseMove(event);
    }
    getPropertiesToUpdateSync() {
        return ["renderElements"];
    }
    ngAfterViewInit() {
        var _a;
        if (!!((_a = this.listContainerElement) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            this.model.initListContainerHtmlElement(this.listContainerElement.nativeElement);
        }
    }
    ngOnDestroy() {
        this.model.initListContainerHtmlElement(undefined);
        super.ngOnDestroy();
    }
}
ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ListComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-list, '[sv-ng-list]'",
                    templateUrl: "./list.component.html",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }], listContainerElement: [{
                type: ViewChild,
                args: ["listContainerElement"]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-list", ListComponent);

class ListItemContentComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
}
ListItemContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ListItemContentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ListItemContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ListItemContentComponent, selector: "sv-ng-list-item-content, '[sv-ng-list-item-content]'", inputs: { element: "element", model: "model", listModel: "listModel" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n<svg *ngIf=\"model.iconName\" [class]=\"listModel.cssClasses.itemIcon\" [iconName]=\"model.iconName\" [size]=\"model.iconSize\"\n  sv-ng-svg-icon></svg>\n<sv-ng-string [model]=\"model.locTitle\"></sv-ng-string>\n<svg *ngIf=\"model.markerIconName\" [class]=\"model.cssClasses.itemMarkerIcon\" [iconName]=\"model.markerIconName\" [size]=\"'auto'\"\n  sv-ng-svg-icon></svg>\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: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ListItemContentComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-list-item-content, '[sv-ng-list-item-content]'",
                    templateUrl: "./list-item-content.component.html",
                    styleUrls: ["../../hide-host.scss"],
                }]
        }], propDecorators: { element: [{
                type: Input
            }], model: [{
                type: Input
            }], listModel: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-list-item-content", ListItemContentComponent);

class ListItemGroupComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
}
ListItemGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ListItemGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ListItemGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ListItemGroupComponent, selector: "sv-ng-list-item-group, '[sv-ng-list-item-group]'", inputs: { element: "element", model: "model", listModel: "listModel" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <sv-ng-list-item-content [model]=\"model\" [listModel]=\"listModel\"></sv-ng-list-item-content>\n  <sv-ng-popup [popupModel]=\"model.popupModel\"></sv-ng-popup>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: ListItemContentComponent, selector: "sv-ng-list-item-content, '[sv-ng-list-item-content]'", inputs: ["element", "model", "listModel"] }, { type: PopupComponent, selector: "sv-ng-popup, '[sv-ng-popup]'", inputs: ["popupModel"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ListItemGroupComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-list-item-group, '[sv-ng-list-item-group]'",
                    templateUrl: "./list-item-group.component.html",
                    styleUrls: ["../../hide-host.scss"],
                }]
        }], propDecorators: { element: [{
                type: Input
            }], model: [{
                type: Input
            }], listModel: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-list-item-group", ListItemGroupComponent);

class RatingItemComponent extends BaseAngular {
    onClick(event) {
        this.model.setValueFromClick(event.target.value);
        event.stopPropagation();
    }
    getModel() {
        return this.item;
    }
}
RatingItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
RatingItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RatingItemComponent, selector: "sv-ng-rating-item", inputs: { element: "element", model: "model", item: "item", index: "index" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <label [class]=\"model.getItemClassByText(item.itemValue, item.text)\" (mousedown)=\"model.onMouseDown()\">\n    <input type=\"radio\"\n      class=\"sv-visuallyhidden\"\n      [attr.name]=\"model.questionName\" [attr.id]=\"model.getInputId(index)\" [value]=\"item.value\" [attr.aria-required]=\"model.ariaRequired\" [attr.aria-label]=\"model.ariaLabel\" [attr.aria-invalid]=\"model.ariaInvalid\" [attr.aria-errormessage]=\"model.ariaErrormessage\"\n      [disabled]=\"model.isDisabledAttr\" [readonly]=\"model.isReadOnlyAttr\" [checked]=\"model.value === item.value\" (click)=\"onClick($event)\"\n      />\n      <span [class]=\"model.cssClasses.itemText\" [attr.data-text]=\"item.text\" [model]=\"item.locText\" sv-ng-string></span>\n  </label>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-rating-item",
                    templateUrl: "./rating-item.component.html",
                    styleUrls: ["../../hide-host.scss"],
                }]
        }], propDecorators: { element: [{
                type: Input
            }], model: [{
                type: Input
            }], item: [{
                type: Input
            }], index: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-rating-item", RatingItemComponent);

class RatingItemStarComponent extends BaseAngular {
    onClick(event) {
        this.model.setValueFromClick(event.target.value);
        event.stopPropagation();
    }
    getModel() {
        return this.item;
    }
}
RatingItemStarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingItemStarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
RatingItemStarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RatingItemStarComponent, selector: "sv-ng-rating-item-star", inputs: { element: "element", model: "model", item: "item", index: "index" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <label [class]=\"model.getItemClass(item.itemValue, item.highlight)\" (mouseover)=\"model.onItemMouseIn(item)\" (mouseout)=\"model.onItemMouseOut(item)\" (mousedown)=\"model.onMouseDown()\">\n    <input type=\"radio\"\n      class=\"sv-visuallyhidden\"\n      [attr.name]=\"model.questionName\" [attr.id]=\"model.getInputId(index)\" [value]=\"item.value\" [attr.aria-required]=\"model.ariaRequired\" [attr.aria-label]=\"model.ariaLabel\" [attr.aria-invalid]=\"model.ariaInvalid\" [attr.aria-errormessage]=\"model.ariaErrormessage\"\n      [disabled]=\"model.isDisabledAttr\" [readonly]=\"model.isReadOnlyAttr\" [checked]=\"model.value === item.value\" (click)=\"onClick($event)\"\n      />\n      <svg [iconName]=\"model.itemStarIcon\" [size]=\"'auto'\" [title]=\"item.text\" [class]=\"'sv-star'\" sv-ng-svg-icon></svg>\n      <svg [iconName]=\"model.itemStarIconAlt\" [size]=\"'auto'\" [title]=\"item.text\" [class]=\"'sv-star-2'\" sv-ng-svg-icon></svg>\n  </label>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingItemStarComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-rating-item-star",
                    templateUrl: "./rating-item-star.component.html",
                    styleUrls: ["../../hide-host.scss"],
                }]
        }], propDecorators: { element: [{
                type: Input
            }], model: [{
                type: Input
            }], item: [{
                type: Input
            }], index: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-rating-item-star", RatingItemStarComponent);

class RatingItemSmileyComponent extends BaseAngular {
    onClick(event) {
        this.model.setValueFromClick(event.target.value);
        event.stopPropagation();
    }
    getModel() {
        return this.item;
    }
}
RatingItemSmileyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingItemSmileyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
RatingItemSmileyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RatingItemSmileyComponent, selector: "sv-ng-rating-item-smiley", inputs: { element: "element", model: "model", item: "item", index: "index" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <label [style]=\"model.getItemStyle(item.itemValue, item.highlight)\" [class]=\"model.getItemClass(item.itemValue, item.highlight)\" (mouseover)=\"model.onItemMouseIn(item)\" (mouseout)=\"model.onItemMouseOut(item)\" (mousedown)=\"model.onMouseDown()\">\n    <input type=\"radio\"\n      class=\"sv-visuallyhidden\"\n      [attr.name]=\"model.questionName\" [attr.id]=\"model.getInputId(index)\" [value]=\"item.value\" [attr.aria-required]=\"model.ariaRequired\" [attr.aria-label]=\"model.ariaLabel\" [attr.aria-invalid]=\"model.ariaInvalid\" [attr.aria-errormessage]=\"model.ariaErrormessage\"\n      [disabled]=\"model.isDisabledAttr\" [readonly]=\"model.isReadOnlyAttr\" [checked]=\"model.value === item.value\" (click)=\"onClick($event)\"\n      />\n      <svg [iconName]=\"model.getItemSmileyIconName(item.itemValue)\" [size]=\"'auto'\" [title]=\"item.text\" sv-ng-svg-icon></svg>\n  </label>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingItemSmileyComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-rating-item-smiley",
                    templateUrl: "./rating-item-smiley.component.html",
                    styleUrls: ["../../hide-host.scss"],
                }]
        }], propDecorators: { element: [{
                type: Input
            }], model: [{
                type: Input
            }], item: [{
                type: Input
            }], index: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-rating-item-smiley", RatingItemSmileyComponent);

class RatingDropdownItemComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
}
RatingDropdownItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingDropdownItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
RatingDropdownItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RatingDropdownItemComponent, selector: "sv-ng-rating-dropdown-item, '[sv-ng-rating-dropdown-item]'", inputs: { element: "element", model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div class=\"sd-rating-dropdown-item\">\n    <span class=\"sd-rating-dropdown-item_text\">{{model.title}}</span>\n    <ng-container *ngIf=\"!!model.description\">\n    <div class=\"sd-rating-dropdown-item_description\">\n      <sv-ng-string [model]=\"model.description\"></sv-ng-string>\n    </div>\n    </ng-container>\n  </div>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingDropdownItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-rating-dropdown-item, '[sv-ng-rating-dropdown-item]'",
                    templateUrl: "./rating-dropdown-item.component.html",
                    styleUrls: ["../../../hide-host.scss"],
                }]
        }], propDecorators: { element: [{
                type: Input
            }], model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-rating-dropdown-item", RatingDropdownItemComponent);

class RatingDropdownComponent {
}
RatingDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
RatingDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RatingDropdownComponent, selector: "sv-ng-rating-dropdown-question", inputs: { model: "model" }, ngImport: i0, template: "<div [class]=\"model.cssClasses.rootDropdown\">\n    <sv-ng-dropdown [model]=\"model\"></sv-ng-dropdown>\n</div>", components: [{ type: DropdownComponent, selector: "sv-ng-dropdown, '[sv-ng-dropdown]'", inputs: ["model"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RatingDropdownComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-rating-dropdown-question",
                    templateUrl: "./rating-dropdown.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("rating-dropdown-question", RatingDropdownComponent);
RendererFactory.Instance.registerRenderer("rating", "dropdown", "rating-dropdown-question");

class BooleanCheckboxComponent {
}
BooleanCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BooleanCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
BooleanCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BooleanCheckboxComponent, selector: "sv-ng-boolean-checkbox-question", inputs: { model: "model" }, ngImport: i0, template: "<div [class]=\"model.cssClasses.rootCheckbox\">\n  <div [class]=\"model.getCheckboxItemCss()\">\n    <label [class]=\"model.cssClasses.checkboxLabel\">\n      <input\n        type=\"checkbox\"\n        [value]=\"model.booleanValue\" [class]=\"model.cssClasses.controlCheckbox\" \n        [attr.name]=\"model.name\" [id]=\"model.inputId\"\n        [attr.aria-required]=\"model.a11y_input_ariaRequired\"\n        [attr.aria-label]=\"model.a11y_input_ariaLabel\"\n        [attr.aria-labelledby]=\"model.a11y_input_ariaLabelledBy\"\n        [attr.aria-describedby]=\"model.a11y_input_ariaDescribedBy\"\n        [attr.aria-invalid]=\"model.a11y_input_ariaInvalid\"\n        [attr.aria-errormessage]=\"model.a11y_input_ariaErrormessage\"\n        [(ngModel)]=\"model.booleanValue\" [value]=\"model.booleanValue\"\n        [disabled]=\"model.isDisabledAttr\" [readonly]=\"model.isReadOnlyAttr\" [indeterminate]=\"model.isIndeterminate\"\n      />\n      <span [class]=\"model.cssClasses.checkboxMaterialDecorator\">\n        <svg *ngIf=\"!!model.svgIcon\" [class]=\"model.cssClasses.checkboxItemDecorator\">\n          <use [attr.xlink:href]=\"model.svgIcon\"></use>\n        </svg>\n        <span class=\"check\"></span>\n      </span>\n      <span *ngIf=\"model.isLabelRendered\" [class]=\"model.cssClasses.checkboxControlLabel\" [id]=\"model.labelRenderedAriaID\">\n        <sv-ng-element-title-actions [element]=\"model\"></sv-ng-element-title-actions>\n      </span>\n    </label>\n    <div *ngIf=\"model.canRenderLabelDescription\" [class]=\"model.cssDescription\" [attr.id]=\"model.ariaDescriptionId\" [model]=\"model.locDescription\" sv-ng-string></div>\n  </div>\n</div>", components: [{ type: ElementTitleActionsComponent, selector: "sv-ng-element-title-actions", inputs: ["element"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BooleanCheckboxComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-boolean-checkbox-question",
                    templateUrl: "./boolean-checkbox.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("boolean-checkbox-question", BooleanCheckboxComponent);
RendererFactory.Instance.registerRenderer("boolean", "checkbox", "boolean-checkbox-question");

class BooleanRadioItemComponent {
    constructor() {
    }
}
BooleanRadioItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BooleanRadioItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
BooleanRadioItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BooleanRadioItemComponent, selector: "sv-ng-boolean-radio-item", inputs: { question: "question", value: "value", locText: "locText" }, ngImport: i0, template: "<div role=\"presentation\" [class]=\"question.getRadioItemClass(question.cssClasses, value)\">\n  <label [class]=\"question.cssClasses.radioLabel\">\n    <input\n      type=\"radio\"\n      [attr.name]=\"question.name\" [attr.aria-errormessage]=\"question.ariaErrormessage\" [value]=\"value\" [(ngModel)]=\"question.booleanValue\"\n      [disabled]=\"question.isDisabledAttr\" [readonly]=\"question.isReadOnlyAttr\" [class]=\"question.cssClasses.itemRadioControl || ''\"\n    />\n    <span *ngIf=\"question.cssClasses.materialRadioDecorator\" [class]=\"question.cssClasses.materialRadioDecorator\">\n      <svg\n        *ngIf=\"question.itemSvgIcon\"\n        [class]=\"question.cssClasses.itemRadioDecorator\"\n      >\n        <use [attr.xlink:href]=\"question.itemSvgIcon\"></use>\n      </svg>\n    </span>\n    <span [class]=\"question.cssClasses.radioControlLabel\" [model]=\"locText\" sv-ng-string>\n    </span>\n  </label>\n</div>\n", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BooleanRadioItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-boolean-radio-item",
                    templateUrl: "boolean-radio-item.component.html",
                }]
        }], ctorParameters: function () { return []; }, propDecorators: { question: [{
                type: Input
            }], value: [{
                type: Input
            }], locText: [{
                type: Input
            }] } });

class BooleanRadioComponent {
}
BooleanRadioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BooleanRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
BooleanRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BooleanRadioComponent, selector: "sv-ng-boolean-radio-question", inputs: { model: "model" }, ngImport: i0, template: "<div [class]=\"model.cssClasses.rootRadio\">\n  <fieldset role=\"presentation\" [class]=\"model.cssClasses.radioFieldset\">\n    <sv-ng-boolean-radio-item *ngIf=\"model.swapOrder\" [value]=\"true\" [locText]=\"model.locLabelTrue\" [question]=\"model\" ></sv-ng-boolean-radio-item>\n    <sv-ng-boolean-radio-item  [value]=\"false\" [locText]=\"model.locLabelFalse\" [question]=\"model\" ></sv-ng-boolean-radio-item>\n    <sv-ng-boolean-radio-item *ngIf=\"!model.swapOrder\" [value]=\"true\" [locText]=\"model.locLabelTrue\" [question]=\"model\" ></sv-ng-boolean-radio-item>\n  </fieldset>\n</div>\n", components: [{ type: BooleanRadioItemComponent, selector: "sv-ng-boolean-radio-item", inputs: ["question", "value", "locText"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BooleanRadioComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-boolean-radio-question",
                    templateUrl: "./boolean-radio.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("boolean-radio-question", BooleanRadioComponent);
RendererFactory.Instance.registerRenderer("boolean", "radio", "boolean-radio-question");

class ProgressDefaultComponent extends EmbeddedViewContentComponent {
    getProgressTextInBarCss(css) {
        return SurveyProgressModel.getProgressTextInBarCss(css);
    }
    getProgressTextUnderBarCss(css) {
        return SurveyProgressModel.getProgressTextUnderBarCss(css);
    }
}
ProgressDefaultComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressDefaultComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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\" aria-label=\"progress\">\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>" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressDefaultComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-progress-default",
                    templateUrl: "./progress.component.html"
                }]
        }], propDecorators: { container: [{
                type: Input
            }], model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-progress-progress", ProgressDefaultComponent);
AngularComponentFactory.Instance.registerComponent("sv-progress-pages", ProgressDefaultComponent);
AngularComponentFactory.Instance.registerComponent("sv-progress-questions", ProgressDefaultComponent);
AngularComponentFactory.Instance.registerComponent("sv-progress-correctquestions", ProgressDefaultComponent);
AngularComponentFactory.Instance.registerComponent("sv-progress-requiredquestions", ProgressDefaultComponent);

class ProgressButtonsComponent {
    constructor(changeDetectorRef) {
        this.changeDetectorRef = changeDetectorRef;
        this.hasScroller = false;
        this.canShowHeader = false;
        this.canShowFooter = false;
        this.canShowItemTitles = true;
    }
    onResize(canShowItemTitles) {
        this.canShowItemTitles = canShowItemTitles;
        this.canShowHeader = !this.canShowItemTitles;
        this.changeDetectorRef.detectChanges();
    }
    onUpdateScroller(hasScroller) {
        this.hasScroller = hasScroller;
        this.changeDetectorRef.detectChanges();
    }
    onUpdateSettings() {
        this.canShowItemTitles = this.model.showItemTitles;
        this.canShowFooter = !this.model.showItemTitles;
        this.changeDetectorRef.detectChanges();
    }
    ngOnInit() {
    }
    ngOnChanges(changes) {
    }
    clickScrollButton(isLeftScroll) {
        if (this.progressButtonsListContainer) {
            this.progressButtonsListContainer.nativeElement.scrollLeft += (isLeftScroll ? -1 : 1) * 70;
        }
    }
    ngAfterViewInit() {
        var _a;
        if (!!((_a = this.progressButtonsListContainer) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            const element = this.progressButtonsListContainer.nativeElement;
            this.respManager = new ProgressButtonsResponsivityManager(this.model, element, this);
        }
    }
    ngOnDestroy() {
        var _a;
        (_a = this.respManager) === null || _a === void 0 ? void 0 : _a.dispose();
    }
}
ProgressButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
ProgressButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressButtonsComponent, selector: "sv-ng-progress-buttons", inputs: { model: "model", survey: "survey", container: "container" }, viewQueries: [{ propertyName: "progressButtonsListContainer", first: true, predicate: ["progressButtonsListContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"model.getRootCss(container)\" [style.maxWidth]=\"model.progressWidth\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"progress\">\n  <div *ngIf=\"canShowHeader\" [class]=\"survey.css.progressButtonsHeader\">\n    <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.headerText\">{{ model.headerText }}</div>\n  </div>\n  <div [class]=\"survey.css.progressButtonsContainer\">\n    <div\n      [class]=\"model.getScrollButtonCss(hasScroller, true)\"\n      (click)=\"clickScrollButton(true)\"\n      role=\"button\"\n    ></div>\n    <div\n      [class]=\"survey.css.progressButtonsListContainer\" #progressButtonsListContainer>\n      <ul [class]=\"survey.css.progressButtonsList\">\n        <li\n          *ngFor=\"let page of survey.visiblePages; index as index\"\n          [class]=\"model.getListElementCss(index)\"\n          (click)=\"model.isListElementClickable(index) ? model.clickListElement(page) : null\"\n          [attr.data-page-number]=\"model.getItemNumber(page)\">\n          <div [class]=\"survey.css.progressButtonsConnector\"></div>\n          <div *ngIf=\"canShowItemTitles\"\n            [class]=\"survey.css.progressButtonsPageTitle\"\n            [title]=\"page.renderedNavigationTitle\"\n          >\n            <sv-ng-string [model]=\"page.locNavigationTitle\"></sv-ng-string>\n          </div>\n          <div *ngIf=\"canShowItemTitles\"\n            [class]=\"survey.css.progressButtonsPageDescription\"\n            [title]=\"page.locNavigationDescription.renderedHtml\"\n          >\n            {{ page.locNavigationDescription.renderedHtml }}\n          </div>\n          <div [class]=\"survey.css.progressButtonsButton\"><div [class]=\"survey.css.progressButtonsButtonBackground\"></div><div [class]=\"survey.css.progressButtonsButtonContent\"></div><span>{{model.getItemNumber(page)}}</span></div>\n        </li>\n      </ul>\n    </div>\n    <div\n      [class]=\"model.getScrollButtonCss(hasScroller, false)\"\n      (click)=\"clickScrollButton(false)\"\n      role=\"button\"\n    ></div>\n  </div>\n  <div *ngIf=\"canShowFooter\" [class]=\"survey.css.progressButtonsFooter\">\n    <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.footerText\">{{ model.footerText }}</div>\n  </div>\n</div>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-progress-buttons",
                    templateUrl: "./progress.component.html"
                }]
        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{
                type: Input
            }], survey: [{
                type: Input
            }], container: [{
                type: Input
            }], progressButtonsListContainer: [{
                type: ViewChild,
                args: ["progressButtonsListContainer"]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-progress-buttons", ProgressButtonsComponent);

class ProgressTocComponent extends EmbeddedViewContentComponent {
    ngOnInit() {
        super.ngOnInit();
    }
    ngAfterViewInit() {
        this.model.updateStickyTOCSize(this.survey.rootElement);
    }
    ngOnChanges(changes) {
    }
}
ProgressTocComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressTocComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ProgressTocComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressTocComponent, selector: "sv-navigation-toc, sv-ng-navigation-toc", inputs: { survey: "survey", model: "model" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template #template>\n  <div [class]=\"model.containerCss\">\n    <sv-ng-list *ngIf=\"!model.isMobile\" [model]=\"model.listModel\"></sv-ng-list>\n    <div *ngIf=\"model.isMobile\" (click)=\"model.togglePopup()\" data-bind=\"key2click\">\n        <svg [iconName]=\"model.icon\" [size]=\"24\" sv-ng-svg-icon></svg>\n        <sv-ng-popup [popupModel]=\"model.popupModel\"></sv-ng-popup>\n    </div>\n  </div>  \n</ng-template>", styles: [":host { display: none; }"], components: [{ type: ListComponent, selector: "sv-ng-list, '[sv-ng-list]'", inputs: ["model"] }, { type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: PopupComponent, selector: "sv-ng-popup, '[sv-ng-popup]'", inputs: ["popupModel"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressTocComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-navigation-toc, sv-ng-navigation-toc",
                    templateUrl: "./progress.component.html",
                    styles: [":host { display: none; }"]
                }]
        }], propDecorators: { survey: [{
                type: Input
            }], model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-navigation-toc", ProgressTocComponent);

class PanelComponent extends BaseAngular {
    constructor() {
        super(...arguments);
        this.trackRowBy = (_, row) => {
            return row.id;
        };
    }
    getModel() {
        return this.model;
    }
    ngAfterViewInit() {
        var _a;
        if (!!((_a = this.panelContainerRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            this.model.afterRender(this.panelContainerRef.nativeElement);
        }
    }
    get canRender() {
        return this.model && this.model.survey && this.model.getIsContentVisible();
    }
}
PanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
PanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PanelComponent, selector: "sv-ng-panel, '[sv-ng-panel]'", inputs: { model: "model" }, viewQueries: [{ propertyName: "panelContainerRef", first: true, predicate: ["panelContainer"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div *ngIf=\"canRender\" [attr.id]=\"model.id\" [class]=\"model.getContainerCss()\" (focusin)=\"model.focusIn()\" #panelContainer>\n    <div *ngIf=\"model.showErrorsAbovePanel && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n    <div *ngIf=\"model.hasDescription || model.hasTitle\" [element]=\"model\" sv-ng-element-header></div>\n    <div *ngIf=\"!model.showErrorsAbovePanel && model.hasVisibleErrors\" [element]=\"model\" sv-ng-errors></div>\n    <div *ngIf=\"model.renderedIsExpanded\" [style.paddingLeft]=\"model.innerPaddingLeft\" [class]=\"model.cssClasses.panel.content\" [attr.id]=\"model.contentId\">\n      <ng-container *ngFor=\"let row of model.visibleRows; trackBy: trackRowBy\">\n        <ng-template [component]=\"{ name: $any(model.survey).getRowWrapperComponentName(row), data: { componentData: $any(model.survey).getRowWrapperComponentData(row) } }\">\n          <sv-ng-row [row]=\"row\"></sv-ng-row>\n        </ng-template>\n      </ng-container>\n      <sv-ng-action-bar [model]=\"model.getFooterToolbar()\"></sv-ng-action-bar>\n    </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: RowComponent, selector: "sv-ng-row", inputs: ["row"] }, { type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-panel, '[sv-ng-panel]'",
                    templateUrl: "./panel.component.html",
                }]
        }], propDecorators: { model: [{
                type: Input
            }], panelContainerRef: [{
                type: ViewChild,
                args: ["panelContainer", { static: false, read: ElementRef }]
            }] } });
AngularComponentFactory.Instance.registerComponent("panel", PanelComponent);

class SurveyNavigationButton {
    getModel() {
        return this.model;
    }
    buttonMouseDown() {
        return this.model.data && this.model.data.mouseDown();
    }
}
SurveyNavigationButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyNavigationButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
SurveyNavigationButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SurveyNavigationButton, selector: "sv-ng-nav-btn", inputs: { model: "model" }, ngImport: i0, template: "<input *ngIf=\"model.visible\" type=\"button\" [value]=\"model.title\" [class]=\"model.innerCss\" (mousedown)=\"buttonMouseDown()\" (click)=\"model.action()\" [disabled]=\"model.disabled\" [attr.title]=\"model.getTooltip()\"/>", styles: [":host { display: contents; }"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyNavigationButton, decorators: [{
            type: Component,
            args: [{
                    templateUrl: "./survey-nav-btn.component.html",
                    selector: "sv-ng-nav-btn",
                    styles: [":host { display: contents; }"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-nav-btn", SurveyNavigationButton);

class FileItemComponent extends EmbeddedViewContentComponent {
}
FileItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FileItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
FileItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FileItemComponent, selector: "sv-ng-file-item", inputs: { item: "item", question: "question" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n    <span [class]=\"question.cssClasses.previewItem\" (click)=\"question.doDownloadFileFromContainer($event)\">\n        <div *ngIf=\"item.name && question.cssClasses.fileSign\" [class]=\"question.cssClasses.fileSign\">\n            <a (click)=\"question.doDownloadFile($event, item)\" [attr.href]=\"item.content | safeUrl\"\n                [attr.title]=\"item.name\" [attr.download]=\"item.name\" [style.width]=\"question.imageWidth\">{{\n                item.name\n                }}</a>\n        </div>\n        <div [class]=\"question.getImageWrapperCss(item)\">\n            <img *ngIf=\"question.canPreviewImage(item)\" [attr.src]=\"item.content | safeUrl\"\n                [style.height]=\"question.imageHeight\" [style.width]=\"question.imageWidth\" alt=\"File preview\" />\n            <svg *ngIf=\"question.defaultImage(item)\" [iconName]=\"question.cssClasses.defaultImageIconId\"\n                [partCss]=\"question.cssClasses.defaultImage\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n            <div *ngIf=\"item.name && !question.isReadOnly\" [class]=\"question.getRemoveButtonCss()\"\n                (click)=\"question.doRemoveFile(item, $event)\">\n                <span [class]=\"question.cssClasses.removeFile\">{{ question.removeFileCaption }}</span>\n                <svg *ngIf=\"question.cssClasses.removeFileSvgIconId\" [title]=\"question.removeFileCaption\"\n                    [partCss]=\"question.cssClasses.removeFileSvg\" [iconName]=\"question.cssClasses.removeFileSvgIconId\"\n                    [size]=\"'auto'\" sv-ng-svg-icon></svg>\n            </div>\n        </div>\n        <div *ngIf=\"item.name && question.cssClasses.fileSignBottom\" [class]=\"question.cssClasses.fileSignBottom\">\n            <a (click)=\"question.doDownloadFile($event, item)\" [attr.href]=\"item.content | safeUrl\"\n                [attr.title]=\"item.name\" [attr.download]=\"item.name\" [style.width]=\"question.imageWidth\">{{\n                item.name\n                }}</a>\n        </div>\n    </span>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "safeUrl": SafeUrlPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FileItemComponent, decorators: [{
            type: Component,
            args: [{
                    templateUrl: "./file-item.component.html",
                    selector: "sv-ng-file-item",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { item: [{
                type: Input
            }], question: [{
                type: Input
            }] } });

class FilePageComponent extends BaseAngular {
    getModel() {
        return this.page;
    }
}
FilePageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FilePageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
FilePageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FilePageComponent, selector: "sv-ng-file-page", inputs: { page: "page", question: "question" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n    <div [class]=\"page.css\" [attr.id]=\"page.id\">\n        <ng-container *ngFor=\"let item of page.items\">\n            <sv-ng-file-item [item]=\"item\" [question]=\"question\"></sv-ng-file-item>\n        </ng-container>\n    </div>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: FileItemComponent, selector: "sv-ng-file-item", inputs: ["item", "question"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FilePageComponent, decorators: [{
            type: Component,
            args: [{
                    templateUrl: "./file-page.component.html",
                    selector: "sv-ng-file-page",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }], propDecorators: { page: [{
                type: Input
            }], question: [{
                type: Input
            }] } });

class FilePreviewComponent extends EmbeddedViewContentComponent {
    constructor() {
        super(...arguments);
        this.trackFilesFn = (index) => {
            return this.question.inputId + "_" + index;
        };
    }
    trackPagesFn(_, page) {
        return page.id;
    }
}
FilePreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FilePreviewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
FilePreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FilePreviewComponent, selector: "sv-ng-file-preview", inputs: { question: "question" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n    <ng-container *ngIf=\"question.showPreviewContainer\">\n        <div [class]=\"question.cssClasses.fileList || undefined\">\n            <ng-container *ngIf=\"question.supportFileNavigator\">\n                <sv-ng-file-page *ngFor=\"let page of question.renderedPages; trackBy: trackPagesFn\" [page]=\"page\" [question]=\"question\"></sv-ng-file-page>\n            </ng-container>\n            <ng-container *ngIf=\"!question.supportFileNavigator\">\n                <sv-ng-file-item *ngFor=\"let item of question.previewValue\" [item]=\"item\" [question]=\"question\"></sv-ng-file-item>\n            </ng-container>\n        </div>\n    </ng-container>\n</ng-template>", components: [{ type: FilePageComponent, selector: "sv-ng-file-page", inputs: ["page", "question"] }, { type: FileItemComponent, selector: "sv-ng-file-item", inputs: ["item", "question"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FilePreviewComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-file-preview",
                    templateUrl: "./file-preview.component.html"
                }]
        }], propDecorators: { question: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-file-preview", FilePreviewComponent);

class MatrixQuestionComponent extends QuestionAngular {
    ngOnInit() {
        this.model.visibleRowsChangedCallback = () => {
            this.detectChanges();
        };
        super.ngOnInit();
    }
    onCellChanged(row, column) {
        row.value = column.value;
        this.detectChanges();
    }
    trackRowByFn(i, row) {
        return "column-" + row.name + "-" + i;
    }
    trackColumnByFn(i, column) {
        return "column-" + column.value + "-" + i;
    }
}
MatrixQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixQuestionComponent, selector: "sv-ng-matrix-question", usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div [class]=\"model.cssClasses.tableWrapper\" #contentElement>\n    <fieldset>\n      <legend class=\"sv-hidden\">{{model.locTitle.renderedHtml}}</legend>\n      <table [class]=\"model.getTableCss()\">\n        <thead *ngIf=\"model.showHeader\">\n          <tr>\n            <td *ngIf=\"model.hasRows\"></td>\n            <th\n              *ngFor=\"let column of model.visibleColumns\" [style]=\"{ minWidth: model.columnMinWidth, width: model.columnMinWidth }\" [class]=\"model.cssClasses.headerCell\">\n              <ng-template [component]=\"{ name: model.getColumnHeaderWrapperComponentName(column), data: { componentData: model.getColumnHeaderWrapperComponentData(column) } }\">\n                <sv-ng-string [model]=\"column.locText\"></sv-ng-string>\n              </ng-template>\n            </th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr *ngFor=\"let row of model.visibleRows; trackBy: trackRowByFn \" [class]=\"row.rowClasses || undefined\">\n           <td [class]=\"row.rowTextClasses\" [style]=\"{ minWidth: model.rowTitleWidth, width: model.rowTitleWidth }\" *ngIf=\"model.hasRows\">\n              <ng-template [component]=\"{ name: model.getRowHeaderWrapperComponentName($any(row)), data: { componentData: model.getRowHeaderWrapperComponentData($any(row)) } }\">\n                <sv-ng-string [model]=\"row.locText\"></sv-ng-string>\n              </ng-template>\n            </td>\n            <ng-container *ngIf=\"model.hasCellText\">\n              <td *ngFor=\"let column of model.visibleColumns\"\n                [class]=\"model.getItemClass(row, column)\"\n                (click)=\"onCellChanged(row, column)\" [model]=\"model.getCellDisplayLocText(row.name, column)\" sv-ng-string>\n              </td>\n            </ng-container>\n            <ng-container *ngIf=\"!model.hasCellText\">\n              <td\n              *ngFor=\"let column of model.visibleColumns; index as columnIndex; trackBy: trackColumnByFn\"\n              [attr.data-responsive-title]=\"column.locText.renderedHtml\"\n              [class]=\"model.cssClasses.cell\">\n                <ng-template [component]=\"{ name: model.cellComponent, data: { cellChangedOwner: this, question: model, row: row, column: column, columnIndex: columnIndex } }\"></ng-template>\n              </td>\n            </ng-container>\n          </tr>\n        </tbody>\n      </table>\n    </fieldset>\n  </div>\n</ng-template>", styles: [":host{display:none}\n"], components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrix-question",
                    templateUrl: "./matrix.component.html",
                    styleUrls: ["../hide-host.scss"]
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("matrix-question", MatrixQuestionComponent);

class ChooseFileBtn extends EmbeddedViewContentComponent {
    get question() {
        return (this.model && this.model.data.question) || this.data.question;
    }
}
ChooseFileBtn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ChooseFileBtn, deps: null, target: i0.ɵɵFactoryTarget.Component });
ChooseFileBtn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ChooseFileBtn, selector: "sv-ng-choose-file-btn", inputs: { data: "data", model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n    <label tabindex=\"0\" [class]=\"question.getChooseFileCss()\"\n        [attr.for]=\"question.inputId\" [attr.aria-label]=\"question.chooseButtonText\" [key2click]\n        (click)=\"question.chooseFile($event)\">\n        <svg *ngIf=\"question.cssClasses.chooseFileIconId\" [title]=\"question.chooseButtonText\"\n            [iconName]=\"question.cssClasses.chooseFileIconId\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n        <span>{{ question.chooseButtonText }}</span>\n</label>\n</ng-template>", components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }], directives: [{ type: Key2ClickDirective, selector: "[key2click]", inputs: ["key2click"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ChooseFileBtn, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-choose-file-btn",
                    templateUrl: "./choose-file.component.html"
                }]
        }], propDecorators: { data: [{
                type: Input
            }], model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-file-choose-btn", ChooseFileBtn);

class LoadingIndicatorComponent extends EmbeddedViewContentComponent {
}
LoadingIndicatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LoadingIndicatorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LoadingIndicatorComponent, decorators: [{
            type: Component,
            args: [{
                    templateUrl: "./loading-indicator.component.html",
                    selector: "sv-ng-loading-indicator",
                    styleUrls: ["../../hide-host.scss"]
                }]
        }] });

class FileQuestionComponent extends QuestionAngular {
}
FileQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FileQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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.isReadOnlyAttr && !model.isDisabledAttr && model.hasFileUI\" tabindex=\"-1\" type=\"file\"\n    [attr.id]=\"model.inputId\" [attr.aria-required]=\"model.ariaRequired\"\n    [attr.aria-label]=\"model.ariaLabel\" [attr.aria-invalid]=\"model.ariaInvalid\"\n    [attr.aria-errormessage]=\"model.ariaErrormessage\" [attr.multiple]=\"model.multipleRendered\"\n    [attr.title]=\"model.inputTitle\" [attr.accept]=\"model.acceptedTypes\" [attr.capture]=\"model.renderCapture\" />\n  <input *ngIf=\"model.isReadOnlyAttr\" type=\"file\" readonly [class]=\"model.getReadOnlyFileCss()\" [attr.id]=\"model.inputId\"\n    [attr.multiple]=\"model.multipleRendered\" [attr.placeholder]=\"model.title\" style=\"color: transparent\" />\n  <input *ngIf=\"model.isDisabledAttr\" 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()\" *ngIf=\"model.showFileDecorator\">\n      <span [class]=\"model.cssClasses.dragAreaPlaceholder\" [model]=\"model.locRenderedPlaceholder\" sv-ng-string></span>\n      <div [class]=\"model.cssClasses.wrapper\">\n        <sv-ng-choose-file-btn [data]=\"{ question: model }\" *ngIf=\"model.showChooseButton\"></sv-ng-choose-file-btn>\n        <sv-ng-action-bar [model]=\"model.actionsContainer\" *ngIf=\"model.actionsContainerVisible\"></sv-ng-action-bar>\n        <span [class]=\"model.cssClasses.noFileChosen\" *ngIf=\"model.isEmpty()\">{{ model.noFileChosenCaption }}</span>\n      </div>\n    </div>\n    <ng-container *ngIf=\"model.showLoadingIndicator\">\n      <div [class]=\"model.cssClasses.loadingIndicator\">\n        <sv-ng-loading-indicator></sv-ng-loading-indicator>\n      </div>\n    </ng-container>\n    <ng-container *ngIf=\"model.isPlayingVideo\">\n      <ng-container *ngTemplateOutlet=\"fileVideo\"></ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"model.showRemoveButton\">\n      <ng-container *ngTemplateOutlet=\"fileCleanButton; context: { css: model.showRemoveButton }\"></ng-container>\n    </ng-container>\n    <ng-container *ngIf=\"model.allowShowPreview\">\n      <ng-template [component]=\"{ name: 'sv-file-preview', data: { question: model } }\"></ng-template>\n    </ng-container>\n    <ng-container *ngIf=\"model.showRemoveButtonBottom\">\n      <ng-container *ngTemplateOutlet=\"fileCleanButton; context: { css: model.showRemoveButtonBottom }\"></ng-container>\n    </ng-container>\n    <sv-action-bar *ngIf=\"model.fileNavigatorVisible\" [model]=\"model.fileNavigator\"></sv-action-bar>\n  </div>\n</div>\n<ng-template #fileCleanButton let-css=\"css\">\n  <button type=\"button\" [class]=\"css\" (click)=\"model.doClean()\">\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</ng-template>\n<ng-template #fileVideo>\n  <div [class]=\"model.cssClasses.videoContainer\">\n    <sv-ng-action [model]=\"model.changeCameraAction\"></sv-ng-action>\n    <sv-ng-action [model]=\"model.closeCameraAction\"></sv-ng-action>\n    <video autoplay playsinline [attr.id]=\"model.videoId\" [class]=\"model.cssClasses.video\"></video>\n    <sv-ng-action [model]=\"model.takePictureAction\"></sv-ng-action>\n  </div>\n</ng-template>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: ChooseFileBtn, selector: "sv-ng-choose-file-btn", inputs: ["data", "model"] }, { type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }, { type: LoadingIndicatorComponent, selector: "sv-ng-loading-indicator" }, { type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }, { type: ActionComponent, selector: "sv-ng-action", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FileQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-file-question",
                    templateUrl: "./file.component.html",
                    styleUrls: []
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("file-question", FileQuestionComponent);

class CommentQuestionComponent extends QuestionAngular {
    onChange(event) {
        this.model.value = event.target.value;
    }
}
CommentQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CommentQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
CommentQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CommentQuestionComponent, selector: "sv-ng-question-comment", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!model.isReadOnlyRenderDiv()\">\n  <ng-template [component]=\"{ name: 'sv-text-area', data: { model: model.textAreaModel } }\"></ng-template>\n  <sv-ng-character-counter *ngIf=\"model.getMaxLength()\" \n  [counter]=\"model.characterCounter\"\n  [remainingCharacterCounter]=\"model.cssClasses.remainingCharacterCounter\">\n  </sv-ng-character-counter>\n</ng-container>\n<div *ngIf=\"model.isReadOnlyRenderDiv()\" #contentElement>{{ model.value }}</div>", components: [{ type: CharacterCounterComponent, selector: "sv-ng-character-counter", inputs: ["counter", "remainingCharacterCounter"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CommentQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    templateUrl: "./comment.component.html",
                    selector: "sv-ng-question-comment"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("comment-question", CommentQuestionComponent);

class SignaturePadQuestionComponent extends QuestionAngular {
}
SignaturePadQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SignaturePadQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
SignaturePadQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SignaturePadQuestionComponent, selector: "sv-ng-signature-component", usesInheritance: true, ngImport: i0, template: "<div\n[class]=\"model.cssClasses.root\"\n[style.width]=\"model.renderedCanvasWidth\" #contentElement>\n<div [class]=\"model.cssClasses.placeholder\" [visible]=\"model.needShowPlaceholder()\" [model]=\"$any(model).locRenderedPlaceholder\" sv-ng-string></div>\n<div>\n  <img *ngIf=\"!!model.backgroundImage\" [src]=\"model.backgroundImage\" [style.width]=\"model.renderedCanvasWidth\" [class]=\"model.cssClasses.backgroundImage\">\n  <canvas tabindex=\"-1\" [class]=\"model.cssClasses.canvas\" (blur)=\"model.onBlur($event)\"></canvas>\n</div>\n<div [class]=\"model.cssClasses.controls\" *ngIf=\"model.canShowClearButton\">\n  <button\n    type=\"button\"\n    [class]=\"model.cssClasses.clearButton\"\n    [title]=\"model.clearButtonCaption\"\n    (click)=\"model.clearValue(true)\"\n  >\n    <span *ngIf=\"!model.cssClasses.clearButtonIconId\">\u2716</span>\n    <svg\n      *ngIf=\"model.cssClasses.clearButtonIconId\"\n      [iconName]=\"model.cssClasses.clearButtonIconId\"\n      [size]=\"'auto'\" sv-ng-svg-icon></svg>\n  </button>\n</div>\n<ng-container *ngIf=\"model.showLoadingIndicator\">\n  <div [class]=\"model.cssClasses.loadingIndicator\">\n    <sv-ng-loading-indicator></sv-ng-loading-indicator>\n  </div>\n</ng-container>\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"] }, { type: LoadingIndicatorComponent, selector: "sv-ng-loading-indicator" }], directives: [{ type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SignaturePadQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-signature-component",
                    templateUrl: "./signature.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("signaturepad-question", SignaturePadQuestionComponent);

class MultipleTextItemComponent extends BaseAngular {
    getModel() {
        if (!this.model.isErrorsCell) {
            return this.model.item.editor;
        }
        return null;
    }
    get item() {
        return this.model.item;
    }
    get editor() {
        return this.model.item.editor;
    }
    ngDoCheck() {
        super.ngDoCheck();
        if (this.model.isErrorsCell) {
            this.editor.registerFunctionOnPropertyValueChanged("errors", () => {
                this.update();
            }, "__ngSubscription");
        }
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        if (this.model.isErrorsCell) {
            this.editor.unRegisterFunctionOnPropertyValueChanged("errors", "__ngSubscription");
        }
    }
}
MultipleTextItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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()\" [style]=\"{ minWidth: question.itemTitleWidth, width: question.itemTitleWidth }\">\n      <span *ngIf=\" item.editor.isRequireTextBeforeTitle || item.editor.isRequireTextOnStart\"\n        [class]=\"question.cssClasses.requiredMark\">{{ item.editor.requiredMark }}</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.requiredMark\" aria-hidden=\"true\">{{\n        item.editor.requiredMark }}</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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "'[sv-ng-multipletext-item]'",
                    templateUrl: "./mutlipletextitem.component.html"
                }]
        }], propDecorators: { question: [{
                type: Input
            }], model: [{
                type: Input
            }] } });

class MultipleTextRowComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
    trackItemBy(_, cell) {
        return "item" + cell.item.editor.id;
    }
}
MultipleTextRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextRowComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-multipletext-row",
                    templateUrl: "./multipletextrow.component.html",
                    styleUrls: ["../hide-host.scss"]
                }]
        }], propDecorators: { question: [{
                type: Input
            }], model: [{
                type: Input
            }] } });

class MultipleTextComponent extends QuestionAngular {
    constructor() {
        super(...arguments);
        this.trackRowBy = (index) => {
            return this.model.inputId + "rowkey" + index;
        };
    }
}
MultipleTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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.getQuestionRootCss()\" #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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MultipleTextComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-multipletext-question",
                    templateUrl: "./multipletext.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("multipletext-question", MultipleTextComponent);

class RankingQuestionComponent extends SelectBaseComponent {
    constructor() {
        super(...arguments);
        this.inputType = "";
        this.trackItemBy = (index, item) => {
            return item.value + "-" + index + "-item";
        };
    }
    getDefaultComponentName() {
        return "sv-ng-ranking-item";
    }
    getItemValueComponentData(item, index, unrankedItem) {
        const res = {
            componentName: this.getDefaultComponentName(),
            componentData: {
                question: this.model,
                model: item,
                inputType: this.inputType,
                data: this.model.getItemValueWrapperComponentData(item),
                index,
                unrankedItem
            }
        };
        return res;
    }
}
RankingQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RankingQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
RankingQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RankingQuestionComponent, selector: "sv-ng-ranking-question", usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"!model.selectToRankEnabled\" [class]=\"model.rootClass\" #contentElement>\n  <ng-container *ngFor=\"let item of model.renderedRankingChoices; index as index; trackBy: trackItemBy\">\n    <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item, index) }\"></ng-template>\n  </ng-container>\n</div>\n\n<div *ngIf=\"model.selectToRankEnabled\" [class]=\"model.rootClass\" #contentElement>\n  <div [class]='model.getContainerClasses(\"from\")' data-ranking=\"from-container\">\n    <ng-container *ngFor=\"let item of model.renderedUnRankingChoices; index as index; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item, index, true) }\"></ng-template>\n    </ng-container>\n\n    <div *ngIf=\"model.renderedUnRankingChoices.length === 0\" [class]=\"model.cssClasses.containerPlaceholder\" [model]=\"$any(model).locSelectToRankEmptyRankedAreaText\" sv-ng-string></div>\n  </div>\n\n  <div [class]=\"model.cssClasses.containersDivider\"></div>\n\n  <div [class]='model.getContainerClasses(\"to\")' data-ranking=\"to-container\">\n    <ng-container *ngFor=\"let item of model.renderedRankingChoices; index as index; trackBy: trackItemBy\">\n      <ng-template [component]=\"{ name: getItemValueComponentName(item), data: getItemValueComponentData(item, index) }\"></ng-template>\n    </ng-container>\n\n    <div *ngIf=\"model.renderedRankingChoices.length === 0\" [class]=\"model.cssClasses.containerPlaceholder\" [model]=\"$any(model).locSelectToRankEmptyUnrankedAreaText\" sv-ng-string></div>\n  </div>\n</div>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RankingQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-ranking-question",
                    templateUrl: "./ranking.component.html",
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("ranking-question", RankingQuestionComponent);

class RankingItemComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
}
RankingItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RankingItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
RankingItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RankingItemComponent, selector: "sv-ng-ranking-item", inputs: { question: "question", model: "model", index: "index", unrankedItem: "unrankedItem" }, usesInheritance: true, ngImport: i0, template: "\n\n\n<div [attr.tabindex]=\"question.getItemTabIndex(model)\" [attr.data-sv-drop-target-ranking-item]=\"index\" \n    [class]=\"question.getItemClass(model)\"\n    (keydown)=\"question.handleKeydown($event, model)\"\n    (pointerdown)=\"question.handlePointerDown($event, model, $any($event.currentTarget))\"\n    (pointerup)=\"question.handlePointerUp($event, model, $any($event.currentTarget))\">\n  <div tabindex=\"-1\" style=\"outline: none;\">\n    <div [class]=\"question.cssClasses.itemGhostNode\"></div>\n    <div [class]=\"question.cssClasses.itemContent\">\n      <div [class]=\"question.cssClasses.itemIconContainer\">\n        <svg [class]=\"question.getIconHoverCss()\">\n          <use [attr.xlink:href]=\"question.dragDropSvgIcon\"></use>\n        </svg> \n        <svg [class]=\"question.getIconFocusCss()\">\n          <use [attr.xlink:href]=\"question.arrowsSvgIcon\"></use>\n        </svg> \n      </div>\n\n      <div *ngIf=\"!unrankedItem && question.getNumberByIndex(index); else elseBlock\" [class]=\"question.getItemIndexClasses(model)\">{{ question.getNumberByIndex(index) }}</div>\n      <ng-template #elseBlock><div [class]=\"question.getItemIndexClasses(model)\">\n        <svg>\n          <use [attr.xlink:href]=\"question.dashSvgIcon\"></use>\n        </svg> \n      </div></ng-template>\n\n      <ng-template [component]=\"{ name: question.itemComponent, data: { item: model, cssClasses: question.cssClasses } }\"></ng-template>\n    </div>\n  </div>\n</div>", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RankingItemComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-ranking-item",
                    templateUrl: "./ranking-item.component.html"
                }]
        }], propDecorators: { question: [{
                type: Input
            }], model: [{
                type: Input
            }], index: [{
                type: Input
            }], unrankedItem: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-ng-ranking-item", RankingItemComponent);

class RankingItemContentComponent extends EmbeddedViewContentComponent {
}
RankingItemContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RankingItemContentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
RankingItemContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RankingItemContentComponent, selector: "sv-ranking-item", inputs: { item: "item", cssClasses: "cssClasses" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div [class]=\"cssClasses.controlLabel\">\n    <sv-ng-string [model]=\"item.locText\"></sv-ng-string>\n  </div>\n</ng-template>\n", styles: [":host { display: none; }"], components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RankingItemContentComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ranking-item",
                    templateUrl: "./ranking-item-content.component.html",
                    styles: [":host { display: none; }"]
                }]
        }], propDecorators: { item: [{
                type: Input
            }], cssClasses: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-ranking-item", RankingItemContentComponent);

class StringEditorComponent {
    constructor() {
        this.onInput = (event) => {
            this.model.text = event.target.innerText;
        };
        this.onClick = (event) => {
            event.preventDefault();
            event.stopPropagation();
        };
    }
}
StringEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: StringEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
StringEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: StringEditorComponent, selector: "sv-ng-string-editor", inputs: { model: "model" }, ngImport: i0, template: "<span\n  class=\"sv-string-editor\"\n  contenteditable=\"true\"\n  *ngIf=\"model.hasHtml\"\n  [innerHtml]=\"model.renderedHtml\"\n  (blur)=\"onInput($event)\"\n  (click)=\"onClick($event)\"\n></span>\n<span\n  class=\"sv-string-editor\"\n  contenteditable=\"true\"\n  *ngIf=\"!model.hasHtml\"\n  (blur)=\"onInput($event)\"\n  (click)=\"onClick($event)\"\n  >{{ model.renderedHtml }}</span\n>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: StringEditorComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-string-editor",
                    templateUrl: "./string-editor.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent(LocalizableString.editableRenderer, StringEditorComponent);

class PaneldynamicAction {
    get question() {
        return (this.model && this.model.data.question) || this.data.question;
    }
}
PaneldynamicAction.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PaneldynamicAction, deps: [], target: i0.ɵɵFactoryTarget.Component });
PaneldynamicAction.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PaneldynamicAction, selector: "ng-component", inputs: { data: "data", model: "model" }, ngImport: i0, template: "", isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PaneldynamicAction, decorators: [{
            type: Component,
            args: [{
                    selector: "",
                    template: ""
                }]
        }], propDecorators: { data: [{
                type: Input
            }], model: [{
                type: Input
            }] } });
class PanelDynamicAddBtn extends PaneldynamicAction {
    addPanelClick() {
        this.question.addPanelUI();
    }
}
PanelDynamicAddBtn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicAddBtn, deps: null, target: i0.ɵɵFactoryTarget.Component });
PanelDynamicAddBtn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PanelDynamicAddBtn, selector: "sv-ng-paneldynamic-add-btn", usesInheritance: true, ngImport: i0, template: "<button type=\"button\" [id]=\"question.addButtonId\" *ngIf=\"question.canAddPanel\" [class]=\"question.getAddButtonCss()\" (click)=\"addPanelClick()\">\n<span [class]=\"question.cssClasses.buttonAddText\"><sv-ng-string [model]=\"question.locAddPanelText\"></sv-ng-string></span>\n</button>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicAddBtn, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-paneldynamic-add-btn",
                    templateUrl: "./paneldynamic-add-btn.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("sv-paneldynamic-add-btn", PanelDynamicAddBtn);

class PanelDynamicNextBtn extends PaneldynamicAction {
    nextPanelClick() {
        this.question.goToNextPanel();
    }
}
PanelDynamicNextBtn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicNextBtn, deps: null, target: i0.ɵɵFactoryTarget.Component });
PanelDynamicNextBtn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PanelDynamicNextBtn, selector: "sv-ng-paneldynamic-next-btn", usesInheritance: true, ngImport: i0, template: "<div [attr.title]=\"question.panelNextText\" (click)=\"nextPanelClick()\" [class]=\"question.getNextButtonCss()\">\n  <svg [iconName]=\"question.cssClasses.progressBtnIcon\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n</div>", components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicNextBtn, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-paneldynamic-next-btn",
                    templateUrl: "./paneldynamic-next-btn.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("sv-paneldynamic-next-btn", PanelDynamicNextBtn);

class PanelDynamicPrevBtn extends PaneldynamicAction {
    prevPanelClick() {
        this.question.goToPrevPanel();
    }
}
PanelDynamicPrevBtn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicPrevBtn, deps: null, target: i0.ɵɵFactoryTarget.Component });
PanelDynamicPrevBtn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PanelDynamicPrevBtn, selector: "sv-ng-paneldynamic-prev-btn", usesInheritance: true, ngImport: i0, template: "<div [attr.title]=\"question.panelPrevText\" (click)=\"prevPanelClick()\" [class]=\"question.getPrevButtonCss()\">\n  <svg [iconName]=\"question.cssClasses.progressBtnIcon\" [size]=\"'auto'\" sv-ng-svg-icon></svg>\n</div>\n", components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicPrevBtn, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-paneldynamic-prev-btn",
                    templateUrl: "./paneldynamic-prev-btn.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("sv-paneldynamic-prev-btn", PanelDynamicPrevBtn);

class PaneldynamicRemoveButtonComponent extends PaneldynamicAction {
    get panel() {
        return (this.data ? this.data : this.model.data).panel;
    }
}
PaneldynamicRemoveButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PaneldynamicRemoveButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
PaneldynamicRemoveButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PaneldynamicRemoveButtonComponent, selector: "sv-ng-paneldynamic-remove-btn", usesInheritance: true, ngImport: i0, template: "<button type=\"button\" [id]=\"question.getPanelRemoveButtonId(panel)\" (click)=\"question.removePanelUI(panel)\" [class]=\"question.getPanelRemoveButtonCss()\"> \n  <span [class]=\"question.cssClasses.buttonRemoveText\"><sv-ng-string [model]=\"question.locRemovePanelText\"></sv-ng-string></span>\n  <span [class]=\"question.cssClasses.iconRemove\"></span>\n</button>\n", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PaneldynamicRemoveButtonComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-paneldynamic-remove-btn",
                    templateUrl: "./paneldynamic-remove-btn.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("sv-paneldynamic-remove-btn", PaneldynamicRemoveButtonComponent);

class PanelDynamicProgressText extends PaneldynamicAction {
}
PanelDynamicProgressText.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicProgressText, deps: null, target: i0.ɵɵFactoryTarget.Component });
PanelDynamicProgressText.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PanelDynamicProgressText, selector: "sv-ng-paneldynamic-progress-text", usesInheritance: true, ngImport: i0, template: "<div [class]=\"question.cssClasses.progressText\">{{ question.progressText }}</div>\n" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicProgressText, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-paneldynamic-progress-text",
                    templateUrl: "./paneldynamic-progress-text.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("sv-paneldynamic-progress-text", PanelDynamicProgressText);

class PanelDynamicQuestionComponent extends QuestionAngular {
    trackPanelBy(_, panel) {
        return panel.id;
    }
    onModelChanged() {
        super.onModelChanged();
        this.model.panelCountChangedCallback = () => {
            this.update();
        };
        this.model.currentIndexChangedCallback = () => {
            this.update();
        };
        this.model.renderModeChangedCallback = () => {
            this.update();
        };
    }
    get progressCssClass() {
        return this.model.isProgressTopShowing
            ? this.model.cssClasses.progressTop
            : this.model.cssClasses.progressBottom;
    }
    ngOnDestroy() {
        this.model.panelCountChangedCallback = () => { };
        this.model.currentIndexChangedCallback = () => { };
        this.model.renderModeChangedCallback = () => { };
        super.ngOnDestroy();
    }
    getPanelComponentName(panel) {
        const survey = this.surveyModel;
        if (!!survey) {
            const name = survey.getElementWrapperComponentName(panel);
            if (!!name) {
                return name;
            }
        }
        return "panel";
    }
    getPanelComponentData(panel) {
        const survey = this.surveyModel;
        let data;
        if (!!survey) {
            data = survey.getElementWrapperComponentData(panel);
        }
        return {
            componentName: "panel",
            componentData: {
                model: panel,
                data: data
            }
        };
    }
}
PanelDynamicQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PanelDynamicQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-paneldynamic-question",
                    templateUrl: "./paneldynamic.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("paneldynamic-question", PanelDynamicQuestionComponent);

class TemplateRendererComponent extends EmbeddedViewContentComponent {
}
TemplateRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TemplateRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
TemplateRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TemplateRendererComponent, selector: "sv-template-renderer", inputs: { componentName: "componentName", componentData: "componentData", contentTempl: "contentTempl" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <ng-container *ngIf=\"!!componentName\">\n    <ng-template [component]=\"{ name: componentName, data: componentData }\"></ng-template>\n  </ng-container>\n  <ng-container *ngIf=\"!componentName && contentTempl\">\n    <ng-container *ngTemplateOutlet=\"contentTempl\"></ng-container>\n  </ng-container>\n</ng-template>", styles: [":host{display:none}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TemplateRendererComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-template-renderer",
                    templateUrl: "./template-renderer.component.html",
                    styleUrls: ["./hide-host.scss"]
                }]
        }], propDecorators: { componentName: [{
                type: Input
            }], componentData: [{
                type: Input
            }], contentTempl: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent(SurveyModel.TemplateRendererComponentName, TemplateRendererComponent);

class CustomWidgetComponent {
    get hasDefaultRender() {
        return this.model.customWidget.isDefaultRender || this.hasAngularComponent;
    }
    get hasHtml() {
        return this.model.customWidget.htmlTemplate ? true : false;
    }
    get customHtml() {
        return this.model.customWidget.htmlTemplate;
    }
    get hasAngularComponent() {
        return AngularComponentFactory.Instance.isComponentRegistered(this.model.customWidget.name);
    }
    get componentName() {
        if (this.hasAngularComponent)
            return this.model.customWidget.name;
        return this.model.getTemplate() + "-question";
    }
    ngAfterViewInit() {
        this.model.customWidget.afterRender(this.model, this.container.nativeElement);
    }
    ngOnChanges(simpleChanges) {
        if (simpleChanges["model"].previousValue !== undefined && simpleChanges["model"].currentValue !== undefined) {
            this.model.customWidget.afterRender(this.model, this.container.nativeElement);
        }
    }
    ngOnDestroy() {
        this.model.customWidget.willUnmount(this.model, this.container.nativeElement);
    }
}
CustomWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
CustomWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomWidgetComponent, selector: "sv-ng-custom-widget", inputs: { css: "css", model: "model" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["content"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #content>\n  <div *ngIf=\"hasHtml\" [innerHTML]=\"customHtml | safeHtml\"></div>\n  <ng-container *ngIf=\"hasDefaultRender\">\n    <ng-template [component]=\"{ name: componentName, data: { model: model, css: css } }\"></ng-template>  \n  </ng-container>\n</div>", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }], pipes: { "safeHtml": SafeHtmlPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomWidgetComponent, decorators: [{
            type: Component,
            args: [{
                    templateUrl: "./customwidget.component.html",
                    selector: "sv-ng-custom-widget"
                }]
        }], propDecorators: { css: [{
                type: Input
            }], model: [{
                type: Input
            }], container: [{
                type: ViewChild,
                args: ["content"]
            }] } });
AngularComponentFactory.Instance.registerComponent("survey-customwidget", CustomWidgetComponent);

class MatrixCellComponent extends BaseAngular {
    getModel() {
        return this.row.item;
    }
    onChange() {
        this.cellChangedOwner.onCellChanged(this.row, this.column);
    }
}
MatrixCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixCellComponent, selector: "sv-ng-matrix-cell, '[sv-ng-matrix-cell]'", inputs: { question: "question", column: "column", row: "row", columnIndex: "columnIndex", cellChangedOwner: "cellChangedOwner" }, usesInheritance: true, ngImport: i0, template: "<label (mousedown)=\"question.onMouseDown()\" [class]=\"question.getItemClass(row, column)\">\n  <input\n    type=\"radio\"\n    [class]=\"question.cssClasses.itemValue\"\n    [name]=\"row.fullName\"\n    [value]=\"column.value\"\n    [checked]=\"row.value === column.value\"\n    [readonly]=\"row.isReadOnlyAttr\"\n    [disabled]=\"row.isDisabledAttr\"\n    [attr.id]=\"question.inputId + '_' + row.name + '_' + columnIndex\"\n    (change)=\"onChange()\"\n    [attr.aria-required]=\"question.a11y_input_ariaRequired\"\n    [attr.aria-label]=\"question.getCellAriaLabel(row.locText.renderedHtml, column.locText.renderedHtml)\"\n    [attr.aria-invalid]=\"question.a11y_input_ariaInvalid\"\n    [attr.aria-errormessage]=\"question.a11y_input_ariaErrormessage\"\n  />\n  <span [class]=\"question.cssClasses.materialDecorator\">\n    <svg *ngIf=\"question.itemSvgIcon\" [class]=\"question.cssClasses.itemDecorator\">\n      <use [attr.xlink:href]=\"question.itemSvgIcon\"></use>\n    </svg> \n  </span>\n  <span *ngIf=\"question.isMobile\" [class]=\"question.cssClasses.cellResponsiveTitle\" [model]=\"column.locText\" sv-ng-string></span>\n</label>\n<ng-content></ng-content>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixCellComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrix-cell, '[sv-ng-matrix-cell]'",
                    templateUrl: "./matrixcell.component.html"
                }]
        }], propDecorators: { question: [{
                type: Input
            }], column: [{
                type: Input
            }], row: [{
                type: Input
            }], columnIndex: [{
                type: Input
            }], cellChangedOwner: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("survey-matrix-cell", MatrixCellComponent);

class MatrixDynamicDragDropIconComponent extends EmbeddedViewContentComponent {
    get question() {
        return this.model.data.question;
    }
}
MatrixDynamicDragDropIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDynamicDragDropIconComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixDynamicDragDropIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixDynamicDragDropIconComponent, selector: "sv-ng-matrix-drag-drop-icon", inputs: { model: "model" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div>\n    <svg *ngIf=\"question.iconDragElement\" [class]=\"question.cssClasses.dragElementDecorator\">\n      <use [attr.xlink:href]=\"question.iconDragElement\"></use>\n    </svg>\n    <span *ngIf=\"!question.iconDragElement\" data-bind=\"css: question.cssClasses.iconDrag\"></span>\n  </div>\n</ng-template>", styles: [":host{display:none}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDynamicDragDropIconComponent, decorators: [{
            type: Component,
            args: [{
                    templateUrl: "drag-drop-icon.component.html",
                    selector: "sv-ng-matrix-drag-drop-icon",
                    styleUrls: ["../../../hide-host.scss"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-matrix-drag-drop-icon", MatrixDynamicDragDropIconComponent);

class MatrixRequiredHeader extends BaseAngular {
    getModel() {
        return this.column;
    }
}
MatrixRequiredHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixRequiredHeader, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixRequiredHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixRequiredHeader, selector: "sv-ng-matrixheaderrequired", inputs: { column: "column", question: "question" }, usesInheritance: true, ngImport: i0, template: "<ng-template #template><ng-container *ngIf='column.isRenderedRequired'><span>&nbsp;</span><span [class]='question.cssClasses.cellRequiredMark'>{{ column.requiredMark }}</span></ng-container></ng-template>", isInline: true, styles: [":host { display: none; }"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixRequiredHeader, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrixheaderrequired",
                    styles: [":host { display: none; }"],
                    template: "<ng-template #template><ng-container *ngIf='column.isRenderedRequired'><span>&nbsp;</span><span [class]='question.cssClasses.cellRequiredMark'>{{ column.requiredMark }}</span></ng-container></ng-template>"
                }]
        }], propDecorators: { column: [{
                type: Input
            }], question: [{
                type: Input
            }] } });

class MatrixDropdownCellComponent extends BaseAngular {
    getModel() {
        if (this.cell.hasQuestion) {
            return this.cell.question;
        }
        if (!!this.cell.column) {
            return this.cell.column;
        }
        return null;
    }
    get row() {
        return this.cell.row;
    }
    ngDoCheck() {
        var _a;
        super.ngDoCheck();
        if (this.cell.isErrorsCell && ((_a = this.cell) === null || _a === void 0 ? void 0 : _a.question)) {
            this.cell.question.registerFunctionOnPropertiesValueChanged(["errors", "visible"], () => {
                this.update();
            }, "__ngSubscription");
        }
    }
    get panelComponentName() {
        const panel = this.cell.panel;
        const survey = panel.survey;
        if (!!survey) {
            const name = survey.getElementWrapperComponentName(panel);
            if (!!name) {
                return name;
            }
        }
        return "panel";
    }
    get panelComponentData() {
        const panel = this.cell.panel;
        const survey = panel.survey;
        let data;
        if (!!survey) {
            data = survey.getElementWrapperComponentData(panel);
        }
        return {
            componentName: "panel",
            componentData: {
                model: panel,
                data: data
            }
        };
    }
    getComponentName(element) { return getComponentName(element); }
    getCellStyle() {
        if (!!this.cell.width || !!this.cell.minWidth)
            return { width: this.cell.width, minWidth: this.cell.minWidth };
        return null;
    }
    get isRequiredCell() {
        return !!this.cell.column && this.cell.column.isRenderedRequired;
    }
    ngAfterViewInit() {
        var _a;
        if (!this.cell.hasQuestion || !this.question || !this.question.survey)
            return;
        const el = (_a = this.cellContainer) === null || _a === void 0 ? void 0 : _a.nativeElement;
        if (el) {
            const cellQ = this.cell.question;
            var options = {
                cell: this.cell.cell,
                cellQuestion: cellQ,
                htmlElement: el,
                row: this.cell.row,
                column: this.cell.cell.column,
            };
            this.question.survey.matrixAfterCellRender(this.question, options);
            cellQ.afterRenderCore(el);
        }
    }
    ngOnDestroy() {
        var _a;
        super.ngOnDestroy();
        if (this.cell.isErrorsCell && ((_a = this.cell) === null || _a === void 0 ? void 0 : _a.question)) {
            this.cell.question.unRegisterFunctionOnPropertiesValueChanged(["errors", "visible"], "__ngSubscription");
        }
    }
    get canRender() {
        return this.question && this.question.survey && this.cell.isVisible;
    }
}
MatrixDropdownCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDropdownCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixDropdownCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixDropdownCellComponent, selector: "sv-ng-matrixdropdown-cell", inputs: { question: "question", cell: "cell" }, viewQueries: [{ propertyName: "cellContainer", first: true, predicate: ["cellContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <td [class]=\"cell.className\" *ngIf=\"canRender\" [title]=\"cell.getTitle()\"\n    [style]=\"getCellStyle()\" [attr.colspan]=\"cell.colSpans\" (focusin)=\"cell.focusIn()\" #cellContainer>\n    <sv-ng-matrix-drag-drop-icon *ngIf=\"cell.isDragHandlerCell\"\n      [model]=\"$any({ data: { row: row, question: question } })\"></sv-ng-matrix-drag-drop-icon>\n    <sv-action-bar *ngIf=\"cell.isActionsCell\" [model]=\"cell.item.getData()\" [handleClick]=\"false\"></sv-action-bar>\n    <ng-container *ngIf=\"cell.hasPanel\">\n      <ng-template [component]=\"{ name: panelComponentName, data: panelComponentData }\"></ng-template>\n    </ng-container>\n    <div *ngIf=\"cell.isErrorsCell && cell.question?.hasVisibleErrors\" [element]=\"cell.question\" sv-ng-errors></div>\n    <span *ngIf=\"cell.showResponsiveTitle\" [class]=\"cell.responsiveTitleCss\">\n      <sv-ng-string [model]=\"cell.responsiveLocTitle\"></sv-ng-string>\n      <sv-ng-matrixheaderrequired [column]=\"cell.column\" [question]=\"cell.matrix\">\n      </sv-ng-matrixheaderrequired>\n    </span>\n    <div *ngIf=\"cell.hasQuestion\" [class]=\"cell.cellQuestionWrapperClassName\"\n      [visible]=\"cell.question.isVisible\">\n      <ng-container *ngIf=\"!cell.isChoice && cell.question.isDefaultRendering()\">\n        <ng-template\n          [component]=\"{ name: question.getCellWrapperComponentName(cell.cell), data: { componentData: question.getCellWrapperComponentData(cell.cell)} }\">\n          <ng-template\n            [component]=\"{ name: getComponentName(cell.question), data: { model: cell.question } }\"></ng-template>\n        </ng-template>\n      </ng-container>\n      <ng-template *ngIf=\"!cell.isChoice && !cell.question.isDefaultRendering()\"\n        [component]=\"{ name: cell.question.getComponentName(), data: { model: cell.question } }\">\n      </ng-template>\n      <ng-container *ngIf=\"cell.isItemChoice\">\n        <ng-template\n          [component]=\"{ name: question.getCellWrapperComponentName(cell.cell), data: { componentData: question.getCellWrapperComponentData(cell.cell)} }\">\n          <sv-ng-selebase-item [showLabel]=\"false\" [inputType]=\"cell.isCheckbox ? 'checkbox': 'radio'\"\n            [question]=\"cell.question\" [model]=\"cell.item\"></sv-ng-selebase-item>\n        </ng-template>\n      </ng-container>\n      <div *ngIf=\"cell.isOtherChoice\" [class]=\"cell.question.getCommentAreaCss(true)\" [question]=\"cell.question\"\n        sv-ng-comment-other></div>\n    </div>\n    <ng-container *ngIf=\"cell.hasTitle\">\n      <ng-template\n        [component]=\"{ name: question.getCellWrapperComponentName($any(cell)), data: { componentData: question.getCellWrapperComponentData($any(cell))} }\">\n        <sv-ng-string [model]=\"cell.locTitle\"></sv-ng-string>\n        <span *ngIf=\"isRequiredCell\" [class]=\"question.cssClasses.cellRequiredMark\">{{ cell.requiredMark }}</span>\n      </ng-template>\n    </ng-container>\n  </td>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: MatrixDynamicDragDropIconComponent, selector: "sv-ng-matrix-drag-drop-icon", inputs: ["model"] }, { type: ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }, { type: ErrorsComponent, selector: "'[sv-ng-errors]'", inputs: ["element", "location"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: MatrixRequiredHeader, selector: "sv-ng-matrixheaderrequired", inputs: ["column", "question"] }, { type: SelectBaseItemComponent, selector: "['sv-ng-selectbase-item'], sv-ng-selebase-item", inputs: ["question", "model", "inputType", "showLabel"] }, { type: SurveyCommentOtherComponent, selector: "sv-ng-comment-other, '[sv-ng-comment-other]'", inputs: ["question"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDropdownCellComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrixdropdown-cell",
                    templateUrl: "./matrixdropdowncell.component.html",
                    styles: [":host { display: none; }"]
                }]
        }], propDecorators: { question: [{
                type: Input
            }], cell: [{
                type: Input
            }], cellContainer: [{
                type: ViewChild,
                args: ["cellContainer"]
            }] } });

class MatrixRowComponent extends BaseAngular {
    getModel() {
        return this.model;
    }
    get row() {
        return this.model.row;
    }
    trackCellBy(_, cell) {
        return cell.id;
    }
    onModelChanged() {
        var _a;
        super.onModelChanged();
        if (this.previousModel) {
            this.previousModel.setRootElement(undefined);
        }
        if (this.model && ((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            this.model.setRootElement(this.container.nativeElement);
        }
    }
    ngAfterViewInit() {
        var _a;
        if (this.model && ((_a = this.container) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
            this.model.setRootElement(this.container.nativeElement);
        }
    }
    ngOnDestroy() {
        super.ngOnDestroy();
        this.model.setRootElement(undefined);
    }
}
MatrixRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixRowComponent, selector: "sv-ng-matrix-row", inputs: { model: "model", question: "question" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <tr *ngIf=\"model.visible\" [class]=\"model.className\" (pointerdown)=\"question.onPointerDown($event, row)\"\n    [attr.data-sv-drop-target-matrix-row]=\"row && row.id\" #container>\n    <sv-ng-matrixdropdown-cell [cell]=\"cell\" [question]=\"question\"\n      *ngFor=\"let cell of model.cells; trackBy: trackCellBy\"></sv-ng-matrixdropdown-cell>\n  </tr>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: MatrixDropdownCellComponent, selector: "sv-ng-matrixdropdown-cell", inputs: ["question", "cell"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixRowComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrix-row",
                    templateUrl: "./matrix-row.component.html",
                    styles: [":host { display: none; }"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }], question: [{
                type: Input
            }], container: [{
                type: ViewChild,
                args: ["container", { static: false, read: ElementRef }]
            }] } });

class MatrixTableComponent extends BaseAngular {
    getModel() {
        return this.table;
    }
    trackCellBy(_, cell) {
        return cell.id;
    }
    trackRowBy(index, row) {
        return row.id;
    }
}
MatrixTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixTableComponent, selector: "sv-ng-matrix-table", inputs: { question: "question", table: "table" }, usesInheritance: true, ngImport: i0, template: "<div [style]=\"{ overflowX: question.showHorizontalScroll ? 'scroll' : '' }\" #contentElement\n  [class]=\"question.cssClasses.tableWrapper\">\n  <table [class]=\"question.getTableCss()\">\n    <thead *ngIf=\"table.showHeader\">\n      <tr>\n        <ng-container *ngFor=\"let cell of table.headerRow.cells; trackBy: trackCellBy\">\n          <th *ngIf=\"cell.hasTitle\" [class]=\"cell.className\" [style]=\"{ minWidth: cell.minWidth, width: cell.width }\">\n            <ng-template\n              [component]=\"{ name: question.getColumnHeaderWrapperComponentName($any(cell)), data: { componentData: question.getColumnHeaderWrapperComponentData($any(cell)) } }\">\n              <sv-ng-string [model]=\"cell.locTitle\"></sv-ng-string>\n              <sv-ng-matrixheaderrequired *ngIf=\"!!cell.column\" [column]=\"cell.column\" [question]=\"question\">\n              </sv-ng-matrixheaderrequired>\n            </ng-template>\n          </th>\n\n          <td *ngIf=\"!cell.hasTitle\" [class]=\"cell.className\" [style]=\"{ minWidth: cell.minWidth, width: cell.width }\">\n          </td>\n        </ng-container>\n      </tr>\n    </thead>\n    <tbody>\n      <ng-container *ngFor=\"let row of table.renderedRows; trackBy: trackRowBy\">\n        <sv-ng-matrix-row [model]=\"row\" [question]=\"question\"></sv-ng-matrix-row>\n      </ng-container>\n    </tbody>\n    <tfoot *ngIf=\"table.showFooter\">\n      <tr>\n        <sv-ng-matrixdropdown-cell [cell]=\"cell\" [question]=\"question\"\n          *ngFor=\"let cell of table.footerRow.cells; trackBy: trackCellBy\">\n        </sv-ng-matrixdropdown-cell>\n      </tr>\n    </tfoot>\n  </table>\n</div>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }, { type: MatrixRequiredHeader, selector: "sv-ng-matrixheaderrequired", inputs: ["column", "question"] }, { type: MatrixRowComponent, selector: "sv-ng-matrix-row", inputs: ["model", "question"] }, { type: MatrixDropdownCellComponent, selector: "sv-ng-matrixdropdown-cell", inputs: ["question", "cell"] }], 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixTableComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrix-table",
                    templateUrl: "./matrixtable.component.html"
                }]
        }], propDecorators: { question: [{
                type: Input
            }], table: [{
                type: Input
            }] } });

class MatrixDropdownComponent extends QuestionAngular {
}
MatrixDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDropdownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixDropdownComponent, selector: "sv-ng-matrixdropdown-question", usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n    <sv-ng-matrix-table *ngIf=\"model.renderedTable?.showTable\" [question]=\"model\" [table]=\"model.renderedTable\"></sv-ng-matrix-table>\n</ng-template>", components: [{ type: MatrixTableComponent, selector: "sv-ng-matrix-table", inputs: ["question", "table"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDropdownComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrixdropdown-question",
                    templateUrl: "./matrixdropdown.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("matrixdropdown-question", MatrixDropdownComponent);

class MatrixDynamicComponent extends QuestionAngular {
}
MatrixDynamicComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDynamicComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
MatrixDynamicComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixDynamicComponent, selector: "sv-ng-matrixdynamic-question", usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div #contentElement>\n    <div *ngIf=\"model.renderedTable.showAddRowOnTop\" [class]=\"model.cssClasses.footer\">\n      <ng-container *ngTemplateOutlet=\"addRowButton\"></ng-container>\n    </div>\n    <sv-ng-matrix-table *ngIf=\"model.renderedTable?.showTable\" [question]=\"model\" [table]=\"model.renderedTable\"></sv-ng-matrix-table>\n    <div *ngIf=\"!model.renderedTable.showTable\" [class]=\"model.cssClasses.noRowsSection\">\n      <div [class]=\"model.cssClasses.noRowsText\" [model]=\"model.locNoRowsText\" sv-ng-string></div>\n      <ng-container *ngIf=\"model.renderedTable.showAddRow\">\n        <ng-container  *ngTemplateOutlet=\"addRowButton\"></ng-container>\n      </ng-container>\n    </div>\n    <div *ngIf=\"model.renderedTable.showAddRowOnBottom\" [class]=\"model.cssClasses.footer\">\n      <ng-container *ngTemplateOutlet=\"addRowButton\"></ng-container>\n    </div>\n  </div>\n  <ng-template #addRowButton>\n    <button type=\"button\" [class]=\"model.getAddRowButtonCss(true)\" (click)=\"model.addRowUI()\">\n        <sv-ng-string [model]=\"model.locAddRowText\" ></sv-ng-string>\n        <span [class]=\"model.cssClasses.iconAdd\"></span>\n    </button>\n  </ng-template>\n</ng-template>", components: [{ type: MatrixTableComponent, selector: "sv-ng-matrix-table", inputs: ["question", "table"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDynamicComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrixdynamic-question",
                    templateUrl: "./matrixdynamic.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("matrixdynamic-question", MatrixDynamicComponent);

class MatrixDynamicRemoveButtonComponent {
    get question() {
        return this.model.data.question;
    }
    get row() {
        return this.model.data.row;
    }
    getModel() {
        return this.model;
    }
}
MatrixDynamicRemoveButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDynamicRemoveButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
MatrixDynamicRemoveButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixDynamicRemoveButtonComponent, selector: "sv-ng-matrix-remove-btn", inputs: { model: "model" }, ngImport: i0, template: "<button type=\"button\" [class]=\"question.getRemoveRowButtonCss()\" [disabled]=\"question.isInputReadOnly\" (click)=\"question.removeRowUI(row)\">\n  <sv-ng-string [model]=\"question.locRemoveRowText\" ></sv-ng-string>\n  <span [class]=\"question.cssClasses.iconRemove\"></span>\n</button>", components: [{ type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDynamicRemoveButtonComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrix-remove-btn",
                    templateUrl: "./remove-button.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-matrix-remove-button", MatrixDynamicRemoveButtonComponent);

class MatrixDetailButtonComponent {
    get question() {
        return this.model.data.question;
    }
    get row() {
        return this.model.data.row;
    }
    getModel() {
        return this.model;
    }
}
MatrixDetailButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDetailButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
MatrixDetailButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MatrixDetailButtonComponent, selector: "sv-ng-matrix-detail-btn", inputs: { model: "model" }, ngImport: i0, template: "<button type=\"button\" [class]=\"question.getDetailPanelButtonCss(row)\" (click)=\"row.showHideDetailPanelClick()\"\n  [attr.aria-expanded]=\"question.getIsDetailPanelShowing(row) ? 'true' : 'false'\"\n  [attr.aria-controls]=\"question.getIsDetailPanelShowing(row) ? row.detailPanelId : null\">\n  <svg [class]=\"this.question.getDetailPanelIconCss(this.row)\" \n    [iconName]=\"this.question.getDetailPanelIconId(this.row)\" [size]=\"'auto'\" sv-ng-svg-icon>\n  </svg>\n</button>", components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MatrixDetailButtonComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-matrix-detail-btn",
                    templateUrl: "./detail-button.component.html"
                }]
        }], propDecorators: { model: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-matrix-detail-button", MatrixDetailButtonComponent);

class ExpressionComponent extends QuestionAngular {
}
ExpressionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ExpressionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ExpressionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ExpressionComponent, selector: "sv-ng-expression", usesInheritance: true, ngImport: i0, template: "<div [class]='model.cssClasses.root' #contentElement>{{ model.formatedValue }}</div>", isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ExpressionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-expression",
                    template: "<div [class]='model.cssClasses.root' #contentElement>{{ model.formatedValue }}</div>"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("expression-question", ExpressionComponent);

class ImageQuestionComponent extends QuestionAngular {
    ngAfterViewInit() {
        this.model.locImageLink.onChanged = () => {
            this.detectChanges();
        };
        super.ngAfterViewInit();
    }
    ngOnDestroy() {
        this.model.locImageLink.onChanged = () => { };
        super.ngOnDestroy();
    }
}
ImageQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImageQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
ImageQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ImageQuestionComponent, selector: "sv-ng-image-question", usesInheritance: true, ngImport: i0, template: "<div [class]=\"model.cssClasses.root\" #contentElement>\n  <img\n    *ngIf=\"model.renderedMode === 'image'\"\n    [visible]=\"!!model.locImageLink.renderedHtml && !model.contentNotLoaded\"\n    [class]=\"model.getImageCss()\"\n    [attr.src]=\"model.locImageLink.renderedHtml\"\n    [attr.alt]=\"model.altText || model.title\"\n    [attr.width]=\"model.renderedWidth\"\n    [attr.height]=\"model.renderedHeight\"\n    [style]=\"{ objectFit: model.imageFit,  width: model.renderedStyleWidth, height: model.renderedStyleHeight }\"\n    (load)=\"model.onLoadHandler()\"\n    (error)=\"model.onErrorHandler()\"\n  /><video\n    controls\n    *ngIf=\"model.renderedMode === 'video'\"\n    [visible]=\"!!model.locImageLink.renderedHtml && !model.contentNotLoaded\"\n    [class]=\"model.getImageCss()\"\n    [attr.src]=\"model.locImageLink.renderedHtml\"\n    [attr.width]=\"model.renderedWidth\"\n    [attr.height]=\"model.renderedHeight\"\n    [style]=\"{ objectFit: model.imageFit,  width: model.renderedStyleWidth, height: model.renderedStyleHeight }\"\n    (loadedmetadata)=\"model.onLoadHandler()\"\n    (error)=\"model.onErrorHandler()\"\n  ></video>\n  <iframe\n    *ngIf=\"model.renderedMode === 'youtube'\"\n    [class]=\"model.getImageCss()\"\n    [attr.src]=\"model.locImageLink.renderedHtml | safeResourceUrl\"\n    [attr.width]=\"model.renderedWidth\"\n    [attr.height]=\"model.renderedHeight\"\n    [style]=\"{ objectFit: model.imageFit,  width: model.renderedStyleWidth, height: model.renderedStyleHeight }\"\n    ></iframe>\n    <div *ngIf=\"!model.locImageLink.renderedHtml || model.contentNotLoaded\" [class]=\"model.cssClasses.noImage\">\n      <svg [iconName]=\"model.cssClasses.noImageSvgIconId\" [size]=\"48\" sv-ng-svg-icon></svg>\n    </div>\n</div>", components: [{ type: SvgIconComponent, selector: "'[sv-ng-svg-icon]'", inputs: ["size", "width", "height", "iconName", "partCss", "css", "title"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: VisibleDirective, selector: "[visible]", inputs: ["visible"] }], pipes: { "safeResourceUrl": SafeResourceUrlPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImageQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-image-question",
                    templateUrl: "./image.component.html"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("image-question", ImageQuestionComponent);

class QuestionErrorComponent {
}
QuestionErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
QuestionErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: QuestionErrorComponent, selector: "sv-question-error", inputs: { error: "error", cssClasses: "cssClasses", element: "element" }, ngImport: i0, template: "<div>\n  <span\n    [class]=\"cssClasses ? cssClasses.error.icon : 'panel-error-icon'\"\n    aria-hidden=\"true\"\n  ></span>\n  <span [class]=\"cssClasses ? 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"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionErrorComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-question-error",
                    templateUrl: "./question-error.component.html"
                }]
        }], propDecorators: { error: [{
                type: Input
            }], cssClasses: [{
                type: Input
            }], element: [{
                type: Input
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-question-error", QuestionErrorComponent);

class CustomQuestionComponent extends QuestionAngular {
    get contentQuestion() {
        return this.model.contentQuestion;
    }
    getComponentName(element) { return getComponentName(element); }
}
CustomQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
CustomQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomQuestionComponent, selector: "sv-ng-custom-question", usesInheritance: true, ngImport: i0, template: "<ng-template [component]='{ name: getComponentName(contentQuestion), data: { model: contentQuestion } }'></ng-template>", isInline: true, directives: [{ type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-custom-question",
                    template: "<ng-template [component]='{ name: getComponentName(contentQuestion), data: { model: contentQuestion } }'></ng-template>"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("custom-question", CustomQuestionComponent);

class CompositeQuestionComponent extends QuestionAngular {
    get contentPanel() {
        return this.model.contentPanel;
    }
}
CompositeQuestionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CompositeQuestionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
CompositeQuestionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CompositeQuestionComponent, selector: "sv-ng-composite-question", usesInheritance: true, ngImport: i0, template: "<sv-ng-panel [model]='contentPanel'></sv-ng-panel>", isInline: true, components: [{ type: PanelComponent, selector: "sv-ng-panel, '[sv-ng-panel]'", inputs: ["model"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CompositeQuestionComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-composite-question",
                    template: "<sv-ng-panel [model]='contentPanel'></sv-ng-panel>"
                }]
        }] });
AngularComponentFactory.Instance.registerComponent("composite-question", CompositeQuestionComponent);

class HeaderCellComponent extends EmbeddedViewContentComponent {
}
HeaderCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HeaderCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
HeaderCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: HeaderCellComponent, selector: "sv-ng-header-cell", inputs: { model: "model" }, viewQueries: [{ propertyName: "actionContent", first: true, predicate: ["actionContent"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: "\n<ng-template #template>\n  <div [class]=\"model.css\" [style]=\"model.style\">\n    <div class=\"sv-header__cell-content\" [style]=\"model.contentStyle\">\n      <div *ngIf=\"model.showLogo\" class=\"sv-header__logo\">\n        <div [class]=\"model.survey.logoClassNames\">\n          <ng-template [component]=\"{ name: model.survey.getElementWrapperComponentName(model.survey, 'logo-image'), data: { data: model.survey.getElementWrapperComponentData(model.survey, 'logo-image') } }\"></ng-template>\n        </div>\n      </div>\n      <div *ngIf=\"model.showTitle\" class=\"sv-header__title\" [style]=\"{ maxWidth: model.textAreaWidth }\">\n        <sv-ng-element-title [element]=\"model.survey\"></sv-ng-element-title>\n      </div>\n      <div *ngIf=\"model.showDescription\" class=\"sv-header__description\" [style]=\"{ maxWidth: model.textAreaWidth }\">\n        <div *ngIf=\"model.survey.renderedHasDescription\" [class]=\"model.survey.css.description\" [model]=\"model.survey.locDescription\" sv-ng-string></div>\n      </div>\n    </div>\n  </div>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: ElementTitleComponent, selector: "sv-ng-element-title", inputs: ["element"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HeaderCellComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-header-cell",
                    templateUrl: "./header-cell.component.html",
                    styles: [":host { display: none; }"],
                }]
        }], propDecorators: { model: [{
                type: Input
            }], actionContent: [{
                type: ViewChild,
                args: ["actionContent", { read: ViewContainerRef, static: true }]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-header-cell", HeaderCellComponent);

class HeaderMobileComponent extends EmbeddedViewContentComponent {
}
HeaderMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HeaderMobileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
HeaderMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: HeaderMobileComponent, selector: "sv-ng-header-mobile", inputs: { model: "model" }, viewQueries: [{ propertyName: "actionContent", first: true, predicate: ["actionContent"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: "\n<ng-template #template>\n  <div class=\"sv-header--mobile\">\n    <div *ngIf=\"model.survey.hasLogo\" class=\"sv-header__logo\">\n      <div [class]=\"model.survey.logoClassNames\">\n        <ng-template [component]=\"{ name: model.survey.getElementWrapperComponentName(model.survey, 'logo-image'), data: { data: model.survey.getElementWrapperComponentData(model.survey, 'logo-image') } }\"></ng-template>\n      </div>\n    </div>\n    <div *ngIf=\"model.survey.hasTitle\" class=\"sv-header__title\" [style]=\"{ maxWidth: model.renderedTextAreaWidth }\">\n      <sv-ng-element-title [element]=\"model.survey\"></sv-ng-element-title>\n    </div>\n    <div *ngIf=\"model.survey.renderedHasDescription\" class=\"sv-header__description\" [style]=\"{ maxWidth: model.renderedTextAreaWidth }\">\n      <div *ngIf=\"model.survey.renderedHasDescription\" [class]=\"model.survey.css.description\" [model]=\"model.survey.locDescription\" sv-ng-string></div>\n    </div>\n  </div>\n</ng-template>", styles: [":host { display: none; }"], components: [{ type: ElementTitleComponent, selector: "sv-ng-element-title", inputs: ["element"] }, { type: SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DynamicComponentDirective, selector: "[component]", inputs: ["component"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HeaderMobileComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-ng-header-mobile",
                    templateUrl: "./header-mobile.component.html",
                    styles: [":host { display: none; }"],
                }]
        }], propDecorators: { model: [{
                type: Input
            }], actionContent: [{
                type: ViewChild,
                args: ["actionContent", { read: ViewContainerRef, static: true }]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-header-cell", HeaderMobileComponent);

class HeaderComponent extends BaseAngular {
    getModel() {
        this.model.survey = this.survey;
        return this.model;
    }
}
HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: HeaderComponent, selector: "sv-header, sv-ng-header", inputs: { model: "model", survey: "survey" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n  <div *ngIf=\"(survey.headerView === 'advanced') && !model.isEmpty\" [class]=\"model.headerClasses\" [style]=\"{ height: model.renderedHeight }\">\n    <div *ngIf=\"!!model.backgroundImage\" [style]=\"model.backgroundImageStyle\" [class]=\"model.backgroundImageClasses\"></div>\n    <div *ngIf=\"!survey.isMobile\" [class]=\"model.contentClasses\" [style.maxWidth]=\"model.maxWidth\">\n      <ng-container *ngFor=\"let cell of model.cells\">\n        <sv-ng-header-cell [model]=\"cell\"></sv-ng-header-cell>\n      </ng-container>\n    </div>\n    <div *ngIf=\"survey.isMobile\">\n      <sv-ng-header-mobile [model]=\"model\"></sv-ng-header-mobile>\n    </div>\n  </div>\n</ng-template>", styles: [":host { display: none }"], components: [{ type: HeaderCellComponent, selector: "sv-ng-header-cell", inputs: ["model"] }, { type: HeaderMobileComponent, selector: "sv-ng-header-mobile", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: HeaderComponent, decorators: [{
            type: Component,
            args: [{
                    selector: "sv-header, sv-ng-header",
                    templateUrl: "./header.component.html",
                    styles: [":host { display: none }"]
                }]
        }], propDecorators: { model: [{
                type: Input
            }], survey: [{
                type: Input
            }], container: [{
                type: ViewChild,
                args: ["container"]
            }] } });
AngularComponentFactory.Instance.registerComponent("sv-header", HeaderComponent);

class SurveyModule {
}
SurveyModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
SurveyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyModule, declarations: [VisibleDirective, Key2ClickDirective, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, ElementComponent, TemplateRendererComponent,
        SurveyComponent, SurveyContentComponent, PopupSurveyComponent, PageComponent, PanelComponent, QuestionComponent, StringViewerComponent, SurveyStringComponent, StringEditorComponent,
        TextAreaComponent,
        QuestionSkeletonComponent, ScrollComponent, TextQuestionComponent, RadiogroupComponent, RadiogroupItemComponent, CheckboxComponent, CheckboxItemComponent,
        DropdownComponent, DropdownQuestionComponent, DropdownSelectComponent, DropdownOptionItemComponent,
        PopupComponent, PopupBaseContainerComponent, PopupPointerComponent,
        CharacterCounterComponent, ListComponent, ListItemComponent, ListItemContentComponent, ListItemGroupComponent, RatingItemComponent, RatingItemStarComponent, RatingItemSmileyComponent,
        TagboxFilterComponent, TagboxComponent, TagboxQuestionComponent, TagboxItemComponent,
        ActionBarComponent, ActionComponent, ActionBarItemComponent, ActionBarItemDropdownComponent, HtmlQuestionComponent,
        SelectBaseItemComponent, SelectBaseComponent, SurveyCommentComponent, SurveyCommentOtherComponent, ElementHeaderComponent, ElementTitleActionsComponent, ElementTitleComponent, DynamicHeadComponent, RowComponent,
        RatingQuestionComponent, RatingDropdownItemComponent, RatingDropdownComponent, BooleanQuestionComponent, BooleanCheckboxComponent, BooleanRadioComponent, BooleanRadioItemComponent, ImagePickerItemComponent, ImagePickerQuestionComponent, ImageQuestionComponent,
        SurveyHeaderComponent, ProgressDefaultComponent, ProgressButtonsComponent, ProgressTocComponent, SurveyNavigationButton, MatrixQuestionComponent, SvgIconComponent, FileQuestionComponent, SafeUrlPipe, SafeHtmlPipe, CommentQuestionComponent, SignaturePadQuestionComponent, ErrorsComponent,
        MultipleTextComponent, MultipleTextItemComponent, DynamicComponentDirective, RankingQuestionComponent, RankingItemComponent, RankingItemContentComponent, PanelDynamicQuestionComponent, EmbeddedViewContentComponent, CustomWidgetComponent,
        MatrixCellComponent, MatrixDropdownCellComponent, MatrixTableComponent, MatrixDropdownComponent,
        MatrixDynamicComponent, MatrixDetailButtonComponent, MatrixDynamicRemoveButtonComponent, MatrixDynamicDragDropIconComponent, MatrixRequiredHeader, ExpressionComponent, SafeResourceUrlPipe, BrandInfoComponent, QuestionErrorComponent,
        CustomQuestionComponent, CompositeQuestionComponent, ButtonGroupItemComponent, ButtonGroupQuestionComponent, MatrixRowComponent, ModalComponent, LogoImageComponent, SkeletonComponent, TimerPanelComponent, PaneldynamicRemoveButtonComponent,
        NotifierComponent, ComponentsContainerComponent, MultipleTextRowComponent, LoadingIndicatorComponent, HeaderComponent, HeaderCellComponent, HeaderMobileComponent, ChooseFileBtn, FilePreviewComponent, SvgBundleComponent, FileItemComponent, FilePageComponent], imports: [CommonModule, FormsModule], exports: [VisibleDirective, Key2ClickDirective, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, ElementComponent, TemplateRendererComponent,
        SurveyComponent, SurveyContentComponent, PopupSurveyComponent, PageComponent, PanelComponent, QuestionComponent, StringViewerComponent, SurveyStringComponent, StringEditorComponent,
        TextAreaComponent,
        QuestionSkeletonComponent, ScrollComponent, TextQuestionComponent, RadiogroupComponent, RadiogroupItemComponent, CheckboxComponent, CheckboxItemComponent,
        CharacterCounterComponent,
        DropdownComponent, DropdownQuestionComponent, DropdownSelectComponent, DropdownOptionItemComponent,
        PopupComponent, PopupBaseContainerComponent, PopupPointerComponent,
        CharacterCounterComponent, ListComponent, ListItemComponent, ListItemContentComponent, ListItemGroupComponent, RatingItemComponent, RatingItemStarComponent, RatingItemSmileyComponent,
        TagboxFilterComponent, TagboxComponent, TagboxQuestionComponent, TagboxItemComponent,
        ActionBarComponent, ActionComponent, ActionBarItemComponent, ActionBarItemDropdownComponent, HtmlQuestionComponent,
        SelectBaseItemComponent, SelectBaseComponent, SurveyCommentComponent, SurveyCommentOtherComponent, ElementHeaderComponent, ElementTitleComponent, DynamicHeadComponent, RowComponent,
        RatingQuestionComponent, RatingDropdownItemComponent, RatingDropdownComponent, BooleanQuestionComponent, BooleanCheckboxComponent, BooleanRadioComponent, BooleanRadioItemComponent, ImagePickerItemComponent, ImagePickerQuestionComponent, ImageQuestionComponent,
        SurveyHeaderComponent, ProgressDefaultComponent, ProgressButtonsComponent, SurveyNavigationButton, MatrixQuestionComponent, SvgIconComponent, FileQuestionComponent, SafeUrlPipe, SafeHtmlPipe, CommentQuestionComponent, SignaturePadQuestionComponent, ErrorsComponent,
        MultipleTextComponent, MultipleTextItemComponent, DynamicComponentDirective, RankingQuestionComponent, RankingItemComponent, RankingItemContentComponent, PanelDynamicQuestionComponent, EmbeddedViewContentComponent, CustomWidgetComponent,
        MatrixCellComponent, MatrixDropdownCellComponent, MatrixTableComponent, MatrixDropdownComponent,
        MatrixDynamicComponent, MatrixDetailButtonComponent, MatrixDynamicRemoveButtonComponent, MatrixDynamicDragDropIconComponent, MatrixRequiredHeader, ExpressionComponent, SafeResourceUrlPipe,
        CustomQuestionComponent, CompositeQuestionComponent, ButtonGroupQuestionComponent, ModalComponent, LogoImageComponent, SkeletonComponent, TimerPanelComponent, PaneldynamicRemoveButtonComponent,
        NotifierComponent, ComponentsContainerComponent, MultipleTextRowComponent, LoadingIndicatorComponent, HeaderComponent, HeaderCellComponent, HeaderMobileComponent, FilePreviewComponent, SvgBundleComponent, FileItemComponent, FilePageComponent] });
SurveyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyModule, providers: [PopupService], imports: [[
            CommonModule, FormsModule
        ]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SurveyModule, decorators: [{
            type: NgModule,
            args: [{
                    declarations: [
                        VisibleDirective, Key2ClickDirective, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, ElementComponent, TemplateRendererComponent,
                        SurveyComponent, SurveyContentComponent, PopupSurveyComponent, PageComponent, PanelComponent, QuestionComponent, StringViewerComponent, SurveyStringComponent, StringEditorComponent,
                        TextAreaComponent,
                        QuestionSkeletonComponent, ScrollComponent, TextQuestionComponent, RadiogroupComponent, RadiogroupItemComponent, CheckboxComponent, CheckboxItemComponent,
                        DropdownComponent, DropdownQuestionComponent, DropdownSelectComponent, DropdownOptionItemComponent,
                        PopupComponent, PopupBaseContainerComponent, PopupPointerComponent,
                        CharacterCounterComponent, ListComponent, ListItemComponent, ListItemContentComponent, ListItemGroupComponent, RatingItemComponent, RatingItemStarComponent, RatingItemSmileyComponent,
                        TagboxFilterComponent, TagboxComponent, TagboxQuestionComponent, TagboxItemComponent,
                        ActionBarComponent, ActionComponent, ActionBarItemComponent, ActionBarItemDropdownComponent, HtmlQuestionComponent,
                        SelectBaseItemComponent, SelectBaseComponent, SurveyCommentComponent, SurveyCommentOtherComponent, ElementHeaderComponent, ElementTitleActionsComponent, ElementTitleComponent, DynamicHeadComponent, RowComponent,
                        RatingQuestionComponent, RatingDropdownItemComponent, RatingDropdownComponent, BooleanQuestionComponent, BooleanCheckboxComponent, BooleanRadioComponent, BooleanRadioItemComponent, ImagePickerItemComponent, ImagePickerQuestionComponent, ImageQuestionComponent,
                        SurveyHeaderComponent, ProgressDefaultComponent, ProgressButtonsComponent, ProgressTocComponent, SurveyNavigationButton, MatrixQuestionComponent, SvgIconComponent, FileQuestionComponent, SafeUrlPipe, SafeHtmlPipe, CommentQuestionComponent, SignaturePadQuestionComponent, ErrorsComponent,
                        MultipleTextComponent, MultipleTextItemComponent, DynamicComponentDirective, RankingQuestionComponent, RankingItemComponent, RankingItemContentComponent, PanelDynamicQuestionComponent, EmbeddedViewContentComponent, CustomWidgetComponent,
                        MatrixCellComponent, MatrixDropdownCellComponent, MatrixTableComponent, MatrixDropdownComponent,
                        MatrixDynamicComponent, MatrixDetailButtonComponent, MatrixDynamicRemoveButtonComponent, MatrixDynamicDragDropIconComponent, MatrixRequiredHeader, ExpressionComponent, SafeResourceUrlPipe, BrandInfoComponent, QuestionErrorComponent,
                        CustomQuestionComponent, CompositeQuestionComponent, ButtonGroupItemComponent, ButtonGroupQuestionComponent, MatrixRowComponent, ModalComponent, LogoImageComponent, SkeletonComponent, TimerPanelComponent, PaneldynamicRemoveButtonComponent,
                        NotifierComponent, ComponentsContainerComponent, MultipleTextRowComponent, LoadingIndicatorComponent, HeaderComponent, HeaderCellComponent, HeaderMobileComponent, ChooseFileBtn, FilePreviewComponent, SvgBundleComponent, FileItemComponent, FilePageComponent
                    ],
                    imports: [
                        CommonModule, FormsModule
                    ],
                    exports: [
                        VisibleDirective, Key2ClickDirective, PanelDynamicAddBtn, PanelDynamicNextBtn, PanelDynamicPrevBtn, PanelDynamicProgressText, ElementComponent, TemplateRendererComponent,
                        SurveyComponent, SurveyContentComponent, PopupSurveyComponent, PageComponent, PanelComponent, QuestionComponent, StringViewerComponent, SurveyStringComponent, StringEditorComponent,
                        TextAreaComponent,
                        QuestionSkeletonComponent, ScrollComponent, TextQuestionComponent, RadiogroupComponent, RadiogroupItemComponent, CheckboxComponent, CheckboxItemComponent,
                        CharacterCounterComponent,
                        DropdownComponent, DropdownQuestionComponent, DropdownSelectComponent, DropdownOptionItemComponent,
                        PopupComponent, PopupBaseContainerComponent, PopupPointerComponent,
                        CharacterCounterComponent, ListComponent, ListItemComponent, ListItemContentComponent, ListItemGroupComponent, RatingItemComponent, RatingItemStarComponent, RatingItemSmileyComponent,
                        TagboxFilterComponent, TagboxComponent, TagboxQuestionComponent, TagboxItemComponent,
                        ActionBarComponent, ActionComponent, ActionBarItemComponent, ActionBarItemDropdownComponent, HtmlQuestionComponent,
                        SelectBaseItemComponent, SelectBaseComponent, SurveyCommentComponent, SurveyCommentOtherComponent, ElementHeaderComponent, ElementTitleComponent, DynamicHeadComponent, RowComponent,
                        RatingQuestionComponent, RatingDropdownItemComponent, RatingDropdownComponent, BooleanQuestionComponent, BooleanCheckboxComponent, BooleanRadioComponent, BooleanRadioItemComponent, ImagePickerItemComponent, ImagePickerQuestionComponent, ImageQuestionComponent,
                        SurveyHeaderComponent, ProgressDefaultComponent, ProgressButtonsComponent, SurveyNavigationButton, MatrixQuestionComponent, SvgIconComponent, FileQuestionComponent, SafeUrlPipe, SafeHtmlPipe, CommentQuestionComponent, SignaturePadQuestionComponent, ErrorsComponent,
                        MultipleTextComponent, MultipleTextItemComponent, DynamicComponentDirective, RankingQuestionComponent, RankingItemComponent, RankingItemContentComponent, PanelDynamicQuestionComponent, EmbeddedViewContentComponent, CustomWidgetComponent,
                        MatrixCellComponent, MatrixDropdownCellComponent, MatrixTableComponent, MatrixDropdownComponent,
                        MatrixDynamicComponent, MatrixDetailButtonComponent, MatrixDynamicRemoveButtonComponent, MatrixDynamicDragDropIconComponent, MatrixRequiredHeader, ExpressionComponent, SafeResourceUrlPipe,
                        CustomQuestionComponent, CompositeQuestionComponent, ButtonGroupQuestionComponent, ModalComponent, LogoImageComponent, SkeletonComponent, TimerPanelComponent, PaneldynamicRemoveButtonComponent,
                        NotifierComponent, ComponentsContainerComponent, MultipleTextRowComponent, LoadingIndicatorComponent, HeaderComponent, HeaderCellComponent, HeaderMobileComponent, FilePreviewComponent, SvgBundleComponent, FileItemComponent, FilePageComponent
                    ],
                    providers: [PopupService],
                }]
        }] });

/**
 * Generated bundle index. Do not edit.
 */

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, FileItemComponent, FilePageComponent, FilePreviewComponent, FileQuestionComponent, HeaderCellComponent, HeaderComponent, HeaderMobileComponent, HtmlQuestionComponent, ImagePickerItemComponent, ImagePickerQuestionComponent, ImageQuestionComponent, Key2ClickDirective, ListComponent, ListItemComponent, ListItemContentComponent, ListItemGroupComponent, LoadingIndicatorComponent, LogoImageComponent, MatrixCellComponent, MatrixDetailButtonComponent, MatrixDropdownCellComponent, 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, QuestionErrorComponent, QuestionSkeletonComponent, RadiogroupComponent, RadiogroupItemComponent, RankingItemComponent, RankingItemContentComponent, RankingQuestionComponent, RatingDropdownComponent, RatingDropdownItemComponent, RatingItemComponent, RatingItemSmileyComponent, RatingItemStarComponent, RatingQuestionComponent, RowComponent, SafeHtmlPipe, SafeResourceUrlPipe, SafeUrlPipe, ScrollComponent, SelectBaseComponent, SelectBaseItemComponent, SignaturePadQuestionComponent, SkeletonComponent, StringEditorComponent, StringViewerComponent, SurveyCommentComponent, SurveyCommentOtherComponent, SurveyComponent, SurveyContentComponent, SurveyHeaderComponent, SurveyModule, SurveyNavigationButton, SurveyStringComponent, SvgBundleComponent, SvgIconComponent, TagboxComponent, TagboxFilterComponent, TagboxItemComponent, TagboxQuestionComponent, TemplateRendererComponent, TextAreaComponent, TextQuestionComponent, TimerPanelComponent, VisibleDirective, getComponentName };
//# sourceMappingURL=survey-angular-ui.js.map