import * as _angular_core from '@angular/core';
import { OnDestroy, OnInit, TemplateRef } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';
import { MatDateRangePicker, MatDatepickerInputEvent } from '@angular/material/datepicker';
import { MatFormFieldAppearance, FloatLabelType } from '@angular/material/form-field';
import { SdLabelDefDirective } from '@sdcorejs/angular/forms/directives';
import { SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
import { Size } from '@sdcorejs/utils/models';

interface Daterange {
    from?: string | null;
    to?: string | null;
}
declare class SdDateRange implements OnDestroy, OnInit {
    #private;
    id1: string;
    id2: string;
    picker: _angular_core.Signal<MatDateRangePicker<Date> | undefined>;
    sdLabelDef: _angular_core.Signal<SdLabelDefDirective | undefined>;
    private cdRef;
    private formConfig;
    autoIdInput: _angular_core.InputSignal<string | null | undefined>;
    autoId: _angular_core.Signal<string | undefined>;
    readonly dataDisabled: _angular_core.Signal<"true" | "false">;
    readonly dataInvalid: _angular_core.Signal<"true" | "false">;
    readonly dataEmpty: _angular_core.Signal<"true" | "false">;
    readonly dataValue: _angular_core.Signal<string>;
    readonly dataRequired: _angular_core.Signal<"true" | "false">;
    readonly dataErrorMessage: _angular_core.Signal<string | null>;
    name: _angular_core.InputSignal<string>;
    size: _angular_core.InputSignal<Size>;
    form: _angular_core.InputSignalWithTransform<FormGroup<any> | undefined, any>;
    label: _angular_core.InputSignal<string | undefined>;
    helperText: _angular_core.InputSignal<string | undefined>;
    hideInlineError: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Tổng hợp error message để hiển thị trong tooltip khi hideInlineError = true.
     */
    readonly errorMessage: _angular_core.Signal<string | undefined>;
    required: _angular_core.InputSignalWithTransform<boolean, unknown>;
    disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** Display mode: `false` edit · `true` static view · `'inline'` view + click-to-edit (range picker). */
    viewed: _angular_core.InputSignalWithTransform<SdViewed, SdViewedInput>;
    /** In `viewed='inline'`, show a hover clear-× on the text face. Set `false` when the host owns removal (chips). */
    clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** `true` when `viewed === 'inline'`. */
    readonly isInline: _angular_core.Signal<boolean>;
    /** `true` when `viewed === true` (static view, no editor). */
    readonly isViewed: _angular_core.Signal<boolean>;
    /** Open the range picker from the inline text face. No-op unless `viewed='inline'`. */
    enterInlineEdit: () => void;
    /** Optional <ng-template #sdValue> projected by consumer to override the viewed text. */
    sdValueTemplate: _angular_core.Signal<TemplateRef<unknown> | undefined>;
    /**
     * Formatted "dd/MM/yyyy → dd/MM/yyyy" string for the viewed-mode display.
     * why: viewed mode chỉ hiển thị text — cần format gọn cho cả 2 đầu range,
     * Returns empty when both ends are blank, "from →" when only from is set, and so on.
     */
    formatted: _angular_core.Signal<string>;
    /** Open the range picker panel programmatically (for query-bar chip auto-open). */
    open: () => void;
    appearanceInput: _angular_core.InputSignal<MatFormFieldAppearance | undefined>;
    appearance: _angular_core.Signal<MatFormFieldAppearance>;
    floatLabel: _angular_core.InputSignal<FloatLabelType>;
    minInput: _angular_core.InputSignal<any>;
    resolvedMin: _angular_core.Signal<Date | null>;
    maxInput: _angular_core.InputSignal<any>;
    resolvedMax: _angular_core.Signal<Date | null>;
    valueModel: _angular_core.ModelSignal<Daterange | null | undefined>;
    sdChange: _angular_core.OutputEmitterRef<Daterange | null | undefined>;
    isMobileOrTablet: boolean;
    formControl: FormControl<any>;
    control1: FormControl<any>;
    control2: FormControl<any>;
    constructor();
    ngOnInit(): void;
    ngOnDestroy(): void;
    onStartChange: (event: MatDatepickerInputEvent<Date>) => void;
    onEndChange: (event: MatDatepickerInputEvent<Date>) => void;
    clear: () => void;
    onEnter: () => void;
    onFocus: () => void;
    onBlur: () => void;
    onClosePicker: () => void;
    onOpenPicker: (event: MouseEvent) => void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdDateRange, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdDateRange, "sd-date-range", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; }, ["sdLabelDef", "sdValueTemplate"], never, true, never>;
}

export { SdDateRange };
