{"version":3,"file":"ngx-com-components-datepicker.mjs","sources":["../../../projects/com/components/datepicker/datepicker.types.ts","../../../projects/com/components/datepicker/datepicker.variants.ts","../../../projects/com/components/datepicker/datepicker.component.ts","../../../projects/com/components/datepicker/date-range-picker.component.ts","../../../projects/com/components/datepicker/index.ts","../../../projects/com/components/datepicker/ngx-com-components-datepicker.ts"],"sourcesContent":["/**\n * Types and interfaces for DatePicker and DateRangePicker components.\n */\n\n/** Date format preset names */\nexport type DateFormatPreset =\n  | 'short' | 'medium' | 'long' | 'full'\n  | 'time' | 'timeWithSeconds'\n  | 'dateTimeShort' | 'dateTimeMedium' | 'dateTimeLong';\n\n/** Panel width configuration */\nexport type DatepickerPanelWidth = 'auto' | 'trigger' | `${number}px` | `${number}rem`;\n\n/** Size variants for datepicker components */\nexport type DatepickerSize = 'sm' | 'default' | 'lg';\n\n/** Visual variant for datepicker trigger */\nexport type DatepickerVariant = 'default' | 'outline' | 'ghost' | 'filled' | 'naked';\n\n/** Validation state for datepicker */\nexport type DatepickerState = 'default' | 'error' | 'success';\n\n/** Configuration for datepicker footer actions */\nexport interface DatepickerFooterConfig {\n  /** Show today button */\n  showToday?: boolean;\n  /** Show clear button */\n  showClear?: boolean;\n  /** Custom today button label */\n  todayLabel?: string;\n  /** Custom clear button label */\n  clearLabel?: string;\n}\n\n/** Value type for DateRangePicker */\nexport interface DateRangeValue<D> {\n  /** Start date of the range */\n  start: D | null;\n  /** End date of the range */\n  end: D | null;\n}\n\n/** Creates a DateRangeValue */\nexport function createDateRangeValue<D>(\n  start: D | null = null,\n  end: D | null = null\n): DateRangeValue<D> {\n  return { start, end };\n}\n\n/** Generates a unique ID for datepicker instances */\nlet datepickerIdCounter = 0;\nexport function generateDatepickerId(): string {\n  return `com-datepicker-${datepickerIdCounter++}`;\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport type {\n  DatepickerSize,\n  DatepickerVariant,\n  DatepickerState,\n} from './datepicker.types';\n\n/**\n * CVA variants for the datepicker trigger input.\n * Uses semantic theme tokens for consistent cross-theme styling.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n *         `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-hover`,\n *         `--color-warn`, `--color-success`, `--color-primary`, `--color-border`,\n *         `--color-disabled`, `--color-disabled-foreground`, `--radius-input`\n */\nexport const datepickerTriggerVariants: (props?: {\n  variant?: DatepickerVariant;\n  size?: DatepickerSize;\n  state?: DatepickerState;\n  open?: boolean;\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'justify-between',\n    'w-full',\n    'rounded-input',\n    'border',\n    'bg-input-background',\n    'text-input-foreground',\n    'transition-colors',\n    'duration-normal',\n    'placeholder:text-input-placeholder',\n    'focus-within:outline-[1px]',\n    'focus-within:outline-offset-2',\n    'focus-within:outline-ring',\n    'cursor-pointer',\n  ],\n  {\n    variants: {\n      variant: {\n        default: [\n          'border-input-border',\n          'hover:border-border',\n        ],\n        outline: [\n          'border-2',\n          'border-input-border',\n          'hover:border-foreground',\n        ],\n        ghost: [\n          'border-transparent',\n          'bg-transparent',\n          'hover:bg-muted',\n        ],\n        filled: [\n          'border-transparent',\n          'bg-muted',\n          'hover:bg-muted-hover',\n        ],\n        naked: [\n          'border-transparent',\n          'bg-transparent',\n          'shadow-none',\n          'focus-within:outline-none',\n          'rounded-none',\n        ],\n      },\n      size: {\n        sm: ['h-8', 'px-2', 'text-xs', 'gap-1'],\n        default: ['h-10', 'px-3', 'text-sm', 'gap-2'],\n        lg: ['h-12', 'px-4', 'text-base', 'gap-3'],\n      },\n      state: {\n        default: [],\n        error: [\n          'border-warn',\n          'focus-within:outline-warn',\n        ],\n        success: [\n          'border-success',\n          'focus-within:outline-success',\n        ],\n      },\n      open: {\n        true: ['outline-[1px]', 'outline-ring', 'border-primary'],\n        false: [],\n      },\n    },\n    compoundVariants: [\n      {\n        open: true,\n        variant: 'default',\n        class: ['border-primary'],\n      },\n      {\n        open: true,\n        variant: 'outline',\n        class: ['border-primary'],\n      },\n      // Naked variant should not show ring when open (form-field provides focus styling)\n      {\n        open: true,\n        variant: 'naked',\n        class: ['outline-none', 'border-transparent'],\n      },\n      // Naked variant should not show error border (form-field provides error styling)\n      {\n        state: 'error',\n        variant: 'naked',\n        class: ['border-transparent', 'focus-within:outline-none'],\n      },\n      // Naked variant should not show success border (form-field provides styling)\n      {\n        state: 'success',\n        variant: 'naked',\n        class: ['border-transparent', 'focus-within:outline-none'],\n      },\n    ],\n    defaultVariants: {\n      variant: 'default',\n      size: 'default',\n      state: 'default',\n      open: false,\n    },\n  }\n);\n\nexport type DatepickerTriggerVariants = VariantProps<typeof datepickerTriggerVariants>;\n\n/**\n * CVA variants for the disabled state of datepicker trigger.\n *\n * @tokens `--color-disabled`, `--color-disabled-foreground`\n */\nexport const datepickerDisabledVariants: () => string = cva([\n  'cursor-not-allowed',\n  'bg-disabled',\n  'text-disabled-foreground',\n  'hover:border-input-border',\n  'pointer-events-none',\n]);\n\nexport type DatepickerDisabledVariants = VariantProps<typeof datepickerDisabledVariants>;\n\n/**\n * CVA variants for the datepicker input field.\n *\n * @tokens `--color-input-foreground`, `--color-input-placeholder`\n */\nexport const datepickerInputVariants: (props?: {\n  size?: DatepickerSize;\n}) => string = cva(\n  [\n    'flex-1',\n    'bg-transparent',\n    'outline-none',\n    'placeholder:text-input-placeholder',\n    'disabled:cursor-not-allowed',\n    'min-w-0',\n    'truncate',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['text-xs'],\n        default: ['text-sm'],\n        lg: ['text-base'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DatepickerInputVariants = VariantProps<typeof datepickerInputVariants>;\n\n/**\n * CVA variants for the calendar icon button.\n *\n * @tokens `--color-ring`, `--color-muted-foreground`, `--radius-interactive-sm`\n */\nexport const datepickerIconVariants: (props?: {\n  size?: DatepickerSize;\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'justify-center',\n    'shrink-0',\n    'text-muted-foreground',\n    'transition-colors',\n    'hover:text-foreground',\n    'focus-visible:outline-[1px]',\n    'focus-visible:outline-offset-2',\n    'focus-visible:outline-ring',\n    'rounded-interactive-sm',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['h-4', 'w-4'],\n        default: ['h-5', 'w-5'],\n        lg: ['h-6', 'w-6'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DatepickerIconVariants = VariantProps<typeof datepickerIconVariants>;\n\n/**\n * CVA variants for the clear button.\n *\n * @tokens `--color-ring`, `--color-muted-foreground`, `--color-foreground`, `--radius-interactive-sm`\n */\nexport const datepickerClearVariants: (props?: {\n  size?: DatepickerSize;\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'justify-center',\n    'rounded-interactive-sm',\n    'text-muted-foreground',\n    'transition-colors',\n    'hover:text-foreground',\n    'focus-visible:outline-[1px]',\n    'focus-visible:outline-offset-2',\n    'focus-visible:outline-ring',\n    'shrink-0',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['h-4', 'w-4'],\n        default: ['h-5', 'w-5'],\n        lg: ['h-6', 'w-6'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DatepickerClearVariants = VariantProps<typeof datepickerClearVariants>;\n\n/**\n * CVA variants for the datepicker panel (overlay).\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`, `--radius-overlay`\n */\nexport const datepickerPanelVariants: (props?: {\n  size?: DatepickerSize;\n}) => string = cva(\n  [\n    'z-50',\n    'overflow-hidden',\n    'rounded-overlay',\n    'border',\n    'border-border-subtle',\n    'bg-popover',\n    'text-popover-foreground',\n    'shadow-overlay',\n    'outline-none',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['p-2', 'text-xs'],\n        default: ['p-3', 'text-sm'],\n        lg: ['p-4', 'text-base'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DatepickerPanelVariants = VariantProps<typeof datepickerPanelVariants>;\n\n/**\n * CVA variants for the footer section of the datepicker panel.\n *\n * @tokens `--color-border-subtle`\n */\nexport const datepickerFooterVariants: (props?: {\n  size?: DatepickerSize;\n}) => string = cva(\n  [\n    'flex',\n    'items-center',\n    'justify-between',\n    'border-t',\n    'border-border-subtle',\n    'mt-3',\n    'pt-3',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['mt-2', 'pt-2', 'gap-1'],\n        default: ['mt-3', 'pt-3', 'gap-2'],\n        lg: ['mt-4', 'pt-4', 'gap-3'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DatepickerFooterVariants = VariantProps<typeof datepickerFooterVariants>;\n\n/**\n * CVA variants for the footer buttons.\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n *         `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`, `--radius-control-sm`\n */\nexport const datepickerFooterButtonVariants: (props?: {\n  size?: DatepickerSize;\n  variant?: 'primary' | 'secondary';\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'justify-center',\n    'rounded-control-sm',\n    'font-medium',\n    'transition-colors',\n    'focus-visible:outline-[1px]',\n    'focus-visible:outline-offset-2',\n    'focus-visible:outline-ring',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['h-7', 'px-2', 'text-xs'],\n        default: ['h-8', 'px-3', 'text-sm'],\n        lg: ['h-9', 'px-4', 'text-base'],\n      },\n      variant: {\n        primary: [\n          'bg-primary',\n          'text-primary-foreground',\n          'hover:bg-primary-hover',\n        ],\n        secondary: [\n          'bg-muted',\n          'text-muted-foreground',\n          'hover:bg-muted-hover',\n        ],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n      variant: 'secondary',\n    },\n  }\n);\n\nexport type DatepickerFooterButtonVariants = VariantProps<typeof datepickerFooterButtonVariants>;\n\n/**\n * CVA variants for the range separator.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const datepickerRangeSeparatorVariants: (props?: {\n  size?: DatepickerSize;\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'justify-center',\n    'text-muted-foreground',\n    'shrink-0',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['px-1', 'text-xs'],\n        default: ['px-2', 'text-sm'],\n        lg: ['px-3', 'text-base'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DatepickerRangeSeparatorVariants = VariantProps<typeof datepickerRangeSeparatorVariants>;\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  ElementRef,\n  forwardRef,\n  inject,\n  input,\n  linkedSignal,\n  model,\n  output,\n  signal,\n  viewChild,\n  ViewContainerRef,\n  DOCUMENT,\n} from '@angular/core';\nimport type {\n  InputSignal,\n  ModelSignal,\n  OnDestroy,\n  OutputEmitterRef,\n  Signal,\n  TemplateRef,\n  WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl, FormGroupDirective, NgForm } from '@angular/forms';\nimport type { ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\nimport {\n  Overlay,\n  OverlayRef,\n  OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { A11yModule } from '@angular/cdk/a11y';\n\nimport { ComCalendar } from 'ngx-com/components/calendar';\nimport { DateAdapter, DATE_ADAPTER } from 'ngx-com/components/calendar';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport type { IconSize } from 'ngx-com/components/icon';\nimport {\n  CALENDAR_SELECTION_STRATEGY,\n  SingleSelectionStrategy,\n} from 'ngx-com/components/calendar';\nimport type { CalendarView, DateFilterFn } from 'ngx-com/components/calendar';\nimport { joinClasses } from 'ngx-com/utils';\nimport { mergeClasses } from 'ngx-com/utils';\nimport { FormFieldControl } from 'ngx-com/components/form-field';\nimport { ErrorStateMatcher } from 'ngx-com/components/form-field';\nimport type { FormFieldAppearance } from 'ngx-com/components/form-field';\nimport { ComTimePicker } from 'ngx-com/components/timepicker';\nimport { timepickerSectionVariants } from 'ngx-com/components/timepicker';\nimport type { ComTimeValue } from 'ngx-com/components/timepicker';\nimport { createTimeValue } from 'ngx-com/components/timepicker';\nimport {\n  datepickerTriggerVariants,\n  datepickerDisabledVariants,\n  datepickerInputVariants,\n  datepickerIconVariants,\n  datepickerClearVariants,\n  datepickerPanelVariants,\n  datepickerFooterVariants,\n  datepickerFooterButtonVariants,\n} from './datepicker.variants';\nimport type {\n  DatepickerSize,\n  DatepickerVariant,\n  DatepickerState,\n  DateFormatPreset,\n  DatepickerPanelWidth,\n} from './datepicker.types';\nimport { generateDatepickerId } from './datepicker.types';\n\n/** Default position for the datepicker panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n  // Below trigger, aligned start\n  { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n  // Above trigger, aligned start\n  { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n  // Below trigger, aligned end\n  { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n  // Above trigger, aligned end\n  { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/**\n * Single date picker component with calendar popup.\n * Implements ControlValueAccessor for Reactive Forms and Template-driven Forms.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n *         `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n *         `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n *         `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n *         `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example\n * ```html\n * <com-datepicker\n *   formControlName=\"birthDate\"\n *   placeholder=\"Select date...\"\n *   [min]=\"minDate\"\n *   [max]=\"maxDate\"\n *   [showTodayButton]=\"true\"\n *   [showClearButton]=\"true\"\n * />\n * ```\n */\n@Component({\n  selector: 'com-datepicker',\n  exportAs: 'comDatepicker',\n  template: `\n    <!-- Trigger container -->\n    <div\n      #triggerElement\n      [class]=\"triggerClasses()\"\n      role=\"group\"\n      tabindex=\"-1\"\n      [attr.aria-expanded]=\"isOpen()\"\n      [attr.aria-haspopup]=\"'dialog'\"\n      [attr.aria-owns]=\"panelId()\"\n      [attr.aria-disabled]=\"disabled() || null\"\n      (click)=\"onTriggerClick()\"\n      (keydown)=\"onTriggerKeydown($event)\"\n    >\n      <!-- Date input display -->\n      <input\n        #inputElement\n        type=\"text\"\n        [class]=\"inputClasses()\"\n        [value]=\"displayValue()\"\n        [placeholder]=\"placeholder()\"\n        [disabled]=\"disabled()\"\n        [readonly]=\"!allowManualInput()\"\n        [attr.id]=\"inputId()\"\n        [attr.aria-label]=\"ariaLabel() || placeholder()\"\n        [attr.aria-describedby]=\"effectiveAriaDescribedBy() || null\"\n        [attr.aria-invalid]=\"effectiveState() === 'error' || null\"\n        [attr.aria-required]=\"required() || null\"\n        (focus)=\"onInputFocus()\"\n        (input)=\"onInputChange($event)\"\n        (blur)=\"onInputBlur()\"\n        (keydown)=\"onInputKeydown($event)\"\n      />\n\n      <!-- Clear button -->\n      @if (showClearButton() && hasValue() && !disabled()) {\n        <button\n          type=\"button\"\n          [class]=\"clearClasses()\"\n          [attr.aria-label]=\"'Clear date'\"\n          (click)=\"clear($event)\"\n        >\n          <com-icon name=\"x\" [size]=\"iconSize()\" />\n        </button>\n      }\n\n      <!-- Calendar icon -->\n      <button\n        type=\"button\"\n        [class]=\"iconClasses()\"\n        [attr.aria-label]=\"isOpen() ? 'Close calendar' : 'Open calendar'\"\n        [disabled]=\"disabled()\"\n        tabindex=\"-1\"\n      >\n        <com-icon name=\"calendar\" [size]=\"iconSize()\" />\n      </button>\n    </div>\n\n    <!-- Panel template (rendered in overlay) -->\n    <ng-template #panelTemplate>\n      <div\n        [class]=\"panelClasses()\"\n        [attr.id]=\"panelId()\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        [attr.aria-label]=\"'Choose date'\"\n        (keydown)=\"onPanelKeydown($event)\"\n        cdkTrapFocus\n        [cdkTrapFocusAutoCapture]=\"true\"\n      >\n        <com-calendar\n          [activeDate]=\"calendarActiveDate()\"\n          [selected]=\"internalValue()\"\n          [minDate]=\"min()\"\n          [maxDate]=\"max()\"\n          [dateFilter]=\"dateFilter()\"\n          [startView]=\"startView()\"\n          [firstDayOfWeek]=\"firstDayOfWeek()\"\n          [bordered]=\"false\"\n          (selectedChange)=\"onDateSelected($event)\"\n          (activeDateChange)=\"onActiveDateChange($event)\"\n        />\n\n        @if (showTimePicker()) {\n          <div [class]=\"timeSectionClasses()\">\n            <com-time-picker\n              variant=\"embedded\"\n              [size]=\"size()\"\n              [value]=\"timeValue()\"\n              [use12HourFormat]=\"use12HourFormat()\"\n              [showSeconds]=\"showSeconds()\"\n              [minuteStep]=\"minuteStep()\"\n              [disabled]=\"disabled()\"\n              (timeChange)=\"onTimeChange($event)\"\n            />\n          </div>\n        }\n\n        @if (showTodayButton() || showFooterClearButton() || showTimePicker() || commitOnClose()) {\n          <div [class]=\"footerClasses()\">\n            @if (showTodayButton()) {\n              <button\n                type=\"button\"\n                [class]=\"todayButtonClasses()\"\n                (click)=\"selectToday()\"\n              >\n                Today\n              </button>\n            }\n            @if (showFooterClearButton()) {\n              <button\n                type=\"button\"\n                [class]=\"clearButtonClasses()\"\n                (click)=\"clear($event)\"\n              >\n                Clear\n              </button>\n            }\n            @if (showTimePicker() || commitOnClose()) {\n              <button\n                type=\"button\"\n                [class]=\"todayButtonClasses()\"\n                (click)=\"commitAndClose()\"\n              >\n                Done\n              </button>\n            }\n          </div>\n        }\n      </div>\n    </ng-template>\n\n    <!-- Live announcer region -->\n    <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n      {{ liveAnnouncement() }}\n    </div>\n  `,\n  styles: `\n    .sr-only {\n      position: absolute;\n      width: 1px;\n      height: 1px;\n      padding: 0;\n      margin: -1px;\n      overflow: hidden;\n      clip: rect(0, 0, 0, 0);\n      white-space: nowrap;\n      border: 0;\n    }\n  `,\n  imports: [\n    OverlayModule,\n    A11yModule,\n    ComCalendar,\n    ComIcon,\n    ComTimePicker,\n  ],\n  providers: [\n    SingleSelectionStrategy,\n    { provide: CALENDAR_SELECTION_STRATEGY, useExisting: SingleSelectionStrategy },\n    { provide: FormFieldControl, useExisting: forwardRef(() => ComDatepicker) },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-datepicker-host inline-block',\n    '[class.com-datepicker-disabled]': 'disabled()',\n    '[class.com-datepicker-open]': 'isOpen()',\n  },\n})\nexport class ComDatepicker<D> implements ControlValueAccessor, FormFieldControl<D | null>, Validator, OnDestroy {\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly overlay = inject(Overlay);\n  private readonly viewContainerRef = inject(ViewContainerRef);\n  private readonly document = inject(DOCUMENT);\n  private readonly dateAdapter = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n  /** NgControl bound to this datepicker (if using reactive forms). */\n  readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n  private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n  private readonly parentForm = inject(NgForm, { optional: true });\n  private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n  /** Reference to the trigger element. */\n  private readonly triggerRef: Signal<ElementRef<HTMLDivElement>> =\n    viewChild.required<ElementRef<HTMLDivElement>>('triggerElement');\n\n  /** Reference to the input element. */\n  private readonly inputRef: Signal<ElementRef<HTMLInputElement>> =\n    viewChild.required<ElementRef<HTMLInputElement>>('inputElement');\n\n  /** Reference to the panel template. */\n  private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n    viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n  /** Overlay reference. */\n  private overlayRef: OverlayRef | null = null;\n\n  /** Unique ID for the datepicker. */\n  private readonly datepickerId: string = generateDatepickerId();\n\n  // ============ INPUTS ============\n\n  /** Current value. */\n  readonly value: ModelSignal<D | null> = model<D | null>(null);\n\n  /** Minimum selectable date. */\n  readonly min: InputSignal<D | null> = input<D | null>(null);\n\n  /** Maximum selectable date. */\n  readonly max: InputSignal<D | null> = input<D | null>(null);\n\n  /** Custom filter function to disable specific dates. */\n  readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n  /** Date the calendar opens to (defaults to selected or today). */\n  readonly startAt: InputSignal<D | null> = input<D | null>(null);\n\n  /** Initial calendar view. */\n  readonly startView: InputSignal<CalendarView> = input<CalendarView>('month');\n\n  /** First day of week override (0=Sun, 1=Mon, ..., 6=Sat). */\n  readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n  /** Placeholder text. */\n  readonly placeholder: InputSignal<string> = input<string>('Select date...');\n\n  /** Whether the datepicker is disabled. */\n  readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n  /** Whether the datepicker is required. */\n  readonly required: InputSignal<boolean> = input<boolean>(false);\n\n  /** Display format for the date. */\n  readonly dateFormat: InputSignal<DateFormatPreset> = input<DateFormatPreset>('medium');\n\n  /** Show a clear button in the trigger. */\n  readonly showClearButton: InputSignal<boolean> = input<boolean>(false);\n\n  /** Show a today button in the footer. */\n  readonly showTodayButton: InputSignal<boolean> = input<boolean>(false);\n\n  /** Show a clear button in the footer. */\n  readonly showFooterClearButton: InputSignal<boolean> = input<boolean>(false);\n\n  /** Don't auto-close on selection. */\n  readonly keepOpen: InputSignal<boolean> = input<boolean>(false);\n\n  /** Allow manual text input. */\n  readonly allowManualInput: InputSignal<boolean> = input<boolean>(true);\n\n  /** Additional CSS classes for the panel. */\n  readonly panelClass: InputSignal<string> = input<string>('');\n\n  /** Panel width strategy. */\n  readonly panelWidth: InputSignal<DatepickerPanelWidth> = input<DatepickerPanelWidth>('auto');\n\n  /** CVA variant for trigger styling. */\n  readonly variant: InputSignal<DatepickerVariant> = input<DatepickerVariant>('default');\n\n  /** Size variant. */\n  readonly size: InputSignal<DatepickerSize> = input<DatepickerSize>('default');\n\n  /** Validation state. */\n  readonly state: InputSignal<DatepickerState> = input<DatepickerState>('default');\n\n  /** Additional CSS classes for the trigger. */\n  readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n  /** Accessible label for the input. */\n  readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n  /** ID of element describing the input. */\n  readonly ariaDescribedBy: InputSignal<string | null> = input<string | null>(null);\n\n  /** Custom error state matcher for determining when to show errors. */\n  readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n  // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n  readonly touched: ModelSignal<boolean> = model<boolean>(false);\n  readonly invalid: InputSignal<boolean> = input<boolean>(false);\n  readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], { alias: 'errors' });\n\n  /** Whether to show the time picker below the calendar. */\n  readonly showTimePicker: InputSignal<boolean> = input<boolean>(false);\n\n  /** 12h vs 24h format for the time picker. `null` = auto-detect. */\n  readonly use12HourFormat: InputSignal<boolean | null> = input<boolean | null>(null);\n\n  /** Whether the time picker shows seconds. */\n  readonly showSeconds: InputSignal<boolean> = input<boolean>(false);\n\n  /** Step interval for minutes in the time picker. */\n  readonly minuteStep: InputSignal<number> = input<number>(1);\n\n  /**\n   * When true, date/time selections while the panel is open update only the visual state.\n   * The value is committed (emitted via `dateChange`, propagated to forms) only when\n   * the user presses \"Done\". Closing via Escape or backdrop click reverts to the\n   * pre-open value without emitting.\n   *\n   * All in-panel actions (date selection, time change, today, footer clear) are buffered.\n   * The trigger clear button (panel closed) always commits immediately.\n   */\n  readonly commitOnClose: InputSignal<boolean> = input<boolean>(false);\n\n  // ============ OUTPUTS ============\n\n  /** Emitted when a date is selected. */\n  readonly dateChange: OutputEmitterRef<D | null> = output<D | null>();\n\n  /** Emitted when the panel opens. */\n  readonly opened: OutputEmitterRef<void> = output<void>();\n\n  /** Emitted when the panel closes. */\n  readonly closed: OutputEmitterRef<void> = output<void>();\n\n  // ============ INTERNAL STATE ============\n\n  /** Whether the panel is open. */\n  readonly isOpen: WritableSignal<boolean> = signal(false);\n\n  /** Internal value state (managed by CVA or input). */\n  readonly internalValue: WritableSignal<D | null> = linkedSignal<D | null>(\n    () => this.value() ?? null\n  );\n\n  /** Calendar active date for navigation. Recomputes when value or startAt changes; user navigation overrides via .set(). */\n  readonly calendarActiveDate: WritableSignal<D> = linkedSignal<{ value: D | null; startAt: D | null }, D>({\n    source: (): { value: D | null; startAt: D | null } => ({ value: this.internalValue(), startAt: this.startAt() }),\n    computation: ({ value, startAt }: { value: D | null; startAt: D | null }): D => value ?? startAt ?? this.dateAdapter.today(),\n  });\n\n  /**\n   * Snapshot of the value when the panel was opened.\n   * Used by `commitOnClose` to revert on Escape/backdrop close.\n   */\n  private readonly committedValue: WritableSignal<D | null> = signal<D | null>(null);\n\n  /** Live announcements for screen readers. */\n  readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n  /** Whether the input is focused (not panel). */\n  private readonly _inputFocused: WritableSignal<boolean> = signal(false);\n\n  /** IDs for aria-describedby (set by form-field). */\n  private readonly _describedByIds: WritableSignal<string> = signal('');\n\n  /** Form field appearance (set by form-field). */\n  private readonly _appearance: WritableSignal<FormFieldAppearance> = signal<FormFieldAppearance>('outline');\n\n  // ============ FormFieldControl SIGNALS ============\n\n  /** Whether the datepicker is focused (input focused or panel open). Implements FormFieldControl. */\n  readonly focused: Signal<boolean> = computed(() => this._inputFocused() || this.isOpen());\n\n  /** Whether the label should float. Label floats when focused or has a value. */\n  readonly shouldLabelFloat: Signal<boolean> = computed(() => this.focused() || this.hasValue());\n\n  /** Whether the control is in an error state. Implements FormFieldControl. */\n  readonly errorState: Signal<boolean> = computed(() => {\n    if (!this.ngControl) {\n      // Signal Forms: gate on invalid AND touched\n      return this.invalid() && this.touched();\n    }\n    // Reactive Forms: use ErrorStateMatcher\n    this.isOpen();\n    this.hasValue();\n    const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n    const form = this.parentFormGroup ?? this.parentForm;\n    return matcher.isErrorState(this.ngControl.control ?? null, form);\n  });\n\n  /** Structured validation errors from Signal Forms, exposed for the parent form field. */\n  readonly errors: Signal<readonly unknown[] | null> = computed(() =>\n    !this.ngControl ? this.sfErrors() : null\n  );\n\n  /** Unique ID for the control. Implements FormFieldControl. */\n  readonly id: Signal<string> = computed(() => `${this.datepickerId}-input`);\n\n  /**\n   * Effective state combining manual state with automatic error detection.\n   * Manual state takes precedence over auto-detected error state.\n   */\n  readonly effectiveState: Signal<DatepickerState> = computed(() => {\n    const manualState = this.state();\n    if (manualState !== 'default') return manualState;\n    return this.errorState() ? 'error' : 'default';\n  });\n\n  /** Combined aria-describedby from form-field and manual input. */\n  readonly effectiveAriaDescribedBy: Signal<string | null> = computed(() =>\n    this._describedByIds() || this.ariaDescribedBy() || null\n  );\n\n  // ============ COMPUTED STATE ============\n\n  /** Input element ID (alias for FormFieldControl id). */\n  readonly inputId: Signal<string> = this.id;\n\n  /** Panel element ID. */\n  readonly panelId: Signal<string> = computed(() => `${this.datepickerId}-panel`);\n\n  /** Whether the datepicker has a value. */\n  readonly hasValue: Signal<boolean> = computed(() => this.internalValue() !== null);\n\n  /** Icon size based on datepicker size. */\n  readonly iconSize: Signal<IconSize> = computed(() => {\n    const sizeMap: Record<DatepickerSize, IconSize> = {\n      sm: 'sm',\n      default: 'md',\n      lg: 'lg',\n    };\n    return sizeMap[this.size()];\n  });\n\n  /** Formatted display value. */\n  readonly displayValue: Signal<string> = computed(() => {\n    const value = this.internalValue();\n    if (!value) return '';\n    return this.dateAdapter.format(value, this.effectiveDateFormat());\n  });\n\n  /** Computed trigger classes. */\n  readonly triggerClasses: Signal<string> = computed(() => {\n    const baseClasses = datepickerTriggerVariants({\n      variant: this.variant(),\n      size: this.size(),\n      state: this.effectiveState(),\n      open: this.isOpen(),\n    });\n\n    const disabledClasses = this.disabled() ? datepickerDisabledVariants() : '';\n\n    // For naked variant, add padding based on form-field appearance\n    let paddingClasses = '';\n    if (this.variant() === 'naked') {\n      paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';\n    }\n\n    return mergeClasses(baseClasses, disabledClasses, paddingClasses, this.userClass());\n  });\n\n  /** Computed input classes. */\n  readonly inputClasses: Signal<string> = computed(() => {\n    return datepickerInputVariants({ size: this.size() });\n  });\n\n  /** Computed icon classes. */\n  readonly iconClasses: Signal<string> = computed(() => {\n    return datepickerIconVariants({ size: this.size() });\n  });\n\n  /** Computed clear button classes. */\n  readonly clearClasses: Signal<string> = computed(() => {\n    return datepickerClearVariants({ size: this.size() });\n  });\n\n  /** Computed panel classes. */\n  readonly panelClasses: Signal<string> = computed(() => {\n    const baseClasses = datepickerPanelVariants({ size: this.size() });\n    return joinClasses(baseClasses, this.panelClass());\n  });\n\n  /** Computed footer classes. */\n  readonly footerClasses: Signal<string> = computed(() => {\n    return datepickerFooterVariants({ size: this.size() });\n  });\n\n  /** Computed today button classes. */\n  readonly todayButtonClasses: Signal<string> = computed(() => {\n    return datepickerFooterButtonVariants({ size: this.size(), variant: 'primary' });\n  });\n\n  /** Computed clear button classes (footer). */\n  readonly clearButtonClasses: Signal<string> = computed(() => {\n    return datepickerFooterButtonVariants({ size: this.size(), variant: 'secondary' });\n  });\n\n  /** Time section divider classes. */\n  readonly timeSectionClasses: Signal<string> = computed(() => {\n    return timepickerSectionVariants({ size: this.size() });\n  });\n\n  /** Time value derived from the current date value. */\n  readonly timeValue: Signal<ComTimeValue | null> = computed(() => {\n    const date = this.internalValue();\n    if (!date) return null;\n    return createTimeValue(\n      this.dateAdapter.getHours(date),\n      this.dateAdapter.getMinutes(date),\n      this.dateAdapter.getSeconds(date),\n    );\n  });\n\n  /** Effective display format — switches to dateTime when time picker is shown. */\n  readonly effectiveDateFormat: Signal<DateFormatPreset> = computed(() => {\n    if (this.showTimePicker()) {\n      return this.showSeconds() ? 'dateTimeLong' : 'dateTimeMedium';\n    }\n    return this.dateFormat();\n  });\n\n  /** Whether the panel should stay open (keepOpen, time picker shown, or commitOnClose). */\n  readonly effectiveKeepOpen: Signal<boolean> = computed(() => {\n    return this.keepOpen() || this.showTimePicker() || this.commitOnClose();\n  });\n\n  // ============ CVA CALLBACKS ============\n\n  private onChange: (value: D | null) => void = () => {};\n  private onTouched: () => void = () => {};\n  private onValidatorChange: () => void = () => {};\n\n  constructor() {\n    // Wire up NgControl if present\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this;\n    }\n\n  }\n\n  ngOnDestroy(): void {\n    this.destroyOverlay();\n  }\n\n  // ============ CVA IMPLEMENTATION ============\n\n  writeValue(value: D | null): void {\n    this.internalValue.set(value);\n    this.committedValue.set(value);\n  }\n\n  registerOnChange(fn: (value: D | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(_isDisabled: boolean): void {\n    // Disabled state is handled via the disabled input\n  }\n\n  // ============ VALIDATOR IMPLEMENTATION ============\n\n  validate(): ValidationErrors | null {\n    const value = this.internalValue();\n\n    // Required validation\n    if (this.required() && !value) {\n      return { required: true };\n    }\n\n    if (value) {\n      // Min validation\n      const min = this.min();\n      if (min && this.dateAdapter.compareDate(value, min) < 0) {\n        return { minDate: { min, actual: value } };\n      }\n\n      // Max validation\n      const max = this.max();\n      if (max && this.dateAdapter.compareDate(value, max) > 0) {\n        return { maxDate: { max, actual: value } };\n      }\n\n      // Date filter validation\n      const dateFilter = this.dateFilter();\n      if (dateFilter && !dateFilter(value)) {\n        return { dateFilter: true };\n      }\n    }\n\n    return null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onValidatorChange = fn;\n  }\n\n  // ============ PUBLIC METHODS ============\n\n  /** Opens the datepicker panel. */\n  open(): void {\n    if (this.disabled() || this.isOpen()) {\n      return;\n    }\n\n    this.committedValue.set(this.value());\n    this.createOverlay();\n    this.isOpen.set(true);\n    this.opened.emit();\n    this.announce('Calendar opened');\n  }\n\n  /** Closes the datepicker panel. Reverts buffered changes when `commitOnClose` is active. */\n  close(): void {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    // Revert to committed value when commitOnClose is active\n    if (this.commitOnClose()) {\n      this.internalValue.set(this.committedValue());\n      this.announce('Changes discarded');\n    }\n\n    this.destroyOverlay();\n    this.isOpen.set(false);\n    this.closed.emit();\n    this.onTouched();\n    this.touched.set(true);\n\n    // Return focus to trigger\n    this.inputRef().nativeElement.focus();\n  }\n\n  /** Commits the buffered value and closes the panel. Called by the Done button. */\n  protected commitAndClose(): void {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    // Commit the buffered value before closing\n    if (this.commitOnClose()) {\n      this.updateValue(this.internalValue());\n      this.announce('Date confirmed');\n    }\n\n    this.destroyOverlay();\n    this.isOpen.set(false);\n    this.closed.emit();\n    this.onTouched();\n    this.touched.set(true);\n\n    // Return focus to trigger\n    this.inputRef().nativeElement.focus();\n  }\n\n  /** Toggles the datepicker panel. */\n  toggle(): void {\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n\n  /** Clears the selected date. Buffered when commitOnClose is active and panel is open. */\n  clear(event?: Event): void {\n    event?.preventDefault();\n    event?.stopPropagation();\n\n    if (this.commitOnClose() && this.isOpen()) {\n      this.internalValue.set(null);\n    } else {\n      this.updateValue(null);\n    }\n    this.announce('Date cleared');\n  }\n\n  /** Selects today's date. Buffered when commitOnClose is active and panel is open. */\n  selectToday(): void {\n    const today = this.dateAdapter.today();\n\n    if (this.commitOnClose() && this.isOpen()) {\n      this.internalValue.set(today);\n    } else {\n      this.updateValue(today);\n    }\n\n    if (!this.effectiveKeepOpen()) {\n      this.close();\n    }\n  }\n\n  // ============ EVENT HANDLERS ============\n\n  protected onInputFocus(): void {\n    this._inputFocused.set(true);\n  }\n\n  protected onTriggerClick(): void {\n    if (!this.disabled()) {\n      this.toggle();\n    }\n  }\n\n  protected onTriggerKeydown(event: KeyboardEvent): void {\n    switch (event.key) {\n      case 'ArrowDown':\n      case 'ArrowUp':\n        event.preventDefault();\n        this.open();\n        break;\n      case 'Escape':\n        if (this.isOpen()) {\n          event.preventDefault();\n          this.close();\n        }\n        break;\n    }\n  }\n\n  protected onInputKeydown(event: KeyboardEvent): void {\n    switch (event.key) {\n      case 'Enter':\n        event.preventDefault();\n        if (this.isOpen()) {\n          // Commit manual input\n          this.parseAndSetValue(this.inputRef().nativeElement.value);\n        } else {\n          this.open();\n        }\n        break;\n      case 'Escape':\n        if (this.isOpen()) {\n          event.preventDefault();\n          this.close();\n        }\n        break;\n      case 'ArrowDown':\n        if (!this.isOpen()) {\n          event.preventDefault();\n          this.open();\n        }\n        break;\n    }\n  }\n\n  protected onInputChange(event: Event): void {\n    if (!this.allowManualInput()) {\n      return;\n    }\n\n    const _input = event.target as HTMLInputElement;\n    // Debounce or wait for blur/enter to actually parse\n    // For now, we just allow typing without immediate parsing\n  }\n\n  protected onInputBlur(): void {\n    this._inputFocused.set(false);\n    if (this.allowManualInput()) {\n      this.parseAndSetValue(this.inputRef().nativeElement.value);\n    }\n    this.onTouched();\n    this.touched.set(true);\n  }\n\n  protected onPanelKeydown(event: KeyboardEvent): void {\n    switch (event.key) {\n      case 'Escape':\n        event.preventDefault();\n        this.close();\n        break;\n    }\n  }\n\n  protected onDateSelected(date: D): void {\n    // Preserve time when selecting a new date if time picker is shown\n    let resolvedDate = date;\n    if (this.showTimePicker()) {\n      const currentValue = this.internalValue();\n      if (currentValue) {\n        resolvedDate = this.dateAdapter.setTime(\n          date,\n          this.dateAdapter.getHours(currentValue),\n          this.dateAdapter.getMinutes(currentValue),\n          this.dateAdapter.getSeconds(currentValue),\n        );\n      }\n    }\n\n    if (this.commitOnClose() && this.isOpen()) {\n      this.internalValue.set(resolvedDate);\n    } else {\n      this.updateValue(resolvedDate);\n    }\n\n    if (!this.effectiveKeepOpen()) {\n      this.close();\n    }\n\n    this.announce(`Selected ${this.dateAdapter.format(date, 'long')}`);\n  }\n\n  protected onTimeChange(time: ComTimeValue | null): void {\n    if (!time) return;\n    const current = this.internalValue() ?? this.dateAdapter.today();\n    const updated = this.dateAdapter.setTime(current, time.hours, time.minutes, time.seconds);\n\n    if (this.commitOnClose() && this.isOpen()) {\n      this.internalValue.set(updated);\n    } else {\n      this.updateValue(updated);\n    }\n  }\n\n  protected onActiveDateChange(date: D): void {\n    this.calendarActiveDate.set(date);\n  }\n\n  // ============ FormFieldControl IMPLEMENTATION ============\n\n  /**\n   * Called when the form field container is clicked.\n   * Implements FormFieldControl.\n   */\n  onContainerClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    if (!this.disabled() && !this.triggerRef().nativeElement.contains(target)) {\n      this.toggle();\n    }\n  }\n\n  /**\n   * Sets the describedBy IDs from the form field.\n   * Called by the parent form field component.\n   */\n  setDescribedByIds(ids: string): void {\n    this._describedByIds.set(ids);\n  }\n\n  /**\n   * Sets the appearance for styling.\n   * Called by the parent form field component.\n   */\n  setAppearance(appearance: FormFieldAppearance): void {\n    this._appearance.set(appearance);\n  }\n\n  // ============ PRIVATE METHODS ============\n\n  private createOverlay(): void {\n    if (this.overlayRef) {\n      return;\n    }\n\n    const hostEl = this.elementRef.nativeElement;\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo(hostEl)\n      .withPositions(DEFAULT_POSITIONS)\n      .withFlexibleDimensions(false)\n      .withPush(true);\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy,\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\n      hasBackdrop: true,\n      backdropClass: 'cdk-overlay-transparent-backdrop',\n    });\n\n    // Attach panel template\n    const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n    this.overlayRef.attach(portal);\n\n    // Close on backdrop click\n    this.overlayRef\n      .backdropClick()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.close());\n\n    // Close on outside click\n    this.overlayRef\n      .outsidePointerEvents()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.close());\n  }\n\n  private destroyOverlay(): void {\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n      this.overlayRef = null;\n    }\n  }\n\n  private updateValue(value: D | null): void {\n    this.value.set(value);\n    this.onChange(value);\n    this.dateChange.emit(value);\n    this.onValidatorChange();\n  }\n\n  private parseAndSetValue(inputValue: string): void {\n    const shouldBuffer = this.commitOnClose() && this.isOpen();\n\n    if (!inputValue.trim()) {\n      // Empty input - clear if allowed\n      if (this.hasValue()) {\n        if (shouldBuffer) {\n          this.internalValue.set(null);\n        } else {\n          this.updateValue(null);\n        }\n      }\n      return;\n    }\n\n    const parsed = this.dateAdapter.parse(inputValue, this.effectiveDateFormat());\n    if (parsed && this.dateAdapter.isValid(parsed)) {\n      // Validate against min/max/filter\n      if (this.isDateValid(parsed)) {\n        if (shouldBuffer) {\n          this.internalValue.set(parsed);\n        } else {\n          this.updateValue(parsed);\n        }\n      } else {\n        // Invalid date - revert to current value\n        this.inputRef().nativeElement.value = this.displayValue();\n      }\n    } else {\n      // Parse failed - revert to current value\n      this.inputRef().nativeElement.value = this.displayValue();\n    }\n  }\n\n  private isDateValid(date: D): boolean {\n    const min = this.min();\n    const max = this.max();\n    const filter = this.dateFilter();\n\n    if (min && this.dateAdapter.compareDate(date, min) < 0) {\n      return false;\n    }\n    if (max && this.dateAdapter.compareDate(date, max) > 0) {\n      return false;\n    }\n    if (filter && !filter(date)) {\n      return false;\n    }\n    return true;\n  }\n\n  private announce(message: string): void {\n    this.liveAnnouncement.set(message);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  ElementRef,\n  forwardRef,\n  inject,\n  input,\n  linkedSignal,\n  model,\n  output,\n  signal,\n  viewChild,\n  ViewContainerRef,\n  DOCUMENT,\n} from '@angular/core';\nimport type {\n  InputSignal,\n  ModelSignal,\n  OnDestroy,\n  OutputEmitterRef,\n  Signal,\n  TemplateRef,\n  WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl, FormGroupDirective, NgForm } from '@angular/forms';\nimport type { ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';\nimport {\n  Overlay,\n  OverlayRef,\n  OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { A11yModule } from '@angular/cdk/a11y';\n\nimport { ComCalendar } from 'ngx-com/components/calendar';\nimport { DateAdapter, DATE_ADAPTER } from 'ngx-com/components/calendar';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport type { IconSize } from 'ngx-com/components/icon';\nimport {\n  CALENDAR_SELECTION_STRATEGY,\n  RangeSelectionStrategy,\n} from 'ngx-com/components/calendar';\nimport type { CalendarView, DateFilterFn, DateRange } from 'ngx-com/components/calendar';\nimport { joinClasses } from 'ngx-com/utils';\nimport { mergeClasses } from 'ngx-com/utils';\nimport { FormFieldControl } from 'ngx-com/components/form-field';\nimport { ErrorStateMatcher } from 'ngx-com/components/form-field';\nimport type { FormFieldAppearance } from 'ngx-com/components/form-field';\nimport { ComTimePicker } from 'ngx-com/components/timepicker';\nimport {\n  timepickerSectionVariants,\n  timepickerLabelVariants,\n} from 'ngx-com/components/timepicker';\nimport type { ComTimeValue } from 'ngx-com/components/timepicker';\nimport { createTimeValue } from 'ngx-com/components/timepicker';\nimport {\n  datepickerTriggerVariants,\n  datepickerDisabledVariants,\n  datepickerInputVariants,\n  datepickerIconVariants,\n  datepickerClearVariants,\n  datepickerPanelVariants,\n  datepickerFooterVariants,\n  datepickerFooterButtonVariants,\n  datepickerRangeSeparatorVariants,\n} from './datepicker.variants';\nimport type {\n  DatepickerSize,\n  DatepickerVariant,\n  DatepickerState,\n  DateFormatPreset,\n  DatepickerPanelWidth,\n  DateRangeValue,\n} from './datepicker.types';\nimport { generateDatepickerId, createDateRangeValue } from './datepicker.types';\n\n/** Default position for the datepicker panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n  // Below trigger, aligned start\n  { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n  // Above trigger, aligned start\n  { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n  // Below trigger, aligned end\n  { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n  // Above trigger, aligned end\n  { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/**\n * Date range picker component with calendar popup.\n * Allows selecting a start and end date via a two-click interaction.\n * Implements ControlValueAccessor for Reactive Forms and Template-driven Forms.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n *         `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n *         `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n *         `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n *         `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example\n * ```html\n * <com-date-range-picker\n *   formControlName=\"dateRange\"\n *   startPlaceholder=\"Start date\"\n *   endPlaceholder=\"End date\"\n *   [min]=\"minDate\"\n *   [max]=\"maxDate\"\n *   [showTodayButton]=\"true\"\n * />\n * ```\n */\n@Component({\n  selector: 'com-date-range-picker',\n  exportAs: 'comDateRangePicker',\n  template: `\n    <!-- Trigger container -->\n    <div\n      #triggerElement\n      [class]=\"triggerClasses()\"\n      role=\"group\"\n      tabindex=\"-1\"\n      [attr.aria-expanded]=\"isOpen()\"\n      [attr.aria-haspopup]=\"'dialog'\"\n      [attr.aria-owns]=\"panelId()\"\n      [attr.aria-disabled]=\"disabled() || null\"\n      (click)=\"onTriggerClick()\"\n      (keydown)=\"onTriggerKeydown($event)\"\n    >\n      <!-- Start date input -->\n      <input\n        #startInputElement\n        type=\"text\"\n        [class]=\"inputClasses()\"\n        [value]=\"startDisplayValue()\"\n        [placeholder]=\"startPlaceholder()\"\n        [disabled]=\"disabled()\"\n        [readonly]=\"!allowManualInput()\"\n        [attr.id]=\"startInputId()\"\n        [attr.aria-label]=\"startAriaLabel() || startPlaceholder()\"\n        [attr.aria-describedby]=\"effectiveAriaDescribedBy() || null\"\n        [attr.aria-invalid]=\"effectiveState() === 'error' || null\"\n        [attr.aria-required]=\"required() || null\"\n        (focus)=\"onStartInputFocus()\"\n        (input)=\"onStartInputChange($event)\"\n        (blur)=\"onStartInputBlur()\"\n        (keydown)=\"onInputKeydown($event, 'start')\"\n      />\n\n      <!-- Range separator -->\n      <span [class]=\"separatorClasses()\">\n        <com-icon name=\"arrow-right\" [size]=\"iconSize()\" />\n      </span>\n\n      <!-- End date input -->\n      <input\n        #endInputElement\n        type=\"text\"\n        [class]=\"inputClasses()\"\n        [value]=\"endDisplayValue()\"\n        [placeholder]=\"endPlaceholder()\"\n        [disabled]=\"disabled()\"\n        [readonly]=\"!allowManualInput()\"\n        [attr.id]=\"endInputId()\"\n        [attr.aria-label]=\"endAriaLabel() || endPlaceholder()\"\n        [attr.aria-invalid]=\"effectiveState() === 'error' || null\"\n        (focus)=\"onEndInputFocus()\"\n        (input)=\"onEndInputChange($event)\"\n        (blur)=\"onEndInputBlur()\"\n        (keydown)=\"onInputKeydown($event, 'end')\"\n      />\n\n      <!-- Clear button -->\n      @if (showClearButton() && hasValue() && !disabled()) {\n        <button\n          type=\"button\"\n          [class]=\"clearClasses()\"\n          [attr.aria-label]=\"'Clear date range'\"\n          (click)=\"clear($event)\"\n        >\n          <com-icon name=\"x\" [size]=\"iconSize()\" />\n        </button>\n      }\n\n      <!-- Calendar icon -->\n      <button\n        type=\"button\"\n        [class]=\"iconClasses()\"\n        [attr.aria-label]=\"isOpen() ? 'Close calendar' : 'Open calendar'\"\n        [disabled]=\"disabled()\"\n        tabindex=\"-1\"\n      >\n        <com-icon name=\"calendar\" [size]=\"iconSize()\" />\n      </button>\n    </div>\n\n    <!-- Panel template (rendered in overlay) -->\n    <ng-template #panelTemplate>\n      <div\n        [class]=\"panelClasses()\"\n        [attr.id]=\"panelId()\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        [attr.aria-label]=\"'Choose date range'\"\n        (keydown)=\"onPanelKeydown($event)\"\n        cdkTrapFocus\n        [cdkTrapFocusAutoCapture]=\"true\"\n      >\n        <com-calendar\n          [activeDate]=\"calendarActiveDate()\"\n          [selected]=\"calendarSelection()\"\n          [minDate]=\"min()\"\n          [maxDate]=\"max()\"\n          [dateFilter]=\"dateFilter()\"\n          [startView]=\"startView()\"\n          [firstDayOfWeek]=\"firstDayOfWeek()\"\n          [monthColumns]=\"2\"\n          [bordered]=\"false\"\n          (selectedChange)=\"onCalendarSelectionChange($event)\"\n          (activeDateChange)=\"onActiveDateChange($event)\"\n        />\n\n        @if (showTimePicker()) {\n          <div [class]=\"timeSectionClasses()\">\n            <div class=\"flex items-center gap-3\">\n              <div class=\"flex flex-col gap-1\">\n                <span [class]=\"timeLabelClasses()\">Start time</span>\n                <com-time-picker\n                  variant=\"embedded\"\n                  [size]=\"size()\"\n                  [value]=\"startTimeValue()\"\n                  [use12HourFormat]=\"use12HourFormat()\"\n                  [showSeconds]=\"showSeconds()\"\n                  [minuteStep]=\"minuteStep()\"\n                  [disabled]=\"disabled()\"\n                  ariaLabel=\"Start time\"\n                  (timeChange)=\"onStartTimeChange($event)\"\n                />\n              </div>\n              <span class=\"text-muted-foreground mt-5\">\n                <com-icon name=\"arrow-right\" [size]=\"iconSize()\" />\n              </span>\n              <div class=\"flex flex-col gap-1\">\n                <span [class]=\"timeLabelClasses()\">End time</span>\n                <com-time-picker\n                  variant=\"embedded\"\n                  [size]=\"size()\"\n                  [value]=\"endTimeValue()\"\n                  [use12HourFormat]=\"use12HourFormat()\"\n                  [showSeconds]=\"showSeconds()\"\n                  [minuteStep]=\"minuteStep()\"\n                  [disabled]=\"disabled()\"\n                  ariaLabel=\"End time\"\n                  (timeChange)=\"onEndTimeChange($event)\"\n                />\n              </div>\n            </div>\n          </div>\n        }\n\n        @if (showTodayButton() || showFooterClearButton() || showTimePicker() || commitOnClose()) {\n          <div [class]=\"footerClasses()\">\n            @if (showTodayButton()) {\n              <button\n                type=\"button\"\n                [class]=\"todayButtonClasses()\"\n                (click)=\"selectToday()\"\n              >\n                Today\n              </button>\n            }\n            @if (showFooterClearButton()) {\n              <button\n                type=\"button\"\n                [class]=\"clearButtonClasses()\"\n                (click)=\"clear($event)\"\n              >\n                Clear\n              </button>\n            }\n            @if (showTimePicker() || commitOnClose()) {\n              <button\n                type=\"button\"\n                [class]=\"todayButtonClasses()\"\n                (click)=\"commitAndClose()\"\n              >\n                Done\n              </button>\n            }\n          </div>\n        }\n      </div>\n    </ng-template>\n\n    <!-- Live announcer region -->\n    <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n      {{ liveAnnouncement() }}\n    </div>\n  `,\n  styles: `\n    .sr-only {\n      position: absolute;\n      width: 1px;\n      height: 1px;\n      padding: 0;\n      margin: -1px;\n      overflow: hidden;\n      clip: rect(0, 0, 0, 0);\n      white-space: nowrap;\n      border: 0;\n    }\n  `,\n  imports: [\n    OverlayModule,\n    A11yModule,\n    ComCalendar,\n    ComIcon,\n    ComTimePicker,\n  ],\n  providers: [\n    RangeSelectionStrategy,\n    { provide: CALENDAR_SELECTION_STRATEGY, useExisting: RangeSelectionStrategy },\n    { provide: FormFieldControl, useExisting: forwardRef(() => ComDateRangePicker) },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-date-range-picker-host inline-block',\n    '[class.com-date-range-picker-disabled]': 'disabled()',\n    '[class.com-date-range-picker-open]': 'isOpen()',\n  },\n})\nexport class ComDateRangePicker<D> implements ControlValueAccessor, FormFieldControl<DateRangeValue<D> | null>, Validator, OnDestroy {\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly overlay = inject(Overlay);\n  private readonly viewContainerRef = inject(ViewContainerRef);\n  private readonly document = inject(DOCUMENT);\n  private readonly dateAdapter = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n  /** NgControl bound to this date range picker (if using reactive forms). */\n  readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n  private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n  private readonly parentForm = inject(NgForm, { optional: true });\n  private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n  /** Reference to the trigger element. */\n  private readonly triggerRef: Signal<ElementRef<HTMLDivElement>> =\n    viewChild.required<ElementRef<HTMLDivElement>>('triggerElement');\n\n  /** Reference to the start input element. */\n  private readonly startInputRef: Signal<ElementRef<HTMLInputElement>> =\n    viewChild.required<ElementRef<HTMLInputElement>>('startInputElement');\n\n  /** Reference to the end input element. */\n  private readonly endInputRef: Signal<ElementRef<HTMLInputElement>> =\n    viewChild.required<ElementRef<HTMLInputElement>>('endInputElement');\n\n  /** Reference to the panel template. */\n  private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n    viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n  /** Overlay reference. */\n  private overlayRef: OverlayRef | null = null;\n\n  /** Unique ID for the datepicker. */\n  private readonly datepickerId: string = generateDatepickerId();\n\n  // ============ INPUTS ============\n\n  /** Current value. */\n  readonly value: ModelSignal<DateRangeValue<D> | null> = model<DateRangeValue<D> | null>(null);\n\n  /** Minimum selectable date. */\n  readonly min: InputSignal<D | null> = input<D | null>(null);\n\n  /** Maximum selectable date. */\n  readonly max: InputSignal<D | null> = input<D | null>(null);\n\n  /** Custom filter function to disable specific dates. */\n  readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n  /** Date the calendar opens to (defaults to start date or today). */\n  readonly startAt: InputSignal<D | null> = input<D | null>(null);\n\n  /** Initial calendar view. */\n  readonly startView: InputSignal<CalendarView> = input<CalendarView>('month');\n\n  /** First day of week override (0=Sun, 1=Mon, ..., 6=Sat). */\n  readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n  /** Placeholder text for start date. */\n  readonly startPlaceholder: InputSignal<string> = input<string>('Start date');\n\n  /** Placeholder text for end date. */\n  readonly endPlaceholder: InputSignal<string> = input<string>('End date');\n\n  /** Whether the datepicker is disabled. */\n  readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n  /** Whether the datepicker is required. */\n  readonly required: InputSignal<boolean> = input<boolean>(false);\n\n  /** Display format for the date. */\n  readonly dateFormat: InputSignal<DateFormatPreset> = input<DateFormatPreset>('medium');\n\n  /** Show a clear button in the trigger. */\n  readonly showClearButton: InputSignal<boolean> = input<boolean>(false);\n\n  /** Show a today button in the footer. */\n  readonly showTodayButton: InputSignal<boolean> = input<boolean>(false);\n\n  /** Show a clear button in the footer. */\n  readonly showFooterClearButton: InputSignal<boolean> = input<boolean>(false);\n\n  /** Don't auto-close on complete range selection. */\n  readonly keepOpen: InputSignal<boolean> = input<boolean>(false);\n\n  /** Allow manual text input. */\n  readonly allowManualInput: InputSignal<boolean> = input<boolean>(true);\n\n  /** Additional CSS classes for the panel. */\n  readonly panelClass: InputSignal<string> = input<string>('');\n\n  /** Panel width strategy. */\n  readonly panelWidth: InputSignal<DatepickerPanelWidth> = input<DatepickerPanelWidth>('auto');\n\n  /** CVA variant for trigger styling. */\n  readonly variant: InputSignal<DatepickerVariant> = input<DatepickerVariant>('default');\n\n  /** Size variant. */\n  readonly size: InputSignal<DatepickerSize> = input<DatepickerSize>('default');\n\n  /** Validation state. */\n  readonly state: InputSignal<DatepickerState> = input<DatepickerState>('default');\n\n  /** Additional CSS classes for the trigger. */\n  readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n  /** Accessible label for the start input. */\n  readonly startAriaLabel: InputSignal<string | null> = input<string | null>(null);\n\n  /** Accessible label for the end input. */\n  readonly endAriaLabel: InputSignal<string | null> = input<string | null>(null);\n\n  /** Custom error state matcher for determining when to show errors. */\n  readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n  // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n  readonly touched: ModelSignal<boolean> = model<boolean>(false);\n  readonly invalid: InputSignal<boolean> = input<boolean>(false);\n  readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], { alias: 'errors' });\n\n  /** Whether to show time pickers below the calendar. */\n  readonly showTimePicker: InputSignal<boolean> = input<boolean>(false);\n\n  /** 12h vs 24h format for the time pickers. `null` = auto-detect. */\n  readonly use12HourFormat: InputSignal<boolean | null> = input<boolean | null>(null);\n\n  /** Whether the time pickers show seconds. */\n  readonly showSeconds: InputSignal<boolean> = input<boolean>(false);\n\n  /** Step interval for minutes in the time pickers. */\n  readonly minuteStep: InputSignal<number> = input<number>(1);\n\n  /**\n   * When true, range/time selections while the panel is open update only the visual state.\n   * The value is committed (emitted via `rangeChange`, propagated to forms) only when\n   * the user presses \"Done\". Closing via Escape or backdrop click reverts to the\n   * pre-open value without emitting.\n   *\n   * All in-panel actions (range selection, time change, today, footer clear) are buffered.\n   * The trigger clear button (panel closed) always commits immediately.\n   */\n  readonly commitOnClose: InputSignal<boolean> = input<boolean>(false);\n\n  // ============ OUTPUTS ============\n\n  /** Emitted when a complete range is selected. */\n  readonly rangeChange: OutputEmitterRef<DateRangeValue<D> | null> = output<DateRangeValue<D> | null>();\n\n  /** Emitted when the panel opens. */\n  readonly opened: OutputEmitterRef<void> = output<void>();\n\n  /** Emitted when the panel closes. */\n  readonly closed: OutputEmitterRef<void> = output<void>();\n\n  // ============ INTERNAL STATE ============\n\n  /** Whether the panel is open. */\n  readonly isOpen: WritableSignal<boolean> = signal(false);\n\n  /** Which input is currently focused. */\n  readonly activeInput: WritableSignal<'start' | 'end' | null> = signal(null);\n\n  /** Internal value state (managed by CVA or input). */\n  readonly internalValue: WritableSignal<DateRangeValue<D> | null> = linkedSignal<DateRangeValue<D> | null>(\n    () => this.value() ?? null\n  );\n\n  /** Calendar active date for navigation. Recomputes when value or startAt changes; user navigation overrides via .set(). */\n  readonly calendarActiveDate: WritableSignal<D> = linkedSignal<{ value: DateRangeValue<D> | null; startAt: D | null }, D>({\n    source: (): { value: DateRangeValue<D> | null; startAt: D | null } => ({ value: this.internalValue(), startAt: this.startAt() }),\n    computation: ({ value, startAt }: { value: DateRangeValue<D> | null; startAt: D | null }): D => value?.start ?? startAt ?? this.dateAdapter.today(),\n  });\n\n  /**\n   * Snapshot of the value when the panel was opened.\n   * Used by `commitOnClose` to revert on Escape/backdrop close.\n   */\n  private readonly committedValue: WritableSignal<DateRangeValue<D> | null> = signal<DateRangeValue<D> | null>(null);\n\n  /** Live announcements for screen readers. */\n  readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n  /** Whether any input is focused. */\n  private readonly _inputFocused: WritableSignal<boolean> = signal(false);\n\n  /** IDs for aria-describedby (set by form-field). */\n  private readonly _describedByIds: WritableSignal<string> = signal('');\n\n  /** Form field appearance (set by form-field). */\n  private readonly _appearance: WritableSignal<FormFieldAppearance> = signal<FormFieldAppearance>('outline');\n\n  // ============ FormFieldControl SIGNALS ============\n\n  /** Whether the date range picker is focused. Implements FormFieldControl. */\n  readonly focused: Signal<boolean> = computed(() => this._inputFocused() || this.isOpen());\n\n  /** Whether the label should float. */\n  readonly shouldLabelFloat: Signal<boolean> = computed(() => this.focused() || this.hasValue());\n\n  /** Whether the control is in an error state. Implements FormFieldControl. */\n  readonly errorState: Signal<boolean> = computed(() => {\n    if (!this.ngControl) {\n      return this.invalid() && this.touched();\n    }\n    this.isOpen();\n    this.hasValue();\n    const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n    const form = this.parentFormGroup ?? this.parentForm;\n    return matcher.isErrorState(this.ngControl.control ?? null, form);\n  });\n\n  /** Structured validation errors from Signal Forms. */\n  readonly errors: Signal<readonly unknown[] | null> = computed(() =>\n    !this.ngControl ? this.sfErrors() : null\n  );\n\n  /** Unique ID for the control (maps to start input). Implements FormFieldControl. */\n  readonly id: Signal<string> = computed(() => `${this.datepickerId}-start`);\n\n  /**\n   * Effective state combining manual state with automatic error detection.\n   */\n  readonly effectiveState: Signal<DatepickerState> = computed(() => {\n    const manualState = this.state();\n    if (manualState !== 'default') return manualState;\n    return this.errorState() ? 'error' : 'default';\n  });\n\n  /** Combined aria-describedby from form-field. */\n  readonly effectiveAriaDescribedBy: Signal<string | null> = computed(() =>\n    this._describedByIds() || null\n  );\n\n  // ============ COMPUTED STATE ============\n\n  /** Start input element ID (alias for FormFieldControl id). */\n  readonly startInputId: Signal<string> = this.id;\n\n  /** End input element ID. */\n  readonly endInputId: Signal<string> = computed(() => `${this.datepickerId}-end`);\n\n  /** Panel element ID. */\n  readonly panelId: Signal<string> = computed(() => `${this.datepickerId}-panel`);\n\n  /** Whether the datepicker has a value. */\n  readonly hasValue: Signal<boolean> = computed(() => {\n    const value = this.internalValue();\n    return value !== null && (value.start !== null || value.end !== null);\n  });\n\n  /** Icon size based on datepicker size. */\n  readonly iconSize: Signal<IconSize> = computed(() => {\n    const sizeMap: Record<DatepickerSize, IconSize> = {\n      sm: 'sm',\n      default: 'md',\n      lg: 'lg',\n    };\n    return sizeMap[this.size()];\n  });\n\n  /** Calendar selection (converts DateRangeValue to DateRange for calendar). */\n  readonly calendarSelection: Signal<DateRange<D> | null> = computed(() => {\n    const value = this.internalValue();\n    if (!value) return null;\n    return { start: value.start, end: value.end };\n  });\n\n  /** Formatted start display value. */\n  readonly startDisplayValue: Signal<string> = computed(() => {\n    const value = this.internalValue();\n    if (!value?.start) return '';\n    return this.dateAdapter.format(value.start, this.effectiveDateFormat());\n  });\n\n  /** Formatted end display value. */\n  readonly endDisplayValue: Signal<string> = computed(() => {\n    const value = this.internalValue();\n    if (!value?.end) return '';\n    return this.dateAdapter.format(value.end, this.effectiveDateFormat());\n  });\n\n  /** Computed trigger classes. */\n  readonly triggerClasses: Signal<string> = computed(() => {\n    const baseClasses = datepickerTriggerVariants({\n      variant: this.variant(),\n      size: this.size(),\n      state: this.effectiveState(),\n      open: this.isOpen(),\n    });\n\n    const disabledClasses = this.disabled() ? datepickerDisabledVariants() : '';\n\n    // For naked variant, add padding based on form-field appearance\n    let paddingClasses = '';\n    if (this.variant() === 'naked') {\n      paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';\n    }\n\n    return mergeClasses(baseClasses, disabledClasses, paddingClasses, this.userClass());\n  });\n\n  /** Computed input classes. */\n  readonly inputClasses: Signal<string> = computed(() => {\n    return datepickerInputVariants({ size: this.size() });\n  });\n\n  /** Computed separator classes. */\n  readonly separatorClasses: Signal<string> = computed(() => {\n    return datepickerRangeSeparatorVariants({ size: this.size() });\n  });\n\n  /** Computed icon classes. */\n  readonly iconClasses: Signal<string> = computed(() => {\n    return datepickerIconVariants({ size: this.size() });\n  });\n\n  /** Computed clear button classes. */\n  readonly clearClasses: Signal<string> = computed(() => {\n    return datepickerClearVariants({ size: this.size() });\n  });\n\n  /** Computed panel classes. */\n  readonly panelClasses: Signal<string> = computed(() => {\n    const baseClasses = datepickerPanelVariants({ size: this.size() });\n    return joinClasses(baseClasses, this.panelClass());\n  });\n\n  /** Computed footer classes. */\n  readonly footerClasses: Signal<string> = computed(() => {\n    return datepickerFooterVariants({ size: this.size() });\n  });\n\n  /** Computed today button classes. */\n  readonly todayButtonClasses: Signal<string> = computed(() => {\n    return datepickerFooterButtonVariants({ size: this.size(), variant: 'primary' });\n  });\n\n  /** Computed clear button classes (footer). */\n  readonly clearButtonClasses: Signal<string> = computed(() => {\n    return datepickerFooterButtonVariants({ size: this.size(), variant: 'secondary' });\n  });\n\n  /** Time section divider classes. */\n  readonly timeSectionClasses: Signal<string> = computed(() => {\n    return timepickerSectionVariants({ size: this.size() });\n  });\n\n  /** Time label classes. */\n  readonly timeLabelClasses: Signal<string> = computed(() => {\n    return timepickerLabelVariants({ size: this.size() });\n  });\n\n  /** Start time value derived from the start date. */\n  readonly startTimeValue: Signal<ComTimeValue | null> = computed(() => {\n    const value = this.internalValue();\n    if (!value?.start) return null;\n    return createTimeValue(\n      this.dateAdapter.getHours(value.start),\n      this.dateAdapter.getMinutes(value.start),\n      this.dateAdapter.getSeconds(value.start),\n    );\n  });\n\n  /** End time value derived from the end date. */\n  readonly endTimeValue: Signal<ComTimeValue | null> = computed(() => {\n    const value = this.internalValue();\n    if (!value?.end) return null;\n    return createTimeValue(\n      this.dateAdapter.getHours(value.end),\n      this.dateAdapter.getMinutes(value.end),\n      this.dateAdapter.getSeconds(value.end),\n    );\n  });\n\n  /** Effective display format — switches to dateTime when time picker is shown. */\n  readonly effectiveDateFormat: Signal<DateFormatPreset> = computed(() => {\n    if (this.showTimePicker()) {\n      return this.showSeconds() ? 'dateTimeLong' : 'dateTimeMedium';\n    }\n    return this.dateFormat();\n  });\n\n  /** Whether the panel should stay open (keepOpen, time picker shown, or commitOnClose). */\n  readonly effectiveKeepOpen: Signal<boolean> = computed(() => {\n    return this.keepOpen() || this.showTimePicker() || this.commitOnClose();\n  });\n\n  // ============ CVA CALLBACKS ============\n\n  private onChange: (value: DateRangeValue<D> | null) => void = () => {};\n  private onTouched: () => void = () => {};\n  private onValidatorChange: () => void = () => {};\n\n  constructor() {\n    // Wire up NgControl if present\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this;\n    }\n\n  }\n\n  ngOnDestroy(): void {\n    this.destroyOverlay();\n  }\n\n  // ============ CVA IMPLEMENTATION ============\n\n  writeValue(value: DateRangeValue<D> | null): void {\n    this.internalValue.set(value);\n    this.committedValue.set(value);\n  }\n\n  registerOnChange(fn: (value: DateRangeValue<D> | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(_isDisabled: boolean): void {\n    // Disabled state is handled via the disabled input\n  }\n\n  // ============ VALIDATOR IMPLEMENTATION ============\n\n  validate(): ValidationErrors | null {\n    const value = this.internalValue();\n\n    // Required validation\n    if (this.required() && (!value || (!value.start && !value.end))) {\n      return { required: true };\n    }\n\n    if (value) {\n      const { start, end } = value;\n      const min = this.min();\n      const max = this.max();\n      const dateFilter = this.dateFilter();\n\n      // Min validation for start\n      if (start && min && this.dateAdapter.compareDate(start, min) < 0) {\n        return { minDate: { min, actual: start } };\n      }\n\n      // Max validation for end\n      if (end && max && this.dateAdapter.compareDate(end, max) > 0) {\n        return { maxDate: { max, actual: end } };\n      }\n\n      // Date filter validation\n      if (start && dateFilter && !dateFilter(start)) {\n        return { dateFilter: { date: start } };\n      }\n      if (end && dateFilter && !dateFilter(end)) {\n        return { dateFilter: { date: end } };\n      }\n\n      // Range validation (start must be before or equal to end)\n      if (start && end && this.dateAdapter.compareDate(start, end) > 0) {\n        return { rangeInvalid: { start, end } };\n      }\n    }\n\n    return null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onValidatorChange = fn;\n  }\n\n  // ============ PUBLIC METHODS ============\n\n  /** Opens the datepicker panel. */\n  open(): void {\n    if (this.disabled() || this.isOpen()) {\n      return;\n    }\n\n    this.committedValue.set(this.value());\n    this.createOverlay();\n    this.isOpen.set(true);\n    this.opened.emit();\n    this.announce('Calendar opened. Select a start date.');\n  }\n\n  /** Closes the datepicker panel. Reverts buffered changes when `commitOnClose` is active. */\n  close(): void {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    // Revert to committed value when commitOnClose is active\n    if (this.commitOnClose()) {\n      this.internalValue.set(this.committedValue());\n      this.announce('Changes discarded');\n    }\n\n    this.destroyOverlay();\n    this.isOpen.set(false);\n    this.closed.emit();\n    this.onTouched();\n    this.touched.set(true);\n\n    // Return focus to appropriate input\n    const activeInput = this.activeInput();\n    if (activeInput === 'end') {\n      this.endInputRef().nativeElement.focus();\n    } else {\n      this.startInputRef().nativeElement.focus();\n    }\n  }\n\n  /** Commits the buffered value and closes the panel. Called by the Done button. */\n  protected commitAndClose(): void {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    // Commit the buffered value before closing\n    if (this.commitOnClose()) {\n      this.updateValue(this.internalValue());\n      this.announce('Date range confirmed');\n    }\n\n    this.destroyOverlay();\n    this.isOpen.set(false);\n    this.closed.emit();\n    this.onTouched();\n    this.touched.set(true);\n\n    // Return focus to appropriate input\n    const activeInput = this.activeInput();\n    if (activeInput === 'end') {\n      this.endInputRef().nativeElement.focus();\n    } else {\n      this.startInputRef().nativeElement.focus();\n    }\n  }\n\n  /** Toggles the datepicker panel. */\n  toggle(): void {\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n\n  /** Clears the selected date range. Buffered when commitOnClose is active and panel is open. */\n  clear(event?: Event): void {\n    event?.preventDefault();\n    event?.stopPropagation();\n\n    if (this.commitOnClose() && this.isOpen()) {\n      this.internalValue.set(null);\n    } else {\n      this.updateValue(null);\n    }\n    this.announce('Date range cleared');\n  }\n\n  /** Selects today's date as the start date. Buffered when commitOnClose is active and panel is open. */\n  selectToday(): void {\n    const today = this.dateAdapter.today();\n    const currentValue = this.internalValue();\n    const shouldBuffer = this.commitOnClose() && this.isOpen();\n\n    // Set today as start if no start, or as end if we have a start\n    if (!currentValue?.start) {\n      if (shouldBuffer) {\n        this.internalValue.set(createDateRangeValue(today, null));\n      } else {\n        this.updateValue(createDateRangeValue(today, null));\n      }\n      this.announce('Start date set to today');\n    } else if (!currentValue.end) {\n      // Ensure proper ordering\n      const newRange = this.dateAdapter.compareDate(today, currentValue.start) < 0\n        ? createDateRangeValue(today, currentValue.start)\n        : createDateRangeValue(currentValue.start, today);\n\n      if (shouldBuffer) {\n        this.internalValue.set(newRange);\n      } else {\n        this.updateValue(newRange);\n      }\n\n      if (!this.effectiveKeepOpen()) {\n        this.close();\n      }\n    }\n  }\n\n  // ============ EVENT HANDLERS ============\n\n  protected onTriggerClick(): void {\n    if (!this.disabled() && !this.isOpen()) {\n      this.open();\n    }\n  }\n\n  protected onTriggerKeydown(event: KeyboardEvent): void {\n    switch (event.key) {\n      case 'Escape':\n        if (this.isOpen()) {\n          event.preventDefault();\n          this.close();\n        }\n        break;\n    }\n  }\n\n  protected onStartInputFocus(): void {\n    this.activeInput.set('start');\n    this._inputFocused.set(true);\n  }\n\n  protected onEndInputFocus(): void {\n    this.activeInput.set('end');\n    this._inputFocused.set(true);\n  }\n\n  protected onInputKeydown(event: KeyboardEvent, inputType: 'start' | 'end'): void {\n    switch (event.key) {\n      case 'Enter':\n        event.preventDefault();\n        if (this.isOpen()) {\n          // Commit manual input\n          if (inputType === 'start') {\n            this.parseAndSetStart(this.startInputRef().nativeElement.value);\n          } else {\n            this.parseAndSetEnd(this.endInputRef().nativeElement.value);\n          }\n        } else {\n          this.open();\n        }\n        break;\n      case 'Escape':\n        if (this.isOpen()) {\n          event.preventDefault();\n          this.close();\n        }\n        break;\n      case 'ArrowDown':\n        if (!this.isOpen()) {\n          event.preventDefault();\n          this.open();\n        }\n        break;\n      case 'Tab':\n        // Allow natural tab navigation between inputs\n        break;\n    }\n  }\n\n  protected onStartInputChange(_event: Event): void {\n    // Debounced in blur handler\n  }\n\n  protected onEndInputChange(_event: Event): void {\n    // Debounced in blur handler\n  }\n\n  protected onStartInputBlur(): void {\n    this._inputFocused.set(false);\n    if (this.allowManualInput()) {\n      this.parseAndSetStart(this.startInputRef().nativeElement.value);\n    }\n    this.onTouched();\n    this.touched.set(true);\n  }\n\n  protected onEndInputBlur(): void {\n    this._inputFocused.set(false);\n    if (this.allowManualInput()) {\n      this.parseAndSetEnd(this.endInputRef().nativeElement.value);\n    }\n    this.onTouched();\n    this.touched.set(true);\n  }\n\n  protected onPanelKeydown(event: KeyboardEvent): void {\n    switch (event.key) {\n      case 'Escape':\n        event.preventDefault();\n        this.close();\n        break;\n    }\n  }\n\n  protected onCalendarSelectionChange(selection: unknown): void {\n    // The calendar emits the selection from the strategy\n    const range = selection as DateRange<D>;\n\n    if (range) {\n      const newValue = createDateRangeValue(range.start, range.end);\n\n      if (this.commitOnClose() && this.isOpen()) {\n        this.internalValue.set(newValue);\n      } else {\n        this.updateValue(newValue);\n      }\n\n      if (range.start && range.end) {\n        // Complete range selected\n        this.announce(`Range selected: ${this.formatDate(range.start)} to ${this.formatDate(range.end)}`);\n\n        if (!this.effectiveKeepOpen()) {\n          this.close();\n        }\n      } else if (range.start) {\n        this.announce(`Start date selected: ${this.formatDate(range.start)}. Now select end date.`);\n      }\n    }\n  }\n\n  protected onActiveDateChange(date: D): void {\n    this.calendarActiveDate.set(date);\n  }\n\n  protected onStartTimeChange(time: ComTimeValue | null): void {\n    if (!time) return;\n    const value = this.internalValue();\n    const startDate = value?.start ?? this.dateAdapter.today();\n    const updated = this.dateAdapter.setTime(startDate, time.hours, time.minutes, time.seconds);\n    const newValue = createDateRangeValue(updated, value?.end ?? null);\n\n    if (this.commitOnClose() && this.isOpen()) {\n      this.internalValue.set(newValue);\n    } else {\n      this.updateValue(newValue);\n    }\n  }\n\n  protected onEndTimeChange(time: ComTimeValue | null): void {\n    if (!time) return;\n    const value = this.internalValue();\n    const endDate = value?.end ?? this.dateAdapter.today();\n    const updated = this.dateAdapter.setTime(endDate, time.hours, time.minutes, time.seconds);\n    const newValue = createDateRangeValue(value?.start ?? null, updated);\n\n    if (this.commitOnClose() && this.isOpen()) {\n      this.internalValue.set(newValue);\n    } else {\n      this.updateValue(newValue);\n    }\n  }\n\n  // ============ FormFieldControl IMPLEMENTATION ============\n\n  /**\n   * Called when the form field container is clicked.\n   * Implements FormFieldControl.\n   */\n  onContainerClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    if (!this.disabled() && !this.triggerRef().nativeElement.contains(target)) {\n      this.open();\n      this.startInputRef().nativeElement.focus();\n    }\n  }\n\n  /**\n   * Sets the describedBy IDs from the form field.\n   * Called by the parent form field component.\n   */\n  setDescribedByIds(ids: string): void {\n    this._describedByIds.set(ids);\n  }\n\n  /**\n   * Sets the appearance for styling.\n   * Called by the parent form field component.\n   */\n  setAppearance(appearance: FormFieldAppearance): void {\n    this._appearance.set(appearance);\n  }\n\n  // ============ PRIVATE METHODS ============\n\n  private createOverlay(): void {\n    if (this.overlayRef) {\n      return;\n    }\n\n    const hostEl = this.elementRef.nativeElement;\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo(hostEl)\n      .withPositions(DEFAULT_POSITIONS)\n      .withFlexibleDimensions(false)\n      .withPush(true);\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy,\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\n      hasBackdrop: true,\n      backdropClass: 'cdk-overlay-transparent-backdrop',\n    });\n\n    // Attach panel template\n    const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n    this.overlayRef.attach(portal);\n\n    // Close on backdrop click\n    this.overlayRef\n      .backdropClick()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.close());\n\n    // Close on outside click\n    this.overlayRef\n      .outsidePointerEvents()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.close());\n  }\n\n  private destroyOverlay(): void {\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n      this.overlayRef = null;\n    }\n  }\n\n  private updateValue(value: DateRangeValue<D> | null): void {\n    this.value.set(value);\n    this.onChange(value);\n    this.rangeChange.emit(value);\n    this.onValidatorChange();\n  }\n\n  private parseAndSetStart(inputValue: string): void {\n    const currentValue = this.internalValue();\n    const shouldBuffer = this.commitOnClose() && this.isOpen();\n\n    if (!inputValue.trim()) {\n      // Clear start date\n      if (currentValue?.start) {\n        const newValue = createDateRangeValue(null, currentValue.end);\n        if (shouldBuffer) {\n          this.internalValue.set(newValue);\n        } else {\n          this.updateValue(newValue);\n        }\n      }\n      return;\n    }\n\n    const parsed = this.dateAdapter.parse(inputValue, this.effectiveDateFormat());\n    if (parsed && this.dateAdapter.isValid(parsed) && this.isDateValid(parsed)) {\n      // Ensure start <= end\n      let newValue: DateRangeValue<D>;\n      if (currentValue?.end && this.dateAdapter.compareDate(parsed, currentValue.end) > 0) {\n        newValue = createDateRangeValue(currentValue.end, parsed);\n      } else {\n        newValue = createDateRangeValue(parsed, currentValue?.end ?? null);\n      }\n\n      if (shouldBuffer) {\n        this.internalValue.set(newValue);\n      } else {\n        this.updateValue(newValue);\n      }\n    } else {\n      // Revert to current value\n      this.startInputRef().nativeElement.value = this.startDisplayValue();\n    }\n  }\n\n  private parseAndSetEnd(inputValue: string): void {\n    const currentValue = this.internalValue();\n    const shouldBuffer = this.commitOnClose() && this.isOpen();\n\n    if (!inputValue.trim()) {\n      // Clear end date\n      if (currentValue?.end) {\n        const newValue = createDateRangeValue(currentValue.start, null);\n        if (shouldBuffer) {\n          this.internalValue.set(newValue);\n        } else {\n          this.updateValue(newValue);\n        }\n      }\n      return;\n    }\n\n    const parsed = this.dateAdapter.parse(inputValue, this.effectiveDateFormat());\n    if (parsed && this.dateAdapter.isValid(parsed) && this.isDateValid(parsed)) {\n      // Ensure start <= end\n      let newValue: DateRangeValue<D>;\n      if (currentValue?.start && this.dateAdapter.compareDate(parsed, currentValue.start) < 0) {\n        newValue = createDateRangeValue(parsed, currentValue.start);\n      } else {\n        newValue = createDateRangeValue(currentValue?.start ?? null, parsed);\n      }\n\n      if (shouldBuffer) {\n        this.internalValue.set(newValue);\n      } else {\n        this.updateValue(newValue);\n      }\n    } else {\n      // Revert to current value\n      this.endInputRef().nativeElement.value = this.endDisplayValue();\n    }\n  }\n\n  private isDateValid(date: D): boolean {\n    const min = this.min();\n    const max = this.max();\n    const filter = this.dateFilter();\n\n    if (min && this.dateAdapter.compareDate(date, min) < 0) {\n      return false;\n    }\n    if (max && this.dateAdapter.compareDate(date, max) > 0) {\n      return false;\n    }\n    if (filter && !filter(date)) {\n      return false;\n    }\n    return true;\n  }\n\n  private formatDate(date: D): string {\n    return this.dateAdapter.format(date, 'long');\n  }\n\n  private announce(message: string): void {\n    this.liveAnnouncement.set(message);\n  }\n}\n","/**\n * Datepicker components public API.\n */\n\n// Types\nexport type {\n  DateFormatPreset,\n  DatepickerPanelWidth,\n  DatepickerSize,\n  DatepickerVariant,\n  DatepickerState,\n  DatepickerFooterConfig,\n  DateRangeValue,\n} from './datepicker.types';\n\nexport {\n  createDateRangeValue,\n  generateDatepickerId,\n} from './datepicker.types';\n\n// Variants\nexport {\n  datepickerTriggerVariants,\n  datepickerDisabledVariants,\n  datepickerInputVariants,\n  datepickerIconVariants,\n  datepickerClearVariants,\n  datepickerPanelVariants,\n  datepickerFooterVariants,\n  datepickerFooterButtonVariants,\n  datepickerRangeSeparatorVariants,\n} from './datepicker.variants';\n\nexport type {\n  DatepickerTriggerVariants,\n  DatepickerDisabledVariants,\n  DatepickerInputVariants,\n  DatepickerIconVariants,\n  DatepickerClearVariants,\n  DatepickerPanelVariants,\n  DatepickerFooterVariants,\n  DatepickerFooterButtonVariants,\n  DatepickerRangeSeparatorVariants,\n} from './datepicker.variants';\n\n// Components\nexport { ComDatepicker } from './datepicker.component';\nexport { ComDateRangePicker } from './date-range-picker.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DEFAULT_POSITIONS"],"mappings":"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"}