%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/graphicd/public_html/vebto/public/client/
Upload File :
Create Path :
Current File : /home/graphicd/public_html/vebto/public/client/24-es5.6a3e74a6c36d606611f6.js.map

{"version":3,"sources":["webpack:///node_modules/@angular/material/__ivy_ngcc__/fesm2015/radio.js","webpack:///src/common/core/ui/info-popover/info-popover.module.ts","webpack:///src/common/workspaces/crupdate-workspace-modal/crupdate-workspace-modal.component.html","webpack:///src/common/workspaces/crupdate-workspace-modal/crupdate-workspace-modal.component.ts","webpack:///src/common/workspaces/leave-workspace-confirmation.ts","webpack:///src/common/workspaces/workspace-messages.ts","webpack:///src/common/workspaces/manage-workspace-members-modal/manage-workspace-members-modal.component.html","webpack:///src/common/workspaces/manage-workspace-members-modal/manage-workspace-members-modal.component.ts","webpack:///src/common/workspaces/workspace.module.ts"],"names":["_c0","_c1","enterDuration","_c2","MAT_RADIO_DEFAULT_OPTIONS","InjectionToken","providedIn","factory","color","nextUniqueId","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","MatRadioGroup","multi","MatRadioChange","constructor","source","value","this","MAT_RADIO_GROUP","_MatRadioGroupBase","_changeDetector","_value","_name","_selected","_isInitialized","_labelPosition","_disabled","_required","_controlValueAccessorChangeFn","onTouched","change","EventEmitter","_updateRadioButtonNames","v","_markRadiosForCheck","newValue","_updateSelectedRadioFromValue","_checkSelectedRadioButton","checked","selected","coerceBooleanProperty","ngAfterContentInit","_touch","_radios","forEach","radio","name","_markForCheck","_emitChangeEvent","emit","writeValue","markForCheck","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","disabled","ɵfac","t","ɵngcc0","ɵdir","type","inputs","labelPosition","required","outputs","ɵMatRadioGroup_BaseFactory","selectors","contentQueries","rf","ctx","dirIndex","_t","MatRadioButton","hostAttrs","exportAs","features","_MatRadioButtonMixinBase","mixinDisableRipple","mixinTabIndex","_elementRef","_MatRadioButtonBase","radioGroup","elementRef","_focusMonitor","_radioDispatcher","_animationMode","_providerOverride","tabIndex","super","_uniqueId","id","_checked","_removeUniqueSelectionListener","coerceNumberProperty","listen","newCheckedState","notify","_setDisabled","_color","focus","options","origin","focusVia","_inputElement","nativeElement","ngOnInit","ngAfterViewInit","monitor","subscribe","focusOrigin","ngOnDestroy","stopMonitoring","_isRippleDisabled","disableRipple","_onInputClick","event","stopPropagation","_onInputChange","groupValueChanged","ɵngcc1","ɵngcc2","String","viewQuery","first","ariaLabel","ariaLabelledby","ariaDescribedby","changeDetector","focusMonitor","radioDispatcher","animationMode","providerOverride","ANIMATION_MODULE_TYPE","ɵcmp","hostVars","hostBindings","ngContentSelectors","decls","vars","consts","template","$event","_r0","inputId","directives","ɵngcc3","styles","encapsulation","changeDetection","MatRadioModule","ɵmod","ɵinj","imports","MatRippleModule","MatCommonModule","InfoPopoverModule","CrupdateWorkspaceModalComponent","dialogRef","data","workspaces","toast","loading$","errors$","form","workspace","patchValue","next","update","create","pipe","response","open","close","errResponse","errors","LEAVE_WORKSPACE_CONFIRMATION","title","body","bodyBold","ok","WorkspaceMessages","LEFT_WORKSPACE","MEMBER_DELETED","INVITES_SENT","INVITE_RESENT","ROLE_ASSIGNED","ManageWorkspaceMembersModalComponent","valueLists","currentUser","modal","inviting$","BehaviorSubject","deleting$","loadingMembers$","workspaceRoles$","members$","peopleToInvite","canInvite","canEdit","canDelete","get","workspaceRoles","finalize","invites","members","setCurrentUserPermissions","emails","filter","email","find","m","length","reset","payload","roleId","r","invitePeople","invite","resendInvite","member","role","changeRole","i","findIndex","role_name","role_id","model_type","deleteMember","deleteInvite","splice","show","afterClosed","confirmed","is_owner","permissions","p","WorkspaceModule","components","crupdateModal","manageMembers"],"mappings":"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","file":"x","sourcesContent":["import { InjectionToken, forwardRef, EventEmitter, Directive, ChangeDetectorRef, Output, Input, ContentChildren, ElementRef, ViewChild, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Attribute, NgModule } from '@angular/core';\nimport { mixinDisableRipple, mixinTabIndex, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/cdk/collections';\nimport * as ɵngcc3 from '@angular/material/core';\n\nconst _c0 = [\"input\"];\nconst _c1 = function () { return { enterDuration: 150 }; };\nconst _c2 = [\"*\"];\nconst MAT_RADIO_DEFAULT_OPTIONS = new InjectionToken('mat-radio-default-options', {\n    providedIn: 'root',\n    factory: MAT_RADIO_DEFAULT_OPTIONS_FACTORY\n});\nfunction MAT_RADIO_DEFAULT_OPTIONS_FACTORY() {\n    return {\n        color: 'accent'\n    };\n}\n// Increasing integer for generating unique ids for radio components.\nlet nextUniqueId = 0;\n/**\n * Provider Expression that allows mat-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * @docs-private\n */\nconst MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => MatRadioGroup),\n    multi: true\n};\n/** Change event object emitted by MatRadio and MatRadioGroup. */\nclass MatRadioChange {\n    constructor(\n    /** The MatRadioButton that emits the change event. */\n    source, \n    /** The value of the MatRadioButton. */\n    value) {\n        this.source = source;\n        this.value = value;\n    }\n}\n/**\n * Injection token that can be used to inject instances of `MatRadioGroup`. It serves as\n * alternative token to the actual `MatRadioGroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_RADIO_GROUP = new InjectionToken('MatRadioGroup');\n/**\n * Base class with all of the `MatRadioGroup` functionality.\n * @docs-private\n */\nclass _MatRadioGroupBase {\n    constructor(_changeDetector) {\n        this._changeDetector = _changeDetector;\n        /** Selected value for the radio group. */\n        this._value = null;\n        /** The HTML name attribute applied to radio buttons in this group. */\n        this._name = `mat-radio-group-${nextUniqueId++}`;\n        /** The currently selected radio button. Should match value. */\n        this._selected = null;\n        /** Whether the `value` has been set to its initial value. */\n        this._isInitialized = false;\n        /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n        this._labelPosition = 'after';\n        /** Whether the radio group is disabled. */\n        this._disabled = false;\n        /** Whether the radio group is required. */\n        this._required = false;\n        /** The method to be called in order to update ngModel */\n        this._controlValueAccessorChangeFn = () => { };\n        /**\n         * onTouch function registered via registerOnTouch (ControlValueAccessor).\n         * @docs-private\n         */\n        this.onTouched = () => { };\n        /**\n         * Event emitted when the group value changes.\n         * Change events are only emitted when the value changes due to user interaction with\n         * a radio button (the same behavior as `<input type-\"radio\">`).\n         */\n        this.change = new EventEmitter();\n    }\n    /** Name of the radio button group. All radio buttons inside this group will use this name. */\n    get name() { return this._name; }\n    set name(value) {\n        this._name = value;\n        this._updateRadioButtonNames();\n    }\n    /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n    get labelPosition() {\n        return this._labelPosition;\n    }\n    set labelPosition(v) {\n        this._labelPosition = v === 'before' ? 'before' : 'after';\n        this._markRadiosForCheck();\n    }\n    /**\n     * Value for the radio-group. Should equal the value of the selected radio button if there is\n     * a corresponding radio button with a matching value. If there is not such a corresponding\n     * radio button, this value persists to be applied in case a new radio button is added with a\n     * matching value.\n     */\n    get value() { return this._value; }\n    set value(newValue) {\n        if (this._value !== newValue) {\n            // Set this before proceeding to ensure no circular loop occurs with selection.\n            this._value = newValue;\n            this._updateSelectedRadioFromValue();\n            this._checkSelectedRadioButton();\n        }\n    }\n    _checkSelectedRadioButton() {\n        if (this._selected && !this._selected.checked) {\n            this._selected.checked = true;\n        }\n    }\n    /**\n     * The currently selected radio button. If set to a new radio button, the radio group value\n     * will be updated to match the new selected button.\n     */\n    get selected() { return this._selected; }\n    set selected(selected) {\n        this._selected = selected;\n        this.value = selected ? selected.value : null;\n        this._checkSelectedRadioButton();\n    }\n    /** Whether the radio group is disabled */\n    get disabled() { return this._disabled; }\n    set disabled(value) {\n        this._disabled = coerceBooleanProperty(value);\n        this._markRadiosForCheck();\n    }\n    /** Whether the radio group is required */\n    get required() { return this._required; }\n    set required(value) {\n        this._required = coerceBooleanProperty(value);\n        this._markRadiosForCheck();\n    }\n    /**\n     * Initialize properties once content children are available.\n     * This allows us to propagate relevant attributes to associated buttons.\n     */\n    ngAfterContentInit() {\n        // Mark this component as initialized in AfterContentInit because the initial value can\n        // possibly be set by NgModel on MatRadioGroup, and it is possible that the OnInit of the\n        // NgModel occurs *after* the OnInit of the MatRadioGroup.\n        this._isInitialized = true;\n    }\n    /**\n     * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n     * radio buttons upon their blur.\n     */\n    _touch() {\n        if (this.onTouched) {\n            this.onTouched();\n        }\n    }\n    _updateRadioButtonNames() {\n        if (this._radios) {\n            this._radios.forEach(radio => {\n                radio.name = this.name;\n                radio._markForCheck();\n            });\n        }\n    }\n    /** Updates the `selected` radio button from the internal _value state. */\n    _updateSelectedRadioFromValue() {\n        // If the value already matches the selected radio, do nothing.\n        const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n        if (this._radios && !isAlreadySelected) {\n            this._selected = null;\n            this._radios.forEach(radio => {\n                radio.checked = this.value === radio.value;\n                if (radio.checked) {\n                    this._selected = radio;\n                }\n            });\n        }\n    }\n    /** Dispatch change event with current selection and group value. */\n    _emitChangeEvent() {\n        if (this._isInitialized) {\n            this.change.emit(new MatRadioChange(this._selected, this._value));\n        }\n    }\n    _markRadiosForCheck() {\n        if (this._radios) {\n            this._radios.forEach(radio => radio._markForCheck());\n        }\n    }\n    /**\n     * Sets the model value. Implemented as part of ControlValueAccessor.\n     * @param value\n     */\n    writeValue(value) {\n        this.value = value;\n        this._changeDetector.markForCheck();\n    }\n    /**\n     * Registers a callback to be triggered when the model value changes.\n     * Implemented as part of ControlValueAccessor.\n     * @param fn Callback to be registered.\n     */\n    registerOnChange(fn) {\n        this._controlValueAccessorChangeFn = fn;\n    }\n    /**\n     * Registers a callback to be triggered when the control is touched.\n     * Implemented as part of ControlValueAccessor.\n     * @param fn Callback to be registered.\n     */\n    registerOnTouched(fn) {\n        this.onTouched = fn;\n    }\n    /**\n     * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n     * @param isDisabled Whether the control should be disabled.\n     */\n    setDisabledState(isDisabled) {\n        this.disabled = isDisabled;\n        this._changeDetector.markForCheck();\n    }\n}\n_MatRadioGroupBase.ɵfac = function _MatRadioGroupBase_Factory(t) { return new (t || _MatRadioGroupBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\n_MatRadioGroupBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: _MatRadioGroupBase, inputs: { name: \"name\", labelPosition: \"labelPosition\", value: \"value\", selected: \"selected\", disabled: \"disabled\", required: \"required\", color: \"color\" }, outputs: { change: \"change\" } });\n_MatRadioGroupBase.ctorParameters = () => [\n    { type: ChangeDetectorRef }\n];\n_MatRadioGroupBase.propDecorators = {\n    change: [{ type: Output }],\n    color: [{ type: Input }],\n    name: [{ type: Input }],\n    labelPosition: [{ type: Input }],\n    value: [{ type: Input }],\n    selected: [{ type: Input }],\n    disabled: [{ type: Input }],\n    required: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(_MatRadioGroupBase, [{\n        type: Directive\n    }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }]; }, { change: [{\n            type: Output\n        }], name: [{\n            type: Input\n        }], labelPosition: [{\n            type: Input\n        }], value: [{\n            type: Input\n        }], selected: [{\n            type: Input\n        }], disabled: [{\n            type: Input\n        }], required: [{\n            type: Input\n        }], color: [{\n            type: Input\n        }] }); })();\n/**\n * A group of radio buttons. May contain one or more `<mat-radio-button>` elements.\n */\nclass MatRadioGroup extends _MatRadioGroupBase {\n}\nMatRadioGroup.ɵfac = /*@__PURE__*/ function () { let ɵMatRadioGroup_BaseFactory; return function MatRadioGroup_Factory(t) { return (ɵMatRadioGroup_BaseFactory || (ɵMatRadioGroup_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatRadioGroup)))(t || MatRadioGroup); }; }();\nMatRadioGroup.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatRadioGroup, selectors: [[\"mat-radio-group\"]], contentQueries: function MatRadioGroup_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n        ɵngcc0.ɵɵcontentQuery(dirIndex, MatRadioButton, 5);\n    } if (rf & 2) {\n        let _t;\n        ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._radios = _t);\n    } }, hostAttrs: [\"role\", \"radiogroup\", 1, \"mat-radio-group\"], exportAs: [\"matRadioGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([\n            MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n            { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n        ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatRadioGroup.propDecorators = {\n    _radios: [{ type: ContentChildren, args: [forwardRef(() => MatRadioButton), { descendants: true },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatRadioGroup, [{\n        type: Directive,\n        args: [{\n                selector: 'mat-radio-group',\n                exportAs: 'matRadioGroup',\n                providers: [\n                    MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n                    { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n                ],\n                host: {\n                    'role': 'radiogroup',\n                    'class': 'mat-radio-group'\n                }\n            }]\n    }], null, { _radios: [{\n            type: ContentChildren,\n            args: [forwardRef(() => MatRadioButton), { descendants: true }]\n        }] }); })();\n// Boilerplate for applying mixins to MatRadioButton.\n/** @docs-private */\nclass MatRadioButtonBase {\n    constructor(_elementRef) {\n        this._elementRef = _elementRef;\n    }\n}\n// As per Material design specifications the selection control radio should use the accent color\n// palette by default. https://material.io/guidelines/components/selection-controls.html\nconst _MatRadioButtonMixinBase = mixinDisableRipple(mixinTabIndex(MatRadioButtonBase));\n/**\n * Base class with all of the `MatRadioButton` functionality.\n * @docs-private\n */\nclass _MatRadioButtonBase extends _MatRadioButtonMixinBase {\n    constructor(radioGroup, elementRef, _changeDetector, _focusMonitor, _radioDispatcher, _animationMode, _providerOverride, tabIndex) {\n        super(elementRef);\n        this._changeDetector = _changeDetector;\n        this._focusMonitor = _focusMonitor;\n        this._radioDispatcher = _radioDispatcher;\n        this._animationMode = _animationMode;\n        this._providerOverride = _providerOverride;\n        this._uniqueId = `mat-radio-${++nextUniqueId}`;\n        /** The unique ID for the radio button. */\n        this.id = this._uniqueId;\n        /**\n         * Event emitted when the checked state of this radio button changes.\n         * Change events are only emitted when the value changes due to user interaction with\n         * the radio button (the same behavior as `<input type-\"radio\">`).\n         */\n        this.change = new EventEmitter();\n        /** Whether this radio is checked. */\n        this._checked = false;\n        /** Value assigned to this radio. */\n        this._value = null;\n        /** Unregister function for _radioDispatcher */\n        this._removeUniqueSelectionListener = () => { };\n        // Assertions. Ideally these should be stripped out by the compiler.\n        // TODO(jelbourn): Assert that there's no name binding AND a parent radio group.\n        this.radioGroup = radioGroup;\n        if (tabIndex) {\n            this.tabIndex = coerceNumberProperty(tabIndex, 0);\n        }\n        this._removeUniqueSelectionListener =\n            _radioDispatcher.listen((id, name) => {\n                if (id !== this.id && name === this.name) {\n                    this.checked = false;\n                }\n            });\n    }\n    /** Whether this radio button is checked. */\n    get checked() { return this._checked; }\n    set checked(value) {\n        const newCheckedState = coerceBooleanProperty(value);\n        if (this._checked !== newCheckedState) {\n            this._checked = newCheckedState;\n            if (newCheckedState && this.radioGroup && this.radioGroup.value !== this.value) {\n                this.radioGroup.selected = this;\n            }\n            else if (!newCheckedState && this.radioGroup && this.radioGroup.value === this.value) {\n                // When unchecking the selected radio button, update the selected radio\n                // property on the group.\n                this.radioGroup.selected = null;\n            }\n            if (newCheckedState) {\n                // Notify all radio buttons with the same name to un-check.\n                this._radioDispatcher.notify(this.id, this.name);\n            }\n            this._changeDetector.markForCheck();\n        }\n    }\n    /** The value of this radio button. */\n    get value() { return this._value; }\n    set value(value) {\n        if (this._value !== value) {\n            this._value = value;\n            if (this.radioGroup !== null) {\n                if (!this.checked) {\n                    // Update checked when the value changed to match the radio group's value\n                    this.checked = this.radioGroup.value === value;\n                }\n                if (this.checked) {\n                    this.radioGroup.selected = this;\n                }\n            }\n        }\n    }\n    /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n    get labelPosition() {\n        return this._labelPosition || (this.radioGroup && this.radioGroup.labelPosition) || 'after';\n    }\n    set labelPosition(value) {\n        this._labelPosition = value;\n    }\n    /** Whether the radio button is disabled. */\n    get disabled() {\n        return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);\n    }\n    set disabled(value) {\n        this._setDisabled(coerceBooleanProperty(value));\n    }\n    /** Whether the radio button is required. */\n    get required() {\n        return this._required || (this.radioGroup && this.radioGroup.required);\n    }\n    set required(value) {\n        this._required = coerceBooleanProperty(value);\n    }\n    /** Theme color of the radio button. */\n    get color() {\n        return this._color ||\n            (this.radioGroup && this.radioGroup.color) ||\n            this._providerOverride && this._providerOverride.color || 'accent';\n    }\n    set color(newValue) { this._color = newValue; }\n    /** ID of the native input element inside `<mat-radio-button>` */\n    get inputId() { return `${this.id || this._uniqueId}-input`; }\n    /** Focuses the radio button. */\n    focus(options, origin) {\n        if (origin) {\n            this._focusMonitor.focusVia(this._inputElement, origin, options);\n        }\n        else {\n            this._inputElement.nativeElement.focus(options);\n        }\n    }\n    /**\n     * Marks the radio button as needing checking for change detection.\n     * This method is exposed because the parent radio group will directly\n     * update bound properties of the radio button.\n     */\n    _markForCheck() {\n        // When group value changes, the button will not be notified. Use `markForCheck` to explicit\n        // update radio button's status\n        this._changeDetector.markForCheck();\n    }\n    ngOnInit() {\n        if (this.radioGroup) {\n            // If the radio is inside a radio group, determine if it should be checked\n            this.checked = this.radioGroup.value === this._value;\n            if (this.checked) {\n                this.radioGroup.selected = this;\n            }\n            // Copy name from parent radio group\n            this.name = this.radioGroup.name;\n        }\n    }\n    ngAfterViewInit() {\n        this._focusMonitor\n            .monitor(this._elementRef, true)\n            .subscribe(focusOrigin => {\n            if (!focusOrigin && this.radioGroup) {\n                this.radioGroup._touch();\n            }\n        });\n    }\n    ngOnDestroy() {\n        this._focusMonitor.stopMonitoring(this._elementRef);\n        this._removeUniqueSelectionListener();\n    }\n    /** Dispatch change event with current value. */\n    _emitChangeEvent() {\n        this.change.emit(new MatRadioChange(this, this._value));\n    }\n    _isRippleDisabled() {\n        return this.disableRipple || this.disabled;\n    }\n    _onInputClick(event) {\n        // We have to stop propagation for click events on the visual hidden input element.\n        // By default, when a user clicks on a label element, a generated click event will be\n        // dispatched on the associated input element. Since we are using a label element as our\n        // root container, the click event on the `radio-button` will be executed twice.\n        // The real click event will bubble up, and the generated click event also tries to bubble up.\n        // This will lead to multiple click events.\n        // Preventing bubbling for the second event will solve that issue.\n        event.stopPropagation();\n    }\n    /**\n     * Triggered when the radio button received a click or the input recognized any change.\n     * Clicking on a label element, will trigger a change event on the associated input.\n     */\n    _onInputChange(event) {\n        // We always have to stop propagation on the change event.\n        // Otherwise the change event, from the input element, will bubble up and\n        // emit its event object to the `change` output.\n        event.stopPropagation();\n        const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n        this.checked = true;\n        this._emitChangeEvent();\n        if (this.radioGroup) {\n            this.radioGroup._controlValueAccessorChangeFn(this.value);\n            if (groupValueChanged) {\n                this.radioGroup._emitChangeEvent();\n            }\n        }\n    }\n    /** Sets the disabled state and marks for check if a change occurred. */\n    _setDisabled(value) {\n        if (this._disabled !== value) {\n            this._disabled = value;\n            this._changeDetector.markForCheck();\n        }\n    }\n}\n_MatRadioButtonBase.ɵfac = function _MatRadioButtonBase_Factory(t) { return new (t || _MatRadioButtonBase)(ɵngcc0.ɵɵdirectiveInject(_MatRadioGroupBase), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.UniqueSelectionDispatcher), ɵngcc0.ɵɵdirectiveInject(String), ɵngcc0.ɵɵdirectiveInject(undefined), ɵngcc0.ɵɵdirectiveInject(String)); };\n_MatRadioButtonBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: _MatRadioButtonBase, viewQuery: function _MatRadioButtonBase_Query(rf, ctx) { if (rf & 1) {\n        ɵngcc0.ɵɵviewQuery(_c0, 5);\n    } if (rf & 2) {\n        let _t;\n        ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._inputElement = _t.first);\n    } }, inputs: { id: \"id\", checked: \"checked\", value: \"value\", labelPosition: \"labelPosition\", disabled: \"disabled\", required: \"required\", color: \"color\", name: \"name\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], ariaDescribedby: [\"aria-describedby\", \"ariaDescribedby\"] }, outputs: { change: \"change\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n_MatRadioButtonBase.ctorParameters = () => [\n    { type: _MatRadioGroupBase },\n    { type: ElementRef },\n    { type: ChangeDetectorRef },\n    { type: FocusMonitor },\n    { type: UniqueSelectionDispatcher },\n    { type: String },\n    { type: undefined },\n    { type: String }\n];\n_MatRadioButtonBase.propDecorators = {\n    id: [{ type: Input }],\n    name: [{ type: Input }],\n    ariaLabel: [{ type: Input, args: ['aria-label',] }],\n    ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],\n    ariaDescribedby: [{ type: Input, args: ['aria-describedby',] }],\n    checked: [{ type: Input }],\n    value: [{ type: Input }],\n    labelPosition: [{ type: Input }],\n    disabled: [{ type: Input }],\n    required: [{ type: Input }],\n    color: [{ type: Input }],\n    change: [{ type: Output }],\n    _inputElement: [{ type: ViewChild, args: ['input',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(_MatRadioButtonBase, [{\n        type: Directive\n    }], function () { return [{ type: _MatRadioGroupBase }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.FocusMonitor }, { type: ɵngcc2.UniqueSelectionDispatcher }, { type: String }, { type: undefined }, { type: String }]; }, { id: [{\n            type: Input\n        }], change: [{\n            type: Output\n        }], checked: [{\n            type: Input\n        }], value: [{\n            type: Input\n        }], labelPosition: [{\n            type: Input\n        }], disabled: [{\n            type: Input\n        }], required: [{\n            type: Input\n        }], color: [{\n            type: Input\n        }], name: [{\n            type: Input\n        }], ariaLabel: [{\n            type: Input,\n            args: ['aria-label']\n        }], ariaLabelledby: [{\n            type: Input,\n            args: ['aria-labelledby']\n        }], ariaDescribedby: [{\n            type: Input,\n            args: ['aria-describedby']\n        }], _inputElement: [{\n            type: ViewChild,\n            args: ['input']\n        }] }); })();\n/**\n * A Material design radio-button. Typically placed inside of `<mat-radio-group>` elements.\n */\nclass MatRadioButton extends _MatRadioButtonBase {\n    constructor(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride, tabIndex) {\n        super(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride, tabIndex);\n    }\n}\nMatRadioButton.ɵfac = function MatRadioButton_Factory(t) { return new (t || MatRadioButton)(ɵngcc0.ɵɵdirectiveInject(MAT_RADIO_GROUP, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.UniqueSelectionDispatcher), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_RADIO_DEFAULT_OPTIONS, 8), ɵngcc0.ɵɵinjectAttribute('tabindex')); };\nMatRadioButton.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatRadioButton, selectors: [[\"mat-radio-button\"]], hostAttrs: [1, \"mat-radio-button\"], hostVars: 17, hostBindings: function MatRadioButton_HostBindings(rf, ctx) { if (rf & 1) {\n        ɵngcc0.ɵɵlistener(\"focus\", function MatRadioButton_focus_HostBindingHandler() { return ctx._inputElement.nativeElement.focus(); });\n    } if (rf & 2) {\n        ɵngcc0.ɵɵattribute(\"tabindex\", null)(\"id\", ctx.id)(\"aria-label\", null)(\"aria-labelledby\", null)(\"aria-describedby\", null);\n        ɵngcc0.ɵɵclassProp(\"mat-radio-checked\", ctx.checked)(\"mat-radio-disabled\", ctx.disabled)(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\")(\"mat-primary\", ctx.color === \"primary\")(\"mat-accent\", ctx.color === \"accent\")(\"mat-warn\", ctx.color === \"warn\");\n    } }, inputs: { disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, exportAs: [\"matRadioButton\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c2, decls: 13, vars: 19, consts: [[1, \"mat-radio-label\"], [\"label\", \"\"], [1, \"mat-radio-container\"], [1, \"mat-radio-outer-circle\"], [1, \"mat-radio-inner-circle\"], [\"type\", \"radio\", 1, \"mat-radio-input\", \"cdk-visually-hidden\", 3, \"id\", \"checked\", \"disabled\", \"tabIndex\", \"required\", \"change\", \"click\"], [\"input\", \"\"], [\"mat-ripple\", \"\", 1, \"mat-radio-ripple\", \"mat-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\"], [1, \"mat-ripple-element\", \"mat-radio-persistent-ripple\"], [1, \"mat-radio-label-content\"], [2, \"display\", \"none\"]], template: function MatRadioButton_Template(rf, ctx) { if (rf & 1) {\n        ɵngcc0.ɵɵprojectionDef();\n        ɵngcc0.ɵɵelementStart(0, \"label\", 0, 1);\n        ɵngcc0.ɵɵelementStart(2, \"span\", 2);\n        ɵngcc0.ɵɵelement(3, \"span\", 3);\n        ɵngcc0.ɵɵelement(4, \"span\", 4);\n        ɵngcc0.ɵɵelementStart(5, \"input\", 5, 6);\n        ɵngcc0.ɵɵlistener(\"change\", function MatRadioButton_Template_input_change_5_listener($event) { return ctx._onInputChange($event); })(\"click\", function MatRadioButton_Template_input_click_5_listener($event) { return ctx._onInputClick($event); });\n        ɵngcc0.ɵɵelementEnd();\n        ɵngcc0.ɵɵelementStart(7, \"span\", 7);\n        ɵngcc0.ɵɵelement(8, \"span\", 8);\n        ɵngcc0.ɵɵelementEnd();\n        ɵngcc0.ɵɵelementEnd();\n        ɵngcc0.ɵɵelementStart(9, \"span\", 9);\n        ɵngcc0.ɵɵelementStart(10, \"span\", 10);\n        ɵngcc0.ɵɵtext(11, \"\\u00A0\");\n        ɵngcc0.ɵɵelementEnd();\n        ɵngcc0.ɵɵprojection(12);\n        ɵngcc0.ɵɵelementEnd();\n        ɵngcc0.ɵɵelementEnd();\n    } if (rf & 2) {\n        const _r0 = ɵngcc0.ɵɵreference(1);\n        ɵngcc0.ɵɵattribute(\"for\", ctx.inputId);\n        ɵngcc0.ɵɵadvance(5);\n        ɵngcc0.ɵɵproperty(\"id\", ctx.inputId)(\"checked\", ctx.checked)(\"disabled\", ctx.disabled)(\"tabIndex\", ctx.tabIndex)(\"required\", ctx.required);\n        ɵngcc0.ɵɵattribute(\"name\", ctx.name)(\"value\", ctx.value)(\"aria-label\", ctx.ariaLabel)(\"aria-labelledby\", ctx.ariaLabelledby)(\"aria-describedby\", ctx.ariaDescribedby);\n        ɵngcc0.ɵɵadvance(2);\n        ɵngcc0.ɵɵproperty(\"matRippleTrigger\", _r0)(\"matRippleDisabled\", ctx._isRippleDisabled())(\"matRippleCentered\", true)(\"matRippleRadius\", 20)(\"matRippleAnimation\", ɵngcc0.ɵɵpureFunction0(18, _c1));\n        ɵngcc0.ɵɵadvance(2);\n        ɵngcc0.ɵɵclassProp(\"mat-radio-label-before\", ctx.labelPosition == \"before\");\n    } }, directives: [ɵngcc3.MatRipple], styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:transform ease 280ms,background-color ease 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5)}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none;top:0;left:0}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatRadioButton.ctorParameters = () => [\n    { type: MatRadioGroup, decorators: [{ type: Optional }, { type: Inject, args: [MAT_RADIO_GROUP,] }] },\n    { type: ElementRef },\n    { type: ChangeDetectorRef },\n    { type: FocusMonitor },\n    { type: UniqueSelectionDispatcher },\n    { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n    { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_RADIO_DEFAULT_OPTIONS,] }] },\n    { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatRadioButton, [{\n        type: Component,\n        args: [{\n                selector: 'mat-radio-button',\n                template: \"<!-- TODO(jelbourn): render the radio on either side of the content -->\\n<!-- TODO(mtlin): Evaluate trade-offs of using native radio vs. cost of additional bindings. -->\\n<label [attr.for]=\\\"inputId\\\" class=\\\"mat-radio-label\\\" #label>\\n  <!-- The actual 'radio' part of the control. -->\\n  <span class=\\\"mat-radio-container\\\">\\n    <span class=\\\"mat-radio-outer-circle\\\"></span>\\n    <span class=\\\"mat-radio-inner-circle\\\"></span>\\n    <input #input class=\\\"mat-radio-input cdk-visually-hidden\\\" type=\\\"radio\\\"\\n        [id]=\\\"inputId\\\"\\n        [checked]=\\\"checked\\\"\\n        [disabled]=\\\"disabled\\\"\\n        [tabIndex]=\\\"tabIndex\\\"\\n        [attr.name]=\\\"name\\\"\\n        [attr.value]=\\\"value\\\"\\n        [required]=\\\"required\\\"\\n        [attr.aria-label]=\\\"ariaLabel\\\"\\n        [attr.aria-labelledby]=\\\"ariaLabelledby\\\"\\n        [attr.aria-describedby]=\\\"ariaDescribedby\\\"\\n        (change)=\\\"_onInputChange($event)\\\"\\n        (click)=\\\"_onInputClick($event)\\\">\\n\\n    <!-- The ripple comes after the input so that we can target it with a CSS\\n         sibling selector when the input is focused. -->\\n    <span mat-ripple class=\\\"mat-radio-ripple mat-focus-indicator\\\"\\n         [matRippleTrigger]=\\\"label\\\"\\n         [matRippleDisabled]=\\\"_isRippleDisabled()\\\"\\n         [matRippleCentered]=\\\"true\\\"\\n         [matRippleRadius]=\\\"20\\\"\\n         [matRippleAnimation]=\\\"{enterDuration: 150}\\\">\\n\\n      <span class=\\\"mat-ripple-element mat-radio-persistent-ripple\\\"></span>\\n    </span>\\n  </span>\\n\\n  <!-- The label content for radio control. -->\\n  <span class=\\\"mat-radio-label-content\\\" [class.mat-radio-label-before]=\\\"labelPosition == 'before'\\\">\\n    <!-- Add an invisible span so JAWS can read the label -->\\n    <span style=\\\"display:none\\\">&nbsp;</span>\\n    <ng-content></ng-content>\\n  </span>\\n</label>\\n\",\n                inputs: ['disableRipple', 'tabIndex'],\n                encapsulation: ViewEncapsulation.None,\n                exportAs: 'matRadioButton',\n                host: {\n                    'class': 'mat-radio-button',\n                    '[class.mat-radio-checked]': 'checked',\n                    '[class.mat-radio-disabled]': 'disabled',\n                    '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n                    '[class.mat-primary]': 'color === \"primary\"',\n                    '[class.mat-accent]': 'color === \"accent\"',\n                    '[class.mat-warn]': 'color === \"warn\"',\n                    // Needs to be removed since it causes some a11y issues (see #21266).\n                    '[attr.tabindex]': 'null',\n                    '[attr.id]': 'id',\n                    '[attr.aria-label]': 'null',\n                    '[attr.aria-labelledby]': 'null',\n                    '[attr.aria-describedby]': 'null',\n                    // Note: under normal conditions focus shouldn't land on this element, however it may be\n                    // programmatically set, for example inside of a focus trap, in this case we want to forward\n                    // the focus to the native element.\n                    '(focus)': '_inputElement.nativeElement.focus()'\n                },\n                changeDetection: ChangeDetectionStrategy.OnPush,\n                styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:transform ease 280ms,background-color ease 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5)}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}.mat-radio-label-content{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none;top:0;left:0}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{bottom:0;left:50%}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"]\n            }]\n    }], function () { return [{ type: MatRadioGroup, decorators: [{\n                type: Optional\n            }, {\n                type: Inject,\n                args: [MAT_RADIO_GROUP]\n            }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.FocusMonitor }, { type: ɵngcc2.UniqueSelectionDispatcher }, { type: String, decorators: [{\n                type: Optional\n            }, {\n                type: Inject,\n                args: [ANIMATION_MODULE_TYPE]\n            }] }, { type: undefined, decorators: [{\n                type: Optional\n            }, {\n                type: Inject,\n                args: [MAT_RADIO_DEFAULT_OPTIONS]\n            }] }, { type: String, decorators: [{\n                type: Attribute,\n                args: ['tabindex']\n            }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatRadioModule {\n}\nMatRadioModule.ɵfac = function MatRadioModule_Factory(t) { return new (t || MatRadioModule)(); };\nMatRadioModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatRadioModule });\nMatRadioModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[MatRippleModule, MatCommonModule], MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatRadioModule, [{\n        type: NgModule,\n        args: [{\n                imports: [MatRippleModule, MatCommonModule],\n                exports: [MatRadioGroup, MatRadioButton, MatCommonModule],\n                declarations: [MatRadioGroup, MatRadioButton]\n            }]\n    }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatRadioModule, { declarations: function () { return [MatRadioGroup, MatRadioButton]; }, imports: function () { return [MatRippleModule, MatCommonModule]; }, exports: function () { return [MatRadioGroup, MatRadioButton, MatCommonModule]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_RADIO_DEFAULT_OPTIONS, MAT_RADIO_DEFAULT_OPTIONS_FACTORY, MAT_RADIO_GROUP, MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, MatRadioButton, MatRadioChange, MatRadioGroup, MatRadioModule, _MatRadioButtonBase, _MatRadioGroupBase };\n\n//# sourceMappingURL=radio.js.map","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {InfoPopoverComponent} from '@common/core/ui/info-popover/info-popover.component';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\n\n@NgModule({\n    declarations: [InfoPopoverComponent],\n    imports: [\n        CommonModule,\n\n        // material\n        MatIconModule,\n        MatButtonModule,\n    ],\n    exports: [InfoPopoverComponent],\n})\nexport class InfoPopoverModule {}\n","<div class=\"modal-header\">\n    <h2 mat-dialog-title>\n        <span trans *ngIf=\"!data.workspace\">Create Workspace</span>\n        <span trans *ngIf=\"data.workspace\">Update Workspace</span>\n    </h2>\n    <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\">\n        <mat-icon svgIcon=\"close\"></mat-icon>\n    </button>\n</div>\n\n<form (ngSubmit)=\"confirm()\" ngNativeValidate [formGroup]=\"form\" *ngIf=\"errors$ | async as errors\">\n    <mat-dialog-content class=\"many-inputs\">\n        <div class=\"input-container name-container\">\n            <label for=\"crupdate-workspace-name\" trans>Name</label>\n            <input type=\"text\" id=\"crupdate-workspace-name\" formControlName=\"name\" required minlength=\"3\">\n            <div class=\"error\" *ngIf=\"errors.name\">{{errors.name}}</div>\n        </div>\n    </mat-dialog-content>\n\n    <mat-dialog-actions>\n        <button (click)=\"close()\" type=\"button\" mat-button trans>Cancel</button>\n        <button type=\"submit\" mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\" trans>{{data.workspace ? 'Update' : 'Create'}}</button>\n    </mat-dialog-actions>\n</form>\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Toast } from '@common/core/ui/toast.service';\nimport { finalize } from 'rxjs/operators';\nimport { BackendErrorResponse } from '@common/core/types/backend-error-response';\nimport { Workspace } from '../types/workspace';\nimport { WorkspacesService } from '../workspaces.service';\n\nexport interface CrupdateWorkspaceModalData {\n    workspace?: Workspace;\n}\n\n@Component({\n    selector: 'crupdate-workspace-modal',\n    templateUrl: './crupdate-workspace-modal.component.html',\n    styleUrls: ['./crupdate-workspace-modal.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CrupdateWorkspaceModalComponent {\n    public loading$ = new BehaviorSubject(false);\n    public errors$ = new BehaviorSubject<{name?: string}>({});\n    public form = new FormGroup({\n        name: new FormControl(),\n    });\n\n    constructor(\n        private dialogRef: MatDialogRef<CrupdateWorkspaceModalComponent>,\n        @Inject(MAT_DIALOG_DATA) public data: CrupdateWorkspaceModalData,\n        private workspaces: WorkspacesService,\n        private toast: Toast,\n    ) {\n        if (data.workspace) {\n            this.form.patchValue(data.workspace);\n        }\n    }\n\n    public confirm() {\n        this.loading$.next(true);\n        const request = this.data.workspace ?\n            this.workspaces.update(this.data.workspace.id, this.form.value) :\n            this.workspaces.create(this.form.value);\n        request.pipe(finalize(() => this.loading$.next(false)))\n            .subscribe(response => {\n                this.toast.open(this.data.workspace ? 'Workspace updated.' : 'Workspace created.');\n                this.close(response.workspace);\n            }, (errResponse: BackendErrorResponse) => this.errors$.next(errResponse.errors));\n    }\n\n    public close(workspace?: Workspace) {\n        this.dialogRef.close(workspace);\n    }\n}\n","import {ConfirmModalData} from '@common/core/ui/confirm-modal/confirm-modal.component';\n\nexport const LEAVE_WORKSPACE_CONFIRMATION: ConfirmModalData = {\n    title: `Leave Workspace`,\n    body:  `Are you sure you want to leave this workspace?`,\n    bodyBold: `All resources you've created in the workspace will be transferred to workspace owner.`,\n    ok: 'Leave'\n};\n","export enum WorkspaceMessages {\n    LEFT_WORKSPACE = 'You have left the workspace.',\n    MEMBER_DELETED = 'Member Deleted.',\n    INVITES_SENT = 'Invites Sent.',\n    INVITE_RESENT = 'Resent invite.',\n    ROLE_ASSIGNED = 'Role Assigned.',\n}\n","<div class=\"modal-header\">\n    <h2 mat-dialog-title trans>Manage workspace members</h2>\n    <button type=\"button\" (click)=\"close()\" class=\"close-button no-style\" tabindex=\"-1\">\n        <mat-icon svgIcon=\"close\"></mat-icon>\n    </button>\n</div>\n\n<mat-dialog-content style=\"overflow: hidden\" #container>\n    <div class=\"invite-container\" *ngIf=\"canInvite\" @fadeIn>\n        <div class=\"input-container\">\n            <label for=\"workspace-emails-input\" trans>Invite by email</label>\n            <div class=\"input-with-action\">\n                <chip-input id=\"workspace-emails-input\" placeholder=\"Email addresses\" [emailsInput]=\"true\" [formControl]=\"peopleToInvite\"></chip-input>\n                <button\n                    type=\"button\"\n                    class=\"add-tags-button\"\n                    mat-flat-button\n                    color=\"accent\"\n                    (click)=\"invitePeople()\"\n                    [disabled]=\"(inviting$ | async) || !(peopleToInvite.valueChanges | async)?.length\"\n                    trans\n                >Invite\n                </button>\n            </div>\n        </div>\n        <mat-progress-bar mode=\"indeterminate\" color=\"accent\" *ngIf=\"inviting$ | async\"></mat-progress-bar>\n    </div>\n\n    <div class=\"header\">\n        <mat-icon svgIcon=\"people\"></mat-icon>\n        <span class=\"text\" [transValues]=\"{workspace: data.workspace.name}\" trans>Members of :workspace</span>\n    </div>\n\n    <div class=\"animation-container\">\n        <ul class=\"member-list unstyled-list\" *ngIf=\"loadingMembers$ | async\" @fadeOut>\n            <li class=\"member-list-item\" *ngFor=\"let i of [1, 2, 3]\">\n                <skeleton variant=\"avatar\"></skeleton>\n                <div class=\"details\">\n                    <skeleton></skeleton>\n                    <skeleton></skeleton>\n                </div>\n            </li>\n        </ul>\n\n        <ul class=\"member-list unstyled-list\">\n            <li *ngFor=\"let member of members$ | async\" class=\"member-list-item\" @fadeIn (@fadeIn.done)=\"container.style.overflow = 'auto'\">\n                <img [src]=\"member.avatar\" alt=\"\">\n                <div class=\"details\">\n                    <div class=\"email\">\n                        <span>{{member.display_name}}</span>\n                        &ngsp;\n                        <span class=\"strong\"\n                              *ngIf=\"currentUser.get('id') === member.id\" trans>(You)</span>\n                        <span *ngIf=\"member.model_type === 'invite'\">\n                        ·\n                        <span trans>Invited</span>\n                       <ng-container *ngIf=\"canInvite\">\n                            ·\n                            <button type=\"button\" class=\"no-style resend-invite-button\"\n                                    [disabled]=\"inviting$ | async\"\n                                    (click)=\"maybeResendInvite(member)\" trans>Resend Invite</button>\n                       </ng-container>\n                    </span>\n                    </div>\n                    <div class=\"invited_at\">{{member.email}}</div>\n                </div>\n                <div class=\"actions\">\n                    <button type=\"button\" mat-stroked-button class=\"role-trigger-button\"\n                            [class.not-clickable]=\"member.is_owner || !canEdit\"\n                            [matMenuTriggerFor]=\"selectRoleMenu\"\n                            [matMenuTriggerData]=\"{member: member}\">\n                        <span trans>{{member.role_name}}</span>\n                        <mat-icon svgIcon=\"keyboard-arrow-down\"\n                                  class=\"dropdown-icon\"></mat-icon>\n                    </button>\n                    <button type=\"button\" class=\"delete-member-button\"\n                            (click)=\"maybeDeleteMember(member)\"\n                            *ngIf=\"member.is_owner || currentUser.get('id') !== member.id\"\n                            [class.visually-hidden]=\"member.is_owner || !canDelete\"\n                            mat-icon-button [disabled]=\"deleting$ | async\">\n                        <mat-icon svgIcon=\"close\"></mat-icon>\n                    </button>\n                    <button type=\"button\" class=\"delete-member-button\"\n                            [matTooltip]=\"'Leave workspace' | trans\"\n                            (click)=\"maybeLeaveWorkspace(member)\"\n                            *ngIf=\"!member.is_owner && currentUser.get('id') === member.id\"\n                            mat-icon-button [disabled]=\"deleting$ | async\">\n                        <mat-icon svgIcon=\"exit-to-app\"></mat-icon>\n                    </button>\n                </div>\n            </li>\n        </ul>\n    </div>\n</mat-dialog-content>\n\n<mat-menu #selectRoleMenu=\"matMenu\">\n    <ng-template matMenuContent let-member=\"member\">\n        <div class=\"multiline-mat-menu-item with-icon\"\n             [class.active]=\"member.role_id === role.id\" mat-menu-item\n             (click)=\"changeRole(member, role)\"\n             *ngFor=\"let role of workspaceRoles$ | async\" trans>\n            <mat-icon svgIcon=\"check\"\n                      [class.visually-hidden]=\"member.role_id !== role.id\"></mat-icon>\n            <div class=\"menu-item-content\">\n                <div class=\"title\" trans>{{role.name}}</div>\n                <div class=\"description\" trans>{{role.description}}</div>\n            </div>\n        </div>\n    </ng-template>\n</mat-menu>\n\n\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    Inject,\n    OnInit,\n} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {FormControl} from '@angular/forms';\nimport {Role} from '@common/core/types/models/Role';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {WorkspacesService} from '../workspaces.service';\nimport {Toast} from '@common/core/ui/toast.service';\nimport {ValueLists} from '@common/core/services/value-lists.service';\nimport {Workspace} from '../types/workspace';\nimport {WorkspaceMember} from '../types/workspace-member';\nimport {WorkspaceInvite} from '../types/workspace-invite';\nimport {finalize} from 'rxjs/operators';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {WorkspaceMessages} from '../workspace-messages';\nimport {ConfirmModalComponent} from '@common/core/ui/confirm-modal/confirm-modal.component';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {LEAVE_WORKSPACE_CONFIRMATION} from '../leave-workspace-confirmation';\nimport {SKELETON_ANIMATIONS} from '@common/core/ui/skeleton/skeleton-animations';\n\nexport interface ManageWorkspaceMembersModalData {\n    workspace?: Workspace;\n}\n\ntype MemberOrInvite = WorkspaceMember | WorkspaceInvite;\n\n@Component({\n    selector: 'manage-workspace-members-modal',\n    templateUrl: './manage-workspace-members-modal.component.html',\n    styleUrls: ['./manage-workspace-members-modal.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    animations: SKELETON_ANIMATIONS,\n})\nexport class ManageWorkspaceMembersModalComponent implements OnInit {\n    public inviting$ = new BehaviorSubject(false);\n    public deleting$ = new BehaviorSubject(false);\n    public loadingMembers$ = new BehaviorSubject(false);\n    public workspaceRoles$ = new BehaviorSubject<Role[]>([]);\n    public members$ = new BehaviorSubject<\n        (WorkspaceMember | WorkspaceInvite)[]\n    >([]);\n    public peopleToInvite = new FormControl([]);\n\n    public canInvite = false;\n    public canEdit = false;\n    public canDelete = false;\n\n    constructor(\n        private dialogRef: MatDialogRef<ManageWorkspaceMembersModalComponent>,\n        @Inject(MAT_DIALOG_DATA) public data: ManageWorkspaceMembersModalData,\n        private workspaces: WorkspacesService,\n        private toast: Toast,\n        private valueLists: ValueLists,\n        public currentUser: CurrentUser,\n        private modal: Modal\n    ) {}\n\n    ngOnInit() {\n        this.loadingMembers$.next(true);\n        this.valueLists.get(['workspaceRoles']).subscribe(response => {\n            this.workspaceRoles$.next(response.workspaceRoles);\n        });\n        this.workspaces\n            .get(this.data.workspace.id)\n            .pipe(finalize(() => this.loadingMembers$.next(false)))\n            .subscribe(response => {\n                this.members$.next([\n                    ...response.workspace.invites,\n                    ...response.workspace.members,\n                ]);\n                this.setCurrentUserPermissions();\n            });\n    }\n\n    public close(workspace?: Workspace) {\n        this.dialogRef.close(workspace);\n    }\n\n    public invitePeople() {\n        const emails = this.peopleToInvite.value.filter(email => {\n            return !this.members$.value.find(m => m.email === email);\n        });\n        if (!emails.length) {\n            this.peopleToInvite.reset();\n            this.toast.open('All invited people are already members.');\n            return;\n        }\n        const payload = {\n            emails,\n            roleId: (\n                this.workspaceRoles$.value.find(r => r.default) ||\n                this.workspaceRoles$.value[0]\n            ).id,\n        };\n        this.inviting$.next(true);\n        this.workspaces\n            .invitePeople(this.data.workspace.id, payload)\n            .pipe(finalize(() => this.inviting$.next(false)))\n            .subscribe(response => {\n                this.members$.next([\n                    ...this.members$.value,\n                    ...response.invites,\n                ]);\n                this.peopleToInvite.reset();\n                this.toast.open(WorkspaceMessages.INVITES_SENT);\n            });\n    }\n\n    public resendInvite(invite: WorkspaceInvite) {\n        this.inviting$.next(true);\n        this.workspaces\n            .resendInvite(this.data.workspace.id, invite.id)\n            .pipe(finalize(() => this.inviting$.next(false)))\n            .subscribe(() => {\n                this.toast.open(WorkspaceMessages.INVITE_RESENT);\n            });\n    }\n\n    public changeRole(member: WorkspaceMember | WorkspaceInvite, role: Role) {\n        this.workspaces\n            .changeRole(this.data.workspace.id, member, role.id)\n            .subscribe(() => {\n                this.toast.open(WorkspaceMessages.ROLE_ASSIGNED);\n                const members = [...this.members$.value];\n                const i = members.findIndex(m => m.id === member.id);\n                members[i].role_name = role.name;\n                members[i].role_id = role.id;\n                this.members$.next(members);\n            });\n    }\n\n    public deleteMember(member: MemberOrInvite) {\n        this.deleting$.next(true);\n        const request =\n            member.model_type === 'member'\n                ? this.workspaces.deleteMember(\n                      this.data.workspace.id,\n                      member.id\n                  )\n                : this.workspaces.deleteInvite(member.id);\n        request\n            .pipe(finalize(() => this.deleting$.next(false)))\n            .subscribe(() => {\n                const value = [...this.members$.value];\n                const i = value.findIndex(\n                    (m: MemberOrInvite) =>\n                        member.id && m.model_type === member.model_type\n                );\n                value.splice(i, 1);\n                this.members$.next(value);\n                if (member.id === this.currentUser.get('id')) {\n                    this.close();\n                    this.toast.open(WorkspaceMessages.LEFT_WORKSPACE);\n                } else {\n                    this.toast.open(WorkspaceMessages.MEMBER_DELETED);\n                }\n            });\n    }\n\n    public maybeDeleteMember(member: MemberOrInvite) {\n        this.modal\n            .show(ConfirmModalComponent, {\n                title: `Delete Member`,\n                body: `Are you sure you want to delete this member?`,\n                bodyBold:\n                    'All workspace resources created by this member will be transferred to workspace owner.',\n                ok: 'Delete',\n            })\n            .afterClosed()\n            .subscribe(confirmed => {\n                if (confirmed) {\n                    this.deleteMember(member);\n                }\n            });\n    }\n\n    public maybeResendInvite(invite: WorkspaceInvite) {\n        this.modal\n            .show(ConfirmModalComponent, {\n                title: `Resend Invite`,\n                body: `Are you sure you want to send this invite again?`,\n                ok: 'Resend',\n            })\n            .afterClosed()\n            .subscribe(confirmed => {\n                if (confirmed) {\n                    this.resendInvite(invite);\n                }\n            });\n    }\n\n    public maybeLeaveWorkspace(member: WorkspaceMember) {\n        this.modal\n            .show(ConfirmModalComponent, LEAVE_WORKSPACE_CONFIRMATION)\n            .afterClosed()\n            .subscribe(confirmed => {\n                if (confirmed) {\n                    this.deleteMember(member);\n                }\n            });\n    }\n\n    private setCurrentUserPermissions() {\n        const member = this.members$.value.find(\n            m => m.id === this.currentUser.get('id')\n        ) as WorkspaceMember;\n        this.canInvite =\n            member.is_owner ||\n            !!member.permissions.find(\n                p => p.name === 'workspace_members.invite'\n            );\n        this.canEdit =\n            member.is_owner ||\n            !!member.permissions.find(\n                p => p.name === 'workspace_members.update'\n            );\n        this.canDelete =\n            member.is_owner ||\n            !!member.permissions.find(\n                p => p.name === 'workspace_members.delete'\n            );\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CrupdateWorkspaceModalComponent } from './crupdate-workspace-modal/crupdate-workspace-modal.component';\nimport { ManageWorkspaceMembersModalComponent } from './manage-workspace-members-modal/manage-workspace-members-modal.component';\nimport { WorkspaceIndexComponent } from './workspace-index/workspace-index.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { TranslationsModule } from '../core/translations/translations.module';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { DatatableModule } from '../datatable/datatable.module';\nimport { InfoPopoverModule } from '../core/ui/info-popover/info-popover.module';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FormatPipesModule } from '../core/ui/format-pipes/format-pipes.module';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { SkeletonModule } from '../core/ui/skeleton/skeleton.module';\nimport { ChipsModule } from '../core/ui/chips/chips.module';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@NgModule({\n  declarations: [\n      CrupdateWorkspaceModalComponent,\n      ManageWorkspaceMembersModalComponent,\n      WorkspaceIndexComponent,\n  ],\n  imports: [\n    CommonModule,\n      FormsModule,\n      ReactiveFormsModule,\n      TranslationsModule,\n      DatatableModule,\n      InfoPopoverModule,\n      FormatPipesModule,\n      SkeletonModule,\n      ChipsModule,\n\n      // material\n      MatIconModule,\n      MatButtonModule,\n      MatDialogModule,\n      MatRadioModule,\n      MatTooltipModule,\n      MatProgressBarModule,\n      MatMenuModule,\n  ],\n  exports: [\n    CrupdateWorkspaceModalComponent,\n    ManageWorkspaceMembersModalComponent,\n    WorkspaceIndexComponent,\n  ]\n})\nexport class WorkspaceModule {\n  static components = {\n    crupdateModal: CrupdateWorkspaceModalComponent,\n    manageMembers: ManageWorkspaceMembersModalComponent,\n  };\n}\n"]}

Zerion Mini Shell 1.0