{"version":3,"file":"koobiq-components-time-range.mjs","sources":["../../../packages/components/time-range/constants.ts","../../../packages/components/time-range/time-range.service.ts","../../../packages/components/time-range/time-range-editor.ts","../../../packages/components/time-range/time-range-editor.html","../../../packages/components/time-range/time-range-title.ts","../../../packages/components/time-range/time-range.ts","../../../packages/components/time-range/time-range-title-as-form-field.ts","../../../packages/components/time-range/module.ts","../../../packages/components/time-range/koobiq-components-time-range.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqCustomTimeRangeType, KbqTimeRangeType } from './types';\n\n/** Preset of selectable time ranges, provided by DI. */\nexport const KBQ_DEFAULT_TIME_RANGE_TYPES = new InjectionToken<KbqTimeRangeType[]>('KBQ_DEFAULT_TIME_RANGE_TYPES');\n\n/** Preset of custom time ranges, provided by DI. */\nexport const KBQ_CUSTOM_TIME_RANGE_TYPES = new InjectionToken<KbqCustomTimeRangeType[]>('KBQ_CUSTOM_TIME_RANGE_TYPES');\n\n/** Time range types in range editor if nothing provided */\nexport const defaultTimeRangeTypes: KbqTimeRangeType[] = [\n    'lastHour',\n    'last24Hours',\n    'last3Days',\n    'last7Days',\n    'last14Days',\n    'currentQuarter',\n    'currentYear',\n    'allTime',\n    'range'\n];\n\n/** @docs-private */\nexport function createMissingDateImplError(componentName: string, provider: string): Error {\n    return Error(\n        `${componentName}: No provider found for ${provider}. You must import one of the existing ` +\n            `modules at your application root or provide a custom implementation or use exists ones.`\n    );\n}\n\n/**\n * Validates that the 'from' date-time is not greater than the 'to' date-time in a range form.\n * Returns an error if the start date-time occurs after the end date-time.\n *\n * @param timeRangeService - Service used to manipulate date-time values.\n */\nexport const rangeValidator = <T>(timeRangeService: KbqTimeRangeService<T>): ValidatorFn => {\n    return (control: AbstractControl) => {\n        const form = control.value;\n\n        if (!form.fromTime || !form.fromDate || !form.toTime || !form.toDate) {\n            return null;\n        }\n\n        const fromDateTime = timeRangeService.combineDateAndTime(form.fromDate, form.fromTime);\n        const toDateTime = timeRangeService.combineDateAndTime(form.toDate, form.toTime);\n\n        return timeRangeService.dateAdapter.compareDate(fromDateTime, toDateTime) > 0\n            ? { fromIsGreaterThanTo: fromDateTime }\n            : null;\n    };\n};\n","import { inject, Injectable } from '@angular/core';\nimport { DateAdapter, DateFormatter } from '@koobiq/components/core';\nimport {\n    createMissingDateImplError,\n    defaultTimeRangeTypes,\n    KBQ_CUSTOM_TIME_RANGE_TYPES,\n    KBQ_DEFAULT_TIME_RANGE_TYPES\n} from './constants';\nimport {\n    KbqCustomTimeRangeType,\n    KbqRange,\n    KbqRangeValue,\n    KbqTimeRangeRange,\n    KbqTimeRangeTranslationType,\n    KbqTimeRangeType,\n    KbqTimeRangeUnits\n} from './types';\n\n@Injectable()\nexport class KbqTimeRangeService<T> {\n    readonly dateAdapter = inject<DateAdapter<T>>(DateAdapter);\n    readonly dateFormatter = inject<DateFormatter<T>>(DateFormatter);\n\n    readonly providedDefaultTimeRangeTypes =\n        inject(KBQ_DEFAULT_TIME_RANGE_TYPES, { optional: true }) || defaultTimeRangeTypes;\n\n    readonly customTimeRangeTypes = inject(KBQ_CUSTOM_TIME_RANGE_TYPES, { optional: true });\n\n    readonly DEFAULT_RANGE_TYPE: KbqTimeRangeType = 'lastHour';\n\n    readonly timeRangeConfig: Record<KbqTimeRangeType, Omit<KbqCustomTimeRangeType, 'type'>> = {\n        lastMinute: { units: { minutes: -1 }, translationType: 'minutes' },\n        last5Minutes: { units: { minutes: -5 }, translationType: 'minutes' },\n        last15Minutes: { units: { minutes: -15 }, translationType: 'minutes' },\n        last30Minutes: { units: { minutes: -30 }, translationType: 'minutes' },\n\n        lastHour: { units: { hours: -1 }, translationType: 'hours' },\n        last24Hours: { units: { hours: -24 }, translationType: 'hours' },\n\n        last3Days: { units: { days: -3 }, translationType: 'days' },\n        last7Days: { units: { days: -7 }, translationType: 'days' },\n        last14Days: { units: { days: -14 }, translationType: 'days' },\n        last30Days: { units: { days: -30 }, translationType: 'days' },\n\n        last3Months: { units: { months: -3 }, translationType: 'months' },\n        last12Months: { units: { months: -12 }, translationType: 'months' },\n\n        allTime: { units: {}, translationType: 'other' },\n        currentQuarter: { units: {}, translationType: 'other' },\n        currentYear: { units: {}, translationType: 'other' },\n        range: { units: {}, translationType: 'other' }\n    };\n\n    constructor() {\n        if (!this.dateAdapter) {\n            throw createMissingDateImplError('KbqTimeRange', 'DateAdapter');\n        }\n\n        this.customTimeRangeTypes\n            ?.filter(({ type }) => {\n                return !this.timeRangeConfig[type];\n            })\n            .forEach((type) => this.add(type));\n    }\n\n    static range = (dateTimeISOString: string): KbqRange => ({\n        startDateTime: dateTimeISOString\n    });\n\n    add({ type, ...customTimeRangeConfig }: KbqCustomTimeRangeType): void {\n        this.timeRangeConfig[type] = customTimeRangeConfig;\n    }\n\n    getTimeRangeTypeUnits(type: KbqTimeRangeType): KbqTimeRangeUnits {\n        return this.timeRangeConfig[type].units;\n    }\n\n    getTimeRangeUnitByType(type: KbqTimeRangeType): KbqTimeRangeTranslationType {\n        return this.timeRangeConfig[type].translationType;\n    }\n\n    getDefaultRangeValue(): Required<KbqRangeValue<T>> {\n        const from = this.dateAdapter!.addCalendarUnits(this.dateAdapter!.today(), { days: -1 });\n        const to = this.dateAdapter!.today();\n\n        return {\n            fromTime: this.omitMilliseconds(from),\n            fromDate: this.omitMilliseconds(from),\n            toTime: this.omitMilliseconds(to),\n            toDate: this.omitMilliseconds(to)\n        };\n    }\n\n    getTimeRangeDefaultValue(\n        rangeValue: KbqRangeValue<T>,\n        availableTimeRangeTypes: KbqTimeRangeType[] = []\n    ): KbqTimeRangeRange {\n        const defaultType =\n            availableTimeRangeTypes[0] ?? this.providedDefaultTimeRangeTypes[0] ?? this.DEFAULT_RANGE_TYPE;\n\n        return {\n            ...this.calculateTimeRange(defaultType, rangeValue || this.getDefaultRangeValue()),\n            type: defaultType\n        };\n    }\n\n    calculateTimeRange(type?: KbqTimeRangeType, rangeValue?: KbqRangeValue<T>): KbqRange {\n        if (!type) {\n            return {};\n        }\n\n        if (type === 'range') {\n            const checkedRangeValue = rangeValue || this.getDefaultRangeValue();\n\n            return {\n                startDateTime:\n                    checkedRangeValue.fromDate && checkedRangeValue.fromTime\n                        ? this.dateAdapter.toIso8601(\n                              this.combineDateAndTime(checkedRangeValue.fromDate, checkedRangeValue.fromTime)\n                          )\n                        : '',\n                endDateTime:\n                    checkedRangeValue.toDate && checkedRangeValue.toTime\n                        ? this.dateAdapter.toIso8601(\n                              this.combineDateAndTime(checkedRangeValue.toDate, checkedRangeValue.toTime)\n                          )\n                        : ''\n            };\n        }\n\n        switch (this.getTimeRangeUnitByType(type)) {\n            case 'other': {\n                switch (type) {\n                    case 'currentQuarter':\n                        return KbqTimeRangeService.range(\n                            this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'quarter'))\n                        );\n                    case 'currentYear':\n                        return KbqTimeRangeService.range(\n                            this.dateAdapter.toIso8601(this.dateAdapter.startOf(this.dateAdapter.today(), 'year'))\n                        );\n                    case 'allTime':\n                    default: {\n                        return this.timeRangeConfig[type].range ?? {};\n                    }\n                }\n            }\n            default: {\n                return this.lastUnitsRange(this.getTimeRangeTypeUnits(type));\n            }\n        }\n    }\n\n    combineDateAndTime(date: T, time: T): T {\n        return this.dateAdapter!.createDateTime(\n            this.dateAdapter.getYear(date),\n            this.dateAdapter.getMonth(date),\n            this.dateAdapter.getDate(date),\n            this.dateAdapter.getHours(time),\n            this.dateAdapter.getMinutes(time),\n            this.dateAdapter.getSeconds(time),\n            this.dateAdapter.getMilliseconds(time)\n        );\n    }\n\n    lastUnitsRange = (unitsInfo: KbqTimeRangeUnits): KbqRange =>\n        KbqTimeRangeService.range(\n            this.dateAdapter.toIso8601(this.dateAdapter.addCalendarUnits(this.dateAdapter.today(), unitsInfo))\n        );\n\n    checkAndCorrectTimeRangeValue(\n        value: KbqTimeRangeRange | null | undefined,\n        availableTimeRangeTypes: KbqTimeRangeType[],\n        rangeValue: KbqRangeValue<T>\n    ): KbqTimeRangeRange {\n        let result =\n            value && (!availableTimeRangeTypes.length || availableTimeRangeTypes.includes(value.type))\n                ? value\n                : this.getTimeRangeDefaultValue(rangeValue, availableTimeRangeTypes);\n\n        if (!result.startDateTime || (result.type === 'range' && (!result.startDateTime || !result.endDateTime))) {\n            result = {\n                ...this.calculateTimeRange(result.type, rangeValue),\n                type: result.type\n            };\n        }\n\n        return result;\n    }\n\n    omitMilliseconds(date: T): T {\n        return this.dateAdapter.createDateTime(\n            this.dateAdapter.getYear(date),\n            this.dateAdapter.getMonth(date),\n            this.dateAdapter.getDate(date),\n            this.dateAdapter.getHours(date),\n            this.dateAdapter.getMinutes(date),\n            this.dateAdapter.getSeconds(date),\n            0\n        );\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    inject,\n    input,\n    OnInit,\n    TemplateRef,\n    viewChildren,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n    AbstractControl,\n    ControlValueAccessor,\n    FormControl,\n    FormGroup,\n    FormGroupDirective,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    NgForm,\n    ReactiveFormsModule,\n    ValidationErrors,\n    Validator\n} from '@angular/forms';\nimport { ErrorStateMatcher, KbqTimeRangeLocaleConfig } from '@koobiq/components/core';\nimport { KbqDatepickerModule } from '@koobiq/components/datepicker';\nimport { KbqFieldset, KbqFieldsetItem, KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqRadioModule } from '@koobiq/components/radio';\nimport { KbqTimepicker, KbqTimepickerModule, TimeFormats } from '@koobiq/components/timepicker';\nimport { merge } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { rangeValidator } from './constants';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n    KbqRangeValue,\n    KbqTimeRangeOptionContext,\n    KbqTimeRangeRange,\n    KbqTimeRangeType,\n    KbqTimeRangeTypeContext\n} from './types';\n\ninterface FormValue<T> {\n    type: FormControl<KbqTimeRangeType>;\n    fromTime: FormControl<T>;\n    fromDate: FormControl<T>;\n    toTime: FormControl<T>;\n    toDate: FormControl<T>;\n}\n\nclass RangeErrorStateMatcher implements ErrorStateMatcher {\n    isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n        return !!form?.invalid || !!control?.invalid;\n    }\n}\n\n/** @docs-private */\n@Component({\n    selector: 'kbq-time-range-editor',\n    imports: [\n        NgTemplateOutlet,\n        ReactiveFormsModule,\n        KbqFieldset,\n        KbqFieldsetItem,\n        KbqDatepickerModule,\n        KbqFormFieldModule,\n        KbqTimepickerModule,\n        KbqRadioModule,\n        KbqIcon\n    ],\n    templateUrl: './time-range-editor.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'kbq-time-range__editor'\n    },\n    providers: [\n        {\n            multi: true,\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: KbqTimeRangeEditor\n        },\n        {\n            multi: true,\n            provide: NG_VALIDATORS,\n            useExisting: KbqTimeRangeEditor\n        }\n    ]\n})\nexport class KbqTimeRangeEditor<T> implements ControlValueAccessor, Validator, OnInit {\n    private readonly timeRangeService = inject(KbqTimeRangeService);\n\n    /** The maximum selectable date. */\n    readonly maxDate = input<T | null>(null);\n    /** The minimum selectable date. */\n    readonly minDate = input<T | null>(null);\n    /** Preset of selectable ranges */\n    readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n    /** Provided value of selected range */\n    readonly rangeValue = input<Required<KbqRangeValue<T>>>(this.timeRangeService.getDefaultRangeValue());\n    readonly showRangeAsDefault = input.required<boolean>();\n    readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfig>();\n    /** Customizable option output */\n    readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n\n    /** @docs-private */\n    protected readonly isRangeVisible = computed(\n        () => this.showRangeAsDefault() || this.availableTimeRangeTypes().includes('range')\n    );\n\n    /** @docs-private */\n    protected readonly timeRangeTypesWithoutRange = computed<KbqTimeRangeOptionContext[]>(() => {\n        const localeConfig = this.localeConfiguration();\n\n        return this.availableTimeRangeTypes()\n            .filter((type) => type !== 'range')\n            .map((type) => ({\n                type,\n                translationType: this.timeRangeService.getTimeRangeUnitByType(type),\n                units: this.timeRangeService.getTimeRangeTypeUnits(type),\n                formattedValue: this.getFormattedOption(type, localeConfig)\n            }));\n    });\n\n    /** @docs-private */\n    protected readonly timepickerList = viewChildren<KbqTimepicker<T>>(KbqTimepicker);\n\n    /** @docs-private */\n    protected readonly form: FormGroup<FormValue<T>>;\n    /** @docs-private */\n    protected readonly timepickerFormat = TimeFormats.HHmmss;\n    /** @docs-private */\n    protected readonly rangeStateMatcher = new RangeErrorStateMatcher();\n\n    private lastValidationErrorOnEmit: ValidationErrors | null = null;\n\n    constructor() {\n        const defaultRangeValue = this.rangeValue();\n\n        this.form = new FormGroup(\n            {\n                type: new FormControl<KbqTimeRangeType>(this.timeRangeService.DEFAULT_RANGE_TYPE, {\n                    nonNullable: true\n                }),\n                fromTime: new FormControl<T>(defaultRangeValue.fromTime, { nonNullable: true }),\n                fromDate: new FormControl<T>(defaultRangeValue.fromDate, { nonNullable: true }),\n                toTime: new FormControl<T>(defaultRangeValue.toTime, { nonNullable: true }),\n                toDate: new FormControl<T>(defaultRangeValue.toDate, { nonNullable: true })\n            },\n            { validators: rangeValidator(this.timeRangeService) }\n        );\n\n        const rangeControls = [\n            this.form.controls.fromTime,\n            this.form.controls.fromDate,\n            this.form.controls.toTime,\n            this.form.controls.toDate\n        ];\n\n        merge(...rangeControls.map((control) => control.statusChanges))\n            .pipe(takeUntilDestroyed())\n            .subscribe(() => (this.lastValidationErrorOnEmit = this.concatControlValidationErrors()));\n\n        this.form.valueChanges\n            .pipe(\n                map((formValue) => formValue.type),\n                distinctUntilChanged(),\n                takeUntilDestroyed()\n            )\n            .subscribe((type) => {\n                const isDisabled = type !== 'range';\n\n                rangeControls.forEach((control) => {\n                    if (isDisabled) {\n                        control.disable({ emitEvent: false });\n                    } else {\n                        control.enable({ emitEvent: false });\n                    }\n                });\n            });\n\n        this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe((formValue) => {\n            const range = this.mapTimeRange(formValue);\n\n            if (range) this.onChange(range);\n        });\n\n        this.form.statusChanges.pipe(takeUntilDestroyed()).subscribe((status) => {\n            const timepickerList = this.timepickerList();\n\n            if (timepickerList.at(0)) {\n                timepickerList.at(0)!.errorState = status === 'INVALID';\n            }\n        });\n    }\n\n    ngOnInit(): void {\n        const defaultRangeValue = this.rangeValue();\n        const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n        this.form.setValue({\n            type: (availableTimeRangeTypes.length && availableTimeRangeTypes[0]) || 'range',\n            fromTime: defaultRangeValue.fromTime,\n            fromDate: defaultRangeValue.fromDate,\n            toTime: defaultRangeValue.toTime,\n            toDate: defaultRangeValue.toDate\n        });\n    }\n\n    /** @docs-private */\n    validate(): ValidationErrors | null {\n        return this.form.errors || this.lastValidationErrorOnEmit;\n    }\n\n    /** Implemented as part of ControlValueAccessor */\n    writeValue(value?: KbqTimeRangeRange): void {\n        if (!value) return;\n\n        const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n            value,\n            this.availableTimeRangeTypes(),\n            this.form.value\n        );\n\n        this.form.controls.type.setValue(corrected.type);\n\n        if (corrected.type === 'range' && corrected.startDateTime && corrected.endDateTime) {\n            const from: T = this.timeRangeService.dateAdapter.deserialize(corrected.startDateTime);\n            const to: T = this.timeRangeService.dateAdapter.deserialize(corrected.endDateTime);\n\n            this.form.patchValue({\n                fromTime: from,\n                fromDate: from,\n                toTime: to,\n                toDate: to\n            });\n        }\n    }\n\n    /** @docs-private */\n    onChange = (_value: KbqTimeRangeRange) => {};\n    /** @docs-private */\n    onTouch = () => {};\n    /** Implemented as part of ControlValueAccessor */\n    registerOnChange(fn: (value: KbqTimeRangeRange) => void): void {\n        this.onChange = fn;\n    }\n    /** Implemented as part of ControlValueAccessor */\n    registerOnTouched(fn: () => void): void {\n        this.onTouch = fn;\n    }\n\n    private mapTimeRange({ type }: Partial<KbqTimeRangeTypeContext> & KbqRangeValue<T>): KbqTimeRangeRange | undefined {\n        if (!type) return;\n\n        return {\n            type,\n            ...this.timeRangeService.calculateTimeRange(type, {\n                // use control.value, since via form.value control values can be undefined\n                fromTime: this.form.controls.fromTime.value,\n                fromDate: this.form.controls.fromDate.value,\n                toDate: this.form.controls.toTime.value,\n                toTime: this.form.controls.toTime.value\n            })\n        };\n    }\n\n    private getFormattedOption(type: KbqTimeRangeType, localeConfig: KbqTimeRangeLocaleConfig): string {\n        const translationType = this.timeRangeService.getTimeRangeUnitByType(type);\n\n        if (translationType === 'other') return '';\n\n        const range = this.timeRangeService.calculateTimeRange(type);\n\n        return this.timeRangeService.dateFormatter.duration(\n            this.timeRangeService.dateAdapter.deserialize(range.startDateTime!),\n            this.timeRangeService.dateAdapter.today(),\n            [translationType],\n            false,\n            localeConfig.durationTemplate.option\n        );\n    }\n\n    private concatControlValidationErrors(): ValidationErrors | null {\n        let result: ValidationErrors | null = this.form.errors;\n\n        Object.values(this.form.controls).forEach((control: AbstractControl) => {\n            if (control.errors) {\n                result = {\n                    ...result,\n                    ...control.errors\n                };\n            }\n        });\n\n        return result;\n    }\n}\n","<form [formGroup]=\"form\">\n    <kbq-radio-group class=\"kbq-time-range-editor__container\" [formControl]=\"form.controls.type\">\n        @let types = timeRangeTypesWithoutRange();\n\n        @if (types.length) {\n            <div class=\"kbq-time-range-editor__predefined\">\n                @for (type of types; track type) {\n                    <kbq-radio-button class=\"kbq-time-range-editor__predefined-option\" [value]=\"type.type\">\n                        <ng-container\n                            *ngTemplateOutlet=\"optionTemplate() || defaultOptionTemplate; context: { $implicit: type }\"\n                        />\n                    </kbq-radio-button>\n                }\n            </div>\n        }\n\n        @if (isRangeVisible()) {\n            @let localeConfig = localeConfiguration();\n\n            <div class=\"kbq-time-range-editor__range\" role=\"group\">\n                @if (types.length) {\n                    <kbq-radio-button [value]=\"'range'\">{{ localeConfig.editor.rangeLabel }}</kbq-radio-button>\n                }\n\n                <div class=\"kbq-time-range-editor__date-time\">\n                    <span class=\"kbq-time-range-editor__date-time-prefix\" [attr.aria-label]=\"localeConfig.editor.from\">\n                        {{ localeConfig.editor.from }}\n                    </span>\n                    <kbq-fieldset>\n                        <kbq-form-field kbqFieldsetItem>\n                            <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n                            <input kbqTimepicker [format]=\"timepickerFormat\" [formControl]=\"form.controls.fromTime\" />\n                        </kbq-form-field>\n\n                        <kbq-form-field>\n                            <input\n                                [min]=\"minDate()\"\n                                [max]=\"maxDate()\"\n                                [kbqDatepicker]=\"datepickerFrom\"\n                                [formControl]=\"form.controls.fromDate\"\n                                [errorStateMatcher]=\"rangeStateMatcher\"\n                            />\n                            <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerFrom\" />\n                            <kbq-datepicker #datepickerFrom [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n                        </kbq-form-field>\n                    </kbq-fieldset>\n                </div>\n\n                <div class=\"kbq-time-range-editor__date-time\">\n                    <span class=\"kbq-time-range-editor__date-time-prefix\" [attr.aria-label]=\"localeConfig.editor.to\">\n                        {{ localeConfig.editor.to }}\n                    </span>\n                    <kbq-fieldset>\n                        <kbq-form-field kbqFieldsetItem>\n                            <i kbq-icon=\"kbq-clock_16\" kbqPrefix [autoColor]=\"true\"></i>\n                            <input kbqTimepicker [format]=\"timepickerFormat\" [formControl]=\"form.controls.toTime\" />\n                        </kbq-form-field>\n\n                        <kbq-form-field>\n                            <input\n                                [min]=\"minDate()\"\n                                [max]=\"maxDate()\"\n                                [kbqDatepicker]=\"datepickerTo\"\n                                [formControl]=\"form.controls.toDate\"\n                                [errorStateMatcher]=\"rangeStateMatcher\"\n                            />\n                            <kbq-datepicker-toggle-icon kbqSuffix [for]=\"datepickerTo\" />\n                            <kbq-datepicker #datepickerTo [minDate]=\"minDate()\" [maxDate]=\"maxDate()\" />\n                        </kbq-form-field>\n                    </kbq-fieldset>\n                </div>\n            </div>\n        }\n    </kbq-radio-group>\n</form>\n\n<ng-template #defaultOptionTemplate let-context>\n    @let localeConfig = localeConfiguration();\n    @switch (context.translationType) {\n        @case ('other') {\n            @switch (context.type) {\n                @case ('allTime') {\n                    {{ localeConfig.editor.allTime }}\n                }\n                @case ('currentQuarter') {\n                    {{ localeConfig.editor.currentQuarter }}\n                }\n                @case ('currentYear') {\n                    {{ localeConfig.editor.currentYear }}\n                }\n            }\n        }\n        @default {\n            {{ context.formattedValue }}\n        }\n    }\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, Injector, input, TemplateRef } from '@angular/core';\nimport { KbqTimeRangeLocaleConfig } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqLinkModule } from '@koobiq/components/link';\nimport { KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTimeRangeService } from './time-range.service';\nimport { KbqTimeRangeCustomizableTitleContext, KbqTimeRangeRange, KbqTimeRangeTitleContext } from './types';\n\n/** @docs-private */\n@Component({\n    selector: 'kbq-time-range-title',\n    imports: [\n        NgTemplateOutlet,\n        KbqLinkModule,\n        KbqIconModule\n    ],\n    template: `\n        @if (titleTemplate()) {\n            <ng-container *ngTemplateOutlet=\"titleTemplate()!; context: titleContext() ?? null; injector: injector\" />\n        } @else {\n            <a kbq-link pseudo>\n                <span class=\"kbq-link__text\">{{ formattedDate() }}</span>\n\n                <i kbq-icon=\"kbq-calendar-o_16\"></i>\n            </a>\n        }\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqTimeRangeTitle {\n    private readonly timeRangeService = inject(KbqTimeRangeService);\n    private readonly popover = inject(KbqPopoverTrigger, { host: true });\n    protected readonly injector = inject(Injector);\n\n    readonly timeRange = input.required<KbqTimeRangeRange | null>();\n    readonly localeConfiguration = input.required<KbqTimeRangeLocaleConfig>();\n    readonly titleTemplate = input<TemplateRef<any>>();\n\n    protected readonly context = computed<KbqTimeRangeTitleContext | undefined>(() => {\n        const timeRange = this.timeRange();\n\n        if (!timeRange) return undefined;\n\n        return {\n            ...timeRange,\n            ...this.timeRangeService.getTimeRangeTypeUnits(timeRange.type)\n        };\n    });\n\n    protected readonly titleContext = computed<KbqTimeRangeCustomizableTitleContext | undefined>(() => {\n        const context = this.context();\n        const formattedDate = this.formattedDate();\n\n        let customizableTitleContext = { formattedDate, popover: this.popover };\n\n        if (context) {\n            customizableTitleContext = { ...context, ...customizableTitleContext };\n        }\n\n        return {\n            $implicit: customizableTitleContext,\n            ...customizableTitleContext\n        };\n    });\n\n    protected readonly formattedDate = computed(() => {\n        const context = this.context();\n        const localeConfiguration = this.localeConfiguration();\n\n        if (!context) {\n            return localeConfiguration.title.placeholder;\n        }\n\n        const timeRangeUnit = this.timeRangeService.getTimeRangeUnitByType(context.type);\n\n        if (timeRangeUnit === 'other') {\n            switch (context.type) {\n                case 'range': {\n                    return (\n                        localeConfiguration.title.for +\n                        ' ' +\n                        this.timeRangeService.dateFormatter.rangeLongDate(\n                            this.timeRangeService.dateAdapter.deserialize(context.startDateTime ?? ''),\n                            this.timeRangeService.dateAdapter.deserialize(context.endDateTime ?? '')\n                        )\n                    );\n                }\n                case 'allTime': {\n                    return localeConfiguration.editor.allTime;\n                }\n                case 'currentQuarter': {\n                    return localeConfiguration.editor.currentQuarter;\n                }\n                case 'currentYear': {\n                    return localeConfiguration.editor.currentYear;\n                }\n                default: {\n                    return '';\n                }\n            }\n        }\n\n        if (!context.startDateTime) return '';\n\n        return (\n            localeConfiguration.title.for +\n            ' ' +\n            this.timeRangeService.dateFormatter.duration(\n                this.timeRangeService.dateAdapter.deserialize(context.startDateTime),\n                this.timeRangeService.dateAdapter.today(),\n                [timeRangeUnit],\n                false,\n                localeConfiguration.durationTemplate.title\n            )\n        );\n    });\n}\n","import {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    inject,\n    InjectionToken,\n    input,\n    OnInit,\n    output,\n    Provider,\n    signal,\n    TemplateRef,\n    ViewEncapsulation,\n    WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport {\n    KBQ_LOCALE_SERVICE,\n    KbqTimeRangeLocaleConfig,\n    PopUpPlacements,\n    PopUpSizes,\n    ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqPopoverModule, KbqPopoverTrigger } from '@koobiq/components/popover';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeService } from './time-range.service';\nimport {\n    KbqRangeValue,\n    KbqTimeRangeCustomizableTitleContext,\n    KbqTimeRangeOptionContext,\n    KbqTimeRangeRange,\n    KbqTimeRangeType\n} from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_TIME_RANGE_LOCALE_CONFIGURATION = new InjectionToken<KbqTimeRangeLocaleConfig>(\n    'KBQ_TIME_RANGE_LOCALE_CONFIGURATION',\n    { factory: () => ruRULocaleData.timeRange }\n);\n\n/** Utility provider for `KBQ_TIME_RANGE_LOCALE_CONFIGURATION`. */\nexport const kbqTimeRangeLocaleConfigurationProvider = (configuration: KbqTimeRangeLocaleConfig): Provider => ({\n    provide: KBQ_TIME_RANGE_LOCALE_CONFIGURATION,\n    useValue: configuration\n});\n\n@Component({\n    selector: 'kbq-time-range',\n    imports: [\n        ReactiveFormsModule,\n        KbqPopoverModule,\n        KbqButtonModule,\n        KbqTimeRangeEditor,\n        KbqTimeRangeTitle\n    ],\n    template: `\n        @let localeConfig = localeConfiguration();\n        <kbq-time-range-title\n            #popover=\"kbqPopover\"\n            class=\"kbq-time-range__trigger\"\n            kbqPopover\n            kbqPopoverClass=\"kbq-time-range__popover\"\n            [kbqPopoverSize]=\"popoverSize\"\n            [kbqPopoverContent]=\"timeRangePopoverContent\"\n            [kbqPopoverFooter]=\"timeRangePopoverFooter\"\n            [kbqPopoverPlacement]=\"popupPlacement\"\n            [kbqPopoverArrow]=\"arrow()\"\n            [titleTemplate]=\"titleTemplate()\"\n            [timeRange]=\"titleValue()\"\n            [localeConfiguration]=\"localeConfig\"\n            (kbqPopoverVisibleChange)=\"onVisibleChange($event)\"\n        />\n\n        <ng-template #timeRangePopoverContent>\n            <kbq-time-range-editor\n                [maxDate]=\"maxDate()\"\n                [minDate]=\"minDate()\"\n                [formControl]=\"rangeEditorControl\"\n                [localeConfiguration]=\"localeConfig\"\n                [showRangeAsDefault]=\"showRangeAsDefault()\"\n                [rangeValue]=\"normalizedDefaultRangeValue()\"\n                [availableTimeRangeTypes]=\"availableTimeRangeTypes()\"\n                [optionTemplate]=\"optionTemplate()\"\n            />\n        </ng-template>\n\n        <ng-template #timeRangePopoverFooter>\n            <div class=\"kbq-time-range__buttons\" role=\"group\">\n                <button\n                    kbq-button\n                    [color]=\"'contrast'\"\n                    [disabled]=\"rangeEditorControl.invalid\"\n                    (click)=\"onApply(popover)\"\n                >\n                    {{ localeConfig.editor.apply }}\n                </button>\n\n                <button kbq-button (click)=\"onCancel(popover)\">{{ localeConfig.editor.cancel }}</button>\n            </div>\n        </ng-template>\n    `,\n    styleUrls: ['./time-range.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'kbq-time-range'\n    },\n    providers: [KbqTimeRangeService]\n})\nexport class KbqTimeRange<T> implements ControlValueAccessor, OnInit {\n    private readonly timeRangeService = inject<KbqTimeRangeService<T>>(KbqTimeRangeService);\n    private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n    /** @docs-private */\n    readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n    /** The minimum selectable date. */\n    readonly minDate = input<T>();\n    /** The maximum selectable date. */\n    readonly maxDate = input<T>();\n    /** provided value of selected range */\n    readonly defaultRangeValue = input<KbqRangeValue<T>>();\n    /** Preset of selectable ranges */\n    readonly availableTimeRangeTypes = input<KbqTimeRangeType[]>(this.timeRangeService.providedDefaultTimeRangeTypes);\n    /** Customizable trigger output */\n    readonly titleTemplate = input<TemplateRef<KbqTimeRangeCustomizableTitleContext>>();\n    /** Customizable option output */\n    readonly optionTemplate = input<TemplateRef<KbqTimeRangeOptionContext>>();\n    /** Whether to show popover with arrow */\n    readonly arrow = input(true, { transform: booleanAttribute });\n    /**\n     * Whether to show range in popover if not provided\n     * @see availableTimeRangeTypes\n     */\n    readonly showRangeAsDefault = input(true);\n    /** Whether component should fallback to default value if null provided */\n    readonly nonNullable = input(true, { transform: booleanAttribute });\n\n    /** Emit value update if provided value via formControl wasn't valid */\n    readonly valueCorrected = output<KbqTimeRangeRange>();\n\n    /**\n     * Used to calculate time range.\n     * @docs-private */\n    protected readonly normalizedDefaultRangeValue = computed(() => ({\n        ...this.timeRangeService.getDefaultRangeValue(),\n        ...this.defaultRangeValue()\n    }));\n\n    /** @docs-private */\n    protected readonly titleValue: WritableSignal<KbqTimeRangeRange | null>;\n    /** @docs-private */\n    protected readonly rangeEditorControl: FormControl<KbqTimeRangeRange>;\n\n    /** @docs-private */\n    protected readonly popoverSize = PopUpSizes.Medium;\n    /** @docs-private */\n    protected readonly popupPlacement = PopUpPlacements.BottomLeft;\n\n    /** @docs-private */\n    protected readonly localeConfiguration = signal(inject(KBQ_TIME_RANGE_LOCALE_CONFIGURATION));\n\n    constructor() {\n        if (this.ngControl) {\n            this.ngControl.valueAccessor = this;\n        }\n\n        const defaultValue = this.timeRangeService.getTimeRangeDefaultValue(\n            this.normalizedDefaultRangeValue(),\n            this.availableTimeRangeTypes()\n        );\n\n        this.titleValue = signal(this.nonNullable() ? defaultValue : null);\n        this.rangeEditorControl = new FormControl<KbqTimeRangeRange>(defaultValue, { nonNullable: true });\n\n        this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(() => {\n            this.localeConfiguration.set(this.localeService?.getParams('timeRange') ?? ruRULocaleData.timeRange);\n        });\n\n        toObservable(this.availableTimeRangeTypes)\n            .pipe(takeUntilDestroyed())\n            .subscribe(this.handleAvailableTypesChange);\n    }\n\n    ngOnInit(): void {\n        // call again on init, so input signals values will be correct\n        this.writeValue(this.ngControl?.value ?? null);\n    }\n\n    /** Implemented as part of ControlValueAccessor */\n    writeValue(value: KbqTimeRangeRange | null): void {\n        const nonNullable = this.nonNullable();\n\n        const availableTimeRangeTypes = this.availableTimeRangeTypes();\n\n        const corrected = this.timeRangeService.checkAndCorrectTimeRangeValue(\n            value,\n            availableTimeRangeTypes,\n            this.normalizedDefaultRangeValue()\n        );\n\n        if (\n            (value && value.type && !('startDateTime' in value && availableTimeRangeTypes.includes(value.type))) ||\n            (nonNullable && value === null)\n        ) {\n            this.valueCorrected.emit(corrected);\n        }\n\n        this.titleValue.set(nonNullable || value !== null ? corrected : null);\n        this.rangeEditorControl.setValue(corrected);\n    }\n\n    /** @docs-private */\n    onApply(popover: KbqPopoverTrigger): void {\n        this.titleValue.set(this.rangeEditorControl.value);\n        this.onChange(this.rangeEditorControl.value);\n        popover.hide();\n    }\n\n    /** @docs-private */\n    onCancel(popover: KbqPopoverTrigger): void {\n        popover.hide();\n    }\n\n    onVisibleChange(isVisible: boolean) {\n        const titleValue = this.titleValue();\n\n        if (!isVisible && titleValue) {\n            this.rangeEditorControl.setValue(titleValue);\n        }\n    }\n\n    /** @docs-private */\n    onChange = (_value: KbqTimeRangeRange) => {};\n    /** @docs-private */\n    onTouch = () => {};\n    /** Implemented as part of ControlValueAccessor */\n    registerOnChange(fn: (_value: KbqTimeRangeRange) => void): void {\n        this.onChange = fn;\n    }\n    /** Implemented as part of ControlValueAccessor */\n    registerOnTouched(fn: () => void): void {\n        this.onTouch = fn;\n    }\n\n    private handleAvailableTypesChange = (types: KbqTimeRangeType[]): void => {\n        if (types.includes(this.rangeEditorControl.value.type) || this.rangeEditorControl.value.type === 'range') {\n            return;\n        }\n\n        const timeRangeDefaultValue = this.timeRangeService.getTimeRangeDefaultValue(\n            this.normalizedDefaultRangeValue(),\n            types.length ? types : ['range']\n        );\n\n        this.titleValue.set(timeRangeDefaultValue);\n        this.rangeEditorControl.setValue(timeRangeDefaultValue);\n        this.onChange(timeRangeDefaultValue);\n    };\n}\n","import { ChangeDetectionStrategy, Component, Directive, inject } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { Observable, Subject } from 'rxjs';\nimport { KbqTimeRange } from './time-range';\n\n/** Directive for easy using styles of time-range placeholder publicly. */\n@Directive({\n    selector: '[kbqTimeRangeTitlePlaceholder]',\n    host: {\n        class: 'kbq-time-range-title__placeholder'\n    }\n})\nexport class KbqTimeRangeTitlePlaceholder {}\n\n/** Component simulates `KbqFormFieldControl` allowing to provide custom content inside `KbqFormField` */\n@Component({\n    selector: 'kbq-time-range-title-as-control',\n    template: `\n        <ng-content />\n    `,\n    providers: [\n        {\n            provide: KbqFormFieldControl,\n            useExisting: KbqTimeRangeTitleAsControl\n        }\n    ],\n    host: {\n        '[attr.tabindex]': '0',\n        class: 'kbq-time-range-title-as-form-field'\n    },\n    styles: `\n        :host {\n            &:focus-visible {\n                outline: none;\n            }\n            display: flex;\n            align-items: center;\n        }\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqTimeRangeTitleAsControl implements KbqFormFieldControl<any> {\n    private timeRange = inject(KbqTimeRange);\n\n    /** @docs-private */\n    controlType = 'select';\n    /** @docs-private */\n    stateChanges: Observable<void> = new Subject<void>();\n    /** @docs-private */\n    ngControl: NgControl | null = this.timeRange.ngControl;\n    /** @docs-private */\n    value: any;\n    /** @docs-private */\n    id: string;\n    /** @docs-private */\n    placeholder: string;\n    /** @docs-private */\n    focused: boolean;\n    /** @docs-private */\n    empty: boolean;\n    /** @docs-private */\n    required: boolean;\n    /** @docs-private */\n    disabled: boolean;\n    /** @docs-private */\n    errorState: boolean;\n    /** @docs-private */\n    onContainerClick(_event: MouseEvent): void {}\n    /** @docs-private */\n    focus(_options?: FocusOptions): void {}\n}\n","import { NgModule } from '@angular/core';\nimport { KbqTimeRange } from './time-range';\nimport { KbqTimeRangeEditor } from './time-range-editor';\nimport { KbqTimeRangeTitle } from './time-range-title';\nimport { KbqTimeRangeTitleAsControl, KbqTimeRangeTitlePlaceholder } from './time-range-title-as-form-field';\n\nconst COMPONENTS = [\n    KbqTimeRange,\n    KbqTimeRangeTitle,\n    KbqTimeRangeEditor,\n    KbqTimeRangeTitlePlaceholder,\n    KbqTimeRangeTitleAsControl\n];\n\n@NgModule({\n    imports: COMPONENTS,\n    exports: COMPONENTS\n})\nexport class KbqTimeRangeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}