ngx-com 0.0.21 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +137 -33
  2. package/fesm2022/ngx-com-components-alert.mjs +21 -11
  3. package/fesm2022/ngx-com-components-alert.mjs.map +1 -1
  4. package/fesm2022/ngx-com-components-avatar.mjs +9 -7
  5. package/fesm2022/ngx-com-components-avatar.mjs.map +1 -1
  6. package/fesm2022/ngx-com-components-button.mjs +1 -1
  7. package/fesm2022/ngx-com-components-button.mjs.map +1 -1
  8. package/fesm2022/ngx-com-components-calendar.mjs +27 -3112
  9. package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
  10. package/fesm2022/ngx-com-components-card.mjs +8 -8
  11. package/fesm2022/ngx-com-components-card.mjs.map +1 -1
  12. package/fesm2022/ngx-com-components-carousel.mjs +16 -4
  13. package/fesm2022/ngx-com-components-carousel.mjs.map +1 -1
  14. package/fesm2022/ngx-com-components-checkbox.mjs +1 -1
  15. package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
  16. package/fesm2022/ngx-com-components-code-block.mjs +9 -9
  17. package/fesm2022/ngx-com-components-code-block.mjs.map +1 -1
  18. package/fesm2022/ngx-com-components-collapsible.mjs +15 -13
  19. package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
  20. package/fesm2022/ngx-com-components-confirm.mjs +4 -4
  21. package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
  22. package/fesm2022/ngx-com-components-datepicker.mjs +2334 -0
  23. package/fesm2022/ngx-com-components-datepicker.mjs.map +1 -0
  24. package/fesm2022/ngx-com-components-dialog.mjs +47 -45
  25. package/fesm2022/ngx-com-components-dialog.mjs.map +1 -1
  26. package/fesm2022/ngx-com-components-dropdown.mjs +446 -340
  27. package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
  28. package/fesm2022/ngx-com-components-empty-state.mjs +5 -3
  29. package/fesm2022/ngx-com-components-empty-state.mjs.map +1 -1
  30. package/fesm2022/ngx-com-components-form-field.mjs +11 -6
  31. package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
  32. package/fesm2022/ngx-com-components-icon-lucide.mjs +41 -0
  33. package/fesm2022/ngx-com-components-icon-lucide.mjs.map +1 -0
  34. package/fesm2022/ngx-com-components-icon.mjs +89 -61
  35. package/fesm2022/ngx-com-components-icon.mjs.map +1 -1
  36. package/fesm2022/ngx-com-components-item.mjs +14 -4
  37. package/fesm2022/ngx-com-components-item.mjs.map +1 -1
  38. package/fesm2022/ngx-com-components-menu.mjs +61 -69
  39. package/fesm2022/ngx-com-components-menu.mjs.map +1 -1
  40. package/fesm2022/ngx-com-components-native-control.mjs +170 -0
  41. package/fesm2022/ngx-com-components-native-control.mjs.map +1 -0
  42. package/fesm2022/ngx-com-components-paginator.mjs +11 -3
  43. package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
  44. package/fesm2022/ngx-com-components-popover.mjs +58 -33
  45. package/fesm2022/ngx-com-components-popover.mjs.map +1 -1
  46. package/fesm2022/ngx-com-components-radio.mjs +4 -4
  47. package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
  48. package/fesm2022/ngx-com-components-segmented-control.mjs +6 -4
  49. package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
  50. package/fesm2022/ngx-com-components-sort.mjs +63 -57
  51. package/fesm2022/ngx-com-components-sort.mjs.map +1 -1
  52. package/fesm2022/ngx-com-components-spinner.mjs +6 -6
  53. package/fesm2022/ngx-com-components-spinner.mjs.map +1 -1
  54. package/fesm2022/ngx-com-components-switch.mjs +18 -9
  55. package/fesm2022/ngx-com-components-switch.mjs.map +1 -1
  56. package/fesm2022/ngx-com-components-table.mjs +23 -9
  57. package/fesm2022/ngx-com-components-table.mjs.map +1 -1
  58. package/fesm2022/ngx-com-components-tabs.mjs +81 -58
  59. package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
  60. package/fesm2022/ngx-com-components-timepicker.mjs +1048 -0
  61. package/fesm2022/ngx-com-components-timepicker.mjs.map +1 -0
  62. package/fesm2022/ngx-com-components-toast.mjs +18 -14
  63. package/fesm2022/ngx-com-components-toast.mjs.map +1 -1
  64. package/fesm2022/ngx-com-components-tooltip.mjs +5 -5
  65. package/fesm2022/ngx-com-components-tooltip.mjs.map +1 -1
  66. package/fesm2022/ngx-com-components.mjs +0 -13
  67. package/fesm2022/ngx-com-components.mjs.map +1 -1
  68. package/fesm2022/ngx-com-tokens.mjs +0 -8
  69. package/fesm2022/ngx-com-tokens.mjs.map +1 -1
  70. package/fesm2022/ngx-com-utils.mjs +13 -1
  71. package/fesm2022/ngx-com-utils.mjs.map +1 -1
  72. package/fesm2022/ngx-com.mjs +1 -1
  73. package/fesm2022/ngx-com.mjs.map +1 -1
  74. package/package.json +51 -8
  75. package/styles/animations.css +38 -0
  76. package/styles/candy.css +121 -0
  77. package/styles/dark.css +159 -0
  78. package/styles/forest.css +117 -0
  79. package/styles/ocean.css +117 -0
  80. package/styles/themes.css +7 -0
  81. package/styles/tokens.css +277 -0
  82. package/styles/utilities.css +16 -0
  83. package/types/ngx-com-components-alert.d.ts +14 -4
  84. package/types/ngx-com-components-avatar.d.ts +2 -0
  85. package/types/ngx-com-components-calendar.d.ts +3 -747
  86. package/types/ngx-com-components-card.d.ts +2 -2
  87. package/types/ngx-com-components-carousel.d.ts +11 -1
  88. package/types/ngx-com-components-code-block.d.ts +4 -4
  89. package/types/ngx-com-components-collapsible.d.ts +10 -2
  90. package/types/ngx-com-components-confirm.d.ts +2 -2
  91. package/types/ngx-com-components-datepicker.d.ts +623 -0
  92. package/types/ngx-com-components-dialog.d.ts +5 -2
  93. package/types/ngx-com-components-dropdown.d.ts +22 -4
  94. package/types/ngx-com-components-empty-state.d.ts +2 -0
  95. package/types/ngx-com-components-form-field.d.ts +4 -1
  96. package/types/ngx-com-components-icon-lucide.d.ts +32 -0
  97. package/types/ngx-com-components-icon.d.ts +49 -35
  98. package/types/ngx-com-components-item.d.ts +12 -2
  99. package/types/ngx-com-components-menu.d.ts +38 -38
  100. package/types/ngx-com-components-native-control.d.ts +99 -0
  101. package/types/ngx-com-components-paginator.d.ts +2 -0
  102. package/types/ngx-com-components-popover.d.ts +19 -12
  103. package/types/ngx-com-components-segmented-control.d.ts +3 -1
  104. package/types/ngx-com-components-sort.d.ts +13 -10
  105. package/types/ngx-com-components-switch.d.ts +7 -2
  106. package/types/ngx-com-components-table.d.ts +16 -2
  107. package/types/ngx-com-components-tabs.d.ts +46 -34
  108. package/types/ngx-com-components-timepicker.d.ts +273 -0
  109. package/types/ngx-com-components-toast.d.ts +4 -2
  110. package/types/ngx-com-components-tooltip.d.ts +1 -1
  111. package/types/ngx-com-components.d.ts +6 -7
  112. package/types/ngx-com-tokens.d.ts +5 -3
  113. package/types/ngx-com-utils.d.ts +11 -1
  114. package/types/ngx-com.d.ts +1 -1
@@ -0,0 +1 @@
1
+ {"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()) {\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()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"close()\"\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 // ============ 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 /** 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 or time picker shown). */\n readonly effectiveKeepOpen: Signal<boolean> = computed(() => {\n return this.keepOpen() || this.showTimePicker();\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 }\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.createOverlay();\n this.isOpen.set(true);\n this.opened.emit();\n this.announce('Calendar opened');\n }\n\n /** Closes the datepicker panel. */\n close(): void {\n if (!this.isOpen()) {\n return;\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. */\n clear(event?: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n\n this.updateValue(null);\n this.announce('Date cleared');\n }\n\n /** Selects today's date. */\n selectToday(): void {\n const today = this.dateAdapter.today();\n this.updateValue(today);\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 if (this.showTimePicker()) {\n const currentValue = this.internalValue();\n if (currentValue) {\n const withTime = this.dateAdapter.setTime(\n date,\n this.dateAdapter.getHours(currentValue),\n this.dateAdapter.getMinutes(currentValue),\n this.dateAdapter.getSeconds(currentValue),\n );\n this.updateValue(withTime);\n } else {\n this.updateValue(date);\n }\n } else {\n this.updateValue(date);\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 this.updateValue(updated);\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 if (!inputValue.trim()) {\n // Empty input - clear if allowed\n if (this.hasValue()) {\n this.updateValue(null);\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 this.updateValue(parsed);\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()) {\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()) {\n <button\n type=\"button\"\n [class]=\"todayButtonClasses()\"\n (click)=\"close()\"\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 // ============ 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 /** 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 or time picker shown). */\n readonly effectiveKeepOpen: Signal<boolean> = computed(() => {\n return this.keepOpen() || this.showTimePicker();\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 }\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.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. */\n close(): void {\n if (!this.isOpen()) {\n return;\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. */\n clear(event?: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n\n this.updateValue(null);\n this.announce('Date range cleared');\n }\n\n /** Selects today's date as the start date. */\n selectToday(): void {\n const today = this.dateAdapter.today();\n const currentValue = this.internalValue();\n\n // Set today as start if no start, or as end if we have a start\n if (!currentValue?.start) {\n this.updateValue(createDateRangeValue(today, null));\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 this.updateValue(newRange);\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 this.updateValue(newValue);\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 this.updateValue(createDateRangeValue(updated, value?.end ?? null));\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 this.updateValue(createDateRangeValue(value?.start ?? null, updated));\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\n if (!inputValue.trim()) {\n // Clear start date\n if (currentValue?.start) {\n this.updateValue(createDateRangeValue(null, currentValue.end));\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 if (currentValue?.end && this.dateAdapter.compareDate(parsed, currentValue.end) > 0) {\n // Swap dates\n this.updateValue(createDateRangeValue(currentValue.end, parsed));\n } else {\n this.updateValue(createDateRangeValue(parsed, currentValue?.end ?? null));\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\n if (!inputValue.trim()) {\n // Clear end date\n if (currentValue?.end) {\n this.updateValue(createDateRangeValue(currentValue.start, null));\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 if (currentValue?.start && this.dateAdapter.compareDate(parsed, currentValue.start) < 0) {\n // Swap dates\n this.updateValue(createDateRangeValue(parsed, currentValue.start));\n } else {\n this.updateValue(createDateRangeValue(currentValue?.start ?? null, parsed));\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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"}
@@ -1,10 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, viewChild, signal, computed, ChangeDetectionStrategy, Component, Injector, DestroyRef, PLATFORM_ID, TemplateRef, Injectable, Directive, input } from '@angular/core';
2
+ import { inject, viewChild, signal, computed, ChangeDetectionStrategy, Component, InjectionToken, Injector, PLATFORM_ID, TemplateRef, Injectable, Directive, input } from '@angular/core';
3
3
  import { NgTemplateOutlet, NgComponentOutlet, DOCUMENT, isPlatformBrowser } from '@angular/common';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
4
  import { Overlay } from '@angular/cdk/overlay';
6
5
  import { ComponentPortal } from '@angular/cdk/portal';
7
- import { filter } from 'rxjs/operators';
6
+ import { filter, takeUntil } from 'rxjs/operators';
8
7
  import { Subject, Observable } from 'rxjs';
9
8
  import { FocusTrapFactory } from '@angular/cdk/a11y';
10
9
  import { cva } from 'class-variance-authority';
@@ -63,43 +62,6 @@ class ComDialogRef {
63
62
  }
64
63
  }
65
64
 
66
- /**
67
- * Injection token for data passed to a dialog component.
68
- *
69
- * @example
70
- * ```typescript
71
- * readonly data = inject<MyData>(COM_DIALOG_DATA);
72
- * ```
73
- */
74
- const COM_DIALOG_DATA = new InjectionToken('COM_DIALOG_DATA');
75
- /**
76
- * Injection token for global dialog configuration defaults.
77
- * @internal
78
- */
79
- const COM_DIALOG_CONFIG = new InjectionToken('COM_DIALOG_CONFIG');
80
- /**
81
- * Provides global dialog configuration defaults.
82
- *
83
- * @example
84
- * ```typescript
85
- * bootstrapApplication(AppComponent, {
86
- * providers: [
87
- * provideComDialogConfig({ size: 'lg', hasBackdrop: true }),
88
- * ],
89
- * });
90
- * ```
91
- */
92
- function provideComDialogConfig(config) {
93
- return { provide: COM_DIALOG_CONFIG, useValue: config };
94
- }
95
-
96
- /**
97
- * Injection token allowing dialog directives to register their element IDs
98
- * with the container for ARIA binding.
99
- * @internal
100
- */
101
- const COM_DIALOG_CONTAINER_REF = new InjectionToken('COM_DIALOG_CONTAINER_REF');
102
-
103
65
  /**
104
66
  * CVA variants for the dialog backdrop.
105
67
  *
@@ -126,7 +88,7 @@ const dialogBackdropVariants = cva([
126
88
  * CVA variants for the dialog panel container.
127
89
  *
128
90
  * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`,
129
- * `--shadow-xl`, `--radius-overlay`
91
+ * `--shadow-dialog`, `--radius-overlay`
130
92
  */
131
93
  const dialogPanelVariants = cva([
132
94
  'com-dialog-panel',
@@ -142,7 +104,7 @@ const dialogPanelVariants = cva([
142
104
  'border-border',
143
105
  'bg-popover',
144
106
  'text-popover-foreground',
145
- 'shadow-xl',
107
+ 'shadow-dialog',
146
108
  'rounded-overlay',
147
109
  'outline-none',
148
110
  ], {
@@ -220,7 +182,7 @@ const ANIMATION_FALLBACK_MS = 200;
220
182
  *
221
183
  * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`,
222
184
  * `--color-foreground`, `--color-muted-foreground`, `--color-backdrop`,
223
- * `--shadow-xl`, `--radius-overlay`, `--color-ring`
185
+ * `--shadow-dialog`, `--radius-overlay`, `--color-ring`
224
186
  */
225
187
  class ComDialogContainerComponent {
226
188
  focusTrapFactory = inject(FocusTrapFactory);
@@ -401,6 +363,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
401
363
  `, imports: [NgTemplateOutlet, NgComponentOutlet], changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:contents}[data-state=open]{--tw-enter-opacity: 0;--tw-enter-scale: .95}[data-state=closed]{--tw-exit-opacity: 0;--tw-exit-scale: .95}@media(prefers-reduced-motion:reduce){[data-state=open],[data-state=closed]{animation:none}}\n"] }]
402
364
  }], propDecorators: { panelElement: [{ type: i0.ViewChild, args: ['panelElement', { isSignal: true }] }] } });
403
365
 
366
+ /**
367
+ * Injection token allowing dialog directives to register their element IDs
368
+ * with the container for ARIA binding.
369
+ * @internal
370
+ */
371
+ const COM_DIALOG_CONTAINER_REF = new InjectionToken('COM_DIALOG_CONTAINER_REF');
372
+
373
+ /**
374
+ * Injection token for data passed to a dialog component.
375
+ *
376
+ * @example
377
+ * ```typescript
378
+ * readonly data = inject<MyData>(COM_DIALOG_DATA);
379
+ * ```
380
+ */
381
+ const COM_DIALOG_DATA = new InjectionToken('COM_DIALOG_DATA');
382
+ /**
383
+ * Injection token for global dialog configuration defaults.
384
+ * @internal
385
+ */
386
+ const COM_DIALOG_CONFIG = new InjectionToken('COM_DIALOG_CONFIG');
387
+ /**
388
+ * Provides global dialog configuration defaults.
389
+ *
390
+ * @example
391
+ * ```typescript
392
+ * bootstrapApplication(AppComponent, {
393
+ * providers: [
394
+ * provideComDialogConfig({ size: 'lg', hasBackdrop: true }),
395
+ * ],
396
+ * });
397
+ * ```
398
+ */
399
+ function provideComDialogConfig(config) {
400
+ return { provide: COM_DIALOG_CONFIG, useValue: config };
401
+ }
402
+
404
403
  /** Default dialog configuration values. */
405
404
  const COM_DIALOG_DEFAULTS = {
406
405
  data: undefined,
@@ -434,7 +433,6 @@ const COM_DIALOG_DEFAULTS = {
434
433
  class ComDialog {
435
434
  overlay = inject(Overlay);
436
435
  injector = inject(Injector);
437
- destroyRef = inject(DestroyRef);
438
436
  platformId = inject(PLATFORM_ID);
439
437
  document = inject(DOCUMENT);
440
438
  globalConfig = inject(COM_DIALOG_CONFIG, { optional: true });
@@ -508,7 +506,7 @@ class ComDialog {
508
506
  // Subscribe to Escape key
509
507
  overlayRef
510
508
  .keydownEvents()
511
- .pipe(filter((event) => event.key === 'Escape'), takeUntilDestroyed(this.destroyRef))
509
+ .pipe(filter((event) => event.key === 'Escape'), takeUntil(dialogRef.afterClosed()))
512
510
  .subscribe((event) => {
513
511
  if (!resolvedConfig.disableClose) {
514
512
  event.preventDefault();
@@ -636,6 +634,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
636
634
  /**
637
635
  * Marks an element as the dialog actions area (footer with buttons).
638
636
  *
637
+ * @tokens none
638
+ *
639
639
  * @example
640
640
  * ```html
641
641
  * <div comDialogActions>
@@ -665,6 +665,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
665
665
  * Closes the nearest dialog when the host element is clicked.
666
666
  * Optionally passes a result value.
667
667
  *
668
+ * @tokens none
669
+ *
668
670
  * @example
669
671
  * ```html
670
672
  * <button comButton [comDialogClose]="false">Cancel</button>