{"version":3,"file":"taiga-ui-kit-components-input-date-time.mjs","sources":["../../../projects/kit/components/input-date-time/input-date-time.options.ts","../../../projects/kit/components/input-date-time/input-date-time.directive.ts","../../../projects/kit/components/input-date-time/input-date-time-content.component.ts","../../../projects/kit/components/input-date-time/input-date-time.component.ts","../../../projects/kit/components/input-date-time/input-date-time.ts","../../../projects/kit/components/input-date-time/taiga-ui-kit-components-input-date-time.ts"],"sourcesContent":["import {type FactoryProvider, inject, InjectionToken} from '@angular/core';\nimport {type MaskitoTimeMode} from '@maskito/kit';\nimport {\n    TUI_IDENTITY_VALUE_TRANSFORMER,\n    type TuiValueTransformer,\n} from '@taiga-ui/cdk/classes';\nimport {type TuiDay, type TuiTime} from '@taiga-ui/cdk/date-time';\nimport {tuiProvideOptions} from '@taiga-ui/cdk/utils/di';\nimport {\n    TUI_INPUT_DATE_DEFAULT_OPTIONS,\n    TUI_INPUT_DATE_OPTIONS,\n    type TuiInputDateOptions,\n} from '@taiga-ui/kit/components/input-date';\n\nexport interface TuiInputDateTimeOptions extends Omit<\n    TuiInputDateOptions,\n    'valueTransformer'\n> {\n    readonly timeMode: MaskitoTimeMode; // TODO(v6): move to `TUI_TIME_FORMAT`\n    readonly dateTimeSeparator: string;\n    readonly valueTransformer: TuiValueTransformer<[TuiDay, TuiTime | null] | null, any>;\n}\n\nexport const TUI_INPUT_DATE_TIME_DEFAULT_OPTIONS = {\n    valueTransformer: TUI_IDENTITY_VALUE_TRANSFORMER,\n    timeMode: 'HH:MM',\n    dateTimeSeparator: ', ',\n} as const;\n\nexport const TUI_INPUT_DATE_TIME_OPTIONS = new InjectionToken<TuiInputDateTimeOptions>(\n    ngDevMode ? 'TUI_INPUT_DATE_TIME_OPTIONS' : '',\n    {\n        factory: () => ({\n            ...inject(TUI_INPUT_DATE_OPTIONS),\n            ...TUI_INPUT_DATE_TIME_DEFAULT_OPTIONS,\n        }),\n    },\n);\n\nexport const tuiInputDateTimeOptionsProvider = (\n    options: Partial<TuiInputDateTimeOptions>,\n): FactoryProvider =>\n    tuiProvideOptions(TUI_INPUT_DATE_TIME_OPTIONS, options, {\n        ...TUI_INPUT_DATE_DEFAULT_OPTIONS,\n        ...TUI_INPUT_DATE_TIME_DEFAULT_OPTIONS,\n    });\n","import {computed, Directive, effect, inject, input, untracked} from '@angular/core';\nimport {MaskitoDirective} from '@maskito/angular';\nimport {type MaskitoOptions} from '@maskito/core';\nimport {\n    maskitoDateTime,\n    type MaskitoDateTimeParams,\n    maskitoParseTime,\n    maskitoSelectionChangeHandler,\n    maskitoStringifyTime,\n} from '@maskito/kit';\nimport {tuiAsControl, tuiValueTransformerFrom} from '@taiga-ui/cdk/classes';\nimport {\n    DATE_FILLER_LENGTH,\n    MILLISECONDS_IN_DAY,\n    TUI_FIRST_DAY,\n    TUI_LAST_DAY,\n    TuiDay,\n    TuiTime,\n} from '@taiga-ui/cdk/date-time';\nimport {tuiDirectiveBinding} from '@taiga-ui/cdk/utils/di';\nimport {tuiClamp, tuiSum} from '@taiga-ui/cdk/utils/math';\nimport {tuiSetSignal} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {type TuiCalendar} from '@taiga-ui/core/components/calendar';\nimport {tuiAsOptionContent} from '@taiga-ui/core/components/data-list';\nimport {TuiWithInput} from '@taiga-ui/core/components/input';\nimport {\n    tuiAsTextfieldAccessor,\n    type TuiTextfieldAccessor,\n} from '@taiga-ui/core/components/textfield';\nimport {\n    TuiItemsHandlersDirective,\n    TuiItemsHandlersValidator,\n} from '@taiga-ui/core/directives/items-handlers';\nimport {TuiDropdownAuto} from '@taiga-ui/core/portals/dropdown';\nimport {TuiInputDateBase, tuiWithDateFiller} from '@taiga-ui/kit/components/input-date';\nimport {TuiSelectOption} from '@taiga-ui/kit/components/select';\nimport {TUI_TIME_FORMAT, TUI_TIME_TEXTS} from '@taiga-ui/kit/tokens';\nimport {tuiMaskito} from '@taiga-ui/kit/utils';\nimport {noop} from 'rxjs';\n\nimport {TUI_INPUT_DATE_TIME_OPTIONS} from './input-date-time.options';\n\nconst MIN_TIME = new TuiTime(0, 0);\nconst MAX_TIME = TuiTime.fromAbsoluteMilliseconds(MILLISECONDS_IN_DAY - 1);\n\n@Directive({\n    selector: 'input[tuiInputDateTime]',\n    providers: [\n        tuiAsOptionContent(TuiSelectOption),\n        tuiAsControl(TuiInputDateTimeDirective),\n        tuiAsTextfieldAccessor(TuiInputDateTimeDirective),\n        tuiValueTransformerFrom(TUI_INPUT_DATE_TIME_OPTIONS),\n    ],\n    hostDirectives: [\n        MaskitoDirective,\n        TuiDropdownAuto,\n        TuiItemsHandlersValidator,\n        TuiWithInput,\n    ],\n    host: {'(blur)': 'onBlur($event.target.value)'},\n})\nexport class TuiInputDateTimeDirective\n    extends TuiInputDateBase<readonly [TuiDay, TuiTime | null]>\n    implements TuiTextfieldAccessor<readonly [TuiDay, TuiTime | null]>\n{\n    private readonly timeFillers = inject(TUI_TIME_TEXTS);\n    private readonly timeFormat = inject(TUI_TIME_FORMAT);\n\n    protected override readonly options = inject(TUI_INPUT_DATE_TIME_OPTIONS);\n\n    protected override readonly filler = tuiWithDateFiller((date) => {\n        const timeFiller = this.timeFillers()?.[this.timeMode()] ?? '';\n        const [am] = this.timeFormat().dayPeriod;\n        const dayPeriodFiller = am && ` ${'A'.repeat(am.length)}`;\n\n        return `${date}${this.options.dateTimeSeparator}${timeFiller}${dayPeriodFiller}`;\n    });\n\n    protected override readonly valueEffect = effect(noop);\n\n    protected override readonly identity = tuiDirectiveBinding(\n        TuiItemsHandlersDirective,\n        'identityMatcher',\n        (a, b) => tuiSum(...a.map(Number)) === tuiSum(...b.map(Number)),\n        {},\n    );\n\n    protected readonly disabledItemHandler = tuiDirectiveBinding(\n        TuiItemsHandlersValidator,\n        'disabledItemHandler',\n        computed(\n            () => (value: readonly [TuiDay, TuiTime | null] | null) =>\n                Boolean(value && this.handlers.disabledItemHandler()(value)),\n        ),\n    );\n\n    protected readonly mask = tuiMaskito(\n        computed(() =>\n            this.computeMask({\n                dateMode: this.format().mode,\n                timeMode: this.timeMode(),\n                min: this.toNativeDate([this.min(), this.minTime()]),\n                max: this.toNativeDate([this.max(), this.maxTime()]),\n                dateSeparator: this.format().separator,\n                dateTimeSeparator: this.options.dateTimeSeparator,\n                timeStep: 0,\n                dayPeriod: this.timeFormat().dayPeriod,\n                locale: '', // TODO: add to public API\n            }),\n        ),\n    );\n\n    public override readonly min = computed<TuiDay>((min = this.minInput()) =>\n        Array.isArray(min) ? min[0] : (min ?? this.options.min ?? TUI_FIRST_DAY),\n    );\n\n    public override readonly max = computed<TuiDay>((max = this.maxInput()) =>\n        Array.isArray(max) ? max[0] : (max ?? this.options.max ?? TUI_LAST_DAY),\n    );\n\n    public readonly minTime = computed((min = this.minInput()) =>\n        Array.isArray(min) ? min[1] : MIN_TIME,\n    );\n\n    public readonly maxTime = computed((max = this.maxInput()) =>\n        Array.isArray(max) ? max[1] : MAX_TIME,\n    );\n\n    public readonly timeMode = input(this.options.timeMode);\n\n    public readonly minInput = input<\n        TuiDay | readonly [TuiDay, TuiTime | null] | null | undefined\n    >(this.options.min, {alias: 'min'});\n\n    public readonly maxInput = input<\n        TuiDay | readonly [TuiDay, TuiTime | null] | null | undefined\n    >(this.options.max, {alias: 'max'});\n\n    public setValue(value: readonly [TuiDay, TuiTime | null] | null): void {\n        this.onChange(value);\n        this.input.value.set(this.stringify(value));\n    }\n\n    public override setDate(newDate: TuiDay): void {\n        const [date, time] = this.clampTime([newDate, this.value()?.[1] ?? null]);\n\n        this.setValue([date, time]);\n        this.open.set(false);\n        setTimeout(\n            (caretIndex = DATE_FILLER_LENGTH + this.options.dateTimeSeparator.length) =>\n                this.el.setSelectionRange(caretIndex, caretIndex),\n        );\n    }\n\n    public override writeValue(value: [TuiDay, TuiTime | null] | null): void {\n        const reset = this.control.pristine && this.control.untouched && !value;\n        const changed = untracked(() => value !== this.value());\n\n        if (changed || reset) {\n            super.writeValue(value);\n            untracked(() => this.input.value.set(this.stringify(this.value())));\n        }\n    }\n\n    protected override processCalendar(calendar: TuiCalendar): void {\n        super.processCalendar(calendar);\n        tuiSetSignal(calendar.disabledItemHandler, (day: TuiDay) =>\n            this.handlers.disabledItemHandler()([day, null]),\n        );\n    }\n\n    protected override onValueChange(value: string): void {\n        this.input.value.set(value);\n        this.control?.control?.updateValueAndValidity({emitEvent: false});\n\n        const [date = '', time = ''] = value.split(this.options.dateTimeSeparator);\n\n        const parsedDate =\n            date.length >= DATE_FILLER_LENGTH\n                ? TuiDay.normalizeParse(date, this.format().mode)\n                : null;\n\n        const parsedTime = this.isTimeComplete(time) ? this.parseTime(time) : null;\n\n        if (!parsedDate || (time && !parsedTime)) {\n            return this.onChange(null);\n        }\n\n        const [prevDate, prevTime = null] = this.value() ?? [];\n\n        if (!prevDate?.daySame(parsedDate) || Number(parsedTime) !== Number(prevTime)) {\n            this.onChange([parsedDate, parsedTime]);\n        }\n    }\n\n    protected override stringify(\n        value: readonly [TuiDay, TuiTime | null] | null,\n    ): string {\n        const [date, time] = value ?? [];\n\n        const dateString =\n            date?.toString(this.format().mode, this.format().separator) ?? '';\n\n        const timeString =\n            time &&\n            maskitoStringifyTime(time.toAbsoluteMilliseconds(), {\n                ...this.timeFormat(),\n                mode: this.timeMode(),\n            });\n\n        return timeString\n            ? `${dateString}${this.options.dateTimeSeparator}${timeString}`\n            : dateString;\n    }\n\n    protected onBlur(value: string): void {\n        const [date = '', timeValue = ''] = value.split(this.options.dateTimeSeparator);\n\n        if (timeValue && !this.value()) {\n            const time = this.parseTime(timeValue);\n\n            const newValue = [\n                TuiDay.normalizeParse(date, this.format().mode),\n                time,\n            ] as const;\n\n            this.control?.control?.updateValueAndValidity({emitEvent: false});\n            this.onChange(newValue);\n            this.input.value.set(this.stringify(newValue));\n        }\n    }\n\n    private clampTime([date, time]: [TuiDay, TuiTime | null]): [TuiDay, TuiTime | null] {\n        const min = date.daySame(this.min())\n            ? this.minTime().toAbsoluteMilliseconds()\n            : -Infinity;\n\n        const max = date.daySame(this.max())\n            ? this.maxTime().toAbsoluteMilliseconds()\n            : Infinity;\n\n        return [\n            date,\n            time &&\n                TuiTime.fromAbsoluteMilliseconds(\n                    tuiClamp(time.toAbsoluteMilliseconds(), min, max),\n                ),\n        ];\n    }\n\n    private computeMask(params: Required<MaskitoDateTimeParams>): MaskitoOptions {\n        const options = maskitoDateTime(params);\n        const {timeMode, dateMode, dateTimeSeparator, dayPeriod} = params;\n\n        const inputModeSwitchPlugin = maskitoSelectionChangeHandler((element) => {\n            element.inputMode =\n                element.selectionStart! >=\n                dateMode!.length +\n                    dateTimeSeparator.length +\n                    // TODO(v6): delete `replace()`\n                    timeMode.replace(' AA', '').length\n                    ? 'text'\n                    : 'numeric';\n        });\n\n        return {\n            ...options,\n            plugins: options.plugins.concat(\n                timeMode.includes('AA') || dayPeriod.some(Boolean)\n                    ? inputModeSwitchPlugin\n                    : [],\n            ),\n        };\n    }\n\n    private toNativeDate([{year, month, day}, {hours, minutes, seconds, ms}]: readonly [\n        TuiDay,\n        TuiTime,\n    ]): Date {\n        return new Date(year, month, day, hours, minutes, seconds, ms);\n    }\n\n    private isTimeComplete(time: string): boolean {\n        const [am] = this.timeFormat().dayPeriod;\n        const dayPeriodLength = am ? ` ${am}`.length : 0;\n\n        return time.length === this.timeMode().length + dayPeriodLength;\n    }\n\n    private parseTime(time: string): TuiTime {\n        return TuiTime.fromAbsoluteMilliseconds(\n            maskitoParseTime(time, {\n                ...this.timeFormat(),\n                mode: this.timeMode(),\n            }),\n        );\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    inject,\n    ViewEncapsulation,\n} from '@angular/core';\nimport {TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {TuiDay, TuiTime} from '@taiga-ui/cdk/date-time';\n\nimport {TuiInputDateTimeComponent} from './input-date-time.component';\nimport {TuiInputDateTimeDirective} from './input-date-time.directive';\n\n@Component({\n    selector: 'tui-input-date-time-content',\n    template: `\n        @if (host.native) {\n            <input\n                type=\"datetime-local\"\n                [attr.list]=\"component.list\"\n                [max]=\"max()\"\n                [min]=\"min()\"\n                [step]=\"step()\"\n                [value]=\"value()\"\n                (click.stop.zoneless)=\"(0)\"\n                (input)=\"onInput($any($event.target).value)\"\n                (pointerdown.stop.zoneless)=\"(0)\"\n            />\n        }\n    `,\n    styles: `\n        [data-tui-version='${TUI_VERSION}'] {\n            @import './input-date-time.style.less';\n        }\n    `,\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiInputDateTimeContent {\n    protected readonly component = inject(TuiInputDateTimeComponent);\n    protected readonly host = inject(TuiInputDateTimeDirective);\n\n    protected readonly step = computed(() =>\n        this.component.getStep(this.host.timeMode()),\n    );\n\n    protected readonly value = computed(() =>\n        this.component.toISOString(this.host.value()),\n    );\n\n    protected readonly min = computed(() =>\n        this.component.toISOString([this.host.min(), this.host.minTime()]),\n    );\n\n    protected readonly max = computed(() =>\n        this.component.toISOString([this.host.max(), this.host.maxTime()]),\n    );\n\n    protected onInput(value: string): void {\n        if (!value) {\n            return this.host.setValue(null);\n        }\n\n        const date = new Date(value);\n        const day = TuiDay.fromLocalNativeDate(date);\n        const time = TuiTime.fromLocalNativeDate(date);\n\n        this.host.setValue([day, time]);\n    }\n}\n","import {Directive} from '@angular/core';\nimport {TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {\n    tuiAsTextfieldContent,\n    TuiTextfieldContent,\n    TuiWithNativePicker,\n} from '@taiga-ui/core/components/textfield';\nimport {TuiNativeTimePicker} from '@taiga-ui/kit/components/input-time';\n\nimport {TuiInputDateTimeContent} from './input-date-time-content.component';\n\n@Directive({\n    selector: 'input[tuiInputDateTime][type=\"datetime-local\"]',\n    providers: [tuiAsTextfieldContent(() => TuiInputDateTimeContent)],\n    hostDirectives: [TuiWithNativePicker, TuiTextfieldContent],\n    host: {'data-tui-version': TUI_VERSION},\n})\n// TODO(v6): rename to TuiInputDateTimeDirective\nexport class TuiInputDateTimeComponent extends TuiNativeTimePicker {}\n","import {TuiCalendar} from '@taiga-ui/core/components/calendar';\nimport {TuiLabel} from '@taiga-ui/core/components/label';\nimport {\n    TuiTextfieldComponent,\n    TuiTextfieldOptionsDirective,\n} from '@taiga-ui/core/components/textfield';\nimport {TuiDropdownContent} from '@taiga-ui/core/portals/dropdown';\n\nimport {TuiInputDateTimeComponent} from './input-date-time.component';\nimport {TuiInputDateTimeDirective} from './input-date-time.directive';\n\nexport const TuiInputDateTime = [\n    TuiInputDateTimeDirective,\n    TuiInputDateTimeComponent,\n    TuiCalendar,\n    TuiLabel,\n    TuiTextfieldComponent,\n    TuiTextfieldOptionsDirective,\n    TuiDropdownContent,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}