{"version":3,"file":"mosaic-design-infosec-components-core-components-design-system.mjs","sources":["../../../libs/core-components/design-system/src/lib/locale-depent-date-formatter/locale-depent-date-formatter.ts","../../../libs/core-components/design-system/src/lib/tree/tree.ts","../../../libs/core-components/design-system/src/lib/validatable-by-parent-tree-select/validatable-by-parent-tree-select.ts","../../../libs/core-components/design-system/mosaic-design-infosec-components-core-components-design-system.ts"],"sourcesContent":["import { ChangeDetectorRef } from '@angular/core';\nimport { DateAdapter } from '@koobiq/components/core';\nimport { DateTime } from 'luxon';\nimport { takeUntil } from 'rxjs';\n\nimport { defaultLanguage, localeLanguage } from '@mosaic-design/infosec-components/constants';\nimport { Destroyable } from '@mosaic-design/infosec-components/core-components/common';\nimport { Language, Locale } from '@mosaic-design/infosec-components/types';\nimport { isEnumValue } from '@mosaic-design/infosec-components/utils';\n\n/**\n * Класс, наследуемый в форматировщиках дат, зависящих от локализации.\n */\nexport abstract class LocaleDepentDateFormatter extends Destroyable {\n    protected language: Language;\n\n    protected constructor(\n        localeOrLanguage: Language | Locale,\n        protected dateAdapter: DateAdapter<DateTime>,\n        protected changeDetectorRef: ChangeDetectorRef\n    ) {\n        super();\n\n        this.language = this.normalizeLanguage(localeOrLanguage);\n\n        this.dateAdapter.localeChanges.pipe(takeUntil(this.destroyed$)).subscribe((value: Language | Locale) => {\n            this.language = this.normalizeLanguage(value);\n            this.changeDetectorRef.markForCheck();\n        });\n    }\n\n    protected actualizeDateLocale(date: DateTime): DateTime {\n        return date.locale !== this.language ? date.setLocale(this.language) : date;\n    }\n\n    protected normalizeLanguage(value: Language | Locale | undefined): Language {\n        if (isEnumValue(Language, value)) {\n            return value;\n        } else if (isEnumValue(Locale, value)) {\n            return localeLanguage[value];\n        } else {\n            return defaultLanguage;\n        }\n    }\n}\n","import { FlatTreeControl, KbqTreeFlattener, KbqTreeFlatDataSource } from '@koobiq/components/tree';\n\nimport { TreeFlatNode, TreeNode } from '@mosaic-design/infosec-components/types';\n\nexport abstract class TreeBase<Node extends TreeNode = TreeNode, FlatNode extends TreeFlatNode = TreeFlatNode> {\n    treeControl: FlatTreeControl<FlatNode>;\n    treeFlattener: KbqTreeFlattener<Node, FlatNode>;\n    dataSource: KbqTreeFlatDataSource<Node, FlatNode>;\n\n    abstract transformer(node: Node, level: number, parent: FlatNode | null): FlatNode;\n\n    getLevel(node: FlatNode): number {\n        return node.level;\n    }\n\n    isExpandable(node: FlatNode): boolean {\n        return node.expandable;\n    }\n\n    getChildren(node: Node): Node[] {\n        return node.children as Node[];\n    }\n\n    getValue(node: FlatNode): string {\n        return node.id;\n    }\n\n    getViewValue(node: FlatNode): string {\n        return node.displayName;\n    }\n\n    hasChild(_: number, nodeData: FlatNode): boolean {\n        return nodeData.expandable;\n    }\n\n    protected constructor() {\n        this.treeFlattener = new KbqTreeFlattener<Node, FlatNode>(\n            this.transformer,\n            this.getLevel,\n            this.isExpandable,\n            this.getChildren\n        );\n\n        this.treeControl = new FlatTreeControl<FlatNode>(\n            this.getLevel,\n            this.isExpandable,\n            this.getValue,\n            this.getViewValue\n        );\n\n        this.dataSource = new KbqTreeFlatDataSource<Node, FlatNode>(this.treeControl, this.treeFlattener);\n        this.dataSource.data = [];\n    }\n}\n\nexport class Tree extends TreeBase {\n    transformer(node: TreeNode, level: number, parent: TreeFlatNode | null): TreeFlatNode {\n        return {\n            id: node.id,\n            displayName: node.displayName,\n            expandable: (node.children?.length ?? 0) > 0,\n            level,\n            parent: parent ?? undefined\n        };\n    }\n\n    constructor() {\n        super();\n    }\n}\n","import { Directive, Injector, ChangeDetectorRef, QueryList } from '@angular/core';\nimport { KbqTreeSelection, KbqTreeOption } from '@koobiq/components/tree';\nimport { KbqTreeSelect, KbqTreeSelectChange } from '@koobiq/components/tree-select';\nimport { Subject, startWith, takeUntil, Observable, switchMap, map, BehaviorSubject, filter, of } from 'rxjs';\n\nimport { ValidatableByParentControl } from '@mosaic-design/infosec-components/core-components/common';\nimport { DestroyService } from '@mosaic-design/infosec-components/services';\nimport { TreeNode, TreeFlatNode } from '@mosaic-design/infosec-components/types';\nimport { isNonNullable, isTruthy, isArray } from '@mosaic-design/infosec-components/utils';\n\nimport { TreeBase } from '../tree/tree';\n\ntype Value = string[] | string | undefined | null;\ntype NormalizedValue<T extends Value> = NonNullable<T> | string[] | string;\n\n@Directive()\nexport abstract class ValidatableByParentTreeSelect<\n    Node extends TreeNode<Node>,\n    FlatNode extends TreeFlatNode<FlatNode>,\n    ParentValue extends Value,\n    ControlValue extends NonNullable<Value> = NonNullable<ParentValue>\n> extends ValidatableByParentControl<ParentValue, ControlValue> {\n    abstract readonly selects: QueryList<KbqTreeSelect> | undefined;\n    abstract readonly select: KbqTreeSelect | undefined;\n    abstract readonly treeSelection: KbqTreeSelection | undefined;\n\n    abstract readonly tree: TreeBase<Node, FlatNode>;\n\n    protected _nodes = new BehaviorSubject<Node[]>([]);\n\n    #parentValue = new Subject<ParentValue>();\n    #isEmitPrevent = false;\n    #selectDestroyed$ = new Subject<void>();\n\n    // isMultiple не спроста является приватным свойством, а не инпутом. При изменении в родительской форме,\n    // может быть проблемно синхронизировать отправку значения формы в этот контрол и\n    // отправку значения в `@Input isMultiple` из-за это результирующее значение может быть некорректным.\n    // Поэтому isMultiple выставляется автоматически, в зависимости от значения из родительской формы.\n    #isMultiple = false;\n\n    protected readonly parentValue$: Observable<ParentValue>;\n\n    protected constructor(injector: Injector, changeDetectorRef: ChangeDetectorRef, destroyed$: DestroyService) {\n        super(injector, changeDetectorRef, destroyed$);\n\n        this.parentValue$ = this.#parentValue.asObservable();\n        this.createParentValueSubscription();\n    }\n\n    private static forceTreeSelectTagsStateUpdating(\n        trigger$: Observable<unknown>,\n        select: KbqTreeSelect,\n        destroyed$: Observable<unknown>\n    ): void {\n        // Есть проблема с отрисовкой mc-tag внутри mc-tree-select - при изменении состояния валидности в mc-tree-select\n        // mc-tag не успевает его отрендерить. В итоге получается, что на странице mc-tree-select отображается валидным,\n        // а mc-tag невалидным.\n        trigger$.pipe(takeUntil(destroyed$)).subscribe(() => {\n            select.tags.forEach((tag) => {\n                tag.changeDetectorRef.markForCheck();\n            });\n        });\n    }\n\n    get isMultiple(): boolean {\n        return this.#isMultiple;\n    }\n\n    protected get isEmitPrevent(): boolean {\n        return this.#isEmitPrevent;\n    }\n\n    protected abstract setTreeFormControlEmptyValue(): void;\n    protected abstract setTreeFormControlValue(value: NormalizedValue<ParentValue>): void;\n\n    protected normalizeParentValue(value: ParentValue): NormalizedValue<ParentValue> {\n        if (isNonNullable(value)) {\n            return value;\n        } else {\n            return this.#isMultiple ? [] : '';\n        }\n    }\n\n    protected normalizeValue(value: ControlValue): NormalizedValue<ControlValue> {\n        if (isNonNullable(value)) {\n            return value;\n        } else {\n            return this.#isMultiple ? [] : '';\n        }\n    }\n\n    protected createTagsForcedStateUpdatingSubscription(trigger$: Observable<unknown>): void {\n        this.selects?.changes.pipe(startWith(undefined), takeUntil(this.destroyed$)).subscribe(() => {\n            const selects = this.selects;\n            const select = selects?.first;\n\n            if (isNonNullable(select) && select.multiple) {\n                this.#selectDestroyed$.next();\n                this.#selectDestroyed$.complete();\n                this.#selectDestroyed$ = new Subject<void>();\n\n                ValidatableByParentTreeSelect.forceTreeSelectTagsStateUpdating(\n                    trigger$,\n                    select,\n                    this.#selectDestroyed$\n                );\n            }\n        });\n    }\n\n    protected setNodes(value: Node[] | undefined): void {\n        const normalizedValue = value ?? [];\n        this.tree.dataSource.data = normalizedValue;\n        this.tree.treeControl.expandAll();\n        this._nodes.next(normalizedValue);\n    }\n\n    onSelectionChange(event: KbqTreeSelectChange): void {\n        const { treeSelection } = this;\n\n        // Плохие типы в mosaic:\n        // McTreeSelectChange.value - any, а должно быть McTreeOption\n        const option = event.value as KbqTreeOption;\n\n        if (option.isExpandable && isNonNullable(treeSelection)) {\n            treeSelection.setStateChildren(option, !option.selected);\n        }\n\n        // Плохие типы в mosaic:\n        // McTreeOption extends McTreeNode<McTreeOption>, а должно быть\n        // McTreeOption<FlatNode> extends McTreeNode<FlatNode>\n        const value = event.value as {\n            data: FlatNode;\n        };\n\n        this.toggleParents(value.data.parent);\n    }\n\n    protected toggleParents(parent: FlatNode | undefined): void {\n        const { select } = this;\n\n        if (isNonNullable(parent) && isNonNullable(select)) {\n            const descendants = this.tree.treeControl.getDescendants(parent);\n            const isParentSelected = select.selectionModel.selected.includes(parent);\n\n            if (!isParentSelected && descendants.every((item) => select.selectionModel.selected.includes(item))) {\n                select.selectionModel.select(parent);\n                this.toggleParents(parent.parent);\n            } else if (isParentSelected) {\n                select.selectionModel.deselect(parent);\n                this.toggleParents(parent.parent);\n            }\n        }\n    }\n\n    private nodesReceived$(): Observable<void> {\n        return this._nodes.pipe(\n            filter((nodes) => nodes.length > 0),\n            map(() => undefined)\n        );\n    }\n\n    private actualizeIsMultiple(value: ParentValue): void {\n        if (isNonNullable(value)) {\n            const isMultiple = isArray(value);\n\n            if (this.#isMultiple !== isMultiple) {\n                // Т.к. в момент изменения isMultiple еще не перерисовался McTreeSelect, нужно очистить значение\n                // чтобы не налететь на ошибку \"Value must be an array in multiple-selection mode.\"\n                // При этом нужно сделать это так, чтобы родительская форма об этом не узнала.\n                this.#isEmitPrevent = true;\n                this.#isMultiple = isMultiple;\n                this.setTreeFormControlEmptyValue();\n\n                // isMultiple не является инпутом и может измениться со смещением по eventLoop,\n                // поэтому нужно помечать компонент грязным.\n                this.changeDetectorRef.markForCheck();\n            }\n        }\n    }\n\n    private isSelectReadyToCurrentMultiple$(): Observable<boolean> {\n        const { selects } = this;\n        if (isNonNullable(selects)) {\n            if (selects.length > 0 && selects.first.multiple === this.#isMultiple) {\n                return of(true);\n            } else {\n                return selects.changes.pipe(\n                    filter(() => selects.length > 0),\n                    filter(() => selects.first.multiple === this.#isMultiple)\n                );\n            }\n        } else {\n            return of(true);\n        }\n    }\n\n    private selectReadyToCurrentMultiple$(): Observable<void> {\n        return this.isSelectReadyToCurrentMultiple$().pipe(\n            filter(isTruthy),\n            map(() => undefined)\n        );\n    }\n\n    private actualizeIsMultiple$(value: ParentValue): Observable<void> {\n        this.actualizeIsMultiple(value);\n\n        return this.selectReadyToCurrentMultiple$();\n    }\n\n    private createParentValueSubscription(): void {\n        this.#parentValue\n            .pipe(\n                switchMap((value) => this.actualizeIsMultiple$(value).pipe(map(() => value))),\n                switchMap((value) => this.nodesReceived$().pipe(map(() => value))),\n                map((value) => this.normalizeParentValue(value)),\n                takeUntil(this.destroyed$)\n            )\n            .subscribe((value) => {\n                this.#isEmitPrevent = false;\n                this.setTreeFormControlValue(value);\n            });\n    }\n\n    override writeValue(value: ParentValue): void {\n        this.#parentValue.next(value);\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}