{"version":3,"file":"mosaic-design-infosec-components-services.mjs","sources":["../../../libs/services/src/lib/component-injection/component-injection.service.ts","../../../libs/services/src/lib/date-time/date-time.service.ts","../../../libs/services/src/lib/destroy/destroy.service.ts","../../../libs/services/src/lib/hot-key/hot-key.service.ts","../../../libs/services/src/lib/theme/theme.service.ts","../../../libs/services/src/lib/user-activity/user-activity.service.ts","../../../libs/services/src/lib/router-url/router-url.service.ts","../../../libs/services/src/lib/validation-switch/validation-switch.service.ts","../../../libs/services/mosaic-design-infosec-components-services.ts"],"sourcesContent":["import {\n    Injectable,\n    ComponentRef,\n    ApplicationRef,\n    ComponentFactoryResolver,\n    Injector,\n    EmbeddedViewRef,\n    Type\n} from '@angular/core';\n\nimport { isNonNullable } from '@mosaic-design/infosec-components/utils';\n\n@Injectable()\nexport class ComponentInjectionService {\n    private container: ComponentRef<unknown> | undefined;\n\n    constructor(\n        private applicationRef: ApplicationRef,\n        private componentFactoryResolver: ComponentFactoryResolver,\n        private injector: Injector\n    ) {}\n\n    /**\n     * Gets the root view container to inject the component to.\n     */\n    getRootViewContainer(): ComponentRef<unknown> {\n        if (this.container) {\n            return this.container;\n        }\n\n        const rootComponents = this.applicationRef.components;\n        const root = rootComponents[0];\n\n        if (isNonNullable(root)) {\n            return root;\n        }\n\n        throw new Error('Root view container not found. Specify it manually.');\n    }\n\n    /**\n     * Overrides the default root view container. This is useful for\n     * things like ngUpgrade that doesn't have a ApplicationRef root.\n     */\n    setRootViewContainer(container: ComponentRef<unknown>): void {\n        this.container = container;\n    }\n\n    /**\n     * Gets the html element for a component ref.\n     */\n    getComponentRootNode(componentRef: ComponentRef<unknown>): HTMLElement {\n        return (componentRef.hostView as EmbeddedViewRef<unknown>).rootNodes[0] as HTMLElement;\n    }\n\n    /**\n     * Gets the root component container html element.\n     */\n    getRootViewContainerNode(): HTMLElement {\n        return this.getComponentRootNode(this.getRootViewContainer());\n    }\n\n    /**\n     * Projects the inputs onto the component\n     */\n    projectComponentInputs<T>(component: ComponentRef<T>, options: Partial<T>): ComponentRef<T> {\n        const props = Object.getOwnPropertyNames(options) as (keyof T)[];\n        for (const prop of props) {\n            component.instance[prop] = options[prop] as T[typeof prop];\n        }\n\n        return component;\n    }\n\n    /**\n     * Appends a component to a adjacent location\n     */\n    appendComponent<T>(\n        componentClass: Type<T>,\n        options: Partial<T> = {},\n        location: Element = this.getRootViewContainerNode()\n    ): ComponentRef<T> {\n        const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentClass);\n        const componentRef = componentFactory.create(this.injector);\n        const appRef = this.applicationRef;\n        const componentRootNode = this.getComponentRootNode(componentRef);\n\n        // project the options passed to the component instance\n        this.projectComponentInputs(componentRef, options);\n\n        appRef.attachView(componentRef.hostView);\n\n        componentRef.onDestroy(() => {\n            appRef.detachView(componentRef.hostView);\n        });\n\n        location.appendChild(componentRootNode);\n\n        return componentRef;\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter, DateFormatter, KBQ_DATE_LOCALE } from '@koobiq/components/core';\nimport { DateTimeOptions } from '@koobiq/date-formatter';\nimport { DateTime } from 'luxon';\n\nimport { DateFormatType, Locale } from '@mosaic-design/infosec-components/types';\n\n@Injectable({ providedIn: 'root' })\nexport class IcDateTimeService {\n    // copy from mosaic date formatter template\n    readonly secondsTemplate = `{\n        SHOW_MILLISECONDS,\n        select,\n            yes{:{SECONDS}{MILLISECONDS}}\n            other{{\n                SHOW_SECONDS,\n                select,\n                    yes{:{SECONDS}}\n                    other{}\n            }}\n    }`;\n    #locale: Locale;\n\n    constructor(\n        @Inject(KBQ_DATE_LOCALE) locale: Locale,\n        private dateAdapter: DateAdapter<DateTime>,\n        private dateFormatter: DateFormatter<DateTime>\n    ) {\n        this.#locale = locale;\n\n        this.dateAdapter.localeChanges.pipe(takeUntilDestroyed()).subscribe((value: Locale) => {\n            this.#locale = value;\n        });\n    }\n\n    getFormattedDate(value: unknown, formatType?: DateFormatType, dateTimeOptions?: DateTimeOptions): string {\n        if (!value) {\n            return '';\n        }\n\n        let date = this.parse(value);\n\n        if (!date?.isValid) {\n            return '';\n        }\n\n        date = this.actualizeDateLocale(date);\n\n        switch (formatType) {\n            case DateFormatType.OnlyTime:\n                return this.dateFormatter.absoluteDate(\n                    date,\n                    {\n                        variables: {\n                            SHOW_SECONDS: dateTimeOptions?.seconds ? 'yes' : 'no',\n                            SHOW_MILLISECONDS: dateTimeOptions?.milliseconds ? 'yes' : 'no'\n                        },\n                        DATE: '',\n                        DATETIME: `{TIME}${this.secondsTemplate}`\n                    },\n                    true,\n                    dateTimeOptions?.seconds,\n                    dateTimeOptions?.milliseconds\n                );\n            case DateFormatType.AbsoluteShortDate:\n                return this.dateFormatter.absoluteShortDate(date, dateTimeOptions?.currYear);\n            case DateFormatType.AbsoluteShortDateTime:\n                return this.dateFormatter.absoluteShortDateTime(date, dateTimeOptions);\n            case DateFormatType.AbsoluteLongDate:\n                return this.dateFormatter.absoluteLongDate(date, dateTimeOptions?.currYear);\n            case DateFormatType.AbsoluteLongDateTime:\n                return this.dateFormatter.absoluteLongDateTime(date, dateTimeOptions);\n            case DateFormatType.RelativeShortDate:\n                return this.dateFormatter.relativeShortDate(date);\n            case DateFormatType.RelativeLongDate:\n                return this.dateFormatter.relativeLongDate(date);\n            default:\n                return this.dateFormatter.absoluteLongDateTime(date, dateTimeOptions);\n        }\n    }\n\n    private parse(value: unknown): DateTime | null {\n        return DateTime.isDateTime(value) ? value : this.dateAdapter.parse(value, null);\n    }\n\n    private actualizeDateLocale(date: DateTime): DateTime {\n        return date.locale !== this.#locale ? date.setLocale(this.#locale) : date;\n    }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class DestroyService extends Subject<void> implements OnDestroy {\n    ngOnDestroy(): void {\n        this.next();\n        this.complete();\n    }\n}\n","import { Element } from '@angular/compiler';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { Subject, fromEvent, takeUntil } from 'rxjs';\n\nexport type HotKeyId = string | number | Element | HTMLElement | HTMLElement[];\n\nexport interface HotKey {\n    id?: HotKeyId;\n    keyCodes: string[];\n    target?: HTMLElement | HTMLElement[];\n    pathItem?: HTMLElement;\n    withControlModifier?: boolean;\n    withShiftModifier?: boolean;\n    metaKey?: boolean;\n    stopEvent?: boolean;\n\n    callback(event: KeyboardEvent): void;\n}\n\n@Injectable()\nexport class HotKeyService implements OnDestroy {\n    private hotKeys: HotKey[] = [];\n    private readonly destroyed$ = new Subject<void>();\n    private observing$ = new Subject<void>();\n\n    private static cancelKeyboardEvent(event: KeyboardEvent): void {\n        event.cancelBubble = true;\n        event.stopPropagation();\n        event.preventDefault();\n    }\n\n    registerHotKey(hotKey: HotKey): void {\n        this.hotKeys.push(hotKey);\n    }\n\n    unregisterHotKey(idOrTarget: HotKeyId): void {\n        this.hotKeys = this.hotKeys.filter((item) => item.id !== idOrTarget && item.target !== idOrTarget);\n    }\n\n    ngOnDestroy(): void {\n        this.destroyed$.next();\n        this.destroyed$.complete();\n    }\n\n    startHotKeyObserve(): void {\n        this.observing$ = new Subject<void>();\n\n        fromEvent<KeyboardEvent>(document, 'keydown')\n            .pipe(takeUntil(this.destroyed$), takeUntil(this.observing$))\n            .subscribe((event) => this.findAndRunHotKey(event));\n    }\n\n    stopHotKeyObserve(): void {\n        this.observing$.next();\n        this.observing$.complete();\n    }\n\n    private isTargetMatched(hotKey: HotKey, event: KeyboardEvent): boolean {\n        return (\n            !hotKey.target ||\n            hotKey.target === event.target ||\n            (hotKey.target instanceof Array && hotKey.target.some((target) => event.target === target))\n        );\n    }\n\n    private findAndRunHotKey(event: KeyboardEvent): void {\n        const hotKeys = this.hotKeys.filter(\n            (item) =>\n                item.keyCodes.includes(event.code) &&\n                !!item.withControlModifier === event.ctrlKey &&\n                !!item.withShiftModifier === event.shiftKey &&\n                !!item.metaKey === event.metaKey &&\n                ((!!item.pathItem && event.composedPath().includes(item.pathItem)) || !item.pathItem) &&\n                this.isTargetMatched(item, event)\n        );\n\n        hotKeys.forEach((hotKey) => {\n            hotKey.callback(event);\n\n            if (hotKey.stopEvent) {\n                HotKeyService.cancelKeyboardEvent(event);\n            }\n        });\n    }\n}\n","import { Inject, Injectable, ApplicationRef } from '@angular/core';\nimport { BehaviorSubject, Observable, combineLatest } from 'rxjs';\n\nimport { WINDOW, WindowRef } from '@mosaic-design/infosec-components/tokens';\nimport { Theme, ThemeMode } from '@mosaic-design/infosec-components/types';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n    get mode(): ThemeMode {\n        return this._mode$.getValue();\n    }\n\n    set mode(value: ThemeMode) {\n        this._mode$.next(value);\n    }\n\n    get mode$(): Observable<ThemeMode> {\n        return this._mode$.asObservable();\n    }\n\n    private _mode$ = new BehaviorSubject(ThemeMode.Light);\n\n    get theme(): Theme {\n        return this._theme$.getValue();\n    }\n\n    get theme$(): Observable<Theme> {\n        return this._theme$.asObservable();\n    }\n\n    private _theme$ = new BehaviorSubject(Theme.Light);\n    private systemTheme$ = new BehaviorSubject(Theme.Light);\n\n    constructor(\n        private appRef: ApplicationRef,\n        @Inject(WINDOW) private windowRef: WindowRef\n    ) {\n        this.setupMatchMediaHandler();\n\n        combineLatest([this.mode$, this.systemTheme$]).subscribe(([mode, systemTheme]) => {\n            if (mode === ThemeMode.System) {\n                this._theme$.next(systemTheme);\n            } else {\n                this._theme$.next(mode === ThemeMode.Light ? Theme.Light : Theme.Dark);\n            }\n        });\n    }\n\n    setupMatchMediaHandler(): void {\n        const matchMedia = this.windowRef.matchMedia('(prefers-color-scheme: light)');\n\n        if (matchMedia.matches) {\n            this.systemTheme$.next(Theme.Light);\n        } else {\n            this.systemTheme$.next(Theme.Dark);\n        }\n\n        matchMedia.onchange = (event) => {\n            this.systemTheme$.next(event.matches ? Theme.Light : Theme.Dark);\n            this.appRef.tick();\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { fromEvent, merge, auditTime, Observable } from 'rxjs';\n\nconst USER_ACTIVITY_EVENTS = ['click', 'mousemove', 'keydown', 'wheel'];\nconst DEFAULT_COLLAPSE_TIME = 60000;\n\n@Injectable({ providedIn: 'root' })\nexport class UserActivityService {\n    trackActivity(collapseTimeInMs: number = DEFAULT_COLLAPSE_TIME): Observable<Event> {\n        const events$ = USER_ACTIVITY_EVENTS.map((eventName) => fromEvent(document, eventName, { capture: true }));\n\n        return merge(...events$).pipe(auditTime(collapseTimeInMs));\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { filter, Observable, pairwise, map, startWith } from 'rxjs';\n\nimport { skipQueryParamsChange } from '@mosaic-design/infosec-components/utils';\n\nexport type UrlChanged = {\n    previousUrl: string;\n    currentUrl: string;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class RouterUrlService {\n    readonly urlChanged$: Observable<UrlChanged>;\n\n    private previousUrl = '';\n    private currentUrl = '';\n\n    constructor(private readonly router: Router) {\n        this.urlChanged$ = this.router.events.pipe(\n            filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n            map(({ url }) => url),\n            skipQueryParamsChange(),\n            startWith('/'),\n            pairwise(),\n            map(([previousUrl, currentUrl]) => ({ previousUrl, currentUrl }))\n        );\n\n        this.urlChanged$.subscribe(({ currentUrl, previousUrl }) => {\n            this.previousUrl = previousUrl;\n            this.currentUrl = currentUrl;\n        });\n    }\n\n    getCurrentUrl(): string {\n        return this.currentUrl;\n    }\n\n    getPreviousUrl(): string {\n        return this.previousUrl;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { ValidatorFn } from '@angular/forms';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport {\n    createValidationSwitch,\n    ValidationSwitch,\n    ValidationSwitchOptionsInput\n} from '@mosaic-design/infosec-components/utils';\n\n@Injectable()\nexport class ValidationSwitchService implements ValidationSwitch {\n    private validationSwitch: ValidationSwitch;\n\n    #isValidationEnabled$ = new BehaviorSubject<boolean>(false);\n\n    readonly isValidationEnabled$: Observable<boolean>;\n\n    get isValidationEnabled(): boolean {\n        return this.#isValidationEnabled$.value;\n    }\n\n    constructor() {\n        this.validationSwitch = createValidationSwitch();\n        this.isValidationEnabled$ = this.#isValidationEnabled$.asObservable();\n    }\n\n    disableValidator(options?: ValidationSwitchOptionsInput): void {\n        this.validationSwitch.disableValidator(options);\n        this.#isValidationEnabled$.next(false);\n    }\n\n    enableValidator(options?: ValidationSwitchOptionsInput): void {\n        this.validationSwitch.enableValidator(options);\n        this.#isValidationEnabled$.next(true);\n    }\n\n    wrapValidator(validator: ValidatorFn | ValidatorFn[]): ValidatorFn {\n        return this.validationSwitch.wrapValidator(validator);\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}